maps: Added more header values to map converter
authorLukas Krickl <lukas@krickl.dev>
Fri, 20 Jun 2025 14:51:17 +0000 (16:51 +0200)
committerLukas Krickl <lukas@krickl.dev>
Fri, 20 Jun 2025 14:51:17 +0000 (16:51 +0200)
maps/default_map.s
src/defs.s
src/map.s
tools/tms2map.py

index 2459b06a806f92605cdc741ec47b902843f1d4a1..a4a0a7f021a617c34d70d1d53e800329176572f2 100644 (file)
@@ -1,6 +1,11 @@
 default_map_header:
 .db 0, 0, 0, 0 ; flags
 dw default_map_bg
+dw st_map_null
+dw map_actor_table_null
+dw bank8000
+dw bank8800
+dw bank9000
 
 default_map_bg:
 
index 62a08db20aefd42f43bb92723827d843e73f44f0..15a804afd63fec01e64f89c08c2b761410b9b988 100644 (file)
 .de map_flags_4, 1
 .de map_bg_ptr, 2
   ; ptr to mape state to be loaded
+  ; maps to map property state_ptr
 .de map_state_ptr, 2
-  ; amount of entires in actor table
-.de map_actor_table_len, 1
   ; ptr to actor table
-  ; actor table is a list of pointers to actor
+  ; an actor table is a single byte for number of actors 
+  ; followed by a list of pointers to actor
   ; templates 
+  ; maps to map property actor_table_ptr
 .de map_actor_table_ptr, 2
   ; pointers to tile banks to be loaded 
+  ; maps to map property bank0, bank1, bank2
 .de map_tile_bank0_ptr, 2
 .de map_tile_bank1_ptr, 2
 .de map_tile_bank2_ptr, 2
index 348a33e9fee59dce4b36bf3f5ebff6a4a5b09f99..b016d42352317e58690a46fac5d968b124b79209 100644 (file)
--- a/src/map.s
+++ b/src/map.s
@@ -161,4 +161,16 @@ map_load_demo_actors:
 
   ret
 
+  ; empty actor table 
+map_actor_table_null:
+.db 0
+
+st_map_null:
+  st_def 0, map_null_state, st_map_null
+
+  ; null state
+map_null_state:
+  ldnull bc
+  ret
+
 #include "default_map.s"
index 9f4f4b6ab667667eda29553ca2c39e1b4a927f2c..78bbaa26e388f601bbfdbc366c0258a2f3b35fca 100755 (executable)
@@ -8,6 +8,12 @@ TILE_SIZE = 16
 ACTOR_OFFSET_X = 0
 ACTOR_OFFSET_Y = 0
 
+state_ptr = "st_map_null"
+tile_bank0 = "bank8000"
+tile_bank1 = "bank8800"
+tile_bank2 = "bank9000"
+actor_table_ptr = "map_actor_table_null"
+
 FLAGS = {
             'f_collision': 0x01
         }
@@ -51,6 +57,11 @@ def print_header(name):
     print(name + "_header:")
     print(".db 0, 0, 0, 0 ; flags")
     print("dw " + name + "_bg")
+    print("dw " + state_ptr)
+    print("dw " + actor_table_ptr)
+    print("dw " + tile_bank0)
+    print("dw " + tile_bank1)
+    print("dw " + tile_bank2)
     print("")
     
 def get_flag(tile):
@@ -68,10 +79,31 @@ def get_flags(tileset):
         if child.tag == 'tile':
             get_flag(child)
 
+def get_map_props(root):
+    global state_ptr, actor_table_ptr, tile_bank0, tile_bank1, tile_bank2
+    for child in root:
+        if child.tag == "properties":
+            for prop in child:
+                name = prop.attrib['name']
+                value = prop.attrib['value']
+                if name == 'state_ptr':
+                    state_ptr = value
+                elif name == 'actor_table_ptr':
+                    actor_table_ptr = value 
+                elif name == 'tile_bank0':
+                    tile_bank0 = value
+                elif name == 'tile_bank1':
+                    tile_bank1 = value
+                elif name == 'tile_bank2':
+                    tile_bank2 = value
+
+    return
+
 def convert(src, name):
     tree = ET.parse(src)
     root = tree.getroot()
     
+    get_map_props(root)
     print_header(name)
 
     for child in root: