mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-02-18 01:51:39 +00:00
Adapt FOF-related linedef executors to UDMF
This commit is contained in:
parent
df7b22ac8a
commit
8ef8279764
4 changed files with 298 additions and 56 deletions
|
@ -3332,6 +3332,22 @@ udmf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
436
|
||||||
|
{
|
||||||
|
title = "Shatter FOF";
|
||||||
|
prefix = "(436)";
|
||||||
|
arg0
|
||||||
|
{
|
||||||
|
title = "Target sector tag";
|
||||||
|
type = 13;
|
||||||
|
}
|
||||||
|
arg1
|
||||||
|
{
|
||||||
|
title = "Control sector tag";
|
||||||
|
type = 13;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
439
|
439
|
||||||
{
|
{
|
||||||
title = "Change Tagged Linedef's Textures";
|
title = "Change Tagged Linedef's Textures";
|
||||||
|
@ -3396,6 +3412,60 @@ udmf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
445
|
||||||
|
{
|
||||||
|
title = "Make FOF Disappear/Reappear";
|
||||||
|
prefix = "(445)";
|
||||||
|
arg0
|
||||||
|
{
|
||||||
|
title = "Target sector tag";
|
||||||
|
type = 13;
|
||||||
|
}
|
||||||
|
arg1
|
||||||
|
{
|
||||||
|
title = "Control sector tag";
|
||||||
|
type = 13;
|
||||||
|
}
|
||||||
|
arg2
|
||||||
|
{
|
||||||
|
title = "Effect";
|
||||||
|
type = 11;
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
0 = "Disappear";
|
||||||
|
1 = "Reappear";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
446
|
||||||
|
{
|
||||||
|
title = "Make FOF Crumble";
|
||||||
|
prefix = "(446)";
|
||||||
|
arg0
|
||||||
|
{
|
||||||
|
title = "Target sector tag";
|
||||||
|
type = 13;
|
||||||
|
}
|
||||||
|
arg1
|
||||||
|
{
|
||||||
|
title = "Control sector tag";
|
||||||
|
type = 13;
|
||||||
|
}
|
||||||
|
arg2
|
||||||
|
{
|
||||||
|
title = "Respawn?";
|
||||||
|
type = 11;
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
0 = "Yes";
|
||||||
|
1 = "No";
|
||||||
|
2 = "Unless FF_NORETURN";
|
||||||
|
3 = "Only if FF_NORETURN";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
447
|
447
|
||||||
{
|
{
|
||||||
title = "Change Tagged Sector's Colormap";
|
title = "Change Tagged Sector's Colormap";
|
||||||
|
@ -3510,6 +3580,100 @@ udmf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
452
|
||||||
|
{
|
||||||
|
title = "Set FOF Translucency";
|
||||||
|
prefix = "(452)";
|
||||||
|
arg0
|
||||||
|
{
|
||||||
|
title = "Target sector tag";
|
||||||
|
type = 13;
|
||||||
|
}
|
||||||
|
arg1
|
||||||
|
{
|
||||||
|
title = "Control sector tag";
|
||||||
|
type = 13;
|
||||||
|
}
|
||||||
|
arg2
|
||||||
|
{
|
||||||
|
title = "Alpha";
|
||||||
|
}
|
||||||
|
arg3
|
||||||
|
{
|
||||||
|
title = "Flags";
|
||||||
|
type = 12;
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
1 = "Add to current translucency";
|
||||||
|
2 = "Don't handle FF_TRANSLUCENT";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
453
|
||||||
|
{
|
||||||
|
title = "Fade FOF";
|
||||||
|
prefix = "(453)";
|
||||||
|
arg0
|
||||||
|
{
|
||||||
|
title = "Target sector tag";
|
||||||
|
type = 13;
|
||||||
|
}
|
||||||
|
arg1
|
||||||
|
{
|
||||||
|
title = "Control sector tag";
|
||||||
|
type = 13;
|
||||||
|
}
|
||||||
|
arg2
|
||||||
|
{
|
||||||
|
title = "Alpha";
|
||||||
|
}
|
||||||
|
arg3
|
||||||
|
{
|
||||||
|
title = "Fading speed";
|
||||||
|
}
|
||||||
|
arg4
|
||||||
|
{
|
||||||
|
title = "Flags";
|
||||||
|
type = 12;
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
1 = "Add to current translucency";
|
||||||
|
2 = "Interrupt ongoing fades";
|
||||||
|
4 = "Speed is duration";
|
||||||
|
8 = "Don't change collision";
|
||||||
|
16 = "No collision during fade";
|
||||||
|
32 = "Don't handle FF_TRANSLUCENT";
|
||||||
|
64 = "Don't handle FF_EXISTS";
|
||||||
|
128 = "Don't fade lighting";
|
||||||
|
256 = "Don't fade colormap";
|
||||||
|
512 = "Use exact alpha in OpenGL";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
454
|
||||||
|
{
|
||||||
|
title = "Stop Fading FOF";
|
||||||
|
prefix = "(454)";
|
||||||
|
arg0
|
||||||
|
{
|
||||||
|
title = "Target sector tag";
|
||||||
|
type = 13;
|
||||||
|
}
|
||||||
|
arg1
|
||||||
|
{
|
||||||
|
title = "Control sector tag";
|
||||||
|
type = 13;
|
||||||
|
}
|
||||||
|
arg2
|
||||||
|
{
|
||||||
|
title = "Finalize collision?";
|
||||||
|
type = 11;
|
||||||
|
enum = "yesno";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
455
|
455
|
||||||
{
|
{
|
||||||
title = "Fade Tagged Sector's Colormap";
|
title = "Fade Tagged Sector's Colormap";
|
||||||
|
|
|
@ -3963,6 +3963,10 @@ static void P_ConvertBinaryMap(void)
|
||||||
lines[i].args[0] = tag;
|
lines[i].args[0] = tag;
|
||||||
lines[i].args[1] = R_PointToDist2(lines[i].v2->x, lines[i].v2->y, lines[i].v1->x, lines[i].v1->y) >> FRACBITS;
|
lines[i].args[1] = R_PointToDist2(lines[i].v2->x, lines[i].v2->y, lines[i].v1->x, lines[i].v1->y) >> FRACBITS;
|
||||||
break;
|
break;
|
||||||
|
case 436: //Shatter FOF
|
||||||
|
lines[i].args[0] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS;
|
||||||
|
lines[i].args[1] = sides[lines[i].sidenum[0]].rowoffset >> FRACBITS;
|
||||||
|
break;
|
||||||
case 437: //Disable player control
|
case 437: //Disable player control
|
||||||
lines[i].args[0] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS;
|
lines[i].args[0] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS;
|
||||||
lines[i].args[1] = !!(lines[i].flags & ML_NOCLIMB);
|
lines[i].args[1] = !!(lines[i].flags & ML_NOCLIMB);
|
||||||
|
@ -4011,6 +4015,19 @@ static void P_ConvertBinaryMap(void)
|
||||||
lines[i].args[1] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS;
|
lines[i].args[1] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS;
|
||||||
lines[i].args[2] = sides[lines[i].sidenum[0]].rowoffset >> FRACBITS;
|
lines[i].args[2] = sides[lines[i].sidenum[0]].rowoffset >> FRACBITS;
|
||||||
break;
|
break;
|
||||||
|
case 445: //Make FOF disappear/reappear
|
||||||
|
lines[i].args[0] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS;
|
||||||
|
lines[i].args[1] = sides[lines[i].sidenum[0]].rowoffset >> FRACBITS;
|
||||||
|
lines[i].args[2] = !!(lines[i].flags & ML_NOCLIMB);
|
||||||
|
break;
|
||||||
|
case 446: //Make FOF crumble
|
||||||
|
lines[i].args[0] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS;
|
||||||
|
lines[i].args[1] = sides[lines[i].sidenum[0]].rowoffset >> FRACBITS;
|
||||||
|
if (lines[i].flags & ML_NOCLIMB)
|
||||||
|
lines[i].args[2] |= TMFR_NORETURN;
|
||||||
|
if (lines[i].flags & ML_BLOCKMONSTERS)
|
||||||
|
lines[i].args[2] |= TMFR_CHECKFLAG;
|
||||||
|
break;
|
||||||
case 447: //Change colormap
|
case 447: //Change colormap
|
||||||
lines[i].args[0] = tag;
|
lines[i].args[0] = tag;
|
||||||
if (lines[i].flags & ML_EFFECT3)
|
if (lines[i].flags & ML_EFFECT3)
|
||||||
|
@ -4052,6 +4069,44 @@ static void P_ConvertBinaryMap(void)
|
||||||
lines[i].args[0] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS;
|
lines[i].args[0] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS;
|
||||||
lines[i].args[1] = sides[lines[i].sidenum[0]].rowoffset >> FRACBITS;
|
lines[i].args[1] = sides[lines[i].sidenum[0]].rowoffset >> FRACBITS;
|
||||||
break;
|
break;
|
||||||
|
case 452: //Set FOF translucency
|
||||||
|
lines[i].args[0] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS;
|
||||||
|
lines[i].args[1] = sides[lines[i].sidenum[0]].rowoffset >> FRACBITS;
|
||||||
|
lines[i].args[2] = lines[i].sidenum[1] != 0xffff ? (sides[lines[i].sidenum[1]].textureoffset >> FRACBITS) : (P_AproxDistance(lines[i].dx, lines[i].dy) >> FRACBITS);
|
||||||
|
if (lines[i].flags & ML_EFFECT3)
|
||||||
|
lines[i].args[3] |= TMST_RELATIVE;
|
||||||
|
if (lines[i].flags & ML_NOCLIMB)
|
||||||
|
lines[i].args[3] |= TMST_DONTDOTRANSLUCENT;
|
||||||
|
break;
|
||||||
|
case 453: //Fade FOF
|
||||||
|
lines[i].args[0] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS;
|
||||||
|
lines[i].args[1] = sides[lines[i].sidenum[0]].rowoffset >> FRACBITS;
|
||||||
|
lines[i].args[2] = lines[i].sidenum[1] != 0xffff ? (sides[lines[i].sidenum[1]].textureoffset >> FRACBITS) : (lines[i].dx >> FRACBITS);
|
||||||
|
lines[i].args[3] = lines[i].sidenum[1] != 0xffff ? (sides[lines[i].sidenum[1]].rowoffset >> FRACBITS) : (abs(lines[i].dy) >> FRACBITS);
|
||||||
|
if (lines[i].flags & ML_EFFECT3)
|
||||||
|
lines[i].args[4] |= TMFT_RELATIVE;
|
||||||
|
if (lines[i].flags & ML_EFFECT5)
|
||||||
|
lines[i].args[4] |= TMFT_OVERRIDE;
|
||||||
|
if (lines[i].flags & ML_EFFECT4)
|
||||||
|
lines[i].args[4] |= TMFT_TICBASED;
|
||||||
|
if (lines[i].flags & ML_BOUNCY)
|
||||||
|
lines[i].args[4] |= TMFT_IGNORECOLLISION;
|
||||||
|
if (lines[i].flags & ML_EFFECT1)
|
||||||
|
lines[i].args[4] |= TMFT_GHOSTFADE;
|
||||||
|
if (lines[i].flags & ML_NOCLIMB)
|
||||||
|
lines[i].args[4] |= TMFT_DONTDOTRANSLUCENT;
|
||||||
|
if (lines[i].flags & ML_BLOCKMONSTERS)
|
||||||
|
lines[i].args[4] |= TMFT_DONTDOEXISTS;
|
||||||
|
if (lines[i].flags & ML_EFFECT2)
|
||||||
|
lines[i].args[4] |= (TMFT_DONTDOLIGHTING|TMFT_DONTDOCOLORMAP);
|
||||||
|
if (lines[i].flags & ML_TFERLINE)
|
||||||
|
lines[i].args[4] |= TMFT_USEEXACTALPHA;
|
||||||
|
break;
|
||||||
|
case 454: //Stop fading FOF
|
||||||
|
lines[i].args[0] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS;
|
||||||
|
lines[i].args[1] = sides[lines[i].sidenum[0]].rowoffset >> FRACBITS;
|
||||||
|
lines[i].args[2] = !!(lines[i].flags & ML_BLOCKMONSTERS);
|
||||||
|
break;
|
||||||
case 455: //Fade colormap
|
case 455: //Fade colormap
|
||||||
{
|
{
|
||||||
INT32 speed = (INT32)((((lines[i].flags & ML_DONTPEGBOTTOM) || !sides[lines[i].sidenum[0]].rowoffset) && lines[i].sidenum[1] != 0xFFFF) ?
|
INT32 speed = (INT32)((((lines[i].flags & ML_DONTPEGBOTTOM) || !sides[lines[i].sidenum[0]].rowoffset) && lines[i].sidenum[1] != 0xFFFF) ?
|
||||||
|
|
109
src/p_spec.c
109
src/p_spec.c
|
@ -2765,8 +2765,8 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
|
|
||||||
case 436: // Shatter block remotely
|
case 436: // Shatter block remotely
|
||||||
{
|
{
|
||||||
INT16 sectag = (INT16)(sides[line->sidenum[0]].textureoffset>>FRACBITS);
|
INT16 sectag = (INT16)(line->args[0]);
|
||||||
INT16 foftag = (INT16)(sides[line->sidenum[0]].rowoffset>>FRACBITS);
|
INT16 foftag = (INT16)(line->args[1]);
|
||||||
sector_t *sec; // Sector that the FOF is visible in
|
sector_t *sec; // Sector that the FOF is visible in
|
||||||
ffloor_t *rover; // FOF that we are going to crumble
|
ffloor_t *rover; // FOF that we are going to crumble
|
||||||
boolean foundrover = false; // for debug, "Can't find a FOF" message
|
boolean foundrover = false; // for debug, "Can't find a FOF" message
|
||||||
|
@ -2950,10 +2950,10 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 445: // Force block disappear remotely (reappear if noclimb)
|
case 445: // Force block disappear remotely (reappear if args[2] is set)
|
||||||
{
|
{
|
||||||
INT16 sectag = (INT16)(sides[line->sidenum[0]].textureoffset>>FRACBITS);
|
INT16 sectag = (INT16)(line->args[0]);
|
||||||
INT16 foftag = (INT16)(sides[line->sidenum[0]].rowoffset>>FRACBITS);
|
INT16 foftag = (INT16)(line->args[1]);
|
||||||
sector_t *sec; // Sector that the FOF is visible (or not visible) in
|
sector_t *sec; // Sector that the FOF is visible (or not visible) in
|
||||||
ffloor_t *rover; // FOF to vanish/un-vanish
|
ffloor_t *rover; // FOF to vanish/un-vanish
|
||||||
boolean foundrover = false; // for debug, "Can't find a FOF" message
|
boolean foundrover = false; // for debug, "Can't find a FOF" message
|
||||||
|
@ -2978,7 +2978,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
oldflags = rover->flags;
|
oldflags = rover->flags;
|
||||||
|
|
||||||
// Abracadabra!
|
// Abracadabra!
|
||||||
if (line->flags & ML_NOCLIMB)
|
if (line->args[2])
|
||||||
rover->flags |= FF_EXISTS;
|
rover->flags |= FF_EXISTS;
|
||||||
else
|
else
|
||||||
rover->flags &= ~FF_EXISTS;
|
rover->flags &= ~FF_EXISTS;
|
||||||
|
@ -3003,8 +3003,8 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
|
|
||||||
case 446: // Make block fall remotely (acts like FF_CRUMBLE)
|
case 446: // Make block fall remotely (acts like FF_CRUMBLE)
|
||||||
{
|
{
|
||||||
INT16 sectag = (INT16)(sides[line->sidenum[0]].textureoffset>>FRACBITS);
|
INT16 sectag = (INT16)(line->args[0]);
|
||||||
INT16 foftag = (INT16)(sides[line->sidenum[0]].rowoffset>>FRACBITS);
|
INT16 foftag = (INT16)(line->args[1]);
|
||||||
sector_t *sec; // Sector that the FOF is visible in
|
sector_t *sec; // Sector that the FOF is visible in
|
||||||
ffloor_t *rover; // FOF that we are going to make fall down
|
ffloor_t *rover; // FOF that we are going to make fall down
|
||||||
boolean foundrover = false; // for debug, "Can't find a FOF" message
|
boolean foundrover = false; // for debug, "Can't find a FOF" message
|
||||||
|
@ -3014,7 +3014,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
if (mo) // NULL check
|
if (mo) // NULL check
|
||||||
player = mo->player;
|
player = mo->player;
|
||||||
|
|
||||||
if (line->flags & ML_NOCLIMB) // don't respawn!
|
if (line->args[2] & TMFR_NORETURN) // don't respawn!
|
||||||
respawn = false;
|
respawn = false;
|
||||||
|
|
||||||
TAG_ITER_SECTORS(sectag, secnum)
|
TAG_ITER_SECTORS(sectag, secnum)
|
||||||
|
@ -3033,8 +3033,8 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
{
|
{
|
||||||
foundrover = true;
|
foundrover = true;
|
||||||
|
|
||||||
if (line->flags & ML_BLOCKMONSTERS) // FOF flags determine respawn ability instead?
|
if (line->args[2] & TMFR_CHECKFLAG) // FOF flags determine respawn ability instead?
|
||||||
respawn = !(rover->flags & FF_NORETURN) ^ !!(line->flags & ML_NOCLIMB); // no climb inverts
|
respawn = !(rover->flags & FF_NORETURN) ^ !!(line->args[2] & TMFR_NORETURN); // TMFR_NORETURN inverts
|
||||||
|
|
||||||
EV_StartCrumble(rover->master->frontsector, rover, (rover->flags & FF_FLOATBOB), player, rover->alpha, respawn);
|
EV_StartCrumble(rover->master->frontsector, rover, (rover->flags & FF_FLOATBOB), player, rover->alpha, respawn);
|
||||||
}
|
}
|
||||||
|
@ -3191,10 +3191,9 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
|
|
||||||
case 452: // Set FOF alpha
|
case 452: // Set FOF alpha
|
||||||
{
|
{
|
||||||
INT16 destvalue = line->sidenum[1] != 0xffff ?
|
INT16 destvalue = (INT16)(line->args[2]);
|
||||||
(INT16)(sides[line->sidenum[1]].textureoffset>>FRACBITS) : (INT16)(P_AproxDistance(line->dx, line->dy)>>FRACBITS);
|
INT16 sectag = (INT16)(line->args[0]);
|
||||||
INT16 sectag = (INT16)(sides[line->sidenum[0]].textureoffset>>FRACBITS);
|
INT16 foftag = (INT16)(line->args[1]);
|
||||||
INT16 foftag = (INT16)(sides[line->sidenum[0]].rowoffset>>FRACBITS);
|
|
||||||
sector_t *sec; // Sector that the FOF is visible in
|
sector_t *sec; // Sector that the FOF is visible in
|
||||||
ffloor_t *rover; // FOF that we are going to operate
|
ffloor_t *rover; // FOF that we are going to operate
|
||||||
boolean foundrover = false; // for debug, "Can't find a FOF" message
|
boolean foundrover = false; // for debug, "Can't find a FOF" message
|
||||||
|
@ -3218,7 +3217,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
// If fading an invisible FOF whose render flags we did not yet set,
|
// If fading an invisible FOF whose render flags we did not yet set,
|
||||||
// initialize its alpha to 1
|
// initialize its alpha to 1
|
||||||
// for relative alpha calc
|
// for relative alpha calc
|
||||||
if (!(line->flags & ML_NOCLIMB) && // do translucent
|
if (!(line->args[3] & TMST_DONTDOTRANSLUCENT) && // do translucent
|
||||||
(rover->spawnflags & FF_NOSHADE) && // do not include light blocks, which don't set FF_NOSHADE
|
(rover->spawnflags & FF_NOSHADE) && // do not include light blocks, which don't set FF_NOSHADE
|
||||||
!(rover->spawnflags & FF_RENDERSIDES) &&
|
!(rover->spawnflags & FF_RENDERSIDES) &&
|
||||||
!(rover->spawnflags & FF_RENDERPLANES) &&
|
!(rover->spawnflags & FF_RENDERPLANES) &&
|
||||||
|
@ -3228,16 +3227,16 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
P_RemoveFakeFloorFader(rover);
|
P_RemoveFakeFloorFader(rover);
|
||||||
P_FadeFakeFloor(rover,
|
P_FadeFakeFloor(rover,
|
||||||
rover->alpha,
|
rover->alpha,
|
||||||
max(1, min(256, (line->flags & ML_EFFECT3) ? rover->alpha + destvalue : destvalue)),
|
max(1, min(256, (line->args[3] & TMST_RELATIVE) ? rover->alpha + destvalue : destvalue)),
|
||||||
0, // set alpha immediately
|
0, // set alpha immediately
|
||||||
false, NULL, // tic-based logic
|
false, NULL, // tic-based logic
|
||||||
false, // do not handle FF_EXISTS
|
false, // do not handle FF_EXISTS
|
||||||
!(line->flags & ML_NOCLIMB), // handle FF_TRANSLUCENT
|
!(line->args[3] & TMST_DONTDOTRANSLUCENT), // handle FF_TRANSLUCENT
|
||||||
false, // do not handle lighting
|
false, // do not handle lighting
|
||||||
false, // do not handle colormap
|
false, // do not handle colormap
|
||||||
false, // do not handle collision
|
false, // do not handle collision
|
||||||
false, // do not do ghost fade (no collision during fade)
|
false, // do not do ghost fade (no collision during fade)
|
||||||
true); // use exact alpha values (for opengl)
|
true); // use exact alpha values (for opengl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3252,12 +3251,10 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
|
|
||||||
case 453: // Fade FOF
|
case 453: // Fade FOF
|
||||||
{
|
{
|
||||||
INT16 destvalue = line->sidenum[1] != 0xffff ?
|
INT16 destvalue = (INT16)(line->args[2]);
|
||||||
(INT16)(sides[line->sidenum[1]].textureoffset>>FRACBITS) : (INT16)(line->dx>>FRACBITS);
|
INT16 speed = (INT16)(line->args[3]);
|
||||||
INT16 speed = line->sidenum[1] != 0xffff ?
|
INT16 sectag = (INT16)(line->args[0]);
|
||||||
(INT16)(abs(sides[line->sidenum[1]].rowoffset>>FRACBITS)) : (INT16)(abs(line->dy)>>FRACBITS);
|
INT16 foftag = (INT16)(line->args[1]);
|
||||||
INT16 sectag = (INT16)(sides[line->sidenum[0]].textureoffset>>FRACBITS);
|
|
||||||
INT16 foftag = (INT16)(sides[line->sidenum[0]].rowoffset>>FRACBITS);
|
|
||||||
sector_t *sec; // Sector that the FOF is visible in
|
sector_t *sec; // Sector that the FOF is visible in
|
||||||
ffloor_t *rover; // FOF that we are going to operate
|
ffloor_t *rover; // FOF that we are going to operate
|
||||||
boolean foundrover = false; // for debug, "Can't find a FOF" message
|
boolean foundrover = false; // for debug, "Can't find a FOF" message
|
||||||
|
@ -3280,7 +3277,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
foundrover = true;
|
foundrover = true;
|
||||||
|
|
||||||
// Prevent continuous execs from interfering on an existing fade
|
// Prevent continuous execs from interfering on an existing fade
|
||||||
if (!(line->flags & ML_EFFECT5)
|
if (!(line->args[4] & TMFT_OVERRIDE)
|
||||||
&& rover->fadingdata)
|
&& rover->fadingdata)
|
||||||
//&& ((fade_t*)rover->fadingdata)->timer > (ticbased ? 2 : speed*2))
|
//&& ((fade_t*)rover->fadingdata)->timer > (ticbased ? 2 : speed*2))
|
||||||
{
|
{
|
||||||
|
@ -3292,21 +3289,21 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
P_AddFakeFloorFader(rover, secnum, j,
|
P_AddFakeFloorFader(rover, secnum, j,
|
||||||
destvalue,
|
destvalue,
|
||||||
speed,
|
speed,
|
||||||
(line->flags & ML_EFFECT4), // tic-based logic
|
(line->args[4] & TMFT_TICBASED), // tic-based logic
|
||||||
(line->flags & ML_EFFECT3), // Relative destvalue
|
(line->args[4] & TMFT_RELATIVE), // Relative destvalue
|
||||||
!(line->flags & ML_BLOCKMONSTERS), // do not handle FF_EXISTS
|
!(line->args[4] & TMFT_DONTDOEXISTS), // do not handle FF_EXISTS
|
||||||
!(line->flags & ML_NOCLIMB), // do not handle FF_TRANSLUCENT
|
!(line->args[4] & TMFT_DONTDOTRANSLUCENT), // do not handle FF_TRANSLUCENT
|
||||||
!(line->flags & ML_EFFECT2), // do not handle lighting
|
!(line->args[4] & TMFT_DONTDOLIGHTING), // do not handle lighting
|
||||||
!(line->flags & ML_EFFECT2), // do not handle colormap (ran out of flags)
|
!(line->args[4] & TMFT_DONTDOCOLORMAP), // do not handle colormap
|
||||||
!(line->flags & ML_BOUNCY), // do not handle collision
|
!(line->args[4] & TMFT_IGNORECOLLISION), // do not handle collision
|
||||||
(line->flags & ML_EFFECT1), // do ghost fade (no collision during fade)
|
(line->args[4] & TMFT_GHOSTFADE), // do ghost fade (no collision during fade)
|
||||||
(line->flags & ML_TFERLINE)); // use exact alpha values (for opengl)
|
(line->args[4] & TMFT_USEEXACTALPHA)); // use exact alpha values (for opengl)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If fading an invisible FOF whose render flags we did not yet set,
|
// If fading an invisible FOF whose render flags we did not yet set,
|
||||||
// initialize its alpha to 1
|
// initialize its alpha to 1
|
||||||
// for relative alpha calc
|
// for relative alpha calc
|
||||||
if (!(line->flags & ML_NOCLIMB) && // do translucent
|
if (!(line->args[4] & TMFT_DONTDOTRANSLUCENT) && // do translucent
|
||||||
(rover->spawnflags & FF_NOSHADE) && // do not include light blocks, which don't set FF_NOSHADE
|
(rover->spawnflags & FF_NOSHADE) && // do not include light blocks, which don't set FF_NOSHADE
|
||||||
!(rover->spawnflags & FF_RENDERSIDES) &&
|
!(rover->spawnflags & FF_RENDERSIDES) &&
|
||||||
!(rover->spawnflags & FF_RENDERPLANES) &&
|
!(rover->spawnflags & FF_RENDERPLANES) &&
|
||||||
|
@ -3316,16 +3313,16 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
P_RemoveFakeFloorFader(rover);
|
P_RemoveFakeFloorFader(rover);
|
||||||
P_FadeFakeFloor(rover,
|
P_FadeFakeFloor(rover,
|
||||||
rover->alpha,
|
rover->alpha,
|
||||||
max(1, min(256, (line->flags & ML_EFFECT3) ? rover->alpha + destvalue : destvalue)),
|
max(1, min(256, (line->args[4] & TMFT_RELATIVE) ? rover->alpha + destvalue : destvalue)),
|
||||||
0, // set alpha immediately
|
0, // set alpha immediately
|
||||||
false, NULL, // tic-based logic
|
false, NULL, // tic-based logic
|
||||||
!(line->flags & ML_BLOCKMONSTERS), // do not handle FF_EXISTS
|
!(line->args[4] & TMFT_DONTDOEXISTS), // do not handle FF_EXISTS
|
||||||
!(line->flags & ML_NOCLIMB), // do not handle FF_TRANSLUCENT
|
!(line->args[4] & TMFT_DONTDOTRANSLUCENT), // do not handle FF_TRANSLUCENT
|
||||||
!(line->flags & ML_EFFECT2), // do not handle lighting
|
!(line->args[4] & TMFT_DONTDOLIGHTING), // do not handle lighting
|
||||||
!(line->flags & ML_EFFECT2), // do not handle colormap (ran out of flags)
|
!(line->args[4] & TMFT_DONTDOCOLORMAP), // do not handle colormap
|
||||||
!(line->flags & ML_BOUNCY), // do not handle collision
|
!(line->args[4] & TMFT_IGNORECOLLISION), // do not handle collision
|
||||||
(line->flags & ML_EFFECT1), // do ghost fade (no collision during fade)
|
(line->args[4] & TMFT_GHOSTFADE), // do ghost fade (no collision during fade)
|
||||||
(line->flags & ML_TFERLINE)); // use exact alpha values (for opengl)
|
(line->args[4] & TMFT_USEEXACTALPHA)); // use exact alpha values (for opengl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
j++;
|
j++;
|
||||||
|
@ -3342,8 +3339,8 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
|
|
||||||
case 454: // Stop fading FOF
|
case 454: // Stop fading FOF
|
||||||
{
|
{
|
||||||
INT16 sectag = (INT16)(sides[line->sidenum[0]].textureoffset>>FRACBITS);
|
INT16 sectag = (INT16)(line->args[0]);
|
||||||
INT16 foftag = (INT16)(sides[line->sidenum[0]].rowoffset>>FRACBITS);
|
INT16 foftag = (INT16)(line->args[1]);
|
||||||
sector_t *sec; // Sector that the FOF is visible in
|
sector_t *sec; // Sector that the FOF is visible in
|
||||||
ffloor_t *rover; // FOF that we are going to operate
|
ffloor_t *rover; // FOF that we are going to operate
|
||||||
boolean foundrover = false; // for debug, "Can't find a FOF" message
|
boolean foundrover = false; // for debug, "Can't find a FOF" message
|
||||||
|
@ -3365,7 +3362,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
foundrover = true;
|
foundrover = true;
|
||||||
|
|
||||||
P_ResetFakeFloorFader(rover, NULL,
|
P_ResetFakeFloorFader(rover, NULL,
|
||||||
!(line->flags & ML_BLOCKMONSTERS)); // do not finalize collision flags
|
!(line->args[2])); // do not finalize collision flags
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
26
src/p_spec.h
26
src/p_spec.h
|
@ -169,6 +169,32 @@ typedef enum
|
||||||
TMB_SYNC = 1<<1,
|
TMB_SYNC = 1<<1,
|
||||||
} textmapblinkinglightflags_t;
|
} textmapblinkinglightflags_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
TMFR_NORETURN = 1,
|
||||||
|
TMFR_CHECKFLAG = 1<<1,
|
||||||
|
} textmapfofrespawnflags_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
TMST_RELATIVE = 1,
|
||||||
|
TMST_DONTDOTRANSLUCENT = 1<<1,
|
||||||
|
} textmapsettranslucencyflags_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
TMFT_RELATIVE = 1,
|
||||||
|
TMFT_OVERRIDE = 1<<1,
|
||||||
|
TMFT_TICBASED = 1<<2,
|
||||||
|
TMFT_IGNORECOLLISION = 1<<3,
|
||||||
|
TMFT_GHOSTFADE = 1<<4,
|
||||||
|
TMFT_DONTDOTRANSLUCENT = 1<<5,
|
||||||
|
TMFT_DONTDOEXISTS = 1<<6,
|
||||||
|
TMFT_DONTDOLIGHTING = 1<<7,
|
||||||
|
TMFT_DONTDOCOLORMAP = 1<<8,
|
||||||
|
TMFT_USEEXACTALPHA = 1<<9,
|
||||||
|
} textmapfadetranslucencyflags_t;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
TMS_VIEWPOINT = 0,
|
TMS_VIEWPOINT = 0,
|
||||||
|
|
Loading…
Reference in a new issue