diff --git a/game/reconstructed/projweap.cpp b/game/reconstructed/projweap.cpp index b2a48f5..555a940 100644 --- a/game/reconstructed/projweap.cpp +++ b/game/reconstructed/projweap.cpp @@ -457,7 +457,17 @@ Logical if (!LiveFireEnabled()) // *(*(this+0xd0)+400)+0x25c return False; - if (heatLoad <= 0.0f) // this+0x184 (heat-active gate) + // BRING-UP: the reconstructed heat model holds currentTemperature at a constant ~77 + // (thermalMass is huge, so temp doesn't yet rise/fall with fire), which makes this + // heat-scaled jam roll fire spuriously EVERY shot -- and since JammedState clears only + // on ResetToInitialState, a weapon that jams STAYS jammed for the whole mission (you'd + // fire one salvo, then only lasers). The authentic rule is "jam risk scales with heat", + // so gate the roll on the weapon actually being in a degraded HEAT STATE (heatAlarm + // level >= 1) instead of the raw heatLoad. In bring-up the alarm stays 0 (temp << + // degradation threshold) -> weapons fire reliably; real jams return once the heat model + // drives true temps. (FOLLOW-UP: make JammedState recoverable via an unjam delay so + // even a genuine overheat jam clears.) + if (heatAlarm.GetLevel() < HeatSink::DegradationHeat) // was: if (heatLoad <= 0.0f) return False; Scalar p = (_DAT_004bc064 * currentTemperature) / failureTemperature; // 0.41 * temp/failTemp