pokegold/engine/tilesets/timeofday_pals.asm
2020-06-17 11:28:47 -04:00

318 lines
4.4 KiB
NASM

DummyPredef35:
DummyPredef36:
ret
UpdateTimeOfDayPal::
call UpdateTime
ld a, [wTimeOfDay]
ld [wCurTimeOfDay], a
call GetTimePalette
ld [wTimeOfDayPal], a
ret
_TimeOfDayPals::
; return carry if pals are changed
; forced pals?
ld hl, wTimeOfDayPalFlags
bit 7, [hl]
jr nz, .dontchange
; do we need to bother updating?
ld a, [wTimeOfDay]
ld hl, wCurTimeOfDay
cp [hl]
jr z, .dontchange
; if so, the time of day has changed
ld a, [wTimeOfDay]
ld [wCurTimeOfDay], a
; get palette id
call GetTimePalette
; same palette as before?
ld hl, wTimeOfDayPal
cp [hl]
jr z, .dontchange
; update palette id
ld [wTimeOfDayPal], a
; update sgb pals
ld b, SCGB_MAPPALS
call GetSGBLayout
; update palettes
call _UpdateTimePals
call DelayFrame
; successful change
scf
ret
.dontchange
; no change occurred
and a
ret
_UpdateTimePals::
ld c, $9 ; normal
call GetTimePalFade
call DmgToCgbTimePals
ret
FadeInPalettes::
ld c, $12
call GetTimePalFade
ld b, $4
call ConvertTimePalsDecHL
ret
FadeOutPalettes::
call FillWhiteBGColor
ld c, $9
call GetTimePalFade
ld b, $4
call ConvertTimePalsIncHL
ret
FadeInQuickly:
ld c, $0
call GetTimePalFade
ld b, $4
call ConvertTimePalsIncHL
ret
FadeBlackQuickly:
ld c, $9
call GetTimePalFade
ld b, $4
call ConvertTimePalsDecHL
ret
FillWhiteBGColor:
ld hl, wBGPals1
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld hl, wBGPals1 + 1 palettes
ld c, 6
.loop
ld a, e
ld [hli], a
ld a, d
ld [hli], a
rept 6
inc hl
endr
dec c
jr nz, .loop
ret
ReplaceTimeOfDayPals::
ld hl, .BrightnessLevels
ld a, [wMapTimeOfDay]
cp PALETTE_DARK
jr z, .NeedsFlash
and $7
add l
ld l, a
ld a, 0
adc h
ld h, a
ld a, [hl]
ld [wTimeOfDayPalset], a
ret
.NeedsFlash:
ld a, [wStatusFlags]
bit STATUSFLAGS_FLASH_F, a
jr nz, .UsedFlash
ld a, %11111111 ; 3, 3, 3, 3
ld [wTimeOfDayPalset], a
ret
.UsedFlash:
ld a, %10101010 ; 2, 2, 2, 2
ld [wTimeOfDayPalset], a
ret
.BrightnessLevels:
dc 3, 2, 1, 0
dc 1, 1, 1, 1
dc 2, 2, 2, 2
dc 0, 0, 0, 0
dc 3, 3, 3, 3
dc 3, 2, 1, 0
dc 3, 2, 1, 0
dc 3, 2, 1, 0
GetTimePalette:
ld a, [wTimeOfDay]
ld e, a
ld d, 0
ld hl, .TimePalettes
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
.TimePalettes:
dw .MorningPalette
dw .DayPalette
dw .NitePalette
dw .DarknessPalette
.MorningPalette:
ld a, [wTimeOfDayPalset]
and %00000011 ; 0
ret
.DayPalette:
ld a, [wTimeOfDayPalset]
and %00001100 ; 1
srl a
srl a
ret
.NitePalette:
ld a, [wTimeOfDayPalset]
and %00110000 ; 2
swap a
ret
.DarknessPalette:
ld a, [wTimeOfDayPalset]
and %11000000 ; 3
rlca
rlca
ret
DmgToCgbTimePals:
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
ConvertTimePalsIncHL:
.loop
call DmgToCgbTimePals
inc hl
inc hl
inc hl
ld c, 2
call DelayFrames
dec b
jr nz, .loop
ret
ConvertTimePalsDecHL:
.loop
call DmgToCgbTimePals
dec hl
dec hl
dec hl
ld c, 2
call DelayFrames
dec b
jr nz, .loop
ret
GetTimePalFade:
; check cgb
ldh a, [hCGB]
and a
jr nz, .cgb
; else: dmg
; index
ld a, [wTimeOfDayPal]
and %11
; get fade table
push bc
ld c, a
ld b, 0
ld hl, .dmgfades
add hl, bc
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
pop bc
; get place in fade table
ld b, 0
add hl, bc
ret
.cgb
ld hl, .cgbfade
ld b, 0
add hl, bc
ret
.dmgfades
dw .morn
dw .day
dw .nite
dw .darkness
.morn
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,2,1,0, 3,2,1,0
dc 3,2,1,0, 3,1,0,0, 3,1,0,0
dc 2,1,0,0, 2,0,0,0, 2,0,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
.day
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,2,1,0, 3,2,1,0
dc 3,2,1,0, 3,1,0,0, 3,1,0,0
dc 2,1,0,0, 2,0,0,0, 2,0,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
.nite
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,2,1,0, 3,2,1,0
dc 3,2,2,1, 3,1,0,0, 3,1,0,0
dc 2,1,0,0, 2,0,0,0, 2,0,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
.darkness
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,3
dc 3,3,3,2, 3,2,1,0, 3,3,3,3
dc 3,3,3,1, 3,1,0,0, 3,3,3,3
dc 3,3,3,1, 2,0,0,0, 3,3,3,3
dc 0,0,0,0, 1,0,0,0, 0,0,0,0
dc 0,0,0,0, 0,0,0,0, 0,0,0,0
.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