From: Lukas Krickl Date: Fri, 15 Aug 2025 07:42:04 +0000 (+0200) Subject: player: Added player turn taken flag X-Git-Url: https://git.krickl.dev/?a=commitdiff_plain;h=2389f5937ec31a589ab7dbcf5f76ac9107938bda;p=gbrg%2F.git player: Added player turn taken flag This flag delays all other units from moving until the player has made a choice. --- diff --git a/src/defs.s b/src/defs.s index 2dacb22..187baa1 100644 --- a/src/defs.s +++ b/src/defs.s @@ -73,6 +73,10 @@ ; 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 diff --git a/src/player.s b/src/player.s index cb13334..1aa4bcc 100644 --- a/src/player.s +++ b/src/player.s @@ -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 diff --git a/src/unit.s b/src/unit.s index 3cf0112..d5df12d 100644 --- a/src/unit.s +++ b/src/unit.s @@ -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 diff --git a/src/unit_cpu.s b/src/unit_cpu.s index 88ee052..961ecb0 100644 --- a/src/unit_cpu.s +++ b/src/unit_cpu.s @@ -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 diff --git a/src/update.s b/src/update.s index 70df9f9..18f48fe 100644 --- a/src/update.s +++ b/src/update.s @@ -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