Task #32 (death collapse animation) resolved by decomp evidence -- BT 4.11 has NO collapse animation; the movementMode 5-8 fall latch (clips 0x1c-0x1f) is an engine-lineage vestige: (1) the clip-table loader FUN_004a80d4 fills slots 0x00-0x1b + 0x20 (bmp knockdown) and returns -- slots 0x1c-0x1f are never written; (2) mech+0x63c..0x648 appear in NO exported function; (3) no fall clip exists in the shipped 27-clip set; (4) firing the latch would bind resource id 0 -- a StaticAudioStream -- as keyframes. Authentic death modes are the FREEZE modes (IsDestroyed == mode 2||9), so UpdateDeathState now settles straight to 9 (was a [T3] mode-5 guess that would trip the garbage latch in the binary). The death READ = freeze + dnboom + ddthsmk smoke plume + destroyed skins + shutdown; the wreck stands. Also: damage-band effects orient toward the ATTACKER (impact frame) via lastInflictingID -- which was declared but never written (recon gap); now maintained by Mech::TakeDamageMessageHandler, unblocking the DamageZone LOD same-attacker redirect too. KB corrected + proofs recorded (combat-damage "Death SEQUENCE", open-questions). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
13 lines
509 B
Python
13 lines
509 B
Python
import struct
|
|
data = open(r'C:\git\bt411\content\BTL4.RES', 'rb').read()
|
|
labOnly, maxID = struct.unpack_from('<ii', data, 4)
|
|
offs = struct.unpack_from('<%dI' % maxID, data, 12)
|
|
print('maxID', maxID, 'first slots:', offs[:6])
|
|
for i, o in enumerate(offs[:8]):
|
|
if o == 0:
|
|
print('slot', i, 'EMPTY')
|
|
continue
|
|
rid, rt = struct.unpack_from('<ii', data, o)
|
|
nm = data[o + 8:o + 40].split(b'\0')[0].decode('ascii', 'replace')
|
|
print('slot %d -> id=%d type=%d name=%r' % (i, rid, rt, nm))
|