mm/tools/overlayhelpers/colchkinfoinit.py

42 lines
1.3 KiB
Python
Executable File

#!/usr/bin/env python3
import struct
import argparse
from actor_symbols import resolve_symbol
def HexParse(s):
return int(s, 16)
def NameMass(info):
if info[-1] == 0xFE:
info[-1] = "MASS_HEAVY"
else:
if info[-1] == 0xFF:
info[-1] = "MASS_IMMOVABLE"
def main():
parser = argparse.ArgumentParser(description='Decompiles a ColChkInfoInit')
parser.add_argument('address', help='VRAM or VROM address of a ColChkInfoInit', type=HexParse)
parser.add_argument('type', help="Type: ColChkInfoInit or ColChkInfoInit2", choices=['ColChkInfoInit', 'ColChkInfoInit2'])
args = parser.parse_args()
file_path, file_offset = resolve_symbol(args.address)
with open(file_path, 'rb') as f:
filedata = f.read()
if args.type == "ColChkInfoInit":
info = list(struct.unpack(">Bx2hB", filedata[file_offset:file_offset+7]))
NameMass(info)
output="// colChkInfoInit\nstatic CollisionCheckInfoInit D_{0:08X} = {{ ".format(args.address) + ", ".join(map(str,info)) + "};"
else:
info = list(struct.unpack(">Bx3hB", filedata[file_offset:file_offset+9]))
NameMass(info)
output="// sColChkInfoInit\nstatic CollisionCheckInfoInit2 D_{0:08X} = {{ ".format(args.address) + ", ".join(map(str,info)) + "};"
print(output)
if __name__ == "__main__":
main()