ui: minimap is now a regular UI element rendered with tiles
authorLukas Krickl <lukas@krickl.dev>
Wed, 17 Dec 2025 05:05:54 +0000 (06:05 +0100)
committerLukas Krickl <lukas@krickl.dev>
Wed, 17 Dec 2025 05:05:54 +0000 (06:05 +0100)
src/debug.s
src/map.s
src/ui.s
src/update.s
src/wram.s
tiles/bank8C00.inc

index d0cf0f6626b5b917fa8642ab606e3b8f15a6df90..d0e630981d72b3e6165a360f554a09d8feff19a3 100644 (file)
@@ -46,70 +46,4 @@ debug_draw_player_pos:
        ld [hl+], a
 
 
-       ret
-       
-       ; debug draws a tile based on player position
-       ; inputs:
-       ;               $1: y offset
-       ;               $2: x offset
-       ;         hl: oam ptr
-       ; returns:
-       ;               hl: next oam ptr
-#macro debug_draw_tile
-       ld de, player+act_pos_y
-       ld a, [de]
-       inc de
-       add a, $1 & 0xFF
-
-       ld b, a ; b = y
-       ld a, [de]
-       add a, $2 & 0xFF
-       ld c, a ; c = x
-
-       push hl
-       call map_get_tile
-       push hl
-       pop de ; de = tile
-       inc de ; de = tile flags
-
-       pop hl ; hl = oam
-
-       ; y pos
-       ld a, 136 + $1 * 8
-       ld [hl+], a
-
-       ; x pos
-       ld a, 136 + $2 * 8
-       ld [hl+], a
-
-       ; tile
-       ld a, [de]
-       add a, 0x60 ; tile offset for debug tiles
-       ld [hl+], a
-
-       ; flags
-       xor a, a
-       ld [hl+], a
-
-#endmacro
-       
-       ; draws the tiles around the player
-       ; only draws the exit flags
-debug_draw_map:
-       ld a, 9
-       call oamalloc
-
-       debug_draw_tile -1, 0
-       debug_draw_tile 0, 0
-       debug_draw_tile 1, 0
-
-       debug_draw_tile 0, -1
-       debug_draw_tile 0, 1
-       
-       debug_draw_tile 1, 1
-       debug_draw_tile -1, 1
-       
-       debug_draw_tile -1, -1
-       debug_draw_tile 1, -1
-
        ret
index 3aed0a3e5bfc43acc5342cb0158aa01b8f7df8c2..26b87b99cba01c4b40291af44b177c98dfd5ef12 100644 (file)
--- a/src/map.s
+++ b/src/map.s
@@ -500,6 +500,8 @@ map_full_draw:
        call _map_full_draw_near_doors
 
 @done:
+       call minimap_full_draw
+
        ; 4) go to render state
        call update_render
        ret
index e1525d74e9d1934f72f675c1edab28af46fe982c..964df471fe800c1094fe81cf6113fb0974a7a2ef 100644 (file)
--- a/src/ui.s
+++ b/src/ui.s
@@ -1,9 +1,9 @@
 #define UI_TILE_NAME SCRN1+33
 
-#define TILE_SOUTH 0xEC
-#define TILE_NORTH 0xE7
-#define TILE_EAST 0xDE
-#define TILE_WEST 0xF0
+#define TILE_SOUTH 0xF9
+#define TILE_NORTH 0xFA
+#define TILE_EAST 0xFC
+#define TILE_WEST 0xFB
 
 ; one tile after 'Z'
 #define UI_WINDOW_BACKGROUND 0xF4  
@@ -30,10 +30,93 @@ ui_update:
        
        
 
-
        ; draws the entire UI
        ; only call during blank
 ui_draw:
