2013-08-29 16:37:35 -07:00
|
|
|
; Functions dealing with palettes.
|
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
UpdatePalsIfCGB::
|
2018-01-01 06:08:21 -08:00
|
|
|
; update bgp data from wBGPals2
|
|
|
|
; update obp data from wOBPals2
|
2013-08-29 16:37:35 -07:00
|
|
|
; return carry if successful
|
|
|
|
|
|
|
|
; check cgb
|
|
|
|
ld a, [hCGB]
|
|
|
|
and a
|
|
|
|
ret z
|
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
UpdateCGBPals::
|
2013-08-29 16:37:35 -07:00
|
|
|
; return carry if successful
|
|
|
|
; any pals to update?
|
|
|
|
ld a, [hCGBPalUpdate]
|
|
|
|
and a
|
|
|
|
ret z
|
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
ForceUpdateCGBPals::
|
2013-08-29 16:37:35 -07:00
|
|
|
ld a, [rSVBK]
|
|
|
|
push af
|
2018-01-01 06:08:21 -08:00
|
|
|
ld a, BANK(wBGPals2)
|
2013-08-29 16:37:35 -07:00
|
|
|
ld [rSVBK], a
|
|
|
|
|
2018-01-01 06:08:21 -08:00
|
|
|
ld hl, wBGPals2
|
2013-08-29 16:37:35 -07:00
|
|
|
|
|
|
|
; copy 8 pals to bgpd
|
2018-01-01 10:43:02 -08:00
|
|
|
ld a, 1 << rBGPI_AUTO_INCREMENT
|
2013-08-29 16:37:35 -07:00
|
|
|
ld [rBGPI], a
|
2017-12-25 10:40:10 -08:00
|
|
|
ld c, LOW(rBGPD)
|
|
|
|
ld b, 8 / 2
|
2013-08-29 16:37:35 -07:00
|
|
|
.bgp
|
2017-12-25 10:40:10 -08:00
|
|
|
rept (1 palettes) * 2
|
2013-08-29 16:37:35 -07:00
|
|
|
ld a, [hli]
|
|
|
|
ld [$ff00+c], a
|
2015-12-09 08:38:40 -08:00
|
|
|
endr
|
2013-08-29 16:37:35 -07:00
|
|
|
|
|
|
|
dec b
|
|
|
|
jr nz, .bgp
|
2016-04-10 11:42:14 -07:00
|
|
|
|
2018-01-01 06:08:21 -08:00
|
|
|
; hl is now wOBPals2
|
2016-04-10 11:42:14 -07:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
; copy 8 pals to obpd
|
2018-01-01 10:43:02 -08:00
|
|
|
ld a, 1 << rOBPI_AUTO_INCREMENT
|
2013-08-29 16:37:35 -07:00
|
|
|
ld [rOBPI], a
|
2017-12-25 10:40:10 -08:00
|
|
|
ld c, LOW(rOBPD)
|
|
|
|
ld b, 8 / 2
|
2013-08-29 16:37:35 -07:00
|
|
|
.obp
|
2017-12-25 10:40:10 -08:00
|
|
|
rept (1 palettes) * 2
|
2013-08-29 16:37:35 -07:00
|
|
|
ld a, [hli]
|
|
|
|
ld [$ff00+c], a
|
2015-12-09 08:38:40 -08:00
|
|
|
endr
|
2013-08-29 16:37:35 -07:00
|
|
|
|
|
|
|
dec b
|
|
|
|
jr nz, .obp
|
2016-04-10 11:42:14 -07:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
pop af
|
|
|
|
ld [rSVBK], a
|
|
|
|
|
|
|
|
; clear pal update queue
|
|
|
|
xor a
|
|
|
|
ld [hCGBPalUpdate], a
|
|
|
|
|
|
|
|
scf
|
|
|
|
ret
|
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
DmgToCgbBGPals::
|
2013-08-29 16:37:35 -07:00
|
|
|
; exists to forego reinserting cgb-converted image data
|
|
|
|
|
|
|
|
; input: a -> bgp
|
|
|
|
|
|
|
|
ld [rBGP], a
|
|
|
|
push af
|
|
|
|
|
2015-11-09 13:41:09 -08:00
|
|
|
; Don't need to be here if DMG
|
2013-08-29 16:37:35 -07:00
|
|
|
ld a, [hCGB]
|
|
|
|
and a
|
|
|
|
jr z, .end
|
|
|
|
|
|
|
|
push hl
|
|
|
|
push de
|
|
|
|
push bc
|
|
|
|
ld a, [rSVBK]
|
|
|
|
push af
|
|
|
|
|
2018-01-01 06:08:21 -08:00
|
|
|
ld a, BANK(wBGPals2)
|
2013-08-29 16:37:35 -07:00
|
|
|
ld [rSVBK], a
|
|
|
|
|
|
|
|
; copy & reorder bg pal buffer
|
2018-01-01 06:08:21 -08:00
|
|
|
ld hl, wBGPals2 ; to
|
|
|
|
ld de, wBGPals1 ; from
|
2013-08-29 16:37:35 -07:00
|
|
|
; order
|
|
|
|
ld a, [rBGP]
|
|
|
|
ld b, a
|
|
|
|
; all pals
|
|
|
|
ld c, 8
|
|
|
|
call CopyPals
|
|
|
|
; request pal update
|
|
|
|
ld a, 1
|
|
|
|
ld [hCGBPalUpdate], a
|
|
|
|
|
|
|
|
pop af
|
|
|
|
ld [rSVBK], a
|
|
|
|
pop bc
|
|
|
|
pop de
|
|
|
|
pop hl
|
|
|
|
.end
|
|
|
|
pop af
|
|
|
|
ret
|
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
DmgToCgbObjPals::
|
2013-08-29 16:37:35 -07:00
|
|
|
; exists to forego reinserting cgb-converted image data
|
|
|
|
|
|
|
|
; input: d -> obp1
|
|
|
|
; e -> obp2
|
|
|
|
|
|
|
|
ld a, e
|
|
|
|
ld [rOBP0], a
|
|
|
|
ld a, d
|
|
|
|
ld [rOBP1], a
|
2016-04-10 11:42:14 -07:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
ld a, [hCGB]
|
|
|
|
and a
|
|
|
|
ret z
|
|
|
|
|
|
|
|
push hl
|
|
|
|
push de
|
|
|
|
push bc
|
|
|
|
ld a, [rSVBK]
|
|
|
|
push af
|
|
|
|
|
2018-01-01 06:08:21 -08:00
|
|
|
ld a, BANK(wOBPals2)
|
2013-08-29 16:37:35 -07:00
|
|
|
ld [rSVBK], a
|
|
|
|
|
|
|
|
; copy & reorder obj pal buffer
|
2018-01-01 06:08:21 -08:00
|
|
|
ld hl, wOBPals2 ; to
|
|
|
|
ld de, wOBPals1 ; from
|
2013-08-29 16:37:35 -07:00
|
|
|
; order
|
|
|
|
ld a, [rOBP0]
|
|
|
|
ld b, a
|
|
|
|
; all pals
|
|
|
|
ld c, 8
|
|
|
|
call CopyPals
|
|
|
|
; request pal update
|
|
|
|
ld a, 1
|
|
|
|
ld [hCGBPalUpdate], a
|
|
|
|
|
|
|
|
pop af
|
|
|
|
ld [rSVBK], a
|
|
|
|
pop bc
|
|
|
|
pop de
|
|
|
|
pop hl
|
|
|
|
ret
|
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
DmgToCgbObjPal0::
|
2013-08-29 16:37:35 -07:00
|
|
|
ld [rOBP0], a
|
|
|
|
push af
|
2015-10-16 10:35:43 -07:00
|
|
|
|
2015-12-09 08:38:40 -08:00
|
|
|
; Don't need to be here if not CGB
|
2013-08-29 16:37:35 -07:00
|
|
|
ld a, [hCGB]
|
|
|
|
and a
|
2015-12-09 08:38:40 -08:00
|
|
|
jr z, .dmg
|
2015-10-16 10:35:43 -07:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
push hl
|
|
|
|
push de
|
|
|
|
push bc
|
2015-10-16 10:35:43 -07:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
ld a, [rSVBK]
|
|
|
|
push af
|
2018-01-01 06:08:21 -08:00
|
|
|
ld a, BANK(wOBPals2)
|
2013-08-29 16:37:35 -07:00
|
|
|
ld [rSVBK], a
|
2015-10-16 10:35:43 -07:00
|
|
|
|
2018-01-01 06:08:21 -08:00
|
|
|
ld hl, wOBPals2 palette 0
|
|
|
|
ld de, wOBPals1 palette 0
|
2013-08-29 16:37:35 -07:00
|
|
|
ld a, [rOBP0]
|
|
|
|
ld b, a
|
2015-12-09 08:38:40 -08:00
|
|
|
ld c, 1
|
2013-08-29 16:37:35 -07:00
|
|
|
call CopyPals
|
2015-12-09 08:38:40 -08:00
|
|
|
ld a, 1
|
2013-08-29 16:37:35 -07:00
|
|
|
ld [hCGBPalUpdate], a
|
2015-10-16 10:35:43 -07:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
pop af
|
|
|
|
ld [rSVBK], a
|
2015-10-16 10:35:43 -07:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
pop bc
|
|
|
|
pop de
|
|
|
|
pop hl
|
|
|
|
|
2015-12-09 08:38:40 -08:00
|
|
|
.dmg
|
2013-08-29 16:37:35 -07:00
|
|
|
pop af
|
|
|
|
ret
|
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
DmgToCgbObjPal1::
|
2013-08-29 16:37:35 -07:00
|
|
|
ld [rOBP1], a
|
|
|
|
push af
|
2015-12-09 08:38:40 -08:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
ld a, [hCGB]
|
|
|
|
and a
|
2015-12-09 08:38:40 -08:00
|
|
|
jr z, .dmg
|
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
push hl
|
|
|
|
push de
|
|
|
|
push bc
|
2015-12-09 08:38:40 -08:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
ld a, [rSVBK]
|
|
|
|
push af
|
2018-01-01 06:08:21 -08:00
|
|
|
ld a, BANK(wOBPals2)
|
2013-08-29 16:37:35 -07:00
|
|
|
ld [rSVBK], a
|
2015-12-09 08:38:40 -08:00
|
|
|
|
2018-01-01 06:08:21 -08:00
|
|
|
ld hl, wOBPals2 palette 1
|
|
|
|
ld de, wOBPals1 palette 1
|
2013-08-29 16:37:35 -07:00
|
|
|
ld a, [rOBP1]
|
|
|
|
ld b, a
|
2015-12-09 08:38:40 -08:00
|
|
|
ld c, 1
|
2013-08-29 16:37:35 -07:00
|
|
|
call CopyPals
|
2015-12-09 08:38:40 -08:00
|
|
|
ld a, 1
|
2013-08-29 16:37:35 -07:00
|
|
|
ld [hCGBPalUpdate], a
|
2015-12-09 08:38:40 -08:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
pop af
|
|
|
|
ld [rSVBK], a
|
2015-12-09 08:38:40 -08:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
pop bc
|
|
|
|
pop de
|
|
|
|
pop hl
|
|
|
|
|
2015-12-09 08:38:40 -08:00
|
|
|
.dmg
|
2013-08-29 16:37:35 -07:00
|
|
|
pop af
|
|
|
|
ret
|
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
CopyPals::
|
2013-08-29 16:37:35 -07:00
|
|
|
; copy c palettes in order b from de to hl
|
|
|
|
|
|
|
|
push bc
|
2017-12-26 17:33:41 -08:00
|
|
|
ld c, NUM_PAL_COLORS
|
2013-08-29 16:37:35 -07:00
|
|
|
.loop
|
|
|
|
push de
|
|
|
|
push hl
|
2016-04-10 11:42:14 -07:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
; get pal color
|
|
|
|
ld a, b
|
2018-01-26 18:25:49 -08:00
|
|
|
maskbits 1 << PAL_COLOR_SIZE
|
2013-08-29 16:37:35 -07:00
|
|
|
; 2 bytes per color
|
|
|
|
add a
|
|
|
|
ld l, a
|
|
|
|
ld h, 0
|
|
|
|
add hl, de
|
|
|
|
ld e, [hl]
|
|
|
|
inc hl
|
|
|
|
ld d, [hl]
|
2016-04-10 11:42:14 -07:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
; dest
|
|
|
|
pop hl
|
|
|
|
; write color
|
|
|
|
ld [hl], e
|
|
|
|
inc hl
|
|
|
|
ld [hl], d
|
|
|
|
inc hl
|
|
|
|
; next pal color
|
2018-01-26 18:25:49 -08:00
|
|
|
rept PAL_COLOR_SIZE
|
2013-08-29 16:37:35 -07:00
|
|
|
srl b
|
2018-01-26 18:25:49 -08:00
|
|
|
endr
|
2013-08-29 16:37:35 -07:00
|
|
|
; source
|
|
|
|
pop de
|
|
|
|
; done pal?
|
|
|
|
dec c
|
|
|
|
jr nz, .loop
|
2016-04-10 11:42:14 -07:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
; de += 8 (next pal)
|
2018-01-22 16:57:35 -08:00
|
|
|
ld a, PALETTE_SIZE
|
2013-08-29 16:37:35 -07:00
|
|
|
add e
|
|
|
|
jr nc, .ok
|
|
|
|
inc d
|
|
|
|
.ok
|
|
|
|
ld e, a
|
2016-04-10 11:42:14 -07:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
; how many more pals?
|
|
|
|
pop bc
|
|
|
|
dec c
|
|
|
|
jr nz, CopyPals
|
|
|
|
ret
|
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
ClearVBank1::
|
2013-08-29 16:37:35 -07:00
|
|
|
ld a, [hCGB]
|
|
|
|
and a
|
|
|
|
ret z
|
2015-11-16 18:07:26 -08:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
ld a, 1
|
|
|
|
ld [rVBK], a
|
2015-11-16 18:07:26 -08:00
|
|
|
|
2017-12-26 20:07:46 -08:00
|
|
|
ld hl, VRAM_Begin
|
|
|
|
ld bc, VRAM_End - VRAM_Begin
|
2013-08-29 16:37:35 -07:00
|
|
|
xor a
|
|
|
|
call ByteFill
|
2015-11-16 18:07:26 -08:00
|
|
|
|
2013-08-29 16:37:35 -07:00
|
|
|
ld a, 0
|
|
|
|
ld [rVBK], a
|
|
|
|
ret
|
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
ret_d90::
|
2013-08-29 16:37:35 -07:00
|
|
|
ret
|
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
ReloadSpritesNoPalettes::
|
2013-08-29 16:37:35 -07:00
|
|
|
ld a, [hCGB]
|
|
|
|
and a
|
|
|
|
ret z
|
|
|
|
ld a, [rSVBK]
|
|
|
|
push af
|
2018-01-01 06:08:21 -08:00
|
|
|
ld a, BANK(wBGPals2)
|
2013-08-29 16:37:35 -07:00
|
|
|
ld [rSVBK], a
|
2018-01-01 06:08:21 -08:00
|
|
|
ld hl, wBGPals2
|
2017-12-25 10:40:10 -08:00
|
|
|
ld bc, (8 palettes) + (2 palettes)
|
2013-08-29 16:37:35 -07:00
|
|
|
xor a
|
|
|
|
call ByteFill
|
|
|
|
pop af
|
|
|
|
ld [rSVBK], a
|
|
|
|
ld a, 1
|
|
|
|
ld [hCGBPalUpdate], a
|
|
|
|
call DelayFrame
|
|
|
|
ret
|
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
FarCallSwapTextboxPalettes::
|
2016-05-27 07:41:59 -07:00
|
|
|
homecall SwapTextboxPalettes
|
2013-08-29 16:37:35 -07:00
|
|
|
ret
|
|
|
|
|
2018-06-24 07:09:41 -07:00
|
|
|
FarCallScrollBGMapPalettes::
|
2016-05-27 07:41:59 -07:00
|
|
|
homecall ScrollBGMapPalettes
|
2013-08-29 16:37:35 -07:00
|
|
|
ret
|