mirror of
https://github.com/zeldaret/tmc
synced 2026-09-07 03:19:39 -04:00
Extract sprite frames
This commit is contained in:
@@ -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 != '':
|
||||
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user