summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorfig02 <fig02srl@gmail.com>2022-05-20 14:40:13 -0400
committerGitHub <noreply@github.com>2022-05-20 14:40:13 -0400
commit4f0018bf368fb1304e3c758745296d28c4e58c9c (patch)
treeb13eee38c6cdf996d659441ebb7c15b6a8bfd2e8 /src
parentd7bbe43ba7734da2e28614debeaf521b4bcb5013 (diff)
Environment documentation pass (#1115)
* some docs, start introducing time macro * most usages of CLOCK_TIME * finish up clock time defines, format * saving incase i need to revert * more docs * more docs progress * some more docs * format with 11 * change sos to storm * update functions.h * some depth stuff * review 1 and 2 * whoops * update zbuf stuff * most of review 3 * enum name * storm state enum * review 4 * fix enum * add comment to skyboxischanging * review * things dont match, committing so i can change branches * revert struct changes * define for override_full_control * new clock_time macro * fill alpha -> glare strength * update comment * remove indoor/outdoor, new name for underwater light variable * remove copy pasted comment * fix comments * remove whitespave * review
Diffstat (limited to 'src')
-rw-r--r--src/code/z_actor.c2
-rw-r--r--src/code/z_common_data.c2
-rw-r--r--src/code/z_demo.c59
-rw-r--r--src/code/z_kankyo.c1190
-rw-r--r--src/code/z_lights.c2
-rw-r--r--src/code/z_parameter.c24
-rw-r--r--src/code/z_play.c26
-rw-r--r--src/code/z_scene.c35
-rw-r--r--src/code/z_scene_table.c14
-rw-r--r--src/code/z_sram.c2
-rw-r--r--src/code/z_vr_box.c53
-rw-r--r--src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c4
-rw-r--r--src/overlays/actors/ovl_Bg_Mori_Bigst/z_bg_mori_bigst.c2
-rw-r--r--src/overlays/actors/ovl_Bg_Po_Syokudai/z_bg_po_syokudai.c10
-rw-r--r--src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c16
-rw-r--r--src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c52
-rw-r--r--src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c2
-rw-r--r--src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c139
-rw-r--r--src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c128
-rw-r--r--src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c14
-rw-r--r--src/overlays/actors/ovl_Boss_Goma/z_boss_goma.c10
-rw-r--r--src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c116
-rw-r--r--src/overlays/actors/ovl_Boss_Va/z_boss_va.c2
-rw-r--r--src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c3
-rw-r--r--src/overlays/actors/ovl_Demo_Kekkai/z_demo_kekkai.c2
-rw-r--r--src/overlays/actors/ovl_En_Door/z_en_door.c5
-rw-r--r--src/overlays/actors/ovl_En_Fhg_Fire/z_en_fhg_fire.c10
-rw-r--r--src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c6
-rw-r--r--src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c3
-rw-r--r--src/overlays/actors/ovl_En_Kanban/z_en_kanban.c2
-rw-r--r--src/overlays/actors/ovl_En_Mm/z_en_mm.c2
-rw-r--r--src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c41
-rw-r--r--src/overlays/actors/ovl_En_Owl/z_en_owl.c2
-rw-r--r--src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c4
-rw-r--r--src/overlays/actors/ovl_En_Tk/z_en_tk.c2
-rw-r--r--src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c128
-rw-r--r--src/overlays/actors/ovl_En_fHG/z_en_fhg.c8
-rw-r--r--src/overlays/actors/ovl_Fishing/z_fishing.c23
-rw-r--r--src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c22
-rw-r--r--src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c2
-rw-r--r--src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c3
-rw-r--r--src/overlays/actors/ovl_player_actor/z_player.c9
-rw-r--r--src/overlays/gamestates/ovl_file_choose/z_file_choose.c32
-rw-r--r--src/overlays/gamestates/ovl_select/z_select.c8
44 files changed, 1199 insertions, 1022 deletions
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index ac9e8a38d..b54d44542 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -4519,7 +4519,7 @@ u32 func_80035BFC(GlobalContext* globalCtx, s16 arg1) {
retTextId = 0x7002;
} else if (Flags_GetInfTable(INFTABLE_6A)) {
retTextId = 0x7004;
- } else if ((gSaveContext.dayTime >= 0x4000) && (gSaveContext.dayTime < 0xC556)) {
+ } else if ((gSaveContext.dayTime >= CLOCK_TIME(6, 0)) && (gSaveContext.dayTime <= CLOCK_TIME(18, 30))) {
retTextId = 0x7002;
} else {
retTextId = 0x7003;
diff --git a/src/code/z_common_data.c b/src/code/z_common_data.c
index 8afe22d10..d1db8b508 100644
--- a/src/code/z_common_data.c
+++ b/src/code/z_common_data.c
@@ -15,7 +15,7 @@ void SaveContext_Init(void) {
gSaveContext.nextCutsceneIndex = 0xFFEF;
gSaveContext.cutsceneTrigger = 0;
gSaveContext.chamberCutsceneNum = 0;
- gSaveContext.nextDayTime = 0xFFFF;
+ gSaveContext.nextDayTime = NEXT_TIME_NONE;
gSaveContext.skyboxTime = 0;
gSaveContext.dogIsLost = true;
gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT;
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index 034032767..f7bc14e79 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -229,7 +229,7 @@ void func_80064824(GlobalContext* globalCtx, CutsceneContext* csCtx, CsCmdBase*
if (sp3F != 0) {
Audio_SetNatureAmbienceChannelIO(NATURE_CHANNEL_RAIN, CHANNEL_IO_PORT_4, 0x3F);
Audio_SetNatureAmbienceChannelIO(NATURE_CHANNEL_RAIN, CHANNEL_IO_PORT_1, 1);
- globalCtx->envCtx.unk_EE[0] = 20;
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] = 20;
}
break;
case 2:
@@ -254,14 +254,14 @@ void func_80064824(GlobalContext* globalCtx, CutsceneContext* csCtx, CsCmdBase*
break;
case 7:
if (sp3F != 0) {
- globalCtx->envCtx.unk_19 = 1;
- globalCtx->envCtx.unk_17 = 1;
- globalCtx->envCtx.unk_18 = 0;
- globalCtx->envCtx.unk_1A = 0x3C;
- globalCtx->envCtx.unk_21 = 1;
- globalCtx->envCtx.unk_1F = 0;
- globalCtx->envCtx.unk_20 = 1;
- globalCtx->envCtx.unk_22 = globalCtx->envCtx.unk_24 = 0x3C;
+ globalCtx->envCtx.changeSkyboxState = CHANGE_SKYBOX_REQUESTED;
+ globalCtx->envCtx.skyboxConfig = 1;
+ globalCtx->envCtx.changeSkyboxNextConfig = 0;
+ globalCtx->envCtx.changeSkyboxTimer = 60;
+ globalCtx->envCtx.changeLightEnabled = true;
+ globalCtx->envCtx.lightConfig = 0;
+ globalCtx->envCtx.changeLightNextConfig = 1;
+ globalCtx->envCtx.changeLightTimer = globalCtx->envCtx.changeDuration = 60;
}
break;
case 8:
@@ -270,7 +270,7 @@ void func_80064824(GlobalContext* globalCtx, CutsceneContext* csCtx, CsCmdBase*
}
break;
case 9:
- globalCtx->envCtx.unk_EE[3] = 16;
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_MAX] = 16;
break;
case 10:
Flags_SetEnv(globalCtx, 1);
@@ -325,13 +325,13 @@ void func_80064824(GlobalContext* globalCtx, CutsceneContext* csCtx, CsCmdBase*
}
break;
case 18:
- globalCtx->envCtx.unk_EE[0] = 0;
- globalCtx->envCtx.gloomySkyMode = 2;
- if (gSaveContext.dayTime < 0x4AAB) {
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] = 0;
+ globalCtx->envCtx.stormRequest = STORM_REQUEST_STOP;
+ if (gSaveContext.dayTime < CLOCK_TIME(7, 0)) {
gSaveContext.dayTime += 30;
}
- if (globalCtx->envCtx.unk_EE[1] == 0) {
- gWeatherMode = 0;
+ if (globalCtx->envCtx.precipitation[PRECIP_RAIN_CUR] == 0) {
+ gWeatherMode = WEATHER_MODE_CLEAR;
Audio_SetNatureAmbienceChannelIO(NATURE_CHANNEL_RAIN, CHANNEL_IO_PORT_1, 0);
}
break;
@@ -361,18 +361,19 @@ void func_80064824(GlobalContext* globalCtx, CutsceneContext* csCtx, CsCmdBase*
break;
case 25:
gSaveContext.dayTime += 30;
- if ((gSaveContext.dayTime) > 0xCAAA) {
- gSaveContext.dayTime = 0xCAAA;
+ if ((gSaveContext.dayTime) >= CLOCK_TIME(19, 0)) {
+ gSaveContext.dayTime = CLOCK_TIME(19, 0) - 1;
}
break;
case 26:
- if ((gSaveContext.dayTime < 0x3000) || (gSaveContext.dayTime >= 0x4555)) {
- if ((gSaveContext.dayTime >= 0x4555) && (gSaveContext.dayTime < 0xAAAB)) {
- globalCtx->envCtx.unk_BF = 1;
- } else if ((gSaveContext.dayTime >= 0xAAAB) && (gSaveContext.dayTime < 0xC556)) {
- globalCtx->envCtx.unk_BF = 2;
+ if ((gSaveContext.dayTime < CLOCK_TIME(4, 30)) || (gSaveContext.dayTime >= CLOCK_TIME(6, 30))) {
+ if ((gSaveContext.dayTime >= CLOCK_TIME(6, 30)) && (gSaveContext.dayTime < CLOCK_TIME(16, 0))) {
+ globalCtx->envCtx.lightSettingOverride = 1;
+ } else if ((gSaveContext.dayTime >= CLOCK_TIME(16, 0)) &&
+ (gSaveContext.dayTime <= CLOCK_TIME(18, 30))) {
+ globalCtx->envCtx.lightSettingOverride = 2;
} else {
- globalCtx->envCtx.unk_BF = 3;
+ globalCtx->envCtx.lightSettingOverride = 3;
}
}
break;
@@ -414,9 +415,9 @@ void func_80064824(GlobalContext* globalCtx, CutsceneContext* csCtx, CsCmdBase*
break;
case 34:
if (IS_DAY) {
- gSaveContext.dayTime -= gTimeIncrement;
+ gSaveContext.dayTime -= gTimeSpeed;
} else {
- gSaveContext.dayTime -= gTimeIncrement * 2;
+ gSaveContext.dayTime -= gTimeSpeed * 2;
}
break;
case 35:
@@ -429,8 +430,8 @@ void func_80064824(GlobalContext* globalCtx, CutsceneContext* csCtx, CsCmdBase*
// Command 4: Set Environment Lighting
void Cutscene_Command_SetLighting(GlobalContext* globalCtx, CutsceneContext* csCtx, CsCmdEnvLighting* cmd) {
if (csCtx->frames == cmd->startFrame) {
- globalCtx->envCtx.unk_BF = cmd->setting - 1;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightSettingOverride = cmd->setting - 1;
+ globalCtx->envCtx.lightBlend = 1.0f;
}
}
@@ -1222,8 +1223,8 @@ void Cutscene_Command_Terminator(GlobalContext* globalCtx, CutsceneContext* csCt
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
break;
case 119:
- gSaveContext.dayTime = 0x8000;
- gSaveContext.skyboxTime = 0x8000;
+ gSaveContext.dayTime = CLOCK_TIME(12, 0);
+ gSaveContext.skyboxTime = CLOCK_TIME(12, 0);
globalCtx->nextEntranceIndex = ENTR_NAKANIWA_1;
globalCtx->transitionTrigger = TRANS_TRIGGER_START;
globalCtx->transitionType = TRANS_TYPE_FADE_WHITE;
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index 522908139..596ff3443 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -5,12 +5,6 @@
#include "objects/gameplay_field_keep/gameplay_field_keep.h"
typedef enum {
- /* 0 */ LENS_FLARE_CIRCLE0,
- /* 1 */ LENS_FLARE_CIRCLE1,
- /* 2 */ LENS_FLARE_RING
-} LensFlareType;
-
-typedef enum {
/* 0x00 */ LIGHTNING_BOLT_START,
/* 0x01 */ LIGHTNING_BOLT_WAIT,
/* 0x02 */ LIGHTNING_BOLT_DRAW,
@@ -18,140 +12,132 @@ typedef enum {
} LightningBoltState;
typedef struct {
- /* 0x00 */ u16 startTime;
- /* 0x02 */ u16 endTime;
- /* 0x04 */ u8 unk_04;
- /* 0x05 */ u8 unk_05;
-} struct_8011FB48; // size = 0x6
+ /* 0x00 */ s32 mantissa;
+ /* 0x04 */ s32 exponent;
+} ZBufValConversionEntry; // size = 0x8
-typedef struct {
- /* 0x00 */ u8 state;
- /* 0x04 */ Vec3f offset;
- /* 0x10 */ Vec3f pos;
- /* 0x1C */ s8 pitch;
- /* 0x1D */ s8 roll;
- /* 0x1E */ u8 textureIndex;
- /* 0x1F */ u8 delayTimer;
-} LightningBolt; // size = 0x20
-
-typedef struct {
- /* 0x00 */ s32 unk_00;
- /* 0x04 */ s32 unk_04;
-} Struct_8011FAF0; // size = 0x8
-
-Struct_8011FAF0 D_8011FAF0[] = {
- { 6, 0x00000000 }, { 5, 0x00020000 }, { 4, 0x00030000 }, { 3, 0x00038000 },
- { 2, 0x0003C000 }, { 1, 0x0003E000 }, { 0, 0x0003F000 }, { 0, 0x0003F800 },
+ZBufValConversionEntry sZBufValConversionTable[1 << 3] = {
+ { 6, 0x00000 }, { 5, 0x20000 }, { 4, 0x30000 }, { 3, 0x38000 },
+ { 2, 0x3C000 }, { 1, 0x3E000 }, { 0, 0x3F000 }, { 0, 0x3F800 },
};
-u8 gWeatherMode = 0; // "E_wether_flg"
+u8 gWeatherMode = WEATHER_MODE_CLEAR; // "E_wether_flg"
+
+u8 gLightConfigAfterUnderwater = 0;
-u8 D_8011FB34 = 0;
+u8 gInterruptSongOfStorms = false;
-u8 D_8011FB38 = 0;
+// Indicates whether the skybox is changing to a different index of the same config (based on time)
+u8 gSkyboxIsChanging = false;
-u8 gSkyboxBlendingEnabled = false;
+// how many units of time that pass every update
+u16 gTimeSpeed = 0;
-u16 gTimeIncrement = 0;
+u16 sSunScreenDepth = GPACK_ZDZ(G_MAXFBZ, 0);
-u16 D_8011FB44 = 0xFFFC;
+typedef struct {
+ /* 0x00 */ u16 startTime;
+ /* 0x02 */ u16 endTime;
+ /* 0x04 */ u8 lightSetting;
+ /* 0x05 */ u8 nextLightSetting;
+} TimeBasedLightEntry; // size = 0x6
-struct_8011FB48 D_8011FB48[][7] = {
+TimeBasedLightEntry sTimeBasedLightConfigs[][7] = {
{
- { 0x0000, 0x2AAC, 3, 3 },
- { 0x2AAC, 0x4000, 3, 0 },
- { 0x4000, 0x5556, 0, 1 },
- { 0x5556, 0xAAAB, 1, 1 },
- { 0xAAAB, 0xB556, 1, 2 },
- { 0xB556, 0xCAAC, 2, 3 },
- { 0xCAAC, 0xFFFF, 3, 3 },
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0) + 1, 3, 3 },
+ { CLOCK_TIME(4, 0) + 1, CLOCK_TIME(6, 0), 3, 0 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0) + 1, 0, 1 },
+ { CLOCK_TIME(8, 0) + 1, CLOCK_TIME(16, 0), 1, 1 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0) + 1, 1, 2 },
+ { CLOCK_TIME(17, 0) + 1, CLOCK_TIME(19, 0) + 1, 2, 3 },
+ { CLOCK_TIME(19, 0) + 1, CLOCK_TIME(24, 0) - 1, 3, 3 },
},
{
- { 0x0000, 0x2AAC, 7, 7 },
- { 0x2AAC, 0x4000, 7, 4 },
- { 0x4000, 0x5556, 4, 5 },
- { 0x5556, 0xAAAB, 5, 5 },
- { 0xAAAB, 0xB556, 5, 6 },
- { 0xB556, 0xCAAC, 6, 7 },
- { 0xCAAC, 0xFFFF, 7, 7 },
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0) + 1, 7, 7 },
+ { CLOCK_TIME(4, 0) + 1, CLOCK_TIME(6, 0), 7, 4 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0) + 1, 4, 5 },
+ { CLOCK_TIME(8, 0) + 1, CLOCK_TIME(16, 0), 5, 5 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0) + 1, 5, 6 },
+ { CLOCK_TIME(17, 0) + 1, CLOCK_TIME(19, 0) + 1, 6, 7 },
+ { CLOCK_TIME(19, 0) + 1, CLOCK_TIME(24, 0) - 1, 7, 7 },
},
{
- { 0x0000, 0x2AAC, 11, 11 },
- { 0x2AAC, 0x4000, 11, 8 },
- { 0x4000, 0x5556, 8, 9 },
- { 0x5556, 0xAAAB, 9, 9 },
- { 0xAAAB, 0xB556, 9, 10 },
- { 0xB556, 0xCAAC, 10, 11 },
- { 0xCAAC, 0xFFFF, 11, 11 },
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0) + 1, 11, 11 },
+ { CLOCK_TIME(4, 0) + 1, CLOCK_TIME(6, 0), 11, 8 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0) + 1, 8, 9 },
+ { CLOCK_TIME(8, 0) + 1, CLOCK_TIME(16, 0), 9, 9 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0) + 1, 9, 10 },
+ { CLOCK_TIME(17, 0) + 1, CLOCK_TIME(19, 0) + 1, 10, 11 },
+ { CLOCK_TIME(19, 0) + 1, CLOCK_TIME(24, 0) - 1, 11, 11 },
},
{
- { 0x0000, 0x2AAC, 15, 15 },
- { 0x2AAC, 0x4000, 15, 12 },
- { 0x4000, 0x5556, 12, 13 },
- { 0x5556, 0xAAAB, 13, 13 },
- { 0xAAAB, 0xB556, 13, 14 },
- { 0xB556, 0xCAAC, 14, 15 },
- { 0xCAAC, 0xFFFF, 15, 15 },
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0) + 1, 15, 15 },
+ { CLOCK_TIME(4, 0) + 1, CLOCK_TIME(6, 0), 15, 12 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0) + 1, 12, 13 },
+ { CLOCK_TIME(8, 0) + 1, CLOCK_TIME(16, 0), 13, 13 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0) + 1, 13, 14 },
+ { CLOCK_TIME(17, 0) + 1, CLOCK_TIME(19, 0) + 1, 14, 15 },
+ { CLOCK_TIME(19, 0) + 1, CLOCK_TIME(24, 0) - 1, 15, 15 },
},
{
- { 0x0000, 0x2AAC, 23, 23 },
- { 0x2AAC, 0x4000, 23, 20 },
- { 0x4000, 0x5556, 20, 21 },
- { 0x5556, 0xAAAB, 21, 21 },
- { 0xAAAB, 0xB556, 21, 22 },
- { 0xB556, 0xCAAC, 22, 23 },
- { 0xCAAC, 0xFFFF, 23, 23 },
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0) + 1, 23, 23 },
+ { CLOCK_TIME(4, 0) + 1, CLOCK_TIME(6, 0), 23, 20 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0) + 1, 20, 21 },
+ { CLOCK_TIME(8, 0) + 1, CLOCK_TIME(16, 0), 21, 21 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0) + 1, 21, 22 },
+ { CLOCK_TIME(17, 0) + 1, CLOCK_TIME(19, 0) + 1, 22, 23 },
+ { CLOCK_TIME(19, 0) + 1, CLOCK_TIME(24, 0) - 1, 23, 23 },
},
};
-struct_8011FC1C D_8011FC1C[][9] = {
+TimeBasedSkyboxEntry gTimeBasedSkyboxConfigs[][9] = {
{
- { 0x0000, 0x2AAC, 0, 3, 3 },
- { 0x2AAC, 0x3556, 1, 3, 0 },
- { 0x3556, 0x4000, 0, 0, 0 },
- { 0x4000, 0x5556, 1, 0, 1 },
- { 0x5556, 0xAAAB, 0, 1, 1 },
- { 0xAAAB, 0xB556, 1, 1, 2 },
- { 0xB556, 0xC001, 0, 2, 2 },
- { 0xC001, 0xCAAC, 1, 2, 3 },
- { 0xCAAC, 0xFFFF, 0, 3, 3 },
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0) + 1, false, 3, 3 },
+ { CLOCK_TIME(4, 0) + 1, CLOCK_TIME(5, 0) + 1, true, 3, 0 },
+ { CLOCK_TIME(5, 0) + 1, CLOCK_TIME(6, 0), false, 0, 0 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0) + 1, true, 0, 1 },
+ { CLOCK_TIME(8, 0) + 1, CLOCK_TIME(16, 0), false, 1, 1 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0) + 1, true, 1, 2 },
+ { CLOCK_TIME(17, 0) + 1, CLOCK_TIME(18, 0) + 1, false, 2, 2 },
+ { CLOCK_TIME(18, 0) + 1, CLOCK_TIME(19, 0) + 1, true, 2, 3 },
+ { CLOCK_TIME(19, 0) + 1, CLOCK_TIME(24, 0) - 1, false, 3, 3 },
},
{
- { 0x0000, 0x2AAC, 0, 7, 7 },
- { 0x2AAC, 0x3556, 1, 7, 4 },
- { 0x3556, 0x4000, 0, 4, 4 },
- { 0x4000, 0x5556, 1, 4, 5 },
- { 0x5556, 0xAAAB, 0, 5, 5 },
- { 0xAAAB, 0xB556, 1, 5, 6 },
- { 0xB556, 0xC001, 0, 6, 6 },
- { 0xC001, 0xCAAC, 1, 6, 7 },
- { 0xCAAC, 0xFFFF, 0, 7, 7 },
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0) + 1, false, 7, 7 },
+ { CLOCK_TIME(4, 0) + 1, CLOCK_TIME(5, 0) + 1, true, 7, 4 },
+ { CLOCK_TIME(5, 0) + 1, CLOCK_TIME(6, 0), false, 4, 4 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0) + 1, true, 4, 5 },
+ { CLOCK_TIME(8, 0) + 1, CLOCK_TIME(16, 0), false, 5, 5 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0) + 1, true, 5, 6 },
+ { CLOCK_TIME(17, 0) + 1, CLOCK_TIME(18, 0) + 1, false, 6, 6 },
+ { CLOCK_TIME(18, 0) + 1, CLOCK_TIME(19, 0) + 1, true, 6, 7 },
+ { CLOCK_TIME(19, 0) + 1, CLOCK_TIME(24, 0) - 1, false, 7, 7 },
},
{
- { 0x0000, 0x1556, 0, 3, 3 },
- { 0x1556, 0x2AAC, 1, 3, 0 },
- { 0x2AAC, 0x5556, 0, 0, 0 },
- { 0x5556, 0x6AAB, 1, 0, 1 },
- { 0x6AAB, 0x9556, 0, 1, 1 },
- { 0x9556, 0xAAAB, 1, 1, 2 },
- { 0xAAAB, 0xD556, 0, 2, 2 },
- { 0xD556, 0xEAAB, 1, 2, 3 },
- { 0xEAAB, 0xFFFF, 0, 3, 3 },
+ { CLOCK_TIME(0, 0), CLOCK_TIME(2, 0) + 1, false, 3, 3 },
+ { CLOCK_TIME(2, 0) + 1, CLOCK_TIME(4, 0) + 1, true, 3, 0 },
+ { CLOCK_TIME(4, 0) + 1, CLOCK_TIME(8, 0) + 1, false, 0, 0 },
+ { CLOCK_TIME(8, 0) + 1, CLOCK_TIME(10, 0), true, 0, 1 },
+ { CLOCK_TIME(10, 0), CLOCK_TIME(14, 0) + 1, false, 1, 1 },
+ { CLOCK_TIME(14, 0) + 1, CLOCK_TIME(16, 0), true, 1, 2 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(20, 0) + 1, false, 2, 2 },
+ { CLOCK_TIME(20, 0) + 1, CLOCK_TIME(22, 0), true, 2, 3 },
+ { CLOCK_TIME(22, 0), CLOCK_TIME(24, 0) - 1, false, 3, 3 },
},
{
- { 0x0000, 0x3556, 0, 11, 11 },
- { 0x3556, 0x4000, 1, 11, 8 },
- { 0x4000, 0x4AAB, 0, 8, 8 },
- { 0x4AAB, 0x5556, 1, 8, 9 },
- { 0x5556, 0xAAAB, 0, 9, 9 },
- { 0xAAAB, 0xB556, 1, 9, 10 },
- { 0xB556, 0xC001, 0, 10, 10 },
- { 0xC001, 0xCAAC, 1, 10, 11 },
- { 0xCAAC, 0xFFFF, 0, 11, 11 },
+ { CLOCK_TIME(0, 0), CLOCK_TIME(5, 0) + 1, false, 11, 11 },
+ { CLOCK_TIME(5, 0) + 1, CLOCK_TIME(6, 0), true, 11, 8 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(7, 0), false, 8, 8 },
+ { CLOCK_TIME(7, 0), CLOCK_TIME(8, 0) + 1, true, 8, 9 },
+ { CLOCK_TIME(8, 0) + 1, CLOCK_TIME(16, 0), false, 9, 9 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0) + 1, true, 9, 10 },
+ { CLOCK_TIME(17, 0) + 1, CLOCK_TIME(18, 0) + 1, false, 10, 10 },
+ { CLOCK_TIME(18, 0) + 1, CLOCK_TIME(19, 0) + 1, true, 10, 11 },
+ { CLOCK_TIME(19, 0) + 1, CLOCK_TIME(24, 0) - 1, false, 11, 11 },
},
};
-SkyboxFile gSkyboxFiles[] = {
+SkyboxFile gNormalSkyFiles[] = {
{
ROM_FILE(vr_fine0_static),
ROM_FILE(vr_fine0_pal_static),
@@ -190,30 +176,58 @@ SkyboxFile gSkyboxFiles[] = {
},
};
-u8 D_8011FDCC = 0;
-u8 D_8011FDD0 = 0;
-f32 D_8011FDD4 = 0.0f;
+u8 sSandstormColorIndex = 0;
+u8 sNextSandstormColorIndex = 0;
+f32 sSandstormLerpScale = 0.0f;
u8 gCustomLensFlareOn;
Vec3f gCustomLensFlarePos;
s16 gLensFlareUnused;
s16 gLensFlareScale;
f32 gLensFlareColorIntensity;
-s16 gLensFlareScreenFillAlpha;
+s16 gLensFlareGlareStrength;
+
+typedef struct {
+ /* 0x00 */ u8 state;
+ /* 0x04 */ Vec3f offset;
+ /* 0x10 */ Vec3f pos;
+ /* 0x1C */ s8 pitch;
+ /* 0x1D */ s8 roll;
+ /* 0x1E */ u8 textureIndex;
+ /* 0x1F */ u8 delayTimer;
+} LightningBolt; // size = 0x20
+
LightningBolt sLightningBolts[3];
+
LightningStrike gLightningStrike;
+
s16 sLightningFlashAlpha;
-s16 D_8015FD7E;
-s16 D_8015FD80;
+
+s16 sSunDepthTestX;
+s16 sSunDepthTestY;
+
LightNode* sNGameOverLightNode;
LightInfo sNGameOverLightInfo;
LightNode* sSGameOverLightNode;
LightInfo sSGameOverLightInfo;
u8 sGameOverLightsIntensity;
-u16 D_8015FDB0;
+u16 sSandstormScroll;
+
+#define ZBUFVAL_EXPONENT(v) (((v) >> 15) & 7)
+#define ZBUFVAL_MANTISSA(v) (((v) >> 4) & 0x7FF)
-s32 func_8006F0A0(s32 a0) {
- s32 ret = ((a0 >> 4 & 0x7FF) << D_8011FAF0[a0 >> 15 & 7].unk_00) + D_8011FAF0[a0 >> 15 & 7].unk_04;
+/**
+ * Convert an 18-bits Z buffer value to a fixed point 15.3 value
+ *
+ * zBufferVal is 18 bits:
+ * 3: Exponent of z value
+ * 11: Mantissa of z value
+ * 4: dz value (unused)
+ */
+s32 Environment_ZBufValToFixedPoint(s32 zBufferVal) {
+ // base[exp] + mantissa << shift[exp]
+ s32 ret = (ZBUFVAL_MANTISSA(zBufferVal) << sZBufValConversionTable[ZBUFVAL_EXPONENT(zBufferVal)].mantissa) +
+ sZBufValConversionTable[ZBUFVAL_EXPONENT(zBufferVal)].exponent;
return ret;
}
@@ -227,7 +241,7 @@ u16 Environment_GetPixelDepth(s32 x, s32 y) {
void Environment_GraphCallback(GraphicsContext* gfxCtx, void* param) {
GlobalContext* globalCtx = (GlobalContext*)param;
- D_8011FB44 = Environment_GetPixelDepth(D_8015FD7E, D_8015FD80);
+ sSunScreenDepth = Environment_GetPixelDepth(sSunDepthTestX, sSunDepthTestY);
Lights_GlowCheck(globalCtx);
}
@@ -237,7 +251,7 @@ void Environment_Init(GlobalContext* globalCtx2, EnvironmentContext* envCtx, s32
gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
- if (((void)0, gSaveContext.dayTime) > 0xC000 || ((void)0, gSaveContext.dayTime) < 0x4555) {
+ if (((void)0, gSaveContext.dayTime) > CLOCK_TIME(18, 0) || ((void)0, gSaveContext.dayTime) < CLOCK_TIME(6, 30)) {
((void)0, gSaveContext.nightFlag = 1);
} else {
((void)0, gSaveContext.nightFlag = 0);
@@ -254,33 +268,42 @@ void Environment_Init(GlobalContext* globalCtx2, EnvironmentContext* envCtx, s32
envCtx->skybox1Index = 99;
envCtx->skybox2Index = 99;
- envCtx->unk_19 = 0;
- envCtx->unk_1A = 0;
- envCtx->unk_21 = 0;
- envCtx->unk_22 = 0;
+
+ envCtx->changeSkyboxState = CHANGE_SKYBOX_INACTIVE;
+ envCtx->changeSkyboxTimer = 0;
+ envCtx->changeLightEnabled = false;
+ envCtx->changeLightTimer = 0;
+
envCtx->skyboxDmaState = SKYBOX_DMA_INACTIVE;
- envCtx->unk_1F = 0;
- envCtx->unk_20 = 0;
- envCtx->unk_84 = 0.0f;
- envCtx->unk_88 = 0.0f;
- envCtx->unk_BD = 0;
- envCtx->unk_BE = 0;
- envCtx->unk_D8 = 1.0f;
- envCtx->unk_DC = 0;
- envCtx->gloomySkyMode = 0;
- envCtx->unk_DE = 0;
- envCtx->lightningMode = LIGHTNING_MODE_OFF;
- envCtx->unk_E0 = 0;
+ envCtx->lightConfig = 0;
+ envCtx->changeLightNextConfig = 0;
+
+ envCtx->glareAlpha = 0.0f;
+ envCtx->lensFlareAlphaScale = 0.0f;
+
+ envCtx->lightSetting = 0;
+ envCtx->prevLightSetting = 0;
+ envCtx->lightBlend = 1.0f;
+ envCtx->lightBlendOverride = LIGHT_BLEND_OVERRIDE_NONE;
+
+ envCtx->stormRequest = STORM_REQUEST_NONE;
+ envCtx->stormState = STORM_STATE_OFF;
+ envCtx->lightningState = LIGHTNING_OFF;
+ envCtx->timeSeqState = TIMESEQ_DAY_BGM;
envCtx->fillScreen = false;
+
envCtx->screenFillColor[0] = 0;
envCtx->screenFillColor[1] = 0;
envCtx->screenFillColor[2] = 0;
envCtx->screenFillColor[3] = 0;
+
envCtx->customSkyboxFilter = false;
+
envCtx->skyboxFilterColor[0] = 0;
envCtx->skyboxFilterColor[1] = 0;
envCtx->skyboxFilterColor[2] = 0;
envCtx->skyboxFilterColor[3] = 0;
+
envCtx->sandstormState = SANDSTORM_OFF;
envCtx->sandstormPrimA = 0;
envCtx->sandstormEnvA = 0;
@@ -298,90 +321,97 @@ void Environment_Init(GlobalContext* globalCtx2, EnvironmentContext* envCtx, s32
envCtx->adjLight1Color[1] = envCtx->adjLight1Color[2] = envCtx->adjFogColor[0] = envCtx->adjFogColor[1] =
envCtx->adjFogColor[2] = envCtx->adjFogNear = envCtx->adjFogFar = 0;
- envCtx->sunPos.x = -(Math_SinS(((void)0, gSaveContext.dayTime) - 0x8000) * 120.0f) * 25.0f;
- envCtx->sunPos.y = +(Math_CosS(((void)0, gSaveContext.dayTime) - 0x8000) * 120.0f) * 25.0f;
- envCtx->sunPos.z = +(Math_CosS(((void)0, gSaveContext.dayTime) - 0x8000) * 20.0f) * 25.0f;
+ envCtx->sunPos.x = -(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
+ envCtx->sunPos.y = +(Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
+ envCtx->sunPos.z = +(Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
envCtx->windDirection.x = 80;
envCtx->windDirection.y = 80;
envCtx->windDirection.z = 80;
- envCtx->blendIndoorLights = false;
- envCtx->unk_BF = 0xFF;
- envCtx->unk_D6 = 0xFFFF;
- R_ENV_TIME_INCREMENT = gTimeIncrement = envCtx->timeIncrement = 0;
+ envCtx->lightBlendEnabled = false;
+ envCtx->lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
+ envCtx->lightBlendRateOverride = LIGHT_BLENDRATE_OVERRIDE_NONE;
+
+ R_ENV_TIME_SPEED_OLD = gTimeSpeed = envCtx->sceneTimeSpeed = 0;
R_ENV_DISABLE_DBG = true;
if (CREG(3) != 0) {
gSaveContext.chamberCutsceneNum = CREG(3) - 1;
}
- globalCtx->envCtx.unk_EE[0] = 0;
- globalCtx->envCtx.unk_EE[1] = 0;
- globalCtx->envCtx.unk_EE[2] = 0;
- globalCtx->envCtx.unk_EE[3] = 0;
-
- globalCtx->envCtx.unk_F2[0] = 0;
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] = 0;
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_CUR] = 0;
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_CUR] = 0;
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_MAX] = 0;
+ globalCtx->envCtx.precipitation[PRECIP_SOS_MAX] = 0;
- if (gSaveContext.unk_13C3 != 0) {
+ if (gSaveContext.retainWeatherMode) {
if (((void)0, gSaveContext.sceneSetupIndex) < 4) {
switch (gWeatherMode) {
- case 1:
- envCtx->unk_17 = 1;
- envCtx->unk_18 = 1;
- envCtx->unk_1F = 3;
- envCtx->unk_20 = 3;
- globalCtx->envCtx.unk_EE[3] = 0;
- globalCtx->envCtx.unk_EE[2] = 0;
+ case WEATHER_MODE_CLOUDY_CONFIG3:
+ envCtx->skyboxConfig = 1;
+ envCtx->changeSkyboxNextConfig = 1;
+ envCtx->lightConfig = 3;
+ envCtx->changeLightNextConfig = 3;
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_MAX] = 0;
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_CUR] = 0;
break;
- case 2:
- case 3:
- case 4:
- envCtx->unk_17 = 1;
- envCtx->unk_18 = 1;
- envCtx->unk_1F = 2;
- envCtx->unk_20 = 2;
- globalCtx->envCtx.unk_EE[3] = 0;
- globalCtx->envCtx.unk_EE[2] = 0;
+
+ case WEATHER_MODE_CLOUDY_CONFIG2:
+ case WEATHER_MODE_SNOW:
+ case WEATHER_MODE_RAIN:
+ envCtx->skyboxConfig = 1;
+ envCtx->changeSkyboxNextConfig = 1;
+ envCtx->lightConfig = 2;
+ envCtx->changeLightNextConfig = 2;
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_MAX] = 0;
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_CUR] = 0;
break;
- case 5:
- envCtx->unk_17 = 1;
- envCtx->unk_18 = 1;
- envCtx->unk_1F = 4;
- envCtx->unk_20 = 4;
- globalCtx->envCtx.unk_EE[3] = 0;
- globalCtx->envCtx.unk_EE[2] = 0;
+
+ case WEATHER_MODE_HEAVY_RAIN:
+ envCtx->skyboxConfig = 1;
+ envCtx->changeSkyboxNextConfig = 1;
+ envCtx->lightConfig = 4;
+ envCtx->changeLightNextConfig = 4;
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_MAX] = 0;
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_CUR] = 0;
break;
+
default:
break;
}
if (globalCtx->skyboxId == SKYBOX_NORMAL_SKY) {
- if (gWeatherMode == 3) {
- globalCtx->envCtx.unk_EE[2] = globalCtx->envCtx.unk_EE[3] = 0x40;
- } else if (gWeatherMode == 4) {
- globalCtx->envCtx.unk_EE[0] = 0x14;
- globalCtx->envCtx.unk_EE[1] = 0x14;
- } else if (gWeatherMode == 5) {
- globalCtx->envCtx.unk_EE[0] = 0x1E;
- globalCtx->envCtx.unk_EE[1] = 0x1E;
+ if (gWeatherMode == WEATHER_MODE_SNOW) {
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_CUR] =
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_MAX] = 64;
+ } else if (gWeatherMode == WEATHER_MODE_RAIN) {
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] = 20;
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_CUR] = 20;
+ } else if (gWeatherMode == WEATHER_MODE_HEAVY_RAIN) {
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] = 30;
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_CUR] = 30;
}
}
}
} else {
- gWeatherMode = 0;
+ gWeatherMode = WEATHER_MODE_CLEAR;
}
- D_8011FB38 = 0;
- D_8011FB34 = 0;
- gSkyboxBlendingEnabled = false;
- gSaveContext.unk_13C3 = 0;
+ gInterruptSongOfStorms = false;
+ gLightConfigAfterUnderwater = 0;
+ gSkyboxIsChanging = false;
+ gSaveContext.retainWeatherMode = false;
+
R_ENV_LIGHT1_DIR(0) = 80;
R_ENV_LIGHT1_DIR(1) = 80;
R_ENV_LIGHT1_DIR(2) = 80;
+
R_ENV_LIGHT2_DIR(0) = -80;
R_ENV_LIGHT2_DIR(1) = -80;
R_ENV_LIGHT2_DIR(2) = -80;
+
cREG(9) = 10;
cREG(10) = 0;
cREG(11) = 0;
@@ -557,38 +587,39 @@ f32 Environment_LerpWeightAccelDecel(u16 endFrame, u16 startFrame, u16 curFrame,
return ret;
}
-void func_8006FB94(EnvironmentContext* envCtx, u8 unused) {
- if (envCtx->gloomySkyMode != 0) {
- switch (envCtx->unk_DE) {
- case 0:
- if ((envCtx->gloomySkyMode == 1) && !gSkyboxBlendingEnabled) {
- envCtx->unk_19 = 1;
- envCtx->unk_17 = 0;
- envCtx->unk_18 = 1;
- envCtx->unk_1A = 100;
- envCtx->unk_21 = 1;
- envCtx->unk_1F = 0;
- envCtx->unk_20 = 2;
- D_8011FB34 = 2;
- envCtx->unk_22 = envCtx->unk_24 = 100;
- envCtx->unk_DE++;
+void Environment_UpdateStorm(EnvironmentContext* envCtx, u8 unused) {
+ if (envCtx->stormRequest != STORM_REQUEST_NONE) {
+ switch (envCtx->stormState) {
+ case STORM_STATE_OFF:
+ if ((envCtx->stormRequest == STORM_REQUEST_START) && !gSkyboxIsChanging) {
+ envCtx->changeSkyboxState = CHANGE_SKYBOX_REQUESTED;
+ envCtx->skyboxConfig = 0;
+ envCtx->changeSkyboxNextConfig = 1;
+ envCtx->changeSkyboxTimer = 100;
+ envCtx->changeLightEnabled = true;
+ envCtx->lightConfig = 0;
+ envCtx->changeLightNextConfig = 2;
+ gLightConfigAfterUnderwater = 2;
+ envCtx->changeLightTimer = envCtx->changeDuration = 100;
+ envCtx->stormState++;
}
break;
- case 1:
- if (!gSkyboxBlendingEnabled && (envCtx->gloomySkyMode == 2)) {
- gWeatherMode = 0;
- envCtx->unk_19 = 1;
- envCtx->unk_17 = 1;
- envCtx->unk_18 = 0;
- envCtx->unk_1A = 100;
- envCtx->unk_21 = 1;
- envCtx->unk_1F = 2;
- envCtx->unk_20 = 0;
- D_8011FB34 = 0;
- envCtx->unk_22 = envCtx->unk_24 = 100;
- envCtx->unk_EE[0] = 0;
- envCtx->gloomySkyMode = 0;
- envCtx->unk_DE = 0;
+
+ case STORM_STATE_ON:
+ if (!gSkyboxIsChanging && (envCtx->stormRequest == STORM_REQUEST_STOP)) {
+ gWeatherMode = WEATHER_MODE_CLEAR;
+ envCtx->changeSkyboxState = CHANGE_SKYBOX_REQUESTED;
+ envCtx->skyboxConfig = 1;
+ envCtx->changeSkyboxNextConfig = 0;
+ envCtx->changeSkyboxTimer = 100;
+ envCtx->changeLightEnabled = true;
+ envCtx->lightConfig = 2;
+ envCtx->changeLightNextConfig = 0;
+ gLightConfigAfterUnderwater = 0;
+ envCtx->changeLightTimer = envCtx->changeDuration = 100;
+ envCtx->precipitation[PRECIP_RAIN_MAX] = 0;
+ envCtx->stormRequest = STORM_REQUEST_NONE;
+ envCtx->stormState = STORM_STATE_OFF;
}
break;
}
@@ -603,17 +634,18 @@ void Environment_UpdateSkybox(u8 skyboxId, EnvironmentContext* envCtx, SkyboxCon
u8 skyboxBlend = 0;
if (skyboxId == SKYBOX_CUTSCENE_MAP) {
- envCtx->unk_17 = 3;
-
- for (i = 0; i < ARRAY_COUNT(D_8011FC1C[envCtx->unk_17]); i++) {
- if (gSaveContext.skyboxTime >= D_8011FC1C[envCtx->unk_17][i].startTime &&
- (gSaveContext.skyboxTime < D_8011FC1C[envCtx->unk_17][i].endTime ||
- D_8011FC1C[envCtx->unk_17][i].endTime == 0xFFFF)) {
- if (D_8011FC1C[envCtx->unk_17][i].blend) {
- envCtx->skyboxBlend = Environment_LerpWeight(D_8011FC1C[envCtx->unk_17][i].endTime,
- D_8011FC1C[envCtx->unk_17][i].startTime,
- ((void)0, gSaveContext.skyboxTime)) *
- 255;
+ envCtx->skyboxConfig = 3;
+
+ for (i = 0; i < ARRAY_COUNT(gTimeBasedSkyboxConfigs[envCtx->skyboxConfig]); i++) {
+ if (gSaveContext.skyboxTime >= gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].startTime &&
+ (gSaveContext.skyboxTime < gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].endTime ||
+ gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].endTime == 0xFFFF)) {
+ if (gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].changeSkybox) {
+ envCtx->skyboxBlend =
+ Environment_LerpWeight(gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].endTime,
+ gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].startTime,
+ ((void)0, gSaveContext.skyboxTime)) *
+ 255;
} else {
envCtx->skyboxBlend = 0;
}
@@ -621,29 +653,30 @@ void Environment_UpdateSkybox(u8 skyboxId, EnvironmentContext* envCtx, SkyboxCon
}
}
} else if (skyboxId == SKYBOX_NORMAL_SKY && !envCtx->skyboxDisabled) {
- for (i = 0; i < ARRAY_COUNT(D_8011FC1C[envCtx->unk_17]); i++) {
- if (gSaveContext.skyboxTime >= D_8011FC1C[envCtx->unk_17][i].startTime &&
- (gSaveContext.skyboxTime < D_8011FC1C[envCtx->unk_17][i].endTime ||
- D_8011FC1C[envCtx->unk_17][i].endTime == 0xFFFF)) {
- newSkybox1Index = D_8011FC1C[envCtx->unk_17][i].skybox1Index;
- newSkybox2Index = D_8011FC1C[envCtx->unk_17][i].skybox2Index;
- gSkyboxBlendingEnabled = D_8011FC1C[envCtx->unk_17][i].blend;
-
- if (gSkyboxBlendingEnabled) {
- skyboxBlend = Environment_LerpWeight(D_8011FC1C[envCtx->unk_17][i].endTime,
- D_8011FC1C[envCtx->unk_17][i].startTime,
+ for (i = 0; i < ARRAY_COUNT(gTimeBasedSkyboxConfigs[envCtx->skyboxConfig]); i++) {
+ if (gSaveContext.skyboxTime >= gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].startTime &&
+ (gSaveContext.skyboxTime < gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].endTime ||
+ gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].endTime == 0xFFFF)) {
+ newSkybox1Index = gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].skybox1Index;
+ newSkybox2Index = gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].skybox2Index;
+ gSkyboxIsChanging = gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].changeSkybox;
+
+ if (gSkyboxIsChanging) {
+ skyboxBlend = Environment_LerpWeight(gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].endTime,
+ gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].startTime,
((void)0, gSaveContext.skyboxTime)) *
255;
} else {
- skyboxBlend = Environment_LerpWeight(D_8011FC1C[envCtx->unk_17][i].endTime,
- D_8011FC1C[envCtx->unk_17][i].startTime,
+ skyboxBlend = Environment_LerpWeight(gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].endTime,
+ gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].startTime,
((void)0, gSaveContext.skyboxTime)) *
255;
- skyboxBlend = (skyboxBlend < 0x80) ? 0xFF : 0;
+ skyboxBlend = (skyboxBlend < 128) ? 255 : 0;
- if ((envCtx->unk_19 != 0) && (envCtx->unk_19 < 3)) {
- envCtx->unk_19++;
+ if ((envCtx->changeSkyboxState != CHANGE_SKYBOX_INACTIVE) &&
+ (envCtx->changeSkyboxState < CHANGE_SKYBOX_ACTIVE)) {
+ envCtx->changeSkyboxState++;
skyboxBlend = 0;
}
}
@@ -651,17 +684,18 @@ void Environment_UpdateSkybox(u8 skyboxId, EnvironmentContext* envCtx, SkyboxCon
}
}
- func_8006FB94(envCtx, skyboxBlend);
+ Environment_UpdateStorm(envCtx, skyboxBlend);
- if (envCtx->unk_19 >= 3) {
- newSkybox1Index = D_8011FC1C[envCtx->unk_17][i].skybox1Index;
- newSkybox2Index = D_8011FC1C[envCtx->unk_18][i].skybox2Index;
+ if (envCtx->changeSkyboxState >= CHANGE_SKYBOX_ACTIVE) {
+ newSkybox1Index = gTimeBasedSkyboxConfigs[envCtx->skyboxConfig][i].skybox1Index;
+ newSkybox2Index = gTimeBasedSkyboxConfigs[envCtx->changeSkyboxNextConfig][i].skybox2Index;
- skyboxBlend = ((f32)envCtx->unk_24 - envCtx->unk_1A--) / (f32)envCtx->unk_24 * 255;
+ skyboxBlend = ((f32)envCtx->changeDuration - envCtx->changeSkyboxTimer) / (f32)envCtx->changeDuration * 255;
+ envCtx->changeSkyboxTimer--;
- if (envCtx->unk_1A <= 0) {
- envCtx->unk_19 = 0;
- envCtx->unk_17 = envCtx->unk_18;
+ if (envCtx->changeSkyboxTimer <= 0) {
+ envCtx->changeSkyboxState = CHANGE_SKYBOX_INACTIVE;
+ envCtx->skyboxConfig = envCtx->changeSkyboxNextConfig;
}
}
@@ -671,70 +705,75 @@ void Environment_UpdateSkybox(u8 skyboxId, EnvironmentContext* envCtx, SkyboxCon
}
if ((envCtx->skybox1Index != newSkybox1Index) && (envCtx->skyboxDmaState == SKYBOX_DMA_INACTIVE)) {
- envCtx->skyboxDmaState = SKYBOX_DMA_FILE1_START;
- size = gSkyboxFiles[newSkybox1Index].file.vromEnd - gSkyboxFiles[newSkybox1Index].file.vromStart;
+ envCtx->skyboxDmaState = SKYBOX_DMA_TEXTURE1_START;
+ size = gNormalSkyFiles[newSkybox1Index].file.vromEnd - gNormalSkyFiles[newSkybox1Index].file.vromStart;
osCreateMesgQueue(&envCtx->loadQueue, &envCtx->loadMsg, 1);
DmaMgr_SendRequest2(&envCtx->dmaRequest, (u32)skyboxCtx->staticSegments[0],
- gSkyboxFiles[newSkybox1Index].file.vromStart, size, 0, &envCtx->loadQueue, NULL,
+ gNormalSkyFiles[newSkybox1Index].file.vromStart, size, 0, &envCtx->loadQueue, NULL,
"../z_kankyo.c", 1264);
envCtx->skybox1Index = newSkybox1Index;
}
if ((envCtx->skybox2Index != newSkybox2Index) && (envCtx->skyboxDmaState == SKYBOX_DMA_INACTIVE)) {
- envCtx->skyboxDmaState = SKYBOX_DMA_FILE2_START;
- size = gSkyboxFiles[newSkybox2Index].file.vromEnd - gSkyboxFiles[newSkybox2Index].file.vromStart;
+ envCtx->skyboxDmaState = SKYBOX_DMA_TEXTURE2_START;
+ size = gNormalSkyFiles[newSkybox2Index].file.vromEnd - gNormalSkyFiles[newSkybox2Index].file.vromStart;
osCreateMesgQueue(&envCtx->loadQueue, &envCtx->loadMsg, 1);
DmaMgr_SendRequest2(&envCtx->dmaRequest, (u32)skyboxCtx->staticSegments[1],
- gSkyboxFiles[newSkybox2Index].file.vromStart, size, 0, &envCtx->loadQueue, NULL,
+ gNormalSkyFiles[newSkybox2Index].file.vromStart, size, 0, &envCtx->loadQueue, NULL,
"../z_kankyo.c", 1281);
envCtx->skybox2Index = newSkybox2Index;
}
- if (envCtx->skyboxDmaState == SKYBOX_DMA_FILE1_DONE) {
- envCtx->skyboxDmaState = SKYBOX_DMA_PAL1_START;
+ if (envCtx->skyboxDmaState == SKYBOX_DMA_TEXTURE1_DONE) {
+ envCtx->skyboxDmaState = SKYBOX_DMA_TLUT1_START;
if ((newSkybox1Index & 1) ^ ((newSkybox1Index & 4) >> 2)) {
- size = gSkyboxFiles[newSkybox1Index].palette.vromEnd - gSkyboxFiles[newSkybox1Index].palette.vromStart;
+ size = gNormalSkyFiles[newSkybox1Index].palette.vromEnd -
+ gNormalSkyFiles[newSkybox1Index].palette.vromStart;
osCreateMesgQueue(&envCtx->loadQueue, &envCtx->loadMsg, 1);
DmaMgr_SendRequest2(&envCtx->dmaRequest, (u32)skyboxCtx->palettes,
- gSkyboxFiles[newSkybox1Index].palette.vromStart, size, 0, &envCtx->loadQueue, NULL,
- "../z_kankyo.c", 1307);
+ gNormalSkyFiles[newSkybox1Index].palette.vromStart, size, 0, &envCtx->loadQueue,
+ NULL, "../z_kankyo.c", 1307);
} else {
- size = gSkyboxFiles[newSkybox1Index].palette.vromEnd - gSkyboxFiles[newSkybox1Index].palette.vromStart;
+ size = gNormalSkyFiles[newSkybox1Index].palette.vromEnd -
+ gNormalSkyFiles[newSkybox1Index].palette.vromStart;
osCreateMesgQueue(&envCtx->loadQueue, &envCtx->loadMsg, 1);
DmaMgr_SendRequest2(&envCtx->dmaRequest, (u32)skyboxCtx->palettes + size,
- gSkyboxFiles[newSkybox1Index].palette.vromStart, size, 0, &envCtx->loadQueue, NULL,
- "../z_kankyo.c", 1320);
+ gNormalSkyFiles[newSkybox1Index].palette.vromStart, size, 0, &envCtx->loadQueue,
+ NULL, "../z_kankyo.c", 1320);
}
}
- if (envCtx->skyboxDmaState == SKYBOX_DMA_FILE2_DONE) {
- envCtx->skyboxDmaState = SKYBOX_DMA_PAL2_START;
+ if (envCtx->skyboxDmaState == SKYBOX_DMA_TEXTURE2_DONE) {
+ envCtx->skyboxDmaState = SKYBOX_DMA_TLUT2_START;
if ((newSkybox2Index & 1) ^ ((newSkybox2Index & 4) >> 2)) {
- size = gSkyboxFiles[newSkybox2Index].palette.vromEnd - gSkyboxFiles[newSkybox2Index].palette.vromStart;
+ size = gNormalSkyFiles[newSkybox2Index].palette.vromEnd -
+ gNormalSkyFiles[newSkybox2Index].palette.vromStart;
osCreateMesgQueue(&envCtx->loadQueue, &envCtx->loadMsg, 1);
DmaMgr_SendRequest2(&envCtx->dmaRequest, (u32)skyboxCtx->palettes,
- gSkyboxFiles[newSkybox2Index].palette.vromStart, size, 0, &envCtx->loadQueue, NULL,
- "../z_kankyo.c", 1342);
+ gNormalSkyFiles[newSkybox2Index].palette.vromStart, size, 0, &envCtx->loadQueue,
+ NULL, "../z_kankyo.c", 1342);
} else {
- size = gSkyboxFiles[newSkybox2Index].palette.vromEnd - gSkyboxFiles[newSkybox2Index].palette.vromStart;
+ size = gNormalSkyFiles[newSkybox2Index].palette.vromEnd -
+ gNormalSkyFiles[newSkybox2Index].palette.vromStart;
osCreateMesgQueue(&envCtx->loadQueue, &envCtx->loadMsg, 1);
DmaMgr_SendRequest2(&envCtx->dmaRequest, (u32)skyboxCtx->palettes + size,
- gSkyboxFiles[newSkybox2Index].palette.vromStart, size, 0, &envCtx->loadQueue, NULL,
- "../z_kankyo.c", 1355);
+ gNormalSkyFiles[newSkybox2Index].palette.vromStart, size, 0, &envCtx->loadQueue,
+ NULL, "../z_kankyo.c", 1355);
}
}
- if ((envCtx->skyboxDmaState == SKYBOX_DMA_FILE1_START) || (envCtx->skyboxDmaState == SKYBOX_DMA_FILE2_START)) {
+ if ((envCtx->skyboxDmaState == SKYBOX_DMA_TEXTURE1_START) ||
+ (envCtx->skyboxDmaState == SKYBOX_DMA_TEXTURE2_START)) {
if (osRecvMesg(&envCtx->loadQueue, NULL, OS_MESG_NOBLOCK) == 0) {
envCtx->skyboxDmaState++;
}
- } else if (envCtx->skyboxDmaState >= SKYBOX_DMA_FILE1_DONE) {
+ } else if (envCtx->skyboxDmaState >= SKYBOX_DMA_TEXTURE1_DONE) {
if (osRecvMesg(&envCtx->loadQueue, NULL, OS_MESG_NOBLOCK) == 0) {
envCtx->skyboxDmaState = SKYBOX_DMA_INACTIVE;
}
@@ -751,27 +790,27 @@ void Environment_EnableUnderwaterLights(GlobalContext* globalCtx, s32 waterLight
osSyncPrintf(VT_COL(YELLOW, BLACK) "\n水ポリゴンデータに水中カラーが設定されておりません!" VT_RST);
}
- if (!globalCtx->envCtx.indoors) {
- D_8011FB34 = globalCtx->envCtx.unk_20;
+ if (globalCtx->envCtx.lightMode == LIGHT_MODE_TIME) {
+ gLightConfigAfterUnderwater = globalCtx->envCtx.changeLightNextConfig;
- if (globalCtx->envCtx.unk_1F != waterLightsIndex) {
- globalCtx->envCtx.unk_1F = waterLightsIndex;
- globalCtx->envCtx.unk_20 = waterLightsIndex;
+ if (globalCtx->envCtx.lightConfig != waterLightsIndex) {
+ globalCtx->envCtx.lightConfig = waterLightsIndex;
+ globalCtx->envCtx.changeLightNextConfig = waterLightsIndex;
}
} else {
- globalCtx->envCtx.blendIndoorLights = false; // instantly switch to water lights
- globalCtx->envCtx.unk_BF = waterLightsIndex;
+ globalCtx->envCtx.lightBlendEnabled = false; // instantly switch to water lights
+ globalCtx->envCtx.lightSettingOverride = waterLightsIndex;
}
}
void Environment_DisableUnderwaterLights(GlobalContext* globalCtx) {
- if (!globalCtx->envCtx.indoors) {
- globalCtx->envCtx.unk_1F = D_8011FB34;
- globalCtx->envCtx.unk_20 = D_8011FB34;
+ if (globalCtx->envCtx.lightMode == LIGHT_MODE_TIME) {
+ globalCtx->envCtx.lightConfig = gLightConfigAfterUnderwater;
+ globalCtx->envCtx.changeLightNextConfig = gLightConfigAfterUnderwater;
} else {
- globalCtx->envCtx.blendIndoorLights = false; // instantly switch to previous lights
- globalCtx->envCtx.unk_BF = 0xFF;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlendEnabled = false; // instantly switch to previous lights
+ globalCtx->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
+ globalCtx->envCtx.lightBlend = 1.0f;
}
}
@@ -794,7 +833,7 @@ void Environment_PrintDebugInfo(GlobalContext* globalCtx, Gfx** gfx) {
GfxPrint_SetColor(&printer, 255, 255, 255, 64);
GfxPrint_Printf(&printer, "%02d", (u8)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.dayTime) / 60.0f));
- if ((gSaveContext.dayTime & 0x1F) >= 0x10 || gTimeIncrement >= 6) {
+ if ((gSaveContext.dayTime & 0x1F) >= 0x10 || gTimeSpeed >= 6) {
GfxPrint_Printf(&printer, "%s", ":");
} else {
GfxPrint_Printf(&printer, "%s", " ");
@@ -809,7 +848,7 @@ void Environment_PrintDebugInfo(GlobalContext* globalCtx, Gfx** gfx) {
GfxPrint_SetColor(&printer, 255, 255, 255, 64);
GfxPrint_Printf(&printer, "%02d", (u8)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.skyboxTime) / 60.0f));
- if ((((void)0, gSaveContext.skyboxTime) & 0x1F) >= 0x10 || gTimeIncrement >= 6) {
+ if ((((void)0, gSaveContext.skyboxTime) & 0x1F) >= 0x10 || gTimeSpeed >= 6) {
GfxPrint_Printf(&printer, "%s", ":");
} else {
GfxPrint_Printf(&printer, "%s", " ");
@@ -830,11 +869,8 @@ void Environment_PrintDebugInfo(GlobalContext* globalCtx, Gfx** gfx) {
GfxPrint_Destroy(&printer);
}
-#define TIME_ENTRY_1F (D_8011FB48[envCtx->unk_1F][i])
-#define TIME_ENTRY_20 (D_8011FB48[envCtx->unk_20][i])
-
-void func_80075B44(GlobalContext* globalCtx);
-void func_800766C4(GlobalContext* globalCtx);
+void Environment_PlayTimeBasedSequence(GlobalContext* globalCtx);
+void Environment_UpdateRain(GlobalContext* globalCtx);
void Environment_Update(GlobalContext* globalCtx, EnvironmentContext* envCtx, LightContext* lightCtx,
PauseContext* pauseCtx, MessageContext* msgCtx, GameOverContext* gameOverCtx,
@@ -860,46 +896,54 @@ void Environment_Update(GlobalContext* globalCtx, EnvironmentContext* envCtx, Li
}
}
- func_800766C4(globalCtx); // increments or decrements unk_EE[1] depending on some condition
- func_80075B44(globalCtx); // updates bgm/sfx and other things as the day progresses
+ Environment_UpdateRain(globalCtx);
+ Environment_PlayTimeBasedSequence(globalCtx);
- if (((void)0, gSaveContext.nextDayTime) >= 0xFF00 && ((void)0, gSaveContext.nextDayTime) != 0xFFFF) {
+ if (((void)0, gSaveContext.nextDayTime) >= 0xFF00 && ((void)0, gSaveContext.nextDayTime) != NEXT_TIME_NONE) {
gSaveContext.nextDayTime -= 0x10;
osSyncPrintf("\nnext_zelda_time=[%x]", ((void)0, gSaveContext.nextDayTime));
- if (((void)0, gSaveContext.nextDayTime) == 0xFF0E) {
+ // nextDayTime is used as both a time of day value and a timer to delay sfx when changing days.
+ // When Sun's Song is played, nextDayTime is set to 0x8001 or 0 for day and night respectively.
+ // These values will actually get used as a time of day value.
+ // After this, nextDayTime is assigned magic values of 0xFFFE or 0xFFFD for day and night respectively.
+ // From here, 0x10 is decremented from nextDayTime until it reaches either 0xFF0E or 0xFF0D, effectively
+ // delaying the chicken crow or dog howl sfx by 15 frames when loading the new area.
+
+ if (((void)0, gSaveContext.nextDayTime) == (NEXT_TIME_DAY_SET - (15 * 0x10))) {
func_80078884(NA_SE_EV_CHICKEN_CRY_M);
- gSaveContext.nextDayTime = 0xFFFF;
- } else if (((void)0, gSaveContext.nextDayTime) == 0xFF0D) {
+ gSaveContext.nextDayTime = NEXT_TIME_NONE;
+ } else if (((void)0, gSaveContext.nextDayTime) == (NEXT_TIME_NIGHT_SET - (15 * 0x10))) {
func_800788CC(NA_SE_EV_DOG_CRY_EVENING);
- gSaveContext.nextDayTime = 0xFFFF;
+ gSaveContext.nextDayTime = NEXT_TIME_NONE;
}
}
if ((pauseCtx->state == 0) && (gameOverCtx->state == GAMEOVER_INACTIVE)) {
if (((msgCtx->msgLength == 0) && (msgCtx->msgMode == 0)) || (((void)0, gSaveContext.gameMode) == 3)) {
- if ((envCtx->unk_1A == 0) && !FrameAdvance_IsEnabled(globalCtx) &&
+ if ((envCtx->changeSkyboxTimer == 0) && !FrameAdvance_IsEnabled(globalCtx) &&
(globalCtx->transitionMode == TRANS_MODE_OFF || ((void)0, gSaveContext.gameMode) != 0)) {
- if (IS_DAY || gTimeIncrement >= 0x190) {
- gSaveContext.dayTime += gTimeIncrement;
+ if (IS_DAY || gTimeSpeed >= 400) {
+ gSaveContext.dayTime += gTimeSpeed;
} else {
- gSaveContext.dayTime += gTimeIncrement * 2; // time moves twice as fast at night
+ gSaveContext.dayTime += gTimeSpeed * 2; // time moves twice as fast at night
}
}
}
}
- //! @bug `gTimeIncrement` is unsigned, it can't be negative
- if (((((void)0, gSaveContext.sceneSetupIndex) >= 5 || gTimeIncrement != 0) &&
+ //! @bug `gTimeSpeed` is unsigned, it can't be negative
+ if (((((void)0, gSaveContext.sceneSetupIndex) >= 5 || gTimeSpeed != 0) &&
((void)0, gSaveContext.dayTime) > gSaveContext.skyboxTime) ||
- (((void)0, gSaveContext.dayTime) < 0xAAB || gTimeIncrement < 0)) {
+ (((void)0, gSaveContext.dayTime) < CLOCK_TIME(1, 0) || gTimeSpeed < 0)) {
+
gSaveContext.skyboxTime = ((void)0, gSaveContext.dayTime);
}
time = gSaveContext.dayTime;
- if (time > 0xC000 || time < 0x4555) {
+ if (time > CLOCK_TIME(18, 0) || time < CLOCK_TIME(6, 30)) {
gSaveContext.nightFlag = 1;
} else {
gSaveContext.nightFlag = 0;
@@ -922,54 +966,69 @@ void Environment_Update(GlobalContext* globalCtx, EnvironmentContext* envCtx, Li
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_kankyo.c", 1690);
}
- if ((envCtx->unk_BF != 0xFF) && (envCtx->unk_DC != 2) && (envCtx->unk_BD != envCtx->unk_BF) &&
- (envCtx->unk_D8 >= 1.0f) && (envCtx->unk_BF < 0x20)) {
- envCtx->unk_BE = envCtx->unk_BD;
- envCtx->unk_BD = envCtx->unk_BF;
- envCtx->unk_D8 = 0.0f;
+ if ((envCtx->lightSettingOverride != LIGHT_SETTING_OVERRIDE_NONE) &&
+ (envCtx->lightBlendOverride != LIGHT_BLEND_OVERRIDE_FULL_CONTROL) &&
+ (envCtx->lightSetting != envCtx->lightSettingOverride) && (envCtx->lightBlend >= 1.0f) &&
+ (envCtx->lightSettingOverride <= LIGHT_SETTING_MAX)) {
+
+ envCtx->prevLightSetting = envCtx->lightSetting;
+ envCtx->lightSetting = envCtx->lightSettingOverride;
+ envCtx->lightBlend = 0.0f;
}
- if (envCtx->unk_BF != 0xFE) {
- if (!envCtx->indoors && (envCtx->unk_BF == 0xFF)) {
- for (i = 0; i < ARRAY_COUNT(D_8011FB48[envCtx->unk_1F]); i++) {
- if ((gSaveContext.skyboxTime >= TIME_ENTRY_1F.startTime) &&
- ((gSaveContext.skyboxTime < TIME_ENTRY_1F.endTime) || TIME_ENTRY_1F.endTime == 0xFFFF)) {
+ if (envCtx->lightSettingOverride != LIGHT_SETTING_OVERRIDE_FULL_CONTROL) {
+ if ((envCtx->lightMode == LIGHT_MODE_TIME) &&
+ (envCtx->lightSettingOverride == LIGHT_SETTING_OVERRIDE_NONE)) {
+ for (i = 0; i < ARRAY_COUNT(sTimeBasedLightConfigs[envCtx->lightConfig]); i++) {
+ if ((gSaveContext.skyboxTime >= sTimeBasedLightConfigs[envCtx->lightConfig][i].startTime) &&
+ ((gSaveContext.skyboxTime < sTimeBasedLightConfigs[envCtx->lightConfig][i].endTime) ||
+ sTimeBasedLightConfigs[envCtx->lightConfig][i].endTime == 0xFFFF)) {
u8 blend8[2];
s16 blend16[2];
- sp8C = Environment_LerpWeight(TIME_ENTRY_1F.endTime, TIME_ENTRY_1F.startTime,
+ sp8C = Environment_LerpWeight(sTimeBasedLightConfigs[envCtx->lightConfig][i].endTime,
+ sTimeBasedLightConfigs[envCtx->lightConfig][i].startTime,
((void)0, gSaveContext.skyboxTime));
- D_8011FDCC = TIME_ENTRY_1F.unk_04 & 3;
- D_8011FDD0 = TIME_ENTRY_1F.unk_05 & 3;
- D_8011FDD4 = sp8C;
+ sSandstormColorIndex = sTimeBasedLightConfigs[envCtx->lightConfig][i].lightSetting & 3;
+ sNextSandstormColorIndex = sTimeBasedLightConfigs[envCtx->lightConfig][i].nextLightSetting & 3;
+ sSandstormLerpScale = sp8C;
- if (envCtx->unk_21) {
- sp88 = ((f32)envCtx->unk_24 - envCtx->unk_22) / envCtx->unk_24;
- envCtx->unk_22--;
+ if (envCtx->changeLightEnabled) {
+ sp88 = ((f32)envCtx->changeDuration - envCtx->changeLightTimer) / envCtx->changeDuration;
+ envCtx->changeLightTimer--;
- if (envCtx->unk_22 <= 0) {
- envCtx->unk_21 = 0;
- envCtx->unk_1F = envCtx->unk_20;
+ if (envCtx->changeLightTimer <= 0) {
+ envCtx->changeLightEnabled = false;
+ envCtx->lightConfig = envCtx->changeLightNextConfig;
}
}
for (j = 0; j < 3; j++) {
// blend ambient color
- blend8[0] = LERP(lightSettingsList[TIME_ENTRY_1F.unk_04].ambientColor[j],
- lightSettingsList[TIME_ENTRY_1F.unk_05].ambientColor[j], sp8C);
- blend8[1] = LERP(lightSettingsList[TIME_ENTRY_20.unk_04].ambientColor[j],
- lightSettingsList[TIME_ENTRY_20.unk_05].ambientColor[j], sp8C);
+ blend8[0] =
+ LERP(lightSettingsList[sTimeBasedLightConfigs[envCtx->lightConfig][i].lightSetting]
+ .ambientColor[j],
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->lightConfig][i].nextLightSetting]
+ .ambientColor[j],
+ sp8C);
+ blend8[1] = LERP(
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->changeLightNextConfig][i].lightSetting]
+ .ambientColor[j],
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->changeLightNextConfig][i]
+ .nextLightSetting]
+ .ambientColor[j],
+ sp8C);
*(envCtx->lightSettings.ambientColor + j) = LERP(blend8[0], blend8[1], sp88);
}
// set light1 direction for the sun
envCtx->lightSettings.light1Dir[0] =
- -(Math_SinS(((void)0, gSaveContext.dayTime) - 0x8000) * 120.0f);
+ -(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f);
envCtx->lightSettings.light1Dir[1] =
- Math_CosS(((void)0, gSaveContext.dayTime) - 0x8000) * 120.0f;
+ Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f;
envCtx->lightSettings.light1Dir[2] =
- (Math_CosS(((void)0, gSaveContext.dayTime) - 0x8000) * 20.0f);
+ Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f;
// set light2 direction for the moon
envCtx->lightSettings.light2Dir[0] = -envCtx->lightSettings.light1Dir[0];
@@ -978,126 +1037,173 @@ void Environment_Update(GlobalContext* globalCtx, EnvironmentContext* envCtx, Li
for (j = 0; j < 3; j++) {
// blend light1Color
- blend8[0] = LERP(lightSettingsList[TIME_ENTRY_1F.unk_04].light1Color[j],
- lightSettingsList[TIME_ENTRY_1F.unk_05].light1Color[j], sp8C);
- blend8[1] = LERP(lightSettingsList[TIME_ENTRY_20.unk_04].light1Color[j],
- lightSettingsList[TIME_ENTRY_20.unk_05].light1Color[j], sp8C);
+ blend8[0] =
+ LERP(lightSettingsList[sTimeBasedLightConfigs[envCtx->lightConfig][i].lightSetting]
+ .light1Color[j],
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->lightConfig][i].nextLightSetting]
+ .light1Color[j],
+ sp8C);
+ blend8[1] = LERP(
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->changeLightNextConfig][i].lightSetting]
+ .light1Color[j],
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->changeLightNextConfig][i]
+ .nextLightSetting]
+ .light1Color[j],
+ sp8C);
*(envCtx->lightSettings.light1Color + j) = LERP(blend8[0], blend8[1], sp88);
// blend light2Color
- blend8[0] = LERP(lightSettingsList[TIME_ENTRY_1F.unk_04].light2Color[j],
- lightSettingsList[TIME_ENTRY_1F.unk_05].light2Color[j], sp8C);
- blend8[1] = LERP(lightSettingsList[TIME_ENTRY_20.unk_04].light2Color[j],
- lightSettingsList[TIME_ENTRY_20.unk_05].light2Color[j], sp8C);
+ blend8[0] =
+ LERP(lightSettingsList[sTimeBasedLightConfigs[envCtx->lightConfig][i].lightSetting]
+ .light2Color[j],
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->lightConfig][i].nextLightSetting]
+ .light2Color[j],
+ sp8C);
+ blend8[1] = LERP(
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->changeLightNextConfig][i].lightSetting]
+ .light2Color[j],
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->changeLightNextConfig][i]
+ .nextLightSetting]
+ .light2Color[j],
+ sp8C);
*(envCtx->lightSettings.light2Color + j) = LERP(blend8[0], blend8[1], sp88);
}
// blend fogColor
for (j = 0; j < 3; j++) {
- blend8[0] = LERP(lightSettingsList[TIME_ENTRY_1F.unk_04].fogColor[j],
- lightSettingsList[TIME_ENTRY_1F.unk_05].fogColor[j], sp8C);
- blend8[1] = LERP(lightSettingsList[TIME_ENTRY_20.unk_04].fogColor[j],
- lightSettingsList[TIME_ENTRY_20.unk_05].fogColor[j], sp8C);
+ blend8[0] =
+ LERP(lightSettingsList[sTimeBasedLightConfigs[envCtx->lightConfig][i].lightSetting]
+ .fogColor[j],
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->lightConfig][i].nextLightSetting]
+ .fogColor[j],
+ sp8C);
+ blend8[1] = LERP(
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->changeLightNextConfig][i].lightSetting]
+ .fogColor[j],
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->changeLightNextConfig][i]
+ .nextLightSetting]
+ .fogColor[j],
+ sp8C);
*(envCtx->lightSettings.fogColor + j) = LERP(blend8[0], blend8[1], sp88);
}
- blend16[0] = LERP16((lightSettingsList[TIME_ENTRY_1F.unk_04].fogNear & 0x3FF),
- (lightSettingsList[TIME_ENTRY_1F.unk_05].fogNear & 0x3FF), sp8C);
- blend16[1] = LERP16(lightSettingsList[TIME_ENTRY_20.unk_04].fogNear & 0x3FF,
- lightSettingsList[TIME_ENTRY_20.unk_05].fogNear & 0x3FF, sp8C);
+ blend16[0] = LERP16(
+ (lightSettingsList[sTimeBasedLightConfigs[envCtx->lightConfig][i].lightSetting].fogNear &
+ 0x3FF),
+ (lightSettingsList[sTimeBasedLightConfigs[envCtx->lightConfig][i].nextLightSetting]
+ .fogNear &
+ 0x3FF),
+ sp8C);
+ blend16[1] = LERP16(
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->changeLightNextConfig][i].lightSetting]
+ .fogNear &
+ 0x3FF,
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->changeLightNextConfig][i].nextLightSetting]
+ .fogNear &
+ 0x3FF,
+ sp8C);
envCtx->lightSettings.fogNear = LERP16(blend16[0], blend16[1], sp88);
- blend16[0] = LERP16(lightSettingsList[TIME_ENTRY_1F.unk_04].fogFar,
- lightSettingsList[TIME_ENTRY_1F.unk_05].fogFar, sp8C);
- blend16[1] = LERP16(lightSettingsList[TIME_ENTRY_20.unk_04].fogFar,
- lightSettingsList[TIME_ENTRY_20.unk_05].fogFar, sp8C);
+ blend16[0] = LERP16(
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->lightConfig][i].lightSetting].fogFar,
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->lightConfig][i].nextLightSetting].fogFar,
+ sp8C);
+ blend16[1] = LERP16(
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->changeLightNextConfig][i].lightSetting]
+ .fogFar,
+ lightSettingsList[sTimeBasedLightConfigs[envCtx->changeLightNextConfig][i].nextLightSetting]
+ .fogFar,
+ sp8C);
envCtx->lightSettings.fogFar = LERP16(blend16[0], blend16[1], sp88);
- if (TIME_ENTRY_20.unk_05 >= envCtx->numLightSettings) {
+ if (sTimeBasedLightConfigs[envCtx->changeLightNextConfig][i].nextLightSetting >=
+ envCtx->numLightSettings) {
// "The color palette setting seems to be wrong!"
osSyncPrintf(VT_COL(RED, WHITE) "\nカラーパレットの設定がおかしいようです!" VT_RST);
// "Palette setting = [] Last palette number = []"
osSyncPrintf(VT_COL(RED, WHITE) "\n設定パレット=[%d] 最後パレット番号=[%d]\n" VT_RST,
- TIME_ENTRY_20.unk_05, envCtx->numLightSettings - 1);
+ sTimeBasedLightConfigs[envCtx->changeLightNextConfig][i].nextLightSetting,
+ envCtx->numLightSettings - 1);
}
break;
}
}
} else {
- if (!envCtx->blendIndoorLights) {
+ if (!envCtx->lightBlendEnabled) {
for (i = 0; i < 3; i++) {
- envCtx->lightSettings.ambientColor[i] = lightSettingsList[envCtx->unk_BD].ambientColor[i];
- envCtx->lightSettings.light1Dir[i] = lightSettingsList[envCtx->unk_BD].light1Dir[i];
- envCtx->lightSettings.light1Color[i] = lightSettingsList[envCtx->unk_BD].light1Color[i];
- envCtx->lightSettings.light2Dir[i] = lightSettingsList[envCtx->unk_BD].light2Dir[i];
- envCtx->lightSettings.light2Color[i] = lightSettingsList[envCtx->unk_BD].light2Color[i];
- envCtx->lightSettings.fogColor[i] = lightSettingsList[envCtx->unk_BD].fogColor[i];
+ envCtx->lightSettings.ambientColor[i] = lightSettingsList[envCtx->lightSetting].ambientColor[i];
+ envCtx->lightSettings.light1Dir[i] = lightSettingsList[envCtx->lightSetting].light1Dir[i];
+ envCtx->lightSettings.light1Color[i] = lightSettingsList[envCtx->lightSetting].light1Color[i];
+ envCtx->lightSettings.light2Dir[i] = lightSettingsList[envCtx->lightSetting].light2Dir[i];
+ envCtx->lightSettings.light2Color[i] = lightSettingsList[envCtx->lightSetting].light2Color[i];
+ envCtx->lightSettings.fogColor[i] = lightSettingsList[envCtx->lightSetting].fogColor[i];
}
- envCtx->lightSettings.fogNear = lightSettingsList[envCtx->unk_BD].fogNear & 0x3FF;
- envCtx->lightSettings.fogFar = lightSettingsList[envCtx->unk_BD].fogFar;
- envCtx->unk_D8 = 1.0f;
+ envCtx->lightSettings.fogNear = lightSettingsList[envCtx->lightSetting].fogNear & 0x3FF;
+ envCtx->lightSettings.fogFar = lightSettingsList[envCtx->lightSetting].fogFar;
+ envCtx->lightBlend = 1.0f;
} else {
- u8 blendRate = (lightSettingsList[envCtx->unk_BD].fogNear >> 0xA) * 4;
+ u8 blendRate = (lightSettingsList[envCtx->lightSetting].fogNear >> 0xA) * 4;
if (blendRate == 0) {
blendRate++;
}
- if (envCtx->unk_D6 != 0xFFFF) {
- blendRate = envCtx->unk_D6;
+ if (envCtx->lightBlendRateOverride != LIGHT_BLENDRATE_OVERRIDE_NONE) {
+ blendRate = envCtx->lightBlendRateOverride;
}
- if (envCtx->unk_DC == 0) {
- envCtx->unk_D8 += blendRate / 255.0f;
+ if (envCtx->lightBlendOverride == LIGHT_BLEND_OVERRIDE_NONE) {
+ envCtx->lightBlend += blendRate / 255.0f;
}
- if (envCtx->unk_D8 > 1.0f) {
- envCtx->unk_D8 = 1.0f;
+ if (envCtx->lightBlend > 1.0f) {
+ envCtx->lightBlend = 1.0f;
}
for (i = 0; i < 3; i++) {
envCtx->lightSettings.ambientColor[i] =
- LERP(lightSettingsList[envCtx->unk_BE].ambientColor[i],
- lightSettingsList[envCtx->unk_BD].ambientColor[i], envCtx->unk_D8);
+ LERP(lightSettingsList[envCtx->prevLightSetting].ambientColor[i],
+ lightSettingsList[envCtx->lightSetting].ambientColor[i], envCtx->lightBlend);
envCtx->lightSettings.light1Dir[i] =
- LERP16(lightSettingsList[envCtx->unk_BE].light1Dir[i],
- lightSettingsList[envCtx->unk_BD].light1Dir[i], envCtx->unk_D8);
+ LERP16(lightSettingsList[envCtx->prevLightSetting].light1Dir[i],
+ lightSettingsList[envCtx->lightSetting].light1Dir[i], envCtx->lightBlend);
envCtx->lightSettings.light1Color[i] =
- LERP(lightSettingsList[envCtx->unk_BE].light1Color[i],
- lightSettingsList[envCtx->unk_BD].light1Color[i], envCtx->unk_D8);
+ LERP(lightSettingsList[envCtx->prevLightSetting].light1Color[i],
+ lightSettingsList[envCtx->lightSetting].light1Color[i], envCtx->lightBlend);
envCtx->lightSettings.light2Dir[i] =
- LERP16(lightSettingsList[envCtx->unk_BE].light2Dir[i],
- lightSettingsList[envCtx->unk_BD].light2Dir[i], envCtx->unk_D8);
+ LERP16(lightSettingsList[envCtx->prevLightSetting].light2Dir[i],
+ lightSettingsList[envCtx->lightSetting].light2Dir[i], envCtx->lightBlend);
envCtx->lightSettings.light2Color[i] =
- LERP(lightSettingsList[envCtx->unk_BE].light2Color[i],
- lightSettingsList[envCtx->unk_BD].light2Color[i], envCtx->unk_D8);
+ LERP(lightSettingsList[envCtx->prevLightSetting].light2Color[i],
+ lightSettingsList[envCtx->lightSetting].light2Color[i], envCtx->lightBlend);
envCtx->lightSettings.fogColor[i] =
- LERP(lightSettingsList[envCtx->unk_BE].fogColor[i],
- lightSettingsList[envCtx->unk_BD].fogColor[i], envCtx->unk_D8);
+ LERP(lightSettingsList[envCtx->prevLightSetting].fogColor[i],
+ lightSettingsList[envCtx->lightSetting].fogColor[i], envCtx->lightBlend);
}
envCtx->lightSettings.fogNear =
- LERP16(lightSettingsList[envCtx->unk_BE].fogNear & 0x3FF,
- lightSettingsList[envCtx->unk_BD].fogNear & 0x3FF, envCtx->unk_D8);
- envCtx->lightSettings.fogFar = LERP16(lightSettingsList[envCtx->unk_BE].fogFar,
- lightSettingsList[envCtx->unk_BD].fogFar, envCtx->unk_D8);
+ LERP16(lightSettingsList[envCtx->prevLightSetting].fogNear & 0x3FF,
+ lightSettingsList[envCtx->lightSetting].fogNear & 0x3FF, envCtx->lightBlend);
+ envCtx->lightSettings.fogFar =
+ LERP16(lightSettingsList[envCtx->prevLightSetting].fogFar,
+ lightSettingsList[envCtx->lightSetting].fogFar, envCtx->lightBlend);
}
- if (envCtx->unk_BD >= envCtx->numLightSettings) {
+ if (envCtx->lightSetting >= envCtx->numLightSettings) {
// "The color palette seems to be wrong!"
osSyncPrintf("\n" VT_FGCOL(RED) "カラーパレットがおかしいようです!");
// "Palette setting = [] Last palette number = []"
- osSyncPrintf("\n" VT_FGCOL(YELLOW) "設定パレット=[%d] パレット数=[%d]\n" VT_RST, envCtx->unk_BD,
- envCtx->numLightSettings);
+ osSyncPrintf("\n" VT_FGCOL(YELLOW) "設定パレット=[%d] パレット数=[%d]\n" VT_RST,
+ envCtx->lightSetting, envCtx->numLightSettings);
}
}
}
- envCtx->blendIndoorLights = true;
+ envCtx->lightBlendEnabled = true;
// Apply lighting adjustments
for (i = 0; i < 3; i++) {
@@ -1266,16 +1372,19 @@ void Environment_DrawSunAndMoon(GlobalContext* globalCtx) {
if (globalCtx->csCtx.state != 0) {
Math_SmoothStepToF(&globalCtx->envCtx.sunPos.x,
- -(Math_SinS(((void)0, gSaveContext.dayTime) - 0x8000) * 120.0f) * 25.0f, 1.0f, 0.8f, 0.8f);
+ -(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f, 1.0f,
+ 0.8f, 0.8f);
Math_SmoothStepToF(&globalCtx->envCtx.sunPos.y,
- (Math_CosS(((void)0, gSaveContext.dayTime) - 0x8000) * 120.0f) * 25.0f, 1.0f, 0.8f, 0.8f);
+ (Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f, 1.0f,
+ 0.8f, 0.8f);
//! @bug This should be z.
Math_SmoothStepToF(&globalCtx->envCtx.sunPos.y,
- (Math_CosS(((void)0, gSaveContext.dayTime) - 0x8000) * 20.0f) * 25.0f, 1.0f, 0.8f, 0.8f);
+ (Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f, 1.0f, 0.8f,
+ 0.8f);
} else {
- globalCtx->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.dayTime) - 0x8000) * 120.0f) * 25.0f;
- globalCtx->envCtx.sunPos.y = +(Math_CosS(((void)0, gSaveContext.dayTime) - 0x8000) * 120.0f) * 25.0f;
- globalCtx->envCtx.sunPos.z = +(Math_CosS(((void)0, gSaveContext.dayTime) - 0x8000) * 20.0f) * 25.0f;
+ globalCtx->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
+ globalCtx->envCtx.sunPos.y = +(Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
+ globalCtx->envCtx.sunPos.z = +(Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
}
if (gSaveContext.entranceIndex != ENTR_SPOT00_0 || ((void)0, gSaveContext.sceneSetupIndex) != 5) {
@@ -1344,17 +1453,24 @@ void Environment_DrawSunAndMoon(GlobalContext* globalCtx) {
void Environment_DrawSunLensFlare(GlobalContext* globalCtx, EnvironmentContext* envCtx, View* view,
GraphicsContext* gfxCtx, Vec3f pos, s32 unused) {
- if ((globalCtx->envCtx.unk_EE[1] == 0) && (globalCtx->envCtx.unk_17 == 0)) {
+ if ((globalCtx->envCtx.precipitation[PRECIP_RAIN_CUR] == 0) && (globalCtx->envCtx.skyboxConfig == 0)) {
Environment_DrawLensFlare(globalCtx, &globalCtx->envCtx, &globalCtx->view, globalCtx->state.gfxCtx, pos, 2000,
- 370, Math_CosS(((void)0, gSaveContext.dayTime) - 0x8000) * 120.0f, 400, 1);
+ 370, Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f, 400,
+ true);
}
}
f32 sLensFlareScales[] = { 23.0f, 12.0f, 7.0f, 5.0f, 3.0f, 10.0f, 6.0f, 2.0f, 3.0f, 1.0f };
+typedef enum {
+ /* 0 */ LENS_FLARE_CIRCLE0,
+ /* 1 */ LENS_FLARE_CIRCLE1,
+ /* 2 */ LENS_FLARE_RING
+} LensFlareType;
+
void Environment_DrawLensFlare(GlobalContext* globalCtx, EnvironmentContext* envCtx, View* view,
GraphicsContext* gfxCtx, Vec3f pos, s32 unused, s16 scale, f32 colorIntensity,
- s16 screenFillAlpha, u8 arg9) {
+ s16 glareStrength, u8 isSun) {
s16 i;
f32 tempX;
f32 tempY;
@@ -1374,15 +1490,15 @@ void Environment_DrawLensFlare(GlobalContext* globalCtx, EnvironmentContext* env
f32 halfPosY;
f32 halfPosZ;
f32 cosAngle;
- f32 pad160;
- f32 unk88Target;
+ s32 pad;
+ f32 lensFlareAlphaScaleTarget;
u32 isOffScreen = false;
f32 alpha;
f32 adjScale;
Vec3f screenPos;
f32 fogInfluence;
f32 temp;
- f32 alphaScale;
+ f32 glareAlphaScale;
Color_RGB8 lensFlareColors[] = {
{ 155, 205, 255 }, // blue
{ 255, 255, 205 }, // yellow
@@ -1438,22 +1554,22 @@ void Environment_DrawLensFlare(GlobalContext* globalCtx, EnvironmentContext* env
cosAngle = (lookDirX * posDirX + lookDirY * posDirY + lookDirZ * posDirZ) /
sqrtf((SQ(lookDirX) + SQ(lookDirY) + SQ(lookDirZ)) * (SQ(posDirX) + SQ(posDirY) + SQ(posDirZ)));
- unk88Target = cosAngle * 3.5f;
- unk88Target = CLAMP_MAX(unk88Target, 1.0f);
+ lensFlareAlphaScaleTarget = cosAngle * 3.5f;
+ lensFlareAlphaScaleTarget = CLAMP_MAX(lensFlareAlphaScaleTarget, 1.0f);
- if (arg9 == 0) {
- unk88Target = cosAngle;
+ if (!isSun) {
+ lensFlareAlphaScaleTarget = cosAngle;
}
if (cosAngle < 0.0f) {
-
+ // don't draw lens flare
} else {
- if (arg9) {
- func_800C016C(globalCtx, &pos, &screenPos);
- D_8015FD7E = (s16)screenPos.x;
- D_8015FD80 = (s16)screenPos.y - 5.0f;
- if (D_8011FB44 != 0xFFFC || screenPos.x < 0.0f || screenPos.y < 0.0f || screenPos.x > SCREEN_WIDTH ||
- screenPos.y > SCREEN_HEIGHT) {
+ if (isSun) {
+ Play_GetScreenPos(globalCtx, &pos, &screenPos);
+ sSunDepthTestX = (s16)screenPos.x;
+ sSunDepthTestY = (s16)screenPos.y - 5.0f;
+ if (sSunScreenDepth != GPACK_ZDZ(G_MAXFBZ, 0) || screenPos.x < 0.0f || screenPos.y < 0.0f ||
+ screenPos.x > SCREEN_WIDTH || screenPos.y > SCREEN_HEIGHT) {
isOffScreen = true;
}
}
@@ -1461,14 +1577,14 @@ void Environment_DrawLensFlare(GlobalContext* globalCtx, EnvironmentContext* env
for (i = 0; i < ARRAY_COUNT(lensFlareTypes); i++) {
Matrix_Translate(pos.x, pos.y, pos.z, MTXMODE_NEW);
- if (arg9) {
+ if (isSun) {
temp = Environment_LerpWeight(60, 15, globalCtx->view.fovy);
}
Matrix_Translate(-posDirX * i * dist, -posDirY * i * dist, -posDirZ * i * dist, MTXMODE_APPLY);
adjScale = sLensFlareScales[i] * cosAngle;
- if (arg9) {
+ if (isSun) {
adjScale *= 0.001 * (scale + 630.0f * temp);
} else {
adjScale *= 0.0001f * scale * (2.0f * dist);
@@ -1490,14 +1606,14 @@ void Environment_DrawLensFlare(GlobalContext* globalCtx, EnvironmentContext* env
if (1) {}
if (!(isOffScreen ^ 0)) {
- Math_SmoothStepToF(&envCtx->unk_88, unk88Target, 0.5f, 0.05f, 0.001f);
+ Math_SmoothStepToF(&envCtx->lensFlareAlphaScale, lensFlareAlphaScaleTarget, 0.5f, 0.05f, 0.001f);
} else {
- Math_SmoothStepToF(&envCtx->unk_88, 0.0f, 0.5f, 0.05f, 0.001f);
+ Math_SmoothStepToF(&envCtx->lensFlareAlphaScale, 0.0f, 0.5f, 0.05f, 0.001f);
}
POLY_XLU_DISP = func_800947AC(POLY_XLU_DISP++);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, lensFlareColors[i].r, lensFlareColors[i].g, lensFlareColors[i].b,
- alpha * envCtx->unk_88);
+ alpha * envCtx->lensFlareAlphaScale);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx, "../z_kankyo.c", 2662),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetCombineLERP(POLY_XLU_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0,
@@ -1517,15 +1633,15 @@ void Environment_DrawLensFlare(GlobalContext* globalCtx, EnvironmentContext* env
}
}
- alphaScale = cosAngle - (1.5f - cosAngle);
+ glareAlphaScale = cosAngle - (1.5f - cosAngle);
- if (screenFillAlpha != 0) {
- if (alphaScale > 0.0f) {
+ if (glareStrength != 0) {
+ if (glareAlphaScale > 0.0f) {
POLY_XLU_DISP = func_800937C0(POLY_XLU_DISP);
alpha = colorIntensity / 10.0f;
alpha = CLAMP_MAX(alpha, 1.0f);
- alpha = alpha * screenFillAlpha;
+ alpha = alpha * glareStrength;
alpha = CLAMP_MIN(alpha, 0.0f);
fogInfluence = (996 - globalCtx->lightCtx.fogNear) / 50.0f;
@@ -1538,19 +1654,19 @@ void Environment_DrawLensFlare(GlobalContext* globalCtx, EnvironmentContext* env
gDPSetColorDither(POLY_XLU_DISP++, G_CD_DISABLE);
if (!(isOffScreen ^ 0)) {
- Math_SmoothStepToF(&envCtx->unk_84, alpha * alphaScale, 0.5f, 50.0f, 0.1f);
+ Math_SmoothStepToF(&envCtx->glareAlpha, alpha * glareAlphaScale, 0.5f, 50.0f, 0.1f);
} else {
- Math_SmoothStepToF(&envCtx->unk_84, 0.0f, 0.5f, 50.0f, 0.1f);
+ Math_SmoothStepToF(&envCtx->glareAlpha, 0.0f, 0.5f, 50.0f, 0.1f);
}
temp = colorIntensity / 120.0f;
temp = CLAMP_MIN(temp, 0.0f);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, (u8)(temp * 75.0f) + 180, (u8)(temp * 155.0f) + 100,
- (u8)envCtx->unk_84);
+ (u8)envCtx->glareAlpha);
gDPFillRectangle(POLY_XLU_DISP++, 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1);
} else {
- envCtx->unk_84 = 0.0f;
+ envCtx->glareAlpha = 0.0f;
}
}
}
@@ -1558,7 +1674,7 @@ void Environment_DrawLensFlare(GlobalContext* globalCtx, EnvironmentContext* env
CLOSE_DISPS(gfxCtx, "../z_kankyo.c", 2750);
}
-f32 func_800746DC(void) {
+f32 Environment_RandCentered(void) {
return Rand_ZeroOne() - 0.5f;
}
@@ -1581,7 +1697,7 @@ void Environment_DrawRain(GlobalContext* globalCtx, View* view, GraphicsContext*
Vec3f windDirection = { 0.0f, 0.0f, 0.0f };
Player* player = GET_PLAYER(globalCtx);
- if (!(globalCtx->cameraPtrs[0]->unk_14C & 0x100) && (globalCtx->envCtx.unk_EE[2] == 0)) {
+ if (!(globalCtx->cameraPtrs[0]->unk_14C & 0x100) && (globalCtx->envCtx.precipitation[PRECIP_SNOW_CUR] == 0)) {
OPEN_DISPS(gfxCtx, "../z_kankyo.c", 2799);
vec.x = view->at.x - view->eye.x;
@@ -1601,14 +1717,14 @@ void Environment_DrawRain(GlobalContext* globalCtx, View* view, GraphicsContext*
x280 = view->eye.x + temp1 * 280.0f;
z280 = view->eye.z + temp3 * 280.0f;
- if (globalCtx->envCtx.unk_EE[1]) {
+ if (globalCtx->envCtx.precipitation[PRECIP_RAIN_CUR]) {
gDPPipeSync(POLY_XLU_DISP++);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 150, 255, 255, 30);
POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20);
}
// draw rain drops
- for (i = 0; i < globalCtx->envCtx.unk_EE[1]; i++) {
+ for (i = 0; i < globalCtx->envCtx.precipitation[PRECIP_RAIN_CUR]; i++) {
temp2 = Rand_ZeroOne();
temp1 = Rand_ZeroOne();
temp3 = Rand_ZeroOne();
@@ -1640,7 +1756,7 @@ void Environment_DrawRain(GlobalContext* globalCtx, View* view, GraphicsContext*
if (player->actor.world.pos.y < view->eye.y) {
u8 materialFlag = false;
- for (i = 0; i < globalCtx->envCtx.unk_EE[1]; i++) {
+ for (i = 0; i < globalCtx->envCtx.precipitation[PRECIP_RAIN_CUR]; i++) {
if (!materialFlag) {
func_80093D84(gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, 155, 155, 155, 0);
@@ -1648,8 +1764,8 @@ void Environment_DrawRain(GlobalContext* globalCtx, View* view, GraphicsContext*
materialFlag++;
}
- Matrix_Translate(func_800746DC() * 280.0f + x280, player->actor.world.pos.y + 2.0f,
- func_800746DC() * 280.0f + z280, MTXMODE_NEW);
+ Matrix_Translate(Environment_RandCentered() * 280.0f + x280, player->actor.world.pos.y + 2.0f,
+ Environment_RandCentered() * 280.0f + z280, MTXMODE_NEW);
if ((LINK_IS_ADULT && ((player->actor.world.pos.y + 2.0f - view->eye.y) > -48.0f)) ||
(!LINK_IS_ADULT && ((player->actor.world.pos.y + 2.0f - view->eye.y) > -30.0f))) {
@@ -1668,16 +1784,16 @@ void Environment_DrawRain(GlobalContext* globalCtx, View* view, GraphicsContext*
}
}
-void func_80074CE8(GlobalContext* globalCtx, u32 arg1) {
- if ((globalCtx->envCtx.unk_BD != arg1) && (globalCtx->envCtx.unk_D8 >= 1.0f) &&
- (globalCtx->envCtx.unk_BF == 0xFF)) {
- if (arg1 > 30) {
- arg1 = 0;
+void Environment_ChangeLightSetting(GlobalContext* globalCtx, u32 lightSetting) {
+ if ((globalCtx->envCtx.lightSetting != lightSetting) && (globalCtx->envCtx.lightBlend >= 1.0f) &&
+ (globalCtx->envCtx.lightSettingOverride == LIGHT_SETTING_OVERRIDE_NONE)) {
+ if (lightSetting >= LIGHT_SETTING_MAX) {
+ lightSetting = 0;
}
- globalCtx->envCtx.unk_D8 = 0.0f;
- globalCtx->envCtx.unk_BE = globalCtx->envCtx.unk_BD;
- globalCtx->envCtx.unk_BD = arg1;
+ globalCtx->envCtx.lightBlend = 0.0f;
+ globalCtx->envCtx.prevLightSetting = globalCtx->envCtx.lightSetting;
+ globalCtx->envCtx.lightSetting = lightSetting;
}
}
@@ -1743,7 +1859,7 @@ void Environment_DrawLightningFlash(GlobalContext* globalCtx, u8 red, u8 green,
}
void Environment_UpdateLightningStrike(GlobalContext* globalCtx) {
- if (globalCtx->envCtx.lightningMode != LIGHTNING_MODE_OFF) {
+ if (globalCtx->envCtx.lightningState != LIGHTNING_OFF) {
switch (gLightningStrike.state) {
case LIGHTNING_STRIKE_WAIT:
// every frame theres a 10% chance of the timer advancing 50 units
@@ -1802,8 +1918,8 @@ void Environment_UpdateLightningStrike(GlobalContext* globalCtx) {
gLightningStrike.state = LIGHTNING_STRIKE_WAIT;
- if (globalCtx->envCtx.lightningMode == LIGHTNING_MODE_LAST) {
- globalCtx->envCtx.lightningMode = LIGHTNING_MODE_OFF;
+ if (globalCtx->envCtx.lightningState == LIGHTNING_LAST) {
+ globalCtx->envCtx.lightningState = LIGHTNING_OFF;
}
}
break;
@@ -1917,7 +2033,7 @@ void Environment_DrawLightning(GlobalContext* globalCtx, s32 unused) {
}
void Environment_PlaySceneSequence(GlobalContext* globalCtx) {
- globalCtx->envCtx.unk_E0 = 0xFF;
+ globalCtx->envCtx.timeSeqState = TIMESEQ_DISABLED;
// both lost woods exits on the bridge from kokiri to hyrule field
if (((void)0, gSaveContext.entranceIndex) == ENTR_SPOT10_8 ||
@@ -1942,23 +2058,26 @@ void Environment_PlaySceneSequence(GlobalContext* globalCtx) {
if (((void)0, gSaveContext.seqId) != globalCtx->sequenceCtx.seqId) {
func_800F5550(globalCtx->sequenceCtx.seqId);
}
- } else if (((void)0, gSaveContext.dayTime) > 0x4AAA && ((void)0, gSaveContext.dayTime) < 0xB71D) {
+ } else if (((void)0, gSaveContext.dayTime) >= CLOCK_TIME(7, 0) &&
+ ((void)0, gSaveContext.dayTime) <= CLOCK_TIME(17, 10)) {
if (((void)0, gSaveContext.seqId) != globalCtx->sequenceCtx.seqId) {
func_800F5550(globalCtx->sequenceCtx.seqId);
}
- globalCtx->envCtx.unk_E0 = 1;
+ globalCtx->envCtx.timeSeqState = TIMESEQ_FADE_DAY_BGM;
} else {
if (((void)0, gSaveContext.natureAmbienceId) != globalCtx->sequenceCtx.natureAmbienceId) {
Audio_PlayNatureAmbienceSequence(globalCtx->sequenceCtx.natureAmbienceId);
}
- if (((void)0, gSaveContext.dayTime) > 0xB71C && ((void)0, gSaveContext.dayTime) < 0xCAAC) {
- globalCtx->envCtx.unk_E0 = 3;
- } else if (((void)0, gSaveContext.dayTime) > 0xCAAC || ((void)0, gSaveContext.dayTime) < 0x4555) {
- globalCtx->envCtx.unk_E0 = 5;
+ if (((void)0, gSaveContext.dayTime) > CLOCK_TIME(17, 10) &&
+ ((void)0, gSaveContext.dayTime) <= CLOCK_TIME(19, 0)) {
+ globalCtx->envCtx.timeSeqState = TIMESEQ_EARLY_NIGHT_CRITTERS;
+ } else if (((void)0, gSaveContext.dayTime) > CLOCK_TIME(19, 0) + 1 ||
+ ((void)0, gSaveContext.dayTime) < CLOCK_TIME(6, 30)) {
+ globalCtx->envCtx.timeSeqState = TIMESEQ_NIGHT_CRITTERS;
} else {
- globalCtx->envCtx.unk_E0 = 7;
+ globalCtx->envCtx.timeSeqState = TIMESEQ_MORNING_CRITTERS;
}
}
@@ -1966,83 +2085,105 @@ void Environment_PlaySceneSequence(GlobalContext* globalCtx) {
osSyncPrintf("\n 強制BGM=[%d]", ((void)0, gSaveContext.forcedSeqId)); // "Forced BGM"
osSyncPrintf("\n BGM=[%d]", globalCtx->sequenceCtx.seqId);
osSyncPrintf("\n エンブ=[%d]", globalCtx->sequenceCtx.natureAmbienceId);
- osSyncPrintf("\n status=[%d]", globalCtx->envCtx.unk_E0);
+ osSyncPrintf("\n status=[%d]", globalCtx->envCtx.timeSeqState);
Audio_SetEnvReverb(globalCtx->roomCtx.curRoom.echo);
}
-// updates bgm/sfx and other things as the day progresses
-void func_80075B44(GlobalContext* globalCtx) {
- switch (globalCtx->envCtx.unk_E0) {
- case 0:
+void Environment_PlayTimeBasedSequence(GlobalContext* globalCtx) {
+ switch (globalCtx->envCtx.timeSeqState) {
+ case TIMESEQ_DAY_BGM:
Audio_SetNatureAmbienceChannelIO(NATURE_CHANNEL_CRITTER_4 << 4 | NATURE_CHANNEL_CRITTER_5,
CHANNEL_IO_PORT_1, 0);
- if (globalCtx->envCtx.unk_EE[0] == 0 && globalCtx->envCtx.unk_F2[0] == 0) {
+
+ if (globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] == 0 &&
+ globalCtx->envCtx.precipitation[PRECIP_SOS_MAX] == 0) {
osSyncPrintf("\n\n\nNa_StartMorinigBgm\n\n");
func_800F5510(globalCtx->sequenceCtx.seqId);
}
- globalCtx->envCtx.unk_E0++;
+
+ globalCtx->envCtx.timeSeqState++;
break;
- case 1:
- if (gSaveContext.dayTime > 0xB71C) {
- if (globalCtx->envCtx.unk_EE[0] == 0 && globalCtx->envCtx.unk_F2[0] == 0) {
+
+ case TIMESEQ_FADE_DAY_BGM:
+ if (gSaveContext.dayTime > CLOCK_TIME(17, 10)) {
+ if (globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] == 0 &&
+ globalCtx->envCtx.precipitation[PRECIP_SOS_MAX] == 0) {
Audio_QueueSeqCmd(0x1 << 28 | SEQ_PLAYER_BGM_MAIN << 24 | 0xF000FF);
}
- globalCtx->envCtx.unk_E0++;
+
+ globalCtx->envCtx.timeSeqState++;
}
break;
- case 2:
- if (gSaveContext.dayTime > 0xC000) {
+
+ case TIMESEQ_NIGHT_BEGIN_SFX:
+ if (gSaveContext.dayTime > CLOCK_TIME(18, 0)) {
func_800788CC(NA_SE_EV_DOG_CRY_EVENING);
- globalCtx->envCtx.unk_E0++;
+ globalCtx->envCtx.timeSeqState++;
}
break;
- case 3:
- if (globalCtx->envCtx.unk_EE[0] == 0 && globalCtx->envCtx.unk_F2[0] == 0) {
+
+ case TIMESEQ_EARLY_NIGHT_CRITTERS:
+ if (globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] == 0 &&
+ globalCtx->envCtx.precipitation[PRECIP_SOS_MAX] == 0) {
Audio_PlayNatureAmbienceSequence(globalCtx->sequenceCtx.natureAmbienceId);
Audio_SetNatureAmbienceChannelIO(NATURE_CHANNEL_CRITTER_0, CHANNEL_IO_PORT_1, 1);
}
- globalCtx->envCtx.unk_E0++;
+
+ globalCtx->envCtx.timeSeqState++;
break;
- case 4:
- if (gSaveContext.dayTime > 0xCAAB) {
- globalCtx->envCtx.unk_E0++;
+
+ case TIMESEQ_NIGHT_DELAY:
+ if (gSaveContext.dayTime > CLOCK_TIME(19, 0)) {
+ globalCtx->envCtx.timeSeqState++;
}
break;
- case 5:
+
+ case TIMESEQ_NIGHT_CRITTERS:
Audio_SetNatureAmbienceChannelIO(NATURE_CHANNEL_CRITTER_0, CHANNEL_IO_PORT_1, 0);
- if (globalCtx->envCtx.unk_EE[0] == 0 && globalCtx->envCtx.unk_F2[0] == 0) {
+
+ if (globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] == 0 &&
+ globalCtx->envCtx.precipitation[PRECIP_SOS_MAX] == 0) {
Audio_SetNatureAmbienceChannelIO(NATURE_CHANNEL_CRITTER_1 << 4 | NATURE_CHANNEL_CRITTER_3,
CHANNEL_IO_PORT_1, 1);
}
- globalCtx->envCtx.unk_E0++;
+
+ globalCtx->envCtx.timeSeqState++;
break;
- case 6:
- if ((gSaveContext.dayTime < 0xCAAC) && (gSaveContext.dayTime > 0x4555)) {
+
+ case TIMESEQ_DAY_BEGIN_SFX:
+ if ((gSaveContext.dayTime <= CLOCK_TIME(19, 0)) && (gSaveContext.dayTime > CLOCK_TIME(6, 30))) {
gSaveContext.totalDays++;
gSaveContext.bgsDayCount++;
gSaveContext.dogIsLost = true;
func_80078884(NA_SE_EV_CHICKEN_CRY_M);
+
if ((Inventory_ReplaceItem(globalCtx, ITEM_WEIRD_EGG, ITEM_CHICKEN) ||
Inventory_ReplaceItem(globalCtx, ITEM_POCKET_EGG, ITEM_POCKET_CUCCO)) &&
globalCtx->csCtx.state == 0 && !Player_InCsMode(globalCtx)) {
Message_StartTextbox(globalCtx, 0x3066, NULL);
}
- globalCtx->envCtx.unk_E0++;
+
+ globalCtx->envCtx.timeSeqState++;
}
break;
- case 7:
+
+ case TIMESEQ_MORNING_CRITTERS:
Audio_SetNatureAmbienceChannelIO(NATURE_CHANNEL_CRITTER_1 << 4 | NATURE_CHANNEL_CRITTER_3,
CHANNEL_IO_PORT_1, 0);
- if (globalCtx->envCtx.unk_EE[0] == 0 && globalCtx->envCtx.unk_F2[0] == 0) {
+
+ if (globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] == 0 &&
+ globalCtx->envCtx.precipitation[PRECIP_SOS_MAX] == 0) {
Audio_SetNatureAmbienceChannelIO(NATURE_CHANNEL_CRITTER_4 << 4 | NATURE_CHANNEL_CRITTER_5,
CHANNEL_IO_PORT_1, 1);
}
- globalCtx->envCtx.unk_E0++;
+
+ globalCtx->envCtx.timeSeqState++;
break;
- case 8:
- if (gSaveContext.dayTime > 0x4AAB) {
- globalCtx->envCtx.unk_E0 = 0;
+
+ case TIMESEQ_DAY_DELAY:
+ if (gSaveContext.dayTime > CLOCK_TIME(7, 0)) {
+ globalCtx->envCtx.timeSeqState = 0;
}
break;
}
@@ -2057,8 +2198,8 @@ void Environment_DrawCustomLensFlare(GlobalContext* globalCtx) {
pos.z = gCustomLensFlarePos.z;
Environment_DrawLensFlare(globalCtx, &globalCtx->envCtx, &globalCtx->view, globalCtx->state.gfxCtx, pos,
- gLensFlareUnused, gLensFlareScale, gLensFlareColorIntensity,
- gLensFlareScreenFillAlpha, 0);
+ gLensFlareUnused, gLensFlareScale, gLensFlareColorIntensity, gLensFlareGlareStrength,
+ false);
}
}
@@ -2161,14 +2302,14 @@ void Environment_FadeOutGameOverLights(GlobalContext* globalCtx) {
}
}
-void func_800766C4(GlobalContext* globalCtx) {
- u8 max = MAX(globalCtx->envCtx.unk_EE[0], globalCtx->envCtx.unk_F2[0]);
+void Environment_UpdateRain(GlobalContext* globalCtx) {
+ u8 max = MAX(globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX], globalCtx->envCtx.precipitation[PRECIP_SOS_MAX]);
- if (globalCtx->envCtx.unk_EE[1] != max && ((globalCtx->state.frames % 8) == 0)) {
- if (globalCtx->envCtx.unk_EE[1] < max) {
- globalCtx->envCtx.unk_EE[1] += 2;
+ if (globalCtx->envCtx.precipitation[PRECIP_RAIN_CUR] != max && ((globalCtx->state.frames % 8) == 0)) {
+ if (globalCtx->envCtx.precipitation[PRECIP_RAIN_CUR] < max) {
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_CUR] += 2;
} else {
- globalCtx->envCtx.unk_EE[1] -= 2;
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_CUR] -= 2;
}
}
}
@@ -2252,7 +2393,7 @@ void Environment_DrawSandstorm(GlobalContext* globalCtx, u8 sandstormState) {
case SANDSTORM_UNFILL:
envA1 = 128;
if (globalCtx->envCtx.sandstormEnvA > 128) {
- primA1 = 0xFF;
+ primA1 = 255;
} else {
primA1 = globalCtx->state.frames % 128;
if (primA1 > 64) {
@@ -2282,6 +2423,7 @@ void Environment_DrawSandstorm(GlobalContext* globalCtx, u8 sandstormState) {
} else {
primA = primA + 9;
}
+
if (ABS(envA - envA1) < 9) {
envA = envA1;
} else if (envA1 < envA) {
@@ -2289,47 +2431,58 @@ void Environment_DrawSandstorm(GlobalContext* globalCtx, u8 sandstormState) {
} else {
envA = envA + 9;
}
+
globalCtx->envCtx.sandstormPrimA = primA;
globalCtx->envCtx.sandstormEnvA = envA;
sp98 = (512.0f - (primA + envA)) * (3.0f / 128.0f);
+
if (sp98 > 6.0f) {
sp98 = 6.0f;
}
- if (globalCtx->envCtx.indoors || (globalCtx->envCtx.unk_BF != 0xFF)) {
+
+ if ((globalCtx->envCtx.lightMode != LIGHT_MODE_TIME) ||
+ (globalCtx->envCtx.lightSettingOverride != LIGHT_SETTING_OVERRIDE_NONE)) {
primColor.r = sSandstormPrimColors[1].r;
primColor.g = sSandstormPrimColors[1].g;
primColor.b = sSandstormPrimColors[1].b;
envColor.r = sSandstormEnvColors[1].r;
envColor.g = sSandstormEnvColors[1].g;
envColor.b = sSandstormEnvColors[1].b;
- } else if (D_8011FDCC == D_8011FDD0) {
- primColor.r = sSandstormPrimColors[D_8011FDCC].r;
- primColor.g = sSandstormPrimColors[D_8011FDCC].g;
- primColor.b = sSandstormPrimColors[D_8011FDCC].b;
- envColor.r = sSandstormEnvColors[D_8011FDCC].r;
- envColor.g = sSandstormEnvColors[D_8011FDCC].g;
- envColor.b = sSandstormEnvColors[D_8011FDCC].b;
+ } else if (sSandstormColorIndex == sNextSandstormColorIndex) {
+ primColor.r = sSandstormPrimColors[sSandstormColorIndex].r;
+ primColor.g = sSandstormPrimColors[sSandstormColorIndex].g;
+ primColor.b = sSandstormPrimColors[sSandstormColorIndex].b;
+ envColor.r = sSandstormEnvColors[sSandstormColorIndex].r;
+ envColor.g = sSandstormEnvColors[sSandstormColorIndex].g;
+ envColor.b = sSandstormEnvColors[sSandstormColorIndex].b;
} else {
- primColor.r = (s32)F32_LERP(sSandstormPrimColors[D_8011FDCC].r, sSandstormPrimColors[D_8011FDD0].r, D_8011FDD4);
- primColor.g = (s32)F32_LERP(sSandstormPrimColors[D_8011FDCC].g, sSandstormPrimColors[D_8011FDD0].g, D_8011FDD4);
- primColor.b = (s32)F32_LERP(sSandstormPrimColors[D_8011FDCC].b, sSandstormPrimColors[D_8011FDD0].b, D_8011FDD4);
- envColor.r = (s32)F32_LERP(sSandstormEnvColors[D_8011FDCC].r, sSandstormEnvColors[D_8011FDD0].r, D_8011FDD4);
- envColor.g = (s32)F32_LERP(sSandstormEnvColors[D_8011FDCC].g, sSandstormEnvColors[D_8011FDD0].g, D_8011FDD4);
- envColor.b = (s32)F32_LERP(sSandstormEnvColors[D_8011FDCC].b, sSandstormEnvColors[D_8011FDD0].b, D_8011FDD4);
+ primColor.r = (s32)F32_LERP(sSandstormPrimColors[sSandstormColorIndex].r,
+ sSandstormPrimColors[sNextSandstormColorIndex].r, sSandstormLerpScale);
+ primColor.g = (s32)F32_LERP(sSandstormPrimColors[sSandstormColorIndex].g,
+ sSandstormPrimColors[sNextSandstormColorIndex].g, sSandstormLerpScale);
+ primColor.b = (s32)F32_LERP(sSandstormPrimColors[sSandstormColorIndex].b,
+ sSandstormPrimColors[sNextSandstormColorIndex].b, sSandstormLerpScale);
+ envColor.r = (s32)F32_LERP(sSandstormEnvColors[sSandstormColorIndex].r,
+ sSandstormEnvColors[sNextSandstormColorIndex].r, sSandstormLerpScale);
+ envColor.g = (s32)F32_LERP(sSandstormEnvColors[sSandstormColorIndex].g,
+ sSandstormEnvColors[sNextSandstormColorIndex].g, sSandstormLerpScale);
+ envColor.b = (s32)F32_LERP(sSandstormEnvColors[sSandstormColorIndex].b,
+ sSandstormEnvColors[sNextSandstormColorIndex].b, sSandstormLerpScale);
}
envColor.r = ((envColor.r * sp98) + ((6.0f - sp98) * primColor.r)) * (1.0f / 6.0f);
envColor.g = ((envColor.g * sp98) + ((6.0f - sp98) * primColor.g)) * (1.0f / 6.0f);
envColor.b = ((envColor.b * sp98) + ((6.0f - sp98) * primColor.b)) * (1.0f / 6.0f);
- sp96 = (s32)(D_8015FDB0 * (11.0f / 6.0f));
- sp94 = (s32)(D_8015FDB0 * (9.0f / 6.0f));
- sp92 = (s32)(D_8015FDB0 * (6.0f / 6.0f));
+ sp96 = (s32)(sSandstormScroll * (11.0f / 6.0f));
+ sp94 = (s32)(sSandstormScroll * (9.0f / 6.0f));
+ sp92 = (s32)(sSandstormScroll * (6.0f / 6.0f));
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_kankyo.c", 4044);
POLY_XLU_DISP = func_80093F34(POLY_XLU_DISP);
+
gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_NOISE);
gDPSetColorDither(POLY_XLU_DISP++, G_CD_NOISE);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, primColor.r, primColor.g, primColor.b, globalCtx->envCtx.sandstormPrimA);
@@ -2342,7 +2495,7 @@ void Environment_DrawSandstorm(GlobalContext* globalCtx, u8 sandstormState) {
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_kankyo.c", 4068);
- D_8015FDB0 += (s32)sp98;
+ sSandstormScroll += (s32)sp98;
}
void Environment_AdjustLights(GlobalContext* globalCtx, f32 arg1, f32 arg2, f32 arg3, f32 arg4) {
@@ -2354,6 +2507,7 @@ void Environment_AdjustLights(GlobalContext* globalCtx, f32 arg1, f32 arg2, f32
arg1 = CLAMP_MAX(arg1, 1.0f);
temp = arg1 - arg3;
+
if (arg1 < arg3) {
temp = 0.0f;
}
@@ -2434,7 +2588,7 @@ void Environment_StopStormNatureAmbience(GlobalContext* globalCtx) {
}
void Environment_WarpSongLeave(GlobalContext* globalCtx) {
- gWeatherMode = 0;
+ gWeatherMode = WEATHER_MODE_CLEAR;
gSaveContext.cutsceneIndex = 0;
gSaveContext.respawnFlag = -3;
globalCtx->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_RETURN].entranceIndex;
diff --git a/src/code/z_lights.c b/src/code/z_lights.c
index 584f7b3e1..e4f690b53 100644
--- a/src/code/z_lights.c
+++ b/src/code/z_lights.c
@@ -347,7 +347,7 @@ void Lights_GlowCheck(GlobalContext* globalCtx) {
if (1) {}
if (1) {}
- if (wZ < (func_8006F0A0(zBuf) >> 3)) {
+ if (wZ < (Environment_ZBufValToFixedPoint(zBuf) >> 3)) {
params->drawGlow = true;
}
}
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index 9b6a48e66..62c8314f8 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -3829,7 +3829,7 @@ void Interface_Draw(GlobalContext* globalCtx) {
void Interface_Update(GlobalContext* globalCtx) {
static u8 D_80125B60 = false;
- static s16 sPrevTimeIncrement = 0;
+ static s16 sPrevTimeSpeed = 0;
MessageContext* msgCtx = &globalCtx->msgCtx;
InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx;
Player* player = GET_PLAYER(globalCtx);
@@ -4152,35 +4152,35 @@ void Interface_Update(GlobalContext* globalCtx) {
}
// handle suns song in areas where time moves
- if (globalCtx->envCtx.timeIncrement != 0) {
+ if (globalCtx->envCtx.sceneTimeSpeed != 0) {
if (gSaveContext.sunsSongState != SUNSSONG_SPEED_TIME) {
D_80125B60 = false;
- if ((gSaveContext.dayTime >= 0x4555) && (gSaveContext.dayTime <= 0xC001)) {
+ if ((gSaveContext.dayTime >= CLOCK_TIME(6, 30)) && (gSaveContext.dayTime <= CLOCK_TIME(18, 0) + 1)) {
D_80125B60 = true;
}
gSaveContext.sunsSongState = SUNSSONG_SPEED_TIME;
- sPrevTimeIncrement = gTimeIncrement;
- gTimeIncrement = 400;
+ sPrevTimeSpeed = gTimeSpeed;
+ gTimeSpeed = 400;
} else if (!D_80125B60) {
- if ((gSaveContext.dayTime >= 0x4555) && (gSaveContext.dayTime <= 0xC001)) {
+ if ((gSaveContext.dayTime >= CLOCK_TIME(6, 30)) && (gSaveContext.dayTime <= CLOCK_TIME(18, 0) + 1)) {
gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
- gTimeIncrement = sPrevTimeIncrement;
+ gTimeSpeed = sPrevTimeSpeed;
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_04;
}
- } else if (gSaveContext.dayTime > 0xC001) {
+ } else if (gSaveContext.dayTime > CLOCK_TIME(18, 0) + 1) {
gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
- gTimeIncrement = sPrevTimeIncrement;
+ gTimeSpeed = sPrevTimeSpeed;
globalCtx->msgCtx.ocarinaMode = OCARINA_MODE_04;
}
} else if ((globalCtx->roomCtx.curRoom.unk_03 != 1) && (interfaceCtx->restrictions.sunsSong != 3)) {
- if ((gSaveContext.dayTime >= 0x4555) && (gSaveContext.dayTime < 0xC001)) {
- gSaveContext.nextDayTime = 0;
+ if ((gSaveContext.dayTime >= CLOCK_TIME(6, 30)) && (gSaveContext.dayTime < CLOCK_TIME(18, 0) + 1)) {
+ gSaveContext.nextDayTime = NEXT_TIME_NIGHT;
globalCtx->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
globalCtx->unk_11DE9 = true;
} else {
- gSaveContext.nextDayTime = 0x8001;
+ gSaveContext.nextDayTime = NEXT_TIME_DAY;
globalCtx->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
globalCtx->unk_11DE9 = true;
diff --git a/src/code/z_play.c b/src/code/z_play.c
index b0993bec0..8888819dd 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -256,12 +256,12 @@ void Play_Init(GameState* thisx) {
gSaveContext.cutsceneIndex = 0;
}
- if (gSaveContext.nextDayTime != 0xFFFF) {
+ if (gSaveContext.nextDayTime != NEXT_TIME_NONE) {
gSaveContext.dayTime = gSaveContext.nextDayTime;
gSaveContext.skyboxTime = gSaveContext.nextDayTime;
}
- if (gSaveContext.dayTime > 0xC000 || gSaveContext.dayTime < 0x4555) {
+ if (gSaveContext.dayTime > CLOCK_TIME(18, 0) || gSaveContext.dayTime < CLOCK_TIME(6, 30)) {
gSaveContext.nightFlag = 1;
} else {
gSaveContext.nightFlag = 0;
@@ -315,8 +315,8 @@ void Play_Init(GameState* thisx) {
KaleidoScopeCall_Init(this);
func_801109B0(this);
- if (gSaveContext.nextDayTime != 0xFFFF) {
- if (gSaveContext.nextDayTime == 0x8001) {
+ if (gSaveContext.nextDayTime != NEXT_TIME_NONE) {
+ if (gSaveContext.nextDayTime == NEXT_TIME_DAY) {
gSaveContext.totalDays++;
gSaveContext.bgsDayCount++;
gSaveContext.dogIsLost = true;
@@ -324,9 +324,9 @@ void Play_Init(GameState* thisx) {
Inventory_ReplaceItem(this, ITEM_POCKET_EGG, ITEM_POCKET_CUCCO)) {
Message_StartTextbox(this, 0x3066, NULL);
}
- gSaveContext.nextDayTime = 0xFFFE;
+ gSaveContext.nextDayTime = NEXT_TIME_DAY_SET;
} else {
- gSaveContext.nextDayTime = 0xFFFD;
+ gSaveContext.nextDayTime = NEXT_TIME_NIGHT_SET;
}
}
@@ -1256,7 +1256,7 @@ void Play_Draw(GlobalContext* this) {
}
}
- if (this->envCtx.unk_EE[1] != 0) {
+ if (this->envCtx.precipitation[PRECIP_RAIN_CUR] != 0) {
Environment_DrawRain(this, &this->view, gfxCtx);
}
@@ -1515,17 +1515,17 @@ void Play_SpawnScene(GlobalContext* this, s32 sceneNum, s32 spawn) {
osSyncPrintf("ROOM SIZE=%fK\n", func_80096FE8(this, &this->roomCtx) / 1024.0f);
}
-void func_800C016C(GlobalContext* this, Vec3f* src, Vec3f* dest) {
- f32 temp;
+void Play_GetScreenPos(GlobalContext* this, Vec3f* src, Vec3f* dest) {
+ f32 w;
Matrix_Mult(&this->viewProjectionMtxF, MTXMODE_NEW);
Matrix_MultVec3f(src, dest);
- temp = this->viewProjectionMtxF.ww + (this->viewProjectionMtxF.wx * src->x + this->viewProjectionMtxF.wy * src->y +
- this->viewProjectionMtxF.wz * src->z);
+ w = this->viewProjectionMtxF.ww + (this->viewProjectionMtxF.wx * src->x + this->viewProjectionMtxF.wy * src->y +
+ this->viewProjectionMtxF.wz * src->z);
- dest->x = 160.0f + ((dest->x / temp) * 160.0f);
- dest->y = 120.0f - ((dest->y / temp) * 120.0f);
+ dest->x = (SCREEN_WIDTH / 2) + ((dest->x / w) * (SCREEN_WIDTH / 2));
+ dest->y = (SCREEN_HEIGHT / 2) - ((dest->y / w) * (SCREEN_HEIGHT / 2));
}
s16 Play_CreateSubCamera(GlobalContext* this) {
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index 69ade19cd..67701c5bf 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -344,8 +344,8 @@ void func_80098CC8(GlobalContext* globalCtx, SceneCmd* cmd) {
// Scene Command 0x11: Skybox Settings
void func_80098D1C(GlobalContext* globalCtx, SceneCmd* cmd) {
globalCtx->skyboxId = cmd->skyboxSettings.skyboxId;
- globalCtx->envCtx.unk_17 = globalCtx->envCtx.unk_18 = cmd->skyboxSettings.unk_05;
- globalCtx->envCtx.indoors = cmd->skyboxSettings.unk_06;
+ globalCtx->envCtx.skyboxConfig = globalCtx->envCtx.changeSkyboxNextConfig = cmd->skyboxSettings.unk_05;
+ globalCtx->envCtx.lightMode = cmd->skyboxSettings.unk_06;
}
// Scene Command 0x12: Skybox Disables
@@ -362,30 +362,31 @@ void func_80098D80(GlobalContext* globalCtx, SceneCmd* cmd) {
}
if (cmd->timeSettings.unk_06 != 0xFF) {
- globalCtx->envCtx.timeIncrement = cmd->timeSettings.unk_06;
+ globalCtx->envCtx.sceneTimeSpeed = cmd->timeSettings.unk_06;
} else {
- globalCtx->envCtx.timeIncrement = 0;
+ globalCtx->envCtx.sceneTimeSpeed = 0;
}
if (gSaveContext.sunsSongState == SUNSSONG_INACTIVE) {
- gTimeIncrement = globalCtx->envCtx.timeIncrement;
+ gTimeSpeed = globalCtx->envCtx.sceneTimeSpeed;
}
- globalCtx->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.dayTime) - 0x8000) * 120.0f) * 25.0f;
- globalCtx->envCtx.sunPos.y = (Math_CosS(((void)0, gSaveContext.dayTime) - 0x8000) * 120.0f) * 25.0f;
- globalCtx->envCtx.sunPos.z = (Math_CosS(((void)0, gSaveContext.dayTime) - 0x8000) * 20.0f) * 25.0f;
+ globalCtx->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
+ globalCtx->envCtx.sunPos.y = (Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
+ globalCtx->envCtx.sunPos.z = (Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
- if (((globalCtx->envCtx.timeIncrement == 0) && (gSaveContext.cutsceneIndex < 0xFFF0)) ||
+ if (((globalCtx->envCtx.sceneTimeSpeed == 0) && (gSaveContext.cutsceneIndex < 0xFFF0)) ||
(gSaveContext.entranceIndex == ENTR_SPOT06_8)) {
gSaveContext.skyboxTime = ((void)0, gSaveContext.dayTime);
- if ((gSaveContext.skyboxTime >= 0x2AAC) && (gSaveContext.skyboxTime < 0x4555)) {
- gSaveContext.skyboxTime = 0x3556;
- } else if ((gSaveContext.skyboxTime >= 0x4555) && (gSaveContext.skyboxTime < 0x5556)) {
- gSaveContext.skyboxTime = 0x5556;
- } else if ((gSaveContext.skyboxTime >= 0xAAAB) && (gSaveContext.skyboxTime < 0xB556)) {
- gSaveContext.skyboxTime = 0xB556;
- } else if ((gSaveContext.skyboxTime >= 0xC001) && (gSaveContext.skyboxTime < 0xCAAC)) {
- gSaveContext.skyboxTime = 0xCAAC;
+ if ((gSaveContext.skyboxTime > CLOCK_TIME(4, 0)) && (gSaveContext.skyboxTime < CLOCK_TIME(6, 30))) {
+ gSaveContext.skyboxTime = CLOCK_TIME(5, 0) + 1;
+ } else if ((gSaveContext.skyboxTime >= CLOCK_TIME(6, 30)) && (gSaveContext.skyboxTime <= CLOCK_TIME(8, 0))) {
+ gSaveContext.skyboxTime = CLOCK_TIME(8, 0) + 1;
+ } else if ((gSaveContext.skyboxTime >= CLOCK_TIME(16, 0)) && (gSaveContext.skyboxTime <= CLOCK_TIME(17, 0))) {
+ gSaveContext.skyboxTime = CLOCK_TIME(17, 0) + 1;
+ } else if ((gSaveContext.skyboxTime >= CLOCK_TIME(18, 0) + 1) &&
+ (gSaveContext.skyboxTime <= CLOCK_TIME(19, 0))) {
+ gSaveContext.skyboxTime = CLOCK_TIME(19, 0) + 1;
}
}
}
diff --git a/src/code/z_scene_table.c b/src/code/z_scene_table.c
index bb527a5b7..a80de06a1 100644
--- a/src/code/z_scene_table.c
+++ b/src/code/z_scene_table.c
@@ -247,7 +247,7 @@ void func_80099BD8(GlobalContext* globalCtx) {
gCustomLensFlarePos.z = -684.0f;
gLensFlareScale = 10;
gLensFlareColorIntensity = 8.0f;
- gLensFlareScreenFillAlpha = 200;
+ gLensFlareGlareStrength = 200;
}
}
@@ -999,14 +999,14 @@ void func_8009DA30(GlobalContext* globalCtx) {
gSPSegment(POLY_XLU_DISP++, 0x0A, displayListHead);
- if ((gSaveContext.dayTime >= 0x4AAC) && (gSaveContext.dayTime <= 0xC555)) {
+ if ((gSaveContext.dayTime > CLOCK_TIME(7, 0)) && (gSaveContext.dayTime <= CLOCK_TIME(18, 30))) {
gSPEndDisplayList(displayListHead);
} else {
- if (gSaveContext.dayTime > 0xC555) {
+ if (gSaveContext.dayTime > CLOCK_TIME(18, 30)) {
if (globalCtx->roomCtx.unk_74[0] != 255) {
Math_StepToS(&globalCtx->roomCtx.unk_74[0], 255, 5);
}
- } else if (gSaveContext.dayTime >= 0x4000) {
+ } else if (gSaveContext.dayTime >= CLOCK_TIME(6, 0)) {
if (globalCtx->roomCtx.unk_74[0] != 0) {
Math_StepToS(&globalCtx->roomCtx.unk_74[0], 0, 10);
}
@@ -1354,14 +1354,14 @@ void func_8009F5D4(GlobalContext* globalCtx) {
gSPSegment(POLY_XLU_DISP++, 0x08, displayListHead);
- if ((gSaveContext.dayTime >= 0x4AAC) && (gSaveContext.dayTime <= 0xC000)) {
+ if ((gSaveContext.dayTime > CLOCK_TIME(7, 0)) && (gSaveContext.dayTime <= CLOCK_TIME(18, 0))) {
gSPEndDisplayList(displayListHead);
} else {
- if (gSaveContext.dayTime > 0xC000) {
+ if (gSaveContext.dayTime > CLOCK_TIME(18, 0)) {
if (globalCtx->roomCtx.unk_74[0] != 255) {
Math_StepToS(&globalCtx->roomCtx.unk_74[0], 255, 5);
}
- } else if (gSaveContext.dayTime >= 0x4000) {
+ } else if (gSaveContext.dayTime >= CLOCK_TIME(6, 0)) {
if (globalCtx->roomCtx.unk_74[0] != 0) {
Math_StepToS(&globalCtx->roomCtx.unk_74[0], 0, 10);
}
diff --git a/src/code/z_sram.c b/src/code/z_sram.c
index 353086d43..83e7ba9e0 100644
--- a/src/code/z_sram.c
+++ b/src/code/z_sram.c
@@ -707,7 +707,7 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx, SramContext* sramCtx) {
gSaveContext.entranceIndex = ENTR_LINK_HOME_0;
gSaveContext.linkAge = LINK_AGE_CHILD;
- gSaveContext.dayTime = 0x6AAB;
+ gSaveContext.dayTime = CLOCK_TIME(10, 0);
gSaveContext.cutsceneIndex = 0xFFF1;
if (fileChooseCtx->buttonIndex == 0) {
diff --git a/src/code/z_vr_box.c b/src/code/z_vr_box.c
index ad5ce9d74..fd87904d1 100644
--- a/src/code/z_vr_box.c
+++ b/src/code/z_vr_box.c
@@ -376,25 +376,28 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox
u8 skybox1Index;
u8 skybox2Index;
u32 start;
- s32 phi_v1;
+ s32 skyboxConfig;
switch (skyboxId) {
case SKYBOX_NORMAL_SKY:
- phi_v1 = 0;
- if (gSaveContext.unk_13C3 != 0 && gSaveContext.sceneSetupIndex < 4 && gWeatherMode > 0 &&
- gWeatherMode < 6) {
- phi_v1 = 1;
+ skyboxConfig = 0;
+ if (gSaveContext.retainWeatherMode && gSaveContext.sceneSetupIndex < 4 &&
+ gWeatherMode > WEATHER_MODE_CLEAR && gWeatherMode <= WEATHER_MODE_HEAVY_RAIN) {
+ skyboxConfig = 1;
}
- for (i = 0; i < 9; i++) {
- if (gSaveContext.skyboxTime >= D_8011FC1C[phi_v1][i].startTime &&
- (gSaveContext.skyboxTime < D_8011FC1C[phi_v1][i].endTime ||
- D_8011FC1C[phi_v1][i].endTime == 0xFFFF)) {
- globalCtx->envCtx.skybox1Index = skybox1Index = D_8011FC1C[phi_v1][i].skybox1Index;
- globalCtx->envCtx.skybox2Index = skybox2Index = D_8011FC1C[phi_v1][i].skybox2Index;
- if (D_8011FC1C[phi_v1][i].blend != 0) {
+ for (i = 0; i < ARRAY_COUNT(gTimeBasedSkyboxConfigs[skyboxConfig]); i++) {
+ if (gSaveContext.skyboxTime >= gTimeBasedSkyboxConfigs[skyboxConfig][i].startTime &&
+ (gSaveContext.skyboxTime < gTimeBasedSkyboxConfigs[skyboxConfig][i].endTime ||
+ gTimeBasedSkyboxConfigs[skyboxConfig][i].endTime == 0xFFFF)) {
+ globalCtx->envCtx.skybox1Index = skybox1Index =
+ gTimeBasedSkyboxConfigs[skyboxConfig][i].skybox1Index;
+ globalCtx->envCtx.skybox2Index = skybox2Index =
+ gTimeBasedSkyboxConfigs[skyboxConfig][i].skybox2Index;
+ if (gTimeBasedSkyboxConfigs[skyboxConfig][i].changeSkybox) {
globalCtx->envCtx.skyboxBlend =
- Environment_LerpWeight(D_8011FC1C[phi_v1][i].endTime, D_8011FC1C[phi_v1][i].startTime,
+ Environment_LerpWeight(gTimeBasedSkyboxConfigs[skyboxConfig][i].endTime,
+ gTimeBasedSkyboxConfigs[skyboxConfig][i].startTime,
((void)0, gSaveContext.skyboxTime)) *
255.0f;
} else {
@@ -404,44 +407,44 @@ void Skybox_Setup(GlobalContext* globalCtx, SkyboxContext* skyboxCtx, s16 skybox
}
}
- size = gSkyboxFiles[skybox1Index].file.vromEnd - gSkyboxFiles[skybox1Index].file.vromStart;
+ size = gNormalSkyFiles[skybox1Index].file.vromEnd - gNormalSkyFiles[skybox1Index].file.vromStart;
skyboxCtx->staticSegments[0] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1054);
ASSERT(skyboxCtx->staticSegments[0] != NULL, "vr_box->vr_box_staticSegment[0] != NULL", "../z_vr_box.c",
1055);
- DmaMgr_SendRequest1(skyboxCtx->staticSegments[0], gSkyboxFiles[skybox1Index].file.vromStart, size,
+ DmaMgr_SendRequest1(skyboxCtx->staticSegments[0], gNormalSkyFiles[skybox1Index].file.vromStart, size,
"../z_vr_box.c", 1058);
- size = gSkyboxFiles[skybox2Index].file.vromEnd - gSkyboxFiles[skybox2Index].file.vromStart;
+ size = gNormalSkyFiles[skybox2Index].file.vromEnd - gNormalSkyFiles[skybox2Index].file.vromStart;
skyboxCtx->staticSegments[1] = GameState_Alloc(&globalCtx->state, size, "../z_vr_box.c", 1060);
ASSERT(skyboxCtx->staticSegments[1] != NULL, "vr_box->vr_box_staticSegment[1] != NULL", "../z_vr_box.c",
1061);
- DmaMgr_SendRequest1(skyboxCtx->staticSegments[1], gSkyboxFiles[skybox2Index].file.vromStart, size,
+ DmaMgr_SendRequest1(skyboxCtx->staticSegments[1], gNormalSkyFiles[skybox2Index].file.vromStart, size,
"../z_vr_box.c", 1064);
if ((skybox1Index & 1) ^ ((skybox1Index & 4) >> 2)) {
- size = gSkyboxFiles[skybox1Index].palette.vromEnd - gSkyboxFiles[skybox1Index].palette.vromStart;
+ size = gNormalSkyFiles[skybox1Index].palette.vromEnd - gNormalSkyFiles[skybox1Index].palette.vromStart;
skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size * 2, "../z_vr_box.c", 1072);
ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1073);
- DmaMgr_SendRequest1(skyboxCtx->palettes, gSkyboxFiles[skybox1Index].palette.vromStart, size,
+ DmaMgr_SendRequest1(skyboxCtx->palettes, gNormalSkyFiles[skybox1Index].palette.vromStart, size,
"../z_vr_box.c", 1075);
- DmaMgr_SendRequest1((u32)skyboxCtx->palettes + size, gSkyboxFiles[skybox2Index].palette.vromStart, size,
- "../z_vr_box.c", 1077);
+ DmaMgr_SendRequest1((u32)skyboxCtx->palettes + size, gNormalSkyFiles[skybox2Index].palette.vromStart,
+ size, "../z_vr_box.c", 1077);
} else {
- size = gSkyboxFiles[skybox1Index].palette.vromEnd - gSkyboxFiles[skybox1Index].palette.vromStart;
+ size = gNormalSkyFiles[skybox1Index].palette.vromEnd - gNormalSkyFiles[skybox1Index].palette.vromStart;
skyboxCtx->palettes = GameState_Alloc(&globalCtx->state, size * 2, "../z_vr_box.c", 1085);
ASSERT(skyboxCtx->palettes != NULL, "vr_box->vr_box_staticSegment[2] != NULL", "../z_vr_box.c", 1086);
- DmaMgr_SendRequest1(skyboxCtx->palettes, gSkyboxFiles[skybox2Index].palette.vromStart, size,
+ DmaMgr_SendRequest1(skyboxCtx->palettes, gNormalSkyFiles[skybox2Index].palette.vromStart, size,
"../z_vr_box.c", 1088);
- DmaMgr_SendRequest1((u32)skyboxCtx->palettes + size, gSkyboxFiles[skybox1Index].palette.vromStart, size,
- "../z_vr_box.c", 1090);
+ DmaMgr_SendRequest1((u32)skyboxCtx->palettes + size, gNormalSkyFiles[skybox1Index].palette.vromStart,
+ size, "../z_vr_box.c", 1090);
}
break;
diff --git a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c
index c87518c28..f085f509b 100644
--- a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c
+++ b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c
@@ -289,7 +289,7 @@ void BgDyYoseizo_ChooseType(BgDyYoseizo* this, GlobalContext* globalCtx) {
return;
}
- globalCtx->envCtx.unk_BF = 2;
+ globalCtx->envCtx.lightSettingOverride = 2;
if (globalCtx->sceneNum == SCENE_DAIYOUSEI_IZUMI) {
OnePointCutscene_Init(globalCtx, 8603, -99, NULL, CAM_ID_MAIN);
@@ -549,7 +549,7 @@ void BgDyYoseizo_Vanish(BgDyYoseizo* this, GlobalContext* globalCtx) {
if (this->vanishTimer == 0) {
func_8002DF54(globalCtx, &this->actor, 7);
- globalCtx->envCtx.unk_BF = 0;
+ globalCtx->envCtx.lightSettingOverride = 0;
findOcarinaSpot = globalCtx->actorCtx.actorLists[ACTORCAT_PROP].head;
while (findOcarinaSpot != NULL) {
diff --git a/src/overlays/actors/ovl_Bg_Mori_Bigst/z_bg_mori_bigst.c b/src/overlays/actors/ovl_Bg_Mori_Bigst/z_bg_mori_bigst.c
index 7efe0af0c..144aed1f6 100644
--- a/src/overlays/actors/ovl_Bg_Mori_Bigst/z_bg_mori_bigst.c
+++ b/src/overlays/actors/ovl_Bg_Mori_Bigst/z_bg_mori_bigst.c
@@ -232,7 +232,7 @@ void BgMoriBigst_Update(Actor* thisx, GlobalContext* globalCtx) {
this->waitTimer--;
}
if (func_80043590(&this->dyna)) {
- func_80074CE8(globalCtx, 6);
+ Environment_ChangeLightSetting(globalCtx, 6);
}
if (this->actionFunc != NULL) {
this->actionFunc(this, globalCtx);
diff --git a/src/overlays/actors/ovl_Bg_Po_Syokudai/z_bg_po_syokudai.c b/src/overlays/actors/ovl_Bg_Po_Syokudai/z_bg_po_syokudai.c
index 2ff65ab91..a39eb4b19 100644
--- a/src/overlays/actors/ovl_Bg_Po_Syokudai/z_bg_po_syokudai.c
+++ b/src/overlays/actors/ovl_Bg_Po_Syokudai/z_bg_po_syokudai.c
@@ -102,7 +102,7 @@ void BgPoSyokudai_Init(Actor* thisx, GlobalContext* globalCtx) {
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_PO_SISTERS, 119.0f, 225.0f, -1566.0f, 0, 0, 0,
thisx->params);
- globalCtx->envCtx.unk_BF = 0x4;
+ globalCtx->envCtx.lightSettingOverride = 4;
} else if (!Flags_GetSwitch(globalCtx, POE_TORCH_FLAG + POE_FLAME_PURPLE) && !Flags_GetSwitch(globalCtx, 0x1B)) {
@@ -111,8 +111,8 @@ void BgPoSyokudai_Init(Actor* thisx, GlobalContext* globalCtx) {
(this->flameColor << 8) + thisx->params + 0x1000);
} else if (!Flags_GetSwitch(globalCtx, thisx->params)) {
- if (globalCtx->envCtx.unk_BF == 0xFF) {
- globalCtx->envCtx.unk_BF = 4;
+ if (globalCtx->envCtx.lightSettingOverride == LIGHT_SETTING_OVERRIDE_NONE) {
+ globalCtx->envCtx.lightSettingOverride = 4;
}
}
@@ -125,8 +125,8 @@ void BgPoSyokudai_Destroy(Actor* thisx, GlobalContext* globalCtx) {
LightContext_RemoveLight(globalCtx, &globalCtx->lightCtx, this->lightNode);
Collider_DestroyCylinder(globalCtx, &this->collider);
- if (globalCtx->envCtx.unk_BF != 0xFF) {
- globalCtx->envCtx.unk_BF = 0xFF;
+ if (globalCtx->envCtx.lightSettingOverride != LIGHT_SETTING_OVERRIDE_NONE) {
+ globalCtx->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
}
}
diff --git a/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c b/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c
index a2320bb80..84079a62f 100644
--- a/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c
+++ b/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c
@@ -226,7 +226,7 @@ void BgSpot00Hanebasi_Update(Actor* thisx, GlobalContext* globalCtx) {
globalCtx->transitionTrigger = TRANS_TRIGGER_START;
globalCtx->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
} else if (Actor_IsFacingAndNearPlayer(&this->dyna.actor, 3000.0f, 0x7530)) {
- globalCtx->envCtx.gloomySkyMode = 1;
+ globalCtx->envCtx.stormRequest = STORM_REQUEST_START;
}
}
}
@@ -235,20 +235,20 @@ void BgSpot00Hanebasi_Update(Actor* thisx, GlobalContext* globalCtx) {
u16 dayTime;
s32 tmp;
- if (gTimeIncrement == 50) {
- tmp = 0xD556;
+ if (gTimeSpeed == 50) {
+ tmp = CLOCK_TIME(20, 0) + 1;
- if (gSaveContext.dayTime >= 0xD557) {
- tmp = 0x1D556;
+ if (gSaveContext.dayTime > CLOCK_TIME(20, 0) + 1) {
+ tmp = CLOCK_TIME(20, 0) + 1 + 0x10000;
}
- gTimeIncrement = (tmp - gSaveContext.dayTime) * (1.0f / 350.0f);
+ gTimeSpeed = (tmp - gSaveContext.dayTime) * (1.0f / 350.0f);
}
dayTime = gSaveContext.dayTime;
- if ((dayTime >= 0x2AAC) && (dayTime < 0x3000) && (gSaveContext.sceneSetupIndex == 5)) {
- gTimeIncrement = 0;
+ if ((dayTime > CLOCK_TIME(4, 0)) && (dayTime < CLOCK_TIME(4, 30)) && (gSaveContext.sceneSetupIndex == 5)) {
+ gTimeSpeed = 0;
}
}
}
diff --git a/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c b/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c
index 14e2a7806..526ee8ae6 100644
--- a/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c
+++ b/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c
@@ -769,7 +769,7 @@ void BossFd_Fly(BossFd* this, GlobalContext* globalCtx) {
s16 sp150;
if (this->fogMode == 0) {
- globalCtx->envCtx.unk_D8 = 0;
+ globalCtx->envCtx.lightBlend = 0;
}
this->fogMode = 0xA;
@@ -1081,36 +1081,36 @@ void BossFd_Effects(BossFd* this, GlobalContext* globalCtx) {
if (1) {} // Needed for match
if (this->fogMode == 0) {
- globalCtx->envCtx.unk_BF = 0;
- globalCtx->envCtx.unk_D8 = 0.5f + 0.5f * Math_SinS(this->work[BFD_VAR_TIMER] * 0x500);
- globalCtx->envCtx.unk_DC = 2;
- globalCtx->envCtx.unk_BD = 1;
- globalCtx->envCtx.unk_BE = 0;
+ globalCtx->envCtx.lightSettingOverride = 0;
+ globalCtx->envCtx.lightBlend = 0.5f + 0.5f * Math_SinS(this->work[BFD_VAR_TIMER] * 0x500);
+ globalCtx->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_FULL_CONTROL;
+ globalCtx->envCtx.lightSetting = 1;
+ globalCtx->envCtx.prevLightSetting = 0;
} else if (this->fogMode == 3) {
- globalCtx->envCtx.unk_BF = 0;
- globalCtx->envCtx.unk_DC = 2;
- globalCtx->envCtx.unk_BD = 2;
- globalCtx->envCtx.unk_BE = 0;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.05f);
+ globalCtx->envCtx.lightSettingOverride = 0;
+ globalCtx->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_FULL_CONTROL;
+ globalCtx->envCtx.lightSetting = 2;
+ globalCtx->envCtx.prevLightSetting = 0;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.05f);
} else if (this->fogMode == 2) {
this->fogMode--;
- globalCtx->envCtx.unk_BF = 0;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 0.55f + 0.05f * Math_SinS(this->work[BFD_VAR_TIMER] * 0x3E00), 1.0f,
- 0.15f);
- globalCtx->envCtx.unk_DC = 2;
- globalCtx->envCtx.unk_BD = 3;
- globalCtx->envCtx.unk_BE = 0;
+ globalCtx->envCtx.lightSettingOverride = 0;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 0.55f + 0.05f * Math_SinS(this->work[BFD_VAR_TIMER] * 0x3E00),
+ 1.0f, 0.15f);
+ globalCtx->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_FULL_CONTROL;
+ globalCtx->envCtx.lightSetting = 3;
+ globalCtx->envCtx.prevLightSetting = 0;
} else if (this->fogMode == 10) {
this->fogMode = 1;
- globalCtx->envCtx.unk_BF = 0;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 0.21f + 0.07f * Math_SinS(this->work[BFD_VAR_TIMER] * 0xC00), 1.0f,
- 0.05f);
- globalCtx->envCtx.unk_DC = 2;
- globalCtx->envCtx.unk_BD = 3;
- globalCtx->envCtx.unk_BE = 0;
+ globalCtx->envCtx.lightSettingOverride = 0;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 0.21f + 0.07f * Math_SinS(this->work[BFD_VAR_TIMER] * 0xC00),
+ 1.0f, 0.05f);
+ globalCtx->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_FULL_CONTROL;
+ globalCtx->envCtx.lightSetting = 3;
+ globalCtx->envCtx.prevLightSetting = 0;
} else if (this->fogMode == 1) {
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 0.0f, 1.0f, 0.03f);
- if (globalCtx->envCtx.unk_D8 <= 0.01f) {
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 0.0f, 1.0f, 0.03f);
+ if (globalCtx->envCtx.lightBlend <= 0.01f) {
this->fogMode = 0;
}
}
@@ -1164,7 +1164,7 @@ void BossFd_Effects(BossFd* this, GlobalContext* globalCtx) {
if ((this->actor.colChkInfo.health == 0) ||
((this->introState == BFD_CS_EMERGE) && (this->actor.world.rot.x > 0x3000))) {
if ((u8)this->fogMode == 0) {
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
}
this->fogMode = 2;
}
diff --git a/src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c b/src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c
index 44476ce41..224e89fc3 100644
--- a/src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c
+++ b/src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c
@@ -411,7 +411,7 @@ void BossFd2_BreatheFire(BossFd2* this, GlobalContext* globalCtx) {
}
if ((25.0f <= this->skelAnime.curFrame) && (this->skelAnime.curFrame < 70.0f)) {
if (this->skelAnime.curFrame == 25.0f) {
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
}
Audio_PlayActorSound2(&this->actor, NA_SE_EN_VALVAISA_FIRE - SFX_FLAG);
if (this->skelAnime.curFrame > 50) {
diff --git a/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c b/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c
index 94b9bb56c..388512b68 100644
--- a/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c
+++ b/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c
@@ -624,7 +624,7 @@ void BossGanon_IntroCutscene(BossGanon* this, GlobalContext* globalCtx) {
// fallthrough
case 3:
this->envLightMode = 0;
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
this->csCamAt.y = (sinf(this->unk_704) * 300.0f) + this->csCamEye.y;
this->csCamAt.z = (cosf(this->unk_704) * -300.0f) + this->csCamEye.z;
Math_ApproachF(&this->unk_704, 0.25f, 0.05f, this->csCamAtMaxStep.y);
@@ -662,7 +662,7 @@ void BossGanon_IntroCutscene(BossGanon* this, GlobalContext* globalCtx) {
this->envLightMode = 5;
if (this->csTimer < 50) {
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlend = 1.0f;
}
if (this->csTimer == 10) {
@@ -693,7 +693,7 @@ void BossGanon_IntroCutscene(BossGanon* this, GlobalContext* globalCtx) {
this->fwork[GDF_TRIFORCE_PRIM_B] = 255.0f;
this->fwork[GDF_TRIFORCE_ENV_G] = 100.0f;
func_80078884(NA_SE_EV_TRIFORCE_MARK);
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
// fallthrough
case 7:
this->envLightMode = 6;
@@ -708,7 +708,7 @@ void BossGanon_IntroCutscene(BossGanon* this, GlobalContext* globalCtx) {
}
if (this->csTimer == 30) {
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlend = 1.0f;
}
BossGanon_SetIntroCsCamera(this, 4);
@@ -740,7 +740,7 @@ void BossGanon_IntroCutscene(BossGanon* this, GlobalContext* globalCtx) {
this->fwork[GDF_TRIFORCE_PRIM_B] = 255.0f;
this->fwork[GDF_TRIFORCE_ENV_G] = 100.0f;
func_80078884(NA_SE_EV_TRIFORCE_MARK);
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
// fallthrough
case 9:
this->envLightMode = 7;
@@ -760,7 +760,7 @@ void BossGanon_IntroCutscene(BossGanon* this, GlobalContext* globalCtx) {
}
if (this->csTimer == 32) {
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlend = 1.0f;
}
if (this->csTimer == 50) {
@@ -832,7 +832,7 @@ void BossGanon_IntroCutscene(BossGanon* this, GlobalContext* globalCtx) {
case 15: // side view of all 3 of them
this->envLightMode = 0;
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
BossGanon_SetIntroCsCamera(this, 10);
if (this->csTimer == 30) {
@@ -925,7 +925,7 @@ void BossGanon_IntroCutscene(BossGanon* this, GlobalContext* globalCtx) {
this->fwork[GDF_TRIFORCE_PRIM_A] = 0.0f;
this->fwork[GDF_TRIFORCE_PRIM_B] = 255.0f;
this->fwork[GDF_TRIFORCE_ENV_G] = 100.0f;
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
// fallthrough
case 19: // show triforce
this->envLightMode = 8;
@@ -934,7 +934,7 @@ void BossGanon_IntroCutscene(BossGanon* this, GlobalContext* globalCtx) {
this->envLightMode = 9;
if (this->csTimer == 60) {
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlend = 1.0f;
}
}
@@ -1260,7 +1260,7 @@ void BossGanon_DeathAndTowerCutscene(BossGanon* this, GlobalContext* globalCtx)
this->envLightMode = 13;
if (this->csTimer < 30) {
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
}
if (this->csTimer >= 2) {
@@ -1408,13 +1408,13 @@ void BossGanon_DeathAndTowerCutscene(BossGanon* this, GlobalContext* globalCtx)
this->envLightMode = 15;
this->unk_508 = 0.0f;
this->fwork[GDF_FWORK_1] = 1000.0f;
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
}
break;
case 7:
if (this->csTimer < 10) {
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
}
if (this->csTimer == 30) {
@@ -1543,7 +1543,7 @@ void BossGanon_DeathAndTowerCutscene(BossGanon* this, GlobalContext* globalCtx)
sCape->tearTimer = 20;
this->whiteFillAlpha = 255.0f;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlend = 1.0f;
// fallthrough
case 101:
player->actor.world.pos.y = 4102.0f;
@@ -1641,7 +1641,7 @@ void BossGanon_DeathAndTowerCutscene(BossGanon* this, GlobalContext* globalCtx)
this->csCamAt.z = sZelda->actor.world.pos.z;
if (this->csTimer >= 10) {
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.05f);
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.05f);
}
if (this->csTimer == 10) {
@@ -3016,106 +3016,107 @@ void BossGanon_Update(Actor* thisx, GlobalContext* globalCtx2) {
}
}
- globalCtx->envCtx.unk_BF = 0;
- globalCtx->envCtx.unk_BE = 0;
- globalCtx->envCtx.unk_DC = 2;
+ globalCtx->envCtx.lightSettingOverride = 0;
+ globalCtx->envCtx.prevLightSetting = 0;
+ globalCtx->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_FULL_CONTROL;
switch (this->envLightMode) {
case -1:
break;
case 0:
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 0.0f, 1.0f, 0.02f);
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 0.0f, 1.0f, 0.02f);
break;
case 1:
- globalCtx->envCtx.unk_BD = 1;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.1f);
+ globalCtx->envCtx.lightSetting = 1;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.1f);
break;
case 2:
- globalCtx->envCtx.unk_BD = 1;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.02f);
+ globalCtx->envCtx.lightSetting = 1;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.02f);
break;
case 3:
- globalCtx->envCtx.unk_BD = 3;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightSetting = 3;
+ globalCtx->envCtx.lightBlend = 1.0f;
break;
case 35:
- globalCtx->envCtx.unk_BD = 0;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightSetting = 0;
+ globalCtx->envCtx.lightBlend = 1.0f;
break;
case 4:
- globalCtx->envCtx.unk_BD = 4;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightSetting = 4;
+ globalCtx->envCtx.lightBlend = 1.0f;
break;
case 5:
- globalCtx->envCtx.unk_BE = 5;
- globalCtx->envCtx.unk_BD = 3;
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.075f);
+ globalCtx->envCtx.prevLightSetting = 5;
+ globalCtx->envCtx.lightSetting = 3;
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.075f);
break;
case 6:
- globalCtx->envCtx.unk_BE = 5;
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.prevLightSetting = 5;
+ globalCtx->envCtx.lightBlend = 0.0f;
break;
case 65:
- globalCtx->envCtx.unk_BE = 3;
- globalCtx->envCtx.unk_BD = 6;
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.05f);
+ globalCtx->envCtx.prevLightSetting = 3;
+ globalCtx->envCtx.lightSetting = 6;
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.05f);
break;
case 7:
- globalCtx->envCtx.unk_BE = 7;
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.prevLightSetting = 7;
+ globalCtx->envCtx.lightBlend = 0.0f;
break;
case 75:
- globalCtx->envCtx.unk_BE = 4;
- globalCtx->envCtx.unk_BD = 8;
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.05f);
+ globalCtx->envCtx.prevLightSetting = 4;
+ globalCtx->envCtx.lightSetting = 8;
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.05f);
break;
case 8:
- globalCtx->envCtx.unk_BE = 3;
- globalCtx->envCtx.unk_BD = 9;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.05f);
+ globalCtx->envCtx.prevLightSetting = 3;
+ globalCtx->envCtx.lightSetting = 9;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.05f);
break;
case 9:
- globalCtx->envCtx.unk_BE = 3;
- globalCtx->envCtx.unk_BD = 0xA;
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.05f);
+ globalCtx->envCtx.prevLightSetting = 3;
+ globalCtx->envCtx.lightSetting = 10;
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.05f);
break;
case 10:
- globalCtx->envCtx.unk_BE = 3;
- globalCtx->envCtx.unk_BD = 0xB;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.05f);
+ globalCtx->envCtx.prevLightSetting = 3;
+ globalCtx->envCtx.lightSetting = 11;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.05f);
this->unk_1A4 = 0;
break;
case 11:
- globalCtx->envCtx.unk_BE = 0xC;
- globalCtx->envCtx.unk_BD = 0xB;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, (Math_CosS(this->unk_1A4 * 0x1800) * 0.5f) + 0.5f, 1.0f, 1.0f);
+ globalCtx->envCtx.prevLightSetting = 12;
+ globalCtx->envCtx.lightSetting = 11;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, (Math_CosS(this->unk_1A4 * 0x1800) * 0.5f) + 0.5f, 1.0f,
+ 1.0f);
break;
case 12:
- globalCtx->envCtx.unk_BE = 0xC;
- globalCtx->envCtx.unk_BD = 3;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.05f);
+ globalCtx->envCtx.prevLightSetting = 12;
+ globalCtx->envCtx.lightSetting = 3;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.05f);
break;
case 13:
- globalCtx->envCtx.unk_BD = 0xD;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.025f);
+ globalCtx->envCtx.lightSetting = 13;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.025f);
break;
case 14:
- globalCtx->envCtx.unk_BD = 0xE;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightSetting = 14;
+ globalCtx->envCtx.lightBlend = 1.0f;
break;
case 15:
- globalCtx->envCtx.unk_BE = 0xE;
- globalCtx->envCtx.unk_BD = 0xF;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.01f);
+ globalCtx->envCtx.prevLightSetting = 14;
+ globalCtx->envCtx.lightSetting = 15;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.01f);
break;
case 16:
- globalCtx->envCtx.unk_BE = 0x10;
- globalCtx->envCtx.unk_BD = 0xF;
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.05f);
+ globalCtx->envCtx.prevLightSetting = 16;
+ globalCtx->envCtx.lightSetting = 15;
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.05f);
break;
case 20:
- globalCtx->envCtx.unk_BE = 2;
- globalCtx->envCtx.unk_BD = 1;
+ globalCtx->envCtx.prevLightSetting = 2;
+ globalCtx->envCtx.lightSetting = 1;
break;
default:
break;
@@ -3169,7 +3170,7 @@ void BossGanon_Update(Actor* thisx, GlobalContext* globalCtx2) {
gLensFlareScale = this->lensFlareScale;
gLensFlareColorIntensity = 10.0f;
- gLensFlareScreenFillAlpha = 0;
+ gLensFlareGlareStrength = 0;
} else {
gCustomLensFlareOn = false;
}
diff --git a/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c b/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c
index 1e8f020bb..de3dac083 100644
--- a/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c
+++ b/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c
@@ -219,7 +219,7 @@ void func_808FD5F4(BossGanon2* this, GlobalContext* globalCtx) {
player->actor.world.pos.z = -186.0f;
player->actor.shape.rot.y = -0x5000;
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime3_Anim_002168, 0.0f);
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
// fake, tricks the compiler into allocating more stack
if (zero) {
this->subCamEye.x *= 2.0;
@@ -229,7 +229,7 @@ void func_808FD5F4(BossGanon2* this, GlobalContext* globalCtx) {
}
case 1:
if (this->unk_398 < 70) {
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
}
this->unk_339 = 3;
Math_ApproachF(&this->subCamEye.x, 1500.0f, 0.1f, this->unk_410.x * 1500.0f);
@@ -245,7 +245,7 @@ void func_808FD5F4(BossGanon2* this, GlobalContext* globalCtx) {
this->unk_39C = 2;
this->unk_398 = 0;
this->unk_410.x = 0.0f;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlend = 1.0f;
} else {
break;
}
@@ -360,7 +360,7 @@ void func_808FD5F4(BossGanon2* this, GlobalContext* globalCtx) {
this->unk_339 = 5;
if (this->unk_398 == 20) {
this->unk_33C = 0.0f;
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
}
} else {
this->unk_339 = 4;
@@ -414,8 +414,8 @@ void func_808FD5F4(BossGanon2* this, GlobalContext* globalCtx) {
this->subCamEye.z = -200.0f;
this->subCamAt.x = this->subCamAt.z = -200.0f;
this->subCamAt.y = this->actor.world.pos.y + 70.0f;
- globalCtx->envCtx.unk_D8 = 0.0f;
- globalCtx->envCtx.unk_BE = globalCtx->envCtx.unk_BD = 0;
+ globalCtx->envCtx.lightBlend = 0.0f;
+ globalCtx->envCtx.prevLightSetting = globalCtx->envCtx.lightSetting = 0;
this->unk_339 = 0;
} else {
break;
@@ -506,7 +506,7 @@ void func_808FD5F4(BossGanon2* this, GlobalContext* globalCtx) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime3_Anim_003754, 0.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon_anime3_Anim_003754);
this->unk_339 = 55;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlend = 1.0f;
Audio_PlayActorSound2(&this->actor, NA_SE_EN_GANON_CASBREAK);
} else {
break;
@@ -728,8 +728,8 @@ void func_808FD5F4(BossGanon2* this, GlobalContext* globalCtx) {
sp68 = player->actor.world.pos;
sp68.y += 60.0f;
func_808FD210(globalCtx, &sp68);
- globalCtx->envCtx.unk_D8 = 0.0f;
- globalCtx->envCtx.unk_BE = 0;
+ globalCtx->envCtx.lightBlend = 0.0f;
+ globalCtx->envCtx.prevLightSetting = 0;
this->unk_339 = 0;
}
}
@@ -1296,7 +1296,7 @@ void func_80900890(BossGanon2* this, GlobalContext* globalCtx) {
this->subCamAt = mainCam1->at;
this->unk_1A2[0] = 300;
this->unk_1A2[1] = 100;
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
case 1:
if (this->unk_1A2[1] == 50) {
func_80078884(NA_SE_EN_MGANON_WALK);
@@ -1326,7 +1326,7 @@ void func_80900890(BossGanon2* this, GlobalContext* globalCtx) {
this->subCamAt.y = sZelda->actor.world.pos.y + 30.0f;
this->subCamAt.z = sZelda->actor.world.pos.z - 10.0f;
Math_ApproachZeroF(&this->unk_324, 1.0f, 5.0f);
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 1.0f / 51);
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 1.0f / 51);
if (this->unk_1A2[1] == 80) {
Message_StartTextbox(globalCtx, 0x70D7, NULL);
}
@@ -1406,7 +1406,7 @@ void func_80900890(BossGanon2* this, GlobalContext* globalCtx) {
break;
case 2:
Math_ApproachF(&this->unk_324, 255.0f, 1.0f, 10.0f);
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 2.0f / 51.0f);
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 2.0f / 51.0f);
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
func_808FFDB0(this, globalCtx);
if (this->unk_334 == 0) {
@@ -1485,14 +1485,14 @@ void func_8090120C(BossGanon2* this, GlobalContext* globalCtx) {
this->unk_324 = 0.0f;
this->actor.speedXZ = 0.0f;
this->unk_31A = this->unk_31C;
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
case 1:
if (this->unk_398 < 90) {
this->unk_339 = 20;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.1f);
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.1f);
} else if (this->unk_398 >= 90) {
this->unk_339 = 21;
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.08f);
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.08f);
}
if (this->unk_398 == 50) {
func_80078884(NA_SE_EN_MGANON_WALK);
@@ -1534,7 +1534,7 @@ void func_8090120C(BossGanon2* this, GlobalContext* globalCtx) {
break;
case 2:
this->unk_339 = 22;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.1f);
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.1f);
func_80078884(NA_SE_EV_TIMETRIP_LIGHT - SFX_FLAG);
this->subCamEye.x = 250;
this->subCamEye.y = 1150.0f;
@@ -1571,7 +1571,7 @@ void func_8090120C(BossGanon2* this, GlobalContext* globalCtx) {
sZelda->unk_3C8 = 10;
}
this->unk_339 = 23;
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.05f);
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.05f);
} else {
this->unk_339 = 22;
}
@@ -1640,7 +1640,7 @@ void func_8090120C(BossGanon2* this, GlobalContext* globalCtx) {
}
case 7:
this->unk_339 = 23;
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.2f);
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.2f);
player->actor.world.pos.x = 250.0f;
player->actor.shape.rot.y = -0x4000;
player->actor.world.pos.z = 30.0f;
@@ -1651,7 +1651,7 @@ void func_8090120C(BossGanon2* this, GlobalContext* globalCtx) {
if ((this->unk_398 == 22) || (this->unk_398 == 35) || (this->unk_398 == 72) || (this->unk_398 == 45)) {
func_80078884(NA_SE_EN_MGANON_DAMAGE);
func_80078884(NA_SE_IT_SHIELD_BOUND);
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlend = 1.0f;
}
if ((this->unk_398 == 22) || (this->unk_398 == 35) || (this->unk_398 == 72) || (this->unk_398 == 45)) {
func_8090109C(this, globalCtx);
@@ -1712,15 +1712,15 @@ void func_8090120C(BossGanon2* this, GlobalContext* globalCtx) {
if (this->unk_398 >= 1000) {
if (this->unk_398 < 1040) {
this->unk_339 = 23;
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.2f);
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.2f);
}
}
if (this->unk_398 == 1040) {
Audio_PlayActorSound2(&this->actor, NA_SE_EN_MGANON_DEAD2);
this->unk_336 = 2;
this->unk_339 = 0;
- globalCtx->envCtx.unk_BE = 0;
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.prevLightSetting = 0;
+ globalCtx->envCtx.lightBlend = 0.0f;
}
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_008EB8, 0.0f);
@@ -1742,7 +1742,7 @@ void func_8090120C(BossGanon2* this, GlobalContext* globalCtx) {
sZelda->unk_3C8 = 11;
Message_StartTextbox(globalCtx, 0x70D9, NULL);
this->unk_336 = 0;
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
}
break;
case 9:
@@ -1765,7 +1765,7 @@ void func_8090120C(BossGanon2* this, GlobalContext* globalCtx) {
Math_ApproachF(&this->subCamEye.y, 1130.0f, 0.05f, this->unk_410.x * 0.25f);
Math_ApproachF(&this->subCamEye.z, -260.0f, 0.05f, this->unk_410.x * 1.25f);
if ((this->unk_398 >= 40) && (this->unk_398 <= 110)) {
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.02f);
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.02f);
Math_ApproachF(&this->unk_384, 10.0f, 0.1f, 0.2f);
Audio_PlayActorSound2(&sZelda->actor, NA_SE_EV_GOD_LIGHTBALL_2 - SFX_FLAG);
} else {
@@ -2068,9 +2068,9 @@ void BossGanon2_Update(Actor* thisx, GlobalContext* globalCtx) {
this->unk_332 = (s16)Rand_ZeroFloat(60.0f) + 0xA;
}
this->unk_339 = 0;
- globalCtx->envCtx.unk_BE = 0;
- globalCtx->envCtx.unk_BD = (s8)Rand_ZeroFloat(1.9f) + 1;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.prevLightSetting = 0;
+ globalCtx->envCtx.lightSetting = (s8)Rand_ZeroFloat(1.9f) + 1;
+ globalCtx->envCtx.lightBlend = 1.0f;
D_8090EB20.y = 0.0f;
D_8090EB20.x = D_8090EB20.y;
D_8090EB20.z = D_8090EB20.x;
@@ -2085,75 +2085,75 @@ void BossGanon2_Update(Actor* thisx, GlobalContext* globalCtx) {
} else if (this->unk_332 != 0) {
this->unk_332--;
}
- if ((globalCtx->envCtx.unk_D8 > 0.0f) && (this->unk_336 != 0)) {
+ if ((globalCtx->envCtx.lightBlend > 0.0f) && (this->unk_336 != 0)) {
globalCtx->envCtx.customSkyboxFilter = 1;
globalCtx->envCtx.skyboxFilterColor[0] = 255;
globalCtx->envCtx.skyboxFilterColor[1] = 255;
globalCtx->envCtx.skyboxFilterColor[2] = 255;
- globalCtx->envCtx.skyboxFilterColor[3] = (s16)(globalCtx->envCtx.unk_D8 * 200.0f);
+ globalCtx->envCtx.skyboxFilterColor[3] = (s16)(globalCtx->envCtx.lightBlend * 200.0f);
} else {
globalCtx->envCtx.customSkyboxFilter = 0;
}
- globalCtx->envCtx.unk_BF = 0;
- globalCtx->envCtx.unk_DC = 2;
+ globalCtx->envCtx.lightSettingOverride = 0;
+ globalCtx->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_FULL_CONTROL;
switch (this->unk_339) {
case 0:
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.1f);
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.1f);
break;
case 3:
- globalCtx->envCtx.unk_BE = 3;
- globalCtx->envCtx.unk_BD = 4;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.0125f);
+ globalCtx->envCtx.prevLightSetting = 3;
+ globalCtx->envCtx.lightSetting = 4;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.0125f);
break;
case 4:
- globalCtx->envCtx.unk_BE = 5;
- globalCtx->envCtx.unk_BD = 6;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.0125f);
+ globalCtx->envCtx.prevLightSetting = 5;
+ globalCtx->envCtx.lightSetting = 6;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.0125f);
break;
case 5:
- globalCtx->envCtx.unk_BE = 6;
- globalCtx->envCtx.unk_BD = 7;
+ globalCtx->envCtx.prevLightSetting = 6;
+ globalCtx->envCtx.lightSetting = 7;
Math_ApproachF(&this->unk_33C, 0.69f, 1.0f, 0.05f);
- globalCtx->envCtx.unk_D8 =
+ globalCtx->envCtx.lightBlend =
(Math_SinS(globalCtx->gameplayFrames * 0x5000) * 0.15f) + (0.15f + this->unk_33C);
break;
case 55:
- globalCtx->envCtx.unk_BE = 2;
- globalCtx->envCtx.unk_BD = 0;
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.05f);
+ globalCtx->envCtx.prevLightSetting = 2;
+ globalCtx->envCtx.lightSetting = 0;
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.05f);
break;
case 6:
- globalCtx->envCtx.unk_BE = 2;
- globalCtx->envCtx.unk_BD = 8;
+ globalCtx->envCtx.prevLightSetting = 2;
+ globalCtx->envCtx.lightSetting = 8;
Math_ApproachF(&this->unk_33C, 0.69f, 1.0f, 0.05f);
- globalCtx->envCtx.unk_D8 =
+ globalCtx->envCtx.lightBlend =
(Math_SinS(globalCtx->gameplayFrames * 0x7000) * 0.15f) + (0.15f + this->unk_33C);
break;
case 7:
- globalCtx->envCtx.unk_BE = 0;
- globalCtx->envCtx.unk_BD = 8;
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.02f);
+ globalCtx->envCtx.prevLightSetting = 0;
+ globalCtx->envCtx.lightSetting = 8;
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.02f);
break;
case 20:
- globalCtx->envCtx.unk_BE = 0;
- globalCtx->envCtx.unk_BD = 9;
+ globalCtx->envCtx.prevLightSetting = 0;
+ globalCtx->envCtx.lightSetting = 9;
break;
case 21:
- globalCtx->envCtx.unk_BE = 0xA;
- globalCtx->envCtx.unk_BD = 9;
+ globalCtx->envCtx.prevLightSetting = 10;
+ globalCtx->envCtx.lightSetting = 9;
break;
case 22:
- globalCtx->envCtx.unk_BE = 0xA;
- globalCtx->envCtx.unk_BD = 0xB;
+ globalCtx->envCtx.prevLightSetting = 10;
+ globalCtx->envCtx.lightSetting = 11;
break;
case 23:
- globalCtx->envCtx.unk_BE = 9;
- globalCtx->envCtx.unk_BD = 0xB;
+ globalCtx->envCtx.prevLightSetting = 9;
+ globalCtx->envCtx.lightSetting = 11;
break;
case 24:
- globalCtx->envCtx.unk_BE = 0;
- globalCtx->envCtx.unk_BD = 0xC;
+ globalCtx->envCtx.prevLightSetting = 0;
+ globalCtx->envCtx.lightSetting = 12;
break;
case -1:
break;
@@ -2911,8 +2911,8 @@ void BossGanon2_DrawEffects(GlobalContext* globalCtx) {
gSPSegment(POLY_OPA_DISP++, 0x08,
Gfx_TexScroll(globalCtx->state.gfxCtx, 0, 0 - (globalCtx->gameplayFrames & 0x7F), 32, 32));
gSPDisplayList(POLY_OPA_DISP++, ovl_Boss_Ganon2_DL_0103A8);
- if ((globalCtx->envCtx.unk_BD == 1) || (globalCtx->envCtx.unk_BD == 2)) {
- alpha = (s16)(globalCtx->envCtx.unk_D8 * 150.0f) + 50;
+ if ((globalCtx->envCtx.lightSetting == 1) || (globalCtx->envCtx.lightSetting == 2)) {
+ alpha = (s16)(globalCtx->envCtx.lightBlend * 150.0f) + 50;
angle = M_PI / 5.0f;
} else {
alpha = 100;
@@ -3052,8 +3052,8 @@ void BossGanon2_DrawShadowTexture(void* shadowTexture, BossGanon2* this, GlobalC
func_80093D18(globalCtx->state.gfxCtx);
- if ((globalCtx->envCtx.unk_BD == 1) || (globalCtx->envCtx.unk_BD == 2)) {
- alpha = (s16)(globalCtx->envCtx.unk_D8 * 180.0f) + 30;
+ if ((globalCtx->envCtx.lightSetting == 1) || (globalCtx->envCtx.lightSetting == 2)) {
+ alpha = (s16)(globalCtx->envCtx.lightBlend * 180.0f) + 30;
} else {
alpha = 120;
}
diff --git a/src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c b/src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c
index fe14f7855..c7047466e 100644
--- a/src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c
+++ b/src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c
@@ -1139,14 +1139,14 @@ void BossGanondrof_Death(BossGanondrof* this, GlobalContext* globalCtx) {
vel.z = this->actor.world.pos.z - this->actor.prevPos.z;
if (bodyDecayLevel < 10) {
if (this->work[GND_DEATH_ENV_TIMER] == 0) {
- if (globalCtx->envCtx.unk_BF == 0) {
- globalCtx->envCtx.unk_BF = 3;
+ if (globalCtx->envCtx.lightSettingOverride == 0) {
+ globalCtx->envCtx.lightSettingOverride = 3;
this->work[GND_DEATH_ENV_TIMER] = (s16)Rand_ZeroFloat(5.0f) + 4.0f;
- globalCtx->envCtx.unk_D6 = 0x28;
+ globalCtx->envCtx.lightBlendRateOverride = 40;
} else {
- globalCtx->envCtx.unk_BF = 0;
+ globalCtx->envCtx.lightSettingOverride = 0;
this->work[GND_DEATH_ENV_TIMER] = (s16)Rand_ZeroFloat(2.0f) + 2.0f;
- globalCtx->envCtx.unk_D6 = 0x14;
+ globalCtx->envCtx.lightBlendRateOverride = 20;
}
} else {
this->work[GND_DEATH_ENV_TIMER]--;
@@ -1178,8 +1178,8 @@ void BossGanondrof_Death(BossGanondrof* this, GlobalContext* globalCtx) {
}
}
} else {
- globalCtx->envCtx.unk_BF = 0;
- globalCtx->envCtx.unk_D6 = 0x14;
+ globalCtx->envCtx.lightSettingOverride = 0;
+ globalCtx->envCtx.lightBlendRateOverride = 20;
}
this->work[GND_BODY_DECAY_FLAG] = true;
diff --git a/src/overlays/actors/ovl_Boss_Goma/z_boss_goma.c b/src/overlays/actors/ovl_Boss_Goma/z_boss_goma.c
index 1b0c8f7e9..c59063533 100644
--- a/src/overlays/actors/ovl_Boss_Goma/z_boss_goma.c
+++ b/src/overlays/actors/ovl_Boss_Goma/z_boss_goma.c
@@ -419,8 +419,8 @@ void BossGoma_SetupEncounter(BossGoma* this, GlobalContext* globalCtx) {
this->actionFunc = BossGoma_Encounter;
this->actionState = 0;
this->disableGameplayLogic = true;
- globalCtx->envCtx.unk_BF = 4;
- globalCtx->envCtx.unk_D6 = 0xFF;
+ globalCtx->envCtx.lightSettingOverride = 4;
+ globalCtx->envCtx.lightBlendRateOverride = 255;
}
/**
@@ -750,8 +750,8 @@ void BossGoma_Encounter(BossGoma* this, GlobalContext* globalCtx) {
}
if (this->frameCount == 176) {
- globalCtx->envCtx.unk_BF = 3;
- globalCtx->envCtx.unk_D6 = 0xFFFF;
+ globalCtx->envCtx.lightSettingOverride = 3;
+ globalCtx->envCtx.lightBlendRateOverride = LIGHT_BLENDRATE_OVERRIDE_NONE;
}
if (this->frameCount == 190) {
@@ -805,7 +805,7 @@ void BossGoma_Encounter(BossGoma* this, GlobalContext* globalCtx) {
Math_ApproachF(&this->subCamAt.z, this->actor.world.pos.z, 0.2f, 100.0f);
if (this->framesUntilNextAction == 30) {
- globalCtx->envCtx.unk_BF = 4;
+ globalCtx->envCtx.lightSettingOverride = 4;
}
if (this->framesUntilNextAction < 20) {
diff --git a/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c b/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c
index e4577fc4a..ee2ac858f 100644
--- a/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c
+++ b/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c
@@ -491,10 +491,10 @@ void BossTw_Init(Actor* thisx, GlobalContext* globalCtx2) {
if (!sTwInitalized) {
sTwInitalized = true;
- globalCtx->envCtx.unk_BF = 1;
- globalCtx->envCtx.unk_BE = 1;
- globalCtx->envCtx.unk_BD = 1;
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightSettingOverride = 1;
+ globalCtx->envCtx.prevLightSetting = 1;
+ globalCtx->envCtx.lightSetting = 1;
+ globalCtx->envCtx.lightBlend = 0.0f;
D_8094C874 = D_8094C876 = D_8094C878 = D_8094C87A = D_8094C87C = D_8094C87E = D_8094C870 = D_8094C86F =
D_8094C872 = sBeamDivertTimer = sEnvType = sGroundBlastType = sFreezeState = sTwinrovaBlastType =
@@ -880,7 +880,7 @@ s32 BossTw_CheckBeamReflection(BossTw* this, GlobalContext* globalCtx) {
// beam hit the shield, normal shield equipped,
// divert the beam backwards from link's Y rotation
BossTw_AddShieldDeflectEffect(globalCtx, 10.0f, this->actor.params);
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlend = 1.0f;
this->timers[0] = 10;
func_80078884(NA_SE_IT_SHIELD_REFLECT_MG2);
}
@@ -1001,8 +1001,8 @@ void BossTw_ShootBeam(BossTw* this, GlobalContext* globalCtx) {
if (this->timers[1] < 50) {
if (this->timers[1] < 10) {
if (this->timers[1] == 9) {
- globalCtx->envCtx.unk_D8 = 0.5f;
- globalCtx->envCtx.unk_BD = 3 - this->actor.params;
+ globalCtx->envCtx.lightBlend = 0.5f;
+ globalCtx->envCtx.lightSetting = 3 - this->actor.params;
Audio_PlayActorSound2(&this->actor, NA_SE_EN_TWINROBA_MASIC_SET);
}
@@ -1118,7 +1118,7 @@ void BossTw_ShootBeam(BossTw* this, GlobalContext* globalCtx) {
this->groundBlastPos.x = 0.0f;
this->groundBlastPos.y = 0.0f;
this->groundBlastPos.z = 0.0f;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlend = 1.0f;
func_800AA000(0.0f, 0x64, 5, 4);
} else if (beamReflection == 0) {
BossTw_BeamHitPlayerCheck(this, globalCtx);
@@ -1278,7 +1278,7 @@ void BossTw_ShootBeam(BossTw* this, GlobalContext* globalCtx) {
}
this->beamReflectionDist = sp130.z;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 0.8f, 1.0f, 0.2f);
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 0.8f, 1.0f, 0.2f);
}
break;
}
@@ -1320,7 +1320,7 @@ void BossTw_ShootBeam(BossTw* this, GlobalContext* globalCtx) {
BossTw_SetupHitByBeam(otherTw, globalCtx);
Audio_PlayActorSound2(&otherTw->actor, NA_SE_EN_TWINROBA_DAMAGE_VOICE);
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlend = 1.0f;
otherTw->actor.colChkInfo.health++;
}
}
@@ -1664,8 +1664,8 @@ void BossTw_TwinrovaMergeCS(BossTw* this, GlobalContext* globalCtx) {
}
sEnvType = -1;
- globalCtx->envCtx.unk_BD = 4;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1, 1, 0.1f);
+ globalCtx->envCtx.lightSetting = 4;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1, 1, 0.1f);
// fallthrough
case 2:
SkelAnime_Update(&this->skelAnime);
@@ -1711,7 +1711,7 @@ void BossTw_TwinrovaMergeCS(BossTw* this, GlobalContext* globalCtx) {
}
if (this->timers[2] == 4) {
sEnvType = 0;
- globalCtx->envCtx.unk_BE = 5;
+ globalCtx->envCtx.prevLightSetting = 5;
}
if (this->timers[2] == 1) {
@@ -1846,8 +1846,8 @@ void BossTw_TwinrovaIntroCS(BossTw* this, GlobalContext* globalCtx) {
Math_ApproachF(&this->subCamUpdateRate, 0.01f, 1.0f, 0.0001f);
if (this->work[CS_TIMER_1] > 100) {
- globalCtx->envCtx.unk_BD = 0;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.03f);
+ globalCtx->envCtx.lightSetting = 0;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.03f);
}
if (this->work[CS_TIMER_1] == 180) {
@@ -1957,11 +1957,11 @@ void BossTw_TwinrovaIntroCS(BossTw* this, GlobalContext* globalCtx) {
if (this->work[CS_TIMER_1] >= 30) {
if (this->work[CS_TIMER_1] < 45) {
- globalCtx->envCtx.unk_BE = 0;
- globalCtx->envCtx.unk_BD = 2;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.prevLightSetting = 0;
+ globalCtx->envCtx.lightSetting = 2;
+ globalCtx->envCtx.lightBlend = 1.0f;
} else {
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.1f);
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.1f);
}
if (this->work[CS_TIMER_1] == 30) {
@@ -1980,7 +1980,7 @@ void BossTw_TwinrovaIntroCS(BossTw* this, GlobalContext* globalCtx) {
}
Audio_PlayActorSound2(&sKoumePtr->actor, NA_SE_EN_TWINROBA_TRANSFORM);
- globalCtx->envCtx.unk_D8 = 0;
+ globalCtx->envCtx.lightBlend = 0;
}
if (this->work[CS_TIMER_1] >= 35) {
@@ -2121,10 +2121,10 @@ void BossTw_TwinrovaIntroCS(BossTw* this, GlobalContext* globalCtx) {
if (this->work[CS_TIMER_1] >= 30) {
if (this->work[CS_TIMER_1] < 45) {
- globalCtx->envCtx.unk_BD = 3;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightSetting = 3;
+ globalCtx->envCtx.lightBlend = 1.0f;
} else {
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.1f);
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.1f);
}
if (this->work[CS_TIMER_1] == 30) {
@@ -2142,7 +2142,7 @@ void BossTw_TwinrovaIntroCS(BossTw* this, GlobalContext* globalCtx) {
}
Audio_PlayActorSound2(&sKotakePtr->actor, NA_SE_EN_TWINROBA_TRANSFORM);
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.lightBlend = 0.0f;
}
if (this->work[CS_TIMER_1] >= 35) {
@@ -2212,8 +2212,8 @@ void BossTw_TwinrovaIntroCS(BossTw* this, GlobalContext* globalCtx) {
case 20:
if (this->work[CS_TIMER_1] > 20 && this->work[CS_TIMER_1] < 120) {
- globalCtx->envCtx.unk_BD = 1;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.015f);
+ globalCtx->envCtx.lightSetting = 1;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.015f);
}
if (this->work[CS_TIMER_1] == 90) {
@@ -2222,9 +2222,9 @@ void BossTw_TwinrovaIntroCS(BossTw* this, GlobalContext* globalCtx) {
if (this->work[CS_TIMER_1] == 120) {
sEnvType = 0;
- globalCtx->envCtx.unk_BE = 1;
- globalCtx->envCtx.unk_BD = 1;
- globalCtx->envCtx.unk_D8 = 0.0f;
+ globalCtx->envCtx.prevLightSetting = 1;
+ globalCtx->envCtx.lightSetting = 1;
+ globalCtx->envCtx.lightBlend = 0.0f;
TitleCard_InitBossName(globalCtx, &globalCtx->actorCtx.titleCtx,
SEGMENTED_TO_VIRTUAL(object_tw_Blob_02E170), 0xA0, 0xB4, 0x80, 0x28);
SET_EVENTCHKINF(EVENTCHKINF_75);
@@ -2642,13 +2642,13 @@ void BossTw_TwinrovaDeathCS(BossTw* this, GlobalContext* globalCtx) {
if (this->work[CS_TIMER_1] >= 55) {
if (this->work[CS_TIMER_1] == 55) {
- globalCtx->envCtx.unk_D8 = 0;
+ globalCtx->envCtx.lightBlend = 0;
}
sEnvType = -1;
- globalCtx->envCtx.unk_BE = 5;
- globalCtx->envCtx.unk_BD = 0;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.015f);
+ globalCtx->envCtx.prevLightSetting = 5;
+ globalCtx->envCtx.lightSetting = 0;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.015f);
Math_ApproachF(&this->actor.scale.x, 0.00024999998f, 0.1f, 0.00005f);
this->actor.shape.rot.y += (s16)this->actor.speedXZ;
this->workf[UNK_F13] += this->actor.speedXZ;
@@ -2785,13 +2785,13 @@ void BossTw_TwinrovaDeathCS(BossTw* this, GlobalContext* globalCtx) {
case 3:
BossTw_DeathCSMsgSfx(this, globalCtx);
if (this->work[CS_TIMER_2] < 150) {
- globalCtx->envCtx.unk_BE = 1;
- globalCtx->envCtx.unk_BD = 0;
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.1f);
+ globalCtx->envCtx.prevLightSetting = 1;
+ globalCtx->envCtx.lightSetting = 0;
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.1f);
} else {
- globalCtx->envCtx.unk_BE = 1;
- globalCtx->envCtx.unk_BD = 6;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, (Math_SinS(this->work[CS_TIMER_2] * 4096) / 4.0f) + 0.75f,
+ globalCtx->envCtx.prevLightSetting = 1;
+ globalCtx->envCtx.lightSetting = 6;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, (Math_SinS(this->work[CS_TIMER_2] * 4096) / 4.0f) + 0.75f,
1.0f, 0.1f);
}
@@ -3138,33 +3138,33 @@ void BossTw_TwinrovaUpdate(Actor* thisx, GlobalContext* globalCtx2) {
osSyncPrintf("OooooooooooooooooooooooooooooooooCC\n");
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
- globalCtx->envCtx.unk_DC = 2;
+ globalCtx->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_FULL_CONTROL;
switch (sEnvType) {
case 0:
- Math_ApproachZeroF(&globalCtx->envCtx.unk_D8, 1.0f, 0.02f);
+ Math_ApproachZeroF(&globalCtx->envCtx.lightBlend, 1.0f, 0.02f);
break;
case 1:
- globalCtx->envCtx.unk_BD = 3;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 0.5f, 1.0f, 0.05f);
+ globalCtx->envCtx.lightSetting = 3;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 0.5f, 1.0f, 0.05f);
break;
case 2:
- globalCtx->envCtx.unk_BD = 2;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, (Math_SinS(this->work[CS_TIMER_1] * 0x3000) * 0.03f) + 0.5f, 1.0f,
- 0.05f);
+ globalCtx->envCtx.lightSetting = 2;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, (Math_SinS(this->work[CS_TIMER_1] * 0x3000) * 0.03f) + 0.5f,
+ 1.0f, 0.05f);
break;
case 3:
- globalCtx->envCtx.unk_BD = 3;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.1f);
+ globalCtx->envCtx.lightSetting = 3;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.1f);
break;
case 4:
- globalCtx->envCtx.unk_BD = 2;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, (Math_SinS(this->work[CS_TIMER_1] * 0x3E00) * 0.05f) + 0.95f,
+ globalCtx->envCtx.lightSetting = 2;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, (Math_SinS(this->work[CS_TIMER_1] * 0x3E00) * 0.05f) + 0.95f,
1.0f, 0.1f);
break;
case 5:
- globalCtx->envCtx.unk_BD = 0;
- Math_ApproachF(&globalCtx->envCtx.unk_D8, 1.0f, 1.0f, 0.05f);
+ globalCtx->envCtx.lightSetting = 0;
+ Math_ApproachF(&globalCtx->envCtx.lightBlend, 1.0f, 1.0f, 0.05f);
break;
case -1:
break;
@@ -3969,7 +3969,7 @@ void BossTw_BlastFire(BossTw* this, GlobalContext* globalCtx) {
if (this->timers[0] == 50) {
D_8094C86F = 10;
D_8094C872 = 7;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlend = 1.0f;
}
if (this->timers[0] <= 50) {
@@ -4019,7 +4019,7 @@ void BossTw_BlastFire(BossTw* this, GlobalContext* globalCtx) {
Rand_ZeroFloat(10.0f) + 25.0f, this->blastType);
}
- globalCtx->envCtx.unk_D8 = 0.5f;
+ globalCtx->envCtx.lightBlend = 0.5f;
}
this->csState1 = 2;
@@ -4159,7 +4159,7 @@ void BossTw_BlastIce(BossTw* this, GlobalContext* globalCtx) {
if (this->timers[0] == 50) {
D_8094C86F = 10;
D_8094C872 = 7;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlend = 1.0f;
}
if (this->timers[0] <= 50) {
@@ -4209,7 +4209,7 @@ void BossTw_BlastIce(BossTw* this, GlobalContext* globalCtx) {
Rand_ZeroFloat(10.0f) + 25.0f, this->blastType);
}
- globalCtx->envCtx.unk_D8 = 0.5f;
+ globalCtx->envCtx.lightBlend = 0.5f;
}
this->csState1 = 2;
@@ -4345,7 +4345,7 @@ s32 BossTw_BlastShieldCheck(BossTw* this, GlobalContext* globalCtx) {
if (info->toucher.dmgFlags & DMG_SHIELD) {
this->work[INVINC_TIMER] = 7;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlend = 1.0f;
func_800AA000(0.0f, 100, 5, 4);
if (Player_HasMirrorShieldEquipped(globalCtx)) {
@@ -4683,7 +4683,7 @@ void BossTw_UpdateEffects(GlobalContext* globalCtx) {
}
sTwinrovaPtr->twinrovaStun = 1;
- globalCtx->envCtx.unk_D8 = 1.0f;
+ globalCtx->envCtx.lightBlend = 1.0f;
eff->type = TWEFF_NONE;
}
}
diff --git a/src/overlays/actors/ovl_Boss_Va/z_boss_va.c b/src/overlays/actors/ovl_Boss_Va/z_boss_va.c
index d43cb8d02..4a37d5cef 100644
--- a/src/overlays/actors/ovl_Boss_Va/z_boss_va.c
+++ b/src/overlays/actors/ovl_Boss_Va/z_boss_va.c
@@ -957,7 +957,7 @@ void BossVa_BodyIntro(BossVa* this, GlobalContext* globalCtx) {
sSubCamEyeMaxVelFrac.z = sSubCamEyeMaxVelFrac.x;
sSubCamAtMaxVelFrac = sSubCamEyeMaxVelFrac;
if (this->timer >= 45000) {
- globalCtx->envCtx.unk_BF = 1;
+ globalCtx->envCtx.lightSettingOverride = 1;
func_8002DF54(globalCtx, &this->actor, 8);
} else if (this->timer >= 35000) {
Audio_QueueSeqCmd(SEQ_PLAYER_BGM_MAIN << 24 | NA_BGM_BOSS);
diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
index e921719ce..159c5c1ad 100644
--- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
+++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
@@ -2082,7 +2082,8 @@ void DemoEffect_DrawTimeWarp(Actor* thisx, GlobalContext* globalCtx) {
POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 25);
Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY);
- SkelCurve_Draw(&this->actor, globalCtx, &this->skelCurve, DemoEffect_OverrideLimbDrawTimeWarp, NULL, 1, &this->actor);
+ SkelCurve_Draw(&this->actor, globalCtx, &this->skelCurve, DemoEffect_OverrideLimbDrawTimeWarp, NULL, 1,
+ &this->actor);
CLOSE_DISPS(gfxCtx, "../z_demo_effect.c", 3216);
}
diff --git a/src/overlays/actors/ovl_Demo_Kekkai/z_demo_kekkai.c b/src/overlays/actors/ovl_Demo_Kekkai/z_demo_kekkai.c
index 96d64a5f9..265c84695 100644
--- a/src/overlays/actors/ovl_Demo_Kekkai/z_demo_kekkai.c
+++ b/src/overlays/actors/ovl_Demo_Kekkai/z_demo_kekkai.c
@@ -118,7 +118,7 @@ void DemoKekkai_Init(Actor* thisx, GlobalContext* globalCtx) {
}
if (DemoKekkai_CheckEventFlag(thisx->params)) {
if (thisx->params == KEKKAI_TOWER) {
- globalCtx->envCtx.unk_BF = 1;
+ globalCtx->envCtx.lightSettingOverride = 1;
}
Actor_Kill(thisx);
}
diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c
index 0d3d6a3b3..0837c640f 100644
--- a/src/overlays/actors/ovl_En_Door/z_en_door.c
+++ b/src/overlays/actors/ovl_En_Door/z_en_door.c
@@ -150,8 +150,9 @@ void EnDoor_SetupType(EnDoor* this, GlobalContext* globalCtx) {
this->actor.objBankIndex = this->requiredObjBankIndex;
this->actionFunc = EnDoor_Idle;
if (doorType == DOOR_EVENING) {
- doorType =
- (gSaveContext.dayTime > 0xC000 && gSaveContext.dayTime < 0xE000) ? DOOR_SCENEEXIT : DOOR_CHECKABLE;
+ doorType = (gSaveContext.dayTime > CLOCK_TIME(18, 0) && gSaveContext.dayTime < CLOCK_TIME(21, 0))
+ ? DOOR_SCENEEXIT
+ : DOOR_CHECKABLE;
}
this->actor.world.rot.y = 0x0000;
if (doorType == DOOR_LOCKED) {
diff --git a/src/overlays/actors/ovl_En_Fhg_Fire/z_en_fhg_fire.c b/src/overlays/actors/ovl_En_Fhg_Fire/z_en_fhg_fire.c
index fdde2ae4b..8e9cc11c7 100644
--- a/src/overlays/actors/ovl_En_Fhg_Fire/z_en_fhg_fire.c
+++ b/src/overlays/actors/ovl_En_Fhg_Fire/z_en_fhg_fire.c
@@ -314,12 +314,12 @@ void EnFhgFire_LightningBurst(EnFhgFire* this, GlobalContext* globalCtx) {
this->actor.shape.rot.y += 0x1000;
if (this->work[FHGFIRE_FX_TIMER] == 49) {
- globalCtx->envCtx.unk_BF = 1;
- globalCtx->envCtx.unk_D6 = 0xFF;
+ globalCtx->envCtx.lightSettingOverride = 1;
+ globalCtx->envCtx.lightBlendRateOverride = 255;
}
if (this->work[FHGFIRE_FX_TIMER] == 31) {
- globalCtx->envCtx.unk_BF = 0x00;
- globalCtx->envCtx.unk_D6 = 0x14;
+ globalCtx->envCtx.lightSettingOverride = 0;
+ globalCtx->envCtx.lightBlendRateOverride = 20;
}
if (this->work[FHGFIRE_FX_TIMER] >= 48) {
globalCtx->envCtx.screenFillColor[0] = globalCtx->envCtx.screenFillColor[1] =
@@ -369,7 +369,7 @@ void EnFhgFire_LightningBurst(EnFhgFire* this, GlobalContext* globalCtx) {
gCustomLensFlarePos = this->actor.world.pos;
gLensFlareScale = this->lensFlareScale;
gLensFlareColorIntensity = 10.0f;
- gLensFlareScreenFillAlpha = 0;
+ gLensFlareGlareStrength = 0;
}
void EnFhgFire_SpearLight(EnFhgFire* this, GlobalContext* globalCtx) {
diff --git a/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c b/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c
index beaad6739..e5879d18a 100644
--- a/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c
+++ b/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c
@@ -100,7 +100,7 @@ void EnHeishi1_Init(Actor* thisx, GlobalContext* globalCtx) {
// "(head) maximum turning angle speed"
osSyncPrintf(VT_FGCOL(MAGENTA) " (頭)反転アングルスピード最大☆ %f\n" VT_RST, this->headTurnSpeedMax);
osSyncPrintf(VT_FGCOL(GREEN) " 今時間 %d\n" VT_RST, ((void)0, gSaveContext.dayTime)); // "current time"
- osSyncPrintf(VT_FGCOL(YELLOW) " チェック時間 %d\n" VT_RST, 0xBAAA); // "check time"
+ osSyncPrintf(VT_FGCOL(YELLOW) " チェック時間 %d\n" VT_RST, CLOCK_TIME(17, 30) - 1); // "check time"
osSyncPrintf("\n\n");
if (this->path == 3) {
@@ -112,13 +112,13 @@ void EnHeishi1_Init(Actor* thisx, GlobalContext* globalCtx) {
}
if (this->type != 5) {
- if (((gSaveContext.dayTime < 0xB888) || IS_DAY) && !GET_EVENTCHKINF(EVENTCHKINF_80)) {
+ if (((gSaveContext.dayTime < CLOCK_TIME(17, 18) - 1) || IS_DAY) && !GET_EVENTCHKINF(EVENTCHKINF_80)) {
this->actionFunc = EnHeishi1_SetupWalk;
} else {
Actor_Kill(&this->actor);
}
} else {
- if ((gSaveContext.dayTime >= 0xB889) || !IS_DAY || GET_EVENTCHKINF(EVENTCHKINF_80)) {
+ if ((gSaveContext.dayTime > CLOCK_TIME(17, 18) - 1) || !IS_DAY || GET_EVENTCHKINF(EVENTCHKINF_80)) {
this->actionFunc = EnHeishi1_SetupWaitNight;
} else {
Actor_Kill(&this->actor);
diff --git a/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c b/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c
index 06c8c43dc..74d37040e 100644
--- a/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c
+++ b/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c
@@ -298,7 +298,8 @@ void func_80A89A6C(EnJsjutan* this, GlobalContext* globalCtx) {
this->dyna.actor.world.pos.y = this->unk_168;
dayTime = gSaveContext.dayTime;
- if (dayTime >= 0x8000) {
+
+ if (dayTime >= CLOCK_TIME(12, 0)) {
dayTime = 0xFFFF - dayTime;
}
diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
index c144b7062..6e6680397 100644
--- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
+++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
@@ -865,7 +865,7 @@ void EnKanban_Draw(Actor* thisx, GlobalContext* globalCtx) {
u16 dayTime = gSaveContext.dayTime;
f32 shadowAlpha;
- if (dayTime >= 0x8000) {
+ if (dayTime >= CLOCK_TIME(12, 0)) {
dayTime = 0xFFFF - dayTime;
}
shadowAlpha = (dayTime * 0.00275f) + 10.0f;
diff --git a/src/overlays/actors/ovl_En_Mm/z_en_mm.c b/src/overlays/actors/ovl_En_Mm/z_en_mm.c
index 690d0f349..92bad0bce 100644
--- a/src/overlays/actors/ovl_En_Mm/z_en_mm.c
+++ b/src/overlays/actors/ovl_En_Mm/z_en_mm.c
@@ -202,7 +202,7 @@ void EnMm_Destroy(Actor* thisx, GlobalContext* globalCtx) {
s32 func_80AADA70(void) {
s32 isDay = false;
- if ((gSaveContext.dayTime > 0x3555) && (gSaveContext.dayTime <= 0xD556)) {
+ if ((gSaveContext.dayTime > CLOCK_TIME(5, 0)) && (gSaveContext.dayTime <= CLOCK_TIME(20, 0) + 1)) {
isDay = true;
}
diff --git a/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c b/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c
index 99c549e91..45684666b 100644
--- a/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c
+++ b/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c
@@ -35,12 +35,13 @@ void EnOkarinaEffect_SetupAction(EnOkarinaEffect* this, EnOkarinaEffectActionFun
void EnOkarinaEffect_Destroy(Actor* thisx, GlobalContext* globalCtx) {
EnOkarinaEffect* this = (EnOkarinaEffect*)thisx;
- globalCtx->envCtx.unk_F2[0] = 0;
- if ((gWeatherMode != 4) && (gWeatherMode != 5) && (globalCtx->envCtx.gloomySkyMode == 1)) {
- globalCtx->envCtx.gloomySkyMode = 2; // end gloomy sky
+ globalCtx->envCtx.precipitation[PRECIP_SOS_MAX] = 0;
+ if ((gWeatherMode != WEATHER_MODE_RAIN) && (gWeatherMode != WEATHER_MODE_HEAVY_RAIN) &&
+ (globalCtx->envCtx.stormRequest == STORM_REQUEST_START)) {
+ globalCtx->envCtx.stormRequest = STORM_REQUEST_STOP;
Environment_StopStormNatureAmbience(globalCtx);
}
- globalCtx->envCtx.lightningMode = LIGHTNING_MODE_LAST;
+ globalCtx->envCtx.lightningState = LIGHTNING_LAST;
}
void EnOkarinaEffect_Init(Actor* thisx, GlobalContext* globalCtx) {
@@ -50,20 +51,20 @@ void EnOkarinaEffect_Init(Actor* thisx, GlobalContext* globalCtx) {
// "Ocarina Storm Effect"
osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ オカリナあらし効果ビカビカビカ〜 ☆☆☆☆☆ \n" VT_RST);
osSyncPrintf("\n\n");
- if (globalCtx->envCtx.unk_EE[1] != 0) {
+ if (globalCtx->envCtx.precipitation[PRECIP_RAIN_CUR] != 0) {
Actor_Kill(&this->actor);
}
EnOkarinaEffect_SetupAction(this, EnOkarinaEffect_TriggerStorm);
}
void EnOkarinaEffect_TriggerStorm(EnOkarinaEffect* this, GlobalContext* globalCtx) {
- this->timer = 400; // 20 seconds
- globalCtx->envCtx.unk_F2[0] = 20; // rain intensity target
- globalCtx->envCtx.gloomySkyMode = 1; // start gloomy sky
- if ((gWeatherMode != 0) || globalCtx->envCtx.unk_17 != 0) {
- globalCtx->envCtx.unk_DE = 1;
+ this->timer = 400; // 20 seconds
+ globalCtx->envCtx.precipitation[PRECIP_SOS_MAX] = 20;
+ globalCtx->envCtx.stormRequest = STORM_REQUEST_START;
+ if ((gWeatherMode != WEATHER_MODE_CLEAR) || globalCtx->envCtx.skyboxConfig != 0) {
+ globalCtx->envCtx.stormState = STORM_STATE_ON;
}
- globalCtx->envCtx.lightningMode = LIGHTNING_MODE_ON;
+ globalCtx->envCtx.lightningState = LIGHTNING_ON;
Environment_PlayStormNatureAmbience(globalCtx);
EnOkarinaEffect_SetupAction(this, EnOkarinaEffect_ManageStorm);
}
@@ -74,7 +75,7 @@ void EnOkarinaEffect_ManageStorm(EnOkarinaEffect* this, GlobalContext* globalCtx
(globalCtx->msgCtx.msgLength == 0) && (!FrameAdvance_IsEnabled(globalCtx)) &&
((globalCtx->transitionMode == TRANS_MODE_OFF) || (gSaveContext.gameMode != 0))) ||
(this->timer >= 250)) {
- if (globalCtx->envCtx.indoors || globalCtx->envCtx.unk_1F != 1) {
+ if ((globalCtx->envCtx.lightMode != LIGHT_MODE_TIME) || globalCtx->envCtx.lightConfig != 1) {
this->timer--;
}
osSyncPrintf("\nthis->timer=[%d]", this->timer);
@@ -84,12 +85,12 @@ void EnOkarinaEffect_ManageStorm(EnOkarinaEffect* this, GlobalContext* globalCtx
}
}
- if (D_8011FB38 != 0) {
+ if (gInterruptSongOfStorms) {
this->timer = 0;
}
if (this->timer == 0) {
- globalCtx->envCtx.unk_F2[0] = 0;
+ globalCtx->envCtx.precipitation[PRECIP_SOS_MAX] = 0;
if (globalCtx->csCtx.state == CS_STATE_IDLE) {
Environment_StopStormNatureAmbience(globalCtx);
} else if (func_800FA0B4(SEQ_PLAYER_BGM_MAIN) == NA_BGM_NATURE_AMBIENCE) {
@@ -97,14 +98,14 @@ void EnOkarinaEffect_ManageStorm(EnOkarinaEffect* this, GlobalContext* globalCtx
Audio_SetNatureAmbienceChannelIO(NATURE_CHANNEL_RAIN, CHANNEL_IO_PORT_1, 0);
}
osSyncPrintf("\n\n\nE_wether_flg=[%d]", gWeatherMode);
- osSyncPrintf("\nrain_evt_trg=[%d]\n\n", globalCtx->envCtx.gloomySkyMode);
- if (gWeatherMode == 0 && (globalCtx->envCtx.gloomySkyMode == 1)) {
- globalCtx->envCtx.gloomySkyMode = 2; // end gloomy sky
+ osSyncPrintf("\nrain_evt_trg=[%d]\n\n", globalCtx->envCtx.stormRequest);
+ if (gWeatherMode == WEATHER_MODE_CLEAR && (globalCtx->envCtx.stormRequest == STORM_REQUEST_START)) {
+ globalCtx->envCtx.stormRequest = STORM_REQUEST_STOP;
} else {
- globalCtx->envCtx.gloomySkyMode = 0;
- globalCtx->envCtx.unk_DE = 0;
+ globalCtx->envCtx.stormRequest = STORM_REQUEST_NONE;
+ globalCtx->envCtx.stormState = STORM_STATE_OFF;
}
- globalCtx->envCtx.lightningMode = LIGHTNING_MODE_LAST;
+ globalCtx->envCtx.lightningState = LIGHTNING_LAST;
Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.c b/src/overlays/actors/ovl_En_Owl/z_en_owl.c
index 30c6c0d14..d43781b4c 100644
--- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c
+++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c
@@ -957,7 +957,7 @@ void func_80ACC00C(EnOwl* this, GlobalContext* globalCtx) {
this->actionFunc = EnOwl_WaitDefault;
this->unk_40A = 0;
this->actionFlags |= 0x80;
- gTimeIncrement = 0;
+ gTimeSpeed = 0;
}
}
diff --git a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
index 918de6d63..ac68fb7b3 100644
--- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
+++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
@@ -815,7 +815,7 @@ void func_80ADB17C(EnPoSisters* this, GlobalContext* globalCtx) {
if (this->unk_194 == 0) {
Flags_UnsetSwitch(globalCtx, 0x1B);
}
- globalCtx->envCtx.unk_BF = 0xFF;
+ globalCtx->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
func_80078884(NA_SE_SY_CORRECT_CHIME);
Actor_Kill(&this->actor);
} else if (this->unk_19A < 32) {
@@ -1093,7 +1093,7 @@ void func_80ADBF58(EnPoSisters* this, GlobalContext* globalCtx) {
this->unk_19A--;
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.world.rot.y, 0x500);
if (this->unk_19A == 0 && this->unk_194 == 0) {
- globalCtx->envCtx.unk_BF = 4;
+ globalCtx->envCtx.lightSettingOverride = 4;
}
if (this->unk_19A < 0) {
Math_StepToF(&this->actor.speedXZ, 5.0f, 0.2f);
diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c
index 257200c83..4e5388e62 100644
--- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c
+++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c
@@ -491,7 +491,7 @@ void EnTk_Init(Actor* thisx, GlobalContext* globalCtx) {
CollisionCheck_SetInfo2(&this->actor.colChkInfo, NULL, &sColChkInfoInit);
- if (gSaveContext.dayTime <= 0xC000 || gSaveContext.dayTime >= 0xE000 || !!LINK_IS_ADULT ||
+ if (gSaveContext.dayTime <= CLOCK_TIME(18, 0) || gSaveContext.dayTime >= CLOCK_TIME(21, 0) || !!LINK_IS_ADULT ||
globalCtx->sceneNum != SCENE_SPOT02) {
Actor_Kill(&this->actor);
return;
diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c
index e50d950a6..3d904c28f 100644
--- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c
+++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c
@@ -127,39 +127,42 @@ void EnWeatherTag_Init(Actor* thisx, GlobalContext* globalCtx) {
}
}
-u8 WeatherTag_CheckEnableWeatherEffect(EnWeatherTag* this, GlobalContext* globalCtx, u8 arg2, u8 arg3, u8 arg4, u8 arg5,
- u16 arg6, u8 weatherMode) {
+u8 WeatherTag_CheckEnableWeatherEffect(EnWeatherTag* this, GlobalContext* globalCtx, u8 skyboxConfig,
+ u8 changeSkyboxNextConfig, u8 lightConfig, u8 changeLightNextConfig,
+ u16 changeDuration, u8 weatherMode) {
s32 pad;
u8 ret = false;
Player* player = GET_PLAYER(globalCtx);
if (Actor_WorldDistXZToActor(&player->actor, &this->actor) < WEATHER_TAG_RANGE100(this->actor.params)) {
- if ((globalCtx->envCtx.indoors != 0) || !gSkyboxBlendingEnabled ||
- (globalCtx->skyboxId != SKYBOX_NORMAL_SKY && globalCtx->envCtx.unk_1F == globalCtx->envCtx.unk_20)) {
- D_8011FB38 = 1;
- if (globalCtx->envCtx.gloomySkyMode == 0 &&
- (globalCtx->envCtx.indoors != 0 || (globalCtx->envCtx.unk_1F != 1 && globalCtx->envCtx.unk_21 == 0))) {
- D_8011FB38 = 0;
+ if ((globalCtx->envCtx.lightMode != LIGHT_MODE_TIME) || !gSkyboxIsChanging ||
+ (globalCtx->skyboxId != SKYBOX_NORMAL_SKY &&
+ globalCtx->envCtx.lightConfig == globalCtx->envCtx.changeLightNextConfig)) {
+ gInterruptSongOfStorms = true;
+ if (globalCtx->envCtx.stormRequest == STORM_REQUEST_NONE &&
+ ((globalCtx->envCtx.lightMode != LIGHT_MODE_TIME) ||
+ (globalCtx->envCtx.lightConfig != 1 && !globalCtx->envCtx.changeLightEnabled))) {
+ gInterruptSongOfStorms = false;
if (gWeatherMode != weatherMode) {
gWeatherMode = weatherMode;
- if (globalCtx->envCtx.gloomySkyMode == 0) {
- globalCtx->envCtx.unk_19 = 1;
- globalCtx->envCtx.unk_17 = arg2;
- globalCtx->envCtx.unk_18 = arg3;
- globalCtx->envCtx.unk_1A = arg6;
- globalCtx->envCtx.unk_21 = 1;
- globalCtx->envCtx.unk_1F = arg4;
- globalCtx->envCtx.unk_20 = arg5;
- D_8011FB34 = arg5;
- globalCtx->envCtx.unk_24 = arg6;
- globalCtx->envCtx.unk_22 = globalCtx->envCtx.unk_24;
+ if (globalCtx->envCtx.stormRequest == STORM_REQUEST_NONE) {
+ globalCtx->envCtx.changeSkyboxState = CHANGE_SKYBOX_REQUESTED;
+ globalCtx->envCtx.skyboxConfig = skyboxConfig;
+ globalCtx->envCtx.changeSkyboxNextConfig = changeSkyboxNextConfig;
+ globalCtx->envCtx.changeSkyboxTimer = changeDuration;
+ globalCtx->envCtx.changeLightEnabled = true;
+ globalCtx->envCtx.lightConfig = lightConfig;
+ globalCtx->envCtx.changeLightNextConfig = changeLightNextConfig;
+ gLightConfigAfterUnderwater = changeLightNextConfig;
+ globalCtx->envCtx.changeDuration = changeDuration;
+ globalCtx->envCtx.changeLightTimer = globalCtx->envCtx.changeDuration;
}
}
ret = true;
}
} else {
- if (gTimeIncrement != 0) {
- gSaveContext.dayTime += 0x14;
+ if (gTimeSpeed != 0) {
+ gSaveContext.dayTime += 20;
}
}
}
@@ -167,42 +170,45 @@ u8 WeatherTag_CheckEnableWeatherEffect(EnWeatherTag* this, GlobalContext* global
return ret;
}
-u8 WeatherTag_CheckRestoreWeather(EnWeatherTag* this, GlobalContext* globalCtx, u8 arg2, u8 arg3, u8 arg4, u8 arg5,
- u16 arg6) {
+u8 WeatherTag_CheckRestoreWeather(EnWeatherTag* this, GlobalContext* globalCtx, u8 skyboxConfig,
+ u8 changeSkyboxNextConfig, u8 lightConfig, u8 changeLightNextConfig,
+ u16 changeDuration) {
s32 pad;
u8 ret = false;
Player* player = GET_PLAYER(globalCtx);
if ((WEATHER_TAG_RANGE100(this->actor.params) + 100.0f) < Actor_WorldDistXZToActor(&player->actor, &this->actor)) {
- if (globalCtx->envCtx.indoors != 0 || !gSkyboxBlendingEnabled ||
- (globalCtx->skyboxId != SKYBOX_NORMAL_SKY && globalCtx->envCtx.unk_1F == globalCtx->envCtx.unk_20)) {
- D_8011FB38 = 1;
- if ((globalCtx->envCtx.gloomySkyMode == 0) &&
- (globalCtx->envCtx.indoors != 0 || (globalCtx->envCtx.unk_1F != 1 && globalCtx->envCtx.unk_21 == 0))) {
- D_8011FB38 = 0;
- gWeatherMode = 0;
- globalCtx->envCtx.unk_19 = 1;
- globalCtx->envCtx.unk_17 = arg2;
- globalCtx->envCtx.unk_18 = arg3;
- globalCtx->envCtx.unk_1A = arg6;
- globalCtx->envCtx.unk_21 = 1;
- globalCtx->envCtx.unk_1F = arg4;
- globalCtx->envCtx.unk_20 = arg5;
- D_8011FB34 = arg5;
- globalCtx->envCtx.unk_24 = arg6;
- globalCtx->envCtx.unk_22 = globalCtx->envCtx.unk_24;
+ if ((globalCtx->envCtx.lightMode != LIGHT_MODE_TIME) || !gSkyboxIsChanging ||
+ (globalCtx->skyboxId != SKYBOX_NORMAL_SKY &&
+ globalCtx->envCtx.lightConfig == globalCtx->envCtx.changeLightNextConfig)) {
+ gInterruptSongOfStorms = true;
+ if ((globalCtx->envCtx.stormRequest == STORM_REQUEST_NONE) &&
+ ((globalCtx->envCtx.lightMode != LIGHT_MODE_TIME) ||
+ (globalCtx->envCtx.lightConfig != 1 && !globalCtx->envCtx.changeLightEnabled))) {
+ gInterruptSongOfStorms = false;
+ gWeatherMode = WEATHER_MODE_CLEAR;
+ globalCtx->envCtx.changeSkyboxState = CHANGE_SKYBOX_REQUESTED;
+ globalCtx->envCtx.skyboxConfig = skyboxConfig;
+ globalCtx->envCtx.changeSkyboxNextConfig = changeSkyboxNextConfig;
+ globalCtx->envCtx.changeSkyboxTimer = changeDuration;
+ globalCtx->envCtx.changeLightEnabled = true;
+ globalCtx->envCtx.lightConfig = lightConfig;
+ globalCtx->envCtx.changeLightNextConfig = changeLightNextConfig;
+ gLightConfigAfterUnderwater = changeLightNextConfig;
+ globalCtx->envCtx.changeDuration = changeDuration;
+ globalCtx->envCtx.changeLightTimer = globalCtx->envCtx.changeDuration;
ret = true;
}
- } else if (gTimeIncrement != 0) {
- gSaveContext.dayTime += 0x14;
+ } else if (gTimeSpeed != 0) {
+ gSaveContext.dayTime += 20;
}
}
return ret;
}
void EnWeatherTag_DisabledCloudyHyruleMarket(EnWeatherTag* this, GlobalContext* globalCtx) {
- if (WeatherTag_CheckEnableWeatherEffect(this, globalCtx, 0, 1, 0, 3, 60, 1)) {
+ if (WeatherTag_CheckEnableWeatherEffect(this, globalCtx, 0, 1, 0, 3, 60, WEATHER_MODE_CLOUDY_CONFIG3)) {
EnWeatherTag_SetupAction(this, EnWeatherTag_EnabledCloudyHyruleMarket);
}
}
@@ -214,7 +220,7 @@ void EnWeatherTag_EnabledCloudyHyruleMarket(EnWeatherTag* this, GlobalContext* g
}
void EnWeatherTag_DisabledCloudyLonLonRanch(EnWeatherTag* this, GlobalContext* globalCtx) {
- if (WeatherTag_CheckEnableWeatherEffect(this, globalCtx, 0, 1, 0, 2, 100, 2)) {
+ if (WeatherTag_CheckEnableWeatherEffect(this, globalCtx, 0, 1, 0, 2, 100, WEATHER_MODE_CLOUDY_CONFIG2)) {
EnWeatherTag_SetupAction(this, EnWeatherTag_EnabledCloudyLonLonRanch);
}
}
@@ -226,7 +232,7 @@ void EnWeatherTag_EnabledCloudyLonLonRanch(EnWeatherTag* this, GlobalContext* gl
}
void EnWeatherTag_DisabledCloudyDeathMountain(EnWeatherTag* this, GlobalContext* globalCtx) {
- if (WeatherTag_CheckEnableWeatherEffect(this, globalCtx, 0, 1, 0, 2, 60, 2)) {
+ if (WeatherTag_CheckEnableWeatherEffect(this, globalCtx, 0, 1, 0, 2, 60, WEATHER_MODE_CLOUDY_CONFIG2)) {
EnWeatherTag_SetupAction(this, EnWeatherTag_EnabledCloudyDeathMountain);
}
}
@@ -238,23 +244,23 @@ void EnWeatherTag_EnabledCloudyDeathMountain(EnWeatherTag* this, GlobalContext*
}
void EnWeatherTag_DisabledCloudySnow(EnWeatherTag* this, GlobalContext* globalCtx) {
- if (WeatherTag_CheckEnableWeatherEffect(this, globalCtx, 0, 1, 0, 2, 60, 3)) {
- globalCtx->envCtx.unk_EE[3] = 64;
+ if (WeatherTag_CheckEnableWeatherEffect(this, globalCtx, 0, 1, 0, 2, 60, WEATHER_MODE_SNOW)) {
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_MAX] = 64;
EnWeatherTag_SetupAction(this, EnWeatherTag_EnabledCloudySnow);
}
}
void EnWeatherTag_EnabledCloudySnow(EnWeatherTag* this, GlobalContext* globalCtx) {
if (WeatherTag_CheckRestoreWeather(this, globalCtx, 1, 0, 2, 0, 60)) {
- globalCtx->envCtx.unk_EE[3] = 0;
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_MAX] = 0;
EnWeatherTag_SetupAction(this, EnWeatherTag_DisabledCloudySnow);
}
}
void EnWeatherTag_DisabledRainLakeHylia(EnWeatherTag* this, GlobalContext* globalCtx) {
- if (WeatherTag_CheckEnableWeatherEffect(this, globalCtx, 0, 1, 0, 2, 100, 4)) {
+ if (WeatherTag_CheckEnableWeatherEffect(this, globalCtx, 0, 1, 0, 2, 100, WEATHER_MODE_RAIN)) {
Environment_PlayStormNatureAmbience(globalCtx);
- globalCtx->envCtx.unk_EE[0] = 25;
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] = 25;
EnWeatherTag_SetupAction(this, EnWeatherTag_EnabledRainLakeHylia);
}
}
@@ -262,16 +268,16 @@ void EnWeatherTag_DisabledRainLakeHylia(EnWeatherTag* this, GlobalContext* globa
void EnWeatherTag_EnabledRainLakeHylia(EnWeatherTag* this, GlobalContext* globalCtx) {
if (WeatherTag_CheckRestoreWeather(this, globalCtx, 1, 0, 2, 0, 100)) {
Environment_StopStormNatureAmbience(globalCtx);
- globalCtx->envCtx.unk_EE[0] = 0;
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] = 0;
EnWeatherTag_SetupAction(this, EnWeatherTag_DisabledRainLakeHylia);
}
}
void EnWeatherTag_DisabledCloudyRainThunderKakariko(EnWeatherTag* this, GlobalContext* globalCtx) {
- if (WeatherTag_CheckEnableWeatherEffect(this, globalCtx, 0, 1, 0, 4, 100, 5)) {
+ if (WeatherTag_CheckEnableWeatherEffect(this, globalCtx, 0, 1, 0, 4, 100, WEATHER_MODE_HEAVY_RAIN)) {
Environment_PlayStormNatureAmbience(globalCtx);
- globalCtx->envCtx.lightningMode = LIGHTNING_MODE_ON;
- globalCtx->envCtx.unk_EE[0] = 30;
+ globalCtx->envCtx.lightningState = LIGHTNING_ON;
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] = 30;
EnWeatherTag_SetupAction(this, EnWeatherTag_EnabledCloudyRainThunderKakariko);
}
}
@@ -279,8 +285,8 @@ void EnWeatherTag_DisabledCloudyRainThunderKakariko(EnWeatherTag* this, GlobalCo
void EnWeatherTag_EnabledCloudyRainThunderKakariko(EnWeatherTag* this, GlobalContext* globalCtx) {
if (WeatherTag_CheckRestoreWeather(this, globalCtx, 1, 0, 4, 0, 100)) {
Environment_StopStormNatureAmbience(globalCtx);
- globalCtx->envCtx.lightningMode = LIGHTNING_MODE_LAST;
- globalCtx->envCtx.unk_EE[0] = 0;
+ globalCtx->envCtx.lightningState = LIGHTNING_LAST;
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] = 0;
EnWeatherTag_SetupAction(this, EnWeatherTag_DisabledCloudyRainThunderKakariko);
}
}
@@ -302,8 +308,8 @@ void EnWeatherTag_DisabledRainThunder(EnWeatherTag* this, GlobalContext* globalC
if (Actor_WorldDistXZToActor(&player->actor, &this->actor) < WEATHER_TAG_RANGE100(this->actor.params)) {
Environment_PlayStormNatureAmbience(globalCtx);
- globalCtx->envCtx.lightningMode = LIGHTNING_MODE_ON;
- globalCtx->envCtx.unk_EE[0] = 25;
+ globalCtx->envCtx.lightningState = LIGHTNING_ON;
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] = 25;
EnWeatherTag_SetupAction(this, EnWeatherTag_EnabledRainThunder);
}
}
@@ -313,9 +319,9 @@ void EnWeatherTag_EnabledRainThunder(EnWeatherTag* this, GlobalContext* globalCt
if ((WEATHER_TAG_RANGE100(this->actor.params) + 10.0f) < Actor_WorldDistXZToActor(&player->actor, &this->actor)) {
Environment_StopStormNatureAmbience(globalCtx);
- globalCtx->envCtx.lightningMode = LIGHTNING_MODE_LAST;
- globalCtx->envCtx.unk_EE[0] = 0;
- globalCtx->envCtx.unk_EE[1] = 10;
+ globalCtx->envCtx.lightningState = LIGHTNING_LAST;
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_MAX] = 0;
+ globalCtx->envCtx.precipitation[PRECIP_RAIN_CUR] = 10;
EnWeatherTag_SetupAction(this, EnWeatherTag_DisabledRainThunder);
}
}
diff --git a/src/overlays/actors/ovl_En_fHG/z_en_fhg.c b/src/overlays/actors/ovl_En_fHG/z_en_fhg.c
index e72378ee4..fb717a60e 100644
--- a/src/overlays/actors/ovl_En_fHG/z_en_fhg.c
+++ b/src/overlays/actors/ovl_En_fHG/z_en_fhg.c
@@ -272,8 +272,8 @@ void EnfHG_Intro(EnfHG* this, GlobalContext* globalCtx) {
-10.0f);
}
if (this->timers[0] == 90) {
- globalCtx->envCtx.unk_BF = 2;
- globalCtx->envCtx.unk_D6 = 0x14;
+ globalCtx->envCtx.lightSettingOverride = 2;
+ globalCtx->envCtx.lightBlendRateOverride = 20;
}
if (this->timers[0] == 100) {
this->bossGndSignal = FHG_LIGHTNING;
@@ -374,8 +374,8 @@ void EnfHG_Intro(EnfHG* this, GlobalContext* globalCtx) {
Math_ApproachF(&this->subCamAt.z, this->actor.world.pos.z, 0.2f, 50.0f);
osSyncPrintf("TIME %d-------------------------------------------------\n", this->timers[0]);
if (fabsf(this->actor.world.pos.z - (GND_BOSSROOM_CENTER_Z + 400.0f - 0.5f)) < 1.0f) {
- globalCtx->envCtx.unk_BF = 0;
- globalCtx->envCtx.unk_D6 = 0x14;
+ globalCtx->envCtx.lightSettingOverride = 0;
+ globalCtx->envCtx.lightBlendRateOverride = 20;
this->cutsceneState = INTRO_FINISH;
Animation_MorphToLoop(&this->skin.skelAnime, &gPhantomHorseRunningAnim, -3.0f);
this->bossGndSignal = FHG_START_FIGHT;
diff --git a/src/overlays/actors/ovl_Fishing/z_fishing.c b/src/overlays/actors/ovl_Fishing/z_fishing.c
index 5d07edc00..15da091ac 100644
--- a/src/overlays/actors/ovl_Fishing/z_fishing.c
+++ b/src/overlays/actors/ovl_Fishing/z_fishing.c
@@ -863,7 +863,7 @@ void Fishing_Init(Actor* thisx, GlobalContext* globalCtx2) {
D_80B7A684 = 20;
globalCtx->specialEffects = sEffects;
- gTimeIncrement = 1;
+ gTimeSpeed = 1;
D_80B7E0AC = 0;
D_80B7E0A6 = 10;
@@ -3097,11 +3097,12 @@ void Fishing_UpdateFish(Actor* thisx, GlobalContext* globalCtx2) {
}
if (Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_NONE) {
- if ((gSaveContext.dayTime >= 0xC000) && (gSaveContext.dayTime <= 0xC01B)) {
+ if ((gSaveContext.dayTime >= CLOCK_TIME(18, 0)) && (gSaveContext.dayTime <= CLOCK_TIME(18, 0) + 27)) {
this->unk_158 = 7;
this->unk_17A[3] = (s16)Rand_ZeroFloat(150.0f) + 200;
}
- if ((gSaveContext.dayTime >= 0x3AAA) && (gSaveContext.dayTime <= 0x3AC5)) {
+ if ((gSaveContext.dayTime >= CLOCK_TIME(5, 30) - 1) &&
+ (gSaveContext.dayTime < CLOCK_TIME(5, 30) + 27)) {
this->unk_158 = 7;
this->unk_17A[3] = (s16)Rand_ZeroFloat(150.0f) + 200;
}
@@ -3352,9 +3353,9 @@ void Fishing_UpdateFish(Actor* thisx, GlobalContext* globalCtx2) {
multiplier = 1.0f;
}
- if ((gSaveContext.dayTime >= 0xB555) && (gSaveContext.dayTime <= 0xCAAA)) {
+ if ((gSaveContext.dayTime >= CLOCK_TIME(17, 0)) && (gSaveContext.dayTime < CLOCK_TIME(19, 0))) {
multiplier *= 1.75f;
- } else if ((gSaveContext.dayTime >= 0x3555) && (gSaveContext.dayTime <= 0x4AAA)) {
+ } else if ((gSaveContext.dayTime >= CLOCK_TIME(5, 0)) && (gSaveContext.dayTime < CLOCK_TIME(7, 0))) {
multiplier *= 1.5f;
} else if (D_80B7E076 != 0) {
multiplier *= 1.5f;
@@ -5574,9 +5575,9 @@ void Fishing_UpdateOwner(Actor* thisx, GlobalContext* globalCtx2) {
if (sREG(15) != 0) {
if (D_80B7A654 != (sREG(15) - 1)) {
if (D_80B7A654 == 0) {
- globalCtx->envCtx.gloomySkyMode = 1;
+ globalCtx->envCtx.stormRequest = STORM_REQUEST_START;
} else {
- globalCtx->envCtx.gloomySkyMode = 2;
+ globalCtx->envCtx.stormRequest = STORM_REQUEST_STOP;
}
}
@@ -5584,10 +5585,10 @@ void Fishing_UpdateOwner(Actor* thisx, GlobalContext* globalCtx2) {
}
if (sREG(14) == 1) {
- globalCtx->envCtx.gloomySkyMode = 1;
+ globalCtx->envCtx.stormRequest = STORM_REQUEST_START;
}
if (sREG(14) == -1) {
- globalCtx->envCtx.gloomySkyMode = 2;
+ globalCtx->envCtx.stormRequest = STORM_REQUEST_STOP;
}
sREG(14) = 0;
@@ -5606,10 +5607,10 @@ void Fishing_UpdateOwner(Actor* thisx, GlobalContext* globalCtx2) {
if (Rand_ZeroOne() < 0.5f) {
D_80B7A654 = (u8)Rand_ZeroFloat(10.0f) + 5;
- globalCtx->envCtx.gloomySkyMode = 1;
+ globalCtx->envCtx.stormRequest = STORM_REQUEST_START;
} else {
D_80B7A654 = 0;
- globalCtx->envCtx.gloomySkyMode = 2;
+ globalCtx->envCtx.stormRequest = STORM_REQUEST_STOP;
}
}
diff --git a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c
index bbfe33d5f..60735d495 100644
--- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c
+++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c
@@ -222,12 +222,13 @@ void ObjectKankyo_Fairies(ObjectKankyo* this, GlobalContext* globalCtx) {
}
}
- if (globalCtx->envCtx.unk_EE[3] < 64 && (gSaveContext.entranceIndex != ENTR_SPOT04_0 ||
- gSaveContext.sceneSetupIndex != 4 || globalCtx->envCtx.unk_EE[3])) {
- globalCtx->envCtx.unk_EE[3] += 16;
+ if (globalCtx->envCtx.precipitation[PRECIP_SNOW_MAX] < 64 &&
+ (gSaveContext.entranceIndex != ENTR_SPOT04_0 || gSaveContext.sceneSetupIndex != 4 ||
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_MAX])) {
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_MAX] += 16;
}
- for (i = 0; i < globalCtx->envCtx.unk_EE[3]; i++) {
+ for (i = 0; i < globalCtx->envCtx.precipitation[PRECIP_SNOW_MAX]; i++) {
// spawn in front of the camera
dx = globalCtx->view.at.x - globalCtx->view.eye.x;
dy = globalCtx->view.at.y - globalCtx->view.eye.y;
@@ -495,7 +496,7 @@ void ObjectKankyo_DrawFairies(ObjectKankyo* this2, GlobalContext* globalCtx2) {
gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(gSun1Tex));
gSPDisplayList(POLY_XLU_DISP++, gKokiriDustMoteMaterialDL);
- for (i = 0; i < globalCtx->envCtx.unk_EE[3]; i++) {
+ for (i = 0; i < globalCtx->envCtx.precipitation[PRECIP_SNOW_MAX]; i++) {
Matrix_Translate(this->effects[i].base.x + this->effects[i].pos.x,
this->effects[i].base.y + this->effects[i].pos.y,
this->effects[i].base.z + this->effects[i].pos.z, MTXMODE_NEW);
@@ -586,17 +587,18 @@ void ObjectKankyo_DrawSnow(ObjectKankyo* this2, GlobalContext* globalCtx2) {
if (!(globalCtx->cameraPtrs[CAM_ID_MAIN]->unk_14C & 0x100)) {
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_object_kankyo.c", 958);
- if (globalCtx->envCtx.unk_EE[2] < globalCtx->envCtx.unk_EE[3]) {
+ if (globalCtx->envCtx.precipitation[PRECIP_SNOW_CUR] < globalCtx->envCtx.precipitation[PRECIP_SNOW_MAX]) {
if (globalCtx->state.frames % 16 == 0) {
- globalCtx->envCtx.unk_EE[2] += 2;
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_CUR] += 2;
}
- } else if (globalCtx->envCtx.unk_EE[2] > globalCtx->envCtx.unk_EE[3]) {
+ } else if (globalCtx->envCtx.precipitation[PRECIP_SNOW_CUR] >
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_MAX]) {
if (globalCtx->state.frames % 16 == 0) {
- globalCtx->envCtx.unk_EE[2] -= 2;
+ globalCtx->envCtx.precipitation[PRECIP_SNOW_CUR] -= 2;
}
}
- for (i = 0; i < globalCtx->envCtx.unk_EE[2]; i++) {
+ for (i = 0; i < globalCtx->envCtx.precipitation[PRECIP_SNOW_CUR]; i++) {
switch (this->effects[i].state) {
case 0:
// spawn in front of the camera
diff --git a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
index 157345473..4879970ad 100644
--- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
+++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
@@ -80,7 +80,7 @@ void OceffSpot_End(OceffSpot* this, GlobalContext* globalCtx) {
this->unk_174 -= 0.05f;
} else {
Actor_Kill(&this->actor);
- if (gTimeIncrement != 400 && globalCtx->msgCtx.unk_E40E == 0 &&
+ if (gTimeSpeed != 400 && globalCtx->msgCtx.unk_E40E == 0 &&
GET_EVENTINF_HORSES_STATE() != EVENTINF_HORSES_STATE_1) {
if (globalCtx->msgCtx.ocarinaAction != OCARINA_ACTION_CHECK_NOWARP_DONE ||
globalCtx->msgCtx.ocarinaMode != OCARINA_MODE_08) {
diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c
index 231abea0e..8c67cafec 100644
--- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c
+++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c
@@ -179,7 +179,8 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, GlobalContext* globalCtx) {
}
Actor_Kill(&this->actor);
} else {
- if (!(this->actor.xzDistToPlayer > 120.0f) && gSaveContext.dayTime >= 0x4555 && gSaveContext.dayTime < 0x5000) {
+ if (!(this->actor.xzDistToPlayer > 120.0f) && gSaveContext.dayTime >= CLOCK_TIME(6, 30) &&
+ gSaveContext.dayTime < CLOCK_TIME(7, 30)) {
cylinderPos.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + globalCtx->envCtx.sunPos.x * (1.0f / 6.0f);
cylinderPos.y =
player->bodyPartsPos[PLAYER_BODYPART_HEAD].y - 30.0f + globalCtx->envCtx.sunPos.y * (1.0f / 6.0f);
diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c
index 7ab775688..c70fae7e0 100644
--- a/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/src/overlays/actors/ovl_player_actor/z_player.c
@@ -4162,6 +4162,7 @@ s32 func_80839034(GlobalContext* globalCtx, Player* this, CollisionPoly* poly, u
Scene_SetTransitionForNextEntrance(globalCtx);
} else {
globalCtx->nextEntranceIndex = globalCtx->setupExitList[exitIndex - 1];
+
if (globalCtx->nextEntranceIndex == ENTR_RETURN_GROTTO) {
gSaveContext.respawnFlag = 2;
globalCtx->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_RETURN].entranceIndex;
@@ -4179,9 +4180,11 @@ s32 func_80839034(GlobalContext* globalCtx, Player* this, CollisionPoly* poly, u
Play_TriggerVoidOut(globalCtx);
gSaveContext.respawnFlag = -2;
}
- gSaveContext.unk_13C3 = 1;
+
+ gSaveContext.retainWeatherMode = true;
Scene_SetTransitionForNextEntrance(globalCtx);
}
+
globalCtx->transitionTrigger = TRANS_TRIGGER_START;
}
@@ -9700,8 +9703,8 @@ void func_80847BA0(GlobalContext* globalCtx, Player* this) {
Audio_SetCodeReverb(SurfaceType_GetEcho(&globalCtx->colCtx, floorPoly, this->actor.floorBgId));
if (this->actor.floorBgId == BGCHECK_SCENE) {
- func_80074CE8(globalCtx,
- SurfaceType_GetLightSettingIndex(&globalCtx->colCtx, floorPoly, this->actor.floorBgId));
+ Environment_ChangeLightSetting(
+ globalCtx, SurfaceType_GetLightSettingIndex(&globalCtx->colCtx, floorPoly, this->actor.floorBgId));
} else {
func_80043508(&globalCtx->colCtx, this->actor.floorBgId);
}
diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c
index 01efdabac..aabd9b464 100644
--- a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c
+++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c
@@ -1476,13 +1476,13 @@ void FileChoose_LoadGame(GameState* thisx) {
gSaveContext.unk_13F0 = 0;
gSaveContext.unk_13F2 = 0;
gSaveContext.forcedSeqId = NA_BGM_GENERAL_SFX;
- gSaveContext.skyboxTime = 0;
+ gSaveContext.skyboxTime = CLOCK_TIME(0, 0);
gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT;
gSaveContext.nextCutsceneIndex = 0xFFEF;
gSaveContext.cutsceneTrigger = 0;
gSaveContext.chamberCutsceneNum = 0;
- gSaveContext.nextDayTime = 0xFFFF;
- gSaveContext.unk_13C3 = 0;
+ gSaveContext.nextDayTime = NEXT_TIME_NONE;
+ gSaveContext.retainWeatherMode = false;
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = gSaveContext.buttonStatus[4] = BTN_ENABLED;
@@ -1826,28 +1826,28 @@ void FileChoose_InitContext(GameState* thisx) {
ShrinkWindow_SetVal(0);
- gSaveContext.skyboxTime = 0;
- gSaveContext.dayTime = 0;
+ gSaveContext.skyboxTime = CLOCK_TIME(0, 0);
+ gSaveContext.dayTime = CLOCK_TIME(0, 0);
Skybox_Init(&this->state, &this->skyboxCtx, SKYBOX_NORMAL_SKY);
- gTimeIncrement = 10;
+ gTimeSpeed = 10;
- envCtx->unk_19 = 0;
- envCtx->unk_1A = 0;
- envCtx->unk_21 = 0;
- envCtx->unk_22 = 0;
+ envCtx->changeSkyboxState = CHANGE_SKYBOX_INACTIVE;
+ envCtx->changeSkyboxTimer = 0;
+ envCtx->changeLightEnabled = false;
+ envCtx->changeLightTimer = 0;
envCtx->skyboxDmaState = SKYBOX_DMA_INACTIVE;
envCtx->skybox1Index = 99;
envCtx->skybox2Index = 99;
- envCtx->unk_1F = 0;
- envCtx->unk_20 = 0;
- envCtx->unk_BD = 0;
- envCtx->unk_17 = 2;
+ envCtx->lightConfig = 0;
+ envCtx->changeLightNextConfig = 0;
+ envCtx->lightSetting = 0;
+ envCtx->skyboxConfig = 2;
envCtx->skyboxDisabled = 0;
envCtx->skyboxBlend = 0;
- envCtx->unk_84 = 0.0f;
- envCtx->unk_88 = 0.0f;
+ envCtx->glareAlpha = 0.0f;
+ envCtx->lensFlareAlphaScale = 0.0f;
Environment_UpdateSkybox(SKYBOX_NORMAL_SKY, &this->envCtx, &this->skyboxCtx);
diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c
index d312ac9d3..6f4bff496 100644
--- a/src/overlays/gamestates/ovl_select/z_select.c
+++ b/src/overlays/gamestates/ovl_select/z_select.c
@@ -35,7 +35,7 @@ void Select_LoadGame(SelectContext* this, s32 entranceIndex) {
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.natureAmbienceId = 0xFF;
gSaveContext.showTitleCard = true;
- gWeatherMode = 0;
+ gWeatherMode = WEATHER_MODE_CLEAR;
this->state.running = false;
SET_NEXT_GAMESTATE(&this->state, Play_Init, GlobalContext);
}
@@ -593,16 +593,16 @@ void Select_PrintCutsceneSetting(SelectContext* this, GfxPrint* printer, u16 csI
switch (csIndex) {
case 0:
label = GFXP_HIRAGANA " ヨル " GFXP_KATAKANA "ゴロン";
- gSaveContext.dayTime = 0;
+ gSaveContext.dayTime = CLOCK_TIME(0, 0);
break;
case 0x8000:
// clang-format off
- gSaveContext.dayTime = 0x8000; label = GFXP_HIRAGANA "オヒル " GFXP_KATAKANA "ジャラ";
+ gSaveContext.dayTime = CLOCK_TIME(12, 0); label = GFXP_HIRAGANA "オヒル " GFXP_KATAKANA "ジャラ";
// clang-format on
break;
case 0xFFF0:
// clang-format off
- gSaveContext.dayTime = 0x8000; label = "デモ00";
+ gSaveContext.dayTime = CLOCK_TIME(12, 0); label = "デモ00";
// clang-format on
break;
case 0xFFF1: