Crusader_Decomp/tools/unkcoffs/unk_translate.py

73 lines
2 KiB
Python
Raw Permalink Normal View History

2026-03-26 00:37:17 +01:00
#!/usr/bin/env python
from struct import unpack
from collections import defaultdict
def print_compare(vals):
for ino, (v, i) in enumerate(zip(vals, intrinsics)):
print("%s: (Int%03X) %s" % (v, ino, i))
def load_vals(off_file):
f = open(off_file, "rb")
offsets = f.read()
nints = len(offsets)/4
ioff = unpack('i' * nints, offsets)
data = []
n = 0
for i in ioff:
seg = (i & 0xffff0000) >> 16
off = i & 0xffff
data.append((seg, off, n))
n = n + 1
return data
def main():
#new_data = load_vals("remorse_fr_UNKCOFF.DAT")
#old_data = load_vals("remorse_UNKCOFF.DAT")
#fn_names = open('rem_functions.txt').readlines()
new_data = load_vals("regret_demo_UNKCOFF.DAT")
old_data = load_vals("regret_UNKCOFF.DAT")
fn_names = open('reg_functions.txt').readlines()
seg_off = 0
fn_lookup = {(seg, off): n for seg, off, n in old_data}
used = { }
j = 0
for seg, off, n in new_data:
if n % 16 == 0:
print('// 0x%03X' % n)
x = None
if x is None:
x = fn_lookup.get((seg + seg_off, off))
if x is None:
x = fn_lookup.get((seg, off))
if x is None:
for i in range(-5, 5):
x = fn_lookup.get((seg + seg_off, off + i))
if x:
break
if x is None:
for i in range(-15, 15):
x = fn_lookup.get((seg + seg_off, off + i))
if x:
break
seg_pretty = 0x1000 + (seg - 1)*8
if x is None:
print('Intrinsic%03X %04x:%04x' % (n, seg_pretty, off))
else:
if x in used and used[x] != (seg_pretty, off):
print('** WARNING: %04x:%04x looked up to %s already used by %04x:%04x' %
(seg_pretty, off, fn_names[x].strip(), used[x][0], used[x][1]))
used[x] = (seg_pretty, off)
print('%-31s // Intrinsic%03X %04x:%04x' % (fn_names[x].strip() + ',', n, seg_pretty, off))
main()