Audio Phase 4d (AUDIO_FIDELITY F5): footStep is the authored CONTACT LEVEL

The binary's per-frame perf (disasm @0x4a9e80-0x4a9eb6 leg / @0x4aba86-
0x4abab9 body) computes footStep@0x394 = (jointlocal.y <= *footStepThreshold)
with the threshold pointer = SequenceController+0x20 = &ANI hdr[2] -- the
header word the engine's own AnimationInstance captures (JMOVER.cpp:1415)
and our SelectSequence skipped.  States 0/1 retain the value.

Port: SelectSequence captures hdr[2]; PerformAndWatch evaluates the contact
level per frame from the cached jointlocal root joint (leg channel drives
the pose); the 150 ms clip-transition pulse + decay are RETIRED (steps fired
at clip boundaries with a fixed width; clips whose root crosses twice or
never counted wrong).

Live verification (30s walk): the authored threshold decodes real
(-0.232 root height); rootY oscillates across it per stride (-0.26 contact /
-0.19 swing) with clean 0->1->0 transitions per leg state (5/6/7); 34
footfall deliveries at stride rate with per-stride varying gains.

Also closes F23(2): the 17 authored AnimationState trigger states fire
empirically -- the EngineShiftFwd/Rev heard during the gait dead-band hunt
WERE states 10/11/14/15; the runtime clip numbering is correct.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-16 14:16:14 -05:00
co-authored by Claude Opus 4.8
parent 9dcb4752de
commit 0e2401fb52
6 changed files with 62 additions and 38 deletions
+2 -1
View File
@@ -930,7 +930,8 @@ Mech::Mech(
collisionState.SetState(0); // NoCollisionState
collisionTemporaryState = 0;
footStep = 0; // FootStep pulse (audio trigger)
footStepDecay = 0;
footStepRootJoint = 0; // (F5) resolved on first contact eval
footStepRootResolved = 0;
fwdSpeedFiltered = 0.0f; // smoothed published velocity (see mech4 derive)
vertSpeedFiltered = 0.0f;
{ extern void *g_btFootStepAddr; g_btFootStepAddr = &footStep; } // DIAG: watcher-poll tracer target