#!/usr/bin/env bash # Run a real Tank Royale battle with a classic-Robocode-shim bot (the "subject") # against an adversary and dump the movement fixture + statistics. # # tools/robocode_shim/run_bridge_battle.sh [rounds] [outJsonl] # # The subject is the DrussGT bridge bot dir by default (legacy behaviour). Point # it at any other generated legacy bot directory with SHIM_BOTDIR: # # SHIM_BOTDIR=/tmp/tr_bots/Diamond \ # tools/robocode_shim/run_bridge_battle.sh 2 /tmp/diamond.jsonl # # Environment: # SHIM_BOTDIR subject bot dir; if set it is used as-is (not regenerated) # DRUSSGT_BOTDIR legacy alias for the DrussGT subject dir (regenerated) # SHIM_BOT_NAME subject name as reported in the battle (default: dir basename) # SHIM_DATA classic data dir for the subject; unset => fresh dir per battle # TR_EVENTS_OUT optional raw bullet-event sidecar # # Example: # tools/robocode_shim/run_bridge_battle.sh \ # /home/davide/Projects/tank-royale/sample-bots/java/build/archive/SpinBot 5 set -euo pipefail HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO="$(cd "$HERE/../.." && pwd)" ADVERSARY="${1:?usage: run_bridge_battle.sh [rounds] [outJsonl]}" ROUNDS="${2:-5}" OUT_JSONL="${3:-/tmp/tr_shim_$(basename "$ADVERSARY" | tr 'A-Z' 'a-z').jsonl}" RUNNER="${TR_RUNNER_JAR:-/home/davide/Projects/tank-royale/runner/examples/lib/robocode-tankroyale-runner.jar}" if [[ -n "${SHIM_BOTDIR:-}" ]]; then SUBJECT_BOTDIR="$SHIM_BOTDIR" [[ -d "$SUBJECT_BOTDIR" ]] || { echo "subject bot dir not found: $SUBJECT_BOTDIR" >&2; exit 1; } else # Legacy DrussGT path: regenerate the shared/overridden DrussGT bot dir. SUBJECT_BOTDIR="${DRUSSGT_BOTDIR:-/tmp/tr_bots/DrussGT}" export DRUSSGT_JAR="${DRUSSGT_JAR:-/tmp/drussgt/DrussGT.jar}" export DRUSSGT_DATA="${DRUSSGT_DATA:-/tmp/drussgt_bridge_data}" "$HERE/make_botdir.sh" "$SUBJECT_BOTDIR" >/dev/null fi SUBJECT_NAME="${SHIM_BOT_NAME:-$(basename "$SUBJECT_BOTDIR")}" EVENTS_ARGS=() if [[ -n "${TR_EVENTS_OUT:-}" ]]; then EVENTS_ARGS=(--events-out "$TR_EVENTS_OUT") fi java -cp "$HERE/out:$RUNNER" robocode_shim.TrBattleCapture \ --rounds "$ROUNDS" --out "$OUT_JSONL" \ --bot "$SUBJECT_BOTDIR" --bot "$ADVERSARY" \ --subject "$SUBJECT_NAME" --adversary "$(basename "$ADVERSARY")" \ "${EVENTS_ARGS[@]}" echo echo "=== movement statistics (TR, subject=$SUBJECT_NAME) ===" python3 "$REPO/tools/robocode_fixture_capture/analyze.py" "$OUT_JSONL"