; consumes a move
; sets UI redraw flag
; fails (z flag set) if no moves left
+ ; switches to next unit if moves reach 0
; inputs:
; de: unit
unit_use_move:
push de
+ call ui_unit_need_draw
ld hl, act_moves
add hl, de
ld a, [hl] ; current
cp a, 0
+
+ push_all
+ call z, unit_next
+ pop_all
ret z
+
dec a
ld [hl], a
- call ui_unit_need_draw
ret
; centers the current scroll on the selected unit
; uses:
; unit_next_best_init: as a temporary buffer
unit_next:
+
; set moves of current unit to 0
ld hl, act_moves
add hl, de
ld [unit_next_best_init], a
; clear current ptr
- ld [unit_next_bext_act_ptr], a
- ld [unit_next_bext_act_ptr+1], a
+ ld [unit_next_best_act_ptr], a
+ ld [unit_next_best_act_ptr+1], a
ld hl, p0_units
ld b, UNITS_MAX * PLAYERS
; check if moves are not 0
pop hl
+ push hl
ld de, act_moves
+ add hl, de
ld a, [hl]
cp a, 0
jr z, @skip REL
add hl, de
ld a, [hl]
ld d, a ; b = init of new actor
-
ld a, [unit_next_best_init]
; check if this init value is better
; if not proceed
ld [unit_next_best_init], a
ld a, l
- ld [unit_next_bext_act_ptr], a
+ ld [unit_next_best_act_ptr], a
ld a, h
- ld [unit_next_bext_act_ptr+1], a
+ ld [unit_next_best_act_ptr+1], a
@skip:
pop hl ; restore table
; if here unit_next_best_act_ptr is still 0000
; reste all moves and try again
- ld a, [unit_next_bext_act_ptr]
+ ld a, [unit_next_best_act_ptr]
ld b, a
- ld a, [unit_next_bext_act_ptr+1]
+ ld a, [unit_next_best_act_ptr+1]
xor a, b
jr z, @retry REL
+
+ ; load new bext into hl
+ ; and set active
+ ld a, [unit_next_best_act_ptr]
+ ld [ui_draw_actor], a
+ ld e, a
+ ld a, [unit_next_best_act_ptr+1]
+ ld [ui_draw_actor+1], a
+ ld d, a
+ call unit_switch_to_active
+
ret
@retry: