def read_from_rom(self, rom):
        with EbCompressibleBlock() as block:
            # Read the tileset data
            block.from_compressed_block(
                block=rom, offset=from_snes_address(
                    read_asm_pointer(rom, TILESET_POINTER)
                )
            )
            self.tileset.from_block(block=block, offset=0, bpp=TILESET_BPP)

            # Read the arrangement data
            block.from_compressed_block(
                block=rom, offset=from_snes_address(
                    read_asm_pointer(rom, ARRANGEMENT_POINTER)
                )
            )
            self.arrangement.from_block(block=block, offset=0)

            # Read the palette data
            block.from_compressed_block(
                block=rom, offset=from_snes_address(
                    read_asm_pointer(rom, PALETTE_POINTER)
                )
            )
            self.palette.from_block(block=block, offset=0)
    def read_from_rom(self, rom):
        with EbCompressibleBlock() as block:
            # Read the tileset data
            block.from_compressed_block(
                block=rom, offset=from_snes_address(
                    read_asm_pointer(rom, TILESET_POINTER)
                )
            )
            self.tileset.from_block(block=block, offset=0, bpp=TILESET_BPP)

            # Read the arrangement data
            block.from_compressed_block(
                block=rom, offset=from_snes_address(
                    read_asm_pointer(rom, ARRANGEMENT_POINTER)
                )
            )
            self.arrangement.from_block(block=block, offset=0)

            # Read the palette data
            block.from_compressed_block(
                block=rom, offset=from_snes_address(
                    read_asm_pointer(rom, PALETTE_POINTER)
                )
            )
            self.palette.from_block(block=block, offset=0)
    def read_logos_from_rom(self, rom, logos, infos):
        for info, logo in zip(infos, logos):
            graphics_offset = from_snes_address(read_asm_pointer(rom, info.graphics_asm_pointer_offsets[0]))
            arrangement_offset = from_snes_address(read_asm_pointer(rom, info.arrangement_asm_pointer_offsets[0]))
            palette_offsets = [from_snes_address(read_asm_pointer(rom, x)) for x in info.palette_asm_pointer_offsets]

            logo.from_block(block=rom,
                            graphics_offset=graphics_offset,
                            arrangement_offset=arrangement_offset,
                            palette_offsets=palette_offsets)
 def read_town_map_icons_from_rom(self, rom):
     log.debug("Reading town map icons")
     graphics_offset = from_snes_address(read_asm_pointer(block=rom,
                                                          offset=TOWN_MAP_ICON_GRAPHICS_ASM_POINTER_OFFSET))
     palette_offset = from_snes_address(read_asm_pointer(block=rom,
                                                         offset=TOWN_MAP_ICON_PALETTE_ASM_POINTER_OFFSET))
     self.town_map_icons.from_block(block=rom,
                                    graphics_offset=graphics_offset,
                                    arrangement_offset=0,
                                    palette_offsets=[palette_offset])
 def read_town_map_icons_from_rom(self, rom):
     log.debug("Reading town map icons")
     graphics_offset = from_snes_address(read_asm_pointer(block=rom,
                                                          offset=TOWN_MAP_ICON_GRAPHICS_ASM_POINTER_OFFSET))
     palette_offset = from_snes_address(read_asm_pointer(block=rom,
                                                         offset=TOWN_MAP_ICON_PALETTE_ASM_POINTER_OFFSET))
     self.town_map_icons.from_block(block=rom,
                                    graphics_offset=graphics_offset,
                                    arrangement_offset=0,
                                    palette_offsets=[palette_offset])
    def read_logos_from_rom(self, rom, logos, infos):
        for info, logo in zip(infos, logos):
            graphics_offset = from_snes_address(read_asm_pointer(rom, info.graphics_asm_pointer_offsets[0]))
            arrangement_offset = from_snes_address(read_asm_pointer(rom, info.arrangement_asm_pointer_offsets[0]))
            palette_offsets = [from_snes_address(read_asm_pointer(rom, x)) for x in info.palette_asm_pointer_offsets]

            logo.from_block(block=rom,
                            graphics_offset=graphics_offset,
                            arrangement_offset=arrangement_offset,
                            palette_offsets=palette_offsets)
 def read_from_rom(self, rom):
     graphics_offset = from_snes_address(read_asm_pointer(
         block=rom, offset=GRAPHICS_ASM_POINTER_OFFSET))
     with EbCompressibleBlock() as compressed_block:
         compressed_block.from_compressed_block(block=rom, offset=graphics_offset)
         self.tileset.from_block(block=compressed_block, bpp=4)
     self.palette.from_block(block=rom, offset=PALETTE_OFFSET)
