From: Lukas Krickl Date: Wed, 16 Jul 2025 08:54:45 +0000 (+0200) Subject: redraw: made redraw more generic. X-Git-Url: https://git.krickl.dev/?a=commitdiff_plain;h=c742a06ba02630c9e383f2ab65e61cba962f4ee1;p=gbrg%2F.git redraw: made redraw more generic. Moved to video --- diff --git a/src/defs.s b/src/defs.s index dbbf2c4..3829502 100644 --- a/src/defs.s +++ b/src/defs.s @@ -32,7 +32,7 @@ #define WINDOW_Y 112 #define WINDOW_X 1 -#define UI_TILE_WIDTH 20 +#define UI_TILE_WIDTH 32 #define UI_TILE_HEIGHT 4 ; defines end of scroll location diff --git a/src/ui.s b/src/ui.s index 3b1a721..2477cb1 100644 --- a/src/ui.s +++ b/src/ui.s @@ -28,7 +28,7 @@ ui_redraw_hp: ret -#define UI_REDRAW_TILES_PER_FRAME 5 +#define UI_REDRAW_TILES_PER_FRAME 4 ; requests a redraw ; this will set up redraw_bg @@ -36,79 +36,19 @@ ui_redraw_hp: 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 diff --git a/src/video.s b/src/video.s index 3228ec5..1b7e60f 100644 --- a/src/video.s +++ b/src/video.s @@ -12,7 +12,7 @@ vblank: ld [RLCD], a ; check ui update - call ui_redraw_vblank + call redraw_vblank ; dma previous frame's oam call OAMDMAFN @@ -225,6 +225,60 @@ video_fade_in: 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 diff --git a/src/wram.s b/src/wram.s index 16e50f2..fc77985 100644 --- a/src/wram.s +++ b/src/wram.s @@ -51,12 +51,12 @@ gameplay_flags: .adv 1 ; 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