From 3befb3f5e7a0f67209bb6922cca8170d71fa95a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Lu=C3=ADs=20Vaz=20Silva?= Date: Tue, 29 Apr 2025 15:37:28 -0300 Subject: [PATCH] limit light alpha mult to renderflag --- src/playsim/actor.h | 1 + src/rendering/hwrenderer/hw_dynlightdata.cpp | 2 +- src/rendering/hwrenderer/scene/hw_spritelight.cpp | 2 +- src/scripting/thingdef_data.cpp | 1 + wadsrc/static/zscript/actors/shared/dynlights.zs | 1 + 5 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/playsim/actor.h b/src/playsim/actor.h index 2f461e108..7e132fa73 100644 --- a/src/playsim/actor.h +++ b/src/playsim/actor.h @@ -508,6 +508,7 @@ enum ActorRenderFlag2 RF2_ISOMETRICSPRITES = 0x0080, RF2_SQUAREPIXELS = 0x0100, // apply +ROLLSPRITE scaling math so that non rolling sprites get the same scaling RF2_STRETCHPIXELS = 0x0200, // don't apply SQUAREPIXELS for ROLLSPRITES + RF2_LIGHTMULTALPHA = 0x0400, // attached lights use alpha as intensity multiplier }; // This translucency value produces the closest match to Heretic's TINTTAB. diff --git a/src/rendering/hwrenderer/hw_dynlightdata.cpp b/src/rendering/hwrenderer/hw_dynlightdata.cpp index 0c264a1f7..bf516e637 100644 --- a/src/rendering/hwrenderer/hw_dynlightdata.cpp +++ b/src/rendering/hwrenderer/hw_dynlightdata.cpp @@ -92,7 +92,7 @@ void AddLightToList(FDynLightData &dld, int group, FDynamicLight * light, bool f cs = 1.0f; } - if (light->target) + if (light->target && (light->target->renderflags2 & RF2_LIGHTMULTALPHA)) cs *= (float)light->target->Alpha; float r = light->GetRed() / 255.0f * cs; diff --git a/src/rendering/hwrenderer/scene/hw_spritelight.cpp b/src/rendering/hwrenderer/scene/hw_spritelight.cpp index ca67296d7..eec49dd93 100644 --- a/src/rendering/hwrenderer/scene/hw_spritelight.cpp +++ b/src/rendering/hwrenderer/scene/hw_spritelight.cpp @@ -177,7 +177,7 @@ void HWDrawInfo::GetDynSpriteLight(AActor *self, float x, float y, float z, FLig lg = light->GetGreen() / 255.0f; lb = light->GetBlue() / 255.0f; - if (light->target) + if (light->target && (light->target->renderflags2 & RF2_LIGHTMULTALPHA)) { float alpha = (float)light->target->Alpha; lr *= alpha; diff --git a/src/scripting/thingdef_data.cpp b/src/scripting/thingdef_data.cpp index e17e28c35..73d579e31 100644 --- a/src/scripting/thingdef_data.cpp +++ b/src/scripting/thingdef_data.cpp @@ -389,6 +389,7 @@ static FFlagDef ActorFlagDefs[]= DEFINE_FLAG(RF2, ISOMETRICSPRITES, AActor, renderflags2), DEFINE_FLAG(RF2, SQUAREPIXELS, AActor, renderflags2), DEFINE_FLAG(RF2, STRETCHPIXELS, AActor, renderflags2), + DEFINE_FLAG(RF2, LIGHTMULTALPHA, AActor, renderflags2), // Bounce flags DEFINE_FLAG2(BOUNCE_Walls, BOUNCEONWALLS, AActor, BounceFlags), diff --git a/wadsrc/static/zscript/actors/shared/dynlights.zs b/wadsrc/static/zscript/actors/shared/dynlights.zs index 8c5d0850d..5e4670c99 100644 --- a/wadsrc/static/zscript/actors/shared/dynlights.zs +++ b/wadsrc/static/zscript/actors/shared/dynlights.zs @@ -73,6 +73,7 @@ class DynamicLight : Actor +FIXMAPTHINGPOS +INVISIBLE +NOTONAUTOMAP + +LIGHTMULTALPHA } //==========================================================================