mirror of https://github.com/zeldaret/tmc.git
Convert directly referenced entity lists
This commit is contained in:
parent
a924f2821b
commit
21e3e54c5f
|
@ -64,10 +64,50 @@
|
|||
.2byte 0x00, 0x00
|
||||
.endm
|
||||
|
||||
.macro entity_raw type:req, subtype:req, collision=0, unknown:req, paramA=0, paramB=0, x=0, y=0, paramC=0
|
||||
.byte \type | ((\collision) << 4)
|
||||
.byte \unknown
|
||||
.byte \subtype
|
||||
.byte \paramA
|
||||
.4byte \paramB
|
||||
.2byte \x
|
||||
.2byte \y
|
||||
.4byte \paramC
|
||||
.endm
|
||||
|
||||
.macro manager subtype:req, collision=0, unknown=0xf, paramA=0, paramB=0, x=0, y=0, paramC=0
|
||||
entity_raw type=9, subtype=\subtype, collision=\collision, unknown=\unknown, paramA=\paramA, paramB=\paramB, x=\x, y=\y, paramC=\paramC
|
||||
.endm
|
||||
|
||||
.macro object_raw subtype:req, collision=0, unknown=0xf, paramA=0, paramB=0, x=0, y=0, paramC=0
|
||||
entity_raw type=6, subtype=\subtype, collision=\collision, unknown=\unknown, paramA=\paramA, paramB=\paramB, x=\x, y=\y, paramC=\paramC
|
||||
.endm
|
||||
|
||||
.macro enemy_raw subtype:req, collision=0, unknown=0xf, paramA=0, paramB=0, x=0, y=0, paramC=0
|
||||
entity_raw type=3, subtype=\subtype, collision=\collision, unknown=\unknown, paramA=\paramA, paramB=\paramB, x=\x, y=\y, paramC=\paramC
|
||||
.endm
|
||||
|
||||
.macro npc_raw subtype:req, collision=0, unknown=0x4f, paramA=0, paramB=0, x=0, y=0, script:req
|
||||
entity_raw type=7, subtype=\subtype, collision=\collision, unknown=\unknown, paramA=\paramA, paramB=\paramB, x=\x, y=\y, paramC=\script
|
||||
.endm
|
||||
|
||||
.macro projectile_raw subtype:req, collision=0, unknown=0xf, paramA=0, paramB=0, x=0, y=0, paramC=0
|
||||
entity_raw type=4, subtype=\subtype, collision=\collision, unknown=\unknown, paramA=\paramA, paramB=\paramB, x=\x, y=\y, paramC=\paramC
|
||||
.endm
|
||||
|
||||
.macro entity_list_end
|
||||
.byte 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.endm
|
||||
|
||||
.macro tile_entity_list_end
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.endm
|
||||
|
||||
.macro tile_entity type:req, paramA=0, paramB=0, paramC=0, paramD=0
|
||||
.byte \type, \paramA
|
||||
.2byte \paramB, \paramC, \paramD
|
||||
.endm
|
||||
|
||||
.macro chest type, id, item, subnum, tileset_id
|
||||
.2byte (\map_x) << 4
|
||||
.2byte (\map_y) << 4
|
||||
|
|
10755
assets.json
10755
assets.json
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -610,7 +610,7 @@ script_080122EC:
|
|||
DoPostScriptAction 0x000b
|
||||
Call sub_08061FB0
|
||||
Call sub_08061F94
|
||||
LoadRoomEntityList gUnk_080F2758
|
||||
LoadRoomEntityList gUnk_additional2_HouseInteriors2_Percy
|
||||
DoPostScriptAction 0x0008
|
||||
Wait 0x003c
|
||||
PlaySound SFX_SECRET
|
||||
|
|
13
progress.py
13
progress.py
|
@ -56,18 +56,7 @@ def parse_map(non_matching_funcs):
|
|||
if dir == 'src':
|
||||
src_data += size
|
||||
elif dir == 'data':
|
||||
subdir = filepath.split('/')[1]
|
||||
#print(subdir)
|
||||
if subdir == 'sound':
|
||||
src_data += size
|
||||
elif subdir == 'map':
|
||||
src_data += size
|
||||
elif subdir == 'animations':
|
||||
src_data += size
|
||||
elif subdir == 'strings.o':
|
||||
src_data += size
|
||||
else:
|
||||
data += size
|
||||
data += size
|
||||
|
||||
elif line.startswith(' '):
|
||||
arr = line.split()
|
||||
|
|
2474
src/room.c
2474
src/room.c
File diff suppressed because it is too large
Load Diff
|
@ -12,6 +12,7 @@ from assets.frame_obj_lists import FrameObjLists
|
|||
from assets.extra_frame_offsets import ExtraFrameOffsets
|
||||
from assets.animation import Animation
|
||||
from assets.exit_list import ExitList
|
||||
from assets.entity_list import EntityList
|
||||
|
||||
verbose = False
|
||||
|
||||
|
@ -134,6 +135,9 @@ def extract_assets(variant, assets_folder):
|
|||
elif mode == 'exit_list':
|
||||
exit_list = ExitList(path, start, size, options)
|
||||
exit_list.extract_binary(baserom)
|
||||
elif mode == 'entity_list':
|
||||
entity_list = EntityList(path, start, size, options)
|
||||
entity_list.extract_binary(baserom)
|
||||
elif mode != '':
|
||||
print(f'Asset type {mode} not yet implemented')
|
||||
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
from assets.base import BaseAsset, Reader
|
||||
|
||||
class EntityList(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])
|
||||
|
||||
lines = []
|
||||
while reader.cursor + 15 < self.size:
|
||||
type_and_unknowns = reader.read_u8()
|
||||
|
||||
type = type_and_unknowns & 0x0F
|
||||
unknown_1 = (type_and_unknowns & 0xF0) >> 4
|
||||
unknowns = reader.read_u8()
|
||||
unknown_2 = unknowns & 0x0F
|
||||
unknown_3 = (unknowns & 0xF0) >> 4
|
||||
subtype = reader.read_u8()
|
||||
params_a = reader.read_u8()
|
||||
params_b = reader.read_u32()
|
||||
params_c = reader.read_u32()
|
||||
params_d = reader.read_u32()
|
||||
if type_and_unknowns == 0xff: # End of list
|
||||
lines.append(f'\t.4byte 0xff, 0, 0, 0 @terminator\n')
|
||||
break
|
||||
lines.append(f'\t.byte {type_and_unknowns}, {unknowns}, {subtype}, {params_a}\n')
|
||||
lines.append(f'\t.4byte {params_b}, {params_c}, {params_d}\n')
|
||||
# TODO resolve pointers in here
|
||||
|
||||
if reader.cursor < self.size:
|
||||
lines.append(f'@ unaccounted bytes\n')
|
||||
while reader.cursor < self.size:
|
||||
lines.append(f'.byte {reader.read_u8()}\n')
|
||||
|
||||
assert(self.path.endswith('.bin'))
|
||||
path = self.path[0:-4] + '.s'
|
||||
with open(path, 'w') as file:
|
||||
file.writelines(lines)
|
|
@ -24,7 +24,7 @@ class ExitList(BaseAsset):
|
|||
unknown_5 = reader.read_u16()
|
||||
padding_1 = reader.read_u16()
|
||||
if transition_type == 0xffff:
|
||||
lines.append(f'\t.2byte 0xffff, 0, 0, 0,0,0,0,0,0,0 @ terminator\n')
|
||||
lines.append(f'\t.4byte 0xffff, 0,0,0,0 @ terminator\n')
|
||||
break
|
||||
lines.append(f'\t.2byte {transition_type} @ transition_type\n')
|
||||
lines.append(f'\t.2byte {x_pos}, {y_pos} @ pos\n')
|
||||
|
|
Loading…
Reference in New Issue