pokepinball/home/palettes.asm
Xillicis fb7aa4b2e0
Update to rgbds v0.8.0 (#57)
* First test commit

* XIL: All changes for pokepinball to work with rgbds v0.8.0
2024-12-22 17:53:44 -06:00

467 lines
6.1 KiB
NASM

SetAllPalettesWhite: ; 0xb66
; Sets all BG and OBJ palettes to white.
ldh a, [hGameBoyColorFlag]
and a
jr nz, .gameboyColor
xor a
ldh [hBGP], a
ldh [hOBP0], a
ldh [hOBP1], a
ret
.gameboyColor
ld de, rBGPI
ld hl, wPaletteData
ld b, $0
ld c, $20
.asm_b7d
ld a, b
ldh [rBGPI], a
inc b
ldh a, [rBGPD]
ld [hli], a
ld a, b
ldh [rBGPI], a
inc b
ldh a, [rBGPD]
ld [hli], a
dec c
jr nz, .asm_b7d
ld b, $0
ld c, $20
.asm_b92
ld a, b
ldh [rOBPI], a
inc b
ldh a, [rOBPD]
ld [hli], a
ld a, b
ldh [rOBPI], a
inc b
ldh a, [rOBPD]
ld [hli], a
dec c
jr nz, .asm_b92
ld de, rBGPI
ld b, $2
.asm_ba8
ld a, $80
ld [de], a
inc de
ld c, $20
.asm_bae
ld a, $ff
ld [de], a
ld [hli], a
ld a, $7f
ld [de], a
ld [hli], a
dec c
jr nz, .asm_bae
inc de
dec b
jr nz, .asm_ba8
ret
FadeIn: ; 0xbbe
; Fades palettes in from white screen.
ldh a, [hGameBoyColorFlag]
and a
jp nz, FadeIn_GameboyColor
; Regular Gameboy
ld hl, hBGP
ld de, wBGP
ld b, $3
.loop
ld a, [de]
and $55
ld c, a
ld a, [de]
and $aa
srl a
and c
ld [hli], a
inc de
dec b
jr nz, .loop
ld bc, $0002
call AdvanceFrames
ld hl, hBGP
ld de, wBGP
ld b, $3
.loop2
ld a, [de]
and $aa
srl a
add [hl]
ld [hli], a
inc de
dec b
jr nz, .loop2
ld bc, $0002
call AdvanceFrames
ld hl, hBGP
ld de, wBGP
ld b, $3
.loop3
ld a, [de]
and $55
ld c, a
ld a, [de]
and $aa
srl a
or c
add [hl]
ld [hli], a
inc de
dec b
jr nz, .loop3
ld bc, $0002
call AdvanceFrames
ret
FadeIn_GameboyColor: ; 0xc19
; Fades in to the target palette data in wPaletteData from wFadeBGPaletteData and wFadeOBJPaletteData
; Fade is completed after 16 frames of incrementally updating the palettes.
ld b, 16 ; fade takes 16 frames to complete
.loop
push bc
ld de, wPaletteData
ld hl, wFadeBGPaletteData
call FadeInStep
call SetFadedPalettes
pop bc
dec b
jr nz, .loop
ret
FadeInStep: ; 0xc2d
; de = base palette data
; hl = faded palette data
ld a, b
cp $1
jr z, .lastStep
ld c, $40 ; total number of colors in BG and OBJ palettes
.loop
push bc
ld a, [hli]
sub $42
ld c, a
ld a, [hld]
sbc $8
ld b, a ; subtracted 2 from each RGB value of the color
call GetNextFadedPalette
ld a, c
ld [hli], a
ld a, b
ld [hli], a
pop bc
dec c
jr nz, .loop
ret
.lastStep
ld c, $40 ; total number of colors in BG and OBJ palettes
.loop2
push bc
ld a, [hli]
sub $21
ld c, a
ld a, [hld]
sbc $4
ld b, a
call GetNextFadedPalette
ld a, c
ld [hli], a
ld a, b
ld [hli], a
pop bc
dec c
jr nz, .loop2
ret
GetNextFadedPalette: ; 0xc60
; de = source palette data
; bc = target palette RGB - 2
; Places the resulting palette RGB into bc
push hl
ld a, [de]
and %00011111 ; Target RGB Blue value
ld l, a
ld a, c
and %00011111 ; Current faded RBG Blue value - 2
cp l
jr nc, .brighter
; set the current faded Blue value to the target blue value.
ld a, c
and %11100000
or l
ld c, a
.brighter
ld a, [de]
and %11100000
ld l, a
inc de
ld a, [de]
srl a
rr l
srl a
rr l
ld a, c
and %11100000
ld h, a
ld a, b
srl a
rr h
srl a
rr h
ld a, h
cp l
jr nc, .asm_ca3
ld h, $0
sla l
rl h
sla l
rl h
ld a, c
and $1f
or l
ld c, a
ld a, b
and $7c
or h
ld b, a
.asm_ca3
ld a, [de]
and $7c
ld l, a
ld a, b
and $7c
cp l
jr nc, .asm_cb2
ld a, b
and $3
or l
ld b, a
.asm_cb2
inc de
pop hl
ret
FadeOut: ; 0xcb5
; Fades palettes out to a white screen.
ldh a, [hGameBoyColorFlag]
and a
jp nz, FadeOut_GameboyColor
; Regular Gameboy
ld hl, hBGP
ld b, $3
.loop
push bc
push hl
ld b, $3
.loop2
ld a, [hl]
and $55
ld c, a
ld a, [hl]
and $aa
srl a
or c
cpl
inc a
add [hl]
ld [hli], a
dec b
jr nz, .loop2
ld bc, $0002
call AdvanceFrames
pop hl
pop bc
dec b
jr nz, .loop
xor a
ld hl, hBGP
ld [hli], a
ld [hli], a
ld [hl], a
ld bc, $0002
call AdvanceFrames
ret
FadeOut_GameboyColor: ; 0xcee
; Fades out to white RGB colors from the currently-loaded palettes.
; Fade is completed after 16 frames of incrementally updating the palettes.
ld hl, wFadeBGPaletteData
ld de, rBGPI
call LoadCurrentPalettesIntoFadePalettes
ld hl, wFadeOBJPaletteData
ld de, rOBPI
call LoadCurrentPalettesIntoFadePalettes
ld b, 16 ; fade takes 16 frames to complete
.loop
push bc
ld hl, wFadeBGPaletteData
call FadeOutStep
call SetFadedPalettes
pop bc
dec b
jr nz, .loop
ret
FadeOutStep: ; 0xd11
; hl = faded palette data
ld b, $40
.asm_d13
ld a, [hl]
and $1f
add $2
ld e, a
cp $1f
jr c, .asm_d1f
ld e, $1f
.asm_d1f
ld a, [hl]
and $e0
or e
ld [hl], a
ld a, [hli]
and $e0
ld e, [hl]
dec hl
srl e
rr a
srl e
rr a
add $10
ld e, a
jr nc, .asm_d38
ld e, $f8
.asm_d38
ld d, $0
sla e
rl d
sla e
rl d
ld a, [hl]
and $1f
or e
ld [hli], a
ld a, [hl]
and $7c
or d
ld [hl], a
ld a, [hl]
and $7c
add $8
ld e, a
cp $7c
jr c, .asm_d58
ld e, $7c
.asm_d58
ld a, [hl]
and $3
or e
ld [hli], a
dec b
jr nz, .asm_d13
ret
SetFadedPalettes: ; 0d61
; Sets the current palette data to the faded palettes.
ldh a, [rIE]
res 0, a
ldh [rIE], a
ld hl, wFadeBGPaletteData
ld de, rBGPI
ld a, $80
ld [de], a
inc de
.waitForVBlank
ldh a, [rLY]
cp $90
jr c, .waitForVBlank
ld b, $10
.loadBGColorsLoop
ld a, [hli]
ld [de], a
ld a, [hli]
ld [de], a
ld a, [hli]
ld [de], a
ld a, [hli]
ld [de], a
dec b
jr nz, .loadBGColorsLoop
inc de
ld a, $80
ld [de], a
inc de
ld b, $10
.loadOBJColorsLoop
ld a, [hli]
ld [de], a
ld a, [hli]
ld [de], a
ld a, [hli]
ld [de], a
ld a, [hli]
ld [de], a
dec b
jr nz, .loadOBJColorsLoop
ldh a, [rIE]
set 0, a
ldh [rIE], a
ret
LoadCurrentPalettesIntoFadePalettes: ; 0xd9d
; hl = destination for palette data
; de = source of palettes (rBGPI or rOBPI)
ld b, $0
ld c, e
inc c
call WaitForLCD
.asm_da4
call Func_61b
.asm_da7
ldh a, [rSTAT]
and $3
jr nz, .asm_da7 ; wait for lcd controller to finish transferring data
ld a, b
ld [de], a
ldh a, [$ff00+c]
ld [hli], a
inc b
ld a, b
ld [de], a
ldh a, [$ff00+c]
ld [hli], a
inc b
ld a, b
ld [de], a
ldh a, [$ff00+c]
ld [hli], a
inc b
ld a, b
ld [de], a
ldh a, [$ff00+c]
ld [hli], a
inc b
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
ld a, b
cp $40
jr nz, .asm_da4
ret