ret
-#define UI_REDRAW_TILES_PER_FRAME 5
+#define UI_REDRAW_TILES_PER_FRAME 4
; requests a redraw
; this will set up redraw_bg
ui_request_redraw:
ld hl, SCRN1
ld a, h
- ld [ui_redraw_bg], a
+ ld [redraw_bg], a
ld a, l
- ld [ui_redraw_bg+1], a
+ ld [redraw_bg+1], a
ld de, shadow_ui
ld a, d
- ld [ui_redraw_shadow], a
+ ld [redraw_shadow], a
ld a, e
- ld [ui_redraw_shadow+1], a
+ ld [redraw_shadow+1], a
; steps of 5 * 16
ld a, UI_TILE_WIDTH * UI_TILE_HEIGHT / UI_REDRAW_TILES_PER_FRAME
- ld [ui_redraw_steps], a
+ ld [redraw_steps], a
ret
-#macro ui_redraw_vblank_write
- ld a, [de]
- inc de
- ld [hl+], a
-#endmacro
- ; redraws a UI step in vblank
-ui_redraw_vblank:
- ld a, [ui_redraw_steps]
- ; no more steps we bail
- cp a, 0
- ret z
-
- ; steps--
- dec a
- ld [ui_redraw_steps], a
-
- ; load bg ptr
- ld a, [ui_redraw_bg]
- ld h, a
- ld a, [ui_redraw_bg+1]
- ld l, a
-
- ; load source address
- ld a, [ui_redraw_shadow]
- ld d, a
- ld a, [ui_redraw_shadow+1]
- ld e, a
-
- ; write data
- ; in an unrolled loop
- ui_redraw_vblank_write
- ui_redraw_vblank_write
- ui_redraw_vblank_write
- ui_redraw_vblank_write
- ui_redraw_vblank_write
-
- ; lastly store current ptr state again
-
-
- ld a, d
- ld [ui_redraw_shadow], a
- ld a, e
- ld [ui_redraw_shadow+1], a
-
- ; skip 12 tiles ahead in BG
- ; every other step
- ld a, [ui_redraw_steps]
- and a, 3
- jr nz, @no_jump REL
- ld de, 12
- add hl, de
-@no_jump:
-
- ld a, h
- ld [ui_redraw_bg], a
- ld a, l
- ld [ui_redraw_bg+1], a
-
- ret
-#undefine ui_redraw_vblank_write
ld [RLCD], a
; check ui update
- call ui_redraw_vblank
+ call redraw_vblank
; dma previous frame's oam
call OAMDMAFN
ret
#undefine video_fade_set_bgp
+
+#macro redraw_vblank_write
+ ld a, [de]
+ inc de
+ ld [hl+], a
+#endmacro
+ ; redraws a BG step in vblank
+redraw_vblank:
+ ld a, [redraw_steps]
+ ; no more steps we bail
+ cp a, 0
+ ret z
+
+ ; steps--
+ dec a
+ ld [redraw_steps], a
+
+ ; load bg ptr
+ ld a, [redraw_bg]
+ ld h, a
+ ld a, [redraw_bg+1]
+ ld l, a
+
+ ; load source address
+ ld a, [redraw_shadow]
+ ld d, a
+ ld a, [redraw_shadow+1]
+ ld e, a
+
+ ; write data
+ ; in an unrolled loop
+ redraw_vblank_write
+ redraw_vblank_write
+ redraw_vblank_write
+ redraw_vblank_write
+
+ ; lastly store current ptr state again
+
+
+ ld a, d
+ ld [redraw_shadow], a
+ ld a, e
+ ld [redraw_shadow+1], a
+
+ ld a, h
+ ld [redraw_bg], a
+ ld a, l
+ ld [redraw_bg+1], a
+
+ ret
+#undefine redraw_vblank_write
+
+
+
; loads tilesets
; inputs:
; de: source
; this UI is then re-drawn on request in vblank
shadow_ui: .adv UI_TILE_WIDTH * UI_TILE_HEIGHT
-; UI redraw BG address
-ui_redraw_bg: .adv 2
-; UI redraw shadow address
-ui_redraw_shadow: .adv 2
-; remaining UI redraw steps
-ui_redraw_steps: .adv 1
+; redraw BG address
+redraw_bg: .adv 2
+; redraw shadow address
+redraw_shadow: .adv 2
+; remaining redraw steps
+redraw_steps: .adv 1
; dummy oam
; same memory as empty_unit