Death gate: a destroyed mech takes no pilot input (ghost-drive fix)

User report from 2-window play: after dying, the pilot could still steer the
wreck around invisibly.  Zero throttle/turn/fire and the forced harnesses at
the gBTDrive source when IsMechDestroyed() -- deliberately INPUT-only, so the
gait/animation machinery keeps running and the death collapse plays out.

Also recorded in the KB: the killer's screen shows the wreck SWAP but not the
death SINK (needs the Mech-level death/knockdown update records, disasm
preserved from task #51), and the respawn-cycle scouting (type-12 intro
scripts are binary ref-records; adrop; DropZone + Mech::Reset machinery) for
the recovery-whirlwind reconstruction (task #52).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-09 19:18:11 -05:00
co-authored by Claude Fable 5
parent 29035028fd
commit e430e474cb
2 changed files with 29 additions and 3 deletions
+16
View File
@@ -1487,6 +1487,22 @@ void
gBTDrive.turn = sStick;
}
// DEATH GATE (task #52): a DESTROYED mech takes no pilot input -- kill
// throttle/turn/fire and the forced harnesses at the source so the
// wreck can't be steered around invisibly ("ghost mode", user-reported
// from 2-window play). Deliberately INPUT-only: the gait/animation
// machinery below keeps running so the death collapse plays out and the
// wind-down settles; respawn is the recovery/drop cycle (task #52 open).
if (IsMechDestroyed())
{
gBTDrive.throttle = 0.0f;
gBTDrive.turn = 0.0f;
gBTDrive.fire = 0;
gBTDrive.fireForced = 0;
gBTDrive.forced = 0;
gBTLaserKey = gBTPPCKey = gBTMissileKey = 0;
}
float throttle = gBTDrive.forced ? gBTDrive.forcedThrottle : gBTDrive.throttle;
float turn = gBTDrive.forced ? 0.0f : gBTDrive.turn;