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:
co-authored by
Claude Fable 5
parent
29035028fd
commit
e430e474cb
+13
-3
@@ -178,9 +178,19 @@ transition, HUD all landed since P6): console egg → mesh → RunningMission on
|
||||
it to the owning master (the KB claims Dispatch reroutes; not yet exercised with our STEP-6
|
||||
handler). The master takes real zone damage + runs its own death transition (task #42 placed the
|
||||
death dispatch victim-side — MP-correct by construction).
|
||||
3. **Victim visuals on the shooter's screen**: the wreck swap gates on zone/graphic state the
|
||||
REPLICANT copy may never see (zone damage may not replicate — only pose updates confirmed).
|
||||
Check DamageZone/subsystem state in the update stream; else replicate the death as an event.
|
||||
3. **Victim visuals on the shooter's screen** — PARTIALLY resolved (user-observed 2026-07-09): the
|
||||
wreck SWAP does appear on the killer's screen, but the death SINK/burial does not (the collapse+
|
||||
burial runs only in the owning pod's death transition). Fix path: transcribe the recovered
|
||||
Mech-level WriteUpdateRecord death/knockdown record types (5/6 — disasm preserved, task #51).
|
||||
3b. **Respawn cycle** (task #52): a dead player currently stays dead (and pre-gate could ghost-drive
|
||||
the wreck — fixed: the drive input zeroes on IsMechDestroyed, input-only so the collapse still
|
||||
plays). The authentic respawn (user recollection: a BLUE WHIRLWIND recovers the dead mech, then a
|
||||
re-drop) — scouting: no whirlwind strings in the exe; BTL4.RES type-12 `*int.scp` = per-mech INTRO
|
||||
(arrival/drop) scripts but they are BINARY ref-records {ver, off, size, refCount, refIds} pointing
|
||||
at other resources (not text like the type-13 explosion scripts); `adrop` (id 1994) sits in the
|
||||
MAP type (14). The machinery: death detection (BTPlayer) → recovery/drop effect → AssignDropZone →
|
||||
Mech::Reset (@0049fb74, the respawn placement — its full subsystem-reset sweep is still a
|
||||
bring-up TODO) → roster ResetToInitialState.
|
||||
4. ✅ **Cross-pod beam visuals — DONE (task #51, 2026-07-09).** The keepalive theory needed one
|
||||
correction: `FUN_0041c350` = (a) queue the LOCAL deferred beam-effect callback (@0x4bac0c) on the
|
||||
app+0x34 manager (our per-weapon render walk plays that role) AND (b) set the subsystem DIRTY bit —
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user