Skip to content

Instantly share code, notes, and snippets.

@joshbodily
Created January 30, 2025 18:21
Show Gist options
  • Save joshbodily/de451749fe0593189a21a045cf9627c9 to your computer and use it in GitHub Desktop.
Save joshbodily/de451749fe0593189a21a045cf9627c9 to your computer and use it in GitHub Desktop.
Generate all Starfox models from ROM
import re
import os
def nybble_to_int(str):
return int(str.replace('$', ''), 16)
def byte_to_int(pair):
hi = nybble_to_int(pair[1])
lo = nybble_to_int(pair[0])
return (hi << 8) + lo
lines = []
with open('objects.txt') as f:
lines = f.readlines()
i = 0
models = []
for line in lines:
parts = re.split('\s+', line)[2:6]
addresses = parts[0].split(',')[0:5]
name = '_'.join(parts[1:])
name = re.sub(r'_$', '', name.replace(';', ''))
bank = nybble_to_int(addresses[2])
vert = 0x8000 * (bank - 1) + byte_to_int(addresses[0:2])
face = 0x8000 * (bank - 1) + byte_to_int(addresses[3:])
name = name if name else "Unknown_%d" % i
i = i + 1
if not bank == 0x00:
models.append( (name, vert, face) )
models = sorted(models, key=lambda tup: tup[0])
print("struct StarfoxModel {")
print(" const char name[32];")
print(" uint16_t vertAddress;")
print(" uint16_t faceAddress;")
print("};")
print("StarfoxModel starfoxModels = {")
for model in models:
print(" {\"%s\", 0x%X, 0x%X}," % model)
#os.system("bin/Release/sfxobjdump starfox.sfc -b models/%s %d %d" % (name, vert, face))
print("};")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment