From bb8643f822fef5af1b804cb6367a87f3487503e7 Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Sat, 21 Jun 2025 10:40:42 +0200 Subject: [PATCH] maps: Added simple RLE to map converter and loader --- maps/default_map.s | 218 ++++++--------------------------------------- src/map.s | 41 +++++---- tools/tms2map.py | 29 +++++- 3 files changed, 74 insertions(+), 214 deletions(-) diff --git a/maps/default_map.s b/maps/default_map.s index 04cbbd5..e4b0aea 100644 --- a/maps/default_map.s +++ b/maps/default_map.s @@ -10,197 +10,31 @@ dw bank9000 default_map_bg: -.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 +.db 0x1, 0x65, 0x1f, 0x64, 0x1, 0x64, 0x1, 0x64 +.db 0x3, 0x6b, 0x1b, 0x64, 0x1, 0x64, 0x5, 0x64 +.db 0x2, 0x65, 0x18, 0x64, 0x1, 0x64, 0x5, 0x64 +.db 0x2, 0x65, 0x18, 0x64, 0x1, 0x64, 0x7, 0x64 +.db 0x1, 0x65, 0x4, 0x64, 0x1, 0x4a, 0x3, 0x5c +.db 0x1, 0x4b, 0xe, 0x64, 0x1, 0x64, 0xc, 0x64 +.db 0x1, 0x5d, 0x3, 0x7a, 0x1, 0x4d, 0xe, 0x64 +.db 0x1, 0x64, 0xc, 0x64, 0x1, 0x6c, 0x1, 0x6a +.db 0x2, 0x6b, 0x1, 0x6d, 0xe, 0x64, 0x1, 0x64 +.db 0xc, 0x64, 0x5, 0x78, 0xe, 0x64, 0x1, 0x64 +.db 0x1f, 0x64, 0x1, 0x64, 0x1f, 0x64, 0x1, 0x64 +.db 0x4, 0x64, 0x5, 0x74, 0x16, 0x64, 0x1, 0x64 +.db 0x4, 0x64, 0x5, 0x74, 0x16, 0x64, 0x1, 0x64 +.db 0x4, 0x64, 0x5, 0x74, 0x16, 0x64, 0x1, 0x64 +.db 0x4, 0x64, 0x8, 0x74, 0x13, 0x64, 0x1, 0x64 +.db 0x8, 0x64, 0x4, 0x74, 0x13, 0x64, 0x1, 0x64 +.db 0x1f, 0x64, 0x1, 0x64, 0x1f, 0x64, 0x1, 0x64 +.db 0x1f, 0x64, 0x1, 0x64, 0x1f, 0x64, 0x1, 0x64 +.db 0x1f, 0x64, 0x1, 0x64, 0x1f, 0x64, 0x1, 0x64 +.db 0x1f, 0x64, 0x1, 0x64, 0x1f, 0x64, 0x1, 0x64 +.db 0x1e, 0x64, 0x1, 0x65 +.db 0x00 ; termiante data 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 +.db 0x22, 0x0, 0x3, 0x1, 0x68, 0x0, 0x5, 0x1 +.db 0x3b, 0x0, 0x4, 0x1, 0xff, 0x0, 0xff, 0x0 +.db 0x31, 0x0 +.db 0x00 ; termiante data diff --git a/src/map.s b/src/map.s index 777c114..db453b3 100644 --- a/src/map.s +++ b/src/map.s @@ -109,8 +109,12 @@ map_tiles_load: ; this can either be tiles or flags ; based on its offset and the compressed ptr ; + ; map compression: + ; maps are using a simple RLE + ; 1 byte of length, 1 byte of data + ; the data is terminated with a 0x00 length byte ; inputs: - ; hl: compressed map data + ; hl: compressed map data ; de: target offset (usually 0/1) tile_map_compressed_load: push hl @@ -118,28 +122,29 @@ tile_map_compressed_load: ld hl, map add hl, de ; + offset - ; de = loop counter - ld de, MAP_SIZE ; bc = destination - ; hl = c_tile + ; hl = rle encoded data -@loop: - ; tile +@decompress_loop: + ; load run length ld a, [bc] - inc bc ; bc++ - ld [hl+], a - inc hl ; hl++ to skip over unneeded byte - - ; de-- - dec de - - ; check if de is 0 - ld a, d - or a, e cp a, 0 - jr nz, @loop REL + ret z ; if run length == 0 exit + ld d, a ; d = copy coutner + + inc bc + ld a, [bc] ; load data + inc bc + +@copy_loop: + ld [hl+], a + inc hl ; hl++ to skip over unneeded byte + + dec d + jr nz, @copy_loop REL - ret + ; again + jr @decompress_loop REL ; loads a map's state ; inputs: diff --git a/tools/tms2map.py b/tools/tms2map.py index 0c52a75..61b19f4 100755 --- a/tools/tms2map.py +++ b/tools/tms2map.py @@ -27,8 +27,26 @@ if len(sys.argv) < 3: src = sys.argv[1] name = sys.argv[2] -def compress_map(data): - return data +def compress(data, convert): + compressed = [] + + run_length = 0 + last_byte = 0 + + for i, byte in enumerate(data): + if (last_byte != byte and run_length > 0) or run_length >= 255: + compressed.append(run_length) + compressed.append(convert(last_byte)) + run_length = 0 + + last_byte = byte + run_length += 1 + + if run_length > 0: + compressed.append(run_length) + compressed.append(convert(last_byte)) + + return compressed def convert_val(byte): @@ -41,10 +59,11 @@ def convert_none(byte): return int(byte) def print_bg_data(data, name, layer): - split = compress_map(data.split(",")) + split = data.split(",") print_data(split, name, layer, convert_val) def print_data(data, name, layer, convert): + data = compress(data, convert) print(name + "_" + layer + ":") for i, byte in enumerate(data): end = ', ' @@ -52,7 +71,7 @@ def print_data(data, name, layer, convert): if i % 8 == 0: print("\n.db ", end = ''); - val = convert(byte) + val = byte if (i+1) % 8 == 0: end = '' @@ -60,6 +79,8 @@ def print_data(data, name, layer, convert): end = '\n' print(hex(val), end=end) + print(".db 0x00 ; termiante data") + def print_bg_flags(data, name, layer): split = data.split(",") flags = [] -- 2.30.2