Spec cross-check vs the 1995 manual: reads CORRECT, numbers are 4.0-vs-4.10 drift

Audited our live streamed subsystem config against the manual's per-mech
stat sheets (new BT_SPEC_LOG dump: torso speed/limits, heat-sink count,
reservoir capacity, at subsystem ctor).

RESULT: structure + semantics align perfectly; the tuning NUMBERS
differ -- because the manual is Tesla 4.0 and our content is release
4.10.  Point-release balance drift, NOT a reconstruction bug:
- Owens + Blackhawk are the two fixed-torso mechs in BOTH (speed 0,
  limit ~0, torsoHorizontalEnabled=0); the other four twist-enabled --
  our reads correctly identify every case
- torso speed/limit + heat-sink count exist per-mech exactly as the
  manual documents; only the values were retuned 4.0->4.10 (e.g. torso
  speed MadCat 80->50, heat sinks Loki 38->15)
- reservoir coolantCapacity reads a flat 20 = the coolant THERMAL
  capacity (game units), NOT the manual's per-mech 'liters' (a
  display/flavor quantity with no single subsystem field) -- different
  measures, not a bug

CONCLUSION: do NOT retune content to the manual -- BTL4.RES is the
authentic 4.10 shipping data; the 4.0 manual's numbers are an earlier
pass.  The manual CONFIRMS our structural fidelity.

BT_SPEC_LOG retained for re-auditing.  Follow-up (structural, less
drift-prone): the per-mech coolant-loop weapon/generator assignments.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-18 17:28:43 -05:00
co-authored by Claude Fable 5
parent cb82d8c1d0
commit f4cf1e631a
2 changed files with 34 additions and 0 deletions
+16
View File
@@ -546,6 +546,14 @@ Reservoir::Reservoir(
// *this = &PTR_LAB_0050ecd4;
squirtEfficiency = 0.5f; // this[0x8b] @0x22C
thermalCapacity = subsystem_resource->coolantCapacity; // this[0x4a] @0x128 (coolantCapacity reuses thermalCapacity)
// SPEC AUDIT (BT_SPEC_LOG): streamed CoolantCapacity vs the manual's
// "Reservoir Size (Liters)".
if (getenv("BT_SPEC_LOG"))
{
DEBUG_STREAM << "[spec] reservoir: coolantCapacity="
<< subsystem_resource->coolantCapacity << "\n" << std::flush;
}
coolantSquirtMass = subsystem_resource->coolantSquirtMass; // this[0x89] @0x224 = res +0x100
coolantLevel = thermalCapacity; // this[0x4b] @0x12C
coolantFlowScale = 0.0f; // this[0x57] @0x15C (== "word57")
@@ -823,6 +831,14 @@ AggregateHeatSink::AggregateHeatSink(
heatSinkCount = subsystem_resource->heatSinkCount; // this[0x74] @0x1D0 = res +0xFC
ambientTemperature = 300.0f; // this[0x75] @0x1D4 (_DAT_004ae89c)
// SPEC AUDIT (BT_SPEC_LOG): the streamed HeatSinkCount vs the manual's
// "Number of Heat Sinks" per-mech stat.
if (getenv("BT_SPEC_LOG"))
{
DEBUG_STREAM << "[spec] heatsinks: count=" << heatSinkCount
<< "\n" << std::flush;
}
// task #9 (the ambient radiator lands): the binary ctor @4ae8d0 scales the
// bank's conductance by 0.1 x HeatSinkCount (_DAT_004ae974 float80 = 0.1
// byte-verified; madcat count 14 -> x1.4) and installs the RADIATOR
+18
View File
@@ -244,6 +244,24 @@ Torso::Torso(
elevationCenter = verticalLimitTop; // @0x228 = @0x220
elevationHalfBottom = verticalLimitBottom * 0.5f; // @0x22C (_DAT_004b6fbc)
// SPEC AUDIT (BT_SPEC_LOG, 2026-07-18): dump the streamed torso config so
// it can be diffed against the 1995 manual's per-mech stat sheet
// ("Torso speed (deg/sec)" / "Torso Limit (degrees)"). Values printed in
// DEGREES (the manual's units); horizontalRotationPerSecond IS deg/sec in
// the resource, the limits are stored in degrees pre-DegToRad.
if (getenv("BT_SPEC_LOG"))
{
DEBUG_STREAM << "[spec] torso: speed=" << r->horizontalRotationPerSecond
<< " deg/s limitL=" << r->horizontalLimitLeft
<< " limitR=" << r->horizontalLimitRight
<< " (arc=" << (r->horizontalLimitLeft - r->horizontalLimitRight)
<< ") vRate=" << r->verticalRotationPerSecond
<< " vTop=" << r->verticalLimitTop
<< " vBot=" << r->verticalLimitBottom
<< " hEnabled=" << (int)r->torsoHorizontalEnabled
<< "\n" << std::flush;
}
buttonRampActive = 0; // @0x268
buttonRamp = 0.0f;// @0x26C