RETRACTION + FIX: the myomer seek->speed coupling IS in the 4.10 binary --

restored byte-grounded; the morning's removal was export-gap blindness

Player testimony (Oracle, pod veteran: seek-4 humanoid = 182 kph -- the
manual's printed Super Charged figure; overheat = 'freezing up') forced a
re-audit of the morning's 'no dynamic myomer->speed feed' verdict.  The
verdict was WRONG: a raw-image capstone sweep for FPU reads of [reg+0x31C]
found the consumer inside the UN-EXPORTED master-perf region -- the same
decomp gap that hid the #93 crash block.  Decoded @0x4a9cf2-0x4a9da4 [T1]:

  per frame: MAX speedEffect@0x31C over the myomer chain (+0x7AC)
             -> mech+0x79C
             mapper->speedDemand@0x128 *= it        (the SPEED coupling)
             if |drive| <= 1e-4 (@0x4ab16c):
                 mapper->turnDemand@0x12C = 0       (the FREEZE)

Everything the manual + the veterans describe emerges: gear 4 rides
speedEffect ~1.43 into the RegisterMaxOutput gait cap (base x 1.4284 --
the two mechanisms interlock: 61.5 x 1.43 = 87.9 vs cap 87.8 measured) =
SUPERCHARGE; myomer heatFactor degradation slows you; overheat freezes
speed AND turn; damage slows (speedEffect carries 1-damage -- #75's
original premise was RIGHT and its 'falsified' close was wrong).

Restored in mechmppr.cpp, byte-grounded and better than the pre-removal
draft: MAX over the chain (was first-found), NO 1.0 clamp (the old clamp
ate the overdrive), turn-freeze included.  BTMyomersSpeedEffectOf
(unclamped) replaces the deleted BTMyomersDriveOf.

Verified live: healthy drive=1.0 (no speed change), collision-rattled
myomers drive 0.999 -> 0.892 -> 0.742 with demand scaling in lockstep
(61.5 -> 54.9 -> 45.7).

KB corrected in place (subsystems WAVE 6, pod-hardware manual audit
retraction, open-questions resolved) + NEW GOTCHA #21: export-gap
blindness -- 'no callers in the decomp' is not 'no callers in the
binary'; sweep the raw image for the operand pattern before declaring a
data path dead, and when a primary source disagrees with your decomp
sweep, suspect your evidence first.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019Zh7PTkFy4KwTzVighLR9J
This commit is contained in:
Joe DiPrima
2026-07-31 10:54:11 -05:00
co-authored by Claude Fable 5
parent 4704ab3d41
commit 905a4a86c0
6 changed files with 113 additions and 33 deletions
+44 -13
View File
@@ -969,19 +969,49 @@ void
speedDemand = -mech->reverseStrideLength * throttlePosition;
}
// (The myomer `speedDemand *= speedEffect` DRIVE SCALE is GONE -- myomer-
// system completion, 2026-07-31. It was an invention built on the
// ConnectToMover misattribution: the binary has NO dynamic myomer->speed
// coupling. AvailableOutput's only callers are RegisterMaxOutput (the
// assembly-time gait cap, now live via MyomersSimulation) and the ENG-page
// graph sampler; damaged-but-alive myomers heat faster and drop the power
// curve but do NOT slow the mech, and DESTROYED myomers KILL it (the
// authored vital flag + the #80 vital-crit death). GIMP slowdown: the
// binary's real mechanism is the gimp gait machines -- the LIVE demand is
// clamped to the wg clip's speed and the limp cadence enforces it;
// BT_GIMP_SPEED remains as an optional override multiplier (unset = 1.0 =
// authentic).)
// (History note: this block was briefly REMOVED on the morning of
// 2026-07-31 on the claim "the binary has NO dynamic myomer->speed
// coupling" -- an export-gap-blind conclusion, retracted the same day
// when the pod veterans testified seek 4 = 182 kph and the raw-image
// float-read sweep found the consumer inside the un-exported master-perf
// region. The restored form below is now BYTE-GROUNDED, and better than
// the pre-removal draft: MAX over the myomer chain (not first-found), NO
// 1.0 clamp (overdrive is real), and the turn-freeze at dead drive.)
{
// THE MYOMER DRIVE SCALE -- RESTORED + BYTE-GROUNDED (2026-07-31, the
// seek-audit correction). The morning's removal ("the binary has NO
// dynamic myomer->speed coupling") was EXPORT-GAP BLINDNESS: the
// master perf's un-exported region (@0x4a9cf2-0x4a9da4, raw capstone
// -- the same gap that hid the #93 crash block) walks the mech's
// MYOMER capability chain (+0x7AC) every frame, keeps the MAX
// speedEffect@0x31C in mech+0x79C, and MULTIPLIES the mapper's
// speedDemand@0x128 by it in place; when |max| <= 1e-4 (@0x4ab16c)
// it ALSO zeroes the mapper's turnDemand@0x12C -- dead/overheated
// myomers freeze BOTH speed and turn ("less than a minute at seek 4
// before overheating and freezing up" -- Oracle, who put pod seek-4
// humanoids at 182 kph: the manual's printed Super Charged figure).
// speedEffect = (gear/recGear) x heatFactor x (1 - damage), NO 1.0
// clamp: gear 4 rides ~1.43x demand into the RegisterMaxOutput gait
// cap (base x 1.4284) = SUPERCHARGE. [T1 disasm]
Scalar drive = 0.0f; // mech+0x79C accumulator
int myomers = 0;
extern Scalar BTMyomersSpeedEffectOf(void *subsystem); // myomers.cpp (-1 = not a Myomers)
int n = mech->GetSubsystemCount(); // chain-walk emulation (the
for (int i = 2; i < n; ++i) // +0x7AC fill is the SubProxy stub)
{
Scalar f = BTMyomersSpeedEffectOf(mech->GetSubsystem(i));
if (f >= -0.5f) // a Myomers (value may be 0)
{
++myomers;
if (f > drive) drive = f; // MAX over the chain (@0x4a9d20)
}
}
if (myomers > 0)
{
speedDemand *= drive; // @0x4a9d63: in-place demand scale
if (fabsf(drive) <= 1.0e-4f) // @0x4a9d89 vs _DAT_004ab16c
turnDemand = 0.0f; // @0x4a9d9e: mapper+0x12C -- the FREEZE
}
extern int BTMechGimpLevel(void *mech_v); // mechdmg.cpp (the TU-safe read)
int mm = BTMechGimpLevel(mech); // the gimp cell (see above)
if (mm == 3 || mm == 4)
@@ -1001,7 +1031,8 @@ void
if (s_dAcc >= 1.0f)
{
s_dAcc = 0.0f;
DEBUG_STREAM << "[drive] mm=" << mm << " dmd=" << speedDemand
DEBUG_STREAM << "[drive] drive=" << drive << " nMyo=" << myomers
<< " mm=" << mm << " dmd=" << speedDemand
<< " mech=" << (int)mech->GetEntityID()
<< " @" << (void *)mech << "\n" << std::flush;
}