diff --git a/tools/scripts/bindiff.py b/tools/scripts/bindiff.py deleted file mode 100755 index 0e8d73f..0000000 --- a/tools/scripts/bindiff.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python3 - -import subprocess -import tempfile -import sys -import os - -if __name__ == "__main__": - if len(sys.argv) < 3: - print('bindiff.py START END') - sys.exit(1) - - VERSION = 'fr' - start = int(sys.argv[1], 16) - end = int(sys.argv[2], 16) - len = end - start - - fd1, path1 = tempfile.mkstemp() - fd2, path2 = tempfile.mkstemp() - - target = subprocess.run(('hexdump', '-C', '-v', '-s', str(start), '-n', str(len), 'baserom.'+VERSION+'.z64'), capture_output=True) - current = subprocess.run(('hexdump', '-C', '-v', '-s', str(start), '-n', str(len), 'build/'+VERSION+'/dukenukemzerohour.z64'), capture_output=True) - - f1 = open(path1, 'wb') - f2 = open(path2, 'wb') - f1.write(target.stdout) - f2.write(current.stdout) - f1.close() - f2.close() - - out = subprocess.run(('diff', '-u', path1, path2), capture_output=True, text=True) - if out.stdout == '': - print('No diff') - else: - print(out.stdout) - - os.remove(path1) - os.remove(path2) \ No newline at end of file diff --git a/tools/scripts/extract_assets.py b/tools/scripts/extract_assets.py index 5565a44..1064c5c 100644 --- a/tools/scripts/extract_assets.py +++ b/tools/scripts/extract_assets.py @@ -2,6 +2,7 @@ from splat.scripts import split from n64img.image import CI4 +import argparse import operator import shutil import struct @@ -13,11 +14,13 @@ def get_segment(segname, segments): for segment in segments: if segment.name == segname: return segment + return None def get_subsegment(subsegname, segment): for subsegment in segment.subsegments: if subsegment.name == subsegname: return subsegment + return None def get_symbols_from_subsegment(subsegname, type, segment): symbols = [] @@ -36,6 +39,12 @@ def get_symbols_from_subsegment(subsegname, type, segment): break return symbols +def get_symbol(symbols, name): + for symbol in symbols: + if symbol.name == name: + return symbol + return None + class TileInfo: def __init__(self, data, num): self.num = num @@ -72,8 +81,10 @@ def extract_models(rom, path): symbols = get_symbols_from_subsegment('modelinfo', 'data', segment) models = [] + end = get_symbol(symbols, 'gModelList') + for symbol in symbols: - if symbol.vram_start < 0x800D52E0 and symbol.size == 0x30: + if symbol.vram_start < end.vram_start and symbol.size == 0x30: models.append(ModelInfo(rom[symbol.rom:symbol.rom_end], \ symbol.vram_start)) @@ -224,22 +235,6 @@ def extract_maps(rom, path): maps = sorted(maps, key=operator.attrgetter('rom_start')) - # Generate maps yaml info - #f = open(os.path.join(maps_dir, 'mapinfo.txt'), 'w') - #for map in maps: - # f.write(' - type: group\n') - # f.write(' dir: maps/map'+str(map.num)+'\n') - # f.write(' vram: 0\n') - # f.write(' start: 0x'+format(map.rom_start, '06X')+'\n') - # f.write(' subalign: 4\n') - # f.write(' subsegments:\n') - # f.write(' - [0x'+format(map.rom_start, '06X')+', bin, vertex]\n') - # f.write(' - [0x'+format(map.rom_start+map.wall_offset, '06X')+', bin, walls]\n') - # f.write(' - [0x'+format(map.rom_start+map.sector_offset, '06X')+', bin, sectors]\n') - # f.write(' - [0x'+format(map.rom_start+map.sprite_offset, '06X')+', bin, sprites]\n') - # f.write('\n') - #f.close() - # Create maps folder maps_dir = os.path.join(path, 'maps') os.mkdir(maps_dir) @@ -281,8 +276,10 @@ def extract_map(data, path): extract_map(sprites_data, os.path.join(map_dir, 'sprites.bin')) if __name__ == '__main__': - VERSION = 'us' - yaml = 'versions/'+VERSION+'/dukenukemzerohour.yaml' + parser = argparse.ArgumentParser() + parser.add_argument('-v', '--version', type=str, default='us', help='game version') + args = parser.parse_args() + yaml = 'versions/'+args.version+'/dukenukemzerohour.yaml' with open(yaml) as f: config = split.yaml.load(f.read(), Loader=split.yaml.SafeLoader) config['options']['base_path'] = '.' @@ -291,11 +288,11 @@ def extract_map(data, path): split.disassembler_instance.create_disassembler_instance(skip_version_check=True, splat_version='') split.symbols.initialize(all_segments) - f = open('baserom.'+VERSION+'.z64', 'rb') + f = open('baserom.'+args.version+'.z64', 'rb') rom_data = f.read() f.close() - path = os.path.join('extracted', VERSION) + path = os.path.join('extracted', args.version) shutil.rmtree(path, ignore_errors=True) os.makedirs(path, exist_ok=True)