def get_behavior_data(rom_contents, tileset_header, game='RS'): behavior_data_ptr = mapped.get_rom_addr(tileset_header['behavior_data_ptr']) t_type = tileset_header['tileset_type'] if t_type == 0: if game == 'RS' or game == 'EM': num_of_blocks = 512 else: num_of_blocks = 640 else: block_data_ptr = mapped.get_rom_addr(tileset_header['block_data_ptr']) num_of_blocks = (behavior_data_ptr - block_data_ptr) // 16 length = num_of_blocks*16 mem = rom_contents[behavior_data_ptr:behavior_data_ptr+num_of_blocks*4] return mem
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 = {} global_behavior = {} local_behavior = {} for tileset1, tileset2 in list(tilesets): t1_header = mapped.parse_tileset_header(rom_contents, tileset1, game_id) t2_header = mapped.parse_tileset_header(rom_contents, tileset2, game_id) pals1_ptr = mapped.get_rom_addr(t1_header["palettes_ptr"]) pals2_ptr = mapped.get_rom_addr(t2_header["palettes_ptr"]) pals = mapped.get_pals(rom_contents, game_id, pals1_ptr, pals2_ptr) imgs = mapped.load_tilesets(rom_contents, game_id, t1_header, t2_header, pals) # Check if the tileset has been rendered already if tileset1 not in global_blocks: print(hex(tileset1)) behavior_data1 = get_behavior_data(rom_contents, t1_header, game_id) global_behavior[tileset1] = behavior_data1 block_data_mem = mapped.get_block_data(rom_contents, t1_header, game_id) blocks_imgs = build_block_imgs( block_data_mem, imgs, pals, behavior_data1) global_blocks[tileset1] = blocks_imgs
for bank_n in range(len(banks)): print("Exporting bank", bank_n) 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) # Parse tile data tilemap_ptr = mapped.get_rom_addr(map_data_header['tilemap_ptr']) map_size = map_data_header['w'] * map_data_header['h'] * 2 map_mem = rom_contents[tilemap_ptr:tilemap_ptr+map_size] map_data = mapped.parse_map_mem(map_mem, map_data_header['h'], map_data_header['w']) # Parse tileset offsets and label global_t = map_data_header['global_tileset_ptr'] local_t = map_data_header['local_tileset_ptr'] label_index = map_header['label_index'] - 88 label = map_labels[label_index] # Parse events events_header = mapped.parse_events_header(rom_contents, map_header['event_data_ptr']) events = mapped.parse_events(rom_contents, events_header)