Extract sprite frames

This commit is contained in:
octorock
2021-10-31 23:25:07 +01:00
parent 1e4b2b1f32
commit 9c3ac2ecbf
12 changed files with 1355 additions and 7032 deletions
+4
View File
@@ -13,6 +13,7 @@ from assets.extra_frame_offsets import ExtraFrameOffsets
from assets.animation import Animation
from assets.exit_list import ExitList
from assets.entity_list import EntityList
from assets.sprite_frame import SpriteFrame
verbose = False
@@ -143,6 +144,9 @@ def extract_assets(variant, assets_folder):
elif mode == 'entity_list':
entity_list = EntityList(path, start, size, options)
entity_list.extract_binary(baserom)
elif mode == 'sprite_frames':
sprite_frames = SpriteFrame(path, start, size, options)
sprite_frames.extract_binary(baserom)
elif mode == 'unknown':
pass
elif mode != '':
+5
View File
@@ -49,3 +49,8 @@ class Reader:
val = self.data[self.cursor:self.cursor+4]
self.cursor += 4
return int.from_bytes(val, 'little')
def opt_param(name: str, default: str, value: str) -> str:
if value != default:
return f', {name}={value}'
return ''
@@ -0,0 +1,26 @@
from assets.base import BaseAsset, Reader, opt_param
class SpriteFrame(BaseAsset):
def __init__(self, path: str, addr: int, size: int, options: any) -> None:
super().__init__(path, addr, size, options)
def extract_binary(self, rom: bytearray) -> None:
reader = Reader(rom[self.addr:self.addr+self.size])
i = 0
lines = []
while reader.cursor < self.size:
num_gfx_tiles = reader.read_u8()
unk = reader.read_u8()
first_gfx_tile_index = reader.read_u16()
line = f'\tsprite_frame first_tile_index={hex(first_gfx_tile_index)}'
line += opt_param('num_tiles', '0', str(num_gfx_tiles))
line += opt_param('unknown', '0x0', hex(unk))
lines.append(line + '\n')
assert(unk == 0 or unk == 1 or unk == 0xff)
i += 1
assert(self.path.endswith('.bin'))
path = self.path[0:-4] + '.s'
with open(path, 'w') as file:
file.writelines(lines)