pokecrystal-board/home/palettes.asm

342 lines
3.8 KiB
NASM
Raw Normal View History

; 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
; return carry if successful
; check cgb
ld a, [hCGB]
and a
ret z
2018-06-24 07:09:41 -07:00
UpdateCGBPals::
; return carry if successful
; any pals to update?
ld a, [hCGBPalUpdate]
and a
ret z
2018-06-24 07:09:41 -07:00
ForceUpdateCGBPals::
ld a, [rSVBK]
push af
2018-01-01 06:08:21 -08:00
ld a, BANK(wBGPals2)
ld [rSVBK], a
2018-01-01 06:08:21 -08:00
ld hl, wBGPals2
; copy 8 pals to bgpd
ld a, 1 << rBGPI_AUTO_INCREMENT
ld [rBGPI], a
ld c, LOW(rBGPD)
ld b, 8 / 2
.bgp
rept (1 palettes) * 2
ld a, [hli]
ld [$ff00+c], a
2015-12-09 08:38:40 -08:00
endr
dec b
jr nz, .bgp
2018-01-01 06:08:21 -08:00
; hl is now wOBPals2
; copy 8 pals to obpd
ld a, 1 << rOBPI_AUTO_INCREMENT
ld [rOBPI], a
ld c, LOW(rOBPD)
ld b, 8 / 2
.obp
rept (1 palettes) * 2
ld a, [hli]
ld [$ff00+c], a
2015-12-09 08:38:40 -08:00
endr
dec b
jr nz, .obp
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::
; 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
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)
ld [rSVBK], a
; copy & reorder bg pal buffer
2018-01-01 06:08:21 -08:00
ld hl, wBGPals2 ; to
ld de, wBGPals1 ; from
; 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::
; 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
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)
ld [rSVBK], a
; copy & reorder obj pal buffer
2018-01-01 06:08:21 -08:00
ld hl, wOBPals2 ; to
ld de, wOBPals1 ; from
; 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::
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
ld a, [hCGB]
and a
2015-12-09 08:38:40 -08:00
jr z, .dmg
2015-10-16 10:35:43 -07:00
push hl
push de
push bc
2015-10-16 10:35:43 -07:00
ld a, [rSVBK]
push af
2018-01-01 06:08:21 -08:00
ld a, BANK(wOBPals2)
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
ld a, [rOBP0]
ld b, a
2015-12-09 08:38:40 -08:00
ld c, 1
call CopyPals
2015-12-09 08:38:40 -08:00
ld a, 1
ld [hCGBPalUpdate], a
2015-10-16 10:35:43 -07:00
pop af
ld [rSVBK], a
2015-10-16 10:35:43 -07:00
pop bc
pop de
pop hl
2015-12-09 08:38:40 -08:00
.dmg
pop af
ret
2018-06-24 07:09:41 -07:00
DmgToCgbObjPal1::
ld [rOBP1], a
push af
2015-12-09 08:38:40 -08:00
ld a, [hCGB]
and a
2015-12-09 08:38:40 -08:00
jr z, .dmg
push hl
push de
push bc
2015-12-09 08:38:40 -08:00
ld a, [rSVBK]
push af
2018-01-01 06:08:21 -08:00
ld a, BANK(wOBPals2)
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
ld a, [rOBP1]
ld b, a
2015-12-09 08:38:40 -08:00
ld c, 1
call CopyPals
2015-12-09 08:38:40 -08:00
ld a, 1
ld [hCGBPalUpdate], a
2015-12-09 08:38:40 -08:00
pop af
ld [rSVBK], a
2015-12-09 08:38:40 -08:00
pop bc
pop de
pop hl
2015-12-09 08:38:40 -08:00
.dmg
pop af
ret
2018-06-24 07:09:41 -07:00
CopyPals::
; 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
.loop
push de
push hl
; get pal color
ld a, b
2018-01-26 18:25:49 -08:00
maskbits 1 << PAL_COLOR_SIZE
; 2 bytes per color
add a
ld l, a
ld h, 0
add hl, de
ld e, [hl]
inc hl
ld d, [hl]
; 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
srl b
2018-01-26 18:25:49 -08:00
endr
; source
pop de
; done pal?
dec c
jr nz, .loop
; de += 8 (next pal)
2018-01-22 16:57:35 -08:00
ld a, PALETTE_SIZE
add e
jr nc, .ok
inc d
.ok
ld e, a
; how many more pals?
pop bc
dec c
jr nz, CopyPals
ret
2018-06-24 07:09:41 -07:00
ClearVBank1::
ld a, [hCGB]
and a
ret z
2015-11-16 18:07:26 -08:00
ld a, 1
ld [rVBK], a
2015-11-16 18:07:26 -08:00
ld hl, VRAM_Begin
ld bc, VRAM_End - VRAM_Begin
xor a
call ByteFill
2015-11-16 18:07:26 -08:00
ld a, 0
ld [rVBK], a
ret
2018-06-24 07:09:41 -07:00
ret_d90::
ret
2018-06-24 07:09:41 -07:00
ReloadSpritesNoPalettes::
ld a, [hCGB]
and a
ret z
ld a, [rSVBK]
push af
2018-01-01 06:08:21 -08:00
ld a, BANK(wBGPals2)
ld [rSVBK], a
2018-01-01 06:08:21 -08:00
ld hl, wBGPals2
ld bc, (8 palettes) + (2 palettes)
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
ret
2018-06-24 07:09:41 -07:00
FarCallScrollBGMapPalettes::
2016-05-27 07:41:59 -07:00
homecall ScrollBGMapPalettes
ret