diff --git a/src/p_spec.c b/src/p_spec.c index 590d97a5d..e628b853d 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -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