summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlibjet <libj3t@gmail.com>2020-05-30 17:10:33 +0100
committerlibjet <libj3t@gmail.com>2020-05-30 17:10:33 +0100
commit2d45f5d1726ba1b6022f8404c3c14de90f5321bc (patch)
tree041a967de1d7d83a0996e6876ff9f29351edc265
parentd4d4f779750868f70a9b4d696d4a4ce7677d917f (diff)
Add engine/tilesets/timeofday_pals.asm
-rwxr-xr-xengine/tilesets/timeofday_pals.asm317
-rw-r--r--main.asm21
-rw-r--r--wram.asm16
3 files changed, 325 insertions, 29 deletions
diff --git a/engine/tilesets/timeofday_pals.asm b/engine/tilesets/timeofday_pals.asm
new file mode 100755
index 00000000..8a92484a
--- /dev/null
+++ b/engine/tilesets/timeofday_pals.asm
@@ -0,0 +1,317 @@
+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, 18
+ 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 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]
+ ld [wTimeOfDayPalset], a
+ ret
+
+.DarkCave:
+ 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
diff --git a/main.asm b/main.asm
index a886c0de..0d6e403f 100644
--- a/main.asm
+++ b/main.asm
@@ -233,27 +233,8 @@ INCLUDE "engine/menus/savemenu_copytilemapatonce.asm"
INCLUDE "engine/phone/phonering_copytilemapatonce.asm"
INCLUDE "engine/rtc/reset_password.asm"
INCLUDE "engine/menus/delete_save.asm"
+INCLUDE "engine/tilesets/timeofday_pals.asm"
-DummyPredef35::
-DummyPredef36::
- ret
-
-UpdateTimeOfDayPal::
- dr $8c356, $8c366
-_TimeOfDayPals::
- dr $8c366, $8c397
-_UpdateTimePals::
- dr $8c397, $8c3a0
-FadeInPalettes::
- dr $8c3a0, $8c3ab
-FadeOutPalettes::
- dr $8c3ab, $8c3b9
-FadeInQuickly::
- dr $8c3b9, $8c3c4
-FadeBlackQuickly::
- dr $8c3c4, $8c3e9
-ReplaceTimeOfDayPals::
- dr $8c3e9, $8c513
DoBattleTransition::
dr $8c513, $8ca5e
PlayWhirlpoolSound::
diff --git a/wram.asm b/wram.asm
index 7e0804b6..92e9173b 100644
--- a/wram.asm
+++ b/wram.asm
@@ -2100,17 +2100,15 @@ wObjectMasks:: ds NUM_OBJECTS ; d545
wVariableSprites:: ds $100 - SPRITE_VARS ; d555
wEnteredMapFromContinue:: db ; d565
-wd566:: ds 1 ; d566
-wd567:: ds 1 ; d567
+ ds 2
wTimeOfDayPal:: db
-wd569:: ds 1 ; d569
-wd56a:: ds 1 ; d56a
-wd56b:: ds 1 ; d56b
-wd56c:: ds 1 ; d56c
-wd56d:: ds 1 ; d56d
+ ds 4
+wTimeOfDayPalFlags:: db ; d56d
wTimeOfDayPalset:: db ; d56e
-wd56f:: ds 1 ; d56f
-wd570:: ds 1 ; d570
+wCurTimeOfDay:: db ; d56f
+
+ ds 1
+
wPlayerData2End::
wPlayerData3::
wStatusFlags::