From 7294f68c45e0af9ff5728627b5d89a1cbbd4e35e Mon Sep 17 00:00:00 2001 From: SkrubbySkrubInAShrub Date: Tue, 17 Mar 2026 15:24:46 +0100 Subject: [PATCH 1/5] fix: prevent skysinc from applying to interiors unless necessary --- src/Features/SkySync.cpp | 8 +++++++- src/Features/SkySync.h | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Features/SkySync.cpp b/src/Features/SkySync.cpp index 24af218512..5bd3ccf079 100644 --- a/src/Features/SkySync.cpp +++ b/src/Features/SkySync.cpp @@ -127,12 +127,18 @@ void SkySync::Update(const RE::Sky* sky) if (!sun || !climate || !player) return; - if (const auto cell = player->GetParentCell(); cell != currentCell) { + const auto cell = player->GetParentCell(); + + if (cell != currentCell) { SetSkyRotation(sky, cell); if (currentCell && (cell->IsInteriorCell() != currentCell->IsInteriorCell() || cell->GetRuntimeData().worldSpace != currentCell->GetRuntimeData().worldSpace)) shadowFader.Reset(); } + // Exterior worldspaces always run; interior cells require the sunlight-shadows flag. + if (cell && cell->IsInteriorCell() && !cell->cellFlags.all(RE::TESObjectCELL::Flag::kShowSky, static_cast(CellFlagExt::kSunlightShadows))) + return; + const float time = sky->currentGameHour; const bool isDayTime = time > timings.sunriseFadeOutMoonEnd && time < timings.sunsetFadeInMoonStart; diff --git a/src/Features/SkySync.h b/src/Features/SkySync.h index f8e355b076..8ef8036649 100644 --- a/src/Features/SkySync.h +++ b/src/Features/SkySync.h @@ -83,6 +83,11 @@ struct SkySync : Feature inline static float volumetricLightingIntensityFactor = 1.0f; private: + enum class CellFlagExt : uint16_t + { + kSunlightShadows = 1 << 15, + }; + enum class MoonLightSource : uint8_t { Brightest, From 555f5c52f5ef4c6af75fbb9629a39b76a02f7859 Mon Sep 17 00:00:00 2001 From: SkrubbySkrubInAShrub Date: Tue, 17 Mar 2026 15:50:18 +0100 Subject: [PATCH 2/5] fix: only use unknown 15 --- src/Features/SkySync.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Features/SkySync.cpp b/src/Features/SkySync.cpp index 5bd3ccf079..a8bf3b2e41 100644 --- a/src/Features/SkySync.cpp +++ b/src/Features/SkySync.cpp @@ -136,7 +136,7 @@ void SkySync::Update(const RE::Sky* sky) } // Exterior worldspaces always run; interior cells require the sunlight-shadows flag. - if (cell && cell->IsInteriorCell() && !cell->cellFlags.all(RE::TESObjectCELL::Flag::kShowSky, static_cast(CellFlagExt::kSunlightShadows))) + if (cell && cell->IsInteriorCell() && !cell->cellFlags.all(static_cast(CellFlagExt::kSunlightShadows))) return; const float time = sky->currentGameHour; From e103ed3aea5d5b4565c66655a5709c0aa5ff848e Mon Sep 17 00:00:00 2001 From: SkrubbySkrubInAShrub Date: Tue, 17 Mar 2026 21:37:39 +0100 Subject: [PATCH 3/5] fix: address AI comment --- src/Features/SkySync.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Features/SkySync.cpp b/src/Features/SkySync.cpp index a8bf3b2e41..2ab023a134 100644 --- a/src/Features/SkySync.cpp +++ b/src/Features/SkySync.cpp @@ -130,8 +130,9 @@ void SkySync::Update(const RE::Sky* sky) const auto cell = player->GetParentCell(); if (cell != currentCell) { + const auto prevCell = currentCell; SetSkyRotation(sky, cell); - if (currentCell && (cell->IsInteriorCell() != currentCell->IsInteriorCell() || cell->GetRuntimeData().worldSpace != currentCell->GetRuntimeData().worldSpace)) + if (prevCell && (cell->IsInteriorCell() != prevCell->IsInteriorCell() || cell->GetRuntimeData().worldSpace != prevCell->GetRuntimeData().worldSpace)) shadowFader.Reset(); } From e57c1f86d14b1c2b7ba66a110b4ddb4f7d3d3828 Mon Sep 17 00:00:00 2001 From: SkrubbySkrubInAShrub Date: Tue, 17 Mar 2026 21:44:52 +0100 Subject: [PATCH 4/5] fix: another AI comment --- src/Features/SkySync.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Features/SkySync.cpp b/src/Features/SkySync.cpp index 2ab023a134..d4ab70cd9f 100644 --- a/src/Features/SkySync.cpp +++ b/src/Features/SkySync.cpp @@ -131,8 +131,9 @@ void SkySync::Update(const RE::Sky* sky) if (cell != currentCell) { const auto prevCell = currentCell; - SetSkyRotation(sky, cell); - if (prevCell && (cell->IsInteriorCell() != prevCell->IsInteriorCell() || cell->GetRuntimeData().worldSpace != prevCell->GetRuntimeData().worldSpace)) + if (cell) + SetSkyRotation(sky, cell); + if (cell && prevCell && (cell->IsInteriorCell() != prevCell->IsInteriorCell() || cell->GetRuntimeData().worldSpace != prevCell->GetRuntimeData().worldSpace)) shadowFader.Reset(); } From 825a9f5812b3807ae783f5546936dfd4eefbe1cc Mon Sep 17 00:00:00 2001 From: SkrubbySkrubInAShrub Date: Wed, 18 Mar 2026 00:30:58 +0100 Subject: [PATCH 5/5] fix: Rabbitfeed --- src/Features/SkySync.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Features/SkySync.cpp b/src/Features/SkySync.cpp index d4ab70cd9f..cc53787694 100644 --- a/src/Features/SkySync.cpp +++ b/src/Features/SkySync.cpp @@ -138,8 +138,10 @@ void SkySync::Update(const RE::Sky* sky) } // Exterior worldspaces always run; interior cells require the sunlight-shadows flag. - if (cell && cell->IsInteriorCell() && !cell->cellFlags.all(static_cast(CellFlagExt::kSunlightShadows))) + if (cell && cell->IsInteriorCell() && !cell->cellFlags.all(static_cast(CellFlagExt::kSunlightShadows))) { + volumetricLightingIntensityFactor = 1.0f; return; + } const float time = sky->currentGameHour; const bool isDayTime = time > timings.sunriseFadeOutMoonEnd && time < timings.sunsetFadeInMoonStart;