mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-12 04:12:40 +00:00
Add type 452 Set FOF Alpha
* Fade FOF moved to type 453 * Stop Fade FOF moved to type 454
This commit is contained in:
parent
02a94dc941
commit
da5a7a013d
1 changed files with 63 additions and 6 deletions
69
src/p_spec.c
69
src/p_spec.c
|
@ -3320,7 +3320,63 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 452: // Fade FOF
|
case 452: // Set FOF alpha
|
||||||
|
{
|
||||||
|
INT16 destvalue = (line->flags & ML_DONTPEGBOTTOM) && line->sidenum[1] != 0xffff ?
|
||||||
|
(INT16)(sides[line->sidenum[1]].textureoffset>>FRACBITS) : (INT16)(line->dx>>FRACBITS);
|
||||||
|
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
|
||||||
|
ffloor_t *rover; // FOF that we are going to operate
|
||||||
|
|
||||||
|
for (secnum = -1; (secnum = P_FindSectorFromTag(sectag, secnum)) >= 0 ;)
|
||||||
|
{
|
||||||
|
sec = sectors + secnum;
|
||||||
|
|
||||||
|
if (!sec->ffloors)
|
||||||
|
{
|
||||||
|
CONS_Debug(DBG_GAMELOGIC, "Line type 452 Executor: Target sector #%d has no FOFs.\n", secnum);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (rover = sec->ffloors; rover; rover = rover->next)
|
||||||
|
{
|
||||||
|
if (rover->master->frontsector->tag == foftag)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!rover)
|
||||||
|
{
|
||||||
|
CONS_Debug(DBG_GAMELOGIC, "Line type 452 Executor: Can't find a FOF control sector with tag %d\n", foftag);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If fading an invisible FOF whose render flags we did not yet set,
|
||||||
|
// initialize its alpha to 1
|
||||||
|
// for relative alpha calc
|
||||||
|
if (!(line->flags & ML_NOCLIMB) && // do translucent
|
||||||
|
(rover->spawnflags & FF_NOSHADE) && // do not include light blocks, which don't set FF_NOSHADE
|
||||||
|
!(rover->spawnflags & FF_RENDERSIDES) &&
|
||||||
|
!(rover->spawnflags & FF_RENDERPLANES) &&
|
||||||
|
!(rover->flags & FF_RENDERALL))
|
||||||
|
rover->alpha = 1;
|
||||||
|
|
||||||
|
P_RemoveFakeFloorFader(rover);
|
||||||
|
P_FadeFakeFloor(rover,
|
||||||
|
max(1, min(256, (line->flags & ML_EFFECT4) ? rover->alpha + destvalue : destvalue)),
|
||||||
|
0, // set alpha immediately
|
||||||
|
false, NULL, 0, // tic-based logic
|
||||||
|
false, // do not handle FF_EXISTS
|
||||||
|
true, // handle FF_TRANSLUCENT
|
||||||
|
false, // do not handle lighting
|
||||||
|
false, // do not handle collision
|
||||||
|
false, // do not do ghost fade (no collision during fade)
|
||||||
|
true); // use exact alpha values (for opengl)
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 453: // Fade FOF
|
||||||
{
|
{
|
||||||
INT16 destvalue = (line->flags & ML_DONTPEGBOTTOM) && line->sidenum[1] != 0xffff ?
|
INT16 destvalue = (line->flags & ML_DONTPEGBOTTOM) && line->sidenum[1] != 0xffff ?
|
||||||
(INT16)(sides[line->sidenum[1]].textureoffset>>FRACBITS) : (INT16)(line->dx>>FRACBITS);
|
(INT16)(sides[line->sidenum[1]].textureoffset>>FRACBITS) : (INT16)(line->dx>>FRACBITS);
|
||||||
|
@ -3338,7 +3394,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
|
|
||||||
if (!sec->ffloors)
|
if (!sec->ffloors)
|
||||||
{
|
{
|
||||||
CONS_Debug(DBG_GAMELOGIC, "Line type 452 Executor: Target sector #%d has no FOFs.\n", secnum);
|
CONS_Debug(DBG_GAMELOGIC, "Line type 453 Executor: Target sector #%d has no FOFs.\n", secnum);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3351,7 +3407,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
|
|
||||||
if (!rover)
|
if (!rover)
|
||||||
{
|
{
|
||||||
CONS_Debug(DBG_GAMELOGIC, "Line type 452 Executor: Can't find a FOF control sector with tag %d\n", foftag);
|
CONS_Debug(DBG_GAMELOGIC, "Line type 453 Executor: Can't find a FOF control sector with tag %d\n", foftag);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3371,6 +3427,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
|
||||||
if (!(line->flags & ML_NOCLIMB) && // do translucent
|
if (!(line->flags & ML_NOCLIMB) && // 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) &&
|
||||||
|
@ -3394,7 +3451,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 453: // Stop fading FOF
|
case 454: // Stop fading FOF
|
||||||
{
|
{
|
||||||
INT16 sectag = (INT16)(sides[line->sidenum[0]].textureoffset>>FRACBITS);
|
INT16 sectag = (INT16)(sides[line->sidenum[0]].textureoffset>>FRACBITS);
|
||||||
INT16 foftag = (INT16)(sides[line->sidenum[0]].rowoffset>>FRACBITS);
|
INT16 foftag = (INT16)(sides[line->sidenum[0]].rowoffset>>FRACBITS);
|
||||||
|
@ -3407,7 +3464,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
|
|
||||||
if (!sec->ffloors)
|
if (!sec->ffloors)
|
||||||
{
|
{
|
||||||
CONS_Debug(DBG_GAMELOGIC, "Line type 453 Executor: Target sector #%d has no FOFs.\n", secnum);
|
CONS_Debug(DBG_GAMELOGIC, "Line type 454 Executor: Target sector #%d has no FOFs.\n", secnum);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3419,7 +3476,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
|
||||||
|
|
||||||
if (!rover)
|
if (!rover)
|
||||||
{
|
{
|
||||||
CONS_Debug(DBG_GAMELOGIC, "Line type 453 Executor: Can't find a FOF control sector with tag %d\n", foftag);
|
CONS_Debug(DBG_GAMELOGIC, "Line type 454 Executor: Can't find a FOF control sector with tag %d\n", foftag);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue