Add ML_DONPTEGTOP flag to Nights LE

* Nightserize: Run only if player is already NiGHTS
* DeNightserize: Run only if >0 players are NiGHTS
This commit is contained in:
mazmazz 2018-04-07 07:33:07 -04:00
parent ff6fe27748
commit f903d01bc1
1 changed files with 22 additions and 3 deletions

View File

@ -1539,6 +1539,7 @@ static boolean P_CheckNightsTriggerLine(line_t *triggerline, mobj_t *actor)
boolean donomares = triggerline->flags & ML_BOUNCY; // nightserize: run at end of level (no mares)
boolean fromnonights = triggerline->flags & ML_TFERLINE; // nightserize: from non-nights // denightserize: all players no nights
boolean fromnights = triggerline->flags & ML_DONTPEGTOP; // nightserize: from nights // denightserize: >0 players are nights
UINT8 currentmare = UINT8_MAX;
UINT8 currentlap = UINT8_MAX;
@ -1562,12 +1563,22 @@ static boolean P_CheckNightsTriggerLine(line_t *triggerline, mobj_t *actor)
else if (actor->player->powers[pw_carry] == CR_NIGHTSMODE)
return false;
}
// run only if player is nightserizing from nights
else if (fromnights)
{
if (!actor->player)
return false;
else if (actor->player->powers[pw_carry] != CR_NIGHTSMODE)
return false;
}
}
// Get current mare and lap (and check early return for DeNightserize)
if (perglobal || perglobalinverse
|| (specialtype >= 325 && specialtype <= 326 && fromnonights))
|| (specialtype >= 325 && specialtype <= 326 && (fromnonights || fromnights)))
{
UINT8 playersarenights = 0;
for (i = 0; i < MAXPLAYERS; i++)
{
if (!playeringame[i] || players[i].spectator)
@ -1578,6 +1589,11 @@ static boolean P_CheckNightsTriggerLine(line_t *triggerline, mobj_t *actor)
&& players[i].powers[pw_carry] == CR_NIGHTSMODE)
return false;
// count number of nights players for denightserize return
if (specialtype >= 325 && specialtype <= 326 && fromnights
&& players[i].powers[pw_carry] == CR_NIGHTSMODE)
playersarenights++;
UINT8 lap = lapfrombonustime ? players[i].marebonuslap : players[i].marelap;
// get highest mare/lap of players
@ -1605,6 +1621,11 @@ static boolean P_CheckNightsTriggerLine(line_t *triggerline, mobj_t *actor)
currentlap = lap;
}
}
// denightserize: run only if >0 players are nights
if (specialtype >= 325 && specialtype <= 326 && fromnights
&& playersarenights < 1)
return false;
}
// get current mare/lap from triggering player
else if (!perglobal && !perglobalinverse)
@ -1839,8 +1860,6 @@ boolean P_RunTriggerLinedef(line_t *triggerline, mobj_t *actor, sector_t *caller
return false;
}
break;
// Let's do the NiGHTS triggers in one code block; they mostly have the same logic
case 323: // nightserize - each time
case 324: // nightserize - once
case 325: // denightserize - each time