def output_at_dungeon_tiles(fn: str, common_at: CommonAt, pal: Dpla): print("Outputting dungeon AT as image.") img_bin = common_at.decompress() tiles = list(iter_bytes(img_bin, int(8 * 8))) # create a dummy tile map containing all the tiles tilemap = [] for i in range(0, len(tiles)): tilemap.append(TilemapEntry(i, False, False, 0, True)) out_img = to_pil(tilemap, tiles, [pal.get_palette_for_frame(0, 0)], 8, int(len(tiles) * 8 / 3), 4 * 8, tiling_width=1, tiling_height=1, bpp=8) # Alternate stategy: img_8bpp = img_bin #bytes(x for x in iter_bytes_4bit_le(img_bin)) mod = 16 * 4 channels = 1 mode = 'RGB' if channels == 3 else 'P' out_img = Image.frombuffer(mode, (int(len(img_8bpp) / mod / channels), mod), bytes(img_8bpp), 'raw', mode, 0, 1) if mode == 'P': out_img.putpalette(pal.get_palette_for_frame(0, 0)) os.makedirs(os.path.join(output_dir, 'raw_img'), exist_ok=True) with open(os.path.join(output_dir, 'raw_img', fn), 'wb') as f: f.write(img_bin) out_img.save(os.path.join(output_dir, fn + '.png'))
def output_at_water_tiles(fn: str, common_at: CommonAt, pal: Dpla): print("Outputting water AT as image.") img_bin = common_at.decompress() tiles = list(iter_bytes(img_bin, int(8 * 8 / 2))) # create a dummy tile map containing all the tiles tilemap = [] for i in range(0, len(tiles)): tilemap.append(TilemapEntry(i, False, False, 0, True)) out_img = to_pil(tilemap, tiles, [pal.get_palette_for_frame(0, 0)], 8, int(len(tiles) * 8 / 3), 4 * 8, tiling_width=1, tiling_height=1) os.makedirs(os.path.join(output_dir, 'raw_img'), exist_ok=True) with open(os.path.join(output_dir, 'raw_img', fn), 'wb') as f: f.write(img_bin) out_img.save(os.path.join(output_dir, fn + '.png'))
def serialize(cls, data: Dpla, **kwargs: OptionalKwargs) -> bytes: return data.sir0_serialize_parts()[0]
def deserialize(cls, data: bytes, **kwargs: OptionalKwargs) -> Dpla: return Dpla(data, 0)