jr z, @notup REL
call unit_try_move_up
- ld bc, st_unit_delay
+ ld bc, st_unit_delay_to_active
ret
@notup:
jr z, @notdown REL
call unit_try_move_down
- ld bc, st_unit_delay
+ ld bc, st_unit_delay_to_active
ret
@notdown:
jr z, @notleft REL
call unit_try_move_left
- ld bc, st_unit_delay
+ ld bc, st_unit_delay_to_active
ret
@notleft:
jr z, @notright REL
call unit_try_move_right
- ld bc, st_unit_delay
+ ld bc, st_unit_delay_to_active
ret
@notright:
pop de ; hl = act_moves
ld a, [hl] ; current
- cp a, 0
-
+ cp a, 1 ; if 1 request next
+
push_all
call z, unit_next_request
pop_all
+ cp a, 0 ; if 0 exit
ret z
dec a
ld [gameplay_unit_current], a
ld a, d
ld [gameplay_unit_current+1], a
+
+ ; set up delay timer
+ ld a, 16
+ ld [unit_next_timer], a
ret
; uses:
; unit_next_best_init: as a temporary buffer
unit_next:
+ ; if the unit_next timer is not 8
+ ; wait and timer--
+ ld a, [unit_next_timer]
+ cp a, 0
+ jr z, @go REL
+ dec a
+ ld [unit_next_timer], a
+ ret
+@go:
; unset flag
ld a, [gameplay_flags]
xor a, GPF_UNIT_NEXT
st_unit_demo_1_idle:
st_def 0x00, unit_demo_1_idle, st_unit_demo_1_idle
-st_unit_delay:
+st_unit_delay_to_active:
st_def CURSOR_MOVE_TIMER, st_null_fn, st_unit_switch_to_active
st_unit_switch_to_active:
; current best init found in units_next
unit_next_best_init: .adv 1
unit_next_best_act_ptr: .adv 2
+unit_next_timer: .adv 1
; actors
; actors are state machines