locomotion.md: correct the gimp-audio verdict -- the reverse-disabled voice is real and wired

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Joe DiPrima
2026-07-29 19:23:22 -05:00
co-authored by Claude Fable 5
parent 1671b7d4b2
commit 18766a167b
+19 -11
View File
@@ -303,17 +303,25 @@ gimped mechs too — the port relocated it into the NORMAL leg driver's Standing
stops running when the gimp driver takes over ("rotating statue"). The arming is now mirrored
in `AdvanceLegAnimationGimp`. No gimp-turn clip exists — a limping mech step-turns with the
normal `trn` clip [T1: the RES limp set is only wg/gg/gs].
**Gimp audio — RESOLVED 2026-07-29** (`ed84445`): there is NO "reverse disabled" voice line,
klaxon binding, or MFD text in the 1995 game — the binary's mapper has no gimp check (the
refusal is structural: the gimp machines have no reverse path) and no REVERSE/DISABLED string
exists in BTL4.RES; the five `*VOC` bank samples are mission-shell VO. The AUTHENTIC limp audio
is the authored **strained-servo component**: `Entity.AnimationState` state-watchers on the limp
entries 22/23 and stops 26/27 (+ walk-stands 8/9) start it, gain-scaled by `Entity.LocalVelocity`
(0..10 → 300..0). Verified live: `[statefire] trigState=23 old=7 new=23 ctl Start`
(BT_AUDIO_SPATIAL diagnostic). ⚠ Open hazard: one bench session had ZERO AnimationState watcher
fires (same build/conditions) — suspected watcher rebind miss around the initial mission respawn
(watchers possibly bound to a recreated mech's stale indicator). Watch for silent limps in the
field.
**Gimp audio — the "REVERSE DISABLED" voice IS REAL and now plays** (`1671b7d`; the earlier
"no voice exists" verdict here was WRONG — user/old-timer pushback found it). The authored mech
audio has **state watchers on `Entity.SimulationState == 3/4`** (the binary's one-cell mech+0x40
= the gimp level) that start a sequence playing notes 29, 16, **40** — two klaxon hits then
Warnings01 zone 8 (`Warnings01_z7.wav`, key 40-41) = the spoken "reverse disabled". It never
fired in the port because of the SAME cell split that hid the limp (graphicAlarm vs engine
simulationState, gotcha #23) — the audio watches the half the gimp system never wrote. Fixed:
mechdmg mirrors gimp 3/4 into `SetSimulationState` at the leg-half crossing (guarded vs
disabled/fall/dead), and `BT_GIMP_SAFE_BASE_READ` stops pre-gimp replication records from
stomping the cell (gimp is monotonic per life). Verified: `SetupPatch bank2 patch113 note=40`.
Layered under it: the `Entity.AnimationState` triggers on limp entries 22/23 + stops 26/27
(+ walk-stands 8/9) play **EngineShiftRev01** (downshift foley), velocity-gained — a separate
working layer (earlier mis-ID'd here as "the" limp audio). The earlier "watcher rebind"
hazard was a bench artifact (the harness gimped the mech before the audio object loaded —
impossible in play). ⚠ Open: an unidentified RAW writer (bypasses SetState; indicator-level
trap never fired while the value changed) resets the sim cell between damage events — under a
1 Hz bench harness it restarted the warning before the 1.8 s voice note; sporadic real-play
damage is unaffected. Needs a cdb write-watchpoint dig (candidates: a recon raw +0x2c-family
write or a struct copy spanning it).
Open: the load-time per-clip callbacks `PTR_LAB_0050d738/744` on the wg clips (uncarved LABs,
inert `Recon` placeholders in the port — likely footstep/cycle events, transitions work without
them).