Revamp alpha setup for the remaining FOFs

This commit is contained in:
MascaraSnake 2020-06-12 16:45:18 +02:00
parent 6521496d8a
commit 5f9af65aa0
4 changed files with 171 additions and 158 deletions

View file

@ -1757,31 +1757,29 @@ udmf
}
arg1
{
title = "Visibility";
title = "Alpha";
default = 255;
}
arg2
{
title = "Appearance";
type = 12;
enum
{
1 = "Don't render planes";
2 = "Don't render sides";
4 = "Render insides";
8 = "Render only insides";
16 = "No shadow";
32 = "Cut cyan flat pixels";
}
}
arg2
arg3
{
title = "Tangibility";
type = 12;
enum = "tangibility";
}
arg3
{
title = "Appearance";
type = 12;
enum
{
1 = "Translucent";
2 = "No shadow";
}
}
}
120
@ -1931,31 +1929,29 @@ udmf
}
arg1
{
title = "Visibility";
title = "Alpha";
default = 255;
}
arg2
{
title = "Appearance";
type = 12;
enum
{
1 = "Don't render planes";
2 = "Don't render sides";
4 = "Render insides";
8 = "Render only insides";
16 = "No shadow";
32 = "Cut cyan flat pixels";
}
}
arg2
arg3
{
title = "Tangibility";
type = 12;
enum = "tangibility";
}
arg3
{
title = "Appearance";
type = 12;
enum
{
1 = "Translucent";
2 = "No shadow";
}
}
arg4
{
title = "Speed";
@ -2011,14 +2007,8 @@ udmf
}
arg1
{
title = "Visibility";
type = 12;
enum
{
1 = "Don't render planes";
2 = "Don't render sides";
4 = "Don't render insides";
}
title = "Alpha";
default = 255;
}
arg2
{
@ -2026,8 +2016,12 @@ udmf
type = 12;
enum
{
1 = "Translucent";
2 = "No shadow";
1 = "Don't render planes";
2 = "Don't render sides";
4 = "Don't render insides";
8 = "Render only insides";
16 = "No shadow";
32 = "Cut cyan flat pixels";
}
}
}

View file

