def save_maps(savedir, show_sprites=True, config=config): """ Draw as many maps as possible. """ crystal.cachably_parse_rom() for map_group_id in crystal.map_names.keys(): for map_id in crystal.map_names[map_group_id].keys(): if isinstance(map_id, int): image = save_map(map_group_id, map_id, savedir, show_sprites=show_sprites, config=config)
def draw_map(map_group_id, map_id, palettes, show_sprites=True, config=config): """ Makes a picture of a map. """ # extract data from the ROM crystal.cachably_parse_rom() map_header = crystal.map_names[map_group_id][map_id]["header_new"] second_map_header = map_header.second_map_header width = second_map_header.blockdata.width.byte height = second_map_header.blockdata.height.byte tileset_id = map_header.tileset.byte blockdata = read_map_blockdata(map_header) palette_map = read_palette_map(tileset_id, config=config) tileset_blocks = read_blocks(tileset_id, config=config) tileset_images = read_tiles(tileset_id, palette_map, palettes, config=config) map_image = Image.new("RGB", (width * tile_width * block_width, height * tile_height * block_height)) # draw each block on the map for block_num in xrange(len(blockdata)): block_x = block_num % width block_y = block_num / width block = blockdata[block_y * width + block_x] for (tile_num, tile) in enumerate(tileset_blocks[block]): # tile gfx are split in half to make vram mapping easier if tile >= 0x80: tile -= 0x20 tile_x = block_x * 32 + (tile_num % 4) * 8 tile_y = block_y * 32 + (tile_num / 4) * 8 tile_image = tileset_images[tile] map_image.paste(tile_image, (tile_x, tile_y)) # draw each sprite on the map draw_map_sprites(map_header, map_image, config=config) return map_image
def save_map(map_group_id, map_id, savedir, show_sprites=True, config=config): """ Makes a map and saves it to a file in savedir. """ # this could be moved into a decorator crystal.cachably_parse_rom() map_name = crystal.map_names[map_group_id][map_id]["label"] filename = "{name}.{ext}".format(name=map_name, ext="png") filepath = os.path.join(savedir, filename) palettes = read_palettes(config=config) print "Drawing {}".format(map_name) map_image = draw_map(map_group_id, map_id, palettes, show_sprites=show_sprites, config=config) map_image.save(filepath) return map_image