Beispiel #8
0
    def read_from_rom(self, rom):
        self.enemy_config_table.from_block(block=rom,
                                           offset=from_snes_address(ENEMY_CONFIGURATION_TABLE_DEFAULT_OFFSET))
        self.enemy_group_bg_table.from_block(block=rom,
                                             offset=from_snes_address(ENEMY_GROUP_BACKGROUND_TABLE_DEFAULT_OFFSET))

        # Read the sprites
        log.debug("Reading battle sprites")
        self.graphics_pointer_table.from_block(
            rom, from_snes_address(read_asm_pointer(block=rom, offset=GRAPHICS_POINTER_TABLE_ASM_POINTER_OFFSET)))
        self.battle_sprites = []
        for i in range(self.graphics_pointer_table.num_rows):
            with EbCompressibleBlock() as compressed_block:
                compressed_block.from_compressed_block(
                    block=rom,
                    offset=from_snes_address(self.graphics_pointer_table[i][0]))
                sprite = EbBattleSprite()
                sprite.from_block(block=compressed_block, offset=0, size=self.graphics_pointer_table[i][1])
                self.battle_sprites.append(sprite)

        # Determine how many palettes there are
        num_palettes = 0
        for i in range(self.enemy_config_table.num_rows):
            num_palettes = max(num_palettes, self.enemy_config_table[i][14])
        num_palettes += 1

        # Read the palettes
        log.debug("Reading palettes")
        palettes_offset = from_snes_address(read_asm_pointer(block=rom, offset=PALETTES_ASM_POINTER_OFFSET))
        self.palettes = []
        for i in range(num_palettes):
            palette = EbPalette(num_subpalettes=1, subpalette_length=16)
            palette.from_block(block=rom, offset=palettes_offset)
            self.palettes.append(palette)
            palettes_offset += palette.block_size()

        # Read the groups
        log.debug("Reading enemy groups")
        self.enemy_group_table.from_block(rom, from_snes_address(ENEMY_GROUP_TABLE_DEFAULT_OFFSET))
        self.enemy_groups = []
        for i in range(self.enemy_group_table.num_rows):
            group = []
            group_offset = from_snes_address(self.enemy_group_table[i][0])
            while rom[group_offset] != 0xff:
                group.append(EnemyGroupTableEntry.from_block(block=rom, offset=group_offset))
                group_offset += EnemyGroupTableEntry.size
            self.enemy_groups.append(group)
