From 180ac48c55ed33fe259fff67e6f3b09bb8f37fee Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Thu, 24 Oct 2024 17:45:12 +0200 Subject: [PATCH] Added basic script to convert actor layers --- maps/base_room.s | 4 ++++ src/wram.s | 3 +++ tools/tms2map.py | 17 +++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/maps/base_room.s b/maps/base_room.s index 85412dd..48028fd 100644 --- a/maps/base_room.s +++ b/maps/base_room.s @@ -1,3 +1,7 @@ +base_room_actors: +.db 8 +.db 1 , 67 , 54 , 0 +.db 1 , 55 , 40 , 0 base_room_bg: .db 0x60, 0x62, 0x62, 0x64, 0x40, 0x40, 0x66, 0x62, 0x62, 0x68, 0x4c, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x6a, 0x46, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xe0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x48, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xe2, 0x4c, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x6a, 0x6c, 0x4a, 0x4a, 0x42, 0x40, 0x40, 0x44, 0x4a, 0x4a, 0x6e base_room_flags: diff --git a/src/wram.s b/src/wram.s index ff26def..b8d46f2 100644 --- a/src/wram.s +++ b/src/wram.s @@ -92,6 +92,9 @@ curr_room_flags: .adv 2 ; ptr to actor table of size actors_max/2 ; populate before loading a map + ; layout: + ; byte 0: length of actor table + ; bytes 1-n: n bytes of actor data to be copied to actor table curr_room_init_act: .adv 2 ; drawing related flags diff --git a/tools/tms2map.py b/tools/tms2map.py index a2b866f..a54a63d 100755 --- a/tools/tms2map.py +++ b/tools/tms2map.py @@ -30,6 +30,10 @@ def print_data(data, name, layer): end = '\n' print(hex(val), end=end) +def print_actor(atype, y, x, flags): + print(".db ", int(atype), ",", int(float(y)), ",", int(float(x)), ",", int(flags)) + + def convert(src, name): tree = ET.parse(src) root = tree.getroot() @@ -37,6 +41,19 @@ def convert(src, name): if child.tag == "layer": for data in child: print_data(data.text, name, child.attrib['name']) + elif child.tag == "objectgroup": + print(name + '_actors:') + print(".db ", len(child) * 4) + for data in child: + flags = 0 + atype = 0 + for props in data: + for prop in props: + if prop.attrib['name'] == 'type': + atype = prop.attrib['value'] + elif prop.attrib['name'] == 'flags': + flags = prop.attrib['value'] + print_actor(atype, data.attrib['x'], data.attrib['y'], flags) -- 2.30.2