From 07606aef96d5d32f43e6409fad3dc7ec27038b47 Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Thu, 5 Jun 2025 18:25:12 +0200 Subject: [PATCH] dice display: Added dice display for units This change exposed a bug in the UI update code. UI updats need to draw tiles which should actually happen in vblank. UI updates where they are now should simply schedule a vblank update in the future. --- src/defs.s | 4 +- src/rand.s | 28 ++++++- src/unit.s | 20 +++++ src/update.s | 9 ++- tiles/bank8800.inc | 192 ++++++++++++++++++++++----------------------- 5 files changed, 152 insertions(+), 101 deletions(-) diff --git a/src/defs.s b/src/defs.s index e36c868..29e9063 100644 --- a/src/defs.s +++ b/src/defs.s @@ -202,5 +202,5 @@ ; constants #define DD_TIME 90 -#define DD_D0_TILE 0x10 -#define DD_CROSS_TILE 0x20 +#define DD_D0_TILE 0x90 +#define DD_CROSS_TILE 0xA0 diff --git a/src/rand.s b/src/rand.s index a8382d3..e339baf 100644 --- a/src/rand.s +++ b/src/rand.s @@ -100,6 +100,7 @@ roll_d16: ; 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] @@ -117,8 +118,7 @@ dice_display_set: ld b, DD_D0_TILE ld a, [d16] add a, b ; d0 + roll value of d16 - ld a, [dd_d16] ; tile to display - + ld [dd_d16], a ; tile to display ret @@ -131,6 +131,30 @@ dice_display_update: dec a ; timer-- ld [dd_timer], a + ; display sprite + call load_scroll + call load_unit_obj + + + ; set y + ld a, [dd_y] + mul8 a + add a, OBJ_OFF_Y + sub a, b + ld [hl+], a + + ; set x pos + ld a, [dd_x] + mul8 a + add a, OBJ_OFF_X + sub a, c + ld [hl+], a + ; set tile + ld a, [dd_d16] + ld [hl+], a + + xor a, a + ld [hl], a ret diff --git a/src/unit.s b/src/unit.s index e909e2c..3faf5ce 100644 --- a/src/unit.s +++ b/src/unit.s @@ -552,6 +552,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 jr nc, @skip REL ; d < a ld [unit_next_best_init], a @@ -677,6 +678,25 @@ unit_get_pos: ld c, a ; c = x ret + ; sets dice display at current unit's location + ; inputs: + ; hl: unit + ; preserves all registers +unit_dice_display_set: + push_all + + 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 + + pop_all + ret + unit_demo_1: st_def 0x00, unit_demo_1_init, st_unit_idle act_def ACT_T_DEMO_1, 0, 2, 2, 0 diff --git a/src/update.s b/src/update.s index ea6accd..7a1f3e9 100644 --- a/src/update.s +++ b/src/update.s @@ -6,11 +6,19 @@ update_game: call rand call rand_save_srand + ; update some tiles asap! + ; TODO: move this to vblank handler ld a, [draw_flags] and a, DRAWF_UPDATE_UI call nz, ui_draw + + ; clear oam + call shadow_oam_clear call ui_display_current_unit + + call dice_display_update + ld hl, p0_units call units_update ld hl, p1_units @@ -24,7 +32,6 @@ update_game: ret update_unit_placement: - ld de, actor_player call st_update diff --git a/tiles/bank8800.inc b/tiles/bank8800.inc index 2d22ac2..59cea83 100644 --- a/tiles/bank8800.inc +++ b/tiles/bank8800.inc @@ -144,147 +144,147 @@ .chr 00000000 ; tile 16 .chr 00333330 -.chr 03000003 -.chr 03000003 -.chr 03000003 -.chr 03000003 -.chr 03000003 -.chr 03000003 +.chr 03222223 +.chr 03222223 +.chr 03222223 +.chr 03222223 +.chr 03222223 +.chr 03222223 .chr 00333330 ; tile 17 .chr 00333330 -.chr 03100003 -.chr 03000003 -.chr 03000003 -.chr 03000003 -.chr 03000003 -.chr 03000003 +.chr 03122223 +.chr 03222223 +.chr 03222223 +.chr 03222223 +.chr 03222223 +.chr 03222223 .chr 00333330 ; tile 18 .chr 00333330 -.chr 03101003 -.chr 03000003 -.chr 03000003 -.chr 03000003 -.chr 03000003 -.chr 03000003 +.chr 03121223 +.chr 03222223 +.chr 03222223 +.chr 03222223 +.chr 03222223 +.chr 03222223 .chr 00333330 ; tile 19 .chr 00333330 -.chr 03101013 -.chr 03000003 -.chr 03000003 -.chr 03000003 -.chr 03000003 -.chr 03000003 +.chr 03121213 +.chr 03222223 +.chr 03222223 +.chr 03222223 +.chr 03222223 +.chr 03222223 .chr 00333330 ; tile 20 .chr 00333330 -.chr 03101013 -.chr 03010003 -.chr 03000003 -.chr 03000003 -.chr 03000003 -.chr 03000003 +.chr 03121213 +.chr 03212223 +.chr 03222223 +.chr 03222223 +.chr 03222223 +.chr 03222223 .chr 00333330 ; tile 21 .chr 00333330 -.chr 03101013 -.chr 03010103 -.chr 03000003 -.chr 03000003 -.chr 03000003 -.chr 03000003 +.chr 03121213 +.chr 03212123 +.chr 03222223 +.chr 03222223 +.chr 03222223 +.chr 03222223 .chr 00333330 ; tile 22 .chr 00333330 -.chr 03101013 -.chr 03010103 -.chr 03100003 -.chr 03000003 -.chr 03000003 -.chr 03000003 +.chr 03121213 +.chr 03212123 +.chr 03122223 +.chr 03222223 +.chr 03222223 +.chr 03222223 .chr 00333330 ; tile 23 .chr 00333330 -.chr 03101013 -.chr 03010103 -.chr 03101003 -.chr 03000003 -.chr 03000003 -.chr 03000003 +.chr 03121213 +.chr 03212123 +.chr 03121223 +.chr 03222223 +.chr 03222223 +.chr 03222223 .chr 00333330 ; tile 24 .chr 00333330 -.chr 03101013 -.chr 03010103 -.chr 03101013 -.chr 03000003 -.chr 03000003 -.chr 03000003 +.chr 03121213 +.chr 03212123 +.chr 03121213 +.chr 03222223 +.chr 03222223 +.chr 03222223 .chr 00333330 ; tile 25 .chr 00333330 -.chr 03101013 -.chr 03010103 -.chr 03101013 -.chr 03010003 -.chr 03000003 -.chr 03000003 +.chr 03121213 +.chr 03212123 +.chr 03121213 +.chr 03212223 +.chr 03222223 +.chr 03222223 .chr 00333330 ; tile 26 .chr 00333330 -.chr 03101013 -.chr 03010103 -.chr 03101013 -.chr 03010103 -.chr 03000003 -.chr 03000003 +.chr 03121213 +.chr 03212123 +.chr 03121213 +.chr 03212123 +.chr 03222223 +.chr 03222223 .chr 00333330 ; tile 27 .chr 00333330 -.chr 03101013 -.chr 03010103 -.chr 03101013 -.chr 03010103 -.chr 03100003 -.chr 03000003 +.chr 03121213 +.chr 03212123 +.chr 03121213 +.chr 03212123 +.chr 03122223 +.chr 03222223 .chr 00333330 ; tile 28 .chr 00333330 -.chr 03101013 -.chr 03010103 -.chr 03101013 -.chr 03010103 -.chr 03101003 -.chr 03000003 +.chr 03121213 +.chr 03212123 +.chr 03121213 +.chr 03212123 +.chr 03121223 +.chr 03222223 .chr 00333330 ; tile 29 .chr 00333330 -.chr 03101013 -.chr 03010103 -.chr 03101013 -.chr 03010103 -.chr 03101013 -.chr 03000003 +.chr 03121213 +.chr 03212123 +.chr 03121213 +.chr 03212123 +.chr 03121213 +.chr 03222223 .chr 00333330 ; tile 30 .chr 00333330 -.chr 03101013 -.chr 03010103 -.chr 03101013 -.chr 03010103 -.chr 03101013 -.chr 03010003 +.chr 03121213 +.chr 03212123 +.chr 03121213 +.chr 03212123 +.chr 03121213 +.chr 03212223 .chr 00333330 ; tile 31 .chr 00333330 -.chr 03101013 -.chr 03010103 -.chr 03101013 -.chr 03010103 -.chr 03101013 -.chr 03010103 +.chr 03121213 +.chr 03212123 +.chr 03121213 +.chr 03212123 +.chr 03121213 +.chr 03212123 .chr 00333330 ; tile 32 .chr 20000002 -- 2.30.2