Crusader_Decomp/scripts/dump_channel_table_at.py
2026-04-12 14:45:08 +02:00

35 lines
999 B
Python

#!/usr/bin/env python3
import os
fn = os.path.join('binary','Crusader - No Remorse Weapons Main Ram.bin')
if not os.path.exists(fn):
print('file missing', fn); raise SystemExit(2)
with open(fn,'rb') as f:
data = f.read()
size = len(data)
base = 0x6466A
stride = 0x26
def read_name(defOff):
end = defOff + stride
s = ''
for i in range(defOff, min(end, size)):
c = data[i]
if 32 <= c <= 126:
s += chr(c)
else:
if len(s) >= 2:
return s
s = ''
return s
for tableStart in (0x64355, 0x64340, 0x64330):
print(f'\nDumping table @0x{tableStart:X}')
rec = 10
for ch in range(40):
idxOff = tableStart + ch*rec + 9
if idxOff >= size:
break
sel = data[idxOff]
defOff = base + sel*stride
name = read_name(defOff) if defOff < size else ''
print(f'chan {ch:02d}: sel=0x{sel:02X} ({sel}) -> def@0x{defOff:X} -> {name} (idxOff=0x{idxOff:X})')