Coolant-loop cross-check vs the 1995 manual: structure strongly faithful

Dumped each mech's subsystem->coolant-loop (BT_SPEC_LOG in mech4: walks
the roster once, resolves each subsystem's linked-condenser number via
BTCoolingLoopFrame) and diffed all 6 manual mechs' COOLANT LOOPS tables.

RESULT -- the structure survives the 4.0->4.10 gap remarkably well:
- BACKBONE identical on ALL 6: Generator A/B/C/D on loops 1/2/3/5,
  Sensors(our Avionics) on loop 2, Myomers on loop 5, LRMs on 1&3,
  autocannon on 4, big energy weapon on 6 -- exact match
- weapon LOADOUT identical on 5 of 6 (Thor/Vulture/MadCat/Owens/
  Blackhawk); Loki is the one full rework (4.0 PPCx2/AFC100/SRM6 ->
  4.10 AFC50x2/ER Medium x2/SRM4)
- the consistent 4.0->4.10 change is a small-laser REDISTRIBUTION: the
  2 ER Small Lasers moved off the sensor/heavy loops onto the energy
  loops 4&6 (Thor/MadCat/Vulture); Owens near-perfect (loops 1&3 exact)
- Loop 0 = correctly UNCOOLED infrastructure (condensers, reservoir,
  gyro, torso, HUD, ammo bins, ...) -- not a coolant loop

CONCLUSION: the coolant-loop reconstruction is faithful; every diff is
4.0->4.10 balance tuning, not a bug.  BT_SPEC_LOG retained.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-18 17:37:14 -05:00
co-authored by Claude Fable 5
parent f4cf1e631a
commit ff5260ce98
2 changed files with 42 additions and 0 deletions
+20
View File
@@ -149,6 +149,26 @@ NEW LEADS (manual describes, port lacks input/UI): **CROUCH** (button by the sec
EjectButton01_z*.wav), hot-box viewscreen framing (the deferred PNAME marker chain). Per-mech
stat tables = a systematic cross-check source for our streamed subsystem resources.
### Coolant-loop cross-check RESULT (2026-07-18) [T1] -- STRUCTURE strongly faithful
Dumped each mech's subsystem->loop (subsystem's linked-condenser number, `BTCoolingLoopFrame`)
and diffed vs the manual's COOLANT LOOPS tables. The 4.0->4.10 drift shows here too, but the
STRUCTURE is remarkably intact:
- **Backbone identical on ALL 6 mechs:** Generator A/B/C/D on loops 1/2/3/5, **Sensors** (our
"Avionics") on loop 2, **Myomers** on loop 5, LRMs on loops 1&3, autocannon on loop 4, the
large energy weapon on loop 6 -- match the manual exactly.
- **Weapon LOADOUT identical on 5 of 6** (Thor, Vulture, MadCat, Owens, Blackhawk carry the exact
same weapon set 4.0->4.10). **Loki is the one full rework** (4.0 PPC x2 / AFC100 / SRM6 / Medium
Laser -> 4.10 AFC50 x2 / ER Medium x2 / SRM4).
- **The consistent 4.0->4.10 change:** the small energy weapons were REDISTRIBUTED across loops --
the 2 ER Small Lasers moved off the sensor/heavy loops (4.0) onto the energy-weapon loops 4&6
(4.10) on Thor/MadCat/Vulture; SRM/laser placement reshuffled on Blackhawk. Owens is a
near-PERFECT match (loops 1&3 exact; only a 4.0 "second myomer set" on loop 2 is absent).
- **`Loop 0` = correctly UNCOOLED infrastructure** (condensers, reservoir, gyro, torso, HUD,
searchlight, thermal sight, ammo bins, message manager, mechtech, controls mapper) -- not a loop.
CONCLUSION: the coolant-loop reconstruction is faithful; every difference is 4.0->4.10 tuning
(loadout rework on Loki, small-laser redistribution elsewhere), NOT a bug. `BT_SPEC_LOG` (mech4)
re-dumps on demand.
## Key Relationships
- Renders: [[gauges-hud]] (the MFD surfaces), [[rendering]] (the main 3D view).
- Input: [[locomotion]] (the mapper).
+22
View File
@@ -2514,6 +2514,28 @@ void
AuthenticGroundAndCollide(dt, preMovePos);
}
// SPEC AUDIT (BT_SPEC_LOG): once, after all subsystems are built + linked,
// dump each subsystem -> coolant loop (BTCoolingLoopFrame resolves the
// linked condenser's number, the manual's "Loop N"). Diffs the per-mech
// COOLANT LOOPS table vs the 1995 manual (structural, less tuning-prone).
if (isPlayerMech && getenv("BT_SPEC_LOG"))
{
static int s_specDumped = 0;
if (!s_specDumped && dt > 0.0001f)
{
s_specDumped = 1;
extern int BTCoolingLoopFrame(void *subsystem);
for (int i = 0; i < GetSubsystemCount(); ++i)
{
Subsystem *s = GetSubsystem(i);
if (s == 0) continue;
DEBUG_STREAM << "[spec] loop " << BTCoolingLoopFrame(s)
<< " <- " << (s->GetName() ? s->GetName() : "?")
<< "\n" << std::flush;
}
}
}
if (isPlayerMech && dt > 0.0001f && dt < 0.5f) // ignore zero / huge (stall) slices
{
// --- VIRTUAL CONTROLS (dev keyboard -> the pod's analog inputs) --------