Beispiel #9
0
    def read_from_rom(self, rom):
        self.enemy_config_table.from_block(block=rom,
                                           offset=from_snes_address(ENEMY_CONFIGURATION_TABLE_DEFAULT_OFFSET))
        self.enemy_group_bg_table.from_block(block=rom,
                                             offset=from_snes_address(ENEMY_GROUP_BACKGROUND_TABLE_DEFAULT_OFFSET))

        # Read the sprites
        log.debug("Reading battle sprites")
        self.graphics_pointer_table.from_block(
            rom, from_snes_address(read_asm_pointer(block=rom, offset=GRAPHICS_POINTER_TABLE_ASM_POINTER_OFFSET)))
        self.battle_sprites = []
        for i in range(self.graphics_pointer_table.num_rows):
            with EbCompressibleBlock() as compressed_block:
                compressed_block.from_compressed_block(
                    block=rom,
                    offset=from_snes_address(self.graphics_pointer_table[i][0]))
                sprite = EbBattleSprite()
                sprite.from_block(block=compressed_block, offset=0, size=self.graphics_pointer_table[i][1])
                self.battle_sprites.append(sprite)

        # Determine how many palettes there are
        num_palettes = 0
        for i in range(self.enemy_config_table.num_rows):
            num_palettes = max(num_palettes, self.enemy_config_table[i][14])
        num_palettes += 1

        # Read the palettes
        log.debug("Reading palettes")
        palettes_offset = from_snes_address(read_asm_pointer(block=rom, offset=PALETTES_ASM_POINTER_OFFSET))
        self.palettes = []
        for i in range(num_palettes):
            palette = EbPalette(num_subpalettes=1, subpalette_length=16)
            palette.from_block(block=rom, offset=palettes_offset)
            self.palettes.append(palette)
            palettes_offset += palette.block_size()

        # Read the groups
        log.debug("Reading enemy groups")
        self.enemy_group_table.from_block(rom, from_snes_address(ENEMY_GROUP_TABLE_DEFAULT_OFFSET))
        self.enemy_groups = []
        for i in range(self.enemy_group_table.num_rows):
            group = []
            group_offset = from_snes_address(self.enemy_group_table[i][0])
            while rom[group_offset] != 0xff:
                group.append(EnemyGroupTableEntry.from_block(block=rom, offset=group_offset))
                group_offset += EnemyGroupTableEntry.size
            self.enemy_groups.append(group)
Beispiel #10
0
 def read_from_rom(self, rom):
     graphics_offset = from_snes_address(
         read_asm_pointer(block=rom, offset=GRAPHICS_ASM_POINTER_OFFSET))
     with EbCompressibleBlock() as compressed_block:
         compressed_block.from_compressed_block(block=rom,
                                                offset=graphics_offset)
         self.tileset.from_block(block=compressed_block, bpp=4)
     self.palette.from_block(block=rom, offset=PALETTE_OFFSET)
Beispiel #11
0
    def read_from_rom(self, rom):
        self.bg_table.from_block(block=rom, offset=from_snes_address(BACKGROUND_TABLE_OFFSET))
        self.scroll_table.from_block(block=rom, offset=from_snes_address(SCROLL_TABLE_OFFSET))
        self.distortion_table.from_block(block=rom, offset=from_snes_address(DISTORTION_TABLE_OFFSET))
        self.graphics_pointer_table.from_block(
            block=rom,
            offset=from_snes_address(read_asm_pointer(block=rom,
                                                      offset=GRAPHICS_POINTER_TABLE_ASM_POINTER_OFFSETS[0])))
        self.arrangement_pointer_table.from_block(
            block=rom,
            offset=from_snes_address(read_asm_pointer(block=rom,
                                                      offset=ARRANGEMENT_POINTER_TABLE_ASM_POINTER_OFFSETS[0])))
        self.palette_pointer_table.from_block(
            block=rom,
            offset=from_snes_address(read_asm_pointer(block=rom,
                                                      offset=PALETTE_POINTER_TABLE_ASM_POINTER_OFFSETS[0])))

        self.backgrounds = [None for i in range(self.graphics_pointer_table.num_rows)]
        self.palettes = [None for i in range(self.palette_pointer_table.num_rows)]
        for i in range(self.bg_table.num_rows):
            graphics_id = self.bg_table[i][0]
            color_depth = self.bg_table[i][2]
            if self.backgrounds[graphics_id] is None:
                # Max tiles used in rom: 421 (2bpp) 442 (4bpp)
                tileset = EbGraphicTileset(num_tiles=512, tile_width=8, tile_height=8)
                with EbCompressibleBlock() as compressed_block:
                    compressed_block.from_compressed_block(
                        block=rom,
                        offset=from_snes_address(self.graphics_pointer_table[graphics_id][0]))
                    tileset.from_block(compressed_block, offset=0, bpp=color_depth)

                arrangement = EbTileArrangement(width=32, height=32)
                with EbCompressibleBlock() as compressed_block:
                    compressed_block.from_compressed_block(
                        block=rom,
                        offset=from_snes_address(self.arrangement_pointer_table[graphics_id][0]))
                    arrangement.from_block(block=compressed_block, offset=0)

                self.backgrounds[graphics_id] = (tileset, color_depth, arrangement)
                
            palette_id = self.bg_table[i][1]
            if self.palettes[palette_id] is None:
                palette = EbPalette(num_subpalettes=1, subpalette_length=16)
                palette.from_block(block=rom, offset=from_snes_address(self.palette_pointer_table[palette_id][0]))
                self.palettes[palette_id] = palette
