diff --git a/src/g_game.c b/src/g_game.c index ee4125077..47ae6479f 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -4030,7 +4030,8 @@ void G_HandleSaveLevel(boolean removecondition) || roundqueue.size == 0) return; - if (roundqueue.position == 1) + if (roundqueue.position == 1 + || players[consoleplayer].lives <= 1) // because a life is lost on reload goto doremove; G_SaveGame(); diff --git a/src/p_saveg.c b/src/p_saveg.c index 124285bd1..57b7e140f 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -84,7 +84,8 @@ static inline void P_ArchivePlayer(savebuffer_t *save) { const player_t *player = &players[consoleplayer]; - WRITESINT8(save->p, player->lives); + // Prevent an exploit from occuring. + WRITESINT8(save->p, (player->lives - 1)); WRITEUINT32(save->p, player->score); WRITEUINT16(save->p, player->totalring);