pokecrystal-board/engine/tilesets/timeofday_pals.asm

392 lines
5.3 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::
2015-10-24 07:34:19 -07:00
call UpdateTime
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 sgb pals
ld b, SCGB_MAPPALS
2015-10-24 07:34:19 -07:00
call GetSGBLayout
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
.asm_8c09c
call DmgToCgbTimePals
inc hl
inc hl
inc hl
2015-10-24 07:34:19 -07:00
ld c, $7
call DelayFrames
dec b
jr nz, .asm_8c09c
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:
2015-10-24 07:34:19 -07:00
ld hl, .BrightnessLevels
2015-12-14 17:06:41 -08:00
ld a, [wMapTimeOfDay]
2015-10-24 07:34:19 -07:00
cp $4 ; Dark cave, needs Flash
jr z, .DarkCave
and $7
add l
ld l, a
ld a, $0
adc h
ld h, a
ld a, [hl]
2015-12-14 08:12:18 -08:00
ld [wTimeOfDayPalset], a
2015-10-24 07:34:19 -07:00
ret
2015-12-14 08:12:18 -08:00
.DarkCave:
ld a, [wStatusFlags]
2018-01-22 12:40:43 -08:00
bit STATUSFLAGS_FLASH_F, a
2015-10-24 07:34:19 -07:00
jr nz, .UsedFlash
2015-12-14 08:12:18 -08:00
ld a, %11111111 ; 3, 3, 3, 3
ld [wTimeOfDayPalset], a
2015-10-24 07:34:19 -07:00
ret
2015-12-14 08:12:18 -08:00
.UsedFlash:
2015-12-14 08:12:18 -08:00
ld a, %10101010 ; 2, 2, 2, 2
ld [wTimeOfDayPalset], a
2015-10-24 07:34:19 -07:00
ret
2018-06-24 07:09:41 -07:00
.BrightnessLevels:
2017-12-13 21:36:24 -08:00
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
2015-10-24 07:34:19 -07:00
2018-06-24 07:09:41 -07:00
GetTimePalette:
2018-01-23 14:39:09 -08:00
ld a, [wTimeOfDay]
2015-10-24 07:34:19 -07:00
ld e, a
ld d, 0
ld hl, .TimePalettes
add hl, de
add hl, de
2015-10-24 07:34:19 -07:00
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2015-10-24 07:34:19 -07:00
.TimePalettes:
2015-10-24 07:34:19 -07:00
dw .MorningPalette
dw .DayPalette
dw .NitePalette
dw .DarknessPalette
.MorningPalette:
2015-12-14 08:12:18 -08:00
ld a, [wTimeOfDayPalset]
2015-10-24 07:34:19 -07:00
and %00000011 ; 0
ret
.DayPalette:
2015-12-14 08:12:18 -08:00
ld a, [wTimeOfDayPalset]
2015-10-24 07:34:19 -07:00
and %00001100 ; 1
srl a
srl a
ret
.NitePalette:
2015-12-14 08:12:18 -08:00
ld a, [wTimeOfDayPalset]
2015-10-24 07:34:19 -07:00
and %00110000 ; 2
swap a
ret
.DarknessPalette:
2015-12-14 08:12:18 -08:00
ld a, [wTimeOfDayPalset]
2015-10-24 07:34:19 -07:00
and %11000000 ; 3
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
; check cgb
ldh a, [hCGB]
2015-10-24 07:34:19 -07:00
and a
jr nz, .cgb
; else: dmg
; index
2018-01-23 14:39:09 -08:00
ld a, [wTimeOfDayPal]
2015-10-24 07:34:19 -07:00
and %11
; get fade table
push bc
ld c, a
ld b, $0
ld hl, .dmgfades
add hl, bc
add hl, bc
2015-10-24 07:34:19 -07:00
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
2015-10-24 07:34:19 -07: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 07:34:19 -07: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 07:34:19 -07: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 07:34:19 -07: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