From e7f80947246523ae7a78e4672deab2b8d43e3b82 Mon Sep 17 00:00:00 2001 From: Caner Karaca Date: Sat, 19 Sep 2026 23:23:58 +0300 Subject: [PATCH] feat(sirens): add SirenPointLightMul reach multiplier setting --- resource/dist/ModelExtras.ini | 1 + src/ModelExtrasAPI.cpp | 4 ++++ src/ModelExtrasAPI.h | 1 + src/features/lights/data.h | 4 ++++ src/features/sirens.cpp | 7 ++++--- 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/resource/dist/ModelExtras.ini b/resource/dist/ModelExtras.ini index 2e71c01c..071184cd 100755 --- a/resource/dist/ModelExtras.ini +++ b/resource/dist/ModelExtras.ini @@ -51,6 +51,7 @@ CoronaNearClip = 0.45 # Minimum camera clipping di LightShadowDistance = 120.0 # Maximum draw distance for vehicle ground light shadows HighBeamPointLightMul = 2.0 # Multiplier for high beam point light reach (1.0 matches low beam, up to 4.0) PointLightIntensity = 0.8 # Brightness multiplier for dynamic point lights (0.0 to 1.0) +SirenPointLightMul = 1.0 # Multiplier for siren point light reach (up to 4.0) LightHeightLimit = 1.4 # Light height limit (0.0 to disable) MaterialAmbientMul = 1.0 # Multiplier for illuminated light material ambient brightness LightCoronaSize = 0.3 # Standard base of coronas size for turn and other lights diff --git a/src/ModelExtrasAPI.cpp b/src/ModelExtrasAPI.cpp index 10b01f96..39fdaa42 100755 --- a/src/ModelExtrasAPI.cpp +++ b/src/ModelExtrasAPI.cpp @@ -432,5 +432,9 @@ float ME_GetPointLightIntensity() { return LightsConfig::Get().fPointLightIntensity; } +float ME_GetSirenPointLightMul() { + return LightsConfig::Get().fSirenPointLightMul; +} + } // extern "C" diff --git a/src/ModelExtrasAPI.h b/src/ModelExtrasAPI.h index 1fb11946..dda46ab5 100755 --- a/src/ModelExtrasAPI.h +++ b/src/ModelExtrasAPI.h @@ -216,6 +216,7 @@ extern "C" // Visual & Render Configuration ME_WRAPPER float ME_GetPointLightIntensity(); + ME_WRAPPER float ME_GetSirenPointLightMul(); #ifdef __cplusplus } diff --git a/src/features/lights/data.h b/src/features/lights/data.h index 1636688d..b5cf895e 100644 --- a/src/features/lights/data.h +++ b/src/features/lights/data.h @@ -52,6 +52,7 @@ struct LightsConfig { bool bPlayerIdleBrakeLights = false; float fHighBeamPointLightMul = 2.0f; float fPointLightIntensity = 0.8f; + float fSirenPointLightMul = 1.0f; void InitConfig() { gbGlobalIndicatorLights = gConfig.ReadBoolean("LIGHTS", "StandardLights_GlobalIndicatorLights", gConfig.ReadBoolean("FEATURES", "StandardLights_GlobalIndicatorLights", false)); @@ -88,6 +89,9 @@ struct LightsConfig { float rawIntensity = gConfig.ReadFloat("LIGHTS", "PointLightIntensity", gConfig.ReadFloat("TWEAKS", "PointLightIntensity", 0.8f)); fPointLightIntensity = std::clamp(rawIntensity, 0.0f, 1.0f); + + float rawSirenMul = gConfig.ReadFloat("LIGHTS", "SirenPointLightMul", gConfig.ReadFloat("TWEAKS", "SirenPointLightMul", 1.0f)); + fSirenPointLightMul = (rawSirenMul < 0.1f) ? 0.1f : ((rawSirenMul > 4.0f) ? 4.0f : rawSirenMul); } private: diff --git a/src/features/sirens.cpp b/src/features/sirens.cpp index c214ed63..76c02ea8 100755 --- a/src/features/sirens.cpp +++ b/src/features/sirens.cpp @@ -1292,7 +1292,7 @@ void Sirens::ProcessPointLights(CVehicle *pVeh) } else if (mat.second->Size > 0.0f) { sirenRadius = mat.second->Size * 3.0f; } - sirenRadius = std::clamp(sirenRadius, 5.0f, 15.0f); + sirenRadius = std::clamp(sirenRadius, 5.0f, 15.0f) * LightsConfig::Get().fSirenPointLightMul; float intensity = LightsConfig::Get().fPointLightIntensity; float r = std::clamp((activeColor.r / 255.0f) * intensity, 0.0f, 1.0f); @@ -1371,13 +1371,14 @@ void Sirens::ProcessPointLights(CVehicle *pVeh) uint32_t step = (CTimer::m_snTimeInMilliseconds / 120) % 4; CMatrix vehMat = pVeh->GetMatrix(); float intensity = LightsConfig::Get().fPointLightIntensity; + float bikeSirenRadius = 8.5f * LightsConfig::Get().fSirenPointLightMul; if (step == 0 || step == 1) { CVector localLeft(-0.35f, 0.70f, 0.45f); CVector plightPos = pVeh->TransformFromObjectSpace(localLeft); CVector worldDir = vehMat.up - vehMat.at * 0.25f; worldDir.Normalize(); - CPointLights::AddLight(PLTYPE_SPOTLIGHT, plightPos, worldDir, 8.5f, 1.0f * intensity, 0.1f * intensity, 0.1f * intensity, 0, false, nullptr); + CPointLights::AddLight(PLTYPE_SPOTLIGHT, plightPos, worldDir, bikeSirenRadius, 1.0f * intensity, 0.1f * intensity, 0.1f * intensity, 0, false, nullptr); } else if (step == 2 || step == 3) { @@ -1385,7 +1386,7 @@ void Sirens::ProcessPointLights(CVehicle *pVeh) CVector plightPos = pVeh->TransformFromObjectSpace(localRight); CVector worldDir = vehMat.up - vehMat.at * 0.25f; worldDir.Normalize(); - CPointLights::AddLight(PLTYPE_SPOTLIGHT, plightPos, worldDir, 8.5f, 0.1f * intensity, 0.1f * intensity, 1.0f * intensity, 0, false, nullptr); + CPointLights::AddLight(PLTYPE_SPOTLIGHT, plightPos, worldDir, bikeSirenRadius, 0.1f * intensity, 0.1f * intensity, 1.0f * intensity, 0, false, nullptr); } } }