player: Added player turn taken flag
authorLukas Krickl <lukas@krickl.dev>
Fri, 15 Aug 2025 07:42:04 +0000 (09:42 +0200)
committerLukas Krickl <lukas@krickl.dev>
Fri, 15 Aug 2025 07:42:04 +0000 (09:42 +0200)
This flag delays all other units from moving until the player has made
a choice.

src/defs.s
src/player.s
src/unit.s
src/unit_cpu.s
src/update.s

index 2dacb2257aa82f71f070f9fc689a54d2337edce8..187baa10a3a20db1d73c9ec5faf7e2e20ca20bd0 100644 (file)
        ; but draw calls still happen
        ; this is useful when waiting for an animation
 .de GPF_PAUSE_UPDATE, 1
+       ; set if the player has taken their turn
+       ; this will allow all other units to 
+       ; perform their update
+.de GPF_PLAYER_TURN_TAKEN, 1
 
   ; cell flags
 .se 1 
index cb133344902fe773601558142ec7a7ef2e80cfda..1aa4bcc477da59ad4d22f1696d292b24fafcac60 100644 (file)
@@ -17,6 +17,13 @@ unit_player_init:
   ; inputs
   ;   de: actor
 unit_player_update:
+       ; check if player flag is set
+       ; if so return early
+       ldnull bc
+       ld a, [gameplay_flags]
+       and a, GPF_PLAYER_TURN_TAKEN
+       ret nz
+
   push de
   ld hl, act_oam_flags
   add hl, de
index 3cf01125d24dfe08d4447c0962046ca691fddfa5..d5df12d3e6951c1efd2727fa8e3fc0ca59591631 100644 (file)
@@ -267,6 +267,20 @@ unit_generic_draw:
   ret
 #undefine TMP_OAMFLAG_PRIO
 #undefine TMP_X_OFFSET
+       
+       ; sets player turn taken flag
+unit_set_player_turn_taken:
+       ld a, [gameplay_flags]
+       or a, GPF_PLAYER_TURN_TAKEN
+       ld [gameplay_flags], a
+       ret
+       
+       ; clears player turn taken flag
+unit_clear_player_turn_taken:
+       ld a, [gameplay_flags]
+       and a, ~GPF_PLAYER_TURN_TAKEN & 0xFF
+       ld [gameplay_flags], a
+       ret
 
   ; generic unit input handler
   ; inputs:
@@ -289,7 +303,8 @@ unit_handle_inputs:
     call unit_try_move_up
     pop hl
     pop de
-
+               
+               call unit_set_player_turn_taken
     pop bc
     ld bc, st_unit_delay_to_active
     push bc
@@ -305,6 +320,7 @@ unit_handle_inputs:
     pop hl
     pop de
 
+               call unit_set_player_turn_taken
     pop bc
     ld bc, st_unit_delay_to_active
     push bc
@@ -320,6 +336,7 @@ unit_handle_inputs:
     pop hl
     pop de
 
+               call unit_set_player_turn_taken
     pop bc
     ld bc, st_unit_delay_to_active
     push bc
@@ -331,6 +348,7 @@ unit_handle_inputs:
 
     call unit_try_move_right
 
+               call unit_set_player_turn_taken
     pop bc
     ld bc, st_unit_delay_to_active
     push bc
index 88ee052548a7a3b6b0701d421e1f4b0c46a3738f..961ecb06a27802ddfaeca90d065ff4da4e988fb9 100644 (file)
@@ -9,6 +9,14 @@
        ;               bc: next state
 unit_handle_cpu_inputs:
 #define MOVE_MADE scratch 
+       
+       ; check if player has taken turn
+       ; if not exit
+       ldnull bc
+       ld a, [gameplay_flags]
+       and a, GPF_PLAYER_TURN_TAKEN
+       ret z
+       
        ; clear move made buffer
        xor a, a
        ld [MOVE_MADE], a
index 70df9f9509de6fdb5194dc779780b97e211318b7..18f48fe88feb501f0f858301ab88661305fc298c 100644 (file)
@@ -6,6 +6,9 @@ update_game:
   ; tick rng every frame
   call rand
 
+       ; clear turn taken flag
+       call unit_clear_player_turn_taken
+
   ; clear oam
   call shadow_oam_clear