diff --git a/source/core/rendering/scene/hw_drawstructs.h b/source/core/rendering/scene/hw_drawstructs.h index 8b051fac7..fc3809c56 100644 --- a/source/core/rendering/scene/hw_drawstructs.h +++ b/source/core/rendering/scene/hw_drawstructs.h @@ -400,12 +400,12 @@ inline void SetSpriteTranslucency(const spritetype* sprite, float& alpha, FRende extern PalEntry GlobalMapFog; extern float GlobalFogDensity; -__forceinline void SetLightAndFog(FRenderState& state, PalEntry fade, int palette, int shade, int visibility, float alpha, bool setcolor = true) +__forceinline void SetLightAndFog(FRenderState& state, PalEntry fade, int palette, int orgshade, int visibility, float alpha, bool setcolor = true) { // Fog must be done before the texture so that the texture selector can override it. bool foggy = (GlobalMapFog || (fade & 0xffffff)); auto ShadeDiv = lookups.tables[palette].ShadeFactor; - shade = clamp(shade, 0, numshades - 1); + int shade = clamp(orgshade, 0, numshades - 1); // Disable brightmaps if non-black fog is used. if (ShadeDiv >= 1 / 1000.f && foggy) { @@ -415,12 +415,12 @@ __forceinline void SetLightAndFog(FRenderState& state, PalEntry fade, int palett state.SetSoftLightLevel(255); state.SetLightParms(128.f, 1 / 1000.f); } - else + else { state.EnableFog(0); state.SetFog(0, 0); state.SetSoftLightLevel(gl_fogmode != 0 && ShadeDiv >= 1 / 1000.f ? 255 - Scale(shade, 255, numshades) : 255); - state.SetLightParms(visibility, ShadeDiv / (numshades - 2)); + state.SetLightParms(visibility, orgshade < -numshades / 2 ? 1 / 1000.f : ShadeDiv / (numshades - 2)); } // The shade rgb from the tint is ignored here.