From 45335ca19a5691446e992db52ed142a5815d62bc Mon Sep 17 00:00:00 2001 From: ErLullo Date: Thu, 19 Feb 2026 02:51:51 +0100 Subject: [PATCH 1/3] Add fog level default setting to environment data loading --- src/GameLib/MapUtil.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/GameLib/MapUtil.cpp b/src/GameLib/MapUtil.cpp index 80cccc7..8b735a8 100644 --- a/src/GameLib/MapUtil.cpp +++ b/src/GameLib/MapUtil.cpp @@ -30,6 +30,7 @@ void Environment_Init(SEnvironmentData& envData) // MR-14: Fog update by Alaric envData.bFogEnable = TRUE; envData.bDensityFog = TRUE; + envData.bFogLevel = 0; // MR-14: -- END OF -- Fog update by Alaric envData.m_fFogNearDistance = 25600.0f * 0.5f; envData.m_fFogFarDistance = 25600.0f * 0.7f; @@ -308,4 +309,4 @@ float CEaseOutInterpolation::GetValue() float CEaseOutInterpolation::GetChangingValue() { return m_fValue - m_fLastValue; -} \ No newline at end of file +} From a3151f46c2442fac8e2b6642a92652e10d4d9035 Mon Sep 17 00:00:00 2001 From: ErLullo Date: Thu, 19 Feb 2026 12:08:38 +0100 Subject: [PATCH 2/3] Refactor fog handling logic in MapManager --- src/GameLib/MapManager.cpp | 46 ++++++++++++++------------------------ 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/src/GameLib/MapManager.cpp b/src/GameLib/MapManager.cpp index acec17a..85067b7 100644 --- a/src/GameLib/MapManager.cpp +++ b/src/GameLib/MapManager.cpp @@ -261,46 +261,34 @@ void CMapManager::BeginEnvironment() if (mc_pcurEnvironmentData->bFogEnable) { - DWORD dwFogColor = mc_pcurEnvironmentData->FogColor; + const DWORD dwFogColor = mc_pcurEnvironmentData->FogColor; STATEMANAGER.SetRenderState(D3DRS_FOGCOLOR, dwFogColor); - // MR-14: Fog update by Alaric + const int iFogLevel = CPythonSystem::Instance().GetFogLevel(); // 2=Dense,1=Middle,0=Light - // DIFFERENCE WITH THE OFFICIAL VERSION: - /* - Currently the official does not use the buttons "Dense", "Middle", "Light" for fog density. Instead, - they use an On/Off boolean variable. To maintain the classic feel in the settings, we customized the - modern official functionality into the 3-way button controls. - - To migrate to boolean (official-like), replace mc_pcurEnvironmentData->bDensityFog with m_isFogModeEnabled - and remove the const float fFogDensityLevel[3] and instead, multiple mc_pcurEnvironmentData->bFogLevel with - the official 0.000010f value for the fDensity. - - To migrate with the official, other variables in this update must be adjusted as well. - */ - - if (mc_pcurEnvironmentData->bDensityFog && mc_pcurEnvironmentData->bFogLevel != 0) + if (mc_pcurEnvironmentData->bDensityFog && (mc_pcurEnvironmentData->bFogLevel != 0)) { const float fFogDensityLevel[3] = { 0.000020f, 0.000010f, 0.000005f }; - float fDensity = mc_pcurEnvironmentData->bFogLevel * fFogDensityLevel[CPythonSystem::Instance().GetFogLevel()]; + float fDensity = mc_pcurEnvironmentData->bFogLevel * fFogDensityLevel[iFogLevel]; - STATEMANAGER.SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_EXP); // pixel fog - STATEMANAGER.SetRenderState(D3DRS_FOGDENSITY, *((DWORD *) &fDensity)); // vertex fog + STATEMANAGER.SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_EXP); // pixel fog + STATEMANAGER.SetRenderState(D3DRS_FOGDENSITY, *((DWORD *) &fDensity)); // vertex fog } - // MR-14: -- END OF -- Fog update by Alaric else { + const float fFogScaleLevel[3] = { 0.75f, 1.0f, 1.25f }; + + float fFogNear = mc_pcurEnvironmentData->GetFogNearDistance(); + float fFogFar = mc_pcurEnvironmentData->GetFogFarDistance(); + + fFogNear *= fFogScaleLevel[iFogLevel]; + fFogFar *= fFogScaleLevel[iFogLevel]; + CSpeedTreeForestDirectX& rkForest=CSpeedTreeForestDirectX::Instance(); - rkForest.SetFog( - mc_pcurEnvironmentData->GetFogNearDistance(), - mc_pcurEnvironmentData->GetFogFarDistance() - ); + rkForest.SetFog(fFogNear, fFogFar); - float fFogNear=mc_pcurEnvironmentData->GetFogNearDistance(); - float fFogFar=mc_pcurEnvironmentData->GetFogFarDistance(); - - STATEMANAGER.SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR); // vertex fox - STATEMANAGER.SetRenderState(D3DRS_RANGEFOGENABLE, TRUE); // vertex fox + STATEMANAGER.SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR); // vertex fox + STATEMANAGER.SetRenderState(D3DRS_RANGEFOGENABLE, TRUE); // vertex fox STATEMANAGER.SetRenderState(D3DRS_FOGSTART, *((DWORD *) &fFogNear)); // USED BY D3DFOG_LINEAR STATEMANAGER.SetRenderState(D3DRS_FOGEND, *((DWORD *) &fFogFar)); // USED BY D3DFOG_LINEAR } From 94a773a1d5ffd9c46e406a6779aa2b4cec864ff8 Mon Sep 17 00:00:00 2001 From: ErLullo Date: Thu, 19 Feb 2026 12:09:33 +0100 Subject: [PATCH 3/3] Refactor fog settings handling in MapUtil --- src/GameLib/MapUtil.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/GameLib/MapUtil.cpp b/src/GameLib/MapUtil.cpp index 8b735a8..f64bdce 100644 --- a/src/GameLib/MapUtil.cpp +++ b/src/GameLib/MapUtil.cpp @@ -117,17 +117,23 @@ bool Environment_Load(SEnvironmentData& envData, const char* envFileName) if (textLoader.SetChildNode("fog")) { - // MR-14: Fog update by Alaric - // textLoader.GetTokenBoolean("enable", &envData.bFogEnable); - // textLoader.GetTokenBoolean("isdensity", &envData.bDensityFog); - // textLoader.GetTokenFloat("neardistance", &envData.m_fFogNearDistance); - // textLoader.GetTokenFloat("fardistance", &envData.m_fFogFarDistance); - textLoader.GetTokenByte("foglevel", &envData.bFogLevel); - // MR-14: -- END OF -- Fog update by Alaric + if (textLoader.GetTokenByte("foglevel", &envData.bFogLevel)) + { + envData.bDensityFog = true; + } + else + { + envData.bDensityFog = false; + textLoader.GetTokenBoolean("enable", &envData.bFogEnable); + textLoader.GetTokenFloat("neardistance", &envData.m_fFogNearDistance); + textLoader.GetTokenFloat("fardistance", &envData.m_fFogFarDistance); + } + textLoader.GetTokenColor("color", &envData.FogColor); + textLoader.SetParentNode(); } - + if (textLoader.SetChildNode("filter")) { textLoader.GetTokenBoolean("enable", (BOOL *) &envData.bFilteringEnable);