DummyPredef35: DummyPredef36: ret UpdateTimeOfDayPal:: 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 ; save bg palette 7 ld hl, wBGPals1 palette PAL_BG_TEXT ; save wram bank ldh a, [rSVBK] ld b, a ld a, BANK(wBGPals1) ldh [rSVBK], a ; push palette ld c, NUM_PAL_COLORS .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 ; update cgb pals ld b, CGB_MAPPALS call GetCGBLayout ; restore bg palette 7 ld hl, wOBPals1 - 1 ; last byte in wBGPals1 ; save wram bank ldh a, [rSVBK] ld d, a ld a, BANK(wOBPals1) ldh [rSVBK], a ; pop palette ld e, NUM_PAL_COLORS .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 ; 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 FadeInFromWhite:: ; fades from white to normal palettes in four steps ; all palettes use white color of Pal0 before step 3 call BackupWhiteColorFromBGPals1 call FillWhiteBGColor ld c, $12 call GetTimePalFade ld b, $2 call ConvertTimePalsDecHL call RestoreWhiteColorToBGPals1 ld c, $c call GetTimePalFade ld b, $2 call ConvertTimePalsDecHL ret FadeOutToWhite:: ; fades from normal palettes to white in four steps ; all palettes use white color of Pal0 after step 2 ld c, $9 call GetTimePalFade ld b, $2 call ConvertTimePalsIncHL call FillWhiteBGColor ld c, $f call GetTimePalFade ld b, $2 call ConvertTimePalsIncHL ret FadeInFromBlack: ld c, $0 call GetTimePalFade ld b, $4 call ConvertTimePalsIncHL ret FadeOutToBlack: ld c, $9 call GetTimePalFade ld b, $4 call ConvertTimePalsDecHL ret FillWhiteBGColor: ; copy white palette of wBGPals1 Pal0 into white palette of wBGPals1 Pal1-Pal6 ldh a, [rSVBK] push af ld a, BANK(wBGPals1) ldh [rSVBK], a 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 pop af ldh [rSVBK], a ret BackupWhiteColorFromBGPals1: ldh a, [rSVBK] push af ld a, BANK(wBGPals1) ldh [rSVBK], a ld hl, wBGPals1 ld de, wBGPalsRegularWhiteColors ld c, 8 .loop ld a, [hli] ld [de], a inc de ld a, [hli] ld [de], a inc de rept PALETTE_SIZE - 1 * PAL_COLOR_SIZE inc hl endr dec c jr nz, .loop pop af ldh [rSVBK], a ret RestoreWhiteColorToBGPals1: ldh a, [rSVBK] push af ld a, BANK(wBGPals1) ldh [rSVBK], a ld hl, wBGPalsRegularWhiteColors ld de, wBGPals1 ld c, 8 .loop ld a, [hli] ld [de], a inc de ld a, [hli] ld [de], a inc de rept PALETTE_SIZE - 1 * PAL_COLOR_SIZE inc de endr dec c jr nz, .loop pop af ldh [rSVBK], a ret ReplaceTimeOfDayPals: 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: ld hl, .BrightnessLevels ld a, [wMapTimeOfDay] maskbits NUM_MAP_PALETTES add l ld l, a ld a, 0 adc h ld h, a ld a, [hl] .done ld [wTimeOfDayPalset], a ret .BrightnessLevels: ; actual palettes used when time is ; EVE_F, NITE_F, DAY_F, MORN_F dc EVE_F, NITE_F, DAY_F, MORN_F ; PALETTE_AUTO 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 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 GetTimePalette: jumptable .TimePalettes, wTimeOfDay .TimePalettes: dw .MorningPalette ; MORN_F dw .DayPalette ; DAY_F dw .NitePalette ; NITE_F dw .EveningPalette ; EVE_F .MorningPalette: ld a, [wTimeOfDayPalset] and %00000011 ret .DayPalette: ld a, [wTimeOfDayPalset] and %00001100 srl a srl a ret .NitePalette: ld a, [wTimeOfDayPalset] and %00110000 swap a ret .EveningPalette: ld a, [wTimeOfDayPalset] and %11000000 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: ld hl, .cgbfade ld b, 0 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