From 4f0018bf368fb1304e3c758745296d28c4e58c9c Mon Sep 17 00:00:00 2001 From: fig02 Date: Fri, 20 May 2022 14:40:13 -0400 Subject: [PATCH] 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 --- include/functions.h | 8 +- include/macros.h | 2 + include/regs.h | 2 +- include/variables.h | 14 +- include/z64environment.h | 169 ++- include/z64save.h | 2 +- src/code/z_actor.c | 2 +- src/code/z_common_data.c | 2 +- src/code/z_demo.c | 59 +- src/code/z_kankyo.c | 1198 ++++++++++------- src/code/z_lights.c | 2 +- src/code/z_parameter.c | 24 +- src/code/z_play.c | 26 +- src/code/z_scene.c | 35 +- src/code/z_scene_table.c | 14 +- src/code/z_sram.c | 2 +- src/code/z_vr_box.c | 53 +- .../ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c | 4 +- .../ovl_Bg_Mori_Bigst/z_bg_mori_bigst.c | 2 +- .../ovl_Bg_Po_Syokudai/z_bg_po_syokudai.c | 10 +- .../z_bg_spot00_hanebasi.c | 16 +- src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c | 52 +- src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c | 2 +- .../actors/ovl_Boss_Ganon/z_boss_ganon.c | 139 +- .../actors/ovl_Boss_Ganon2/z_boss_ganon2.c | 128 +- .../ovl_Boss_Ganondrof/z_boss_ganondrof.c | 14 +- .../actors/ovl_Boss_Goma/z_boss_goma.c | 10 +- src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c | 116 +- src/overlays/actors/ovl_Boss_Va/z_boss_va.c | 2 +- .../actors/ovl_Demo_Effect/z_demo_effect.c | 3 +- .../actors/ovl_Demo_Kekkai/z_demo_kekkai.c | 2 +- src/overlays/actors/ovl_En_Door/z_en_door.c | 5 +- .../actors/ovl_En_Fhg_Fire/z_en_fhg_fire.c | 10 +- .../actors/ovl_En_Heishi1/z_en_heishi1.c | 6 +- .../actors/ovl_En_Jsjutan/z_en_jsjutan.c | 3 +- .../actors/ovl_En_Kanban/z_en_kanban.c | 2 +- src/overlays/actors/ovl_En_Mm/z_en_mm.c | 2 +- .../z_en_okarina_effect.c | 41 +- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 2 +- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 4 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 2 +- .../ovl_En_Weather_Tag/z_en_weather_tag.c | 128 +- src/overlays/actors/ovl_En_fHG/z_en_fhg.c | 8 +- src/overlays/actors/ovl_Fishing/z_fishing.c | 23 +- .../ovl_Object_Kankyo/z_object_kankyo.c | 22 +- .../actors/ovl_Oceff_Spot/z_oceff_spot.c | 2 +- src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c | 3 +- .../actors/ovl_player_actor/z_player.c | 9 +- .../ovl_file_choose/z_file_choose.c | 32 +- src/overlays/gamestates/ovl_select/z_select.c | 8 +- 50 files changed, 1339 insertions(+), 1087 deletions(-) diff --git a/include/functions.h b/include/functions.h index 3fbbf7295e..76ad620940 100644 --- a/include/functions.h +++ b/include/functions.h @@ -855,7 +855,7 @@ void func_8006EE50(Font* font, u16 arg1, u16 arg2); void Font_LoadChar(Font* font, u8 character, u16 codePointIndex); void Font_LoadMessageBoxIcon(Font* font, u16 icon); void Font_LoadOrderedFont(Font* font); -s32 func_8006F0A0(s32 arg0); +s32 Environment_ZBufValToFixedPoint(s32 zBufferVal); u16 Environment_GetPixelDepth(s32 x, s32 y); void Environment_GraphCallback(GraphicsContext* gfxCtx, void* param); void Environment_Init(GlobalContext* globalCtx, EnvironmentContext* envCtx, s32 unused); @@ -874,9 +874,9 @@ void Environment_DrawSunLensFlare(GlobalContext* globalCtx, EnvironmentContext* GraphicsContext* gfxCtx, Vec3f pos, s32 unused); 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); void Environment_DrawRain(GlobalContext* globalCtx, View* view, GraphicsContext* gfxCtx); -void func_80074CE8(GlobalContext* globalCtx, u32 arg1); +void Environment_ChangeLightSetting(GlobalContext* globalCtx, u32 lightSetting); void Environment_DrawSkyboxFilters(GlobalContext* globalCtx); void Environment_UpdateLightningStrike(GlobalContext* globalCtx); void Environment_AddLightningBolts(GlobalContext* globalCtx, u8 num); @@ -1491,7 +1491,7 @@ void Play_Main(GameState* thisx); s32 Play_InCsMode(GlobalContext* globalCtx); f32 func_800BFCB8(GlobalContext* globalCtx, MtxF* mf, Vec3f* vec); void* Play_LoadFile(GlobalContext* globalCtx, RomFile* file); -void func_800C016C(GlobalContext* globalCtx, Vec3f* src, Vec3f* dest); +void Play_GetScreenPos(GlobalContext* globalCtx, Vec3f* src, Vec3f* dest); s16 Play_CreateSubCamera(GlobalContext* globalCtx); s16 Play_GetActiveCamId(GlobalContext* globalCtx); s16 Play_ChangeCameraStatus(GlobalContext* globalCtx, s16 camId, s16 status); diff --git a/include/macros.h b/include/macros.h index 03105216d1..b17b959d93 100644 --- a/include/macros.h +++ b/include/macros.h @@ -31,6 +31,8 @@ #define YEARS_ADULT 17 #define LINK_AGE_IN_YEARS (!LINK_IS_ADULT ? YEARS_CHILD : YEARS_ADULT) +#define CLOCK_TIME(hr, min) ((s32)(((hr) * 60 + (min)) * (f32)0x10000 / (24 * 60) + 0.5f)) + #define IS_DAY (gSaveContext.nightFlag == 0) #define IS_NIGHT (gSaveContext.nightFlag == 1) diff --git a/include/regs.h b/include/regs.h index 4bd7529e90..dea0ccc191 100644 --- a/include/regs.h +++ b/include/regs.h @@ -45,7 +45,7 @@ #define R_ENV_FOG_COLOR(i) REG(10 + i) #define R_ENV_FOG_FAR REG(13) #define R_ENV_FOG_NEAR REG(14) -#define R_ENV_TIME_INCREMENT REG(15) +#define R_ENV_TIME_SPEED_OLD REG(15) // Most likely used during development. Unused in the final game. #define R_RUN_SPEED_LIMIT REG(45) #define R_ENABLE_ARENA_DBG SREG(0) #define R_UPDATE_RATE SREG(30) diff --git a/include/variables.h b/include/variables.h index e3b353a074..200fac2539 100644 --- a/include/variables.h +++ b/include/variables.h @@ -61,12 +61,12 @@ extern s32 gMaxActorId; // original name: "MaxProfile" extern s32 gDbgCamEnabled; extern GameStateOverlay gGameStateOverlayTable[6]; extern u8 gWeatherMode; -extern u8 D_8011FB34; -extern u8 D_8011FB38; -extern u8 gSkyboxBlendingEnabled; -extern u16 gTimeIncrement; -extern struct_8011FC1C D_8011FC1C[][9]; -extern SkyboxFile gSkyboxFiles[]; +extern u8 gLightConfigAfterUnderwater; +extern u8 gInterruptSongOfStorms; +extern u8 gSkyboxIsChanging; +extern u16 gTimeSpeed; +extern TimeBasedSkyboxEntry gTimeBasedSkyboxConfigs[][9]; +extern SkyboxFile gNormalSkyFiles[]; extern s32 gZeldaArenaLogSeverity; extern MapData gMapDataTable; extern s16 gSpoilingItems[3]; @@ -176,7 +176,7 @@ extern u8 gCustomLensFlareOn; extern Vec3f gCustomLensFlarePos; extern s16 gLensFlareScale; extern f32 gLensFlareColorIntensity; -extern s16 gLensFlareScreenFillAlpha; +extern s16 gLensFlareGlareStrength; extern LightningStrike gLightningStrike; extern MapData* gMapData; extern f32 gBossMarkScale; diff --git a/include/z64environment.h b/include/z64environment.h index 8cb69ddc44..3bfaf00823 100644 --- a/include/z64environment.h +++ b/include/z64environment.h @@ -8,11 +8,49 @@ #define FILL_SCREEN_OPA (1 << 0) #define FILL_SCREEN_XLU (1 << 1) +#define NEXT_TIME_NONE 0xFFFF +#define NEXT_TIME_DAY (CLOCK_TIME(12, 0) + 1) +#define NEXT_TIME_NIGHT CLOCK_TIME(0, 0) +#define NEXT_TIME_DAY_SET 0xFFFE +#define NEXT_TIME_NIGHT_SET 0xFFFD + +#define LIGHT_SETTING_MAX 31 +#define LIGHT_SETTING_OVERRIDE_NONE 0xFF + +// This mode disables the updating of lights in both light modes. +// With this mode enabled, the only way lights can change is via the adjustment arrays. +// This mode is not used in the original game. +#define LIGHT_SETTING_OVERRIDE_FULL_CONTROL 0xFE + +#define LIGHT_BLENDRATE_OVERRIDE_NONE 0xFFFF +#define LIGHT_BLEND_OVERRIDE_NONE 0 +#define LIGHT_BLEND_OVERRIDE_ON 1 + +// This mode disables the light system's automatic blending between +// light settings for `LIGHT_MODE_SETTINGS` (or using a light setting override). +// This is a bit of a hack used only by bosses in the original game. +#define LIGHT_BLEND_OVERRIDE_FULL_CONTROL 2 + +typedef enum { + /* 0 */ LIGHT_MODE_TIME, // environment lights use `lightConfig` and change based on time of day + /* 1 */ LIGHT_MODE_SETTINGS // environment lights use `lightSetting` +} LightMode; + typedef enum { - /* 0 */ LIGHTNING_MODE_OFF, // no lightning - /* 1 */ LIGHTNING_MODE_ON, // request ligtning strikes at random intervals - /* 2 */ LIGHTNING_MODE_LAST // request one lightning strike before turning off -} LightningMode; + /* 0 */ SKYBOX_DMA_INACTIVE, + /* 1 */ SKYBOX_DMA_TEXTURE1_START, + /* 2 */ SKYBOX_DMA_TEXTURE1_DONE, + /* 3 */ SKYBOX_DMA_TLUT1_START, + /* 11 */ SKYBOX_DMA_TEXTURE2_START = 11, + /* 12 */ SKYBOX_DMA_TEXTURE2_DONE, + /* 13 */ SKYBOX_DMA_TLUT2_START +} SkyboxDmaState; + +typedef enum { + /* 0 */ LIGHTNING_OFF, // no lightning + /* 1 */ LIGHTNING_ON, // request ligtning strikes at random intervals + /* 2 */ LIGHTNING_LAST // request one lightning strike before turning off +} LightningState; typedef enum { /* 0 */ LIGHTNING_STRIKE_WAIT, // wait between lightning strikes. request bolts when timer hits 0 @@ -21,14 +59,53 @@ typedef enum { } LightningStrikeState; typedef enum { - /* 0 */ SKYBOX_DMA_INACTIVE, - /* 1 */ SKYBOX_DMA_FILE1_START, - /* 2 */ SKYBOX_DMA_FILE1_DONE, - /* 3 */ SKYBOX_DMA_PAL1_START, - /* 11 */ SKYBOX_DMA_FILE2_START = 11, - /* 12 */ SKYBOX_DMA_FILE2_DONE, - /* 13 */ SKYBOX_DMA_PAL2_START -} SkyboxDmaState; + /* 0 */ WEATHER_MODE_CLEAR, + /* 1 */ WEATHER_MODE_CLOUDY_CONFIG3, // scene must define settings for light config 3 + /* 2 */ WEATHER_MODE_CLOUDY_CONFIG2, // scene must define settings for light config 2 + /* 3 */ WEATHER_MODE_SNOW, // scene must define settings for light config 2 + /* 4 */ WEATHER_MODE_RAIN, // scene must define settings for light config 2 + /* 5 */ WEATHER_MODE_HEAVY_RAIN // scene must define settings for light config 4 +} WeatherMode; + +typedef enum { + /* 0 */ CHANGE_SKYBOX_INACTIVE, + /* 1 */ CHANGE_SKYBOX_REQUESTED, + /* 2 */ CHANGE_SKYBOX_WAIT, + /* 3 */ CHANGE_SKYBOX_ACTIVE +} ChangeSkyboxState; + +typedef enum { + /* 0 */ PRECIP_RAIN_MAX, // max number of raindrops that can draw; uses this or SOS_MAX, whichever is larger + /* 1 */ PRECIP_RAIN_CUR, // current number of rain drops being drawn on screen + /* 2 */ PRECIP_SNOW_CUR, // current number of snowflakes being drawn on screen + /* 3 */ PRECIP_SNOW_MAX, // max number of snowflakes that can draw + /* 4 */ PRECIP_SOS_MAX, // max number of rain drops requested from song of storms specifically + /* 5 */ PRECIP_MAX +} PrecipitationData; + +typedef enum { + /* 0 */ STORM_REQUEST_NONE, + /* 1 */ STORM_REQUEST_START, + /* 2 */ STORM_REQUEST_STOP +} StormRequest; + +typedef enum { + /* 0 */ STORM_STATE_OFF, + /* 1 */ STORM_STATE_ON +} StormState; + +typedef enum { + /* 0x00 */ TIMESEQ_DAY_BGM, + /* 0x01 */ TIMESEQ_FADE_DAY_BGM, + /* 0x02 */ TIMESEQ_NIGHT_BEGIN_SFX, + /* 0x03 */ TIMESEQ_EARLY_NIGHT_CRITTERS, + /* 0x04 */ TIMESEQ_NIGHT_DELAY, + /* 0x05 */ TIMESEQ_NIGHT_CRITTERS, + /* 0x06 */ TIMESEQ_DAY_BEGIN_SFX, + /* 0x07 */ TIMESEQ_MORNING_CRITTERS, + /* 0x08 */ TIMESEQ_DAY_DELAY, + /* 0xFF */ TIMESEQ_DISABLED = 0xFF +} TimeBasedSeqState; typedef enum { /* 0 */ SANDSTORM_OFF, @@ -47,14 +124,13 @@ typedef struct { /* 0x08 */ f32 delayTimer; } LightningStrike; // size = 0xC -// describes what skybox files and blending modes to use depending on time of day typedef struct { /* 0x00 */ u16 startTime; /* 0x02 */ u16 endTime; - /* 0x04 */ u8 blend; // if true, blend between.. skyboxes? palettes? - /* 0x05 */ u8 skybox1Index; // whats the difference between _pal and non _pal files? + /* 0x04 */ u8 changeSkybox; + /* 0x05 */ u8 skybox1Index; /* 0x06 */ u8 skybox2Index; -} struct_8011FC1C; // size = 0x8 +} TimeBasedSkyboxEntry; // size = 0x8 typedef struct { /* 0x00 */ u8 ambientColor[3]; @@ -67,11 +143,9 @@ typedef struct { /* 0x14 */ s16 fogFar; } EnvLightSettings; // size = 0x16 -// 1.0: 801D8EC4 -// dbg: 80222A44 typedef struct { /* 0x00 */ char unk_00[0x02]; - /* 0x02 */ u16 timeIncrement; // how many units of time that pass every update + /* 0x02 */ u16 sceneTimeSpeed; // time speed value from the scene file /* 0x04 */ Vec3f sunPos; // moon position can be found by negating the sun position /* 0x10 */ u8 skybox1Index; /* 0x11 */ u8 skybox2Index; @@ -80,26 +154,26 @@ typedef struct { /* 0x14 */ char unk_14[0x01]; /* 0x15 */ u8 skyboxDisabled; /* 0x16 */ u8 sunMoonDisabled; - /* 0x17 */ u8 unk_17; // currentWeatherMode for skybox? (prev called gloomySky) - /* 0x18 */ u8 unk_18; // nextWeatherMode for skybox? - /* 0x19 */ u8 unk_19; - /* 0x1A */ u16 unk_1A; + /* 0x17 */ u8 skyboxConfig; // only used for `LIGHT_MODE_TIME` + /* 0x18 */ u8 changeSkyboxNextConfig; + /* 0x19 */ u8 changeSkyboxState; + /* 0x1A */ u16 changeSkyboxTimer; /* 0x1C */ char unk_1C[0x02]; - /* 0x1E */ u8 indoors; // when set, day time has no effect on lighting - /* 0x1F */ u8 unk_1F; // outdoor light index - /* 0x20 */ u8 unk_20; // prev outdoor light index? - /* 0x21 */ u8 unk_21; - /* 0x22 */ u16 unk_22; - /* 0x24 */ u16 unk_24; + /* 0x1E */ u8 lightMode; + /* 0x1F */ u8 lightConfig; // only used for `LIGHT_MODE_TIME` + /* 0x20 */ u8 changeLightNextConfig; + /* 0x21 */ u8 changeLightEnabled; + /* 0x22 */ u16 changeLightTimer; + /* 0x24 */ u16 changeDuration; // total time to change skybox and light configs /* 0x26 */ char unk_26[0x02]; - /* 0x28 */ LightInfo dirLight1; // used for sunlight outdoors - /* 0x36 */ LightInfo dirLight2; // used for moonlight outdoors + /* 0x28 */ LightInfo dirLight1; // used as sunlight for `LIGHT_MODE_TIME` + /* 0x36 */ LightInfo dirLight2; // used as moonlight for `LIGHT_MODE_TIME` /* 0x44 */ s8 skyboxDmaState; /* 0x48 */ DmaRequest dmaRequest; /* 0x68 */ OSMesgQueue loadQueue; /* 0x80 */ OSMesg loadMsg; - /* 0x84 */ f32 unk_84; - /* 0x88 */ f32 unk_88; + /* 0x84 */ f32 glareAlpha; + /* 0x88 */ f32 lensFlareAlphaScale; /* 0x8C */ s16 adjAmbientColor[3]; /* 0x92 */ s16 adjLight1Color[3]; /* 0x98 */ s16 adjFogColor[3]; @@ -110,18 +184,18 @@ typedef struct { /* 0xB0 */ f32 windSpeed; /* 0xB4 */ u8 numLightSettings; /* 0xB8 */ EnvLightSettings* lightSettingsList; // list of light settings from the scene file - /* 0xBC */ u8 blendIndoorLights; // when true, blend between indoor light settings when switching - /* 0xBD */ u8 unk_BD; // indoor light index - /* 0xBE */ u8 unk_BE; // prev indoor light index? - /* 0xBF */ u8 unk_BF; - /* 0xC0 */ EnvLightSettings lightSettings; - /* 0xD6 */ u16 unk_D6; - /* 0xD8 */ f32 unk_D8; // indoor light blend weight? - /* 0xDC */ u8 unk_DC; - /* 0xDD */ u8 gloomySkyMode; - /* 0xDE */ u8 unk_DE; // gloomy sky state - /* 0xDF */ u8 lightningMode; - /* 0xE0 */ u8 unk_E0; // env sounds state + /* 0xBC */ u8 lightBlendEnabled; // only used with `LIGHT_MODE_SETTINGS` or on override + /* 0xBD */ u8 lightSetting; // only used with `LIGHT_MODE_SETTINGS` or on override + /* 0xBE */ u8 prevLightSetting; + /* 0xBF */ u8 lightSettingOverride; + /* 0xC0 */ EnvLightSettings lightSettings; // settings for the currently "live" lights + /* 0xD6 */ u16 lightBlendRateOverride; + /* 0xD8 */ f32 lightBlend; // only used with `LIGHT_MODE_SETTINGS` or on setting override + /* 0xDC */ u8 lightBlendOverride; + /* 0xDD */ u8 stormRequest; // "rain_evt_trg" + /* 0xDE */ u8 stormState; + /* 0xDF */ u8 lightningState; + /* 0xE0 */ u8 timeSeqState; /* 0xE1 */ u8 fillScreen; /* 0xE2 */ u8 screenFillColor[4]; /* 0xE6 */ u8 sandstormState; @@ -129,9 +203,8 @@ typedef struct { /* 0xE8 */ u8 sandstormEnvA; /* 0xE9 */ u8 customSkyboxFilter; /* 0xEA */ u8 skyboxFilterColor[4]; - /* 0xEE */ u8 unk_EE[4]; - /* 0xF2 */ u8 unk_F2[4]; - /* 0xF6 */ char unk_F6[0x06]; + /* 0xEE */ u8 precipitation[PRECIP_MAX]; + /* 0xF3 */ char unk_F3[0x09]; } EnvironmentContext; // size = 0xFC #endif diff --git a/include/z64save.h b/include/z64save.h index 7ff3d212e4..b7efc7c947 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -134,7 +134,7 @@ typedef struct { /* 0x13BC */ f32 entranceSpeed; /* 0x13C0 */ u16 entranceSound; /* 0x13C2 */ char unk_13C2[0x0001]; - /* 0x13C3 */ u8 unk_13C3; + /* 0x13C3 */ u8 retainWeatherMode; /* 0x13C4 */ s16 dogParams; /* 0x13C6 */ u8 textTriggerFlags; /* 0x13C7 */ u8 showTitleCard; diff --git a/src/code/z_actor.c b/src/code/z_actor.c index ac9e8a38d0..b54d445428 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 8afe22d105..d1db8b5080 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 0340327673..f7bc14e793 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 5229081391..596ff34430 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -4,12 +4,6 @@ #include "objects/gameplay_keep/gameplay_keep.h" #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, @@ -17,141 +11,133 @@ typedef enum { /* 0xFF */ LIGHTNING_BOLT_INACTIVE = 0xFF } LightningBoltState; +typedef struct { + /* 0x00 */ s32 mantissa; + /* 0x04 */ s32 exponent; +} ZBufValConversionEntry; // size = 0x8 + +ZBufValConversionEntry sZBufValConversionTable[1 << 3] = { + { 6, 0x00000 }, { 5, 0x20000 }, { 4, 0x30000 }, { 3, 0x38000 }, + { 2, 0x3C000 }, { 1, 0x3E000 }, { 0, 0x3F000 }, { 0, 0x3F800 }, +}; + +u8 gWeatherMode = WEATHER_MODE_CLEAR; // "E_wether_flg" + +u8 gLightConfigAfterUnderwater = 0; + +u8 gInterruptSongOfStorms = false; + +// Indicates whether the skybox is changing to a different index of the same config (based on time) +u8 gSkyboxIsChanging = false; + +// how many units of time that pass every update +u16 gTimeSpeed = 0; + +u16 sSunScreenDepth = GPACK_ZDZ(G_MAXFBZ, 0); + typedef struct { /* 0x00 */ u16 startTime; /* 0x02 */ u16 endTime; - /* 0x04 */ u8 unk_04; - /* 0x05 */ u8 unk_05; -} struct_8011FB48; // size = 0x6 + /* 0x04 */ u8 lightSetting; + /* 0x05 */ u8 nextLightSetting; +} TimeBasedLightEntry; // size = 0x6 -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 }, -}; - -u8 gWeatherMode = 0; // "E_wether_flg" - -u8 D_8011FB34 = 0; - -u8 D_8011FB38 = 0; - -u8 gSkyboxBlendingEnabled = false; - -u16 gTimeIncrement = 0; - -u16 D_8011FB44 = 0xFFFC; - -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; -s32 func_8006F0A0(s32 a0) { - s32 ret = ((a0 >> 4 & 0x7FF) << D_8011FAF0[a0 >> 15 & 7].unk_00) + D_8011FAF0[a0 >> 15 & 7].unk_04; +#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)].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.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; - globalCtx->envCtx.unk_F2[0] = 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; + envCtx->skyboxConfig = 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; + 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; + 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 (gSkyboxBlendingEnabled) { - skyboxBlend = Environment_LerpWeight(D_8011FC1C[envCtx->unk_17][i].endTime, - D_8011FC1C[envCtx->unk_17][i].startTime, + 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 584f7b3e18..e4f690b530 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 9b6a48e664..62c8314f88 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 b0993bec00..8888819dd4 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 69ade19cdf..67701c5bf3 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 bb527a5b79..a80de06a1b 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 353086d430..83e7ba9e06 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 ad5ce9d748..fd87904d1e 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 c87518c28d..f085f509b2 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 7efe0af0ca..144aed1f69 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 2ff65ab91f..a39eb4b196 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 a2320bb80d..84079a62f0 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 14e2a7806d..526ee8ae60 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 44476ce413..224e89fc3c 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 94b9bb56c7..388512b686 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 1e8f020bb8..de3dac083b 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 fe14f78553..c7047466e9 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 1b0c8f7e96..c590635334 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 e4577fc4a5..ee2ac858f3 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 d43cb8d02a..4a37d5cefd 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 e921719ce6..159c5c1ad0 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 96d64a5f91..265c846952 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 0d3d6a3b37..0837c640f1 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 fdde2ae4ba..8e9cc11c78 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 beaad67396..e5879d18ab 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 06c8c43dce..74d37040e3 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 c144b70628..6e66803973 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 690d0f3499..92bad0bcef 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 99c549e916..45684666b8 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 30c6c0d14d..d43781b4cb 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 918de6d637..ac68fb7b3b 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 257200c83a..4e5388e621 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 e50d950a66..3d904c28f9 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 e72378ee4a..fb717a60e0 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 5d07edc003..15da091acb 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 bbfe33d5f6..60735d4955 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 1573454730..4879970ad0 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 231abea0e1..8c67cafec2 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 7ab775688c..c70fae7e00 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 01efdabac8..aabd9b4642 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 d312ac9d38..6f4bff4964 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: