BT410 5.3.116: the spectator camera direats -- BTCameraDirector reconstructed from a disassembly gap, and the donor's inverted pick caught

The two Performance bodies fell in a Ghidra gap (@004c11b3..@004c1408), so
BeABTDirector came straight off ndisasm of the shipped CODE section. The
verdict corrects the BT411 donor twice more: FUN_0049fb54 is not
'IsLiveMech' -- it is the mech DEATH-TRANSITION test (simulation state 2 or
9; its other callers strip update-record motion bits and halt motion
integration while it holds, and our own MovementMode ledger already said
so) -- and the donor's pick loop breaks on a DYING vehicle where the
binary's jz breaks on a LIVE one. The true 1995 behavior: the camera
lingers on its mech while the 30s timer runs, cuts away THE MOMENT the
followed mech starts dying, picks the first of four ranked players with a
live vehicle, and refreshes the lock during mission end. The 'BT-specific
0x15/0x34 track message' the port invented an engine substitute for IS the
engine's CameraShip::DirectionMessage -- ID 0x15 == Entity::NextMessageID,
0x34 bytes, byte-for-byte; the RP engine's own BeADirector source
(DIRECTOR.CPP survives) is the literal structural template BT overrode
(rank-0-only, 10s, no offset -> four ranks, 30s, (0,5,0) eye).

Mech::InDeathTransition lands in mech.cpp per the census (@0049fb54, 32
bytes). The ctor's replicant gate uses the binary's own flag test --
entity-side simulationFlags arrive live via the MakeMessage, unlike the
subsystem masters still waiting on the stream builders.

Stubs: 11 across 9 files (the 8 authoring CSS fns + the L4NET trio).
Pod-role soak clean; the director's live test rides the operator's
camera-egg / mission-review session.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-08-04 08:49:13 -05:00
co-authored by Claude Fable 5
parent 8c777e1e22
commit 454102ef35
3 changed files with 255 additions and 49 deletions
+14
View File
@@ -796,6 +796,20 @@ Mech::~Mech()
{
}
//
//#############################################################################
// InDeathTransition -- binary @0049fb54 (32 bytes): simulation state 2 or 9.
//#############################################################################
//
Logical
Mech::InDeathTransition(Entity *vehicle)
{
Check(vehicle);
return
vehicle->GetSimulationState() == 2 ||
vehicle->GetSimulationState() == 9;
}
//
//#############################################################################
// TakeDamageMessageHandler -- the Mech override of the Entity damage entry