@ -3016,35 +3016,36 @@ static void P_ConvertBinaryMap(void)
case 105: //FOF: solid, invisible
lines[i].args[0] = lines[i].tag;
//Visibility
//Alpha
if (lines[i].special == 102)
{
if (lines[i].flags & ML_NOCLIMB)
lines[i].args[2] |= TMFA_INSIDES;
if (sides[lines[i].sidenum[0]].toptexture > 0)
lines[i].args[1] = sides[lines[i].sidenum[0]].toptexture;
else
lines[i].args[1] = 128;
}
else
lines[i].args[1] = 255;
//Appearance
if (lines[i].special == 105)
lines[i].args[1] = TMFV_NOPLANES|TMFV_NOSIDES;
lines[i].args[2] = TMFA_NOPLANES|TMFA_NOSIDES;
else if (lines[i].special == 104)
lines[i].args[1] = TMFV_NOSIDES;
lines[i].args[2] = TMFA_NOSIDES;
else if (lines[i].special == 103)
lines[i].args[1] = TMFV_NOPLANES;
lines[i].args[2] = TMFA_NOPLANES;
if (lines[i].special != 100 && (lines[i].special != 104 || !(lines[i].flags & ML_NOCLIMB)))
lines[i].args[2] |= TMFA_NOSHADE;
if (lines[i].flags & ML_EFFECT6)
lines[i].args[2] |= TMFA_SPLAT;
//Tangibility
if (lines[i].flags & ML_EFFECT1)
lines[i].args[2] |= TMFT_DONTBLOCKOTHERS;
lines[i].args[3] |= TMFT_DONTBLOCKOTHERS;
if (lines[i].flags & ML_EFFECT2)
lines[i].args[2] |= TMFT_DONTBLOCKPLAYER;
//Translucency
if (lines[i].special == 102)
{
lines[i].args[3] |= TMFA_TRANSLUCENT;
if (lines[i].flags & ML_NOCLIMB)
lines[i].args[1] |= TMFV_TOGGLEINSIDES;
if (sides[lines[i].sidenum[0]].toptexture > 0)
lines[i].alpha = (sides[lines[i].sidenum[0]].toptexture << FRACBITS)/255;
else
lines[i].alpha = FRACUNIT/2;
}
//Shadow?
if (lines[i].special != 100 && (lines[i].special != 104 || !(lines[i].flags & ML_NOCLIMB)))
lines[i].args[3] |= TMFA_NOSHADE;
lines[i].args[3] |= TMFT_DONTBLOCKPLAYER;
lines[i].special = 100;
break;
@ -3098,40 +3099,41 @@ static void P_ConvertBinaryMap(void)
case 146: //FOF: only tangible from sides
lines[i].args[0] = lines[i].tag;
//Visibility
//Alpha
if (lines[i].special == 141 || lines[i].special == 142 || lines[i].special == 144 || lines[i].special == 145)
{
if (lines[i].flags & ML_NOCLIMB)
lines[i].args[2] |= TMFA_INSIDES;
if (sides[lines[i].sidenum[0]].toptexture > 0)
lines[i].args[1] = sides[lines[i].sidenum[0]].toptexture;
else
lines[i].args[1] = 128;
}
else
lines[i].args[1] = 255;
//Appearance
if (lines[i].special == 142 || lines[i].special == 145)
lines[i].args[1] = TMFV_NOSIDES;
lines[i].args[2] = TMFA_NOSIDES;
else if (lines[i].special == 146)
lines[i].args[1] = TMFV_NOPLANES;
lines[i].args[2] = TMFA_NOPLANES;
if (lines[i].special != 146 && (lines[i].flags & ML_NOCLIMB))
lines[i].args[2] |= TMFA_NOSHADE;
if (lines[i].flags & ML_EFFECT6)
lines[i].args[2] |= TMFA_SPLAT;
//Tangibility
if (lines[i].special <= 142)
lines[i].args[2] |= TMFT_INTANGIBLEBOTTOM;
lines[i].args[3] |= TMFT_INTANGIBLEBOTTOM;
else if (lines[i].special <= 145)
lines[i].args[2] |= TMFT_INTANGIBLETOP;
lines[i].args[3] |= TMFT_INTANGIBLETOP;
else
lines[i].args[2] |= TMFT_INTANGIBLEBOTTOM|TMFT_INTANGIBLETOP;
lines[i].args[3] |= TMFT_INTANGIBLEBOTTOM|TMFT_INTANGIBLETOP;
if (lines[i].flags & ML_EFFECT1)
lines[i].args[2] |= TMFT_DONTBLOCKOTHERS;
lines[i].args[3] |= TMFT_DONTBLOCKOTHERS;
if (lines[i].flags & ML_EFFECT2)
lines[i].args[2] |= TMFT_DONTBLOCKPLAYER;
//Translucency
if (lines[i].special == 141 || lines[i].special == 142 || lines[i].special == 144 || lines[i].special == 145)
{
lines[i].args[3] |= TMFA_TRANSLUCENT;
if (lines[i].flags & ML_NOCLIMB)
lines[i].args[1] |= TMFV_TOGGLEINSIDES;
if (sides[lines[i].sidenum[0]].toptexture > 0)
lines[i].alpha = (sides[lines[i].sidenum[0]].toptexture << FRACBITS)/255;
else
lines[i].alpha = FRACUNIT/2;
}
//Shadow?
if (lines[i].special != 146 && (lines[i].flags & ML_NOCLIMB))
lines[i].args[3] |= TMFA_NOSHADE;
lines[i].args[3] |= TMFT_DONTBLOCKPLAYER;
lines[i].special = 100;
break;
@ -3227,33 +3229,34 @@ static void P_ConvertBinaryMap(void)
case 195: // FOF: Rising, intangible from bottom, translucent
lines[i].args[0] = lines[i].tag;
//Visibility
if (lines[i].special == 193)
lines[i].args[1] = TMFV_NOPLANES|TMFV_NOSIDES;
if (lines[i].special >= 194)
lines[i].args[1] = TMFV_TOGGLEINSIDES;
//Tangibility
if (lines[i].flags & ML_EFFECT1)
lines[i].args[2] |= TMFT_DONTBLOCKOTHERS;
if (lines[i].flags & ML_EFFECT2)
lines[i].args[2] |= TMFT_DONTBLOCKPLAYER;
if (lines[i].special >= 194)
lines[i].args[2] |= TMFT_INTANGIBLEBOTTOM;
//Translucency
if (lines[i].special == 192 || lines[i].special == 195)
{
lines[i].args[3] |= TMFA_TRANSLUCENT;
if (sides[lines[i].sidenum[0]].toptexture > 0)
lines[i].alpha = (sides[lines[i].sidenum[0]].toptexture << FRACBITS)/255;
lines[i].args[1] = sides[lines[i].sidenum[0]].toptexture;
else
lines[i].alpha = FRACUNIT/2;
lines[i].args[1] = 128;
}
else
lines[i].args[1] = 255;
//Shadow?
//Appearance
if (lines[i].special == 193)
lines[i].args[2] = TMFA_NOPLANES|TMFA_NOSIDES;
if (lines[i].special >= 194)
lines[i].args[2] = TMFA_INSIDES;
if (lines[i].special != 190 && (lines[i].special <= 193 || lines[i].flags & ML_NOCLIMB))
lines[i].args[3] |= TMFA_NOSHADE;
lines[i].args[2] |= TMFA_NOSHADE;
if (lines[i].flags & ML_EFFECT6)
lines[i].args[2] |= TMFA_SPLAT;
//Tangibility
if (lines[i].flags & ML_EFFECT1)
lines[i].args[3] |= TMFT_DONTBLOCKOTHERS;
if (lines[i].flags & ML_EFFECT2)
lines[i].args[3] |= TMFT_DONTBLOCKPLAYER;
if (lines[i].special >= 194)
lines[i].args[3] |= TMFT_INTANGIBLEBOTTOM;
//Speed
lines[i].args[4] = P_AproxDistance(lines[i].dx, lines[i].dy) >> FRACBITS;
@ -3282,23 +3285,26 @@ static void P_ConvertBinaryMap(void)
case 222: //FOF: Intangible, sides only
lines[i].args[0] = lines[i].tag;
//Visibility
if (lines[i].special == 222)
lines[i].args[1] |= TMFV_NOPLANES;
if (lines[i].special == 221)
lines[i].args[1] |= TMFV_TOGGLEINSIDES;
//Appearance
//Alpha
if (lines[i].special == 221)
{
lines[i].args[2] |= TMFA_TRANSLUCENT;
if (sides[lines[i].sidenum[0]].toptexture > 0)
lines[i].alpha = (sides[lines[i].sidenum[0]].toptexture << FRACBITS)/255;
lines[i].args[1] = sides[lines[i].sidenum[0]].toptexture;
else
lines[i].alpha = FRACUNIT/2;
lines[i].args[1] = 128;
}
else
lines[i].args[1] = 255;
//Appearance
if (lines[i].special == 222)
lines[i].args[2] |= TMFA_NOPLANES;
if (lines[i].special != 221)
lines[i].args[2] |= TMFA_INSIDES;
if (lines[i].special != 220 && !(lines[i].flags & ML_NOCLIMB))
lines[i].args[2] |= TMFA_NOSHADE;
if (lines[i].flags & ML_EFFECT6)
lines[i].args[2] |= TMFA_SPLAT;
lines[i].special = 220;
break;

