.de act_oam_flags, 1
; actor runtime values
+
+ ; dice display
+ ; if timer > 0 the default draw
+ ; call will draw a dice instead of the regular
+ ; sprite
.de act_rt_dd_d16, 1 ; dice display value
.de act_rt_dd_timer, 1
.de act_rt_dd_flags, 1
pop hl
ret
-
-
- ; draws the last d16 result
- ; at a tile position for n frames
- ; inputs:
- ; b/c: y/x tile
- ; a: dice display flags/0
- ; d16: roll to display
- ; preserves flags
-dice_display_set:
- ; set flags
- ld a, [dd_flags]
-
- ; set timer
- ld a, DD_TIME
- ld [dd_timer], a
-
- ; set position
- ld a, b
- ld [dd_y], a
- ld a, c
- ld [dd_x], a
-
- ld b, DD_D0_TILE
- ld a, [d16]
- add a, b ; d0 + roll value of d16
- ld [dd_d16], a ; tile to display
-
- ret
; updates dice display if the timer is not 0
dice_display_update:
; inputs
; de: actor
unit_draw:
+ ; first check if dd_timer is set
+ push de
+ ld hl, act_rt_dd_timer
+ add hl, de
+ ld a, [hl]
+ cp a, 0
+ pop de
+ jp nz, @unit_draw_dd
+
+
push de
ld hl, act_oam_tile
add hl, de ; hl = tile
ldnull bc
ret
+@unit_draw_dd:
+ push de
+
+ ld hl, act_rt_dd_d16
+ add hl, de
+ ; hl = d16
+ ld a, [hl+] ; a = tile
+ ; TODO: handle flags if ever needed
+
+
+ pop de
+ push de
+
+ ld b, a ; tile
+ ld c, 0 ; tile flags
+ call unit_generic_draw
+
+ ; timer--
+ pop de
+ push de
+ ld hl, act_rt_dd_timer
+ add hl, de ; de = timer
+ ld a, [hl]
+ dec a
+ ld [hl], a
+
+ pop de
+ ldnull bc
+ ret
+
; draws any unit
; inputs:
; de: actor
ld d, a ; d = roll value
pop af ; a = init value
cp a, d
- call nc, unit_dice_display_set
+ call nc, unit_dice_display_set_hl
jr nc, @skip REL ; d < a
ld [unit_next_best_init], a
; inputs:
; hl: unit
; preserves all registers
+unit_dice_display_set_hl:
+ push de
+ push hl
+ pop de ; de = unit now
+ call unit_dice_display_set
+ pop de ; de is restored
+ ret
+
+ ; same as unit_dice_display_set_hl
+ ; but follows the regular calling conventions
+ ; inputs:
+ ; de: unit
+ ; preserves all registers
unit_dice_display_set:
push_all
+
+ ld hl, act_rt_dd_d16
+ add hl, de ; hl = actor's dd runtime values
+
+ ld b, DD_D0_TILE
+ ld a, [d16]
+ add a, b ; d0 + roll value of d16
+ ld [hl+], a ; store tile to draw
- ld de, act_pos_y
- add hl, de
- ld a, [hl+]
- ld b, a
- ld a, [hl]
- ld c, a ; b/c = y/x
- ld a, 0 ; no flags
- call dice_display_set
+ ld a, DD_TIME
+ ld [hl+], a ; set timer
+
+ xor a, a
+ ; no flags
+ ld [hl+], a
pop_all
ret