Adapt setup of rising FOFs

This commit is contained in:
MascaraSnake 2020-04-27 11:52:31 +02:00
parent 0877427168
commit d9f761b619
4 changed files with 148 additions and 21 deletions

View file

@ -1662,6 +1662,58 @@ udmf
}
}
190
{
title = "Rising";
prefix = "(190)";
arg0
{
title = "Target sector tag";
type = 13;
}
arg1
{
title = "Visibility";
type = 12;
enum
{
1 = "Don't render planes";
2 = "Don't render sides";
4 = "Render insides";
}
}
arg2
{
title = "Tangibility";
type = 12;
enum = "tangibility";
}
arg3
{
title = "Appearance";
type = 12;
enum
{
1 = "Translucent";
2 = "No shadow";
}
}
arg4
{
title = "Speed";
}
arg5
{
title = "Flags";
type = 12;
enum
{
1 = "Lower";
2 = "Require spindash";
}
}
}
200
{
title = "Light Block";

View file

@ -2998,6 +2998,53 @@ static void P_ConvertBinaryMap(void)
lines[i].args[2] |= TMFC_FLOATBOB;
lines[i].special = 170;
break;
case 190: // FOF: Rising, solid, opaque, shadowcasting
case 191: // FOF: Rising, solid, opaque, non-shadowcasting
case 192: // FOF: Rising, solid, translucent
case 193: // FOF: Rising, solid, invisible
case 194: // FOF: Rising, intangible from bottom, opaque
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;
else
lines[i].alpha = FRACUNIT/2;
}
//Shadow?
if (lines[i].special != 190 && (lines[i].special <= 193 || lines[i].flags & ML_NOCLIMB))
lines[i].args[3] |= TMFA_NOSHADE;
//Speed
lines[i].args[4] = FixedDiv(P_AproxDistance(lines[i].dx, lines[i].dy), 4*FRACUNIT) >> FRACBITS;
//Flags
if (lines[i].flags & ML_BLOCKMONSTERS)
lines[i].args[5] |= TMFR_REVERSE;
if (lines[i].flags & ML_BLOCKMONSTERS)
lines[i].args[5] |= TMFR_SPINDASH;
lines[i].special = 190;
break;
case 200: //FOF: Light block
case 201: //FOF: Half light block
lines[i].args[0] = lines[i].tag;

View file

@ -6825,34 +6825,56 @@ void P_SpawnSpecials(boolean fromnetsave)
P_AddAirbob(lines[i].frontsector, lines + i, 16*FRACUNIT, false, false, false);
break;
case 190: // Rising Platform FOF (solid, opaque, shadows)
case 191: // Rising Platform FOF (solid, opaque, no shadows)
case 192: // Rising Platform TL block: FOF (solid, translucent)
case 193: // Rising Platform FOF (solid, invisible)
case 194: // Rising Platform 'Platform' - You can jump up through it
case 195: // Rising Platform Translucent "platform"
case 190: // FOF (Rising)
{
fixed_t speed = FixedDiv(P_AproxDistance(lines[i].dx, lines[i].dy), 4*FRACUNIT);
fixed_t ceilingtop = P_FindHighestCeilingSurrounding(lines[i].frontsector);
fixed_t ceilingbottom = P_FindLowestCeilingSurrounding(lines[i].frontsector);
ffloorflags = FF_EXISTS|FF_SOLID;
if (lines[i].special != 193)
ffloorflags |= FF_RENDERALL;
if (lines[i].special <= 191)
ffloorflags |= FF_CUTLEVEL;
if (lines[i].special == 192 || lines[i].special == 195)
ffloorflags |= FF_TRANSLUCENT|FF_EXTRA|FF_CUTEXTRA;
if (lines[i].special >= 194)
ffloorflags |= FF_PLATFORM|FF_BOTHPLANES|FF_ALLSIDES;
if (lines[i].special != 190 && (lines[i].special <= 193 || lines[i].flags & ML_NOCLIMB))
ffloorflags |= FF_NOSHADE;
P_AddFakeFloorsByLine(i, ffloorflags, secthinkers);
ffloorflags = FF_EXISTS|FF_SOLID|FF_RENDERALL;
P_AddRaiseThinker(lines[i].frontsector, &lines[i], speed, ceilingtop, ceilingbottom, !!(lines[i].flags & ML_BLOCKMONSTERS), !!(lines[i].flags & ML_NOCLIMB));
break;
//Visibility settings
if (lines[i].args[1] & TMFV_NOPLANES)
ffloorflags &= ~FF_RENDERPLANES;
if (lines[i].args[1] & TMFV_NOSIDES)
ffloorflags &= ~FF_RENDERSIDES;
if (lines[i].args[1] & TMFV_TOGGLEINSIDES)
{
if (ffloorflags & FF_RENDERPLANES)
ffloorflags |= FF_BOTHPLANES;
if (ffloorflags & FF_RENDERSIDES)
ffloorflags |= FF_ALLSIDES;
}
//Tangibility settings
if (lines[i].args[2] & TMFT_INTANGIBLETOP)
ffloorflags |= FF_REVERSEPLATFORM;
if (lines[i].args[2] & TMFT_INTANGIBLEBOTTOM)
ffloorflags |= FF_PLATFORM;
if (lines[i].args[2] & TMFT_DONTBLOCKPLAYER)
ffloorflags &= ~FF_BLOCKPLAYER;
if (lines[i].args[2] & 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))
ffloorflags |= FF_CUTEXTRA|FF_EXTRA;
else
ffloorflags |= FF_CUTLEVEL;
}
P_AddFakeFloorsByLine(i, ffloorflags, secthinkers);
P_AddRaiseThinker(lines[i].frontsector, &lines[i], lines[i].args[4] << FRACBITS, ceilingtop, ceilingbottom, !!(lines[i].args[5] & TMFR_REVERSE), !!(lines[i].args[5] & TMFR_SPINDASH));
break;
}
case 200: // Light block
ffloorflags = FF_EXISTS|FF_CUTSPRITES;
if (!lines[i].args[1])

View file

@ -70,6 +70,12 @@ typedef enum
TMFC_FLOATBOB = 1<<4,
} textmapfofcrumbling_t;
typedef enum
{
TMFR_REVERSE = 1,
TMFR_SPINDASH = 1<<1,
} textmapfofrising_t;
typedef enum
{
TMFM_BRICK = 1,