def load_all_maps(w): rom, rom_data = w.rom_contents, w.rom_data banks = mapped.get_banks(rom, rom_data) for bank_n in range(len(banks)): maps = mapped.get_map_headers(rom, bank_n, banks) for map_n in range(len(maps)): print(bank_n, map_n) w.load_map(bank_n, map_n)
def main(): description = ("Dumps maps to pks scripts. " "It will output everything to directory map_dump, " "or selected bank or map.") parser = argparse.ArgumentParser(description=description) parser.add_argument('rom', help='path to ROM image file') parser.add_argument('bank', nargs='?', default=None, type=int, help='bank_n') parser.add_argument('map', nargs='?', default=None, type=int, help='map_n') parser.add_argument('--stdout', action='store_true', default=False, help='Output to stdout') parser.add_argument('--label', action='store_true', default=False, help='Replace everything with @labels') parser.add_argument('--verbose', action='store_true', default=False, help='List outputted files') args = parser.parse_args() if "rom" not in args: parser.print_help() return g = game.Game(args.rom) map_data = mapdata.MapData() if args.stdout: if args.bank is None or args.map is None: print("--stdout needs map and bank") return map_data.load(g, args.bank, args.map) print(mapped.export_script(g, map_data)) return wdir = 'map_dump' os.makedirs(wdir, exist_ok=True) def vprint(*vargs, **kwargs): if args.verbose: print(*vargs, **kwargs) os.chdir(wdir) file_list = [] fn = "banks.pks" vprint(fn) file_list.append(fn) with open(fn, "w") as f: f.write(mapped.export_banks_script(g, org=True, label=args.label)) banks = g.banks if args.bank is not None: banks = [args.bank] for bank_n, _ in enumerate(banks): fn = "bank_{}.pks".format(bank_n) vprint(fn) file_list.append(fn) with open(fn, "w") as f: org = "@bank_{}".format(bank_n) if args.label else True f.write( mapped.export_maps_script(g, bank_n, org=org, label=args.label)) bdir = str(bank_n) os.makedirs(bdir, exist_ok=True) map_ns = [ i for (i, _) in enumerate( mapped.get_map_headers(g.rom_contents, bank_n, g.banks)) ] if args.map is not None: map_ns = [args.map] for map_n in map_ns: fn = os.path.join(bdir, "map_{}.pks".format(map_n)) vprint(fn) try: map_data.load(g, bank_n, map_n) except: break file_list.append(fn) with open(fn, "w") as f: prefix = "@map_{}_{}_".format(bank_n, map_n) text = mapped.export_script(g, map_data, prefix, args.label) f.write(text) fn = "configs.pks" vprint(fn) file_list.append(fn) with open(fn, "w") as f: text = ("#define _TERMINATE_STRINGS\n" "#define _PRE_DYN_PADDING 0\n" "#define _POST_DYN_PADDING 0\n") f.write(text) fn = "include_list.pks" vprint(fn) with open(fn, "w") as f: text = "".join('#include "{}"\n'.format(fn) for fn in file_list) f.write(text)
print("imported things") app = QtWidgets.QApplication(sys.argv) print("created stupid app") window = mapped_gui.Window(no_argv=True) print("created stupid window") window.load_rom(sys.argv[1]) print("loaded stupid rom") print(window.game.name) bank_n = int(sys.argv[2]) map_n = int(sys.argv[3]) rom_contents = window.game.rom_contents rom_data = window.game.rom_data banks = mapped.get_banks(rom_contents, rom_data) map_header_ptr = mapped.get_map_headers(rom_contents, bank_n, banks)[map_n] map = mapped.parse_map_header(rom_contents, map_header_ptr) h = mapped.parse_map_data(rom_contents, map['map_data_ptr']) t1_header = mapped.parse_tileset_header( rom_contents, h['global_tileset_ptr'], #int(sys.argv[2], 16), window.game.name ) t2_header = mapped.parse_tileset_header( rom_contents, #int(sys.argv[3], 16), h['local_tileset_ptr'], window.game.name ) print("parsed stupid headers")
block_imgs.append(layer_imgs) return block_imgs with open(ROMPATH, "rb") as rom_file: rom_contents = rom_file.read() rom_code = get_rom_code(rom_contents) rom_offsets, game_id = get_rom_data(rom_code) banks = get_banks(rom_contents, rom_offsets) tilesets = set() offsets = {} # Loop over all maps and add their tileset offsets for bank_n in range(len(banks)): map_headers = get_map_headers(rom_contents, bank_n, banks) for map_n, map_header_address in enumerate(map_headers): # Last map, I haven't found a better way to handle this if bank_n >= 42 and map_n > 0: break map_header = parse_map_header(rom_contents, map_header_address) map_data_header = mapped.parse_map_data( rom_contents, map_header['map_data_ptr'], game_id) tilesets.add(( map_data_header['global_tileset_ptr'], map_data_header['local_tileset_ptr'])) global_blocks = {} local_blocks = {}
print("imported things") app = QtWidgets.QApplication(sys.argv) print("created stupid app") window = mapped_gui.Window(no_argv=True) print("created stupid window") window.load_rom(sys.argv[1]) print("loaded stupid rom") print(window.game.name) bank_n = int(sys.argv[2]) map_n = int(sys.argv[3]) rom_contents = window.game.rom_contents rom_data = window.game.rom_data banks = mapped.get_banks(rom_contents, rom_data) map_header_ptr = mapped.get_map_headers(rom_contents, bank_n, banks)[map_n] map = mapped.parse_map_header(rom_contents, map_header_ptr) h = mapped.parse_map_data(rom_contents, map['map_data_ptr']) t1_header = mapped.parse_tileset_header( rom_contents, h['global_tileset_ptr'], #int(sys.argv[2], 16), window.game.name) t2_header = mapped.parse_tileset_header( rom_contents, #int(sys.argv[3], 16), h['local_tileset_ptr'], window.game.name) print("parsed stupid headers") print("running real test now") x = time.time()
def main(): description = ( "Dumps maps to pks scripts. " "It will output everything to directory map_dump, " "or selected bank or map." ) parser = argparse.ArgumentParser(description=description) parser.add_argument('rom', help='path to ROM image file') parser.add_argument('bank', nargs='?', default=None, type=int, help='bank_n') parser.add_argument('map', nargs='?', default=None, type= int, help='map_n') parser.add_argument('--stdout', action='store_true', default=False, help='Output to stdout') parser.add_argument('--label', action='store_true', default=False, help='Replace everything with @labels') parser.add_argument('--verbose', action='store_true', default=False, help='List outputted files') args = parser.parse_args() if "rom" not in args: parser.print_help() return g = game.Game(args.rom) map_data = mapdata.MapData() if args.stdout: if args.bank is None or args.map is None: print("--stdout needs map and bank") return map_data.load(g, args.bank, args.map) print(mapped.export_script(g, map_data)) return wdir = 'map_dump' os.makedirs(wdir, exist_ok=True) def vprint(*vargs, **kwargs): if args.verbose: print(*vargs, **kwargs) os.chdir(wdir) file_list = [] fn = "banks.pks" vprint(fn) file_list.append(fn) with open(fn, "w") as f: f.write(mapped.export_banks_script(g, org=True, label=args.label)) banks = g.banks if args.bank is not None: banks = [args.bank] for bank_n, _ in enumerate(banks): fn = "bank_{}.pks".format(bank_n) vprint(fn) file_list.append(fn) with open(fn, "w") as f: org = "@bank_{}".format(bank_n) if args.label else True f.write(mapped.export_maps_script(g, bank_n, org=org, label=args.label)) bdir = str(bank_n) os.makedirs(bdir, exist_ok=True) map_ns = [i for (i, _) in enumerate( mapped.get_map_headers(g.rom_contents, bank_n, g.banks))] if args.map is not None: map_ns = [args.map] for map_n in map_ns: fn = os.path.join(bdir, "map_{}.pks".format(map_n)) vprint(fn) try: map_data.load(g, bank_n, map_n) except: break file_list.append(fn) with open(fn, "w") as f: prefix = "@map_{}_{}_".format(bank_n, map_n) text = mapped.export_script(g, map_data, prefix, args.label) f.write(text) fn = "configs.pks" vprint(fn) file_list.append(fn) with open(fn, "w") as f: text = ("#define _TERMINATE_STRINGS\n" "#define _PRE_DYN_PADDING 0\n" "#define _POST_DYN_PADDING 0\n") f.write(text) fn = "include_list.pks" vprint(fn) with open(fn, "w") as f: text = "".join('#include "{}"\n'.format(fn) for fn in file_list) f.write(text)