BT410 5.3.129: shot-up muscles slow the mech -- the mobility scan lands and the mobilityScale [T1] retires

The master perf's opening scan maxes the myomer chain's speedEffect into
the mobility scale and applies it straight to the pilot's command cells:
the throttle is multiplied by it, and a scale inside the 1e-4 deadzone
zeroes the turn outright -- a mech with dead muscles cannot even pivot.
It is the same cell the duck driver already read as "the legs still work",
so that gate stops being a constant.

THE CHAIN IDENTITY IS NOW PROVEN RATHER THAN INFERRED.  My 5.3.122 note
pinned mech+0x7ac to Myomers "by adjacency to the string pool", which
nearly went wrong: the very cell the scan reads, +0x31c, is a MechWeapon
trigger over in the weapon TU.  The decisive evidence is arithmetic --
the Myomers cap-raise reads seekVoltage at +0x330 indexed by
maxSeekVoltageIndex at +0x32c, and walking our own member order backwards
from there lands speedEffect exactly on +0x31c.

The ctor's myomer sweep also carries the other half: walking the chain is
what sets the "I computed my own top speed" flag, so a mech WITH myomers
broadcasts its cap and one without adopts the streamed value.

Safe by construction against the obvious hazard: the mapper reassigns its
demands from scratch in InterpretControls, which ticks before the mech's
performance, so multiplying its cell in place cannot compound frame to
frame.

Soak: [mobility] scale 1 over 1 myomers on an undamaged bhk1 -- throttle
unscaled, drive unchanged, zero faults.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-08-10 00:56:55 -05:00
co-authored by Claude Fable 5
parent 79aba77309
commit 3141e9fda4
5 changed files with 162 additions and 2 deletions
+18
View File
@@ -169,6 +169,24 @@
Scalar
GetTurnDemand() const { Check(this); return turnDemand; }
//
// The master perf writes the mobility scale straight into the
// mapper's command cells (binary @0x4a9d5d: throttle *= scale, and
// a scale inside the 1e-4 deadzone zeroes the turn outright -- a
// mech with dead myomers cannot even pivot). Applied here so the
// cells stay owned by the mapper.
//
void
ApplyMobilityScale(Scalar scale)
{
Check(this);
speedDemand *= scale;
if (scale <= 0.0001f && scale >= -0.0001f)
{
turnDemand = 0.0f;
}
}
//
// The LIMP machines write the demand cell DOWN to the damaged side's
// speed cap (binary GimpLegClipFinished @004a7970 preamble writes