+
+       ; draw minimap to ui
+       ld hl, SCRN1 + 16
+       ld de, 29 ; offset for next row
+       
+       ; row 0
+       ld a, [minimap_buffer]
+       ld [hl+], a
+
+       ld a, [minimap_buffer+1]
+       ld [hl+], a
+
+       ld a, [minimap_buffer+2]
+       ld [hl+], a
+
+       ; row 1
+       add hl, de
+       ld a, [minimap_buffer+3]
+       ld [hl+], a
+
+       ld a, [minimap_buffer+4]
+       ld [hl+], a
+
+       ld a, [minimap_buffer+5]
+       ld [hl+], a
+
+       ; row 2
+       add hl, de
+       ld a, [minimap_buffer+6]
+       ld [hl+], a
+
+       ld a, [minimap_buffer+7]
+       ld [hl+], a
+
+       ld a, [minimap_buffer+8]
+       ld [hl+], a
+
+       ret
+       
+       ; draws a single minimap tile based on the player's position
+       ; inputs:
+       ;               $1: y offset
+       ;               $2: x offset
+       ;       returns:
+       ;               writes into minimap_buffer at the offset
+#macro minimap_draw_tile
+.beginscope
+       ld a, [player+act_pos_y]
+       add a, $1 & 0xFF
+       ld b, a
+
+       ld a, [player+act_pos_x]
+       add a, $2 & 0xFF
+       ld c, a
+
+       call map_get_tile
+       ; hl = tile
+
+       inc hl ; hl = tile flags
+       ld a, [hl] ; load tile information
+       add a, 0x60 ; tile offset for map tiles
+       
+       ; 0/0 is the center of the minimap 
+       ; so +4 and then offset by $1 and $2
+       ld [minimap_buffer+4+($1*3)+$2], a
+.endscope
+#endmacro
+
+       ; redraws the minimap
+       ; into a 3x3 minimap buffer
+minimap_full_draw:
+       minimap_draw_tile 0, 0
+       minimap_draw_tile 0, 1
+
+       minimap_draw_tile 1, 0
+       minimap_draw_tile 1, 1
+
+       minimap_draw_tile -1, 1
+       minimap_draw_tile 1, -1
+       minimap_draw_tile -1, -1
+       
+       minimap_draw_tile 0, -1
+       minimap_draw_tile -1, 0
+
        ret
 
 compass_tiles:
@@ -51,7 +134,7 @@ compass_draw:
        ld [hl+], a
        
        ; x
-       ld a, 64
+       ld a, 138
        ld [hl+], a
 
        ; tile
@@ -73,6 +156,5 @@ compass_draw:
 
 #ifdef DEBUG_UI
        call debug_draw_player_pos
-       call debug_draw_map
 #endif
        ret
index 6c04bfec06988a1f580793cf8ebe174123a2ee4c..b5a1953816ca0254d2b2ae4ab122682980546f3e 100644 (file)
@@ -71,6 +71,9 @@ update_render:
 
        dec b
        jp nz, @render_loop
+
+       call next_vblank_wait
+       call ui_draw
        
        call enableinterrupts
        ret
index 6f39dfa04dac6b4da2486fdf7821bf00d8b23a3d..8fcf163b77e31136008abe2da08897be1fb6ffdd 100644 (file)
@@ -123,6 +123,7 @@ update_tile_vram: .adv 2
 update_tile_ptr: .adv 2
 
 render_buffer: .adv RENDER_BUF_TILES
+minimap_buffer: .adv 9
 
 tmp_map_forward: .adv 1
 tmp_map_near_left_door: .adv 1
index 20e88ac76a4d2daa94a0cf4c596128dd9c857a88..78cd9c3785f365c62315361c4b6e554c8550166b 100644 (file)
 .chr 22223222
 ; tile 57
 .chr 00000000
-.chr 00000000
-.chr 00000000
-.chr 00000000
-.chr 00000000
-.chr 00000000
+.chr 00020000
+.chr 00020000
+.chr 00020000
+.chr 00222000
+.chr 00020000
 .chr 00000000
 .chr 00000000
 ; tile 58
 .chr 00000000
-.chr 00000000
-.chr 00000000
-.chr 00000000
-.chr 00000000
-.chr 00000000
+.chr 00020000
+.chr 00222000
+.chr 00020000
+.chr 00020000
+.chr 00020000
 .chr 00000000
 .chr 00000000
 ; tile 59
 .chr 00000000
 .chr 00000000
 .chr 00000000
-.chr 00000000
-.chr 00000000
-.chr 00000000
+.chr 00200000
+.chr 02222200
+.chr 00200000
 .chr 00000000
 .chr 00000000
 ; tile 60
 .chr 00000000
 .chr 00000000
 .chr 00000000
-.chr 00000000
-.chr 00000000
-.chr 00000000
+.chr 00000200
+.chr 02222220
+.chr 00000200
 .chr 00000000
 .chr 00000000
 ; tile 61