From 032f53ce07d8c3b41451e0aa08eee262f081b5e2 Mon Sep 17 00:00:00 2001 From: Louis-Antoine Date: Tue, 19 Nov 2019 22:44:33 +0100 Subject: [PATCH] Prevent drowning after completing the level --- src/p_mobj.c | 2 +- src/p_user.c | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index cbd6c3c7f..d73f11f81 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3408,7 +3408,7 @@ void P_MobjCheckWater(mobj_t *mobj) // Drown timer setting if ((p->powers[pw_shield] & SH_PROTECTWATER) // Has water protection - || (p->exiting) // Or exiting + || (p->exiting) || (p->pflags & PF_FINISHED) // Or finished/exiting || (maptol & TOL_NIGHTS) // Or in NiGHTS mode || (mariomode)) // Or in Mario mode... { diff --git a/src/p_user.c b/src/p_user.c index 47812744e..672cf8aae 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2153,6 +2153,10 @@ void P_DoPlayerFinish(player_t *player) if (netgame) CONS_Printf(M_GetText("%s has completed the level.\n"), player_names[player-players]); + + player->powers[pw_underwater] = 0; + player->powers[pw_spacetime] = 0; + P_RestoreMusic(player); } // @@ -2860,7 +2864,7 @@ static void P_CheckUnderwaterAndSpaceTimer(player_t *player) { tic_t timeleft = (player->powers[pw_spacetime]) ? player->powers[pw_spacetime] : player->powers[pw_underwater]; - if (player->exiting) + if (player->exiting || (player->pflags & PF_FINISHED)) player->powers[pw_underwater] = player->powers[pw_spacetime] = 0; timeleft--; // The original code was all n*TICRATE + 1, so let's remove 1 tic for simplicity