Beispiel #12
0
 def from_block(self, block, tileset_asm_pointer_offset, palette_offset):
     with EbCompressibleBlock() as compressed_block:
         compressed_block.from_compressed_block(
             block=block,
             offset=from_snes_address(
                 read_asm_pointer(block=block,
                                  offset=tileset_asm_pointer_offset)))
         self.tileset.from_block(block=compressed_block, bpp=2)
     self.palette.from_block(block=block, offset=palette_offset)
Beispiel #13
0
    def read_from_rom(self, rom):
        self.text = self.table_entry.from_block(
            rom,
            from_snes_address(
                read_asm_pointer(block=rom, offset=self.asm_pointer_offset)))

        for mode in DYNAMIC_CAST_NAME_MODES:
            if self.get_patch(mode, rom.type).is_applied(rom):
                self.mode = mode
                break
Beispiel #14
0
    def read_from_rom(self, rom):
        with EbCompressibleBlock() as compressed_block:
            compressed_block.from_compressed_block(
                block=rom,
                offset=from_snes_address(read_asm_pointer(rom, GRAPHICS_1_ASM_POINTER_OFFSET)))
            self.graphics_1.from_block(block=compressed_block, bpp=2)

        with EbCompressibleBlock() as compressed_block:
            compressed_block.from_compressed_block(
                block=rom,
                offset=from_snes_address(read_asm_pointer(rom, GRAPHICS_2_ASM_POINTER_OFFSET)))
            self.graphics_2.from_block(block=compressed_block, bpp=2)

        # Read palettes
        offset = FLAVOR_PALETTES_OFFSET
        for palette in self.flavor_palettes:
            palette.from_block(block=rom, offset=offset)
            offset += 64

        # Read names
        for asm_pointer_offset in FLAVOR_NAME_ASM_POINTER_OFFSETS:
            self.flavor_names[asm_pointer_offset] = FLAVOR_NAME_ENTRY.from_block(
                block=rom,
                offset=from_snes_address(read_asm_pointer(block=rom, offset=asm_pointer_offset)))
Beispiel #15
0
 def from_block(self, block, tileset_asm_pointer_offset, palette_offset):
     with EbCompressibleBlock() as compressed_block:
         compressed_block.from_compressed_block(block=block, offset=from_snes_address(
             read_asm_pointer(block=block, offset=tileset_asm_pointer_offset)))
         self.tileset.from_block(block=compressed_block, bpp=2)
     self.palette.from_block(block=block, offset=palette_offset)
Beispiel #16
0
 def read_from_rom(self, rom):
     pointer_table_offset = from_snes_address(
         read_asm_pointer(rom, self.POINTER_TABLE_ASM_POINTER_OFFSET))
     self.table.from_block(rom, pointer_table_offset)
Beispiel #17
0
 def read(self, block):
     return from_snes_address(read_asm_pointer(block, self.asm_pointer_loc))
Beispiel #18
0
def test_read_asm_pointer():
    block = Block()
    block.from_list([0xee, 0xee, 0x12, 0x34, 0xee, 0xee, 0xee, 0x56, 0x78])
    assert_equal(read_asm_pointer(block, 1), 0x78563412)
 def read_from_rom(self, rom):
     pointer_table_offset = from_snes_address(read_asm_pointer(rom, self.POINTER_TABLE_ASM_POINTER_OFFSET))
     self.table.from_block(rom, pointer_table_offset)
