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;
}