player: Added map redraw flag master origin/HEAD origin/master
authorLukas Krickl <lukas@krickl.dev>
Fri, 23 Jan 2026 10:10:20 +0000 (11:10 +0100)
committerLukas Krickl <lukas@krickl.dev>
Fri, 23 Jan 2026 10:10:20 +0000 (11:10 +0100)
src/defs.s
src/player.s
src/wram.s

index e393f1aa7040ea837f88a65838242d29e9467e99..dbc8f34a71e188470d7e767638849dcc8ee66011 100644 (file)
 #define RENDER_BUF_H 14
 #define RENDER_BUF_TILES (RENDER_BUF_W * RENDER_BUF_H)
 
+       ; draw flags
+.se 1
+.de DRAW_F_REDRAW_MAP, 1
+
   ; actor type enum
 .se 0
 .de ACT_T_NULL, 1
index f321b4021b24dc8326a16c39f971d956aa8603a3..0e1011604a068ea934e0b89a24450b119ae9dc7b 100644 (file)
@@ -82,6 +82,8 @@ player_update:
 
        call player_handle_move
 
+       call player_need_map_redraw
+
        ret
 
        ; draws player
@@ -262,6 +264,18 @@ player_handle_move:
                call player_collided
 @not_down:
        ret
+
+       ; checks if a map redraw is needed
+player_need_map_redraw:
+       ld a, [draw_flags]
+       and a, DRAW_F_REDRAW_MAP
+       call nz, map_full_draw
+       
+       ld a, [draw_flags]
+       and a, ~DRAW_F_REDRAW_MAP & 0xFF
+       ld [draw_flags], a
+       
+       ret
        
        ; code to run when player has collided
 player_collided:
@@ -301,14 +315,19 @@ player_collided:
        ld a, TT_ROOM_END
        ld [de], a
        
-       call map_full_draw
+       ld a, [draw_flags]
+       or a, DRAW_F_REDRAW_MAP
+       ld [draw_flags], a
        call player_end_turn
        ret
 
        ; code to run when player has moved
 player_moved:
-       call map_full_draw
        call player_end_turn
+
+       ld a, [draw_flags]
+       or a, DRAW_F_REDRAW_MAP
+       ld [draw_flags], a
        ret
        
        ; ends the current turn
index 4ef3fa4ffb124d810d30ad0c15bb22f0f0224e8b..8f0dfa603e2ce908cefa5d864c9a79e6196591aa 100644 (file)
@@ -45,6 +45,9 @@ demo_inputs: .adv 2
        
        ; gameplay control flags
 game_flags: .adv 1
+
+       ; flags for drawing the screen
+draw_flags: .adv 1
        
        ; if 0 == player can perform actions
        ; if 1 == all other actors can perform actions