#define NULL 0
-#define UNITS_MAX 12
+#define UNITS_MAX 20
#define STACK_BEGIN 0xDFFF
; 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
; last collision with actor
; set during unit_collision_woth_any_other
.de act_rt_collided_with, 2
; defines default values for actor runtime values
; these can generally not be set at build time
#macro act_rt_def
- .db 0, 0, 0 ; act_rt_dd_*
; act_rt_collided_woth
dw 0
#endmacro
; 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 c, a ; c = x
ret
- ; sets dice display at current unit's location
- ; 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 a, DD_TIME
- ld [hl+], a ; set timer
-
- xor a, a
- ; no flags
- ld [hl+], a
-
- pop_all
- ret
-
; TODO:
; returns:
; hl: inventory ptr