diff --git a/include/regs.h b/include/regs.h index 8ad793f34..f34ce28f1 100644 --- a/include/regs.h +++ b/include/regs.h @@ -48,7 +48,12 @@ #define R_ENABLE_ARENA_DBG SREG(0) // Same as OoT #define R_UPDATE_RATE SREG(30) +#define R_FB_FILTER_TYPE SREG(80) +#define R_FB_FILTER_PRIM_COLOR(c) SREG(81 + c) +#define R_FB_FILTER_A SREG(84) +#define R_FB_FILTER_ENV_COLOR(c) SREG(85 + c) #define R_PAUSE_BG_PRERENDER_STATE SREG(94) + #define R_PLAY_FILL_SCREEN_ON MREG(64) #define R_PLAY_FILL_SCREEN_R MREG(65) #define R_PLAY_FILL_SCREEN_G MREG(66) @@ -119,6 +124,7 @@ #define R_B_LABEL_Y(i) WREG(43 + i) #define R_DGN_MINIMAP_X WREG(68) #define R_DGN_MINIMAP_Y WREG(69) + #define R_MAP_INDEX VREG(11) #define R_MAP_TEX_INDEX_BASE VREG(12) #define R_MAP_TEX_INDEX VREG(13) @@ -132,9 +138,4 @@ #define R_ITEM_ICON_WIDTH(i) VREG(76 + i) #define R_ITEM_BTN_WIDTH(i) VREG(80 + i) -#define R_FB_FILTER_TYPE SREG(80) -#define R_FB_FILTER_PRIM_COLOR(c) SREG(81 + c) -#define R_FB_FILTER_A SREG(84) -#define R_FB_FILTER_ENV_COLOR(c) SREG(85 + c) - #endif diff --git a/include/z64.h b/include/z64.h index 8514b307a..34c7c4627 100644 --- a/include/z64.h +++ b/include/z64.h @@ -484,10 +484,8 @@ typedef enum { typedef struct { /* 0x00 */ u16 unk_0; - /* 0x02 */ u16 sceneTimeSpeed; // time speed value from the scene file - /* 0x04 */ f32 unk_4; - /* 0x08 */ f32 unk_8; - /* 0x0C */ f32 unk_C; + /* 0x02 */ u16 sceneTimeSpeed; + /* 0x04 */ Vec3f sunPos; /* 0x10 */ u8 unk_10; /* 0x11 */ u8 unk_11; /* 0x12 */ u8 unk_12; diff --git a/src/code/z_message_nes.c b/src/code/z_message_nes.c index fb8dbfcbf..759c3d611 100644 --- a/src/code/z_message_nes.c +++ b/src/code/z_message_nes.c @@ -212,13 +212,9 @@ void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16* s16 i; if (arg1 == 0xCF) { - // Calculates the time left before the moon crashes. - // The day begins at CLOCK_TIME(6, 0) so it must be offset. - timeLeft = (4 - CURRENT_DAY) * DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0)); + timeLeft = TIME_UNTIL_MOON_CRASH; } else { - // Calculates the time left before a new day. - // The day begins at CLOCK_TIME(6, 0) so it must be offset. - timeLeft = DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0)); + timeLeft = TIME_UNTIL_NEW_DAY; } timeLeftInMinutes = TIME_TO_MINUTES_F(timeLeft); diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 26c799b16..b70dfb1f5 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -378,9 +378,9 @@ void Scene_HeaderCmdSkyboxDisables(PlayState* play, SceneCmd* cmd) { // SceneTableEntry Header Command 0x10: Time Settings void Scene_HeaderCmdTimeSettings(PlayState* play, SceneCmd* cmd) { - if (cmd->timeSettings.hour != 0xFF && cmd->timeSettings.min != 0xFF) { + if ((cmd->timeSettings.hour != 0xFF) && (cmd->timeSettings.min != 0xFF)) { gSaveContext.skyboxTime = gSaveContext.save.time = - (u16)(((cmd->timeSettings.hour + (cmd->timeSettings.min / 60.0f)) * 60.0f) / 0.021972656f); + CLOCK_TIME_ALT2_F(cmd->timeSettings.hour, cmd->timeSettings.min); } if (cmd->timeSettings.timeSpeed != 0xFF) { @@ -389,6 +389,7 @@ void Scene_HeaderCmdTimeSettings(PlayState* play, SceneCmd* cmd) { play->envCtx.sceneTimeSpeed = 0; } + // Increase time speed during first cycle if ((gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) && (play->envCtx.sceneTimeSpeed != 0)) { play->envCtx.sceneTimeSpeed = 5; } @@ -397,9 +398,9 @@ void Scene_HeaderCmdTimeSettings(PlayState* play, SceneCmd* cmd) { R_TIME_SPEED = play->envCtx.sceneTimeSpeed; } - play->envCtx.unk_4 = -(Math_SinS(((void)0, gSaveContext.save.time) - 0x8000) * 120.0f) * 25.0f; - play->envCtx.unk_8 = (Math_CosS(((void)0, gSaveContext.save.time) - 0x8000) * 120.0f) * 25.0f; - play->envCtx.unk_C = (Math_CosS(((void)0, gSaveContext.save.time) - 0x8000) * 20.0f) * 25.0f; + play->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.save.time) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f; + play->envCtx.sunPos.y = (Math_CosS(((void)0, gSaveContext.save.time) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f; + play->envCtx.sunPos.z = (Math_CosS(((void)0, gSaveContext.save.time) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f; if ((play->envCtx.sceneTimeSpeed == 0) && (gSaveContext.save.cutscene < 0xFFF0)) { gSaveContext.skyboxTime = gSaveContext.save.time; diff --git a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c index 25b59b59b..ed7b8c194 100644 --- a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c +++ b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c @@ -114,7 +114,7 @@ void func_809CCEE8(EnBji01* this, PlayState* play) { } void func_809CD028(EnBji01* this, PlayState* play) { - f32 timeBeforeMoonCrash; + f32 timeUntilMoonCrash; switch (this->actor.params) { case SHIKASHI_TYPE_DEFAULT: @@ -177,11 +177,8 @@ void func_809CD028(EnBji01* this, PlayState* play) { this->textId = 0x5EA; break; case 3: - // Calculates the time left before the moon crashes. - // The day begins at CLOCK_TIME(6, 0) so it must be offset. - timeBeforeMoonCrash = (4 - CURRENT_DAY) * DAY_LENGTH - - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0)); - if (timeBeforeMoonCrash < CLOCK_TIME_F(1, 0)) { + timeUntilMoonCrash = TIME_UNTIL_MOON_CRASH; + if (timeUntilMoonCrash < CLOCK_TIME_F(1, 0)) { this->textId = 0x5E8; } else { this->textId = 0x5EB; diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.c b/src/overlays/actors/ovl_En_Nb/z_en_nb.c index 70208c942..385325080 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -638,7 +638,7 @@ void EnNb_HandleSchedule(EnNb* this, PlayState* play) { void EnNb_FollowSchedule(EnNb* this, PlayState* play) { ScheduleOutput scheduleOutput; - this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.timeSpeedOffset); + this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (gSaveContext.eventInf[4] & 8) { scheduleOutput.result = EN_NB_SCH_1; diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index 2dc7417e8..dade95ee3 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -968,7 +968,7 @@ void func_80A40678(EnTest3* this, PlayState* play) { this->unk_D80 = ((this->unk_D88 == 20) || (this->unk_D88 == 10) || (this->unk_D88 == 9)) ? 3 : Play_InCsMode(play) ? 0 - : REG(15) + ((void)0, gSaveContext.save.timeSpeedOffset); + : R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (Schedule_RunScript(play, sScheduleScript, &scheduleOutput)) { if (this->unk_D88 != scheduleOutput.result) { diff --git a/src/overlays/actors/ovl_En_Test4/z_en_test4.c b/src/overlays/actors/ovl_En_Test4/z_en_test4.c index 1d8ba7973..d791648e9 100644 --- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c +++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c @@ -1,7 +1,7 @@ /* * File: z_en_test4.c * Overlay: ovl_En_Test4 - * Description: Three-Day Clock + * Description: Three-Day Events */ #include "prevent_bss_reordering.h" 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 dea819c7d..74e711cfa 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -170,10 +170,10 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) { if (!(this->actor.xzDistToPlayer > 120.0f)) { if ((gSaveContext.save.time >= CLOCK_TIME(6, 30)) && (gSaveContext.save.time < CLOCK_TIME(7, 30))) { - cylinderPos.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + (play->envCtx.unk_4 * (1.0f / 6.0f)); + cylinderPos.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + (play->envCtx.sunPos.x * (1.0f / 6.0f)); cylinderPos.y = - (player->bodyPartsPos[PLAYER_BODYPART_HEAD].y - 30.0f) + (play->envCtx.unk_8 * (1.0f / 6.0f)); - cylinderPos.z = player->bodyPartsPos[PLAYER_BODYPART_HEAD].z + (play->envCtx.unk_C * (1.0f / 6.0f)); + (player->bodyPartsPos[PLAYER_BODYPART_HEAD].y - 30.0f) + (play->envCtx.sunPos.y * (1.0f / 6.0f)); + cylinderPos.z = player->bodyPartsPos[PLAYER_BODYPART_HEAD].z + (play->envCtx.sunPos.z * (1.0f / 6.0f)); this->hitboxPos = cylinderPos; diff --git a/tools/namefixer.py b/tools/namefixer.py index dbc5abf23..bc290c02a 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -530,6 +530,9 @@ wordReplace = { "func_800A81F0": "EffectBlure_AddVertex", "func_800A8514": "EffectBlure_AddSpace", "Effect_GetParams": "Effect_GetByIndex", + "func_800FE484": "Environment_StopTime", + "func_800FE498": "Environment_StartTime", + "func_800FE4A8": "Environment_IsTimeStopped", "func_800F5A8C": "Environment_LerpWeight", "func_801A3F54": "Audio_SetCutsceneFlag", "func_800EA0D4": "Cutscene_Start", @@ -696,6 +699,7 @@ wordReplace = { "gSaveContext.equippedMask": "gSaveContext.save.equippedMask", "gSaveContext.entranceIndex": "gSaveContext.save.entrance", "gSaveContext.time": "gSaveContext.save.time", + "gSaveContext.save.daySpeed": "gSaveContext.save.timeSpeedOffset", "gSaveContext.unk_14": "gSaveContext.save.timeSpeedOffset", "gSaveContext.unk_FE6": "gSaveContext.save.bombersCaughtNum", "gSaveContext.unk_FE7": "gSaveContext.save.bombersCaughtOrder",