mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-13 07:57:51 +00:00
- Emulate the size limit of Doom's lightscale table by capping the value of vis passed to
GETPALOOKUP. The end result is that there is a minimum distance around you where light amplification stops and it gets no brighter. Should this scale with visibility? I can't say. So, yeah, it turns out all these years ago, I made this out to be harder than it really is. SVN r3224 (trunk)
This commit is contained in:
parent
ee8ca0de87
commit
3401e92834
2 changed files with 77 additions and 49 deletions
|
@ -98,9 +98,13 @@ extern bool r_dontmaplines;
|
||||||
// is necessary in order to best reproduce Doom's original lighting.
|
// is necessary in order to best reproduce Doom's original lighting.
|
||||||
#define LIGHT2SHADE(l) ((NUMCOLORMAPS*2*FRACUNIT)-(((l)+12)*FRACUNIT*NUMCOLORMAPS/128))
|
#define LIGHT2SHADE(l) ((NUMCOLORMAPS*2*FRACUNIT)-(((l)+12)*FRACUNIT*NUMCOLORMAPS/128))
|
||||||
|
|
||||||
|
// MAXLIGHTSCALE from original DOOM, divided by 2.
|
||||||
|
#define MAXLIGHTVIS (24*FRACUNIT)
|
||||||
|
|
||||||
// Convert a shade and visibility to a clamped colormap index.
|
// Convert a shade and visibility to a clamped colormap index.
|
||||||
// Result is not fixed point.
|
// Result is not fixed point.
|
||||||
#define GETPALOOKUP(vis,shade) (clamp<int> (((shade)-(vis))>>FRACBITS, 0, NUMCOLORMAPS-1))
|
// Change R_CalcTiltedLighting() when this changes.
|
||||||
|
#define GETPALOOKUP(vis,shade) (clamp<int> (((shade)-MIN(MAXLIGHTVIS,(vis)))>>FRACBITS, 0, NUMCOLORMAPS-1))
|
||||||
|
|
||||||
extern fixed_t GlobVis;
|
extern fixed_t GlobVis;
|
||||||
|
|
||||||
|
|
120
src/r_plane.cpp
120
src/r_plane.cpp
|
@ -251,64 +251,88 @@ void STACK_ARGS R_CalcTiltedLighting (fixed_t lval, fixed_t lend, int width)
|
||||||
BYTE *basecolormapdata = basecolormap->Maps;
|
BYTE *basecolormapdata = basecolormap->Maps;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
lval = planeshade - lval;
|
|
||||||
lend = planeshade - lend;
|
|
||||||
|
|
||||||
if (width == 0 || lval == lend)
|
if (width == 0 || lval == lend)
|
||||||
{ // Constant lighting
|
{ // Constant lighting
|
||||||
lightfiller = basecolormapdata + (GETPALOOKUP (-lval, 0) << COLORMAPSHIFT);
|
lightfiller = basecolormapdata + (GETPALOOKUP(lval, planeshade) << COLORMAPSHIFT);
|
||||||
}
|
|
||||||
else if ((lstep = (lend - lval) / width) < 0)
|
|
||||||
{ // Going from dark to light
|
|
||||||
if (lval < FRACUNIT)
|
|
||||||
{ // All bright
|
|
||||||
lightfiller = basecolormapdata;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (lval >= NUMCOLORMAPS*FRACUNIT)
|
|
||||||
{ // Starts beyond the dark end
|
|
||||||
BYTE *clight = basecolormapdata + ((NUMCOLORMAPS-1) << COLORMAPSHIFT);
|
|
||||||
while (lval >= NUMCOLORMAPS*FRACUNIT && i <= width)
|
|
||||||
{
|
|
||||||
tiltlighting[i++] = clight;
|
|
||||||
lval += lstep;
|
|
||||||
}
|
|
||||||
if (i > width)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
while (i <= width && lval >= 0)
|
|
||||||
{
|
|
||||||
tiltlighting[i++] = basecolormapdata + ((lval >> FRACBITS) << COLORMAPSHIFT);
|
|
||||||
lval += lstep;
|
|
||||||
}
|
|
||||||
lightfiller = basecolormapdata;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // Going from light to dark
|
{
|
||||||
if (lval >= (NUMCOLORMAPS-1)*FRACUNIT)
|
lstep = (lend - lval) / width;
|
||||||
{ // All dark
|
if (lval >= MAXLIGHTVIS)
|
||||||
lightfiller = basecolormapdata + ((NUMCOLORMAPS-1) << COLORMAPSHIFT);
|
{ // lval starts "too bright".
|
||||||
|
lightfiller = basecolormapdata + (GETPALOOKUP(lval, planeshade) << COLORMAPSHIFT);
|
||||||
|
for (; i <= width && lval >= MAXLIGHTVIS; ++i)
|
||||||
|
{
|
||||||
|
tiltlighting[i] = lightfiller;
|
||||||
|
lval += lstep;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
if (lend >= MAXLIGHTVIS)
|
||||||
|
{ // lend ends "too bright".
|
||||||
|
lightfiller = basecolormapdata + (GETPALOOKUP(lend, planeshade) << COLORMAPSHIFT);
|
||||||
|
for (; width > i && lend >= MAXLIGHTVIS; --width)
|
||||||
|
{
|
||||||
|
tiltlighting[width] = lightfiller;
|
||||||
|
lend -= lstep;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (width > 0)
|
||||||
{
|
{
|
||||||
while (lval < 0 && i <= width)
|
lval = planeshade - lval;
|
||||||
{
|
lend = planeshade - lend;
|
||||||
tiltlighting[i++] = basecolormapdata;
|
lstep = (lend - lval) / width;
|
||||||
lval += lstep;
|
if (lstep < 0)
|
||||||
|
{ // Going from dark to light
|
||||||
|
if (lval < FRACUNIT)
|
||||||
|
{ // All bright
|
||||||
|
lightfiller = basecolormapdata;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (lval >= NUMCOLORMAPS*FRACUNIT)
|
||||||
|
{ // Starts beyond the dark end
|
||||||
|
BYTE *clight = basecolormapdata + ((NUMCOLORMAPS-1) << COLORMAPSHIFT);
|
||||||
|
while (lval >= NUMCOLORMAPS*FRACUNIT && i <= width)
|
||||||
|
{
|
||||||
|
tiltlighting[i++] = clight;
|
||||||
|
lval += lstep;
|
||||||
|
}
|
||||||
|
if (i > width)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
while (i <= width && lval >= 0)
|
||||||
|
{
|
||||||
|
tiltlighting[i++] = basecolormapdata + ((lval >> FRACBITS) << COLORMAPSHIFT);
|
||||||
|
lval += lstep;
|
||||||
|
}
|
||||||
|
lightfiller = basecolormapdata;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (i > width)
|
else
|
||||||
return;
|
{ // Going from light to dark
|
||||||
while (i <= width && lval < (NUMCOLORMAPS-1)*FRACUNIT)
|
if (lval >= (NUMCOLORMAPS-1)*FRACUNIT)
|
||||||
{
|
{ // All dark
|
||||||
tiltlighting[i++] = basecolormapdata + ((lval >> FRACBITS) << COLORMAPSHIFT);
|
lightfiller = basecolormapdata + ((NUMCOLORMAPS-1) << COLORMAPSHIFT);
|
||||||
lval += lstep;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (lval < 0 && i <= width)
|
||||||
|
{
|
||||||
|
tiltlighting[i++] = basecolormapdata;
|
||||||
|
lval += lstep;
|
||||||
|
}
|
||||||
|
if (i > width)
|
||||||
|
return;
|
||||||
|
while (i <= width && lval < (NUMCOLORMAPS-1)*FRACUNIT)
|
||||||
|
{
|
||||||
|
tiltlighting[i++] = basecolormapdata + ((lval >> FRACBITS) << COLORMAPSHIFT);
|
||||||
|
lval += lstep;
|
||||||
|
}
|
||||||
|
lightfiller = basecolormapdata + ((NUMCOLORMAPS-1) << COLORMAPSHIFT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
lightfiller = basecolormapdata + ((NUMCOLORMAPS-1) << COLORMAPSHIFT);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (; i <= width; i++)
|
for (; i <= width; i++)
|
||||||
{
|
{
|
||||||
tiltlighting[i] = lightfiller;
|
tiltlighting[i] = lightfiller;
|
||||||
|
|
Loading…
Reference in a new issue