pokecrystal/engine/tilesets/timeofday_pals.asm

385 lines
5.7 KiB
NASM
Raw Normal View History

2018-06-24 14:09:41 +00:00
DummyPredef35:
2018-01-02 14:05:14 +00:00
DummyPredef36:
ret
2018-06-24 14:09:41 +00:00
UpdateTimeOfDayPal::
2015-10-24 14:34:19 +00:00
call UpdateTime
2018-01-23 22:39:09 +00:00
ld a, [wTimeOfDay]
ld [wCurTimeOfDay], a
2015-10-24 14:34:19 +00:00
call GetTimePalette
2018-01-23 22:39:09 +00:00
ld [wTimeOfDayPal], a
2015-10-24 14:34:19 +00:00
ret
2018-06-24 14:09:41 +00:00
_TimeOfDayPals::
2015-10-24 14:34:19 +00:00
; return carry if pals are changed
; forced pals?
2015-12-14 16:12:18 +00:00
ld hl, wTimeOfDayPalFlags
2015-10-24 14:34:19 +00:00
bit 7, [hl]
jr nz, .dontchange
; do we need to bother updating?
2018-01-23 22:39:09 +00:00
ld a, [wTimeOfDay]
ld hl, wCurTimeOfDay
2015-10-24 14:34:19 +00:00
cp [hl]
jr z, .dontchange
; if so, the time of day has changed
2018-01-23 22:39:09 +00:00
ld a, [wTimeOfDay]
ld [wCurTimeOfDay], a
2015-10-24 14:34:19 +00:00
; get palette id
call GetTimePalette
; same palette as before?
2018-01-23 22:39:09 +00:00
ld hl, wTimeOfDayPal
2015-10-24 14:34:19 +00:00
cp [hl]
jr z, .dontchange
; update palette id
2018-01-23 22:39:09 +00:00
ld [wTimeOfDayPal], a
2015-10-24 14:34:19 +00:00
2017-12-27 01:33:41 +00:00
; save bg palette 7
2018-01-01 14:08:21 +00:00
ld hl, wBGPals1 palette PAL_BG_TEXT
2015-10-24 14:34:19 +00:00
; save wram bank
ldh a, [rSVBK]
2015-10-24 14:34:19 +00:00
ld b, a
2018-01-19 02:48:52 +00:00
ld a, BANK(wBGPals1)
ldh [rSVBK], a
2015-10-24 14:34:19 +00:00
; push palette
2017-12-27 01:33:41 +00:00
ld c, NUM_PAL_COLORS
2015-10-24 14:34:19 +00: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 14:34:19 +00:00
; update sgb pals
ld b, SCGB_MAPPALS
2015-10-24 14:34:19 +00:00
call GetSGBLayout
2017-12-27 01:33:41 +00:00
; restore bg palette 7
2018-01-01 14:08:21 +00:00
ld hl, wOBPals1 - 1 ; last byte in wBGPals1
2015-10-24 14:34:19 +00:00
; save wram bank
ldh a, [rSVBK]
2015-10-24 14:34:19 +00:00
ld d, a
2018-01-19 02:48:52 +00:00
ld a, BANK(wOBPals1)
ldh [rSVBK], a
2015-10-24 14:34:19 +00:00
; pop palette
2017-12-27 01:33:41 +00:00
ld e, NUM_PAL_COLORS
2015-10-24 14:34:19 +00: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 14:34:19 +00:00
; update palettes
2018-01-02 17:49:25 +00:00
call _UpdateTimePals
2015-10-24 14:34:19 +00:00
call DelayFrame
; successful change
scf
ret
.dontchange
; no change occurred
and a
ret
2018-06-24 14:09:41 +00:00
_UpdateTimePals::
2015-10-24 14:34:19 +00:00
ld c, $9 ; normal
call GetTimePalFade
call DmgToCgbTimePals
ret
2018-06-24 14:09:41 +00:00
FadeInPalettes::
2015-10-24 14:34:19 +00:00
ld c, $12
call GetTimePalFade
ld b, $4
call ConvertTimePalsDecHL
ret
2018-06-24 14:09:41 +00:00
FadeOutPalettes::
2015-12-15 01:06:41 +00:00
call FillWhiteBGColor
2015-10-24 14:34:19 +00:00
ld c, $9
call GetTimePalFade
ld b, $4
call ConvertTimePalsIncHL
ret
2018-06-24 14:09:41 +00:00
BattleTowerFade:
2015-12-15 01:06:41 +00:00
call FillWhiteBGColor
2015-10-24 14:34:19 +00:00
ld c, $9
call GetTimePalFade
ld b, $4
.asm_8c09c
call DmgToCgbTimePals
inc hl
inc hl
inc hl
2015-10-24 14:34:19 +00:00
ld c, $7
call DelayFrames
dec b
jr nz, .asm_8c09c
ret
2018-06-24 14:09:41 +00:00
FadeInQuickly:
2015-10-24 14:34:19 +00:00
ld c, $0
call GetTimePalFade
ld b, $4
call ConvertTimePalsIncHL
ret
2018-06-24 14:09:41 +00:00
FadeBlackQuickly:
2015-10-24 14:34:19 +00:00
ld c, $9
call GetTimePalFade
ld b, $4
call ConvertTimePalsDecHL
ret
2018-06-24 14:09:41 +00:00
FillWhiteBGColor:
ldh a, [rSVBK]
2015-10-24 14:34:19 +00:00
push af
ld a, BANK(wBGPals1)
ldh [rSVBK], a
2015-12-15 01:06:41 +00:00
2018-01-01 14:08:21 +00:00
ld hl, wBGPals1
2015-10-24 14:34:19 +00:00
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
2018-01-01 14:08:21 +00:00
ld hl, wBGPals1 + 1 palettes
2015-12-15 01:06:41 +00:00
ld c, 6
.loop
2015-10-24 14:34:19 +00:00
ld a, e
ld [hli], a
ld a, d
ld [hli], a
rept 6
inc hl
endr
dec c
2015-12-15 01:06:41 +00:00
jr nz, .loop
2015-10-24 14:34:19 +00:00
pop af
ldh [rSVBK], a
2015-10-24 14:34:19 +00:00
ret
2018-06-24 14:09:41 +00:00
ReplaceTimeOfDayPals:
2015-10-24 14:34:19 +00:00
ld hl, .BrightnessLevels
2015-12-15 01:06:41 +00:00
ld a, [wMapTimeOfDay]
cp PALETTE_DARK
jr z, .NeedsFlash
2020-08-11 18:12:59 +00:00
maskbits NUM_MAP_PALETTES
2015-10-24 14:34:19 +00:00
add l
ld l, a
ld a, 0
2015-10-24 14:34:19 +00:00
adc h
ld h, a
ld a, [hl]
2015-12-14 16:12:18 +00:00
ld [wTimeOfDayPalset], a
2015-10-24 14:34:19 +00:00
ret
2015-12-14 16:12:18 +00:00
.NeedsFlash:
ld a, [wStatusFlags]
2018-01-22 20:40:43 +00:00
bit STATUSFLAGS_FLASH_F, a
2015-10-24 14:34:19 +00:00
jr nz, .UsedFlash
2020-08-11 18:12:59 +00:00
ld a, DARKNESS_PALSET
2015-12-14 16:12:18 +00:00
ld [wTimeOfDayPalset], a
2015-10-24 14:34:19 +00:00
ret
2015-12-14 16:12:18 +00:00
.UsedFlash:
2020-08-11 18:12:59 +00:00
ld a, (NITE_F << 6) | (NITE_F << 4) | (NITE_F << 2) | NITE_F
2015-12-14 16:12:18 +00:00
ld [wTimeOfDayPalset], a
2015-10-24 14:34:19 +00:00
ret
2018-06-24 14:09:41 +00:00
.BrightnessLevels:
2020-08-11 18:12:59 +00:00
; actual palettes used when time is
; DARKNESS_F, NITE_F, DAY_F, MORN_F
dc DARKNESS_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 DARKNESS_F, DARKNESS_F, DARKNESS_F, DARKNESS_F ; PALETTE_DARK
dc DARKNESS_F, NITE_F, DAY_F, MORN_F
dc DARKNESS_F, NITE_F, DAY_F, MORN_F
dc DARKNESS_F, NITE_F, DAY_F, MORN_F
2015-10-24 14:34:19 +00:00
2018-06-24 14:09:41 +00:00
GetTimePalette:
jumptable .TimePalettes, wTimeOfDay
2015-10-24 14:34:19 +00:00
.TimePalettes:
2020-08-11 18:12:59 +00:00
dw .MorningPalette ; MORN_F
dw .DayPalette ; DAY_F
dw .NitePalette ; NITE_F
dw .DarknessPalette ; DARKNESS_F
2015-10-24 14:34:19 +00:00
.MorningPalette:
2015-12-14 16:12:18 +00:00
ld a, [wTimeOfDayPalset]
2020-08-11 18:12:59 +00:00
and %00000011
2015-10-24 14:34:19 +00:00
ret
.DayPalette:
2015-12-14 16:12:18 +00:00
ld a, [wTimeOfDayPalset]
2020-08-11 18:12:59 +00:00
and %00001100
2015-10-24 14:34:19 +00:00
srl a
srl a
ret
.NitePalette:
2015-12-14 16:12:18 +00:00
ld a, [wTimeOfDayPalset]
2020-08-11 18:12:59 +00:00
and %00110000
2015-10-24 14:34:19 +00:00
swap a
ret
.DarknessPalette:
2015-12-14 16:12:18 +00:00
ld a, [wTimeOfDayPalset]
2020-08-11 18:12:59 +00:00
and %11000000
2015-10-24 14:34:19 +00:00
rlca
rlca
ret
2018-06-24 14:09:41 +00:00
DmgToCgbTimePals:
2015-10-24 14:34:19 +00: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 14:09:41 +00:00
ConvertTimePalsIncHL:
2015-10-24 14:34:19 +00:00
.loop
call DmgToCgbTimePals
inc hl
inc hl
inc hl
2015-12-15 01:06:41 +00:00
ld c, 2
2015-10-24 14:34:19 +00:00
call DelayFrames
dec b
jr nz, .loop
ret
2018-06-24 14:09:41 +00:00
ConvertTimePalsDecHL:
2015-10-24 14:34:19 +00:00
.loop
call DmgToCgbTimePals
dec hl
dec hl
dec hl
2015-12-15 01:06:41 +00:00
ld c, 2
2015-10-24 14:34:19 +00:00
call DelayFrames
dec b
jr nz, .loop
ret
2018-06-24 14:09:41 +00:00
GetTimePalFade:
2015-10-24 14:34:19 +00:00
; check cgb
ldh a, [hCGB]
2015-10-24 14:34:19 +00:00
and a
jr nz, .cgb
; else: dmg
; index
2018-01-23 22:39:09 +00:00
ld a, [wTimeOfDayPal]
2015-10-24 14:34:19 +00:00
and %11
; get fade table
push bc
ld c, a
ld b, 0
2015-10-24 14:34:19 +00:00
ld hl, .dmgfades
add hl, bc
add hl, bc
2015-10-24 14:34:19 +00:00
ld a, [hli]
ld h, [hl]
ld l, a
pop bc
; get place in fade table
ld b, 0
2015-10-24 14:34:19 +00:00
add hl, bc
ret
.cgb
ld hl, .cgbfade
ld b, 0
2015-10-24 14:34:19 +00:00
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
2015-10-24 14:34:19 +00:00
.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
2015-10-24 14:34:19 +00:00
.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
2015-10-24 14:34:19 +00:00
.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
2015-10-24 14:34:19 +00:00
.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