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
@@ -969,31 +969,19 @@ void
|
||||
speedDemand = -mech->reverseStrideLength * throttlePosition;
|
||||
}
|
||||
|
||||
// #75 + #78: the DRIVE SCALE. The authentic coupling attached the
|
||||
// myomers' speedEffect into the mech's mover, which multiplied every
|
||||
// attached feed into its drive; the 2007 engine's mover has no feed
|
||||
// roster, so the same multiplication is applied to the speed demand here.
|
||||
// speedEffect is the wrapper's live 0..1 output (gear ratio, thermal
|
||||
// curve, 1 - zone damage); a mech with no Myomers drives at 1.0.
|
||||
// GIMP slowdown: the binary's real mechanism is the gimp gait machines
|
||||
// (FUN_004a5bf8/71f4/6344/7970) -- the LIVE demand is clamped to the wg
|
||||
// clip's speed (GimpLegClipFinished writes it back) and the limp cycle
|
||||
// cadence enforces it; an EXTRA multiply here would double-slow. The
|
||||
// earlier T3 0.5 stand-in is therefore retired; BT_GIMP_SPEED remains as
|
||||
// an optional override multiplier (unset = 1.0 = authentic).
|
||||
// (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).)
|
||||
{
|
||||
extern Scalar BTMyomersDriveOf(void *subsystem);
|
||||
Scalar drive = 1.0f;
|
||||
int n = mech->GetSubsystemCount();
|
||||
for (int i = 2; i < n; ++i) // 0/1 = mapper + voltage bus
|
||||
{
|
||||
Scalar f = BTMyomersDriveOf(mech->GetSubsystem(i));
|
||||
if (f >= 0.0f) // -1 = not a Myomers
|
||||
{
|
||||
drive = f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
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)
|
||||
@@ -1005,17 +993,15 @@ void
|
||||
s_gimp = (e != 0 && *e != '\0') ? (Scalar)atof(e) : 1.0f; // 1.0 = authentic (clamp lives in the gimp SM)
|
||||
if (s_gimp < 0.0f || s_gimp > 1.0f) s_gimp = 1.0f;
|
||||
}
|
||||
drive *= s_gimp;
|
||||
speedDemand *= s_gimp;
|
||||
}
|
||||
speedDemand *= drive;
|
||||
if (getenv("BT_DRIVE_LOG"))
|
||||
{
|
||||
static float s_dAcc = 0.0f; s_dAcc += time_slice;
|
||||
if (s_dAcc >= 1.0f)
|
||||
{
|
||||
s_dAcc = 0.0f;
|
||||
DEBUG_STREAM << "[drive] n=" << n << " drive=" << drive
|
||||
<< " mm=" << mm << " dmd=" << speedDemand
|
||||
DEBUG_STREAM << "[drive] mm=" << mm << " dmd=" << speedDemand
|
||||
<< " mech=" << (int)mech->GetEntityID()
|
||||
<< " @" << (void *)mech << "\n" << std::flush;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user