myomer system COMPLETE -- the 'WAVE 6 mover cutover' was a phantom built on
a misattribution; the authentic couplings are all live
THE CORRECTION [T1]: @004b9550/@004b95b8 ('ConnectToMover'/'Disconnect
FromMover') are MechWeapon::ConfigureMappables/ChooseButton -- their +0x31C
is the weapon TriggerState and **(mech+0x128) is the CONTROLS MAPPER's
button roster (the MECHWEAP.CPP assert string + the trigger-edge detector
@004b9608 sit adjacent in the image). The binary has NO dynamic myomer->
speed feed: AvailableOutput has exactly TWO callers in the whole image --
RegisterMaxOutput (assembly) and the SeekVoltageGraph sampler -- and
speedEffect@0x31C is a published GAUGE attribute.
The authentic myomer system (now fully live):
1. drive heat (#85, this morning);
2. VITAL death -- myomers are the only authored vital=1 subsystem
(BTL4.RES res+0x48 scan): destroying them kills the mech via the #80
vital-crit path (this is also the ram-death mechanism -- myomers are a
0.35-weight collision-rattle target);
3. the assembly-time gait cap: RegisterMaxOutput @004b8ef0 raises
mech+0x7A0 to AvailableOutput(top gear) = base x ~1.4284 -- now called
(idempotent max, per tick; the 0x358 layout lock leaves no latch room)
with real OwnerBaseSpeed/OwnerMaxSpeed bridges; the old per-frame
reverseSpeedMax2 heal that would have clobbered it is garbage-guarded;
4. the ENG-page power curve at correct absolute scale (real base speed);
5. electrical sourcing (low gears run on a browned-out generator).
REMOVED (inventions): the mechmppr `speedDemand *= speedEffect` demand
multiplier + BTMyomersDriveOf + the Myomers ConnectToMover/MoverAttach
family. Damaged-but-alive myomers heat faster and drop the power curve
but do NOT slow the mech (gitea #75's premise is falsified by the binary;
the real damage slowdown is the LEG-damage gimp gait). Seek gears change
heat/sourcing/graph -- never speed.
Verified live: a mech at myomer dmg=0.234 (speedEffect attr 0.766)
beelines at full commanded speed with dmgGain=1.234 heat; 0 faults.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019Zh7PTkFy4KwTzVighLR9J
This commit is contained in:
co-authored by
Claude Fable 5
parent
31552c0444
commit
cf8618bcb9
@@ -1636,6 +1636,30 @@ void BTMechMyomerMotionSample(void *mech_v,
|
||||
*gravity = (env != 0) ? (float)env->gravityConstant : 0.0f;
|
||||
}
|
||||
|
||||
// Myomer owner speed-cell bridges (myomer-system completion, 2026-07-31):
|
||||
// Mech+0x34C = the run-speed base the mapper multiplies demand by (port
|
||||
// member `reverseStrideLength` -- documented misnomer), the
|
||||
// base AvailableOutput scales by;
|
||||
// Mech+0x7A0 = the gait rise-CLAMP (port member `reverseSpeedMax2` --
|
||||
// misnomer) that Myomers::RegisterMaxOutput raises to
|
||||
// AvailableOutput(top gear) = base x ~1.4284.
|
||||
float BTMechRunSpeedBase(void *mech_v)
|
||||
{
|
||||
Mech *m = (Mech *)mech_v;
|
||||
return (m != 0) ? (float)m->reverseStrideLength : 0.0f;
|
||||
}
|
||||
float BTMechTopSpeedGet(void *mech_v)
|
||||
{
|
||||
Mech *m = (Mech *)mech_v;
|
||||
return (m != 0) ? (float)m->reverseSpeedMax2 : 0.0f;
|
||||
}
|
||||
void BTMechTopSpeedSet(void *mech_v, float v)
|
||||
{
|
||||
Mech *m = (Mech *)mech_v;
|
||||
if (m != 0)
|
||||
m->reverseSpeedMax2 = (Scalar)v;
|
||||
}
|
||||
|
||||
//###########################################################################
|
||||
// MechDeathHandler effect-spawn bridge (mechdmg.cpp calls this)
|
||||
//
|
||||
@@ -3944,10 +3968,13 @@ void
|
||||
// reverseSpeedMax2@0x7a0 is the run-cycle bodyCycleSpeed CLAMP (AdvanceBody
|
||||
// Animation case 12/13); LoadLocomotionClips does not set it -> it reads
|
||||
// 0xCDCDCDCD (-4.3e8) and the clamp clobbers bodyCycleSpeed -> the run cycle
|
||||
// explodes. Bring-up: clamp the run cadence to the run stride (reverseStride
|
||||
// Length, the case-12 divisor) so bodyCycleSpeed/reverseStrideLength ~ 1, like
|
||||
// walk. (The authentic value comes from the model/LoadLocomotionClips.)
|
||||
reverseSpeedMax2 = reverseStrideLength;
|
||||
// explodes. GARBAGE-GUARDED only (myomer completion 2026-07-31): the
|
||||
// authentic writer is Myomers::RegisterMaxOutput -- ctor zeroes it, each
|
||||
// myomer raises it to AvailableOutput(top gear) = base x ~1.4284 -- and the
|
||||
// old unconditional per-frame heal CLOBBERED that registration back to
|
||||
// base x 1.0 every frame. Heal only a value that is clearly uninit junk.
|
||||
if (reverseSpeedMax2 < 0.001f || reverseSpeedMax2 > 500.0f)
|
||||
reverseSpeedMax2 = reverseStrideLength;
|
||||
// Gait SELECTION by throttle: walk aims for walkStrideLength; run aims for
|
||||
// reverseSpeedMax (the run/reverse cap). Exceeding walkStrideLength makes the
|
||||
// walk handler transition "up" to the run cycle (state 11 -> 12/13) via the real
|
||||
|
||||
Reference in New Issue
Block a user