Beispiel #20
0
def test_read_asm_pointer():
    block = Block()
    block.from_list([0xee, 0xee, 0x12, 0x34, 0xee, 0xee, 0xee, 0x56, 0x78])
    assert_equal(read_asm_pointer(block, 1), 0x78563412)
Beispiel #21
0
    def read_from_rom(self, rom):
        self.bg_table.from_block(
            block=rom, offset=from_snes_address(BACKGROUND_TABLE_OFFSET))
        self.scroll_table.from_block(
            block=rom, offset=from_snes_address(SCROLL_TABLE_OFFSET))
        self.distortion_table.from_block(
            block=rom, offset=from_snes_address(DISTORTION_TABLE_OFFSET))
        self.graphics_pointer_table.from_block(
            block=rom,
            offset=from_snes_address(
                read_asm_pointer(
                    block=rom,
                    offset=GRAPHICS_POINTER_TABLE_ASM_POINTER_OFFSETS[0])))
        self.arrangement_pointer_table.from_block(
            block=rom,
            offset=from_snes_address(
                read_asm_pointer(
                    block=rom,
                    offset=ARRANGEMENT_POINTER_TABLE_ASM_POINTER_OFFSETS[0])))
        self.palette_pointer_table.from_block(
            block=rom,
            offset=from_snes_address(
                read_asm_pointer(
                    block=rom,
                    offset=PALETTE_POINTER_TABLE_ASM_POINTER_OFFSETS[0])))

        self.backgrounds = [
            None for i in range(self.graphics_pointer_table.num_rows)
        ]
        self.palettes = [
            None for i in range(self.palette_pointer_table.num_rows)
        ]
        for i in range(self.bg_table.num_rows):
            graphics_id = self.bg_table[i][0]
            color_depth = self.bg_table[i][2]
            if self.backgrounds[graphics_id] is None:
                # Max tiles used in rom: 421 (2bpp) 442 (4bpp)
                tileset = EbGraphicTileset(num_tiles=512,
                                           tile_width=8,
                                           tile_height=8)
                with EbCompressibleBlock() as compressed_block:
                    compressed_block.from_compressed_block(
                        block=rom,
                        offset=from_snes_address(
                            self.graphics_pointer_table[graphics_id][0]))
                    tileset.from_block(compressed_block,
                                       offset=0,
                                       bpp=color_depth)

                arrangement = EbTileArrangement(width=32, height=32)
                with EbCompressibleBlock() as compressed_block:
                    compressed_block.from_compressed_block(
                        block=rom,
                        offset=from_snes_address(
                            self.arrangement_pointer_table[graphics_id][0]))
                    arrangement.from_block(block=compressed_block, offset=0)

                self.backgrounds[graphics_id] = (tileset, color_depth,
                                                 arrangement)

            palette_id = self.bg_table[i][1]
            if self.palettes[palette_id] is None:
                palette = EbPalette(num_subpalettes=1, subpalette_length=16)
                palette.from_block(
                    block=rom,
                    offset=from_snes_address(
                        self.palette_pointer_table[palette_id][0]))
                self.palettes[palette_id] = palette
 def _decompress_block(rom, block, pointer):
     block.from_compressed_block(
         block=rom,
         offset=from_snes_address(read_asm_pointer(rom, pointer))
     )
Beispiel #23
0
 def read(self, block):
     return from_snes_address(read_asm_pointer(block, self.asm_pointer_loc))
 def _decompress_block(rom, block, pointer):
     block.from_compressed_block(block=rom,
                                 offset=from_snes_address(
                                     read_asm_pointer(rom, pointer)))
Beispiel #25
0
 def read_gfx_from_rom(self, rom, offset, gfx):
     gfx.from_block(block=rom,
                    graphics_offset=from_snes_address(
                        read_asm_pointer(block=rom, offset=offset)),
                    arrangement_offset=None,
                    palette_offsets=[CAST_GRAPHICS_PALETTE_OFFSET])