# ─────────────────────────────────────────────────────────────────────────────
# arms_movement_b1.txt — BATCH 1 of the movement campaign: isolate the
# RANGE / AGGRESSION axis. Five arms, ONE frozen binary, env vars only.
#
# Format:  name | ENV=value ENV=value | label
#
# Prior data this batch is built on (all DrussGT-only, all MEASURED):
#   * shipped `tfil` 293 dmg/run, 45/105 round wins, 10.40% incoming hit rate
#   * `strafe` (range 325)   250 dmg/run, 37/105 wins,  9.40% incoming  -> best
#     dodger, fewest wins: the 325px range preference may COST wins
#   * j107: drifting 25-30 px closer made damage AND wins worse, so "get
#     closer" is not the lever by itself
# This batch closes the caveat that all of that is DrussGT-only and decomposes
# the range-steering lever from the engine.
# ─────────────────────────────────────────────────────────────────────────────

# 1. the arm to beat: shipped default, no env at all
tfil | | shipped baseline (movement engine tfil, every knob at its default)

# 2. pure perpendicular strafe with the range steering DISABLED: tilt is zero
#    whenever |dist - StrafeRange| <= TOL, so a huge TOL makes `tilt` provably
#    0 every tick (and the approach-direction branch that depends on tiltMag is
#    skipped). This isolates the COST of the 325px preference: same engine, same
#    wall logic, no range steering at all.
strafe_notilt | TR_MOVEMENT=strafe TR_STRAFE_RANGE_TOL=999999 | strafe, range steering OFF (tilt always 0)

# 3. the current strafe default: range 325, tol 25, tilt max 15, gain 0.10
strafe_325 | TR_MOVEMENT=strafe | strafe default (range 325, tol 25, tilt 15/0.10)

# 4. the owner's own retuned mover: tfil semantics + retuned heat field
#    (CorridorHeat 10 = the safety threshold, WallHotness 15, WallRadiance 5,
#    BulletCore/Aura 20/10, commit 5 ticks) + range-weighted tile draw
#    (band 100-200, temp 0.4, K 60). Range steering ON, different heat field.
ring | TR_MOVEMENT=tfil_ring | tfil_ring (retuned heat field + range weighting 100-200)

# 5. the control for arm 4: TR_TFIL_RANGE_TEMP=0 makes the tile draw UNIFORM
#    again (the documented OFF path), so arm 5 = the retuned heat field with NO
#    range steering. (4) - (5) is therefore the range-weighting lever alone, on
#    a heat field that is already retuned. NOTE: there is no env knob for the
#    heat constants of the SHIPPED tfil mover (CorridorHeat/WallHotness are
#    Nim `const` there, only REPORTED by env_report.nim), so the suggested
#    "tfil with less saturated heat" arm cannot be built without a rebuild,
#    which this campaign forbids. This is the honest substitute.
ring_notemp | TR_MOVEMENT=tfil_ring TR_TFIL_RANGE_TEMP=0 | tfil_ring, range weighting OFF (temp 0)
