From 9f0a7c52dfc1a31a4428db0567c727a3b47f7d31 Mon Sep 17 00:00:00 2001 From: arcattack Date: Mon, 20 Jul 2026 22:19:04 -0500 Subject: [PATCH] Radar: drop the blip when a mech dies (restore the authentic interest-removal) Playtest: "after I destroyed the mech the red blip was still on my radar." The authentic engine adds/removes radar contacts through the interest feed (GaugeRenderer::NotifyOfNewInterestingEntity / NotifyOfBecomingUninterestingEntity), and the game decides what's a contact -- a dying mech becoming uninteresting is removed, so the blip drops. The port DROPPED that feed and rebuilds the radar grid every frame from EVERY dynamic mover (RebuildEntityGrid), so it never removed the dead one and the red blip lingered on the frozen wreck (the wreck stays as an entity by design; only its model sinks/buries). Fix: in RebuildEntityGrid, skip a destroyed/disabled mover (GetSimulationState() == 2 || 9 -- the movementMode wreck latch, unified with simulationState) so it leaves the moving/red-contact grid. Live movers unaffected; the blip drops on death. Verified (BT_MAP_LOG): the killed enemy (ent cls=0xbb9) is drawn ONCE at the death-transition frame (the 1-frame lag before movementMode latches to 9) then never again for the rest of the session, while the owner keeps drawing every cycle. Co-Authored-By: Claude Opus 4.8 --- engine/MUNGA/GAUGREND.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/engine/MUNGA/GAUGREND.cpp b/engine/MUNGA/GAUGREND.cpp index 1c2f6af..4548350 100644 --- a/engine/MUNGA/GAUGREND.cpp +++ b/engine/MUNGA/GAUGREND.cpp @@ -3643,7 +3643,18 @@ void while ((entity = master_iterator.ReadAndNext()) != NULL) { if (entity->IsDerivedFrom(*Mover::GetClassDerivations())) - movingEntities.Add(entity); + { + // DEAD-MECH RADAR DROP (2026-07-20): a destroyed/disabled mover + // (movementMode 2||9 == the wreck latch, unified with + // simulationState) is no longer a live sensor contact. The + // authentic engine removes it via the interest feed + // (NotifyOfBecomingUninterestingEntity); the port's per-frame + // grid-rebuild dropped that feed, so the red blip lingered on the + // frozen wreck after the kill. Skip it -> blip goes away on death. + unsigned st = entity->GetSimulationState(); + if (st != 2 && st != 9) + movingEntities.Add(entity); + } else staticEntities.Add(entity); } @@ -3655,7 +3666,11 @@ void while ((entity = replicant_iterator.ReadAndNext()) != NULL) { if (entity->IsDerivedFrom(*Mover::GetClassDerivations())) - movingEntities.Add(entity); + { + unsigned st = entity->GetSimulationState(); // dead-mech radar drop (see the master loop above) + if (st != 2 && st != 9) + movingEntities.Add(entity); + } else staticEntities.Add(entity); }