#!/usr/bin/env bash set -u export HOME=/sylph-home/re SDL_AUDIODRIVER=dummy DISPLAY=:98 export PYTHONPATH=/sylph-home/.local/lib/python3.12/site-packages SD="$(cd "$(dirname "$0")" && pwd)" SECS="${1:-180}"; EVERY="${2:-10}"; HUNT="${3:-1}" CFG=/tmp/nav-live.json "$SD/launch_mission.sh" fly || { echo "BOOT FAILED"; exit 1; } # The bind is intermittent and a failed bind means no pilot, no kills and a # completely uninformative run. Retry before giving up, and abort if it never # takes rather than silently flying an unattended craft. # entities2 self finds the player by MOTION between two samples, so a craft that # is sitting still at mission start is invisible and the bind fails -- three # times in a row on the run that added this retry. Nudge the throttle first so # there is something to see, then bind. BOUND=0 for try in 1 2 3; do python3 "$SD/pad.py" set "rt=1" >/dev/null 2>&1 || true sleep 3 python3 "$SD/pad.py" clear >/dev/null 2>&1 || true if python3 "$SD/entities2.py" self 0x130 "$CFG" >/dev/null 2>&1; then BOUND=1; break; fi echo "--- bind attempt $try failed, retrying"; sleep 5 done if [ "$BOUND" = 1 ]; then SYLPH_HUNT="$HUNT" SYLPH_KILL_TURRETS=1 SYLPH_KEEPOUT="${SYLPH_KEEPOUT:-1400}" SYLPH_HZ="${SYLPH_HZ:-8.0}" SYLPH_PREFER="${SYLPH_PREFER:-}" nohup python3 "$SD/pilot.py" "$CFG" "$SECS" \ /tmp/live-pilot.log 2>&1 & PILOT=$!; echo "--- pilot (SYLPH_HUNT=$HUNT)" else echo "BIND FAILED after 3 attempts -- aborting, an unattended run tests nothing"; exit 4; fi rm -f /tmp/ob_candidates.json # offsets are per-emulator-instance; never resume across launches python3 "$SD/ob_probe2.py" "$SECS" "$EVERY"; rc=$? [ -n "$PILOT" ] && kill "$PILOT" 2>/dev/null echo "LIVENESS DONE rc=$rc"