#!/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})')