ref: f0c7aa035a81c84e26edd0cd9aafd13f00e0a2fe
parent: 7e59c3bc40bf8c3ffdd5d43978160feb643d71d2
author: Simon Howard <fraggle@gmail.com>
date: Wed Aug 8 20:04:03 EDT 2007
Don't crash when all players have quit. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 955
--- a/src/am_map.c
+++ b/src/am_map.c
@@ -472,13 +472,21 @@
m_w = FTOM(f_w);
m_h = FTOM(f_h);
+ plr = &players[0];
+
// find player to center on initially
if (!playeringame[pnum = consoleplayer])
+ {
for (pnum=0;pnum<MAXPLAYERS;pnum++)
+ {
if (playeringame[pnum])
+ {
+ plr = &players[pnum];
break;
-
- plr = &players[pnum];
+ }
+ }
+ }
+
m_x = plr->mo->x - m_w/2;
m_y = plr->mo->y - m_h/2;
AM_changeWindowLoc();
--- a/src/d_net.c
+++ b/src/d_net.c
@@ -207,7 +207,6 @@
}
#endif
-
netcmds[consoleplayer][maketic % BACKUPTICS] = cmd;
++maketic;
@@ -408,6 +407,23 @@
}
+// Returns true if there are currently any players in the game.
+
+static boolean PlayersInGame(void)
+{
+ int i;
+
+ for (i=0; i<MAXPLAYERS; ++i)
+ {
+ if (playeringame[i])
+ {
+ return true;
+ }
+ }
+
+ return false;
+}
+
static int GetLowTic(void)
{
int i;
@@ -454,7 +470,7 @@
int realtics;
int availabletics;
int counts;
-
+
// get real tics
entertic = I_GetTime() / ticdup;
realtics = entertic - oldentertics;
@@ -539,7 +555,8 @@
counts = 1;
// wait for new tics if needed
- while (lowtic < gametic/ticdup + counts)
+
+ while (!PlayersInGame() || lowtic < gametic/ticdup + counts)
{
NetUpdate ();
@@ -564,6 +581,14 @@
{
for (i=0 ; i<ticdup ; i++)
{
+ // check that there are players in the game. if not, we cannot
+ // run a tic.
+
+ if (!PlayersInGame())
+ {
+ return;
+ }
+
if (gametic/ticdup > lowtic)
I_Error ("gametic>lowtic");
if (advancedemo)
@@ -592,3 +617,4 @@
NetUpdate (); // check for new console commands
}
}
+