View file

@ -6602,46 +6602,51 @@ void P_SpawnSpecials(boolean fromnetsave)
case 100: // FOF (solid)
ffloorflags = FF_EXISTS|FF_SOLID|FF_RENDERALL;
//Visibility settings
if (lines[i].args[1] & TMFV_NOPLANES)
//Appearance settings
if (lines[i].args[2] & TMFA_NOPLANES)
ffloorflags &= ~FF_RENDERPLANES;
if (lines[i].args[1] & TMFV_NOSIDES)
if (lines[i].args[2] & TMFA_NOSIDES)
ffloorflags &= ~FF_RENDERSIDES;
if (lines[i].args[1] & TMFV_TOGGLEINSIDES)
if (lines[i].args[2] & TMFA_INSIDES)
{
if (ffloorflags & FF_RENDERPLANES)
ffloorflags |= FF_BOTHPLANES;
if (ffloorflags & FF_RENDERSIDES)
ffloorflags |= FF_ALLSIDES;
}
if (lines[i].args[2] & TMFA_ONLYINSIDES)
{
if (ffloorflags & FF_RENDERPLANES)
ffloorflags |= FF_INVERTPLANES;
if (ffloorflags & FF_RENDERSIDES)
ffloorflags |= FF_INVERTSIDES;
}
if (lines[i].args[2] & TMFA_NOSHADE)
ffloorflags |= FF_NOSHADE;
if (lines[i].args[2] & TMFA_SPLAT)
ffloorflags |= FF_SPLAT;
//Tangibility settings
if (lines[i].args[2] & TMFT_INTANGIBLETOP)
if (lines[i].args[3] & TMFT_INTANGIBLETOP)
ffloorflags |= FF_REVERSEPLATFORM;
if (lines[i].args[2] & TMFT_INTANGIBLEBOTTOM)
if (lines[i].args[3] & TMFT_INTANGIBLEBOTTOM)
ffloorflags |= FF_PLATFORM;
if (lines[i].args[2] & TMFT_DONTBLOCKPLAYER)
if (lines[i].args[3] & TMFT_DONTBLOCKPLAYER)
ffloorflags &= ~FF_BLOCKPLAYER;
if (lines[i].args[2] & TMFT_DONTBLOCKOTHERS)
if (lines[i].args[3] & TMFT_DONTBLOCKOTHERS)
ffloorflags &= ~FF_BLOCKOTHERS;
//Appearance settings
if ((lines[i].args[3] & TMFA_TRANSLUCENT) && (ffloorflags & FF_RENDERALL)) //Translucent
ffloorflags |= FF_TRANSLUCENT;
if (lines[i].args[3] & TMFA_NOSHADE)
ffloorflags |= FF_NOSHADE;
//Cutting options
if (ffloorflags & FF_RENDERALL)
{
//If translucent or player can enter it, cut inner walls
if ((ffloorflags & FF_TRANSLUCENT) || (lines[i].args[2] & TMFT_VISIBLEFROMINSIDE))
if ((lines[i].args[1] < 255) || (lines[i].args[3] & TMFT_VISIBLEFROMINSIDE))
ffloorflags |= FF_CUTEXTRA|FF_EXTRA;
else
ffloorflags |= FF_CUTLEVEL;
}
P_AddFakeFloorsByLine(i, (ffloorflags & FF_TRANSLUCENT) ? (lines[i].alpha * 0xff) >> FRACBITS : 0xff, ffloorflags, secthinkers);
P_AddFakeFloorsByLine(i, lines[i].args[1], ffloorflags, secthinkers);
break;
case 120: // FOF (water)
@ -6765,40 +6770,45 @@ void P_SpawnSpecials(boolean fromnetsave)
ffloorflags = FF_EXISTS|FF_SOLID|FF_RENDERALL;
//Visibility settings
if (lines[i].args[1] & TMFV_NOPLANES)
//Appearance settings
if (lines[i].args[2] & TMFA_NOPLANES)
ffloorflags &= ~FF_RENDERPLANES;
if (lines[i].args[1] & TMFV_NOSIDES)
if (lines[i].args[2] & TMFA_NOSIDES)
ffloorflags &= ~FF_RENDERSIDES;
if (lines[i].args[1] & TMFV_TOGGLEINSIDES)
if (lines[i].args[2] & TMFA_INSIDES)
{
if (ffloorflags & FF_RENDERPLANES)
ffloorflags |= FF_BOTHPLANES;
if (ffloorflags & FF_RENDERSIDES)
ffloorflags |= FF_ALLSIDES;
}
if (lines[i].args[2] & TMFA_ONLYINSIDES)
{
if (ffloorflags & FF_RENDERPLANES)
ffloorflags |= FF_INVERTPLANES;
if (ffloorflags & FF_RENDERSIDES)
ffloorflags |= FF_INVERTSIDES;
}
if (lines[i].args[2] & TMFA_NOSHADE)
ffloorflags |= FF_NOSHADE;
if (lines[i].args[2] & TMFA_SPLAT)
ffloorflags |= FF_SPLAT;
//Tangibility settings
if (lines[i].args[2] & TMFT_INTANGIBLETOP)
if (lines[i].args[3] & TMFT_INTANGIBLETOP)
ffloorflags |= FF_REVERSEPLATFORM;
if (lines[i].args[2] & TMFT_INTANGIBLEBOTTOM)
if (lines[i].args[3] & TMFT_INTANGIBLEBOTTOM)
ffloorflags |= FF_PLATFORM;
if (lines[i].args[2] & TMFT_DONTBLOCKPLAYER)
if (lines[i].args[3] & TMFT_DONTBLOCKPLAYER)
ffloorflags &= ~FF_BLOCKPLAYER;
if (lines[i].args[2] & TMFT_DONTBLOCKOTHERS)
if (lines[i].args[3] & TMFT_DONTBLOCKOTHERS)
ffloorflags &= ~FF_BLOCKOTHERS;
//Appearance settings
if ((lines[i].args[3] & TMFA_TRANSLUCENT) && (ffloorflags & FF_RENDERALL)) //Translucent
ffloorflags |= FF_TRANSLUCENT;
if (lines[i].args[3] & TMFA_NOSHADE)
ffloorflags |= FF_NOSHADE;
//Cutting options
if (ffloorflags & FF_RENDERALL)
{
//If translucent or player can enter it, cut inner walls
if ((ffloorflags & FF_TRANSLUCENT) || (lines[i].args[2] & TMFT_VISIBLEFROMINSIDE))
if ((lines[i].args[1] < 255) || (lines[i].args[3] & TMFT_VISIBLEFROMINSIDE))
ffloorflags |= FF_CUTEXTRA|FF_EXTRA;
else
ffloorflags |= FF_CUTLEVEL;
@ -6827,24 +6837,29 @@ void P_SpawnSpecials(boolean fromnetsave)
case 220: //Intangible
ffloorflags = FF_EXISTS|FF_RENDERALL|FF_CUTEXTRA|FF_EXTRA|FF_CUTSPRITES;
//Visibility settings
if (lines[i].args[1] & TMFV_NOPLANES)
//Appearance settings
if (lines[i].args[2] & TMFA_NOPLANES)
ffloorflags &= ~FF_RENDERPLANES;
if (lines[i].args[1] & TMFV_NOSIDES)
if (lines[i].args[2] & TMFA_NOSIDES)
ffloorflags &= ~FF_RENDERSIDES;
if (!(lines[i].args[1] & TMFV_TOGGLEINSIDES))
if (!(lines[i].args[2] & TMFA_INSIDES))
{
if (ffloorflags & FF_RENDERPLANES)
ffloorflags |= FF_BOTHPLANES;
if (ffloorflags & FF_RENDERSIDES)
ffloorflags |= FF_ALLSIDES;
}
//Appearance settings
if ((lines[i].args[2] & TMFA_TRANSLUCENT) && (ffloorflags & FF_RENDERALL))
ffloorflags |= FF_TRANSLUCENT;
if (lines[i].args[2] & TMFA_ONLYINSIDES)
{
if (ffloorflags & FF_RENDERPLANES)
ffloorflags |= FF_INVERTPLANES;
if (ffloorflags & FF_RENDERSIDES)
ffloorflags |= FF_INVERTSIDES;
}
if (lines[i].args[2] & TMFA_NOSHADE)
ffloorflags |= FF_NOSHADE;
if (lines[i].args[2] & TMFA_SPLAT)
ffloorflags |= FF_SPLAT;
P_AddFakeFloorsByLine(i, (ffloorflags & FF_TRANSLUCENT) ? (lines[i].alpha * 0xff) >> FRACBITS : 0xff, ffloorflags, secthinkers);
break;

View file

@ -24,10 +24,13 @@ extern mobj_t *skyboxcenterpnts[16]; // array of MT_SKYBOX centerpoint mobjs
//FOF flags
typedef enum
{
TMFV_NOPLANES = 1,
TMFV_NOSIDES = 1<<1,
TMFV_TOGGLEINSIDES = 1<<2,
} textmapfofvisibility_t;
TMFA_NOPLANES = 1,
TMFA_NOSIDES = 1<<1,
TMFA_INSIDES = 1<<2,
TMFA_ONLYINSIDES = 1<<3,
TMFA_NOSHADE = 1<<4,
TMFA_SPLAT = 1<<5,
} textmapfofappearance_t;
typedef enum
{
@ -36,14 +39,9 @@ typedef enum
TMFT_DONTBLOCKPLAYER = 1<<2,
TMFT_VISIBLEFROMINSIDE = (TMFT_INTANGIBLETOP|TMFT_INTANGIBLEBOTTOM|TMFT_DONTBLOCKPLAYER),
TMFT_DONTBLOCKOTHERS = 1<<3,
TMFT_INTANGIBLE = (TMFT_DONTBLOCKPLAYER|TMFT_DONTBLOCKOTHERS),
} textmapfoftangibility_t;
typedef enum
{
TMFA_TRANSLUCENT = 1,
TMFA_NOSHADE = 1<<1,
} textmapfofappearance_t;
typedef enum
{
TMFW_NOSIDES = 1,