Respawn-reset audit: valve restore + peer smoke cleanup (both binary-grounded)

Operator reports audited vs the binary (full matrix in RESPAWN_REARM_PLAN
addendum):
- VALVES (real gap): Condenser reset @004ae534 was missing from the decomp
  export -- raw disasm shows it chains HEATSINK (coolant refill runs; the
  old body chained HeatableSubsystem per the stale TCP shard) then, respawn-
  side, resets valveState to detent 1 and restores massScale from
  refrigerationFactor.  Mech::Reset now also runs the binary's tail call
  (@0049f788 BTRecomputeCondenserValves) so flow fractions rebuild from the
  reset detents.  Bench: detent 5 -> death -> "[respawn] Condenser1 valve
  detent 5 -> 1".
- #129 SMOKE (real gap, peers-only): the replicant un-wreck edge rebuilt
  the model without the @004d0c14 per-entity effect cleanup, so the
  observer's last 10s wreck-plume window rode the teleport onto the fresh
  mech.  BTStopEntityPfx now runs on the edge; bench shows no plume line
  after any un-wreck until the next death.
- AUTHENTIC (no fix): weapon->generator taps persist (@004b0e6c only
  resolves the link) and MFD display/control modes persist (mapper vtables
  0050f45c/0051e440 slots 8-11 = plain root bodies, read from the exe).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Joe DiPrima
2026-08-04 16:14:10 -05:00
co-authored by Claude Fable 5
parent b6656e35c5
commit 26ab2fee3a
5 changed files with 101 additions and 11 deletions
+11
View File
@@ -2142,6 +2142,17 @@ void
((MechSubsystem *)s)->RespawnRepair(); // fresh-mech: zone + status
}
// --- coolant-valve redistribution: the binary Reset tail calls @0049f788
// after the sweep and before ForceUpdate -- the Condenser resets just
// put every valve back at detent 1 (heat.cpp @004ae534), and this
// rebuilds the per-loop flow fractions from those defaults. Without it
// the fractions keep the previous life's split (the operator-reported
// "valves survive a respawn"). [T1 @0049fb74 + raw @004ae534]
{
extern void BTRecomputeCondenserValves(Entity *owner);
BTRecomputeCondenserValves((Entity *)this);
}
// --- locomotion pre-run + interest gates (a reset master must tick) ---
SetPreRunFlag();
if (interestCount == 0) interestCount = 1;