示例#1
0
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)
示例#2
0
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)
示例#3
0
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")
示例#4
0
        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 = {}
示例#5
0
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()
示例#6
0
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)