shithub: choc

Download patch

ref: a64ebd8e36b6cd13f18163d0a3365f4e80d90805
parent: 27b5915111ffbdae97ce0c415157e104ee6f3493
author: Fabian Greffrath <[email protected]>
date: Mon Mar 30 12:34:12 EDT 2015

Turn maxplayers into a global variable

... and decrease its value from MAXPLAYERS (i.e. 8) to 4 if
(gamemode == shareware). It seems that it was hard-coded to this value
until some time between the releases of the Demo and the Full version.

Arrays are still declared with their full width of 8, though, they are
just not iterated over the whole range anymore. This fixes playback of
the IWAD demos.

--- a/src/hexen/a_action.c
+++ b/src/hexen/a_action.c
@@ -211,7 +211,7 @@
     }
     else
     {
-        for (i = 0; i < MAXPLAYERS; i++)
+        for (i = 0; i < maxplayers; i++)
         {
             if (!playeringame[i])
             {
@@ -905,7 +905,7 @@
 
     if (actor->args[1]-- > 0)
     {
-        for (playnum = 0; playnum < MAXPLAYERS; playnum++)
+        for (playnum = 0; playnum < maxplayers; playnum++)
         {
             player = &players[playnum];
             if (!playeringame[playnum])
@@ -934,7 +934,7 @@
     }
     else
     {
-        for (playnum = 0; playnum < MAXPLAYERS; playnum++)
+        for (playnum = 0; playnum < maxplayers; playnum++)
         {
             localQuakeHappening[playnum] = false;
         }
--- a/src/hexen/am_map.c
+++ b/src/hexen/am_map.c
@@ -292,7 +292,7 @@
 
     // find player to center on initially
     if (!playeringame[pnum = consoleplayer])
-        for (pnum = 0; pnum < MAXPLAYERS; pnum++)
+        for (pnum = 0; pnum < maxplayers; pnum++)
             if (playeringame[pnum])
                 break;
     plr = &players[pnum];
@@ -1280,7 +1280,7 @@
         return;
     }
 
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         their_color++;
         p = &players[i];
@@ -1418,12 +1418,12 @@
     char textBuffer[80];
     int yPosition;
 
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         fragCount[i] = 0;
         order[i] = -1;
     }
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         if (!playeringame[i])
         {
@@ -1431,7 +1431,7 @@
         }
         else
         {
-            for (j = 0; j < MAXPLAYERS; j++)
+            for (j = 0; j < maxplayers; j++)
             {
                 if (playeringame[j])
                 {
@@ -1438,7 +1438,7 @@
                     fragCount[i] += players[i].frags[j];
                 }
             }
-            for (k = 0; k < MAXPLAYERS; k++)
+            for (k = 0; k < maxplayers; k++)
             {
                 if (order[k] == -1)
                 {
@@ -1447,7 +1447,7 @@
                 }
                 else if (fragCount[i] > fragCount[order[k]])
                 {
-                    for (m = MAXPLAYERS - 1; m > k; m--)
+                    for (m = maxplayers - 1; m > k; m--)
                     {
                         order[m] = order[m - 1];
                     }
@@ -1458,7 +1458,7 @@
         }
     }
     yPosition = 15;
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         if (!playeringame[order[i]])
         {
--- a/src/hexen/ct_chat.c
+++ b/src/hexen/ct_chat.c
@@ -116,7 +116,7 @@
     tail = 0;
     chatmodeon = false;
     memset(ChatQueue, 0, QUEUESIZE);
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         chat_dest[i] = 0;
         msgptr[i] = 0;
@@ -292,7 +292,7 @@
     char c;
     int numplayers;
 
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         if (!playeringame[i])
         {
@@ -312,7 +312,7 @@
             else if (c == KEY_ENTER)
             {
                 numplayers = 0;
-                for (j = 0; j < MAXPLAYERS; j++)
+                for (j = 0; j < maxplayers; j++)
                 {
                     numplayers += playeringame[j];
                 }
--- a/src/hexen/d_net.c
+++ b/src/hexen/d_net.c
@@ -76,7 +76,7 @@
 
     // Check for player quits.
 
-    for (i = 0; i < MAXPLAYERS; ++i)
+    for (i = 0; i < maxplayers; ++i)
     {
         if (!demoplayback && playeringame[i] && !ingame[i])
         {
@@ -120,7 +120,7 @@
     respawnparm = settings->respawn_monsters;
     consoleplayer = settings->consoleplayer;
 
-    for (i=0; i<MAXPLAYERS; ++i)
+    for (i=0; i<maxplayers; ++i)
     {
         playeringame[i] = i < settings->num_players;
         PlayerClass[i] = settings->player_classes[i];
@@ -172,7 +172,7 @@
 
     connect_data->lowres_turn = false;
     connect_data->drone = false;
-    connect_data->max_players = (gamemode == shareware) ? 4 : MAXPLAYERS;
+    connect_data->max_players = maxplayers;
 
     //!
     // @category net
--- a/src/hexen/g_game.c
+++ b/src/hexen/g_game.c
@@ -639,7 +639,7 @@
 
     levelstarttic = gametic;    // for time calculation 
     gamestate = GS_LEVEL;
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         if (playeringame[i] && players[i].playerstate == PST_DEAD)
             players[i].playerstate = PST_REBORN;
@@ -756,7 +756,7 @@
         do
         {
             displayplayer++;
-            if (displayplayer == MAXPLAYERS)
+            if (displayplayer == maxplayers)
             {
                 displayplayer = 0;
             }
@@ -899,7 +899,7 @@
 //
 // do player reborns if needed
 //
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
         if (playeringame[i] && players[i].playerstate == PST_REBORN)
             G_DoReborn(i);
 
@@ -963,7 +963,7 @@
     //buf = gametic%BACKUPTICS;
     buf = (gametic / ticdup) % BACKUPTICS;
 
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
         if (playeringame[i])
         {
             cmd = &players[i].cmd;
@@ -993,7 +993,7 @@
 //
 // check for special buttons
 //
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
         if (playeringame[i])
         {
             if (players[i].cmd.buttons & BT_SPECIAL)
@@ -1335,7 +1335,7 @@
         else
         {
             // Try to spawn at one of the other player start spots
-            for (i = 0; i < MAXPLAYERS; i++)
+            for (i = 0; i < maxplayers; i++)
             {
                 if (G_CheckSpot(playernum, &playerstarts[RebornPosition][i]))
                 {               // Found an open start spot
@@ -1492,7 +1492,7 @@
     {
         return;
     }
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         if (playeringame[i])
         {
@@ -1519,7 +1519,7 @@
 	{
 		return;
 	}
-	for(i = 0; i < MAXPLAYERS; i++)
+	for(i = 0; i < maxplayers; i++)
 	{
 		if(playeringame[i])
 		{
@@ -1732,7 +1732,7 @@
     }
     M_ClearRandom();
     // Force players to be initialized upon first level load
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         players[i].playerstate = PST_REBORN;
         players[i].worldTimer = 0;
@@ -1755,7 +1755,7 @@
     // Give one null ticcmd_t
     //gametic = 0;
     //maketic = 1;
-    //for (i=0 ; i<MAXPLAYERS ; i++)
+    //for (i=0 ; i<maxplayers ; i++)
     //      nettics[i] = 1; // one null event for this gametic
     //memset (localcmds,0,sizeof(localcmds));
     //memset (netcmds,0,sizeof(netcmds));
@@ -1826,7 +1826,7 @@
     *demo_p++ = episode;
     *demo_p++ = map;
 
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         *demo_p++ = playeringame[i];
         *demo_p++ = PlayerClass[i];
@@ -1862,7 +1862,7 @@
     episode = *demo_p++;
     map = *demo_p++;
 
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         playeringame[i] = *demo_p++;
         PlayerClass[i] = *demo_p++;
@@ -1897,7 +1897,7 @@
     episode = *demo_p++;
     map = *demo_p++;
 
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         playeringame[i] = *demo_p++;
         PlayerClass[i] = *demo_p++;
--- a/src/hexen/h2_main.c
+++ b/src/hexen/h2_main.c
@@ -113,6 +113,7 @@
 boolean advancedemo;
 FILE *debugfile;
 int UpdateState;
+int maxplayers = MAXPLAYERS;
 
 // PRIVATE DATA DEFINITIONS ------------------------------------------------
 
@@ -266,6 +267,7 @@
         W_CheckNumForName("MAP05") == -1 )
     {
 	gamemode = shareware;
+	maxplayers = 4;
     }
 }
 
--- a/src/hexen/h2def.h
+++ b/src/hexen/h2def.h
@@ -655,6 +655,7 @@
 
 #define MAX_PLAYER_STARTS 8
 extern mapthing_t playerstarts[MAX_PLAYER_STARTS][MAXPLAYERS];
+extern int maxplayers;
 
 extern int mouseSensitivity;
 
--- a/src/hexen/in_lude.c
+++ b/src/hexen/in_lude.c
@@ -106,7 +106,7 @@
     skipintermission = false;
     intertime = 0;
     AM_Stop();
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         players[i].messageTics = 0;
         players[i].message[0] = 0;
@@ -208,13 +208,13 @@
         posnum = 0;
         playercount = 0;
         slaughtercount = 0;
-        for (i = 0; i < MAXPLAYERS; i++)
+        for (i = 0; i < maxplayers; i++)
         {
             totalFrags[i] = 0;
             if (playeringame[i])
             {
                 playercount++;
-                for (j = 0; j < MAXPLAYERS; j++)
+                for (j = 0; j < maxplayers; j++)
                 {
                     if (playeringame[j])
                     {
@@ -338,7 +338,7 @@
     player_t *player;
     static boolean triedToSkip;
 
-    for (i = 0, player = players; i < MAXPLAYERS; i++, player++)
+    for (i = 0, player = players; i < maxplayers; i++, player++)
     {
         if (playeringame[i])
         {
@@ -478,10 +478,10 @@
         S_StartSound(NULL, SFX_PLATFORM_STOP);
     }
     y = yPos >> FRACBITS;
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         xPos = xStart;
-        for (j = 0; j < MAXPLAYERS; j++, xPos += xDelta)
+        for (j = 0; j < maxplayers; j++, xPos += xDelta)
         {
             x = xPos >> FRACBITS;
             bold = (i == consoleplayer || j == consoleplayer);
--- a/src/hexen/p_acs.c
+++ b/src/hexen/p_acs.c
@@ -1681,7 +1681,7 @@
 {
     int i;
 
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         if (playeringame[i])
         {
@@ -1722,7 +1722,7 @@
     int count;
 
     count = 0;
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         count += playeringame[i];
     }
--- a/src/hexen/p_enemy.c
+++ b/src/hexen/p_enemy.c
@@ -546,8 +546,8 @@
     // stop = (actor->lastlook - 1) & 3;
     // for (;; actor->lastlook = (actor->lastlook + 1) & 3)
 
-    stop = (actor->lastlook + MAXPLAYERS - 1) % MAXPLAYERS;
-    for (;; actor->lastlook = (actor->lastlook + 1) % MAXPLAYERS)
+    stop = (actor->lastlook + maxplayers - 1) % maxplayers;
+    for (;; actor->lastlook = (actor->lastlook + 1) % maxplayers)
     {
         if (!playeringame[actor->lastlook])
             continue;
@@ -1179,7 +1179,7 @@
     actor->target = NULL;
     if (deathmatch)             // Quick search for players
     {
-        for (i = 0; i < MAXPLAYERS; i++)
+        for (i = 0; i < maxplayers; i++)
         {
             if (!playeringame[i])
                 continue;
--- a/src/hexen/p_mobj.c
+++ b/src/hexen/p_mobj.c
@@ -1190,7 +1190,7 @@
     {
         mobj->reactiontime = info->reactiontime;
     }
-    mobj->lastlook = P_Random() % MAXPLAYERS;
+    mobj->lastlook = P_Random() % maxplayers;
 
     // Set the state, but do not use P_SetMobjState, because action
     // routines can't be called yet.  If the spawnstate has an action
@@ -1295,7 +1295,7 @@
     fixed_t x, y, z;
     mobj_t *mobj;
 
-    if (mthing->type - 1 >= MAXPLAYERS || !playeringame[mthing->type - 1])
+    if (mthing->type - 1 >= maxplayers || !playeringame[mthing->type - 1])
     {                           // Not playing
         return;
     }
@@ -1500,7 +1500,7 @@
     else if (deathmatch == false)
     {                           // Cooperative
         spawnMask = 0;
-        for (i = 0; i < MAXPLAYERS; i++)
+        for (i = 0; i < maxplayers; i++)
         {
             if (playeringame[i])
             {
--- a/src/hexen/p_setup.c
+++ b/src/hexen/p_setup.c
@@ -387,7 +387,7 @@
         return;
     }
     playerCount = 0;
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         playerCount += playeringame[i];
     }
@@ -672,7 +672,7 @@
     int lumpnum;
     mobj_t *mobj;
 
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         players[i].killcount = players[i].secretcount
             = players[i].itemcount = 0;
@@ -722,7 +722,7 @@
     TimerGame = 0;
     if (deathmatch)
     {
-        for (i = 0; i < MAXPLAYERS; i++)
+        for (i = 0; i < maxplayers; i++)
         {
             if (playeringame[i])
             {                   // must give a player spot before deathmatchspawn
--- a/src/hexen/p_tick.c
+++ b/src/hexen/p_tick.c
@@ -58,7 +58,7 @@
     {
         return;
     }
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         if (playeringame[i])
         {
--- a/src/hexen/p_user.c
+++ b/src/hexen/p_user.c
@@ -480,7 +480,7 @@
 {
     int i;
 
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         if (player == &players[i])
         {
@@ -1017,7 +1017,7 @@
     fixed_t destX, destY;
     angle_t destAngle;
 
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         if (!playeringame[i])
             continue;
--- a/src/hexen/r_draw.c
+++ b/src/hexen/r_draw.c
@@ -320,9 +320,9 @@
     V_LoadTintTable();
 
     // Allocate translation tables
-    translationtables = Z_Malloc(256 * 3 * (MAXPLAYERS - 1), PU_STATIC, 0);
+    translationtables = Z_Malloc(256 * 3 * (maxplayers - 1), PU_STATIC, 0);
 
-    for (i = 0; i < 3 * (MAXPLAYERS - 1); i++)
+    for (i = 0; i < 3 * (maxplayers - 1); i++)
     {
         lumpnum = W_GetNumForName("trantbl0") + i;
         transLump = W_CacheLumpNum(lumpnum, PU_STATIC);
--- a/src/hexen/r_things.c
+++ b/src/hexen/r_things.c
@@ -388,7 +388,7 @@
         {
             colfunc = R_DrawTranslatedTLColumn;
             dc_translation = translationtables - 256
-                + vis->class * ((MAXPLAYERS - 1) * 256) +
+                + vis->class * ((maxplayers - 1) * 256) +
                 ((vis->mobjflags & MF_TRANSLATION) >> (MF_TRANSSHIFT - 8));
         }
         else if (vis->mobjflags & MF_SHADOW)
@@ -405,7 +405,7 @@
         // Draw using translated column function
         colfunc = R_DrawTranslatedColumn;
         dc_translation = translationtables - 256
-            + vis->class * ((MAXPLAYERS - 1) * 256) +
+            + vis->class * ((maxplayers - 1) * 256) +
             ((vis->mobjflags & MF_TRANSLATION) >> (MF_TRANSSHIFT - 8));
     }
 
--- a/src/hexen/sb_bar.c
+++ b/src/hexen/sb_bar.c
@@ -342,7 +342,6 @@
 void SB_SetClassData(void)
 {
     int class;
-    int maxplayers = (gamemode == shareware) ? 4 : MAXPLAYERS;
 
     class = PlayerClass[consoleplayer]; // original player class (not pig)
     PatchWEAPONSLOT = W_CacheLumpNum(W_GetNumForName("wpslot0")
@@ -1053,7 +1052,7 @@
     if (deathmatch)
     {
         temp = 0;
-        for (i = 0; i < MAXPLAYERS; i++)
+        for (i = 0; i < maxplayers; i++)
         {
             temp += CPlayer->frags[i];
         }
@@ -1380,7 +1379,7 @@
     if (deathmatch)
     {
         temp = 0;
-        for (i = 0; i < MAXPLAYERS; i++)
+        for (i = 0; i < maxplayers; i++)
         {
             if (playeringame[i])
             {
--- a/src/hexen/sv_save.c
+++ b/src/hexen/sv_save.c
@@ -416,7 +416,7 @@
     str->pieces = GET_LONG;
 
     // signed int frags[MAXPLAYERS];
-    for (i=0; i<MAXPLAYERS; ++i)
+    for (i=0; i<maxplayers; ++i)
     {
         str->frags[i] = GET_LONG;
     }
@@ -585,7 +585,7 @@
     StreamOutLong(str->pieces);
 
     // signed int frags[MAXPLAYERS];
-    for (i=0; i<MAXPLAYERS; ++i)
+    for (i=0; i<maxplayers; ++i)
     {
         StreamOutLong(str->frags[i]);
     }
@@ -2081,7 +2081,7 @@
     Z_Free(SaveBuffer);
 
     // Save player structs
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         playerBackup[i] = players[i];
     }
@@ -2095,7 +2095,7 @@
     // Restore player structs
     inv_ptr = 0;
     curpos = 0;
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         mobj = players[i].mo;
         players[i] = playerBackup[i];
@@ -2170,7 +2170,7 @@
     // Store player structs for later
     rClass = randomclass;
     randomclass = false;
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         playerBackup[i] = players[i];
     }
@@ -2194,7 +2194,7 @@
         G_InitNew(gameskill, gameepisode, gamemap);
 
         // Destroy all freshly spawned players
-        for (i = 0; i < MAXPLAYERS; i++)
+        for (i = 0; i < maxplayers; i++)
         {
             if (playeringame[i])
             {
@@ -2205,7 +2205,7 @@
 
     // Restore player structs
     targetPlayerMobj = NULL;
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         if (!playeringame[i])
         {
@@ -2286,7 +2286,7 @@
     }
 
     // Destroy all things touching players
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         if (playeringame[i])
         {
@@ -2403,11 +2403,11 @@
     int i;
 
     StreamOutLong(ASEG_PLAYERS);
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         StreamOutByte(playeringame[i]);
     }
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         if (!playeringame[i])
         {
@@ -2429,11 +2429,11 @@
     int i;
 
     AssertSegment(ASEG_PLAYERS);
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         playeringame[i] = GET_BYTE;
     }
-    for (i = 0; i < MAXPLAYERS; i++)
+    for (i = 0; i < maxplayers; i++)
     {
         if (!playeringame[i])
         {
@@ -2968,7 +2968,7 @@
     int ix;
 
     StreamOutLong(ASEG_MISC);
-    for (ix = 0; ix < MAXPLAYERS; ix++)
+    for (ix = 0; ix < maxplayers; ix++)
     {
         StreamOutLong(localQuakeHappening[ix]);
     }
@@ -2985,7 +2985,7 @@
     int ix;
 
     AssertSegment(ASEG_MISC);
-    for (ix = 0; ix < MAXPLAYERS; ix++)
+    for (ix = 0; ix < maxplayers; ix++)
     {
         localQuakeHappening[ix] = GET_LONG;
     }