mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-24 21:11:39 +00:00
Merge branch 'master' of https://github.com/coelckers/gzdoom
# Conflicts: # src/CMakeLists.txt
This commit is contained in:
commit
40b68bfea0
8 changed files with 141 additions and 26 deletions
|
@ -60,6 +60,8 @@ long gl_frameCount;
|
|||
EXTERN_CVAR(Int, gl_lightmode)
|
||||
EXTERN_CVAR(Bool, gl_brightfog)
|
||||
EXTERN_CVAR(Bool, gl_lightadditivesurfaces)
|
||||
EXTERN_CVAR(Bool, gl_attenuate)
|
||||
|
||||
|
||||
CUSTOM_CVAR(Float, maxviewpitch, 90.f, CVAR_ARCHIVE|CVAR_SERVERINFO)
|
||||
{
|
||||
|
@ -207,6 +209,7 @@ struct FGLROptions : public FOptionalMapinfoData
|
|||
skyfog = 0;
|
||||
brightfog = false;
|
||||
lightmode = -1;
|
||||
attenuate = -1;
|
||||
nocoloredspritelighting = -1;
|
||||
notexturefill = -1;
|
||||
skyrotatevector = FVector3(0,0,1);
|
||||
|
@ -222,6 +225,7 @@ struct FGLROptions : public FOptionalMapinfoData
|
|||
newopt->outsidefogdensity = outsidefogdensity;
|
||||
newopt->skyfog = skyfog;
|
||||
newopt->lightmode = lightmode;
|
||||
newopt->attenuate = attenuate;
|
||||
newopt->nocoloredspritelighting = nocoloredspritelighting;
|
||||
newopt->notexturefill = notexturefill;
|
||||
newopt->skyrotatevector = skyrotatevector;
|
||||
|
@ -235,6 +239,7 @@ struct FGLROptions : public FOptionalMapinfoData
|
|||
int skyfog;
|
||||
int lightmode;
|
||||
int brightfog;
|
||||
int8_t attenuate;
|
||||
int8_t lightadditivesurfaces;
|
||||
int8_t nocoloredspritelighting;
|
||||
int8_t notexturefill;
|
||||
|
@ -325,6 +330,20 @@ DEFINE_MAP_OPTION(lightadditivesurfaces, false)
|
|||
}
|
||||
}
|
||||
|
||||
DEFINE_MAP_OPTION(attenuate, false)
|
||||
{
|
||||
FGLROptions *opt = info->GetOptData<FGLROptions>("gl_renderer");
|
||||
if (parse.CheckAssign())
|
||||
{
|
||||
parse.sc.MustGetNumber();
|
||||
opt->attenuate = !!parse.sc.Number;
|
||||
}
|
||||
else
|
||||
{
|
||||
opt->attenuate = true;
|
||||
}
|
||||
}
|
||||
|
||||
DEFINE_MAP_OPTION(skyrotate, false)
|
||||
{
|
||||
FGLROptions *opt = info->GetOptData<FGLROptions>("gl_renderer");
|
||||
|
@ -371,6 +390,22 @@ bool IsLightmodeValid()
|
|||
return (glset.map_lightmode >= 0 && glset.map_lightmode <= 4) || glset.map_lightmode == 8;
|
||||
}
|
||||
|
||||
static void ResetOpts()
|
||||
{
|
||||
if (!IsLightmodeValid()) glset.lightmode = gl_lightmode;
|
||||
else glset.lightmode = glset.map_lightmode;
|
||||
if (glset.map_nocoloredspritelighting == -1) glset.nocoloredspritelighting = gl_nocoloredspritelighting;
|
||||
else glset.nocoloredspritelighting = !!glset.map_nocoloredspritelighting;
|
||||
if (glset.map_notexturefill == -1) glset.notexturefill = gl_notexturefill;
|
||||
else glset.notexturefill = !!glset.map_notexturefill;
|
||||
if (glset.map_brightfog == -1) glset.brightfog = gl_brightfog;
|
||||
else glset.brightfog = !!glset.map_brightfog;
|
||||
if (glset.map_lightadditivesurfaces == -1) glset.lightadditivesurfaces = gl_lightadditivesurfaces;
|
||||
else glset.lightadditivesurfaces = !!glset.map_lightadditivesurfaces;
|
||||
if (glset.map_attenuate == -1) glset.attenuate = gl_attenuate;
|
||||
else glset.attenuate = !!glset.map_attenuate;
|
||||
}
|
||||
|
||||
void InitGLRMapinfoData()
|
||||
{
|
||||
FGLROptions *opt = level.info->GetOptData<FGLROptions>("gl_renderer", false);
|
||||
|
@ -380,6 +415,7 @@ void InitGLRMapinfoData()
|
|||
gl_SetFogParams(opt->fogdensity, level.info->outsidefog, opt->outsidefogdensity, opt->skyfog);
|
||||
glset.map_lightmode = opt->lightmode;
|
||||
glset.map_lightadditivesurfaces = opt->lightadditivesurfaces;
|
||||
glset.map_attenuate = opt->attenuate;
|
||||
glset.map_brightfog = opt->brightfog;
|
||||
glset.map_nocoloredspritelighting = opt->nocoloredspritelighting;
|
||||
glset.map_notexturefill = opt->notexturefill;
|
||||
|
@ -393,35 +429,18 @@ void InitGLRMapinfoData()
|
|||
glset.map_lightmode = -1;
|
||||
glset.map_lightadditivesurfaces = -1;
|
||||
glset.map_brightfog = -1;
|
||||
glset.map_attenuate = -1;
|
||||
glset.map_nocoloredspritelighting = -1;
|
||||
glset.map_notexturefill = -1;
|
||||
glset.skyrotatevector = FVector3(0,0,1);
|
||||
glset.skyrotatevector2 = FVector3(0,0,1);
|
||||
glset.skyrotatevector = FVector3(0, 0, 1);
|
||||
glset.skyrotatevector2 = FVector3(0, 0, 1);
|
||||
glset.pixelstretch = 1.2f;
|
||||
}
|
||||
|
||||
if (!IsLightmodeValid()) glset.lightmode = gl_lightmode;
|
||||
else glset.lightmode = glset.map_lightmode;
|
||||
if (glset.map_nocoloredspritelighting == -1) glset.nocoloredspritelighting = gl_nocoloredspritelighting;
|
||||
else glset.nocoloredspritelighting = !!glset.map_nocoloredspritelighting;
|
||||
if (glset.map_notexturefill == -1) glset.notexturefill = gl_notexturefill;
|
||||
else glset.notexturefill = !!glset.map_notexturefill;
|
||||
if (glset.map_brightfog == -1) glset.brightfog = gl_brightfog;
|
||||
else glset.brightfog = !!glset.map_brightfog;
|
||||
if (glset.map_lightadditivesurfaces == -1) glset.brightfog = gl_brightfog;
|
||||
else glset.lightadditivesurfaces = !!glset.map_lightadditivesurfaces;
|
||||
ResetOpts();
|
||||
}
|
||||
|
||||
CCMD(gl_resetmap)
|
||||
{
|
||||
if (!IsLightmodeValid()) glset.lightmode = gl_lightmode;
|
||||
else glset.lightmode = glset.map_lightmode;
|
||||
if (glset.map_nocoloredspritelighting == -1) glset.nocoloredspritelighting = gl_nocoloredspritelighting;
|
||||
else glset.nocoloredspritelighting = !!glset.map_nocoloredspritelighting;
|
||||
if (glset.map_notexturefill == -1) glset.notexturefill = gl_notexturefill;
|
||||
else glset.notexturefill = !!glset.map_notexturefill;
|
||||
if (glset.map_brightfog == -1) glset.brightfog = gl_brightfog;
|
||||
else glset.brightfog = !!glset.map_brightfog;
|
||||
ResetOpts();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -13,12 +13,14 @@ struct GLRenderSettings
|
|||
bool notexturefill;
|
||||
bool brightfog;
|
||||
bool lightadditivesurfaces;
|
||||
bool attenuate;
|
||||
|
||||
int8_t map_lightmode;
|
||||
int8_t map_nocoloredspritelighting;
|
||||
int8_t map_notexturefill;
|
||||
int8_t map_brightfog;
|
||||
int8_t map_lightadditivesurfaces;
|
||||
int8_t map_attenuate;
|
||||
|
||||
FVector3 skyrotatevector;
|
||||
FVector3 skyrotatevector2;
|
||||
|
|
|
@ -54,6 +54,7 @@
|
|||
#include "gl/textures/gl_skyboxtexture.h"
|
||||
#include "gl/utility/gl_clock.h"
|
||||
#include "gl/utility/gl_convert.h"
|
||||
#include "gl/data/gl_data.h"
|
||||
|
||||
int ScriptDepth;
|
||||
void gl_InitGlow(FScanner &sc);
|
||||
|
@ -128,6 +129,7 @@ public:
|
|||
void SetSubtractive(bool subtract) { m_subtractive = subtract; }
|
||||
void SetAdditive(bool add) { m_additive = add; }
|
||||
void SetDontLightSelf(bool add) { m_dontlightself = add; }
|
||||
void SetAttenuate(bool on) { m_attenuate = on; }
|
||||
void SetHalo(bool halo) { m_halo = halo; }
|
||||
protected:
|
||||
FName m_Name;
|
||||
|
@ -135,6 +137,7 @@ protected:
|
|||
double m_Param;
|
||||
DVector3 m_Pos;
|
||||
ELightType m_type;
|
||||
int8_t m_attenuate;
|
||||
bool m_subtractive, m_additive, m_halo, m_dontlightself;
|
||||
};
|
||||
|
||||
|
@ -159,6 +162,7 @@ FLightDefaults::FLightDefaults(FName name, ELightType type)
|
|||
m_additive = false;
|
||||
m_halo = false;
|
||||
m_dontlightself = false;
|
||||
m_attenuate = -1;
|
||||
}
|
||||
|
||||
void FLightDefaults::ApplyProperties(ADynamicLight * light) const
|
||||
|
@ -175,7 +179,13 @@ void FLightDefaults::ApplyProperties(ADynamicLight * light) const
|
|||
if (m_additive) light->flags4 |= MF4_ADDITIVE;
|
||||
if (m_dontlightself) light->flags4 |= MF4_DONTLIGHTSELF;
|
||||
light->m_tickCount = 0;
|
||||
}
|
||||
switch (m_attenuate)
|
||||
{
|
||||
case 0: light->flags4 &= ~MF4_ATTENUATE; break;
|
||||
case 1: light->flags4 |= MF4_ATTENUATE; break;
|
||||
default: if (glset.attenuate) light->flags4 |= MF4_ATTENUATE; else light->flags4 &= ~MF4_ATTENUATE; break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//==========================================================================
|
||||
|
@ -202,6 +212,7 @@ static const char *LightTags[]=
|
|||
"additive",
|
||||
"halo",
|
||||
"dontlightself",
|
||||
"attenuate",
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -222,6 +233,7 @@ enum {
|
|||
LIGHTTAG_ADDITIVE,
|
||||
LIGHTTAG_HALO,
|
||||
LIGHTTAG_DONTLIGHTSELF,
|
||||
LIGHTTAG_ATTENUATE
|
||||
};
|
||||
|
||||
|
||||
|
@ -349,6 +361,9 @@ void gl_ParsePointLight(FScanner &sc)
|
|||
case LIGHTTAG_DONTLIGHTSELF:
|
||||
defaults->SetDontLightSelf(gl_ParseInt(sc) != 0);
|
||||
break;
|
||||
case LIGHTTAG_ATTENUATE:
|
||||
defaults->SetAttenuate(gl_ParseInt(sc) != 0);
|
||||
break;
|
||||
default:
|
||||
sc.ScriptError("Unknown tag: %s\n", sc.String);
|
||||
}
|
||||
|
@ -428,6 +443,9 @@ void gl_ParsePulseLight(FScanner &sc)
|
|||
case LIGHTTAG_DONTLIGHTSELF:
|
||||
defaults->SetDontLightSelf(gl_ParseInt(sc) != 0);
|
||||
break;
|
||||
case LIGHTTAG_ATTENUATE:
|
||||
defaults->SetAttenuate(gl_ParseInt(sc) != 0);
|
||||
break;
|
||||
default:
|
||||
sc.ScriptError("Unknown tag: %s\n", sc.String);
|
||||
}
|
||||
|
@ -515,6 +533,9 @@ void gl_ParseFlickerLight(FScanner &sc)
|
|||
case LIGHTTAG_DONTLIGHTSELF:
|
||||
defaults->SetDontLightSelf(gl_ParseInt(sc) != 0);
|
||||
break;
|
||||
case LIGHTTAG_ATTENUATE:
|
||||
defaults->SetAttenuate(gl_ParseInt(sc) != 0);
|
||||
break;
|
||||
default:
|
||||
sc.ScriptError("Unknown tag: %s\n", sc.String);
|
||||
}
|
||||
|
@ -594,6 +615,9 @@ void gl_ParseFlickerLight2(FScanner &sc)
|
|||
case LIGHTTAG_DONTLIGHTSELF:
|
||||
defaults->SetDontLightSelf(gl_ParseInt(sc) != 0);
|
||||
break;
|
||||
case LIGHTTAG_ATTENUATE:
|
||||
defaults->SetAttenuate(gl_ParseInt(sc) != 0);
|
||||
break;
|
||||
default:
|
||||
sc.ScriptError("Unknown tag: %s\n", sc.String);
|
||||
}
|
||||
|
@ -671,6 +695,9 @@ void gl_ParseSectorLight(FScanner &sc)
|
|||
case LIGHTTAG_DONTLIGHTSELF:
|
||||
defaults->SetDontLightSelf(gl_ParseInt(sc) != 0);
|
||||
break;
|
||||
case LIGHTTAG_ATTENUATE:
|
||||
defaults->SetAttenuate(gl_ParseInt(sc) != 0);
|
||||
break;
|
||||
default:
|
||||
sc.ScriptError("Unknown tag: %s\n", sc.String);
|
||||
}
|
||||
|
|
|
@ -63,7 +63,8 @@ CUSTOM_CVAR(Bool, gl_enhanced_nightvision, true, CVAR_ARCHIVE|CVAR_NOINITCALL)
|
|||
}
|
||||
}
|
||||
CVAR(Bool, gl_brightfog, false, CVAR_ARCHIVE);
|
||||
CVAR(Bool, lightadditivesurfaces, false, CVAR_ARCHIVE);
|
||||
CVAR(Bool, gl_lightadditivesurfaces, false, CVAR_ARCHIVE);
|
||||
CVAR(Bool, gl_attenuate, false, CVAR_ARCHIVE);
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -860,6 +860,26 @@ bool PIT_CheckLine(FMultiBlockLinesIterator &mit, FMultiBlockLinesIterator::Chec
|
|||
FLineOpening open;
|
||||
|
||||
P_LineOpening(open, tm.thing, ld, ref, &cres.Position, cres.portalflags);
|
||||
if (!tm.thing->Sector->PortalBlocksMovement(sector_t::ceiling))
|
||||
{
|
||||
sector_t *oppsec = cres.line->frontsector == tm.thing->Sector ? cres.line->backsector : cres.line->frontsector;
|
||||
if (oppsec->PortalBlocksMovement(sector_t::ceiling))
|
||||
{
|
||||
double portz = tm.thing->Sector->GetPortalPlaneZ(sector_t::ceiling);
|
||||
if (tm.thing->Z() < portz && tm.thing->Z() + tm.thing->MaxStepHeight >= portz && tm.floorz < portz)
|
||||
{
|
||||
// Actor is stepping through a portal.
|
||||
/*
|
||||
tm.floorz = portz;
|
||||
tm.floorsector = oppsec;
|
||||
tm.floorpic = cres.line->sidedef[0]->GetTexture(side_t::mid);
|
||||
tm.floorterrain = 0;
|
||||
*/
|
||||
tm.portalstep = true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// [RH] Steep sectors count as dropoffs, if the actor touches the boundary between a steep slope and something else
|
||||
if (!(tm.thing->flags & MF_DROPOFF) &&
|
||||
|
|
|
@ -1231,8 +1231,8 @@ bool P_CollectConnectedGroups(int startgroup, const DVector3 &position, double u
|
|||
{
|
||||
int othergroup = wsec->GetOppositePortalGroup(sector_t::floor);
|
||||
DVector2 pos = Displacements.getOffset(startgroup, othergroup) + position;
|
||||
processMask.setBit(othergroup | FPortalGroupArray::LOWER);
|
||||
out.Add(othergroup);
|
||||
processMask.setBit(othergroup);
|
||||
out.Add(othergroup | FPortalGroupArray::LOWER);
|
||||
wsec = P_PointInSector(pos); // get lower sector at the exact spot we want to check and repeat
|
||||
retval = true;
|
||||
}
|
||||
|
|
|
@ -104,6 +104,11 @@ DoomEdNums
|
|||
9823 = SectorPointLightSubtractive
|
||||
9824 = PointLightFlickerRandomSubtractive
|
||||
9825 = VavoomLight
|
||||
9830 = PointLightAttenuated
|
||||
9831 = PointLightPulseAttenuated
|
||||
9832 = PointLightFlickerAttenuated
|
||||
9833 = SectorPointLightAttenuated
|
||||
9834 = PointLightFlickerRandomAttenuated
|
||||
9982 = SecActEyesAboveC
|
||||
9983 = SecActEyesBelowC
|
||||
9988 = CustomSprite
|
||||
|
|
|
@ -157,3 +157,44 @@ class VavoomLightColor : VavoomLight native
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
class PointLightAttenuated : PointLight
|
||||
{
|
||||
Default
|
||||
{
|
||||
+INCOMBAT
|
||||
}
|
||||
}
|
||||
|
||||
class PointLightPulseAttenuated : PointLightPulse
|
||||
{
|
||||
Default
|
||||
{
|
||||
+INCOMBAT
|
||||
}
|
||||
}
|
||||
|
||||
class PointLightFlickerAttenuated : PointLightFlicker
|
||||
{
|
||||
Default
|
||||
{
|
||||
+INCOMBAT
|
||||
}
|
||||
}
|
||||
|
||||
class SectorPointLightAttenuated : SectorPointLight
|
||||
{
|
||||
Default
|
||||
{
|
||||
+INCOMBAT
|
||||
}
|
||||
}
|
||||
|
||||
class PointLightFlickerRandomAttenuated :PointLightFlickerRandom
|
||||
{
|
||||
Default
|
||||
{
|
||||
+INCOMBAT
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue