diff --git a/src/g_game.c b/src/g_game.c index 07e6a756d..bf37aadbc 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2573,7 +2573,9 @@ void G_MovePlayerToSpawnOrStarpost(INT32 playernum) else P_MovePlayerToStarpost(playernum); #else - if (leveltime > starttime) + // Player's first spawn should be at the "map start". + // I.e. level load or join mid game. + if (leveltime > starttime && players[playernum].jointime > 0) P_MovePlayerToStarpost(playernum); else P_MovePlayerToSpawn(playernum, G_FindMapStart(playernum)); diff --git a/src/p_mobj.c b/src/p_mobj.c index a2594a3f4..bdf0064f0 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -11486,6 +11486,15 @@ void P_MovePlayerToSpawn(INT32 playernum, mapthing_t *mthing) { K_DoIngameRespawn(p); } + else + { + // This is important for spectators. If you are + // a spectator now, then when you enter the game, + // respawn back at this point. + p->respawn.pointx = x; + p->respawn.pointy = y; + p->respawn.pointz = z; + } P_AfterPlayerSpawn(playernum); }