maps: wip map rendering with doors
authorLukas Krickl <lukas@krickl.dev>
Tue, 16 Dec 2025 17:33:14 +0000 (18:33 +0100)
committerLukas Krickl <lukas@krickl.dev>
Tue, 16 Dec 2025 17:33:14 +0000 (18:33 +0100)
maps/l1.inc
src/map.s

index 9a0e2052e36779e631634f44686dff58aee4b1af..c42aaf11497bc2b3a55266c12f9fc632994aa12f 100644 (file)
@@ -1,16 +1,16 @@
 ; this map was generated by tmx2map.py
 
 .db 0x9, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0x5
-.db 0xb, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
-.db 0xb, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
-.db 0xb, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
-.db 0xb, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
-.db 0xb, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
-.db 0xb, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
-.db 0xb, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
-.db 0xb, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
-.db 0xb, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
-.db 0xb, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
-.db 0xb, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
-.db 0xb, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
+.db 0x3, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
+.db 0x3, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
+.db 0xa, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
+.db 0x9, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
+.db 0x3, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
+.db 0x3, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
+.db 0x3, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
+.db 0x3, 0x9, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
+.db 0x3, 0x3, 0xb, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
+.db 0x3, 0x3, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
+.db 0x3, 0x3, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
+.db 0x3, 0x3, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x7
 .db 0xa, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0x6
index 49fde97302891ee875bb21cf02bd7fc851cee37a..42f10cda232df4a47fd7b2e6c380181ccff8e9b1 100644 (file)
--- a/src/map.s
+++ b/src/map.s
@@ -1,4 +1,5 @@
 #define SCRN0_END 0x9BF3
+#define WALL_EMPTY_TILE 0x17
        
        ; inits map globals
        ; such as map_vram_tl
@@ -374,15 +375,17 @@ map_full_draw_count_forward_attributes:
        map_full_draw_write_door_state 1, 1, ret
 
        dec b ; move one tile back
+       call map_get_tile
        map_full_draw_door_state TF_NE, TF_WE, TF_EE
        map_full_draw_write_door_state 3, 2, ret
        ret
 @south:
-       map_full_draw_door_state TF_SE, TF_EE, TF_WE
+       map_full_draw_door_state TF_SE, TF_WE, TF_EE
        map_full_draw_write_door_state 1, 1, ret
        
        inc b ; move one tile forward
-       map_full_draw_door_state TF_SE, TF_EE, TF_WE
+       call map_get_tile
+       map_full_draw_door_state TF_SE, TF_WE, TF_EE
        map_full_draw_write_door_state 3, 2, ret
        ret
 @east:
@@ -390,6 +393,7 @@ map_full_draw_count_forward_attributes:
        map_full_draw_write_door_state 1, 1, ret
 
        inc c ; move one tile east
+       call map_get_tile
        map_full_draw_door_state TF_EE, TF_NE, TF_SE
        map_full_draw_write_door_state 3, 2, ret
        ret
@@ -398,10 +402,63 @@ map_full_draw_count_forward_attributes:
        map_full_draw_write_door_state 1, 1, ret
 
        dec c ; move one tile west
+       call map_get_tile
        map_full_draw_door_state TF_WE, TF_SE, TF_NE
        map_full_draw_write_door_state 3, 2, ret
        ret
-
+       
+       ; draws near doors
+_map_full_draw_near_doors:
+       ld a, [tmp_map_near_left_door]
+       cp a, 1
+       jr nz, @no_near_left REL
+               ld hl, render_buffer
+               ld de, RENDER_BUF_W * 6 + 1
+               add hl, de
+
+               ld a, WALL_EMPTY_TILE
+               ld [hl+], a
+               ld [hl+], a
+
+               ld de, RENDER_BUF_W-2
+               add hl, de
+               ld [hl+], a
+               ld [hl+], a
+
+               add hl, de
+               ld [hl+], a
+               ld [hl+], a
+
+               add hl, de
+               ld [hl+], a
+               ld [hl+], a
+@no_near_left:
+
+       ld a, [tmp_map_near_right_door]
+       cp a, 1
+       jr nz, @no_near_right REL
+               ld hl, render_buffer 
+               ld de, RENDER_BUF_W * 6 + 17
+               add hl, de
+
+               ld a, WALL_EMPTY_TILE
+               ld [hl+], a
+               ld [hl+], a
+
+               ld de, RENDER_BUF_W-2
+               add hl, de
+               ld [hl+], a
+               ld [hl+], a
+
+               add hl, de
+               ld [hl+], a
+               ld [hl+], a
+
+               add hl, de
+               ld [hl+], a
+               ld [hl+], a
+@no_near_right:
+       ret
        
        ; draws a full map copy into the current map view buffer
        ; bsed on the current location the player is facing
@@ -428,7 +485,69 @@ map_full_draw:
        ld hl, render_buffer
        ld bc, RENDER_BUF_TILES
        call memcpy
+
+       ; clear far back door if _forward is > 1
+       ld a, [tmp_map_forward]
+       cp a, 2
+       jr nz, @no_far_forward_door REL
+               ld hl, render_buffer
+               ld de, RENDER_BUF_W * 6  + 9
+               add hl, de
+               ld a, WALL_EMPTY_TILE
+               ld [hl+], a
+               ld [hl+], a
+
+               ld de, RENDER_BUF_W-2
+               add hl, de
+               ld [hl+], a
+               ld [hl+], a
+@no_far_forward_door:
+
+       ld a, [tmp_map_far_left_door]
+       cp a, 1
+       jr nz, @no_far_left_door REL
+               ld hl, render_buffer
+               ld de, RENDER_BUF_W * 6 + 5
+               add hl, de
+               ld a, WALL_EMPTY_TILE
+
+               ld [hl+], a
+               ld [hl+], a
+
+               ld de, RENDER_BUF_W-2
+               add hl, de
+               ld [hl+], a
+               ld [hl+], a
+
+               add hl, de
+               ld [hl+], a
+               ld [hl+], a
+@no_far_left_door:
+
+       ld a, [tmp_map_far_right_door]
+       cp a, 1
+       jr nz, @no_far_right_door REL
+               ld hl, render_buffer
+               ld de, RENDER_BUF_W * 6 + 13
+               add hl, de
+               ld a, WALL_EMPTY_TILE
+
+               ld [hl+], a
+               ld [hl+], a
+
+               ld de, RENDER_BUF_W-2
+               add hl, de
+               ld [hl+], a
+               ld [hl+], a
+
+               add hl, de
+               ld [hl+], a
+               ld [hl+], a
+
+@no_far_right_door:
        
+       call _map_full_draw_near_doors
+
        jp @done
 @short_wall:
        ; draw short wall template
@@ -437,6 +556,8 @@ map_full_draw:
        ld bc, RENDER_BUF_TILES
        call memcpy 
 
+       call _map_full_draw_near_doors
+
 @done:
        ; 4) go to render state
        call update_render