Heat: authentic 1e7-unit heat + the ambient radiator land (task #9)

- Emitters: heatPortion closed form = heatCostToFire x 1e7 x (charge/seekV)^2
  (PPC 1.1e8 -> +632K on its own sink); the missing projectile/missile heat
  adds (raw -- resources author pre-scaled 1e7 units).
- The bank's AMBIENT RADIATOR @4ae73c reconstructed (the system's ONLY heat
  exit; conductance x 0.1 x HeatSinkCount -- _DAT_004ae974 float80 = 0.1) +
  the link-attach guard corrected (skip = the 0xBBE bank, not Condenser; the
  inversion blocked condenser->bank links and closed the system).
- Constant corrections (all byte-verified float80s): coolant epsilons
  0.0025/0.003/1e-4 (was a single 1e-4 serving three sites);
  CoolantCapacityScale 0.05 (was 1.738).
- Verified: heat flows + exits; max-rate autofire overheats weapons into the
  authentic heatLoad range-cutout (thermal spam unsustainable by design).
- KNOWN REMAINING: linked-sink routing scrambled (heat pools in Condenser1;
  authored map says PPC->C4/C6) -- the heat-stream offset audit, filed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-11 16:21:37 -05:00
co-authored by Claude Fable 5
parent fd055281a8
commit 4ed2bbc293
8 changed files with 224 additions and 17 deletions
+13 -5
View File
@@ -201,11 +201,19 @@ void
damagePortion = (damageFraction * energyTotal * kDamageScale)
* chargeRatio * chargeRatio; // 0x44c
}
// Heat stays on the bring-up scale until the heat-calibration audit [T3]:
// the authentic heatPortion is heatCostToFire x 1e7 energy units (the
// missile path already feeds that scale raw); switching the emitters too
// is the heat audit's call, not the damage economy's.
heatPortion = energy - damageFraction * energy; // 0x450
// THE AUTHENTIC HEAT (task #9; the calibration audit verified the whole
// HeatSink chain is 1e7-unit-native and formula-exact): the closed form
// mirroring the damage fix -- heatPortion = (1 - dF) x energyTotal x
// (charge/seekV)^2 = heatCostToFire x 1e7 at full charge (PPC = 1.1e8 ->
// +632 K on its own 174000-mass sink, conducting to the 1.39e6 bank;
// authored thresholds 77 start / 1000 degradation / 2000 failure).
{
Scalar vRecH = seekVoltage[seekVoltageRecommendedIndex];
Scalar chargeRatioH = (vRecH > 0.0f) ? (currentLevel / vRecH) : 1.0f;
heatPortion = (1.0f - damageFraction) * energyTotal
* chargeRatioH * chargeRatioH; // 0x450
}
(void)energy;
// dump the heat portion into our INHERITED thermal accumulator if heatable/online.
// E5: pendingHeat (HeatSink @0x1C8) is the field the heat sim absorbs each frame