From 6c69da235f856a7bcce04814f977e4279c1488ee Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Sat, 21 Jun 2025 08:54:00 +0200 Subject: [PATCH] map: refactored map converter to split up bg and flags into 2 tables The map loader now also loads them in 2 steps. --- maps/default_map.s | 291 ++++++++++++++++++++++++++++++--------------- src/defs.s | 4 + src/map.s | 61 ++++++---- tools/tms2map.py | 50 +++++--- 4 files changed, 271 insertions(+), 135 deletions(-) diff --git a/maps/default_map.s b/maps/default_map.s index 2913765..04cbbd5 100644 --- a/maps/default_map.s +++ b/maps/default_map.s @@ -1,6 +1,7 @@ default_map_header: .db 0, 0, 0, 0 ; flags dw default_map_bg +dw default_map_tile_flags dw st_map_null dw default_map_actor_table dw bank8000 @@ -9,99 +10,197 @@ dw bank9000 default_map_bg: -.db 0x65,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x6b,0x1, 0x6b,0x1, 0x6b,0x1, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x65,0x0, 0x65,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x65,0x0, 0x65,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x65,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x4a,0x1, 0x5c,0x1, 0x5c,0x1 -.db 0x5c,0x1, 0x4b,0x1, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x5d,0x0, 0x7a,0x0, 0x7a,0x0 -.db 0x7a,0x0, 0x4d,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x6c,0x1, 0x6a,0x1, 0x6b,0x1 -.db 0x6b,0x1, 0x6d,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x78,0x0, 0x78,0x0, 0x78,0x0 -.db 0x78,0x0, 0x78,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x74,0x0, 0x74,0x0, 0x74,0x0 -.db 0x74,0x0, 0x74,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x74,0x0, 0x74,0x0, 0x74,0x0 -.db 0x74,0x0, 0x74,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x74,0x0, 0x74,0x0, 0x74,0x0 -.db 0x74,0x0, 0x74,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x74,0x0, 0x74,0x0, 0x74,0x0 -.db 0x74,0x0, 0x74,0x0, 0x74,0x0, 0x74,0x0, 0x74,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x74,0x0, 0x74,0x0, 0x74,0x0, 0x74,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0 -.db 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x64,0x0, 0x65,0x0 +.db 0x65, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x6b, 0x6b, 0x6b, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x65, 0x65 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x65, 0x65 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x65, 0x64, 0x64, 0x64, 0x64, 0x4a, 0x5c, 0x5c +.db 0x5c, 0x4b, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x5d, 0x7a, 0x7a +.db 0x7a, 0x4d, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x6c, 0x6a, 0x6b +.db 0x6b, 0x6d, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x78, 0x78, 0x78 +.db 0x78, 0x78, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x74, 0x74, 0x74 +.db 0x74, 0x74, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x74, 0x74, 0x74 +.db 0x74, 0x74, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x74, 0x74, 0x74 +.db 0x74, 0x74, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x74, 0x74, 0x74 +.db 0x74, 0x74, 0x74, 0x74, 0x74, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x74, 0x74, 0x74, 0x74, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64 +.db 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x65 +default_map_tile_flags: + +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1 +.db 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1 +.db 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 +.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 diff --git a/src/defs.s b/src/defs.s index 22d281c..7ca8fce 100644 --- a/src/defs.s +++ b/src/defs.s @@ -218,6 +218,9 @@ .de bge_new_tile, 1 .de bge_size, 0 +#define MAP_BG_TILE_OFFSET 0 +#define MAP_BG_FLAGS_OFFSET 1 + ; map header struct .se 0 .de map_flags_1, 1 @@ -225,6 +228,7 @@ .de map_flags_3, 1 .de map_flags_4, 1 .de map_bg_ptr, 2 +.de map_tile_flags_ptr, 2 ; ptr to mape state to be loaded ; maps to map property state_ptr .de map_state_ptr, 2 diff --git a/src/map.s b/src/map.s index 6e19ac9..777c114 100644 --- a/src/map.s +++ b/src/map.s @@ -66,7 +66,18 @@ map_get_tile: ; inputs: ; hl: map header map_tiles_load: + ; first clear + push_all + + ld hl, map + ld bc, map_end - map + ld d, 0 + call memset + + pop_all + ; load bg ptr + push hl ld de, map_bg_ptr add hl, de ; hl = bg_ptr ld a, [hl+] @@ -75,43 +86,49 @@ map_tiles_load: ld h, a ld l, d ; hl = bg ptr - call tile_map_bg_load - ret - ; loads a tile map into cells - ; and to cell memory - ; inputs: - ; hl: map bg data -tile_map_bg_load: - ; first clear - push_all + ld de, MAP_BG_TILE_OFFSET ; 0 offset for bg + call tile_map_compressed_load + pop hl - ld hl, map - ld bc, map_end - map - ld d, 0 - call memset + ; load tile flags ptr + ld de, map_tile_flags_ptr + add hl, de ; hl = bg_ptr + ld a, [hl+] + ld d, a + ld a, [hl+] + ld h, a + ld l, d + ; hl = bg ptr - pop_all + ld de, MAP_BG_FLAGS_OFFSET + call tile_map_compressed_load + ret + ; loads compressed data into the map buffer + ; this can either be tiles or flags + ; based on its offset and the compressed ptr + ; + ; inputs: + ; hl: compressed map data + ; de: target offset (usually 0/1) +tile_map_compressed_load: push hl pop bc ; bc = map ptr + ld hl, map + add hl, de ; + offset ; de = loop counter ld de, MAP_SIZE ; bc = destination - ld hl, map - ; hl = c_tile + ; hl = c_tile @loop: ; tile ld a, [bc] inc bc ; bc++ ld [hl+], a - - ; flags - ld a, [bc] - inc bc ; bc++ - ld [hl+], a + inc hl ; hl++ to skip over unneeded byte ; de-- dec de @@ -123,7 +140,7 @@ tile_map_bg_load: jr nz, @loop REL ret - + ; loads a map's state ; inputs: ; hl: map ptr diff --git a/tools/tms2map.py b/tools/tms2map.py index 5143c54..0c52a75 100755 --- a/tools/tms2map.py +++ b/tools/tms2map.py @@ -27,36 +27,51 @@ if len(sys.argv) < 3: src = sys.argv[1] name = sys.argv[2] -def print_data(data, name, layer): +def compress_map(data): + return data + + +def convert_val(byte): + val = int(byte) + if val > 0: + val -= 1 + return val + +def convert_none(byte): + return int(byte) + +def print_bg_data(data, name, layer): + split = compress_map(data.split(",")) + print_data(split, name, layer, convert_val) + +def print_data(data, name, layer, convert): print(name + "_" + layer + ":") - split = data.split(",") - for i, byte in enumerate(split): + for i, byte in enumerate(data): end = ', ' if i % 8 == 0: print("\n.db ", end = ''); - - val = int(byte) - if val > 0: - val -= 1 - - # if val > 127: - # val = val - 128 - # else: - # val = val + 0x80 + val = convert(byte) + if (i+1) % 8 == 0: end = '' - if i == len(split) - 1: + if i == len(data) - 1: end = '\n' - print(hex(val), end='') - print(",", end='') - print(hex(TILE_FLAGS[int(byte)-1]), end=end) + print(hex(val), end=end) + +def print_bg_flags(data, name, layer): + split = data.split(",") + flags = [] + for i, byte in enumerate(split): + flags.append(TILE_FLAGS[int(byte)-1]) + print_data(flags, name, 'tile_flags', convert_none) def print_header(name): print(name + "_header:") print(".db 0, 0, 0, 0 ; flags") print("dw " + name + "_bg") + print("dw " + name + "_tile_flags") print("dw " + state_ptr) print("dw " + actor_table_ptr) print("dw " + tile_bank0) @@ -114,7 +129,8 @@ def convert(src, name): for child in root: if child.tag == "layer": for data in child: - print_data(data.text, name, child.attrib['name']) + print_bg_data(data.text, name, child.attrib['name']) + print_bg_flags(data.text, name, child.attrib['name']) elif child.tag == "tileset": get_flags(child) -- 2.30.2