summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorDerek Hensley <hensley.derek58@gmail.com>2023-10-04 22:08:08 -0700
committerGitHub <noreply@github.com>2023-10-05 16:08:08 +1100
commit03d1a794e1fe3995ae3f4ca99e244e4b14310092 (patch)
tree130f54be4a4a0e932307e347b5739c252e98858b /src/code
parentd3104be63caa4060a87ff169f42bf255d6a2a08c (diff)
z_kankyo pt 1 (#1377)
* z64environment.h * remove todo * Cleanup * data + bss + 2 functions * Bring over simple functions * Remove lerp comment * code functions csv * Remove docs changes * ZBufValToFixedPoint * Remove leading 0's * SEGMENT macros * eventDayCount * format * z64bombers_notebook.h * fix merge * Comments --------- Co-authored-by: angie <angheloalf95@gmail.com>
Diffstat (limited to 'src/code')
-rw-r--r--src/code/graph.c1
-rw-r--r--src/code/sys_cfb.c1
-rw-r--r--src/code/z_common_data.c2
-rw-r--r--src/code/z_demo.c43
-rw-r--r--src/code/z_game_over.c8
-rw-r--r--src/code/z_kankyo.c967
-rw-r--r--src/code/z_lib.c2
-rw-r--r--src/code/z_lights.c14
-rw-r--r--src/code/z_parameter.c2
-rw-r--r--src/code/z_play.c50
-rw-r--r--src/code/z_room.c8
-rw-r--r--src/code/z_scene.c10
-rw-r--r--src/code/z_sram_NES.c6
13 files changed, 976 insertions, 138 deletions
diff --git a/src/code/graph.c b/src/code/graph.c
index ad4ad0286..3a178d2b8 100644
--- a/src/code/graph.c
+++ b/src/code/graph.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "z64.h"
#include "regs.h"
#include "functions.h"
diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c
index 383a35cc9..32600643a 100644
--- a/src/code/sys_cfb.c
+++ b/src/code/sys_cfb.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "z64.h"
#include "regs.h"
#include "functions.h"
diff --git a/src/code/z_common_data.c b/src/code/z_common_data.c
index 976b0fd4d..f0805c46b 100644
--- a/src/code/z_common_data.c
+++ b/src/code/z_common_data.c
@@ -12,7 +12,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 11d614fc1..300a3c20f 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -1,6 +1,4 @@
#include "PR/ultratypes.h"
-#include "prevent_bss_reordering.h"
-#include "prevent_bss_reordering2.h"
// Variables are put before most headers as a hacky way to bypass bss reordering
struct CutsceneCamera;
@@ -13,6 +11,15 @@ static s16 sBssPad;
u8 gDisablePlayerCsModeStartPos;
s16 gDungeonBossWarpSceneId;
+#include "prevent_bss_reordering.h"
+#include "prevent_bss_reordering2.h"
+// clang-format off
+// Partial structs taken from "prevent_bss_reordering.h"
+struct Dummy200 { int x; };
+struct Dummy201 { int x; };
+struct Dummy202 { int x; };
+// clang-format on
+
#include "global.h"
#include "z64quake.h"
#include "z64rumble.h"
@@ -154,8 +161,8 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
switch (cmd->type) {
case CS_MISC_RAIN:
if (isFirstFrame) {
- func_800FD78C(play);
- play->envCtx.unk_F2[0] = 60;
+ Environment_PlayStormNatureAmbience(play);
+ play->envCtx.precipitation[PRECIP_RAIN_MAX] = 60;
}
break;
@@ -163,19 +170,19 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
if (isFirstFrame) {
Audio_SetAmbienceChannelIO(AMBIENCE_CHANNEL_LIGHTNING, CHANNEL_IO_PORT_0, 0);
Environment_AddLightningBolts(play, 3);
- D_801F4E68 = 1;
+ gLightningStrike.state = LIGHTNING_STRIKE_START;
}
break;
case CS_MISC_LIFT_FOG:
- if (play->envCtx.lightSettings.zFar < 12800) {
- play->envCtx.lightSettings.zFar += 35;
+ if (play->envCtx.adjLightSettings.zFar < 12800) {
+ play->envCtx.adjLightSettings.zFar += 35;
}
break;
case CS_MISC_CLOUDY_SKY:
if (isFirstFrame) {
- play->envCtx.changeSkyboxState = 1;
+ play->envCtx.changeSkyboxState = CHANGE_SKYBOX_REQUESTED;
play->envCtx.skyboxConfig = 1;
play->envCtx.changeSkyboxNextConfig = 0;
play->envCtx.changeSkyboxTimer = 60;
@@ -238,16 +245,16 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
case CS_MISC_RED_PULSATING_LIGHTS:
if (play->state.frames & 8) {
- if (play->envCtx.lightSettings.ambientColor[0] < 40) {
- play->envCtx.lightSettings.ambientColor[0] += 2;
- play->envCtx.lightSettings.diffuseColor1[1] -= 3;
- play->envCtx.lightSettings.diffuseColor1[2] -= 3;
+ if (play->envCtx.adjLightSettings.ambientColor[0] < 40) {
+ play->envCtx.adjLightSettings.ambientColor[0] += 2;
+ play->envCtx.adjLightSettings.light1Color[1] -= 3;
+ play->envCtx.adjLightSettings.light1Color[2] -= 3;
}
} else {
- if (play->envCtx.lightSettings.ambientColor[0] > 2) {
- play->envCtx.lightSettings.ambientColor[0] -= 2;
- play->envCtx.lightSettings.diffuseColor1[1] += 3;
- play->envCtx.lightSettings.diffuseColor1[2] += 3;
+ if (play->envCtx.adjLightSettings.ambientColor[0] > 2) {
+ play->envCtx.adjLightSettings.ambientColor[0] -= 2;
+ play->envCtx.adjLightSettings.light1Color[1] += 3;
+ play->envCtx.adjLightSettings.light1Color[2] += 3;
}
}
break;
@@ -262,7 +269,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
case CS_MISC_SANDSTORM_FILL:
if (isFirstFrame) {
- play->envCtx.sandstormState = 1;
+ play->envCtx.sandstormState = SANDSTORM_FILL;
}
Audio_PlaySfx_2(NA_SE_EV_SAND_STORM - SFX_FLAG);
break;
@@ -409,7 +416,7 @@ void CutsceneCmd_SetLightSetting(PlayState* play, CutsceneContext* csCtx, CsCmdL
play->envCtx.lightSettingOverride = cmd->settingPlusOne - 1;
play->envCtx.lightBlend = 1.0f;
} else {
- play->envCtx.lightSettingOverride = 0xFF;
+ play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
}
}
}
diff --git a/src/code/z_game_over.c b/src/code/z_game_over.c
index c3c6819be..003f5dd7b 100644
--- a/src/code/z_game_over.c
+++ b/src/code/z_game_over.c
@@ -15,7 +15,7 @@ void GameOver_FadeLights(PlayState* play) {
if ((gameOverCtx->state >= GAMEOVER_DEATH_WAIT_GROUND && gameOverCtx->state < GAMEOVER_REVIVE_START) ||
(gameOverCtx->state >= GAMEOVER_REVIVE_RUMBLE && gameOverCtx->state < GAMEOVER_REVIVE_FADE_OUT)) {
- Kankyo_FadeInGameOverLights(play);
+ Environment_FadeInGameOverLights(play);
}
}
@@ -66,7 +66,7 @@ void GameOver_Update(PlayState* play) {
gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE;
gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
gSaveContext.hudVisibilityTimer = 0;
- Kankyo_InitGameOverLights(play);
+ Environment_InitGameOverLights(play);
sGameOverTimer = 20;
Rumble_Request(0.0f, 126, 124, 63);
gameOverCtx->state = GAMEOVER_DEATH_WAIT_GROUND;
@@ -92,7 +92,7 @@ void GameOver_Update(PlayState* play) {
case GAMEOVER_REVIVE_START:
gameOverCtx->state++; // GAMEOVER_REVIVE_RUMBLE
sGameOverTimer = 0;
- Kankyo_InitGameOverLights(play);
+ Environment_InitGameOverLights(play);
ShrinkWindow_Letterbox_SetSizeTarget(32);
break;
@@ -119,7 +119,7 @@ void GameOver_Update(PlayState* play) {
break;
case GAMEOVER_REVIVE_FADE_OUT:
- Kankyo_FadeOutGameOverLights(play);
+ Environment_FadeOutGameOverLights(play);
sGameOverTimer--;
if (sGameOverTimer == 0) {
gameOverCtx->state = GAMEOVER_INACTIVE;
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index 9346af59a..30ea04e16 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -1,156 +1,980 @@
+#include "ultra64.h"
+#include "z64light.h"
+#include "z64math.h"
+
+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
+
+// Variables are put before most headers as a hacky way to bypass bss reordering
+struct LightningStrike;
+
+u8 D_801F4E30;
+u8 D_801F4E31;
+u8 gCustomLensFlare1On;
+Vec3f gCustomLensFlare1Pos;
+f32 D_801F4E44;
+f32 D_801F4E48;
+s16 D_801F4E4C;
+u8 gCustomLensFlare2On;
+Vec3f gCustomLensFlare2Pos;
+f32 D_801F4E5C;
+f32 D_801F4E60;
+s16 D_801F4E64;
+struct LightningStrike gLightningStrike;
+f32 D_801F4E74;
+u16 D_801F4E78;
+u16 gSkyboxNumStars;
+LightningBolt sLightningBolts[3];
+LightNode* sNGameOverLightNode;
+LightInfo sNGameOverLightInfo;
+LightNode* sSGameOverLightNode;
+LightInfo sSGameOverLightInfo;
+f32 sSunEnvAlpha;
+f32 sSunColor;
+f32 sSunScale;
+f32 sSunPrimAlpha;
+s32 sSunDepthTestX;
+s32 sSunDepthTestY;
+f32 D_801F4F28;
+s16 sLightningFlashAlpha;
+u16 sSandstormScroll;
+u8 D_801F4F30;
+u8 D_801F4F31;
+u8 sEnvIsTimeStopped;
+u8 D_801F4F33;
+u8 sGameOverLightsIntensity;
+Gfx* sSkyboxStarsDList;
+
+#include "z64environment.h"
#include "global.h"
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5090.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ZBufValToFixedPoint.s")
+#include "sys_cfb.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
+
+// Data
+f32 sSandstormLerpScale = 0.0f;
+s32 sSunScreenDepth = GPACK_ZDZ(G_MAXFBZ, 0);
+s32 sEnvSkyboxNumStars = 0;
+u16 sTimeJump = 0;
+u8 sSandstormColorIndex = 0;
+u8 sNextSandstormColorIndex = 0;
+u8 D_801BDBA8 = 0;
+u8 D_801BDBAC = 0;
+u8 gWeatherMode = WEATHER_MODE_CLEAR;
+u8 gLightConfigAfterUnderwater = 0;
+u8 gInterruptSongOfStorms = false;
+u8 sSkyboxIsChanging = false;
+u8 D_801BDBC0 = 0;
+u8 D_801BDBC4 = 0;
+u8 gSceneSeqState = SCENESEQ_DEFAULT;
+
+typedef struct {
+ /* 0x0 */ u16 startTime;
+ /* 0x2 */ u16 endTime;
+ /* 0x4 */ u8 lightSetting;
+ /* 0x5 */ u8 nextLightSetting;
+} TimeBasedLightEntry; // size = 0x6
+
+TimeBasedLightEntry sTimeBasedLightConfigs[][7] = {
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 3, 3 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 3, 12 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 1 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 2 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 2, 3 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 3, 3 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 7, 7 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 7, 8 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 4, 5 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 5, 5 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 5, 6 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 6, 7 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 7, 7 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 11, 11 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 11, 8 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 8, 9 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 9, 9 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 9, 10 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 10, 11 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 11, 11 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 15, 15 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 15, 16 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 12, 13 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 13, 13 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 13, 14 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 14, 15 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 15, 15 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 19, 19 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 19, 16 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 16, 17 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 17, 17 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 17, 18 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 18, 19 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 19, 19 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 23, 23 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 23, 20 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 20, 21 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 21, 21 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 21, 22 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 22, 23 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 23, 23 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 27, 27 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(6, 0), 27, 24 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 24, 25 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 25, 25 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 25, 26 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(19, 0), 26, 27 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 27, 27 },
+ },
+};
+
+TimeBasedSkyboxEntry sTimeBasedSkyboxConfigs[][9] = {
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 3, 3 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 3, 4 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 4, 4 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 0, 1 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 1, 2 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 2, 2 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 2, 3 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 3, 3 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 7, 7 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 7, 8 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 8, 8 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 4, 5 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 5, 5 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 5, 6 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 6, 6 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 6, 7 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 7, 7 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 11, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 8, 9 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 9, 9 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 9, 10 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 10, 10 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 10, 11 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 11, 11 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 15, 15 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 15, 16 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 16, 16 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 12, 13 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 13, 13 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 13, 14 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 14, 14 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 14, 15 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 15, 15 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 19, 19 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 19, 20 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 20, 20 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 16, 17 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 17, 17 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 17, 18 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 18, 18 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 0, 18, 19 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 19, 19 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 23, 23 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 23, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 20, 21 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 21, 21 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 21, 22 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 22, 22 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 22, 23 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 23, 23 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 27, 27 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 27, 28 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 28, 28 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 24, 25 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 25, 25 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 25, 26 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 26, 26 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 26, 27 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 27, 27 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 31, 31 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 31, 32 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 32, 32 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 28, 29 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 29, 29 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 29, 30 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 30, 30 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 0, 30, 31 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 31, 31 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 35, 35 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 35, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 32, 33 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 33, 33 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 33, 34 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 34, 34 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 34, 35 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 35, 35 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 39, 39 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 39, 40 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 40, 40 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 36, 37 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 37, 37 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 37, 38 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 38, 38 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 38, 39 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 39, 39 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 43, 43 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 43, 44 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 44, 44 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 0, 40, 41 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 41, 41 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 1, 41, 42 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 42, 42 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 0, 42, 43 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 43, 43 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 47, 47 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 47, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 44, 45 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 45, 45 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 45, 46 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 46, 46 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 46, 47 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 47, 47 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 51, 51 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 51, 48 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 48, 49 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 49, 49 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 49, 49 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 49, 50 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 50, 50 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 50, 51 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 51, 51 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 55, 55 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 55, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 52, 53 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 53, 53 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 53, 54 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 54, 54 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 54, 54 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 55, 55 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 59, 59 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 59, 56 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 56, 56 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 56, 57 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 57, 57 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 57, 58 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 58, 58 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 58, 58 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 59, 59 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 63, 63 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 63, 60 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 60, 60 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 60, 61 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 61, 61 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 61, 62 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 62, 62 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 62, 62 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 63, 63 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 67, 67 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 67, 64 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 64, 64 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 64, 65 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 65, 65 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 65, 66 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 66, 66 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 66, 66 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 67, 67 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 1, 1 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 1, 1 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 71, 71 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 71, 72 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 72, 72 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 68, 69 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 69, 69 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 69, 70 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 70, 70 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 70, 71 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 71, 71 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 75, 75 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 75, 76 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 76, 76 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 72, 73 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 73, 73 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 73, 74 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 74, 74 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 74, 75 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 75, 75 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 79, 79 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 79, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 76, 77 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 77, 77 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 77, 78 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 78, 78 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 78, 79 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 79, 79 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 83, 83 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 83, 84 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 84, 84 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 80, 81 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 81, 81 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 81, 82 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 82, 82 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 82, 83 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 83, 83 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 87, 87 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 87, 88 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 88, 88 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 84, 85 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 85, 85 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 85, 86 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 86, 86 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 86, 87 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 87, 87 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 91, 91 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 91, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 88, 89 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 89, 89 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 89, 90 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 90, 90 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 90, 91 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 91, 91 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 11, 11 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 11, 11 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 95, 95 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 95, 96 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 96, 96 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 92, 93 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 93, 93 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 93, 94 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 94, 94 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 94, 95 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 95, 95 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 1, 1, 99, 99 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 1, 1, 99, 100 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 100, 100 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 96, 97 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 97, 97 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 1, 97, 98 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 1, 1, 98, 98 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 1, 1, 98, 99 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 1, 1, 99, 99 },
+ },
+ {
+ { CLOCK_TIME(0, 0), CLOCK_TIME(4, 0), 0, 0, 103, 103 },
+ { CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), 0, 1, 103, 52 },
+ { CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), 1, 1, 52, 52 },
+ { CLOCK_TIME(6, 0), CLOCK_TIME(8, 0), 1, 1, 100, 101 },
+ { CLOCK_TIME(8, 0), CLOCK_TIME(16, 0), 1, 1, 101, 101 },
+ { CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), 1, 0, 101, 102 },
+ { CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), 0, 0, 102, 102 },
+ { CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), 0, 0, 102, 103 },
+ { CLOCK_TIME(19, 0), CLOCK_TIME(24, 0) - 1, 0, 0, 103, 103 },
+ },
+};
+
+typedef struct {
+ /* 0x0 */ RomFile file;
+ /* 0x8 */ RomFile palette;
+} SkyboxFile; // size = 0x10
+
+SkyboxFile sNormalSkyFiles[] = {
+ {
+ ROM_FILE(d2_fine_static),
+ ROM_FILE_UNSET,
+ },
+ {
+ ROM_FILE(d2_cloud_static),
+ ROM_FILE_UNSET,
+ },
+};
+
+void Environment_GraphCallback(GraphicsContext* gfxCtx, void* arg) {
+ PlayState* play = (PlayState*)arg;
+
+ sSunScreenDepth = SysCfb_GetZBufferPixel(sSunDepthTestX, sSunDepthTestY);
+ Lights_GlowCheck(play);
+}
+
+typedef struct {
+ /* 0x0 */ s32 mantissaShift; // shift applied to the mantissa of the z buffer value
+ /* 0x4 */ s32 base; // 15.3 fixed-point base value for the exponent
+} ZBufValConversionEntry; // size = 0x8
+
+ZBufValConversionEntry sZBufValConversionTable[1 << 3] = {
+ { 6, 0x00000 }, { 5, 0x20000 }, { 4, 0x30000 }, { 3, 0x38000 },
+ { 2, 0x3C000 }, { 1, 0x3E000 }, { 0, 0x3F000 }, { 0, 0x3F800 },
+};
+
+#define ZBUFVAL_EXPONENT(v) (((v) >> 15) & 7)
+#define ZBUFVAL_MANTISSA(v) (((v) >> 4) & 0x7FF)
+
+/**
+ * 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)].mantissaShift) +
+ sZBufValConversionTable[ZBUFVAL_EXPONENT(zBufferVal)].base;
+
+ return ret;
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Init.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5954.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpWeight.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5B10.s")
+u8 Environment_SmoothStepToU8(u8* pvalue, u8 target, u8 scale, u8 step, u8 minStep) {
+ s16 stepSize = 0;
+ s16 diff = target - *pvalue;
+
+ if (target != *pvalue) {
+ stepSize = diff / scale;
+ if ((stepSize >= (s16)minStep) || ((s16)-minStep >= stepSize)) {
+ if ((s16)step < stepSize) {
+ stepSize = step;
+ }
+ if ((s16)-step > stepSize) {
+ stepSize = -step;
+ }
+ *pvalue += (u8)stepSize;
+ } else {
+ if (stepSize < (s16)minStep) {
+ stepSize = minStep;
+ *pvalue += (u8)stepSize;
+ if (target < *pvalue) {
+ *pvalue = target;
+ }
+ }
+ if ((s16)-minStep < stepSize) {
+ stepSize = -minStep;
+ *pvalue += (u8)stepSize;
+ if (*pvalue < target) {
+ *pvalue = target;
+ }
+ }
+ }
+ }
+ return diff;
+}
+
+f32 Environment_LerpWeight(u16 max, u16 min, u16 val) {
+ f32 diff = max - min;
+
+ if (diff != 0.0f) {
+ f32 ret = 1.0f - (max - val) / diff;
+
+ if (!(ret >= 1.0f)) {
+ return ret;
+ }
+ }
+
+ return 1.0f;
+}
+
+f32 Environment_LerpWeightAccelDecel(u16 endFrame, u16 startFrame, u16 curFrame, u16 accelDuration, u16 decelDuration) {
+ f32 endFrameF;
+ f32 startFrameF;
+ f32 curFrameF;
+ f32 accelDurationF;
+ f32 decelDurationF;
+ f32 totalFrames;
+ f32 temp;
+ f32 framesElapsed;
+ f32 ret;
+
+ if (curFrame <= startFrame) {
+ return 0.0f;
+ }
+
+ if (curFrame >= endFrame) {
+ return 1.0f;
+ }
+
+ endFrameF = (s32)endFrame;
+ startFrameF = (s32)startFrame;
+ curFrameF = (s32)curFrame;
+ totalFrames = endFrameF - startFrameF;
+ framesElapsed = curFrameF - startFrameF;
+ accelDurationF = (s32)accelDuration;
+ decelDurationF = (s32)decelDuration;
+
+ if ((startFrameF >= endFrameF) || (accelDurationF + decelDurationF > totalFrames)) {
+ return 0.0f;
+ }
+
+ temp = 1.0f / ((totalFrames * 2.0f) - accelDurationF - decelDurationF);
+
+ if (accelDurationF != 0.0f) {
+ if (framesElapsed <= accelDurationF) {
+ return temp * framesElapsed * framesElapsed / accelDurationF;
+ }
+ ret = temp * accelDurationF;
+ } else {
+ ret = 0.0f;
+ }
+
+ if (framesElapsed <= totalFrames - decelDurationF) {
+ ret += 2.0f * temp * (framesElapsed - accelDurationF);
+ return ret;
+ }
+
+ ret += 2.0f * temp * (totalFrames - accelDurationF - decelDurationF);
+
+ if (decelDurationF != 0.0f) {
+ ret += temp * decelDurationF;
+ if (framesElapsed < totalFrames) {
+ ret -= temp * (totalFrames - framesElapsed) * (totalFrames - framesElapsed) / decelDurationF;
+ }
+ }
+
+ return ret;
+}
+
+Color_RGBA8 sSkyboxPrimColors[] = {
+ { 181, 100, 72, 0 }, { 255, 255, 255, 0 }, { 255, 164, 63, 0 }, { 70, 90, 100, 0 }, { 180, 110, 70, 0 },
+ { 140, 120, 90, 0 }, { 186, 107, 70, 0 }, { 50, 90, 120, 0 }, { 160, 104, 125, 0 }, { 225, 234, 150, 0 },
+ { 243, 84, 33, 0 }, { 112, 37, 55, 0 }, { 181, 100, 27, 0 }, { 255, 255, 255, 0 }, { 186, 107, 69, 0 },
+ { 10, 40, 90, 0 }, { 180, 120, 100, 0 }, { 140, 120, 110, 0 }, { 186, 107, 70, 0 }, { 0, 50, 60, 0 },
+ { 160, 104, 215, 0 }, { 225, 234, 150, 0 }, { 243, 84, 33, 0 }, { 100, 25, 45, 0 }, { 181, 100, 27, 0 },
+ { 255, 255, 255, 0 }, { 186, 107, 69, 0 }, { 10, 10, 50, 0 }, { 165, 110, 63, 0 }, { 150, 120, 90, 0 },
+ { 166, 112, 65, 0 }, { 10, 40, 60, 0 }, { 160, 104, 215, 0 }, { 225, 234, 150, 0 }, { 243, 84, 33, 0 },
+ { 100, 20, 40, 0 }, { 181, 100, 27, 0 }, { 255, 255, 255, 0 }, { 186, 107, 69, 0 }, { 0, 50, 70, 0 },
+ { 180, 126, 70, 0 }, { 150, 140, 120, 0 }, { 225, 164, 63, 0 }, { 0, 70, 80, 0 }, { 160, 104, 215, 0 },
+ { 225, 234, 150, 0 }, { 243, 84, 33, 0 }, { 100, 40, 65, 0 }, { 105, 72, 57, 0 }, { 150, 120, 90, 0 },
+ { 80, 56, 21, 0 }, { 60, 46, 40, 0 }, { 210, 120, 180, 0 }, { 210, 120, 180, 0 }, { 210, 120, 180, 0 },
+ { 210, 120, 180, 0 }, { 100, 90, 110, 0 }, { 100, 90, 110, 0 }, { 100, 90, 110, 0 }, { 100, 90, 110, 0 },
+ { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 25, 53, 235, 0 },
+ { 25, 53, 235, 0 }, { 25, 53, 235, 0 }, { 25, 53, 235, 0 }, { 198, 121, 88, 0 }, { 255, 255, 255, 0 },
+ { 255, 164, 70, 0 }, { 55, 53, 91, 0 }, { 199, 126, 78, 0 }, { 159, 125, 103, 0 }, { 186, 107, 59, 0 },
+ { 50, 90, 120, 0 }, { 171, 113, 131, 0 }, { 225, 234, 180, 0 }, { 237, 84, 37, 0 }, { 133, 48, 75, 0 },
+ { 198, 121, 88, 0 }, { 255, 255, 255, 0 }, { 255, 164, 70, 0 }, { 55, 53, 91, 0 }, { 209, 135, 100, 0 },
+ { 180, 177, 158, 0 }, { 196, 127, 79, 0 }, { 50, 90, 120, 0 }, { 171, 113, 131, 0 }, { 225, 234, 180, 0 },
+ { 237, 84, 37, 0 }, { 133, 48, 75, 0 }, { 198, 121, 88, 0 }, { 235, 250, 235, 0 }, { 255, 164, 70, 0 },
+ { 55, 53, 91, 0 }, { 205, 140, 110, 0 }, { 159, 125, 103, 0 }, { 186, 107, 59, 0 }, { 50, 90, 120, 0 },
+ { 171, 113, 131, 0 }, { 225, 234, 180, 0 }, { 237, 84, 37, 0 }, { 133, 48, 75, 0 },
+};
+
+Color_RGBA8 sSkyboxEnvColors[] = {
+ { 102, 135, 99, 0 }, { 0, 15, 69, 0 }, { 110, 55, 110, 0 }, { 0, 0, 100, 0 }, { 70, 10, 10, 0 },
+ { 40, 0, 10, 0 }, { 40, 40, 40, 0 }, { 20, 20, 30, 0 }, { 60, 0, 10, 0 }, { 65, 45, 0, 0 },
+ { 20, 25, 90, 0 }, { 0, 5, 25, 0 }, { 102, 135, 99, 0 }, { 0, 4, 199, 0 }, { 60, 65, 89, 0 },
+ { 0, 0, 0, 0 }, { 70, 10, 10, 0 }, { 20, 0, 30, 0 }, { 40, 40, 40, 0 }, { 0, 0, 20, 0 },
+ { 60, 0, 10, 0 }, { 65, 45, 0, 0 }, { 20, 25, 90, 0 }, { 0, 0, 30, 0 }, { 102, 135, 99, 0 },
+ { 0, 4, 199, 0 }, { 60, 65, 89, 0 }, { 0, 0, 20, 0 }, { 66, 10, 10, 0 }, { 46, 5, 2, 0 },
+ { 66, 10, 10, 0 }, { 0, 20, 50, 0 }, { 60, 0, 10, 0 }, { 65, 45, 0, 0 }, { 20, 25, 90, 0 },
+ { 0, 0, 20, 0 }, { 102, 135, 99, 0 }, { 0, 4, 199, 0 }, { 60, 65, 89, 0 }, { 0, 0, 40, 0 },
+ { 90, 90, 100, 0 }, { 60, 20, 30, 0 }, { 110, 55, 110, 0 }, { 0, 0, 50, 0 }, { 60, 0, 10, 0 },
+ { 65, 45, 0, 0 }, { 20, 25, 90, 0 }, { 0, 0, 25, 0 }, { 10, 0, 0, 0 }, { 46, 5, 2, 0 },
+ { 34, 14, 10, 0 }, { 21, 5, 13, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
+ { 0, 0, 0, 0 }, { 50, 20, 10, 0 }, { 50, 20, 10, 0 }, { 50, 20, 10, 0 }, { 50, 20, 10, 0 },
+ { 30, 15, 250, 0 }, { 30, 15, 250, 0 }, { 30, 15, 250, 0 }, { 30, 15, 250, 0 }, { 177, 82, 93, 0 },
+ { 177, 82, 93, 0 }, { 177, 82, 93, 0 }, { 177, 82, 93, 0 }, { 90, 82, 102, 0 }, { 0, 4, 199, 0 },
+ { 101, 24, 131, 0 }, { 26, 7, 0, 0 }, { 70, 9, 6, 0 }, { 49, 6, 1, 0 }, { 40, 15, 59, 0 },
+ { 0, 2, 28, 0 }, { 60, 0, 10, 0 }, { 75, 45, 0, 0 }, { 20, 20, 89, 0 }, { 0, 7, 17, 0 },
+ { 90, 82, 102, 0 }, { 0, 4, 199, 0 }, { 101, 24, 131, 0 }, { 26, 7, 0, 0 }, { 70, 12, 16, 0 },
+ { 51, 10, 15, 0 }, { 50, 15, 58, 0 }, { 0, 2, 28, 0 }, { 60, 0, 10, 0 }, { 75, 45, 0, 0 },
+ { 20, 20, 89, 0 }, { 0, 7, 17, 0 }, { 90, 82, 102, 0 }, { 0, 4, 199, 0 }, { 101, 24, 131, 0 },
+ { 26, 7, 0, 0 }, { 70, 20, 45, 0 }, { 49, 6, 1, 0 }, { 40, 15, 59, 0 }, { 0, 2, 28, 0 },
+ { 60, 0, 10, 0 }, { 75, 45, 0, 0 }, { 20, 20, 89, 0 }, { 0, 7, 17, 0 },
+};
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSkybox.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6834.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_EnableUnderwaterLights.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F694C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DisableUnderwaterLights.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6A04.s")
+void Environment_WipeRumbleRequests(void) {
+ if ((gSaveContext.gameMode != GAMEMODE_NORMAL) && (gSaveContext.gameMode != GAMEMODE_END_CREDITS)) {
+ Rumble_StateWipeRequests();
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6A40.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSkyboxRotY.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6AB8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateNextDayTime.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6B44.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateTime.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6CEC.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6EA4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_IsSceneUpsideDown.s")
+s32 Environment_IsSceneUpsideDown(PlayState* play) {
+ s32 ret = false;
+
+ if ((play->sceneId == SCENE_F41) || (play->sceneId == SCENE_INISIE_R)) {
+ ret = true;
+ }
+ return ret;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6FF8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateLights.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8554.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSun.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F88C4.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8970.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8A9C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdatePostmanEvents.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Update.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8D84.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSun.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSunLensFlare.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F9824.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FA39C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FA3C4.s")
+typedef enum {
+ /* 0 */ LENS_FLARE_CIRCLE0,
+ /* 1 */ LENS_FLARE_CIRCLE1,
+ /* 2 */ LENS_FLARE_RING
+} LensFlareType;
+
+static Color_RGB8 sLensFlareColors[] = {
+ { 155, 205, 255 }, // blue
+ { 255, 255, 205 }, // yellow
+ { 255, 255, 205 }, // yellow
+ { 255, 255, 205 }, // yellow
+ { 155, 255, 205 }, // green
+ { 205, 255, 255 }, // light blue
+ { 155, 155, 255 }, // dark blue
+ { 205, 175, 255 }, // purple
+ { 175, 255, 205 }, // light green
+ { 255, 155, 235 }, // pink
+};
+static f32 sLensFlareScales[] = {
+ 23.0f, 12.0f, 7.0f, 5.0f, 3.0f, 10.0f, 6.0f, 2.0f, 3.0f, 1.0f,
+};
+static u32 sLensFlareAlphas[] = {
+ 50, 10, 25, 40, 70, 30, 50, 70, 50, 40,
+};
+static u32 sLensFlareTypes[] = {
+ LENS_FLARE_RING, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1,
+ LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1, LENS_FLARE_CIRCLE1,
+};
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawLensFlare.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_RandCentered.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawRainImpl.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawRain.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FAAB4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ChangeLightSetting.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FAC20.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxFilters.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FAF74.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawLightningFlash.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB010.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateLightningStrike.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_AddLightningBolts.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB388.s")
+static TexturePtr sLightningTextures[] = {
+ gEffLightning1Tex, gEffLightning2Tex, gEffLightning3Tex, gEffLightning4Tex,
+ gEffLightning5Tex, gEffLightning6Tex, gEffLightning7Tex, gEffLightning8Tex,
+};
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawLightning.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB758.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_PlaySceneSequence.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB9B4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateTimeBasedSequence.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawCustomLensFlare.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_InitGameOverLights.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_InitGameOverLights.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_FadeInGameOverLights.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_FadeInGameOverLights.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_FadeOutGameOverLights.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_FadeOutGameOverLights.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FC3DC.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateRain.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_FillScreen.s")
+u8 sSandstormPrimColors[] = {
+ 255, 255, 255, //
+ 255, 255, 255, //
+ 255, 255, 255, //
+ 255, 255, 255, //
+ 210, 156, 85, //
+ 255, 200, 100, //
+ 225, 160, 50, //
+ 105, 90, 40, //
+};
+
+u8 sSandstormEnvColors[] = {
+ 100, 100, 100, //
+ 100, 100, 100, //
+ 100, 100, 100, //
+ 100, 100, 100, //
+ 155, 106, 35, //
+ 200, 150, 50, //
+ 170, 110, 0, //
+ 50, 40, 0, //
+};
+
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSandstorm.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD2B4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_AdjustLights.s")
+
+void Environment_LerpRGB8(u8* from, Color_RGB8* to, f32 lerp, s16* dst) {
+ Color_RGB8 result;
+
+ Color_RGB8_Lerp((Color_RGB8*)from, to, lerp, &result);
+
+ dst[0] = result.r - from[0];
+ dst[1] = result.g - from[1];
+ dst[2] = result.b - from[2];
+}
+
+void Environment_LerpAmbientColor(PlayState* play, Color_RGB8* to, f32 lerp) {
+ Environment_LerpRGB8(play->envCtx.lightSettings.ambientColor, to, lerp, play->envCtx.adjLightSettings.ambientColor);
+}
+
+void Environment_LerpDiffuseColor(PlayState* play, Color_RGB8* to, f32 lerp) {
+ Environment_LerpRGB8(play->envCtx.lightSettings.light1Color, to, lerp, play->envCtx.adjLightSettings.light1Color);
+ Environment_LerpRGB8(play->envCtx.lightSettings.light2Color, to, lerp, play->envCtx.adjLightSettings.light2Color);
+}
+
+void Environment_LerpFogColor(PlayState* play, Color_RGB8* to, f32 lerp) {
+ Environment_LerpRGB8(play->envCtx.lightSettings.fogColor, to, lerp, play->envCtx.adjLightSettings.fogColor);
+}
+
+void Environment_LerpFog(PlayState* play, s16 fogNearTarget, s16 fogFarTarget, f32 lerp) {
+ play->envCtx.adjLightSettings.fogNear = (fogNearTarget - play->envCtx.lightSettings.fogNear) * lerp;
+ play->envCtx.adjLightSettings.zFar = (fogFarTarget - play->envCtx.lightSettings.zFar) * lerp;
+}
+
+// Repurposed from OoT to be more general
+u32 Environment_GetEventDayCount(void) {
+ return gSaveContext.save.eventDayCount;
+}
+
+// Repurposed from OoT to be more general
+void Environment_ClearEventDayCount(void) {
+ gSaveContext.save.eventDayCount = 0;
+}
+
+// Repurposed from OoT to be more general
+u32 Environment_GetTotalDays(void) {
+ return gSaveContext.save.day;
+}
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ForcePlaySequence.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_IsForcedSequenceDisabled.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_PlayStormNatureAmbience.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD538.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StopStormNatureAmbience.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpAmbientColor.s")
+void Environment_WarpSongLeave(PlayState* play) {
+ gWeatherMode = WEATHER_MODE_CLEAR;
+ gSaveContext.save.cutsceneIndex = 0;
+ gSaveContext.respawnFlag = -3;
+ play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance;
+ play->transitionTrigger = TRANS_TRIGGER_START;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpDiffuseColor.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_SetupSkyboxStars.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpFogColor.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStar.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpFog.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStarsImpl.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/get_days_elapsed.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Draw.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/reset_days_elapsed.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSkyboxStars.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/get_current_day.s")
+void Environment_StopTime(void) {
+ sEnvIsTimeStopped = true;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD750.s")
+void Environment_StartTime(void) {
+ sEnvIsTimeStopped = false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD768.s")
+u8 Environment_IsTimeStopped(void) {
+ return sEnvIsTimeStopped;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD78C.s")
+u32 Environment_GetStormState(PlayState* play) {
+ u32 stormState = play->envCtx.stormState;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD858.s")
+ if ((play->sceneId == SCENE_OMOYA) && (play->roomCtx.curRoom.num == 0)) {
+ stormState = ((gSaveContext.save.day >= 2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM))
+ ? STORM_STATE_ON
+ : STORM_STATE_OFF;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD928.s")
+ switch (play->sceneId) {
+ case SCENE_13HUBUKINOMITI:
+ case SCENE_11GORONNOSATO:
+ case SCENE_10YUKIYAMANOMURA:
+ case SCENE_14YUKIDAMANOMITI:
+ case SCENE_12HAKUGINMAE:
+ case SCENE_17SETUGEN:
+ case SCENE_GORONRACE:
+ if (gSaveContext.sceneLayer == 0) {
+ stormState = STORM_STATE_OFF;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD980.s")
+ case SCENE_10YUKIYAMANOMURA2:
+ if (gSaveContext.sceneLayer == 1) {
+ stormState = STORM_STATE_OFF;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FDAF8.s")
+ default:
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FDC94.s")
+ return stormState;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE390.s")
+u8 Environment_IsFinalHours(PlayState* play) {
+ u8 ret = false;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE3E0.s")
+ if ((gSaveContext.save.day == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) {
+ ret = true;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StopTime.s")
+ return ret;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StartTime.s")
+u8 func_800FE5D0(PlayState* play) {
+ u8 ret = false;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_IsTimeStopped.s")
+ if (Entrance_GetSceneId(((void)0, gSaveContext.save.entrance)) < 0) {
+ ret = true;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE4B8.s")
+ return ret;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE590.s")
+u32 func_800FE610(PlayState* play) {
+ return 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE5D0.s")
+u16 Environment_GetTimeSpeed(PlayState* play) {
+ u16 timeSpeed = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE610.s")
+ if (R_TIME_SPEED != 0) {
+ timeSpeed = R_TIME_SPEED + (u16)((void)0, gSaveContext.save.timeSpeedOffset);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE620.s")
+ return timeSpeed;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE658.s")
+void Environment_SetTimeJump(f32 minutes) {
+ sTimeJump = CLOCK_TIME_F(0, minutes);
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE6F8.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE778.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_GetSandstormColorIndex.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE788.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_GetNextSandstormColorIndex.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE798.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_GetSandstormLerpScale.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE7A8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpSandstormColors.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE9B4.s")
@@ -158,6 +982,11 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FEAB0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FEAC0.s")
+void Environment_JumpForwardInTime(void) {
+ if (sTimeJump != 0) {
+ gSaveContext.save.time = ((void)0, gSaveContext.save.time) + sTimeJump;
+ sTimeJump = 0;
+ }
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FEAF4.s")
diff --git a/src/code/z_lib.c b/src/code/z_lib.c
index 634f0a47f..a68d7c882 100644
--- a/src/code/z_lib.c
+++ b/src/code/z_lib.c
@@ -663,7 +663,7 @@ void Lib_Vec3f_TranslateAndRotateY(Vec3f* translation, s16 rotAngle, Vec3f* src,
dst->z = translation->z + (src->z * cos - src->x * sin);
}
-void Lib_LerpRGB(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst) {
+void Color_RGB8_Lerp(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst) {
f32 aF;
aF = a->r;
diff --git a/src/code/z_lights.c b/src/code/z_lights.c
index ef1af66f5..e5b34f387 100644
--- a/src/code/z_lights.c
+++ b/src/code/z_lights.c
@@ -257,15 +257,15 @@ void LightContext_Init(PlayState* play, LightContext* lightCtx) {
}
void LightContext_SetAmbientColor(LightContext* lightCtx, u8 r, u8 g, u8 b) {
- lightCtx->ambient.r = r;
- lightCtx->ambient.g = g;
- lightCtx->ambient.b = b;
+ lightCtx->ambientColor[0] = r;
+ lightCtx->ambientColor[1] = g;
+ lightCtx->ambientColor[2] = b;
}
void LightContext_SetFog(LightContext* lightCtx, u8 r, u8 g, u8 b, s16 near, s16 far) {
- lightCtx->fogColor.r = r;
- lightCtx->fogColor.g = g;
- lightCtx->fogColor.b = b;
+ lightCtx->fogColor[0] = r;
+ lightCtx->fogColor[1] = g;
+ lightCtx->fogColor[2] = b;
lightCtx->fogNear = near;
lightCtx->zFar = far;
}
@@ -274,7 +274,7 @@ void LightContext_SetFog(LightContext* lightCtx, u8 r, u8 g, u8 b, s16 near, s16
* Allocate a new Lights group and initilize the ambient color with that provided by LightContext
*/
Lights* LightContext_NewLights(LightContext* lightCtx, GraphicsContext* gfxCtx) {
- return Lights_New(gfxCtx, lightCtx->ambient.r, lightCtx->ambient.g, lightCtx->ambient.b);
+ return Lights_New(gfxCtx, lightCtx->ambientColor[0], lightCtx->ambientColor[1], lightCtx->ambientColor[2]);
}
void LightContext_InitList(PlayState* play, LightContext* lightCtx) {
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index 956bda896..cbfcd0481 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -5432,7 +5432,7 @@ void Interface_StartMoonCrash(PlayState* play) {
}
gSaveContext.save.day = 4;
- gSaveContext.save.daysElapsed = 4;
+ gSaveContext.save.eventDayCount = 4;
gSaveContext.save.time = CLOCK_TIME(6, 0) + 10;
play->nextEntrance = ENTRANCE(TERMINA_FIELD, 12);
gSaveContext.nextCutsceneIndex = 0;
diff --git a/src/code/z_play.c b/src/code/z_play.c
index f71cf0c0d..5d9b2c048 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "z64.h"
#include "regs.h"
#include "functions.h"
@@ -360,8 +361,8 @@ void Play_ClearTransition(PlayState* this) {
Gfx* Play_SetFog(PlayState* this, Gfx* gfx) {
s32 fogFar = this->lightCtx.zFar * (5.0f / 64.0f);
- return Gfx_SetFogWithSync(gfx, this->lightCtx.fogColor.r, this->lightCtx.fogColor.g, this->lightCtx.fogColor.b, 0,
- this->lightCtx.fogNear, ((fogFar <= 1000) ? 1000 : fogFar));
+ return Gfx_SetFogWithSync(gfx, this->lightCtx.fogColor[0], this->lightCtx.fogColor[1], this->lightCtx.fogColor[2],
+ 0, this->lightCtx.fogNear, ((fogFar <= 1000) ? 1000 : fogFar));
}
void Play_Destroy(GameState* thisx) {
@@ -524,7 +525,7 @@ void Play_UpdateWaterCamera(PlayState* this, Camera* camera) {
}
func_801A3EC0(0x20);
- func_800F6834(this, lightIndex);
+ Environment_EnableUnderwaterLights(this, lightIndex);
if ((sQuakeIndex == -1) || (Quake_GetTimeLeft(sQuakeIndex) == 10)) {
s16 quakeIndex = Quake_Request(camera, QUAKE_TYPE_5);
@@ -553,7 +554,7 @@ void Play_UpdateWaterCamera(PlayState* this, Camera* camera) {
if (sQuakeIndex != 0) {
Quake_RemoveRequest(sQuakeIndex);
}
- func_800F694C(this);
+ Environment_DisableUnderwaterLights(this);
func_801A3EC0(0);
}
}
@@ -585,20 +586,20 @@ void Play_UpdateTransition(PlayState* this) {
!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) ||
((this->nextEntrance == ENTRANCE(ROAD_TO_IKANA, 1)) &&
!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE))) &&
- (!func_800FE590(this) || (Entrance_GetSceneId(this->nextEntrance + sceneLayer) < 0) ||
+ (!Environment_IsFinalHours(this) || (Entrance_GetSceneId(this->nextEntrance + sceneLayer) < 0) ||
(AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_FINAL_HOURS))) {
func_801A4058(20);
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
}
- if (func_800FD768()) {
+ if (Environment_IsForcedSequenceDisabled()) {
func_801A4058(20);
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
}
- if (func_800FE590(this) && (Entrance_GetSceneId(this->nextEntrance + sceneLayer) >= 0) &&
+ if (Environment_IsFinalHours(this) && (Entrance_GetSceneId(this->nextEntrance + sceneLayer) >= 0) &&
(AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) == NA_BGM_FINAL_HOURS)) {
func_801A41C8(20);
}
@@ -824,10 +825,10 @@ void Play_UpdateTransition(PlayState* this) {
case TRANS_MODE_SANDSTORM_INIT:
if (this->transitionTrigger != TRANS_TRIGGER_END) {
- this->envCtx.sandstormState = 1;
+ this->envCtx.sandstormState = SANDSTORM_FILL;
this->transitionMode = TRANS_MODE_SANDSTORM;
} else {
- this->envCtx.sandstormState = 2;
+ this->envCtx.sandstormState = SANDSTORM_UNFILL;
this->envCtx.sandstormPrimA = 255;
this->envCtx.sandstormEnvA = 255;
this->transitionMode = TRANS_MODE_SANDSTORM;
@@ -856,7 +857,7 @@ void Play_UpdateTransition(PlayState* this) {
case TRANS_MODE_SANDSTORM_END_INIT:
if (this->transitionTrigger == TRANS_TRIGGER_END) {
- this->envCtx.sandstormState = 4;
+ this->envCtx.sandstormState = SANDSTORM_DISSIPATE;
this->envCtx.sandstormPrimA = 255;
this->envCtx.sandstormEnvA = 255;
@@ -1144,8 +1145,8 @@ void Play_DrawMain(PlayState* this) {
if (this->skyboxCtx.skyboxShouldDraw || (this->roomCtx.curRoom.roomShape->base.type == ROOM_SHAPE_TYPE_IMAGE)) {
func_8012CF0C(gfxCtx, false, true, 0, 0, 0);
} else {
- func_8012CF0C(gfxCtx, true, true, this->lightCtx.fogColor.r, this->lightCtx.fogColor.g,
- this->lightCtx.fogColor.b);
+ func_8012CF0C(gfxCtx, true, true, this->lightCtx.fogColor[0], this->lightCtx.fogColor[1],
+ this->lightCtx.fogColor[2]);
}
} else {
func_8012CF0C(gfxCtx, false, false, 0, 0, 0);
@@ -1292,7 +1293,7 @@ void Play_DrawMain(PlayState* this) {
}
}
- func_800FE390(this);
+ Environment_Draw(this);
}
sp268 = LightContext_NewLights(&this->lightCtx, gfxCtx);
@@ -1324,8 +1325,7 @@ void Play_DrawMain(PlayState* this) {
}
}
- // envCtx.precipitation[PRECIP_RAIN_CUR]
- if (this->envCtx.unk_F2[1] != 0) {
+ if (this->envCtx.precipitation[PRECIP_RAIN_CUR] != 0) {
Environment_DrawRain(this, &this->view, gfxCtx);
}
}
@@ -1339,7 +1339,7 @@ void Play_DrawMain(PlayState* this) {
}
if (1) {
- if (!this->envCtx.sunMoonDisabled) {
+ if (!this->envCtx.sunDisabled) {
sp25C.x = this->view.eye.x + this->envCtx.sunPos.x;
sp25C.y = this->view.eye.y + this->envCtx.sunPos.y;
sp25C.z = this->view.eye.z + this->envCtx.sunPos.z;
@@ -1367,7 +1367,7 @@ void Play_DrawMain(PlayState* this) {
}
if (1) {
- if (this->envCtx.sandstormState != 0) {
+ if (this->envCtx.sandstormState != SANDSTORM_OFF) {
Environment_DrawSandstorm(this, this->envCtx.sandstormState);
}
}
@@ -1440,7 +1440,7 @@ SkipPostWorldDraw:
}
if (!sp25B) {
- func_800FE3E0(this);
+ Environment_DrawSkyboxStars(this);
}
CLOSE_DISPS(gfxCtx);
@@ -2217,7 +2217,7 @@ void Play_Init(GameState* thisx) {
gSaveContext.save.cutsceneIndex = 0;
}
- if (gSaveContext.nextDayTime != 0xFFFF) {
+ if (gSaveContext.nextDayTime != NEXT_TIME_NONE) {
gSaveContext.save.time = gSaveContext.nextDayTime;
gSaveContext.skyboxTime = gSaveContext.nextDayTime;
}
@@ -2250,14 +2250,14 @@ void Play_Init(GameState* thisx) {
KaleidoScopeCall_Init(this);
Interface_Init(this);
- if (gSaveContext.nextDayTime != 0xFFFF) {
- if (gSaveContext.nextDayTime == 0x8000) {
+ if (gSaveContext.nextDayTime != NEXT_TIME_NONE) {
+ if (gSaveContext.nextDayTime == NEXT_TIME_DAY) {
gSaveContext.save.day++;
- gSaveContext.save.daysElapsed++;
+ gSaveContext.save.eventDayCount++;
gSaveContext.dogIsLost = true;
- gSaveContext.nextDayTime = -2;
+ gSaveContext.nextDayTime = NEXT_TIME_DAY_SET;
} else {
- gSaveContext.nextDayTime = -3;
+ gSaveContext.nextDayTime = NEXT_TIME_NIGHT_SET;
}
}
@@ -2348,7 +2348,7 @@ void Play_Init(GameState* thisx) {
CutsceneManager_StoreCamera(&this->mainCamera);
Interface_SetSceneRestrictions(this);
- func_800FB758(this);
+ Environment_PlaySceneSequence(this);
gSaveContext.seqId = this->sequenceCtx.seqId;
gSaveContext.ambienceId = this->sequenceCtx.ambienceId;
AnimationContext_Update(this, &this->animationCtx);
diff --git a/src/code/z_room.c b/src/code/z_room.c
index d06739d87..428dd5c13 100644
--- a/src/code/z_room.c
+++ b/src/code/z_room.c
@@ -581,12 +581,12 @@ s32 Room_HandleLoadCallbacks(PlayState* play, RoomContext* roomCtx) {
Actor_SpawnTransitionActors(play, &play->actorCtx);
if (((play->sceneId != SCENE_IKANA) || (roomCtx->curRoom.num != 1)) && (play->sceneId != SCENE_IKNINSIDE)) {
- play->envCtx.lightSettingOverride = 0xFF;
- play->envCtx.unk_E0 = 0;
+ play->envCtx.lightSettingOverride = LIGHT_SETTING_OVERRIDE_NONE;
+ play->envCtx.lightBlendOverride = LIGHT_BLEND_OVERRIDE_NONE;
}
func_800FEAB0();
- if (!func_800FE4B8(play)) {
- func_800FD858(play);
+ if (Environment_GetStormState(play) == STORM_STATE_OFF) {
+ Environment_StopStormNatureAmbience(play);
}
} else {
return 0;
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index d26156d58..483db001e 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -255,7 +255,7 @@ void Scene_CommandRoomBehavior(PlayState* play, SceneCmd* cmd) {
play->roomCtx.curRoom.lensMode = (cmd->roomBehavior.gpFlag2 >> 8) & 1;
play->msgCtx.unk12044 = (cmd->roomBehavior.gpFlag2 >> 0xA) & 1;
play->roomCtx.curRoom.enablePosLights = (cmd->roomBehavior.gpFlag2 >> 0xB) & 1;
- play->envCtx.unk_E2 = (cmd->roomBehavior.gpFlag2 >> 0xC) & 1;
+ play->envCtx.stormState = (cmd->roomBehavior.gpFlag2 >> 0xC) & 1;
}
// SceneTableEntry Header Command 0x0A: Mesh Header
@@ -386,7 +386,7 @@ void Scene_CommandSkyboxSettings(PlayState* play, SceneCmd* cmd) {
// SceneTableEntry Header Command 0x12: Skybox Disables
void Scene_CommandSkyboxDisables(PlayState* play, SceneCmd* cmd) {
play->envCtx.skyboxDisabled = cmd->skyboxDisables.unk4;
- play->envCtx.sunMoonDisabled = cmd->skyboxDisables.unk5;
+ play->envCtx.sunDisabled = cmd->skyboxDisables.unk5;
}
// SceneTableEntry Header Command 0x10: Time Settings
@@ -436,9 +436,9 @@ void Scene_CommandWindSettings(PlayState* play, SceneCmd* cmd) {
s8 temp2 = cmd->windSettings.vertical;
s8 temp3 = cmd->windSettings.south;
- play->envCtx.windDir.x = temp1;
- play->envCtx.windDir.y = temp2;
- play->envCtx.windDir.z = temp3;
+ play->envCtx.windDirection.x = temp1;
+ play->envCtx.windDirection.y = temp2;
+ play->envCtx.windDirection.z = temp3;
play->envCtx.windSpeed = cmd->windSettings.clothIntensity;
}
diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c
index 059596909..01a493cc0 100644
--- a/src/code/z_sram_NES.c
+++ b/src/code/z_sram_NES.c
@@ -430,7 +430,7 @@ void Sram_SaveEndOfCycle(PlayState* play) {
u8 item;
gSaveContext.save.timeSpeedOffset = 0;
- gSaveContext.save.daysElapsed = 0;
+ gSaveContext.save.eventDayCount = 0;
gSaveContext.save.day = 0;
gSaveContext.save.time = CLOCK_TIME(6, 0) - 1;
@@ -650,7 +650,7 @@ void Sram_SaveEndOfCycle(PlayState* play) {
void Sram_IncrementDay(void) {
if (CURRENT_DAY <= 3) {
gSaveContext.save.day++;
- gSaveContext.save.daysElapsed++;
+ gSaveContext.save.eventDayCount++;
}
gSaveContext.save.saveInfo.bombersCaughtNum = 0;
@@ -918,7 +918,7 @@ u16 sSaveDefaultChecksum = 0;
*/
void Sram_InitNewSave(void) {
gSaveContext.save.playerForm = PLAYER_FORM_HUMAN;
- gSaveContext.save.daysElapsed = 0;
+ gSaveContext.save.eventDayCount = 0;
gSaveContext.save.day = 0;
gSaveContext.save.time = CLOCK_TIME(6, 0) - 1;
Sram_ResetSave();