# ───────────────────────────────────────────────────────────────────────────── # arms_fire_lag.txt — j147: the ONE-TICK DETECTION LAG, four arms on the frozen # movement panel (tools/ab/panel_movement.txt). Two movers (tfil, strafe) x # {lag 0, lag 1}; the lag knob is the ONLY difference inside a mover pair. # # WHY. MEASURED LIVE (common_libs/tests/measure_fire_ghost_lag.py, 4 sessions, # 1777 matched ghost spawns): the server dispatches a turn's fire AFTER our # go() for that same turn, so the energy drop of a turn-T shot first reaches our # scan at turn T+1 (our bot tick T). A bullet takes its FIRST step during the # turn it is fired, so by then the true bullet is already `speed` px (11..20 px, # one whole bullet step) downrange and the arrival deadline is a full tick short. # Both movers place the ghost at the SCANNED enemy position, i.e. exactly where # the bullet was born: the whole ghost trajectory is the true one shifted one # turn later. The measured ghost-vs-observer displacement is 19.1 px mean / # 22.0 p90 (tfil) and 16.1 / 21.8 (strafe), deadline error 0.99 / 0.77 ticks. # With TR_FIRE_LAG=1 the displacement falls to 5.4 / 9.0 px (the residue is the # ENEMY's own scan staleness, <= 8 px) and the deadline error to 0.06 ticks. # # `TR_FIRE_LAG` default 0 = today's behaviour byte for byte, so arm 1 and arm 3 # ARE the shipped movers. # # Pre-registered in docs/movement_campaign.md ("Batch 8 — the fire-detection # lag") BEFORE any of these battles ran. References: `tfil_off`, `strafe_off`. # # Format: name | ENV=value ENV=value | label # ───────────────────────────────────────────────────────────────────────────── # 1. tfil as shipped (the reference for arm 2). tfil_off | TR_MOVEMENT=tfil | today's tfil, the ghost is born at the scanned enemy (reference) # 2. tfil with the measured lag back-dated at spawn. tfil_lag1 | TR_MOVEMENT=tfil TR_FIRE_LAG=1 | tfil, every detected fire back-dated one bullet step # 3. strafe as shipped (the reference for arm 4). strafe_off | TR_MOVEMENT=strafe | today's strafe, the ghost is born at the scanned enemy (reference) # 4. strafe with the measured lag back-dated at spawn. strafe_lag1 | TR_MOVEMENT=strafe TR_FIRE_LAG=1 | strafe, every detected fire back-dated one bullet step