port: net: experimental 8 player support

This commit is contained in:
fgsfds committed 2023-12-26 22:48:28 +01:00
1 parent ee037c10ce
commit 04f95ed1d1
26 files changed
+191 -116

No files matched your search

+2 -2
View File
@@ -66,7 +66,7 @@ static void gameInit(void)
{
osMemSize = g_OsMemSizeMb * 1024 * 1024;
for (s32 i = 0; i < MAX_PLAYERS; ++i) {
for (s32 i = 0; i < MAX_LOCAL_PLAYERS; ++i) {
struct extplayerconfig *cfg = g_PlayerExtCfg + i;
cfg->fovzoommult = cfg->fovzoom ? cfg->fovy / 60.0f : 1.0f;
}
@@ -159,7 +159,7 @@ PD_CONSTRUCTOR static void gameConfigInit(void)
configRegisterInt("Game.SkipIntro", &g_SkipIntro, 0, 1);
configRegisterInt("Game.DisableMpDeathMusic", &g_MusicDisableMpDeath, 0, 1);
configRegisterInt("Game.GEMuzzleFlashes", &g_BgunGeMuzzleFlashes, 0, 1);
for (s32 j = 0; j < MAX_PLAYERS; ++j) {
for (s32 j = 0; j < MAX_LOCAL_PLAYERS; ++j) {
const s32 i = j + 1;
configRegisterFloat(strFmt("Game.Player%d.FovY", i), &g_PlayerExtCfg[j].fovy, 5.f, 175.f);
configRegisterInt(strFmt("Game.Player%d.FovAffectsZoom", i), &g_PlayerExtCfg[j].fovzoom, 0, 1);
+5 -10
View File
@@ -421,6 +421,9 @@ void mainLoop(void)
if (argFindByPrefix(1, "-ma")) {
g_MainMemaHeapSize = strtol(argFindByPrefix(1, "-ma"), NULL, 0) * 1024;
if (g_NetMode && g_NetMaxClients > MAX_LOCAL_PLAYERS) {
g_MainMemaHeapSize *= MAX_PLAYERS / MAX_LOCAL_PLAYERS;
}
}
memaReset(mempAlloc(g_MainMemaHeapSize, MEMPOOL_STAGE), g_MainMemaHeapSize);
@@ -470,16 +473,8 @@ void mainLoop(void)
&& (numplayers >= 2 || g_Vars.lvmpbotlevel || argFindByPrefix(1, "-play"))) {
g_MpSetup.chrslots = 1;
if (numplayers >= 2) {
g_MpSetup.chrslots |= 1 << 1;
}
if (numplayers >= 3) {
g_MpSetup.chrslots |= 1 << 2;
}
if (numplayers >= 4) {
g_MpSetup.chrslots |= 1 << 3;
for (s32 i = 1; i < numplayers; ++i) {
g_MpSetup.chrslots |= 1 << i;
}
g_MpSetup.stagenum = g_StageNum;
+4
View File
@@ -1042,6 +1042,10 @@ void preprocessMpConfigs(u8 *data, u32 size)
PD_SWAP_VAL(cfg->setup.options);
PD_SWAP_VAL(cfg->setup.teamscorelimit);
PD_SWAP_VAL(cfg->setup.chrslots);
#if MAX_PLAYERS > 4
// make space for the extra players
cfg->setup.chrslots = (cfg->setup.chrslots & 0x000f) | ((cfg->setup.chrslots & 0x0ff0) << 4);
#endif
// TODO: are these required or are they always 0?
PD_SWAP_VAL(cfg->setup.fileguid.deviceserial);
PD_SWAP_VAL(cfg->setup.fileguid.fileid);
+1 -1
View File
@@ -26,7 +26,7 @@
#include "data.h"
#include "types.h"
struct activemenu g_AmMenus[MAX_PLAYERS];
struct activemenu g_AmMenus[MAX_LOCAL_PLAYERS];
struct fontchar *g_AmFont1;
struct font *g_AmFont2;
s32 g_AmIndex;
+1 -1
View File
@@ -22,7 +22,7 @@ void amTick(void)
s32 prevplayernum = g_Vars.currentplayernum;
s32 i;
for (i = 0; i < PLAYERCOUNT(); i++) {
for (i = 0; i < LOCALPLAYERCOUNT(); i++) {
setCurrentPlayerNum(i);
g_AmIndex = g_Vars.currentplayernum;
+7 -3
View File
@@ -136,7 +136,7 @@ void challengeDetermineUnlockedFeatures(void)
}
// Now same as above, but per player
for (j = 0; j < MAX_PLAYERS; j++) {
for (j = 0; j < MAX_LOCAL_PLAYERS; j++) {
numgifted = 0;
for (challengeindex = 0; challengeindex < ARRAYCOUNT(g_MpChallenges); challengeindex++) {
@@ -197,7 +197,7 @@ void challengeDetermineUnlockedFeatures(void)
}
for (challengeindex = 0; challengeindex < ARRAYCOUNT(g_MpChallenges); challengeindex++) {
for (prev = 0; prev < MAX_PLAYERS; prev++) {
for (prev = 0; prev < MAX_LOCAL_PLAYERS; prev++) {
if (challengeIsAvailableToPlayer(prev, challengeindex)) {
for (i = 0; i < ARRAYCOUNT(g_MpChallenges[challengeindex].unlockfeatures); i++) {
if (g_MpChallenges[challengeindex].unlockfeatures[i] == j) {
@@ -249,7 +249,7 @@ void challengePerformSanityChecks(void)
}
}
// Turn off all simulants and turn them on if enabled
// Turn off all simulants (and players 5-8 if supported) and turn them on if enabled
// for this number of players
g_MpSetup.chrslots &= 0x000f;
@@ -266,7 +266,11 @@ void challengePerformSanityChecks(void)
}
} else if (!challengeIsFeatureUnlocked(MPFEATURE_8BOTS)) {
// Limit to 4 players and 4 simulants
#if MAX_PLAYERS > 4
g_MpSetup.chrslots &= 0x0f0f;
#else
g_MpSetup.chrslots &= 0x00ff;
#endif
}
}
+2 -2
View File
@@ -15411,7 +15411,7 @@ bool chrMoveToPos(struct chrdata *chr, struct coord *pos, RoomNum *rooms, f32 an
bool result = false;
u32 nodetype;
union modelrwdata *rwdata;
struct player *player;
struct player *player = NULL;
f32 ground;
pos2.x = pos->x;
@@ -15462,7 +15462,7 @@ bool chrMoveToPos(struct chrdata *chr, struct coord *pos, RoomNum *rooms, f32 an
}
#ifndef PLATFORM_N64
if (g_NetMode == NETMODE_SERVER && player->isremote) {
if (g_NetMode == NETMODE_SERVER && player && player->isremote) {
player->ucmd |= UCMD_FL_FORCEPOS | UCMD_FL_FORCEANGLE | UCMD_FL_FORCEGROUND;
}
#endif
+1 -1
View File
@@ -24,7 +24,7 @@
s32 g_FilelistKnownPlugCounts[5];
struct filelist *g_FileLists[MAX_PLAYERS] = { NULL };
struct filelist *g_FileLists[MAX_LOCAL_PLAYERS] = { NULL };
bool var80075bd0[] = { true, true, true, true };
bool var80075be0[] = { false, false, false, false };
u32 var80075bf0 = false;
+8 -8
View File
@@ -25,7 +25,7 @@ struct fileguid g_FilemgrFileToCopy;
struct fileguid var800a21e8;
#if VERSION >= VERSION_JPN_FINAL
struct fileguid g_FilemgrFileToDelete[MAX_PLAYERS];
struct fileguid g_FilemgrFileToDelete[MAX_LOCAL_PLAYERS];
#else
struct fileguid g_FilemgrFileToDelete;
#endif
@@ -986,7 +986,7 @@ void filemgrDeleteCurrentFile(void)
filemgrPushErrorDialog(FILEERROR_DELETEFAILED);
} else {
// If deleting a loaded MP player, reset them to default
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
if (g_FilemgrFileToDelete[g_MpPlayerNum].fileid == g_PlayerConfigsArray[i].fileguid.fileid
&& g_FilemgrFileToDelete[g_MpPlayerNum].deviceserial == g_PlayerConfigsArray[i].fileguid.deviceserial) {
mpPlayerSetDefaults(i, true);
@@ -1013,7 +1013,7 @@ void filemgrDeleteCurrentFile(void)
filemgrPushErrorDialog(FILEERROR_DELETEFAILED);
} else {
// If deleting a loaded MP player, reset them to default
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
if (g_FilemgrFileToDelete.fileid == g_PlayerConfigsArray[i].fileguid.fileid
&& g_FilemgrFileToDelete.deviceserial == g_PlayerConfigsArray[i].fileguid.deviceserial) {
mpPlayerSetDefaults(i, true);
@@ -1860,7 +1860,7 @@ bool filemgrIsFileInUse(struct filelistfile *file)
}
}
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
if ((g_MpSetup.chrslots & (1 << i))
&& g_PlayerConfigsArray[i].fileguid.fileid == file->fileid
&& g_PlayerConfigsArray[i].fileguid.deviceserial == file->deviceserial) {
@@ -1998,7 +1998,7 @@ bool filemgrIsFileInUse(struct filelistfile *file)
return true;
}
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
if ((g_MpSetup.chrslots & (1 << i))
&& g_PlayerConfigsArray[i].fileguid.fileid == file->fileid
&& g_PlayerConfigsArray[i].fileguid.deviceserial == file->deviceserial) {
@@ -2436,7 +2436,7 @@ MenuDialogHandlerResult pakChoosePakMenuDialog(s32 operation, struct menudialogd
if (g_Vars.stagenum != STAGE_BOOTPAKMENU) {
s32 i;
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
if (g_Menus[g_MpPlayerNum].fm.unke24 & (1 << i)) {
g_Vars.pakstocheck &= 0xfff0;
g_Vars.pakstocheck |= 0x0008;
@@ -2461,7 +2461,7 @@ MenuDialogHandlerResult pakChoosePakMenuDialog(s32 operation, struct menudialogd
{
s32 i;
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
if (g_Menus[g_MpPlayerNum].fm.unke24 & (1 << i)) {
pak0f1169c8(i, STAGE_BOOTPAKMENU == g_Vars.stagenum);
}
@@ -2773,7 +2773,7 @@ MenuDialogHandlerResult filemgrMainMenuDialog(s32 operation, struct menudialogde
mpInit();
// Set MP player names to "Player 1" through 4 if blank
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
if (g_PlayerConfigsArray[i].base.name[0] == '\0') {
sprintf(g_PlayerConfigsArray[i].base.name, "%s %d\n", langGet(L_MISC_437), i + 1);
}
+4 -4
View File
@@ -258,7 +258,7 @@ void gamefileLoadDefaults(struct gamefile *file)
}
for (i = 0; i < ARRAYCOUNT(g_MpChallenges); i++) {
for (j = 1; j < MAX_PLAYERS + 1; j++) {
for (j = 1; j < MAX_LOCAL_PLAYERS + 1; j++) {
challengeSetCompletedByAnyPlayerWithNumPlayers(i, j, false);
}
}
@@ -362,7 +362,7 @@ s32 gamefileLoad(s32 device)
}
for (i = 0; i < ARRAYCOUNT(g_MpChallenges); i++) {
for (j = 1; j < MAX_PLAYERS + 1; j++) {
for (j = 1; j < MAX_LOCAL_PLAYERS + 1; j++) {
challengeSetCompletedByAnyPlayerWithNumPlayers(i, j, savebufferReadBits(&buffer, 1));
}
}
@@ -539,7 +539,7 @@ s32 gamefileSave(s32 device, s32 fileid, u16 deviceserial)
}
for (i = 0; i < ARRAYCOUNT(g_MpChallenges); i++) {
for (j = 1; j < MAX_PLAYERS + 1; j++) {
for (j = 1; j < MAX_LOCAL_PLAYERS + 1; j++) {
savebufferOr(&buffer, challengeIsCompletedByAnyPlayerWithNumPlayers(i, j), 1);
}
}
@@ -602,7 +602,7 @@ void gamefileUnlockEverything(void)
// unlock all challenges
for (i = 0; i < ARRAYCOUNT(g_MpChallenges); ++i) {
for (j = 0; j < MAX_PLAYERS; ++j) {
for (j = 0; j < MAX_LOCAL_PLAYERS; ++j) {
g_MpChallenges[i].completions[j] = 0xff;
}
}
+22
View File
@@ -47,6 +47,12 @@ u32 g_GfxSizesByPlayerCount[] = {
0x00018000,
0x00020000,
0x00028000,
#ifndef PLATFORM_N64
0x00030000,
0x00038000,
0x00040000,
0x00048000,
#endif
};
u32 g_VtxSizesByPlayerCount[] = {
@@ -54,6 +60,12 @@ u32 g_VtxSizesByPlayerCount[] = {
0x00018000,
0x00020000,
0x00028000,
#ifndef PLATFORM_N64
0x00030000,
0x00038000,
0x00040000,
0x00048000,
#endif
};
s32 g_GfxNumSwapsPerBuffer[NUM_GFXTASKS] = {0, 1};
@@ -94,11 +106,21 @@ void gfxReset(void)
// ******** Extra Amount required = %dK ber buffer\n
// ******** Total of %dK (Double Buffered)\n
g_GfxSizesByPlayerCount[PLAYERCOUNT() - 1] = gfx + gfxtra;
#ifndef PLATFORM_N64
if (PLAYERCOUNT() > MAX_LOCAL_PLAYERS) {
g_GfxSizesByPlayerCount[PLAYERCOUNT() - 1] *= MAX_PLAYERS / MAX_LOCAL_PLAYERS;
}
#endif
}
if (argFindByPrefix(1, "-mvtx")) {
// Argument specified mtxvtx_size\n
g_VtxSizesByPlayerCount[PLAYERCOUNT() - 1] = strtol(argFindByPrefix(1, "-mvtx"), NULL, 0) * 1024;
#ifndef PLATFORM_N64
if (PLAYERCOUNT() > MAX_LOCAL_PLAYERS) {
g_VtxSizesByPlayerCount[PLAYERCOUNT() - 1] *= MAX_PLAYERS / MAX_LOCAL_PLAYERS;
}
#endif
}
// %d Players : Allocating %d bytes for master dl's\n
+3 -3
View File
@@ -345,8 +345,8 @@ void lvReset(s32 stagenum)
if (g_Vars.mplayerisrunning == false) {
g_Vars.playerstats[0].mpindex = 4;
g_PlayerConfigsArray[4].contpad1 = 0;
g_PlayerConfigsArray[4].contpad2 = 1;
g_PlayerConfigsArray[MAX_PLAYERS].contpad1 = 0;
g_PlayerConfigsArray[MAX_PLAYERS].contpad2 = 1;
}
for (i = 0; i != ARRAYCOUNT(g_Vars.playerstats); i++) {
@@ -1695,7 +1695,7 @@ Gfx *lvRender(Gfx *gdl)
artifactsTick();
#ifndef PLATFORM_N64
if (g_NetMode && i) {
if ((g_NetMode && i) || i > MAX_LOCAL_PLAYERS) {
gdl = savedgdl;
}
#endif
+4 -7
View File
@@ -71,7 +71,7 @@ u32 var8009dfc4;
struct briefing g_Briefing;
u32 var8009dfe4;
struct missionconfig g_MissionConfig;
struct menu g_Menus[MAX_PLAYERS];
struct menu g_Menus[MAX_LOCAL_PLAYERS];
struct menudata g_MenuData;
s32 g_MenuScissorX1;
s32 g_MenuScissorX2;
@@ -3437,7 +3437,7 @@ void menuClose(void)
void func0f0f8120(void)
{
#ifdef AVOID_UB
u32 mpindex = g_MpPlayerNum % MAX_PLAYERS;
u32 mpindex = g_MpPlayerNum % MAX_LOCAL_PLAYERS;
struct menudialog *prev = g_Menus[mpindex].curdialog;
s32 i;
#else
@@ -3452,9 +3452,6 @@ void func0f0f8120(void)
}
#ifdef AVOID_UB
mpindex = g_MpPlayerNum;
if (mpindex >= MAX_PLAYERS)
mpindex -= MAX_PLAYERS;
if (g_Menus[mpindex].curdialog == prev) {
while (g_Menus[mpindex].depth > 0) {
menuPopDialog();
@@ -5346,7 +5343,7 @@ Gfx *menuRender(Gfx *gdl)
} else {
s32 i;
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
g_MpPlayerNum = i;
gdl = menuRenderDialogs(gdl);
}
@@ -5392,7 +5389,7 @@ Gfx *menuRender(Gfx *gdl)
gdl = textRenderProjected(gdl, &x, &y, text, g_CharsHandelGothicSm, g_FontHandelGothicSm, colour, viGetWidth(), viGetHeight(), 0, 0);
} else
#endif
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
// Figure out what text will be displayed. The text calculated
// here is for measuring purposes only and isn't rendered.
// Amusingly, there's a %d placeholder in the text which isn't
+14 -10
View File
@@ -233,7 +233,7 @@ void menuTick(void)
g_Vars.mpsetupmenu = MPSETUPMENU_GENERAL;
}
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
g_Vars.waitingtojoin[i] = false;
if (g_MpSetup.chrslots & (1 << i)) {
@@ -302,7 +302,11 @@ void menuTick(void)
if (g_MenuData.root == MENUROOT_MPSETUP || g_MenuData.root == MENUROOT_4MBMAINMENU) {
if (g_MenuData.unk008 == -1) {
#if MAX_PLAYERS > 4
g_MpSetup.chrslots &= 0xff00;
#else
g_MpSetup.chrslots &= 0xfff0;
#endif
}
g_MpNumJoined = 0;
@@ -321,7 +325,7 @@ void menuTick(void)
challengePerformSanityChecks();
}
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
g_MpPlayerNum = i;
if (g_Menus[g_MpPlayerNum].curdialog) {
@@ -333,7 +337,7 @@ void menuTick(void)
}
}
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
g_MpPlayerNum = i;
if (g_Menus[g_MpPlayerNum].curdialog) {
@@ -357,7 +361,7 @@ void menuTick(void)
// Limit to 2 players? But in a roundabout kind of way
canjoin = true;
for (j = 0; j < MAX_PLAYERS; j++) {
for (j = 0; j < MAX_LOCAL_PLAYERS; j++) {
if (g_Vars.waitingtojoin[j]) {
canjoin = false;
}
@@ -550,9 +554,9 @@ void menuTick(void)
}
#ifdef PLATFORM_N64
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
#else
const s32 maxplayers = g_NetMode ? 1 : MAX_PLAYERS;
const s32 maxplayers = g_NetMode ? 1 : MAX_LOCAL_PLAYERS;
for (i = 0; i < maxplayers; i++) {
#endif
if (g_MpSetup.chrslots & (1 << i)) {
@@ -644,12 +648,12 @@ void menuTick(void)
} else if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) {
struct mpplayerconfig tmp;
tmp = g_PlayerConfigsArray[4];
g_PlayerConfigsArray[4] = g_PlayerConfigsArray[0];
tmp = g_PlayerConfigsArray[MAX_PLAYERS];
g_PlayerConfigsArray[MAX_PLAYERS] = g_PlayerConfigsArray[0];
g_PlayerConfigsArray[0] = tmp;
tmp = g_PlayerConfigsArray[5];
g_PlayerConfigsArray[5] = g_PlayerConfigsArray[1];
tmp = g_PlayerConfigsArray[MAX_PLAYERS + 1];
g_PlayerConfigsArray[MAX_PLAYERS + 1] = g_PlayerConfigsArray[1];
g_PlayerConfigsArray[1] = tmp;
}
+41 -33
View File
@@ -38,7 +38,7 @@ struct mpchrconfig *g_MpAllChrConfigPtrs[MAX_MPCHRS];
s32 g_MpNumChrs;
u32 var800ac534;
struct mpbotconfig g_BotConfigsArray[MAX_BOTS];
u8 g_MpSimulantDifficultiesPerNumPlayers[MAX_BOTS][MAX_PLAYERS];
u8 g_MpSimulantDifficultiesPerNumPlayers[MAX_BOTS][MAX_LOCAL_PLAYERS];
struct mpplayerconfig g_PlayerConfigsArray[MAX_MPPLAYERCONFIGS];
u8 g_AmBotCommands[9];
struct mpsetup g_MpSetup;
@@ -128,7 +128,7 @@ struct mpweapon g_MpWeapons[NUM_MPWEAPONS] = {
.crosshaircolour = 0x00ff0028, \
}
struct extplayerconfig g_PlayerExtCfg[MAX_PLAYERS] = {
struct extplayerconfig g_PlayerExtCfg[MAX_LOCAL_PLAYERS] = {
PLAYER_EXT_CFG_DEFAULT,
PLAYER_EXT_CFG_DEFAULT,
PLAYER_EXT_CFG_DEFAULT,
@@ -182,7 +182,7 @@ void mpStartMatch(void)
#ifndef PLATFORM_N64
if (g_NetMode == NETMODE_SERVER) {
g_MpSetup.chrslots &= ~0x000f;
g_MpSetup.chrslots &= 0xff00;
g_MpSetup.chrslots |= 1;
for (s32 i = 1; i < g_NetMaxClients; ++i) {
if (g_NetClients[i].state >= CLSTATE_LOBBY) {
@@ -428,7 +428,7 @@ void mpPlayerSetDefaults(s32 playernum, bool autonames)
g_PlayerConfigsArray[playernum].controlmode = CONTROLMODE_11;
#ifndef PLATFORM_N64
if (g_PlayerExtCfg[playernum % MAX_PLAYERS].extcontrols) {
if (g_PlayerExtCfg[playernum % MAX_LOCAL_PLAYERS].extcontrols) {
g_PlayerConfigsArray[playernum].controlmode = CONTROLMODE_PC;
}
#endif
@@ -496,9 +496,9 @@ void mpPlayerSetDefaults(s32 playernum, bool autonames)
g_PlayerConfigsArray[playernum].survivormedals = 0;
g_PlayerConfigsArray[playernum].title = MPPLAYERTITLE_BEGINNER;
if (playernum < MAX_PLAYERS) {
if (playernum < MAX_LOCAL_PLAYERS) {
for (i = 0; i < ARRAYCOUNT(g_MpChallenges); i++) {
for (j = 1; j <= MAX_PLAYERS; j++) {
for (j = 1; j <= MAX_LOCAL_PLAYERS; j++) {
challengeSetCompletedByPlayerWithNumPlayers(playernum, i, j, false);
}
}
@@ -2626,10 +2626,10 @@ void mpFindUnusedHeadAndBody(u8 *mpheadnum, u8 *mpbodynum)
s32 mpChooseRandomLockPlayer(void)
{
s32 start = random() % 4;
s32 start = random() % MAX_PLAYERS;
s32 i;
for (i = (start + 1) % 4;; i = (i + 1) % 4) {
for (i = (start + 1) % MAX_PLAYERS;; i = (i + 1) % MAX_PLAYERS) {
if ((g_MpSetup.chrslots & (1 << i)) || i == start) {
break;
}
@@ -3069,11 +3069,11 @@ void mpCreateBotFromProfile(s32 botnum, u8 profilenum)
g_BotConfigsArray[botnum].type = g_BotProfiles[profilenum].type;
g_BotConfigsArray[botnum].difficulty = g_BotProfiles[profilenum].difficulty;
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
g_MpSimulantDifficultiesPerNumPlayers[botnum][i] = g_BotConfigsArray[botnum].difficulty;
}
g_MpSetup.chrslots |= 1 << (botnum + 4);
g_MpSetup.chrslots |= 1 << (botnum + MAX_PLAYERS);
strcpy(g_BotConfigsArray[botnum].base.name, "Sim\n");
g_BotConfigsArray[botnum].base.team = team;
@@ -3102,7 +3102,7 @@ void mpSetBotDifficulty(s32 botnum, s32 difficulty)
g_BotConfigsArray[botnum].difficulty = difficulty;
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
g_MpSimulantDifficultiesPerNumPlayers[botnum][i] = g_BotConfigsArray[botnum].difficulty;
}
}
@@ -3116,7 +3116,7 @@ s32 mpGetSlotForNewBot(void)
{
s32 i = 0;
while (i < MAX_BOTS - 1 && g_MpSetup.chrslots & (1 << (i + 4))) {
while (i < MAX_BOTS - 1 && g_MpSetup.chrslots & (1 << (i + MAX_PLAYERS))) {
i++;
}
@@ -3125,7 +3125,7 @@ s32 mpGetSlotForNewBot(void)
void mpRemoveSimulant(s32 index)
{
g_MpSetup.chrslots &= ~(1 << (index + 4));
g_MpSetup.chrslots &= ~(1 << (index + MAX_PLAYERS));
g_BotConfigsArray[index].base.name[0] = '\0';
func0f1881d4(index);
mpGenerateBotNames();
@@ -3133,7 +3133,11 @@ void mpRemoveSimulant(s32 index)
bool mpHasSimulants(void)
{
#if MAX_PLAYERS > 4
if ((g_MpSetup.chrslots & 0xff00) != 0) {
#else
if ((g_MpSetup.chrslots & 0xfff0) != 0) {
#endif
return true;
}
@@ -3145,7 +3149,7 @@ bool mpHasUnusedBotSlots(void)
s32 numvacant = challengeIsFeatureUnlocked(MPFEATURE_8BOTS) ? MAX_BOTS : 4;
s32 i;
for (i = 4; i < MAX_MPCHRS; i++) {
for (i = MAX_PLAYERS; i < MAX_MPCHRS; i++) {
if (g_MpSetup.chrslots & (1 << i)) {
numvacant--;
}
@@ -3163,9 +3167,9 @@ bool mpIsSimSlotEnabled(s32 slot)
s32 numfree = MAX_BOTS;
s32 i;
if ((g_MpSetup.chrslots & (1 << (slot + 4))) == 0) {
if ((g_MpSetup.chrslots & (1 << (slot + MAX_PLAYERS))) == 0) {
for (i = 0; i < MAX_BOTS; i++) {
if (g_MpSetup.chrslots & (1 << (i + 4))) {
if (g_MpSetup.chrslots & (1 << (i + MAX_PLAYERS))) {
numfree--;
}
}
@@ -3217,9 +3221,9 @@ void mpGenerateBotNames(void)
}
// Count the number of bots using each profile (MeatSim, TurtleSim etc)
for (i = 4; i < MAX_MPCHRS; i++) {
for (i = MAX_PLAYERS; i < MAX_MPCHRS; i++) {
if (g_MpSetup.chrslots & (1 << i)) {
profilenum = mpFindBotProfile(g_BotConfigsArray[i - 4].type, g_BotConfigsArray[i - 4].difficulty);
profilenum = mpFindBotProfile(g_BotConfigsArray[i - MAX_PLAYERS].type, g_BotConfigsArray[i - MAX_PLAYERS].difficulty);
if (profilenum >= 0 && profilenum < ARRAYCOUNT(g_BotProfiles)) {
counts[profilenum]++;
@@ -3238,20 +3242,20 @@ void mpGenerateBotNames(void)
}
}
for (i = 4; i < MAX_MPCHRS; i++) {
for (i = MAX_PLAYERS; i < MAX_MPCHRS; i++) {
if (g_MpSetup.chrslots & (1 << i)) {
profilenum = mpFindBotProfile(g_BotConfigsArray[i - 4].type, g_BotConfigsArray[i - 4].difficulty);
profilenum = mpFindBotProfile(g_BotConfigsArray[i - MAX_PLAYERS].type, g_BotConfigsArray[i - MAX_PLAYERS].difficulty);
if (profilenum >= 0 && profilenum < ARRAYCOUNT(g_BotProfiles)) {
if (counts[profilenum] >= 0) {
// Multiple bots using this profile - append the number
counts[profilenum]++;
sprintf(name, "%s:%d\n", langGet(g_BotProfiles[profilenum].name), counts[profilenum]);
strcpy(g_BotConfigsArray[i - 4].base.name, name);
strcpy(g_BotConfigsArray[i - MAX_PLAYERS].base.name, name);
} else {
// One bots using this profile - just use the profile name
sprintf(name, "%s\n", langGet(g_BotProfiles[profilenum].name));
strcpy(g_BotConfigsArray[i - 4].base.name, name);
strcpy(g_BotConfigsArray[i - MAX_PLAYERS].base.name, name);
}
}
}
@@ -3422,13 +3426,13 @@ void mpplayerfileLoadWad(s32 playernum, struct savebuffer *buffer, s32 arg2)
#ifndef PLATFORM_N64
// override with PC controls if enabled in the config
if (g_PlayerExtCfg[playernum % MAX_PLAYERS].extcontrols) {
if (g_PlayerExtCfg[playernum % MAX_LOCAL_PLAYERS].extcontrols) {
g_PlayerConfigsArray[playernum].controlmode = CONTROLMODE_PC;
}
#endif
for (i = 0; i < ARRAYCOUNT(g_MpChallenges); i++) {
for (j = 1; j < MAX_PLAYERS + 1; j++) {
for (j = 1; j < MAX_LOCAL_PLAYERS + 1; j++) {
challengeSetCompletedByPlayerWithNumPlayers(playernum, i, j, savebufferReadBits(buffer, 1));
}
}
@@ -3568,7 +3572,7 @@ void mpplayerfileSaveWad(s32 playernum, struct savebuffer *buffer)
savebufferOr(buffer, g_PlayerConfigsArray[playernum].options, 12);
for (i = 0; i < ARRAYCOUNT(g_MpChallenges); i++) {
for (j = 1; j < MAX_PLAYERS + 1; j++) {
for (j = 1; j < MAX_LOCAL_PLAYERS + 1; j++) {
savebufferOr(buffer, challengeIsCompletedByPlayerWithNumPlayers(playernum, i, j), 1);
}
}
@@ -3757,7 +3761,7 @@ void mpApplyConfig(struct mpconfigfull *config)
for (i = 0; i < MAX_BOTS; i++) {
g_BotConfigsArray[i].type = config->config.simulants[i].type;
for (j = 0; j < MAX_PLAYERS; j++) {
for (j = 0; j < MAX_LOCAL_PLAYERS; j++) {
g_MpSimulantDifficultiesPerNumPlayers[i][j] = config->config.simulants[i].difficulties[j];
}
@@ -3814,11 +3818,15 @@ void mp0f18dec4(s32 slot)
mpApplyConfig(config);
#if VERSION >= VERSION_JPN_FINAL
#if MAX_PLAYERS > 4
g_MpSetup.chrslots &= 0xff;
#else
g_MpSetup.chrslots &= 0x0f;
#endif
for (i = 0; i < MAX_BOTS; i++) {
if (g_BotConfigsArray[i].difficulty != BOTDIFF_DISABLED) {
g_MpSetup.chrslots |= 1 << (i + 4);
g_MpSetup.chrslots |= 1 << (i + MAX_PLAYERS);
}
}
#endif
@@ -3846,12 +3854,12 @@ void mpsetupfileLoadWad(struct savebuffer *buffer)
g_BotConfigsArray[i].type = savebufferReadBits(buffer, 5);
g_BotConfigsArray[i].difficulty = savebufferReadBits(buffer, 3);
for (j = 0; j < MAX_PLAYERS; j++) {
for (j = 0; j < MAX_LOCAL_PLAYERS; j++) {
g_MpSimulantDifficultiesPerNumPlayers[i][j] = g_BotConfigsArray[i].difficulty;
}
if (g_BotConfigsArray[i].difficulty != BOTDIFF_DISABLED) {
g_MpSetup.chrslots |= 1 << (i + 4);
g_MpSetup.chrslots |= 1 << (i + MAX_PLAYERS);
}
g_BotConfigsArray[i].base.mpheadnum = savebufferReadBits(buffer, 7);
@@ -3871,7 +3879,7 @@ void mpsetupfileLoadWad(struct savebuffer *buffer)
g_MpSetup.scorelimit = savebufferReadBits(buffer, 7);
g_MpSetup.teamscorelimit = savebufferReadBits(buffer, 9);
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
g_PlayerConfigsArray[i].base.team = savebufferReadBits(buffer, 3);
}
@@ -3887,7 +3895,7 @@ void mpsetupfileSaveWad(struct savebuffer *buffer)
func0f0d55a4(buffer, g_MpSetup.name);
for (i = 0; i < MAX_BOTS; i++) {
if (g_MpSetup.chrslots & (1 << (i + 4))) {
if (g_MpSetup.chrslots & (1 << (i + MAX_PLAYERS))) {
numsims++;
}
}
@@ -3903,7 +3911,7 @@ void mpsetupfileSaveWad(struct savebuffer *buffer)
for (i = 0; i < MAX_BOTS; i++) {
savebufferOr(buffer, g_BotConfigsArray[i].type, 5);
if (g_MpSetup.chrslots & (1 << (i + 4))) {
if (g_MpSetup.chrslots & (1 << (i + MAX_PLAYERS))) {
savebufferOr(buffer, g_BotConfigsArray[i].difficulty, 3);
} else {
savebufferOr(buffer, BOTDIFF_DISABLED, 3);
@@ -3935,7 +3943,7 @@ void mpsetupfileSaveWad(struct savebuffer *buffer)
savebufferOr(buffer, g_MpSetup.scorelimit, 7);
savebufferOr(buffer, g_MpSetup.teamscorelimit, 9);
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
savebufferOr(buffer, g_PlayerConfigsArray[i].base.team, 3);
}
}
+9 -9
View File
@@ -2166,7 +2166,7 @@ MenuItemHandlerResult mpLoadPlayerMenuHandler(s32 operation, struct menuitem *it
file = &g_FileLists[0]->files[data->list.value];
available = true;
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
if (file->fileid == g_PlayerConfigsArray[i].fileguid.fileid
&& file->deviceserial == g_PlayerConfigsArray[i].fileguid.deviceserial) {
if ((g_MpSetup.chrslots & (1 << i)) == 0) {
@@ -2696,7 +2696,7 @@ MenuItemHandlerResult mpAddChangeSimulantMenuHandler(s32 operation, struct menui
if (botnum < 0) {
botnum = mpGetSlotForNewBot();
creating = 1;
} else if ((g_MpSetup.chrslots & (1 << (botnum + 4))) == 0) {
} else if ((g_MpSetup.chrslots & (1 << (botnum + MAX_PLAYERS))) == 0) {
creating = 1;
}
@@ -2936,7 +2936,7 @@ MenuItemHandlerResult menuhandlerMpSimulantSlot(s32 operation, struct menuitem *
case MENUOP_SET:
g_Menus[g_MpPlayerNum].mpsetup.slotindex = item->param;
if ((g_MpSetup.chrslots & (1 << (item->param + 4))) == 0) {
if ((g_MpSetup.chrslots & (1 << (item->param + MAX_PLAYERS))) == 0) {
menuPushDialog(&g_MpAddSimulantMenuDialog);
} else if (IS4MB()) {
menuPushDialog(&g_MpEditSimulant4MbMenuDialog);
@@ -2962,7 +2962,7 @@ char *mpMenuTextSimulantName(struct menuitem *item)
{
s32 index = item->param;
if (g_BotConfigsArray[index].base.name[0] == '\0' || (g_MpSetup.chrslots & 1 << (index + 4)) == 0) {
if (g_BotConfigsArray[index].base.name[0] == '\0' || (g_MpSetup.chrslots & 1 << (index + MAX_PLAYERS)) == 0) {
return "";
}
@@ -2974,7 +2974,7 @@ char *func0f17d3dc(struct menuitem *item)
s32 index = item->param;
if (g_BotConfigsArray[index].base.name[0] == '\0'
|| ((g_MpSetup.chrslots & 1 << (index + 4)) == 0)) {
|| ((g_MpSetup.chrslots & 1 << (index + MAX_PLAYERS)) == 0)) {
return "";
}
@@ -3362,7 +3362,7 @@ MenuItemHandlerResult menuhandlerMpHumansVsSimulants(s32 operation, struct menui
if (g_MpSetup.chrslots & (1 << i)) {
struct mpchrconfig *mpchr = MPCHR(i);
mpchr->team = i < 4 ? 0 : 1;
mpchr->team = i < MAX_PLAYERS ? 0 : 1;
}
}
@@ -3375,7 +3375,7 @@ MenuItemHandlerResult menuhandlerMpHumansVsSimulants(s32 operation, struct menui
MenuItemHandlerResult menuhandlerMpHumanSimulantPairs(s32 operation, struct menuitem *item, union handlerdata *data)
{
if (operation == MENUOP_SET) {
u8 team_ids[4] = {0, 1, 2, 3};
u8 team_ids[MAX_PLAYERS] = {0, 1, 2, 3, 4, 5, 6, 7};
s32 i;
s32 playerindex = 0;
s32 simindex = 0;
@@ -3384,7 +3384,7 @@ MenuItemHandlerResult menuhandlerMpHumanSimulantPairs(s32 operation, struct menu
if (g_MpSetup.chrslots & (1 << i)) {
struct mpchrconfig *mpchr = MPCHR(i);
if (i < 4) {
if (i < MAX_PLAYERS) {
mpchr->team = team_ids[playerindex++];
} else {
mpchr->team = team_ids[simindex++];
@@ -5153,7 +5153,7 @@ void mpCloseDialogsForNewSetup(void)
s32 k;
// Loop through each player
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
g_MpPlayerNum = i;
// If they have a menu open
+7 -7
View File
@@ -234,7 +234,7 @@ struct pak g_Paks[5]; // controller paks + EEPROM
u32 var800a317c;
#endif
OSPfs g_Pfses[MAX_PLAYERS];
OSPfs g_Pfses[MAX_LOCAL_PLAYERS];
u32 var800a3320;
u32 var800a3324;
u32 var800a3328;
@@ -4421,7 +4421,7 @@ void pak0f11c6d0(void)
{
s32 i;
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
switch (g_Paks[i].state) {
case PAKSTATE_PROBE:
case PAKSTATE_MEM_DISPATCH:
@@ -5437,14 +5437,14 @@ void pakDisableRumbleForAllPlayers(void)
s32 i;
#if VERSION >= VERSION_NTSC_1_0
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
if (g_Paks[i].type == PAKTYPE_RUMBLE) {
g_Paks[i].rumblestate = RUMBLESTATE_DISABLED_STOPPING;
joyStopRumble(i, true);
}
}
#else
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
pakDisableRumbleForPlayer(i);
}
#endif
@@ -5455,13 +5455,13 @@ void pakEnableRumbleForAllPlayers(void)
s32 i;
#if VERSION >= VERSION_NTSC_FINAL
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
if (g_Paks[i].type == PAKTYPE_RUMBLE && g_Paks[i].rumblestate == RUMBLESTATE_DISABLED_STOPPED) {
g_Paks[i].rumblestate = RUMBLESTATE_ENABLING;
}
}
#else
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
pakEnableRumbleForPlayer(i);
}
#endif
@@ -5984,7 +5984,7 @@ bool gbpakIsAnyPerfectDark(void)
{
s8 i;
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < MAX_LOCAL_PLAYERS; i++) {
if (gbpakIdentifyGame(i) == GBGAME_PD) {
return true;
}
+13
View File
@@ -5841,3 +5841,16 @@ void player0f0c3320(Mtxf *matrices, s32 count)
mtxF2L(&sp40, matrices + i);
}
}
#if MAX_PLAYERS > 4
s32 playerGetCount(void)
{
s32 count = 0;
for (s32 i = 0; i < MAX_PLAYERS; ++i) {
count += (g_Vars.players[i] != NULL);
}
return count;
}
#endif
+13 -1
View File
@@ -29,10 +29,16 @@ void playermgrInit(void)
void playermgrReset(void)
{
#if MAX_PLAYERS > 4
for (s32 i = 0; i < MAX_PLAYERS; ++i) {
g_Vars.players[i] = NULL;
}
#else
g_Vars.players[0] = NULL;
g_Vars.players[1] = NULL;
g_Vars.players[2] = NULL;
g_Vars.players[3] = NULL;
#endif
g_Vars.currentplayer = NULL;
g_Vars.currentplayerindex = 0;
@@ -51,10 +57,16 @@ void playermgrReset(void)
void playermgrAllocatePlayers(s32 count)
{
#if MAX_PLAYERS > 4
for (s32 i = 0; i < MAX_PLAYERS; ++i) {
g_Vars.players[i] = NULL;
}
#else
g_Vars.players[0] = NULL;
g_Vars.players[1] = NULL;
g_Vars.players[2] = NULL;
g_Vars.players[3] = NULL;
#endif
if (count > 0) {
s32 i;
@@ -600,7 +612,7 @@ void playermgrAllocatePlayer(s32 index)
g_Vars.players[index]->introanimnum = 0;
g_Vars.players[index]->lastsighton = 0;
for (i = 0; i < MAX_PLAYERS; i++) {
for (i = 0; i < ARRAYCOUNT(g_Vars.players[index]->targetset); i++) {
g_Vars.players[index]->targetset[i] = 0;
}
+10
View File
@@ -12,7 +12,17 @@ void roomsReset(void)
{
s32 i;
#if MAX_PLAYERS > 4
if (PLAYERCOUNT() > 4) {
g_RoomMtxNumSlots = 400;
} else if (PLAYERCOUNT() > 2) {
g_RoomMtxNumSlots = 200;
} else {
g_RoomMtxNumSlots = 120;
}
#else
g_RoomMtxNumSlots = PLAYERCOUNT() >= 2 ? 200 : 120;
#endif
g_RoomMtxAges = mempAlloc(ALIGN16(g_RoomMtxNumSlots), MEMPOOL_STAGE);
g_RoomMtxLinkedRooms = mempAlloc(ALIGN16(g_RoomMtxNumSlots * sizeof(*g_RoomMtxLinkedRooms)), MEMPOOL_STAGE);
+1 -1
View File
@@ -2073,7 +2073,7 @@ void setupCreateProps(s32 stagenum)
slotnum = (slotnum + 1) % maxsimulants;
}
if ((g_MpSetup.chrslots & (1 << (slotnum + 4)))
if ((g_MpSetup.chrslots & (1 << (slotnum + MAX_PLAYERS)))
&& mpIsSimSlotEnabled(slotnum)) {
botmgrAllocateBot(chrnum, slotnum);
chrnum++;
+4 -4
View File
@@ -175,9 +175,9 @@ extern u8 *g_BlurBuffer;
extern s32 var8009dfc0;
extern struct briefing g_Briefing;
extern struct missionconfig g_MissionConfig;
extern struct menu g_Menus[MAX_PLAYERS];
extern struct menu g_Menus[MAX_LOCAL_PLAYERS];
extern struct menudata g_MenuData;
extern struct activemenu g_AmMenus[MAX_PLAYERS];
extern struct activemenu g_AmMenus[MAX_LOCAL_PLAYERS];
extern s32 g_AmIndex;
extern u32 g_CheatsActiveBank0;
extern u32 g_CheatsActiveBank1;
@@ -196,7 +196,7 @@ extern struct covercandidate *g_CoverCandidates;
extern u16 g_NumSpecialCovers;
extern u16 *g_SpecialCoverNums;
extern struct pak g_Paks[5];
extern OSPfs g_Pfses[MAX_PLAYERS];
extern OSPfs g_Pfses[MAX_LOCAL_PLAYERS];
extern u32 g_SkyStageNum;
extern bool g_SkyLightningActive;
extern struct explosion *g_Explosions;
@@ -285,7 +285,7 @@ extern struct chrdata *g_MpAllChrPtrs[MAX_MPCHRS];
extern struct mpchrconfig *g_MpAllChrConfigPtrs[MAX_MPCHRS];
extern s32 g_MpNumChrs;
extern struct mpbotconfig g_BotConfigsArray[MAX_BOTS];
extern u8 g_MpSimulantDifficultiesPerNumPlayers[MAX_BOTS][MAX_PLAYERS];
extern u8 g_MpSimulantDifficultiesPerNumPlayers[MAX_BOTS][MAX_LOCAL_PLAYERS];
extern struct mpplayerconfig g_PlayerConfigsArray[MAX_MPPLAYERCONFIGS];
extern u8 g_AmBotCommands[9];
extern struct mpsetup g_MpSetup;
+5 -2
View File
@@ -23,7 +23,8 @@
#define MAX_MPCHRS (MAX_PLAYERS + MAX_BOTS)
#define MAX_MPPLAYERCONFIGS (MAX_PLAYERS + 2)
#define MAX_OBJECTIVES 10
#define MAX_PLAYERS 4
#define MAX_LOCAL_PLAYERS 4
#define MAX_PLAYERS 8
#define MAX_PROPSPERROOMCHUNK 7
#define MAX_ROOMPROPLISTCHUNKS 256
#define MAX_SQUADRONS 16
@@ -68,7 +69,9 @@
#define SECSTOTIME60(secs) (secs * 60)
#define PFS(device) (device == SAVEDEVICE_GAMEPAK ? NULL : &g_Pfses[device])
#if MAX_PLAYERS >= 4
#if MAX_PLAYERS > 4
#define PLAYERCOUNT() playerGetCount()
#elif MAX_PLAYERS == 4
#define PLAYERCOUNT() ((g_Vars.players[0] ? 1 : 0) + (g_Vars.players[1] ? 1 : 0) + (g_Vars.players[2] ? 1 : 0) + (g_Vars.players[3] ? 1 : 0))
#elif MAX_PLAYERS >= 3
#define PLAYERCOUNT() ((g_Vars.players[0] ? 1 : 0) + (g_Vars.players[1] ? 1 : 0) + (g_Vars.players[2] ? 1 : 0))
+4 -2
View File
@@ -304,7 +304,7 @@ extern struct menudialogdef g_MpConfirmChallenge4MbMenuDialog;
extern struct menudialogdef g_MainMenu4MbMenuDialog;
extern struct menudialogdef g_MpEditSimulant4MbMenuDialog;
extern struct menudialogdef g_AdvancedSetup4MbMenuDialog;
extern struct filelist *g_FileLists[MAX_PLAYERS];
extern struct filelist *g_FileLists[MAX_LOCAL_PLAYERS];
extern bool var80075bd0[];
extern struct headanim g_HeadAnims[2];
extern s32 var80075d60;
@@ -532,7 +532,7 @@ extern struct menudialogdef g_HangarListMenuDialog;
#ifndef PLATFORM_N64
extern struct extplayerconfig g_PlayerExtCfg[MAX_PLAYERS];
extern struct extplayerconfig g_PlayerExtCfg[MAX_LOCAL_PLAYERS];
extern struct weathercfg g_WeatherConfig[WEATHERCFG_MAX_STAGES];
extern const struct weathercfg g_DefaultWeatherConfig;
@@ -559,6 +559,8 @@ extern s32 g_NetMode;
#define TEX_FILTER_2D g_TexFilter2D
#define ADJUST_ZOOM_FOV(x) ((x) * PLAYER_EXTCFG().fovzoommult)
s32 playerGetCount(void);
#else // PLATFORM_N64
#define TEX_FILTER_2D G_TF_BILERP
+1
View File
@@ -106,5 +106,6 @@ void playerSetCamPropertiesWithRoom(struct coord *pos, struct coord *up, struct
void playerSetCamPropertiesWithoutRoom(struct coord *pos, struct coord *up, struct coord *look, s32 room);
void playerSetCamProperties(struct coord *pos, struct coord *up, struct coord *look, s32 room);
void playerClearMemCamRoom(void);
s32 playerGetCount(void);
#endif
+5 -5
View File
@@ -230,7 +230,7 @@ struct g_vars {
/*0x488*/ s32 totalkills;
/*0x48c*/ bool useperimshoot;
/*0x490*/ s32 mpsetupmenu;
/*0x494*/ s8 waitingtojoin[MAX_PLAYERS];
/*0x494*/ s8 waitingtojoin[MAX_LOCAL_PLAYERS];
/*0x498*/ s32 unk000498;
/*0x49c*/ bool usingadvsetup;
/*0x4a0*/ s32 unk0004a0;
@@ -251,7 +251,7 @@ struct g_vars {
/*0x4d6*/ s8 autocutfinished; // true if cutscene reached natural end
/*0x4d7*/ s8 autocutgroupskip; // true if pressed start during auto cutscene
/*0x4d8*/ s32 joydisableframestogo;
/*0x4dc*/ u8 playertojoymap[MAX_PLAYERS];
/*0x4dc*/ u8 playertojoymap[MAX_LOCAL_PLAYERS];
/*0x4e0*/ u8 fourmeg2player;
/*0x4e1*/ u8 remakewallhitvtx;
/*0x4e2*/ u8 cutsceneskip60ths;
@@ -4162,7 +4162,7 @@ struct challenge {
// Same structure as availability, however each byte determines how many
// players it was completed with. So completions[0] is for completions with
// a single player and completions[3] is for completions with 4 players.
/*0x05*/ u8 completions[MAX_PLAYERS];
/*0x05*/ u8 completions[MAX_LOCAL_PLAYERS];
// Array of features which will become unlocked once the challenge is
// available. The array is automatically populated at runtime based on what
@@ -4794,7 +4794,7 @@ struct menudata {
/*0x014*/ u8 bg;
/*0x015*/ u8 nextbg;
/*0x016*/ u8 screenshottimer;
/*0x017*/ u8 playerjoinalpha[MAX_PLAYERS];
/*0x017*/ u8 playerjoinalpha[MAX_LOCAL_PLAYERS];
/*0x01b*/ s8 bannernum;
/*0x01c*/ struct menumodel hudpiece;
/*0x5d4*/ u8 unk5d4;
@@ -5007,7 +5007,7 @@ struct mpconfigsim {
u8 mpheadnum;
u8 mpbodynum;
u8 team;
u8 difficulties[MAX_PLAYERS];
u8 difficulties[MAX_LOCAL_PLAYERS];
};
struct mpconfig {