pokecrystal-board/engine/tilesets/timeofday_pals.asm

309 lines
4.4 KiB
NASM
Raw Normal View History

2018-06-24 07:09:41 -07:00
DummyPredef35:
2018-01-02 06:05:14 -08:00
DummyPredef36:
ret
2018-06-24 07:09:41 -07:00
UpdateTimeOfDayPal::
2018-01-23 14:39:09 -08:00
ld a, [wTimeOfDay]
ld [wCurTimeOfDay], a
2015-10-24 07:34:19 -07:00
call GetTimePalette
2018-01-23 14:39:09 -08:00
ld [wTimeOfDayPal], a
2015-10-24 07:34:19 -07:00
ret
2018-06-24 07:09:41 -07:00
_TimeOfDayPals::
2015-10-24 07:34:19 -07:00
; return carry if pals are changed
; forced pals?
2015-12-14 08:12:18 -08:00
ld hl, wTimeOfDayPalFlags
2015-10-24 07:34:19 -07:00
bit 7, [hl]
jr nz, .dontchange
; do we need to bother updating?
2018-01-23 14:39:09 -08:00
ld a, [wTimeOfDay]
ld hl, wCurTimeOfDay
2015-10-24 07:34:19 -07:00
cp [hl]
jr z, .dontchange
; if so, the time of day has changed
2018-01-23 14:39:09 -08:00
ld a, [wTimeOfDay]
ld [wCurTimeOfDay], a
2015-10-24 07:34:19 -07:00
; get palette id
call GetTimePalette
; same palette as before?
2018-01-23 14:39:09 -08:00
ld hl, wTimeOfDayPal
2015-10-24 07:34:19 -07:00
cp [hl]
jr z, .dontchange
; update palette id
2018-01-23 14:39:09 -08:00
ld [wTimeOfDayPal], a
2015-10-24 07:34:19 -07:00
2017-12-26 17:33:41 -08:00
; save bg palette 7
2018-01-01 06:08:21 -08:00
ld hl, wBGPals1 palette PAL_BG_TEXT
2015-10-24 07:34:19 -07:00
; save wram bank
ldh a, [rSVBK]
2015-10-24 07:34:19 -07:00
ld b, a
2018-01-18 18:48:52 -08:00
ld a, BANK(wBGPals1)
ldh [rSVBK], a
2015-10-24 07:34:19 -07:00
; push palette
2017-12-26 17:33:41 -08:00
ld c, NUM_PAL_COLORS
2015-10-24 07:34:19 -07:00
.push
ld d, [hl]
inc hl
ld e, [hl]
inc hl
push de
dec c
jr nz, .push
; restore wram bank
ld a, b
ldh [rSVBK], a
2015-10-24 07:34:19 -07:00
; update cgb pals
ld b, CGB_MAPPALS
call GetCGBLayout
2015-10-24 07:34:19 -07:00
2017-12-26 17:33:41 -08:00
; restore bg palette 7
2018-01-01 06:08:21 -08:00
ld hl, wOBPals1 - 1 ; last byte in wBGPals1
2015-10-24 07:34:19 -07:00
; save wram bank
ldh a, [rSVBK]
2015-10-24 07:34:19 -07:00
ld d, a
2018-01-18 18:48:52 -08:00
ld a, BANK(wOBPals1)
ldh [rSVBK], a
2015-10-24 07:34:19 -07:00
; pop palette
2017-12-26 17:33:41 -08:00
ld e, NUM_PAL_COLORS
2015-10-24 07:34:19 -07:00
.pop
pop bc
ld [hl], c
dec hl
ld [hl], b
dec hl
dec e
jr nz, .pop
; restore wram bank
ld a, d
ldh [rSVBK], a
2015-10-24 07:34:19 -07:00
; update palettes
2018-01-02 09:49:25 -08:00
call _UpdateTimePals
2015-10-24 07:34:19 -07:00
call DelayFrame
; successful change
scf
ret
.dontchange
; no change occurred
and a
ret
2018-06-24 07:09:41 -07:00
_UpdateTimePals::
2015-10-24 07:34:19 -07:00
ld c, $9 ; normal
call GetTimePalFade
call DmgToCgbTimePals
ret
2018-06-24 07:09:41 -07:00
FadeInPalettes::
2015-10-24 07:34:19 -07:00
ld c, $12
call GetTimePalFade
ld b, $4
call ConvertTimePalsDecHL
ret
2018-06-24 07:09:41 -07:00
FadeOutPalettes::
2015-12-14 17:06:41 -08:00
call FillWhiteBGColor
2015-10-24 07:34:19 -07:00
ld c, $9
call GetTimePalFade
ld b, $4
call ConvertTimePalsIncHL
ret
2018-06-24 07:09:41 -07:00
BattleTowerFade:
2015-12-14 17:06:41 -08:00
call FillWhiteBGColor
2015-10-24 07:34:19 -07:00
ld c, $9
call GetTimePalFade
ld b, $4
2021-02-05 11:56:29 -08:00
.loop
2015-10-24 07:34:19 -07:00
call DmgToCgbTimePals
inc hl
inc hl
inc hl
2015-10-24 07:34:19 -07:00
ld c, $7
call DelayFrames
dec b
2021-02-05 11:56:29 -08:00
jr nz, .loop
2015-10-24 07:34:19 -07:00
ret
2018-06-24 07:09:41 -07:00
FadeInQuickly:
2015-10-24 07:34:19 -07:00
ld c, $0
call GetTimePalFade
ld b, $4
call ConvertTimePalsIncHL
ret
2018-06-24 07:09:41 -07:00
FadeBlackQuickly:
2015-10-24 07:34:19 -07:00
ld c, $9
call GetTimePalFade
ld b, $4
call ConvertTimePalsDecHL
ret
2018-06-24 07:09:41 -07:00
FillWhiteBGColor:
ldh a, [rSVBK]
2015-10-24 07:34:19 -07:00
push af
ld a, BANK(wBGPals1)
ldh [rSVBK], a
2015-12-14 17:06:41 -08:00
2018-01-01 06:08:21 -08:00
ld hl, wBGPals1
2015-10-24 07:34:19 -07:00
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
2018-01-01 06:08:21 -08:00
ld hl, wBGPals1 + 1 palettes
2015-12-14 17:06:41 -08:00
ld c, 6
.loop
2015-10-24 07:34:19 -07:00
ld a, e
ld [hli], a
ld a, d
ld [hli], a
rept 6
inc hl
endr
dec c
2015-12-14 17:06:41 -08:00
jr nz, .loop
2015-10-24 07:34:19 -07:00
pop af
ldh [rSVBK], a
2015-10-24 07:34:19 -07:00
ret
2018-06-24 07:09:41 -07:00
ReplaceTimeOfDayPals:
2023-07-31 03:27:53 -07:00
ld a, [wMapTimeOfDay]
bit IN_DARKNESS_F, a
jr z, .not_dark
ld a, [wStatusFlags]
bit STATUSFLAGS_FLASH_F, a
jr nz, .not_dark
ld a, DARKNESS_PALSET
jr .done
.not_dark:
2015-10-24 07:34:19 -07:00
ld hl, .BrightnessLevels
2015-12-14 17:06:41 -08:00
ld a, [wMapTimeOfDay]
2020-08-11 11:12:59 -07:00
maskbits NUM_MAP_PALETTES
2015-10-24 07:34:19 -07:00
add l
ld l, a
ld a, 0
2015-10-24 07:34:19 -07:00
adc h
ld h, a
ld a, [hl]
2023-07-31 03:27:53 -07:00
.done
2015-12-14 08:12:18 -08:00
ld [wTimeOfDayPalset], a
2015-10-24 07:34:19 -07:00
ret
2018-06-24 07:09:41 -07:00
.BrightnessLevels:
2020-08-11 11:12:59 -07:00
; actual palettes used when time is
2023-07-31 03:27:53 -07:00
; EVE_F, NITE_F, DAY_F, MORN_F
dc EVE_F, NITE_F, DAY_F, MORN_F ; PALETTE_AUTO
2020-08-11 11:12:59 -07:00
dc DAY_F, DAY_F, DAY_F, DAY_F ; PALETTE_DAY
dc NITE_F, NITE_F, NITE_F, NITE_F ; PALETTE_NITE
dc MORN_F, MORN_F, MORN_F, MORN_F ; PALETTE_MORN
2023-07-31 03:27:53 -07:00
dc EVE_F, EVE_F, EVE_F, EVE_F ; PALETTE_EVE
dc EVE_F, NITE_F, DAY_F, MORN_F
dc EVE_F, NITE_F, DAY_F, MORN_F
dc EVE_F, NITE_F, DAY_F, MORN_F
2015-10-24 07:34:19 -07:00
2018-06-24 07:09:41 -07:00
GetTimePalette:
jumptable .TimePalettes, wTimeOfDay
2015-10-24 07:34:19 -07:00
.TimePalettes:
2020-08-11 11:12:59 -07:00
dw .MorningPalette ; MORN_F
dw .DayPalette ; DAY_F
dw .NitePalette ; NITE_F
2023-07-31 03:27:53 -07:00
dw .EveningPalette ; EVE_F
2015-10-24 07:34:19 -07:00
.MorningPalette:
2015-12-14 08:12:18 -08:00
ld a, [wTimeOfDayPalset]
2020-08-11 11:12:59 -07:00
and %00000011
2015-10-24 07:34:19 -07:00
ret
.DayPalette:
2015-12-14 08:12:18 -08:00
ld a, [wTimeOfDayPalset]
2020-08-11 11:12:59 -07:00
and %00001100
2015-10-24 07:34:19 -07:00
srl a
srl a
ret
.NitePalette:
2015-12-14 08:12:18 -08:00
ld a, [wTimeOfDayPalset]
2020-08-11 11:12:59 -07:00
and %00110000
2015-10-24 07:34:19 -07:00
swap a
ret
2023-07-31 03:27:53 -07:00
.EveningPalette:
2015-12-14 08:12:18 -08:00
ld a, [wTimeOfDayPalset]
2020-08-11 11:12:59 -07:00
and %11000000
2015-10-24 07:34:19 -07:00
rlca
rlca
ret
2018-06-24 07:09:41 -07:00
DmgToCgbTimePals:
2015-10-24 07:34:19 -07:00
push hl
push de
ld a, [hli]
call DmgToCgbBGPals
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
call DmgToCgbObjPals
pop de
pop hl
ret
2018-06-24 07:09:41 -07:00
ConvertTimePalsIncHL:
2015-10-24 07:34:19 -07:00
.loop
call DmgToCgbTimePals
inc hl
inc hl
inc hl
2015-12-14 17:06:41 -08:00
ld c, 2
2015-10-24 07:34:19 -07:00
call DelayFrames
dec b
jr nz, .loop
ret
2018-06-24 07:09:41 -07:00
ConvertTimePalsDecHL:
2015-10-24 07:34:19 -07:00
.loop
call DmgToCgbTimePals
dec hl
dec hl
dec hl
2015-12-14 17:06:41 -08:00
ld c, 2
2015-10-24 07:34:19 -07:00
call DelayFrames
dec b
jr nz, .loop
ret
2018-06-24 07:09:41 -07:00
GetTimePalFade:
2015-10-24 07:34:19 -07:00
ld hl, .cgbfade
ld b, 0
2015-10-24 07:34:19 -07:00
add hl, bc
ret
.cgbfade
dc 3,3,3,3, 3,3,3,3, 3,3,3,3
dc 3,3,3,2, 3,3,3,2, 3,3,3,2
dc 3,3,2,1, 3,3,2,1, 3,3,2,1
dc 3,2,1,0, 3,2,1,0, 3,2,1,0
dc 2,1,0,0, 2,1,0,0, 2,1,0,0
dc 1,0,0,0, 1,0,0,0, 1,0,0,0
dc 0,0,0,0, 0,0,0,0, 0,0,0,0