From a02c9b9927c7b2add5c1e166b9e98a49706b9909 Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Sun, 8 Jun 2025 07:52:52 +0200 Subject: [PATCH] unit: Added individual dice display to each unit --- src/defs.s | 5 ++++ src/rand.s | 29 -------------------- src/unit.s | 77 ++++++++++++++++++++++++++++++++++++++++++++++------ src/update.s | 3 -- 4 files changed, 73 insertions(+), 41 deletions(-) diff --git a/src/defs.s b/src/defs.s index 236bc4e..8f01034 100644 --- a/src/defs.s +++ b/src/defs.s @@ -173,6 +173,11 @@ .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 diff --git a/src/rand.s b/src/rand.s index e339baf..0305c4c 100644 --- a/src/rand.s +++ b/src/rand.s @@ -92,35 +92,6 @@ roll_d16: 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: diff --git a/src/unit.s b/src/unit.s index bea0396..8033a52 100644 --- a/src/unit.s +++ b/src/unit.s @@ -93,6 +93,16 @@ unit_demo_1_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 @@ -106,6 +116,36 @@ unit_draw: 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 @@ -552,7 +592,7 @@ unit_next_no_current: 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 @@ -682,17 +722,36 @@ unit_get_pos: ; 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 diff --git a/src/update.s b/src/update.s index 7a1f3e9..c3f4253 100644 --- a/src/update.s +++ b/src/update.s @@ -16,9 +16,6 @@ update_game: call shadow_oam_clear call ui_display_current_unit - - call dice_display_update - ld hl, p0_units call units_update ld hl, p1_units -- 2.30.2