From 3181ed3caeaaefc20806486078f71919bc770bc9 Mon Sep 17 00:00:00 2001 From: mfrancis95 Date: Tue, 18 Dec 2018 01:11:24 -0500 Subject: [PATCH] Heretic: Gracefully error out when player starts are missing (fix #1122) --- src/heretic/doomdef.h | 1 + src/heretic/p_mobj.c | 1 + src/heretic/p_setup.c | 13 +++++++++++++ 3 files changed, 15 insertions(+) diff --git a/src/heretic/doomdef.h b/src/heretic/doomdef.h index 72355b20..82258211 100644 --- a/src/heretic/doomdef.h +++ b/src/heretic/doomdef.h @@ -553,6 +553,7 @@ extern ticcmd_t *netcmds; extern mapthing_t *deathmatch_p; extern mapthing_t deathmatchstarts[10]; extern mapthing_t playerstarts[MAXPLAYERS]; +extern boolean playerstartsingame[MAXPLAYERS]; extern int mouseSensitivity; diff --git a/src/heretic/p_mobj.c b/src/heretic/p_mobj.c index 00e6a33c..c0759848 100644 --- a/src/heretic/p_mobj.c +++ b/src/heretic/p_mobj.c @@ -1052,6 +1052,7 @@ void P_SpawnMapThing(mapthing_t * mthing) { // save spots for respawning in network games playerstarts[mthing->type - 1] = *mthing; + playerstartsingame[mthing->type - 1] = true; if (!deathmatch) { P_SpawnPlayer(mthing); diff --git a/src/heretic/p_setup.c b/src/heretic/p_setup.c index b14fc916..0dd0dcfa 100644 --- a/src/heretic/p_setup.c +++ b/src/heretic/p_setup.c @@ -60,6 +60,7 @@ byte *rejectmatrix; // for fast sight rejection mapthing_t deathmatchstarts[10], *deathmatch_p; mapthing_t playerstarts[MAXPLAYERS]; +boolean playerstartsingame[MAXPLAYERS]; /* ================= @@ -279,6 +280,18 @@ void P_LoadThings(int lump) P_SpawnMapThing(&spawnthing); } + if (!deathmatch) + { + for (i = 0; i < MAXPLAYERS; i++) + { + if (playeringame[i] && !playerstartsingame[i]) + { + I_Error("P_LoadThings: Player %d start missing (vanilla crashes here)", i + 1); + } + playerstartsingame[i] = false; + } + } + W_ReleaseLumpNum(lump); }