dice display: Added dice display for units
authorLukas Krickl <lukas@krickl.dev>
Thu, 5 Jun 2025 16:25:12 +0000 (18:25 +0200)
committerLukas Krickl <lukas@krickl.dev>
Thu, 5 Jun 2025 16:25:12 +0000 (18:25 +0200)
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
src/rand.s
src/unit.s
src/update.s
tiles/bank8800.inc

index e36c8684a9f0969eefdf90844e42a70ff9140596..29e9063fde9d7cf78c41c66f5760ef19815fb869 100644 (file)
 
   ; constants
 #define DD_TIME 90 
-#define DD_D0_TILE 0x1
-#define DD_CROSS_TILE 0x20
+#define DD_D0_TILE 0x9
+#define DD_CROSS_TILE 0xA0
index a8382d35ab44e754fc183e44ee6eaf03c1fa8969..e339bafd8a8e0f25f232b6eca001f654fbba2891 100644 (file)
@@ -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
index e909e2cc8476b61d7214277dcb7a0b72897240ed..3faf5cec8589ab29b05e81f07ba6957be9fa3f0c 100644 (file)
@@ -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
index ea6accdb04b1a939eadfd19b4b37018f04b14db3..7a1f3e91ad67275e2ed0f4c3654d29b81f28f950 100644 (file)
@@ -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
   
index 2d22ac2eacb6d961885c553d5153241061cab986..59cea83b522ad1fa68c0cf21ef14e6481e68b840 100644 (file)
 .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