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:
co-authored by
Claude Opus 4.8
parent
9dcb4752de
commit
0e2401fb52
@@ -262,24 +262,20 @@ void
|
||||
// knockdown/death (those get collision/fall audio, not a step). Raise the
|
||||
// Logical the FootStep AudioLogicalTrigger polls; IntegrateMotion decays it
|
||||
// back to 0 a few frames later so each step is a clean rising edge. [T2]
|
||||
if (state >= 1 && state <= 0x17)
|
||||
{
|
||||
footStep = 1;
|
||||
footStepDecay = 150; // ms: ~1.5 poll periods ON, OFF well before the next stride
|
||||
if (getenv("BT_AUDIO_LOG")) { static int s_fs=0; if (s_fs++<40)
|
||||
DEBUG_STREAM << "[audio] footstep pulse (clip " << state << ")\n" << std::flush; }
|
||||
|
||||
// (AUDIO_FIDELITY F19) the old STEP-INTENSITY SEND is GONE. Its
|
||||
// premise ("the mixer feed was lost game code") was wrong: the feed is
|
||||
// WHOLLY AUTHORED -- LocalAcceleration |linear| [0,10] -> ctl100 and
|
||||
// LocalVelocity |linear| [0,0.6] -> ctl101 scale watchers drive the
|
||||
// footstep volume mixer (0.4 base while moving + the per-stride
|
||||
// acceleration kick). The port's gap was never publishing
|
||||
// localAcceleration; mech4.cpp now derives it exactly as the binary
|
||||
// does (d(averaged velocity)/dt, part_012.c:15186-15195), and the
|
||||
// invented broadcast fought that live chain (it zeroed the sibling
|
||||
// input the authored scale had just written).
|
||||
}
|
||||
// (AUDIO_FIDELITY F5) the old per-transition footStep PULSE is GONE:
|
||||
// footStep is the authored CONTACT LEVEL, evaluated per frame in
|
||||
// Mech::PerformAndWatch from jointlocal.y vs the clip's authored
|
||||
// threshold (ANI hdr[2]) -- steps now fire at actual root-height
|
||||
// contact crossings, not at clip boundaries with a fixed width.
|
||||
// (F19) the old STEP-INTENSITY SEND is also GONE. Its premise ("the
|
||||
// mixer feed was lost game code") was wrong: the feed is WHOLLY
|
||||
// AUTHORED -- LocalAcceleration |linear| [0,10] -> ctl100 and
|
||||
// LocalVelocity |linear| [0,0.6] -> ctl101 scale watchers drive the
|
||||
// footstep volume mixer (0.4 base while moving + the per-stride
|
||||
// acceleration kick). The port's gap was never publishing
|
||||
// localAcceleration; mech4.cpp derives it exactly as the binary does
|
||||
// (d(averaged velocity)/dt, part_012.c:15186-15195), and the invented
|
||||
// broadcast fought that live chain.
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user