Audio Phase 4b (AUDIO_FIDELITY F16): the torso-twist servo whir -- Torso
publishes its real attribute table Recovered the binary Torso attribute table [T1]: dense ids 3..15 from MechSubsystem::NextAttributeID (HeatWatcher/PowerWatcher publish nothing -- binary parity), all 13 rows land on already-reconstructed members: RotationOfTorsoVertical/Horizontal @0x1E4/0x1D8, HorizontalLimitRight/Left @0x1DC/0x1E0, SpeedOfTorsoVertical/Horizontal @0x1EC/0x1E8 (the |rate| the binary abs's -- our derive already did), StickPosition @0x1F0, TorsoUp/Down/ Left/Right/Center @0x1F8..0x208, MotionState @0x20C (statusFlags; the binary writes 2 on the limit-hit frame -- the authored ==2 matcher is the twist-stop clunk, settling the audit's [T4] guess). Torso's AttributeIndex was default-constructed EMPTY -- TorsoTwistInt01/ Ext01/Stop01 were unreachable. Now the authored chain (pitch -200..+200 cents over twist speed 0.5..0.9, start/stop gate at 0.25, stop clunk on MotionState==2) drives them unchanged. Regression (25s): stable; all three bind real; **attrnull count = 0 -- every authored audio attribute in the game now binds a real member.** 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
cc2b109cc8
commit
21378ec132
@@ -143,11 +143,45 @@ Receiver::MessageHandlerSet
|
||||
Torso::AttributeIndexSet
|
||||
Torso::AttributeIndex;
|
||||
|
||||
// (AUDIO_FIDELITY F16) the real Torso attribute table, binary parity (dense
|
||||
// ids 3..15 from MechSubsystem::NextAttributeID; offsets are the binary's,
|
||||
// documented on the members). Un-deadens the torso-twist servo whir:
|
||||
// TorsoTwistInt01/Ext01 pitch/gate on SpeedOfTorsoHorizontal, the stop clunk
|
||||
// matches MotionState==2 (the limit-hit frame statusFlags already publishes).
|
||||
const Torso::IndexEntry
|
||||
Torso::AttributePointers[]=
|
||||
{
|
||||
ATTRIBUTE_ENTRY(Torso, RotationOfTorsoVertical, currentElevation), // 3 @0x1E4
|
||||
ATTRIBUTE_ENTRY(Torso, RotationOfTorsoHorizontal, currentTwist), // 4 @0x1D8
|
||||
ATTRIBUTE_ENTRY(Torso, HorizontalLimitRight, horizontalLimitRight), // 5 @0x1DC
|
||||
ATTRIBUTE_ENTRY(Torso, HorizontalLimitLeft, horizontalLimitLeft), // 6 @0x1E0
|
||||
ATTRIBUTE_ENTRY(Torso, SpeedOfTorsoVertical, elevationVelocity), // 7 @0x1EC
|
||||
ATTRIBUTE_ENTRY(Torso, SpeedOfTorsoHorizontal, twistVelocity), // 8 @0x1E8
|
||||
ATTRIBUTE_ENTRY(Torso, StickPosition, analogTwistAxis), // 9 @0x1F0
|
||||
ATTRIBUTE_ENTRY(Torso, TorsoUp, elevateUpCommand), // 10 @0x1F8
|
||||
ATTRIBUTE_ENTRY(Torso, TorsoDown, elevateDownCommand), // 11 @0x1FC
|
||||
ATTRIBUTE_ENTRY(Torso, TorsoLeft, twistLeftCommand), // 12 @0x200
|
||||
ATTRIBUTE_ENTRY(Torso, TorsoRight, twistRightCommand), // 13 @0x204
|
||||
ATTRIBUTE_ENTRY(Torso, TorsoCenter, centerCommand), // 14 @0x208
|
||||
ATTRIBUTE_ENTRY(Torso, MotionState, statusFlags) // 15 @0x20C
|
||||
};
|
||||
|
||||
Torso::AttributeIndexSet&
|
||||
Torso::GetAttributeIndex()
|
||||
{
|
||||
static Torso::AttributeIndexSet attributeIndex(
|
||||
ELEMENTS(Torso::AttributePointers),
|
||||
Torso::AttributePointers,
|
||||
MechSubsystem::GetAttributeIndex()
|
||||
);
|
||||
return attributeIndex;
|
||||
}
|
||||
|
||||
Torso::SharedData
|
||||
Torso::DefaultData(
|
||||
&Torso::ClassDerivations,
|
||||
Torso::MessageHandlers,
|
||||
Torso::AttributeIndex,
|
||||
Torso::GetAttributeIndex(),
|
||||
Torso::StateCount
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user