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
|
||||
);
|
||||
|
||||
|
||||
@@ -100,6 +100,34 @@ class Joint; // engine skeleton node (JOINT.h); the twist target
|
||||
static Receiver::MessageHandlerSet MessageHandlers;
|
||||
static AttributeIndexSet AttributeIndex;
|
||||
|
||||
// (AUDIO_FIDELITY F16) the binary Torso attribute table [T1, rows
|
||||
// keyed on the SpeedOfTorsoHorizontal string]: dense ids 3..15
|
||||
// starting at MechSubsystem::NextAttributeID (HeatWatcher/PowerWatcher
|
||||
// publish nothing -- binary parity). The authored torso-twist servo
|
||||
// whir reads SpeedOfTorsoHorizontal (scale: pitch over 0.5..0.9 +
|
||||
// start/stop trigger at 0.25 -- the |yaw rate| the binary abs's) and
|
||||
// MotionState (match ==2 = limit-hit frame -> the stop clunk).
|
||||
enum {
|
||||
RotationOfTorsoVerticalAttributeID = MechSubsystem::NextAttributeID, // 3 @0x1E4 currentElevation
|
||||
RotationOfTorsoHorizontalAttributeID, // 4 @0x1D8 currentTwist
|
||||
HorizontalLimitRightAttributeID, // 5 @0x1DC
|
||||
HorizontalLimitLeftAttributeID, // 6 @0x1E0
|
||||
SpeedOfTorsoVerticalAttributeID, // 7 @0x1EC elevationVelocity (|rate|)
|
||||
SpeedOfTorsoHorizontalAttributeID, // 8 @0x1E8 twistVelocity (|rate|)
|
||||
StickPositionAttributeID, // 9 @0x1F0 analogTwistAxis
|
||||
TorsoUpAttributeID, // 10 @0x1F8 elevateUpCommand
|
||||
TorsoDownAttributeID, // 11 @0x1FC elevateDownCommand
|
||||
TorsoLeftAttributeID, // 12 @0x200 twistLeftCommand
|
||||
TorsoRightAttributeID, // 13 @0x204 twistRightCommand
|
||||
TorsoCenterAttributeID, // 14 @0x208 centerCommand
|
||||
MotionStateAttributeID, // 15 @0x20C statusFlags
|
||||
NextAttributeID
|
||||
};
|
||||
private:
|
||||
static const IndexEntry AttributePointers[];
|
||||
public:
|
||||
static AttributeIndexSet& GetAttributeIndex();
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// BT segment / base-state / joint compatibility shims.
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user