`[22:03] TehRealSalt: Not organized code-wise, figured toaster would want to help with that since she's the Menu Queen and she probably has better ideas on how to do it`
The Menu Queen is in the house~ ✨
* Magical, single-page player select and general netgamey stuff, while still remaining both pretty and functional.
* Death to NOFOURPLAYER, now that the cat's out the bag.
* Clean up NONET, assuming people try to make DD builds on release.
* Minor tweaks across the board, mostly places where I wanted to pilfer minor code from and realised it wasn't done optimally originally.
This commit is contained in:
parent
35528276d2
commit
b34cbe4032
373
src/m_menu.c
373
src/m_menu.c
|
@ -247,7 +247,6 @@ static void M_ConfirmSpectateChange(INT32 choice);
|
|||
static void M_SetupChoosePlayer(INT32 choice);
|
||||
static void M_QuitSRB2(INT32 choice);
|
||||
menu_t SP_MainDef, MP_MainDef, OP_MainDef;
|
||||
menu_t MP_SetPlayersDef;
|
||||
menu_t MISC_ScrambleTeamDef, MISC_ChangeTeamDef, MISC_ChangeSpectateDef;
|
||||
|
||||
// Single Player
|
||||
|
@ -282,33 +281,27 @@ static void M_ChooseRoom(INT32 choice);
|
|||
#endif
|
||||
static void M_SetupMultiPlayer(INT32 choice);
|
||||
static void M_SetupMultiPlayer2(INT32 choice);
|
||||
#ifndef NOFOURPLAYER
|
||||
static void M_SetupMultiPlayer3(INT32 choice);
|
||||
static void M_SetupMultiPlayer4(INT32 choice);
|
||||
#endif
|
||||
static void M_SetupMultiHandler(INT32 choice);
|
||||
|
||||
// Options
|
||||
// Split into multiple parts due to size
|
||||
// Controls
|
||||
menu_t OP_ControlsDef, OP_AllControlsDef;
|
||||
menu_t OP_MouseOptionsDef, OP_Mouse2OptionsDef;
|
||||
menu_t OP_Joystick1Def, OP_Joystick2Def;
|
||||
#ifndef NOFOURPLAYER
|
||||
menu_t OP_Joystick3Def, OP_Joystick4Def;
|
||||
#endif
|
||||
menu_t OP_Joystick1Def, OP_Joystick2Def, OP_Joystick3Def, OP_Joystick4Def;
|
||||
static void M_VideoModeMenu(INT32 choice);
|
||||
static void M_Setup1PControlsMenu(INT32 choice);
|
||||
static void M_Setup2PControlsMenu(INT32 choice);
|
||||
#ifndef NOFOURPLAYER
|
||||
static void M_Setup3PControlsMenu(INT32 choice);
|
||||
static void M_Setup4PControlsMenu(INT32 choice);
|
||||
#endif
|
||||
|
||||
static void M_Setup1PJoystickMenu(INT32 choice);
|
||||
static void M_Setup2PJoystickMenu(INT32 choice);
|
||||
#ifndef NOFOURPLAYER
|
||||
static void M_Setup3PJoystickMenu(INT32 choice);
|
||||
static void M_Setup4PJoystickMenu(INT32 choice);
|
||||
#endif
|
||||
|
||||
static void M_AssignJoystick(INT32 choice);
|
||||
static void M_ChangeControl(INT32 choice);
|
||||
|
||||
|
@ -363,9 +356,9 @@ static void M_DrawMonitorToggles(void);
|
|||
static void M_OGL_DrawFogMenu(void);
|
||||
static void M_OGL_DrawColorMenu(void);
|
||||
#endif
|
||||
static void M_DrawMPMainMenu(void);
|
||||
#ifndef NONET
|
||||
static void M_DrawConnectMenu(void);
|
||||
static void M_DrawMPMainMenu(void);
|
||||
static void M_DrawRoomMenu(void);
|
||||
#endif
|
||||
static void M_DrawJoystick(void);
|
||||
|
@ -463,11 +456,9 @@ consvar_t cv_ghost_staff = {"ghost_staff", "Show", CV_SAVE, ghost2_cons_
|
|||
//Console variables used solely in the menu system.
|
||||
//todo: add a way to use non-console variables in the menu
|
||||
// or make these consvars legitimate like color or skin.
|
||||
#ifndef NOFOURPLAYER
|
||||
static void Splitplayers_OnChange(void);
|
||||
CV_PossibleValue_t splitplayers_cons_t[] = {{1, "One"}, {2, "Two"}, {3, "Three"}, {4, "Four"}, {0, NULL}};
|
||||
consvar_t cv_splitplayers = {"splitplayers", "One", CV_CALL, splitplayers_cons_t, Splitplayers_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
||||
#endif
|
||||
|
||||
static CV_PossibleValue_t dummymenuplayer_cons_t[] = {{0, "NOPE"}, {1, "P1"}, {2, "P2"}, {3, "P3"}, {4, "P4"}, {0, NULL}};
|
||||
static CV_PossibleValue_t dummyteam_cons_t[] = {{0, "Spectator"}, {1, "Red"}, {2, "Blue"}, {0, NULL}};
|
||||
|
@ -506,7 +497,7 @@ static menuitem_t MainMenu[] =
|
|||
{
|
||||
{IT_SUBMENU|IT_STRING, NULL, "Extras", &SR_UnlockChecklistDef, 76},
|
||||
{IT_CALL |IT_STRING, NULL, "1 Player", M_SinglePlayerMenu, 84},
|
||||
{IT_SUBMENU|IT_STRING, NULL, "Multiplayer", &MP_SetPlayersDef, 92},
|
||||
{IT_SUBMENU|IT_STRING, NULL, "Multiplayer", &MP_MainDef, 92},
|
||||
{IT_CALL |IT_STRING, NULL, "Options", M_Options, 100},
|
||||
{IT_CALL |IT_STRING, NULL, "Addons", M_Addons, 108},
|
||||
{IT_CALL |IT_STRING, NULL, "Quit Game", M_QuitSRB2, 116},
|
||||
|
@ -556,10 +547,8 @@ static menuitem_t MPauseMenu[] =
|
|||
{IT_CALL | IT_STRING, NULL, "Continue", M_SelectableClearMenus,40},
|
||||
{IT_CALL | IT_STRING, NULL, "P1 Setup...", M_SetupMultiPlayer, 48}, // splitscreen
|
||||
{IT_CALL | IT_STRING, NULL, "P2 Setup...", M_SetupMultiPlayer2, 56}, // splitscreen
|
||||
#ifndef NOFOURPLAYER
|
||||
{IT_CALL | IT_STRING, NULL, "P3 Setup...", M_SetupMultiPlayer3, 64}, // splitscreen
|
||||
{IT_CALL | IT_STRING, NULL, "P4 Setup...", M_SetupMultiPlayer4, 72}, // splitscreen
|
||||
#endif
|
||||
|
||||
{IT_STRING | IT_CALL, NULL, "Spectate", M_ConfirmSpectate, 48}, // alone
|
||||
{IT_STRING | IT_CALL, NULL, "Enter Game", M_ConfirmEnterGame, 48}, // alone
|
||||
|
@ -582,10 +571,9 @@ typedef enum
|
|||
mpause_continue,
|
||||
mpause_psetupsplit,
|
||||
mpause_psetupsplit2,
|
||||
#ifndef NOFOURPLAYER
|
||||
mpause_psetupsplit3,
|
||||
mpause_psetupsplit4,
|
||||
#endif
|
||||
|
||||
mpause_spectate,
|
||||
mpause_entergame,
|
||||
mpause_canceljoin,
|
||||
|
@ -959,48 +947,40 @@ menuitem_t PlayerMenu[32] =
|
|||
// -----------------------------------
|
||||
// Prefix: MP_
|
||||
|
||||
#ifndef NONET
|
||||
|
||||
// Set number of players first!
|
||||
static menuitem_t MP_SetPlayersMenu[] =
|
||||
{
|
||||
#ifndef NOFOURPLAYER
|
||||
{IT_STRING|IT_CVAR, NULL, "Number of players", &cv_splitplayers, 10},
|
||||
#endif
|
||||
|
||||
#ifdef NOFOURPLAYER
|
||||
{IT_STRING|IT_CALL, NULL, "P1 Setup...", M_SetupMultiPlayer, 90},
|
||||
{IT_STRING|IT_CALL, NULL, "P2 Setup... ", M_SetupMultiPlayer2, 100},
|
||||
#else
|
||||
{IT_STRING|IT_CALL, NULL, "P1 Setup...", M_SetupMultiPlayer, 80},
|
||||
{IT_STRING|IT_CALL, NULL, "P2 Setup... ", M_SetupMultiPlayer2, 90},
|
||||
{IT_GRAYEDOUT, NULL, "P3 Setup...", M_SetupMultiPlayer3, 100},
|
||||
{IT_GRAYEDOUT, NULL, "P4 Setup... ", M_SetupMultiPlayer4, 110},
|
||||
#endif
|
||||
{IT_SUBMENU|IT_STRING, NULL, "Next...", &MP_MainDef, 130},
|
||||
};
|
||||
|
||||
static menuitem_t MP_MainMenu[] =
|
||||
{
|
||||
{IT_HEADER, NULL, "Host a game", NULL, 0},
|
||||
{IT_STRING|IT_CALL, NULL, "Internet/LAN...", M_StartServerMenu, 10},
|
||||
{IT_STRING|IT_CALL, NULL, "Offline...", M_StartOfflineServerMenu, 18},
|
||||
{IT_HEADER, NULL, "Join a game", NULL, 32},
|
||||
{IT_STRING|IT_CALL, NULL, "Internet server browser...",M_ConnectMenu, 42},
|
||||
{IT_STRING|IT_KEYHANDLER, NULL, "Specify IPv4 address:", M_HandleConnectIP, 50},
|
||||
{IT_HEADER, NULL, "Players", NULL, 0},
|
||||
{IT_STRING|IT_CVAR, NULL, "Number of local players", &cv_splitplayers, 10},
|
||||
|
||||
{IT_STRING|IT_KEYHANDLER,NULL, "Player setup...", M_SetupMultiHandler,18},
|
||||
|
||||
{IT_HEADER, NULL, "Host a game", NULL, 100-24},
|
||||
#ifndef NONET
|
||||
{IT_STRING|IT_CALL, NULL, "Internet/LAN...", M_StartServerMenu, 110-24},
|
||||
#else
|
||||
{IT_GRAYEDOUT, NULL, "Internet/LAN...", NULL, 110-24},
|
||||
#endif
|
||||
{IT_STRING|IT_CALL, NULL, "Offline...", M_StartOfflineServerMenu, 118-24},
|
||||
|
||||
{IT_HEADER, NULL, "Join a game", NULL, 132-24},
|
||||
#ifndef NONET
|
||||
{IT_STRING|IT_CALL, NULL, "Internet server browser...",M_ConnectMenu, 142-24},
|
||||
{IT_STRING|IT_KEYHANDLER, NULL, "Specify IPv4 address:", M_HandleConnectIP, 150-24},
|
||||
#else
|
||||
{IT_GRAYEDOUT, NULL, "Internet server browser...",M_ConnectMenu, 142-24},
|
||||
{IT_GRAYEDOUT, NULL, "Specify IPv4 address:", M_HandleConnectIP, 150-24},
|
||||
#endif
|
||||
//{IT_HEADER, NULL, "Player setup", NULL, 80},
|
||||
//{IT_STRING|IT_CALL, NULL, "Name, character, color...", M_SetupMultiPlayer, 90},
|
||||
};
|
||||
|
||||
#endif
|
||||
#ifndef NONET
|
||||
|
||||
static menuitem_t MP_ServerMenu[] =
|
||||
{
|
||||
{IT_STRING|IT_CVAR, NULL, "Max. Player Count", &cv_maxplayers, 10},
|
||||
#ifndef NONET
|
||||
{IT_STRING|IT_CALL, NULL, "Room...", M_RoomMenu, 20},
|
||||
{IT_STRING|IT_CVAR|IT_CV_STRING, NULL, "Server Name", &cv_servername, 30},
|
||||
#endif
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Game Type", &cv_newgametype, 68},
|
||||
{IT_STRING|IT_CVAR, NULL, "Level", &cv_nextmap, 78},
|
||||
|
@ -1008,6 +988,8 @@ static menuitem_t MP_ServerMenu[] =
|
|||
{IT_WHITESTRING|IT_CALL, NULL, "Start", M_StartServer, 130},
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
// Separated offline and normal servers.
|
||||
static menuitem_t MP_OfflineServerMenu[] =
|
||||
{
|
||||
|
@ -1017,22 +999,6 @@ static menuitem_t MP_OfflineServerMenu[] =
|
|||
{IT_WHITESTRING|IT_CALL, NULL, "Start", M_StartServer, 130},
|
||||
};
|
||||
|
||||
#ifndef NOFOURPLAYER
|
||||
static void Splitplayers_OnChange(void)
|
||||
{
|
||||
UINT8 i = 1; // player 1 is the last unchanging setup
|
||||
|
||||
while (i < 4)
|
||||
{
|
||||
if (i < cv_splitplayers.value)
|
||||
MP_SetPlayersMenu[i+1].status = IT_STRING|IT_CALL;
|
||||
else
|
||||
MP_SetPlayersMenu[i+1].status = IT_GRAYEDOUT;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static menuitem_t MP_PlayerSetupMenu[] =
|
||||
{
|
||||
{IT_KEYHANDLER | IT_STRING, NULL, "Name", M_HandleSetupMultiPlayer, 0},
|
||||
|
@ -1121,14 +1087,10 @@ static menuitem_t OP_ControlsMenu[] =
|
|||
{IT_CALL | IT_STRING, NULL, "Player 1 Controls...", M_Setup1PControlsMenu, 10},
|
||||
{IT_CALL | IT_STRING, NULL, "Player 2 Controls...", M_Setup2PControlsMenu, 20},
|
||||
|
||||
#ifdef NOFOURPLAYER
|
||||
{IT_STRING | IT_CVAR, NULL, "Controls per key", &cv_controlperkey, 40},
|
||||
#else
|
||||
{IT_CALL | IT_STRING, NULL, "Player 3 Controls...", &M_Setup3PControlsMenu, 30},
|
||||
{IT_CALL | IT_STRING, NULL, "Player 4 Controls...", &M_Setup4PControlsMenu, 40},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Controls per key", &cv_controlperkey, 60},
|
||||
#endif
|
||||
};
|
||||
|
||||
static menuitem_t OP_AllControlsMenu[] =
|
||||
|
@ -1196,7 +1158,6 @@ static menuitem_t OP_Joystick2Menu[] =
|
|||
{IT_STRING | IT_CVAR, NULL, "Look Up/Down" , &cv_lookaxis2 , 90},
|
||||
};
|
||||
|
||||
#ifndef NOFOURPLAYER
|
||||
static menuitem_t OP_Joystick3Menu[] =
|
||||
{
|
||||
{IT_STRING | IT_CALL, NULL, "Select Gamepad..." , M_Setup3PJoystickMenu, 10},
|
||||
|
@ -1220,7 +1181,6 @@ static menuitem_t OP_Joystick4Menu[] =
|
|||
{IT_STRING | IT_CVAR, NULL, "Use Item" , &cv_fireaxis4 , 80},
|
||||
{IT_STRING | IT_CVAR, NULL, "Look Up/Down" , &cv_lookaxis4 , 90},
|
||||
};
|
||||
#endif
|
||||
|
||||
static menuitem_t OP_JoystickSetMenu[] =
|
||||
{
|
||||
|
@ -1871,17 +1831,16 @@ menu_t MP_MainDef =
|
|||
{
|
||||
"M_MULTI",
|
||||
sizeof (MP_MainMenu)/sizeof (menuitem_t),
|
||||
&MP_SetPlayersDef,
|
||||
&MainDef,
|
||||
MP_MainMenu,
|
||||
M_DrawMPMainMenu,
|
||||
42, 50,
|
||||
42, 30,
|
||||
0,
|
||||
M_CancelConnect
|
||||
};
|
||||
menu_t MP_ServerDef = MAPICONMENUSTYLE("M_MULTI", MP_ServerMenu, &MP_MainDef);
|
||||
#endif
|
||||
menu_t MP_OfflineServerDef = MAPICONMENUSTYLE("M_MULTI", MP_OfflineServerMenu, &MP_MainDef);
|
||||
menu_t MP_SetPlayersDef = MAPICONMENUSTYLE("M_MULTI", MP_SetPlayersMenu, &MainDef);
|
||||
#ifndef NONET
|
||||
menu_t MP_ConnectDef =
|
||||
{
|
||||
|
@ -1935,10 +1894,8 @@ menu_t OP_ControlsDef = DEFAULTMENUSTYLE("M_CONTRO", OP_ControlsMenu, &OP_MainDe
|
|||
menu_t OP_AllControlsDef = CONTROLMENUSTYLE(OP_AllControlsMenu, &OP_ControlsDef);
|
||||
menu_t OP_Joystick1Def = DEFAULTMENUSTYLE("M_CONTRO", OP_Joystick1Menu, &OP_AllControlsDef, 60, 30);
|
||||
menu_t OP_Joystick2Def = DEFAULTMENUSTYLE("M_CONTRO", OP_Joystick2Menu, &OP_AllControlsDef, 60, 30);
|
||||
#ifndef NOFOURPLAYER
|
||||
menu_t OP_Joystick3Def = DEFAULTMENUSTYLE("M_CONTRO", OP_Joystick3Menu, &OP_AllControlsDef, 60, 30);
|
||||
menu_t OP_Joystick4Def = DEFAULTMENUSTYLE("M_CONTRO", OP_Joystick4Menu, &OP_AllControlsDef, 60, 30);
|
||||
#endif
|
||||
menu_t OP_JoystickSetDef =
|
||||
{
|
||||
"M_CONTRO",
|
||||
|
@ -2943,10 +2900,8 @@ void M_StartControlPanel(void)
|
|||
MPauseMenu[mpause_scramble].status = IT_DISABLED;
|
||||
MPauseMenu[mpause_psetupsplit].status = IT_DISABLED;
|
||||
MPauseMenu[mpause_psetupsplit2].status = IT_DISABLED;
|
||||
#ifndef NOFOURPLAYER
|
||||
MPauseMenu[mpause_psetupsplit3].status = IT_DISABLED;
|
||||
MPauseMenu[mpause_psetupsplit4].status = IT_DISABLED;
|
||||
#endif
|
||||
MPauseMenu[mpause_spectate].status = IT_DISABLED;
|
||||
MPauseMenu[mpause_entergame].status = IT_DISABLED;
|
||||
MPauseMenu[mpause_canceljoin].status = IT_DISABLED;
|
||||
|
@ -2996,7 +2951,6 @@ void M_StartControlPanel(void)
|
|||
}
|
||||
}
|
||||
|
||||
#ifndef NOFOURPLAYER
|
||||
if (splitscreen > 1)
|
||||
{
|
||||
MPauseMenu[mpause_psetupsplit3].status = IT_STRING | IT_CALL;
|
||||
|
@ -3013,7 +2967,6 @@ void M_StartControlPanel(void)
|
|||
MPauseMenu[mpause_quit].alphaKey += 8;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -3138,9 +3091,7 @@ void M_Init(void)
|
|||
return;
|
||||
|
||||
// Menu hacks
|
||||
#ifndef NOFOURPLAYER
|
||||
CV_RegisterVar(&cv_splitplayers);
|
||||
#endif
|
||||
CV_RegisterVar(&cv_dummymenuplayer);
|
||||
CV_RegisterVar(&cv_dummyteam);
|
||||
CV_RegisterVar(&cv_dummyspectate);
|
||||
|
@ -6307,7 +6258,7 @@ static void M_DrawStatsMaps(int location)
|
|||
bottomarrow:
|
||||
if (dobottomarrow)
|
||||
V_DrawCharacter(10, y-8 + (skullAnimCounter/5),
|
||||
'\x1B' | highlightflags, false); // up arrow
|
||||
'\x1B' | highlightflags, false); // down arrow
|
||||
}
|
||||
|
||||
static void M_DrawLevelStats(void)
|
||||
|
@ -7435,12 +7386,7 @@ static INT32 M_FindFirstMap(INT32 gtype)
|
|||
|
||||
static void M_StartServer(INT32 choice)
|
||||
{
|
||||
UINT8 ssplayers =
|
||||
#ifdef NOFOURPLAYER
|
||||
1;
|
||||
#else
|
||||
cv_splitplayers.value-1;
|
||||
#endif
|
||||
UINT8 ssplayers = cv_splitplayers.value-1;
|
||||
|
||||
(void)choice;
|
||||
|
||||
|
@ -7617,8 +7563,7 @@ static void M_DrawLevelSelectOnly(boolean leftfade, boolean rightfade)
|
|||
|
||||
static void M_DrawServerMenu(void)
|
||||
{
|
||||
if (currentMenu != &MP_SetPlayersDef)
|
||||
M_DrawLevelSelectOnly(false, false);
|
||||
M_DrawLevelSelectOnly(false, false);
|
||||
M_DrawGenericMenu();
|
||||
|
||||
#ifndef NONET
|
||||
|
@ -7634,68 +7579,7 @@ static void M_DrawServerMenu(void)
|
|||
highlightflags, room_list[menuRoomIndex].name);
|
||||
#undef mp_server_room
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (currentMenu == &MP_SetPlayersDef)
|
||||
// character bar, ripped off the color bar :V
|
||||
{
|
||||
#define iconwidth 32
|
||||
#define spacingwidth 32
|
||||
#define incrwidth (iconwidth + spacingwidth)
|
||||
UINT8 i = 0, pskin, pcol;
|
||||
// player arrangement width, but there's also a chance i'm a furry, shhhhhh
|
||||
const INT32 paw = iconwidth +
|
||||
#ifndef NOFOURPLAYER
|
||||
3*
|
||||
#endif
|
||||
incrwidth;
|
||||
INT32 x = BASEVIDWIDTH/2 - paw/2, y = currentMenu->y + 27, trans = 0;
|
||||
patch_t *face;
|
||||
|
||||
while (++i <=
|
||||
#ifdef NOFOURPLAYER
|
||||
2
|
||||
#else
|
||||
4
|
||||
#endif
|
||||
)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
default:
|
||||
pskin = R_SkinAvailable(cv_skin.string);
|
||||
pcol = cv_playercolor.value;
|
||||
break;
|
||||
case 2:
|
||||
pskin = R_SkinAvailable(cv_skin2.string);
|
||||
pcol = cv_playercolor2.value;
|
||||
break;
|
||||
case 3:
|
||||
pskin = R_SkinAvailable(cv_skin3.string);
|
||||
pcol = cv_playercolor3.value;
|
||||
break;
|
||||
case 4:
|
||||
pskin = R_SkinAvailable(cv_skin4.string);
|
||||
pcol = cv_playercolor4.value;
|
||||
break;
|
||||
}
|
||||
|
||||
if (pskin >= MAXSKINS)
|
||||
pskin = 0;
|
||||
|
||||
#ifndef NOFOURPLAYER
|
||||
if (!trans && i > cv_splitplayers.value)
|
||||
trans = V_TRANSLUCENT;
|
||||
#endif
|
||||
|
||||
face = W_CachePatchName(skins[pskin].face, PU_CACHE);
|
||||
V_DrawFixedPatch(x<<FRACBITS, y<<FRACBITS, FRACUNIT, trans, face, R_GetTranslationColormap(pskin, pcol, 0));
|
||||
x += incrwidth;
|
||||
}
|
||||
#undef incrwidth
|
||||
#undef spacingwidth
|
||||
#undef iconwidth
|
||||
}
|
||||
}
|
||||
|
||||
static void M_MapChange(INT32 choice)
|
||||
|
@ -7735,6 +7619,8 @@ static void M_StartServerMenu(INT32 choice)
|
|||
// ==============
|
||||
|
||||
static char setupm_ip[16];
|
||||
#endif
|
||||
static UINT8 setupm_pselect = 1;
|
||||
|
||||
// Draw the funky Connect IP menu. Tails 11-19-2002
|
||||
// So much work for such a little thing!
|
||||
|
@ -7746,23 +7632,21 @@ static void M_DrawMPMainMenu(void)
|
|||
// use generic drawer for cursor, items and title
|
||||
M_DrawGenericMenu();
|
||||
|
||||
#if MAXPLAYERS == 16
|
||||
V_DrawRightAlignedString(BASEVIDWIDTH-x, y+MP_MainMenu[1].alphaKey,
|
||||
((itemOn == 1) ? highlightflags : 0), "(2-16 players)");
|
||||
#else
|
||||
#ifndef NONET
|
||||
#if MAXPLAYERS != 16
|
||||
Update the maxplayers label...
|
||||
#endif
|
||||
|
||||
V_DrawRightAlignedString(BASEVIDWIDTH-x, y+MP_MainMenu[2].alphaKey,
|
||||
((itemOn == 2) ? highlightflags : 0),
|
||||
#ifdef NOFOURPLAYER
|
||||
"(2 players)"
|
||||
#else
|
||||
"(2-4 players)"
|
||||
V_DrawRightAlignedString(BASEVIDWIDTH-x, y+MP_MainMenu[4].alphaKey,
|
||||
((itemOn == 4) ? highlightflags : 0), "(2-16 players)");
|
||||
#endif
|
||||
|
||||
V_DrawRightAlignedString(BASEVIDWIDTH-x, y+MP_MainMenu[5].alphaKey,
|
||||
((itemOn == 5) ? highlightflags : 0),
|
||||
"(2-4 players)"
|
||||
);
|
||||
|
||||
y += MP_MainMenu[5].alphaKey;
|
||||
#ifndef NONET
|
||||
y += MP_MainMenu[8].alphaKey;
|
||||
|
||||
V_DrawFill(x+5, y+4+5, /*16*8 + 6,*/ BASEVIDWIDTH - 2*(x+5), 8+6, 239);
|
||||
|
||||
|
@ -7770,11 +7654,152 @@ Update the maxplayers label...
|
|||
V_DrawString(x+8,y+12, V_MONOSPACE, setupm_ip);
|
||||
|
||||
// draw text cursor for name
|
||||
if (itemOn == 5
|
||||
if (itemOn == 8
|
||||
&& skullAnimCounter < 4) //blink cursor
|
||||
V_DrawCharacter(x+8+V_StringWidth(setupm_ip, V_MONOSPACE),y+12,'_',false);
|
||||
#endif
|
||||
|
||||
// character bar, ripped off the color bar :V
|
||||
{
|
||||
#define iconwidth 32
|
||||
#define spacingwidth 32
|
||||
#define incrwidth (iconwidth + spacingwidth)
|
||||
UINT8 i = 0, pskin, pcol;
|
||||
// player arrangement width, but there's also a chance i'm a furry, shhhhhh
|
||||
const INT32 paw = iconwidth + 3*incrwidth;
|
||||
INT32 trans = 0;
|
||||
patch_t *face;
|
||||
UINT8 *colmap;
|
||||
x = BASEVIDWIDTH/2 - paw/2;
|
||||
y = currentMenu->y + 32;
|
||||
|
||||
while (++i <= 4)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
default:
|
||||
pskin = R_SkinAvailable(cv_skin.string);
|
||||
pcol = cv_playercolor.value;
|
||||
break;
|
||||
case 2:
|
||||
pskin = R_SkinAvailable(cv_skin2.string);
|
||||
pcol = cv_playercolor2.value;
|
||||
break;
|
||||
case 3:
|
||||
pskin = R_SkinAvailable(cv_skin3.string);
|
||||
pcol = cv_playercolor3.value;
|
||||
break;
|
||||
case 4:
|
||||
pskin = R_SkinAvailable(cv_skin4.string);
|
||||
pcol = cv_playercolor4.value;
|
||||
break;
|
||||
}
|
||||
|
||||
if (pskin >= MAXSKINS)
|
||||
pskin = 0;
|
||||
|
||||
if (!trans && i > cv_splitplayers.value)
|
||||
trans = V_TRANSLUCENT;
|
||||
|
||||
colmap = R_GetTranslationColormap(pskin, pcol, 0);
|
||||
|
||||
face = W_CachePatchName(skins[pskin].face, PU_CACHE);
|
||||
V_DrawFixedPatch(x<<FRACBITS, y<<FRACBITS, FRACUNIT, trans, face, colmap);
|
||||
|
||||
if (itemOn == 2 && i == setupm_pselect)
|
||||
{
|
||||
/*V_DrawCharacter(x + 12, y-4 + (skullAnimCounter/5),
|
||||
'\x1B' | highlightflags, false); // down arrow*/
|
||||
face = W_CachePatchName("K_CHRCUR", PU_CACHE);
|
||||
V_DrawFixedPatch((x-2)<<FRACBITS, (y-2)<<FRACBITS, FRACUNIT, 0, face, colmap);
|
||||
}
|
||||
|
||||
x += incrwidth;
|
||||
}
|
||||
#undef incrwidth
|
||||
#undef spacingwidth
|
||||
#undef iconwidth
|
||||
}
|
||||
}
|
||||
|
||||
static void Splitplayers_OnChange(void)
|
||||
{
|
||||
if (cv_splitplayers.value < setupm_pselect)
|
||||
setupm_pselect = 1;
|
||||
}
|
||||
|
||||
static void M_SetupMultiHandler(INT32 choice)
|
||||
{
|
||||
boolean exitmenu = false; // exit to previous menu and send name change
|
||||
|
||||
switch (choice)
|
||||
{
|
||||
case KEY_LEFTARROW:
|
||||
if (cv_splitplayers.value > 1)
|
||||
{
|
||||
if (--setupm_pselect < 1)
|
||||
setupm_pselect = cv_splitplayers.value;
|
||||
S_StartSound(NULL,sfx_menu1); // Tails
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY_RIGHTARROW:
|
||||
if (cv_splitplayers.value > 1)
|
||||
{
|
||||
if (++setupm_pselect > cv_splitplayers.value)
|
||||
setupm_pselect = 1;
|
||||
S_StartSound(NULL,sfx_menu1); // Tails
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY_DOWNARROW:
|
||||
M_NextOpt();
|
||||
S_StartSound(NULL,sfx_menu1); // Tails
|
||||
break;
|
||||
|
||||
case KEY_UPARROW:
|
||||
M_PrevOpt();
|
||||
S_StartSound(NULL,sfx_menu1); // Tails
|
||||
break;
|
||||
|
||||
case KEY_ENTER:
|
||||
{
|
||||
S_StartSound(NULL,sfx_menu1); // Tails
|
||||
currentMenu->lastOn = itemOn;
|
||||
switch (setupm_pselect)
|
||||
{
|
||||
case 2:
|
||||
M_SetupMultiPlayer2(0);
|
||||
return;
|
||||
case 3:
|
||||
M_SetupMultiPlayer3(0);
|
||||
return;
|
||||
case 4:
|
||||
M_SetupMultiPlayer4(0);
|
||||
return;
|
||||
default:
|
||||
M_SetupMultiPlayer(0);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case KEY_ESCAPE:
|
||||
exitmenu = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (exitmenu)
|
||||
{
|
||||
if (currentMenu->prevMenu)
|
||||
M_SetupNextMenu (currentMenu->prevMenu);
|
||||
else
|
||||
M_ClearMenus(true);
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef NONET
|
||||
|
||||
// Tails 11-19-2002
|
||||
static void M_ConnectIP(INT32 choice)
|
||||
{
|
||||
|
@ -8026,6 +8051,7 @@ static void M_DrawSetupMultiPlayerMenu(void)
|
|||
INT32 offx = 8, offy = 8;
|
||||
patch_t *cursor = W_CachePatchName("K_CHRCUR", PU_CACHE);
|
||||
patch_t *face;
|
||||
UINT8 *colmap;
|
||||
|
||||
if (col < 0)
|
||||
col += numskins;
|
||||
|
@ -8044,9 +8070,10 @@ static void M_DrawSetupMultiPlayerMenu(void)
|
|||
offy = 8;
|
||||
}
|
||||
face = W_CachePatchName(skins[col].face, PU_CACHE);
|
||||
V_DrawFixedPatch((x+offx)<<FRACBITS, (my+28+offy)<<FRACBITS, scale, 0, face, R_GetTranslationColormap(col, setupm_fakecolor, 0));
|
||||
colmap = R_GetTranslationColormap(col, setupm_fakecolor, 0);
|
||||
V_DrawFixedPatch((x+offx)<<FRACBITS, (my+28+offy)<<FRACBITS, scale, 0, face, colmap);
|
||||
if (scale == FRACUNIT) // bit of a hack
|
||||
V_DrawFixedPatch((x-2+offx)<<FRACBITS, (my+26+offy)<<FRACBITS, scale, 0, cursor, R_GetTranslationColormap(col, setupm_fakecolor, 0));
|
||||
V_DrawFixedPatch((x-2+offx)<<FRACBITS, (my+26+offy)<<FRACBITS, scale, 0, cursor, colmap);
|
||||
if (++col >= numskins)
|
||||
col -= numskins;
|
||||
x += FixedMul(iconwidth<<FRACBITS, 3*scale/2)/FRACUNIT;
|
||||
|
@ -8278,7 +8305,6 @@ static void M_SetupMultiPlayer2(INT32 choice)
|
|||
M_SetupNextMenu(&MP_PlayerSetupDef);
|
||||
}
|
||||
|
||||
#ifndef NOFOURPLAYER
|
||||
// start the multiplayer setup menu, for third player (splitscreen mode)
|
||||
static void M_SetupMultiPlayer3(INT32 choice)
|
||||
{
|
||||
|
@ -8340,7 +8366,6 @@ static void M_SetupMultiPlayer4(INT32 choice)
|
|||
MP_PlayerSetupDef.prevMenu = currentMenu;
|
||||
M_SetupNextMenu(&MP_PlayerSetupDef);
|
||||
}
|
||||
#endif
|
||||
|
||||
static boolean M_QuitMultiPlayerMenu(void)
|
||||
{
|
||||
|
@ -8475,7 +8500,6 @@ static void M_Setup2PJoystickMenu(INT32 choice)
|
|||
M_SetupJoystickMenu(choice);
|
||||
}
|
||||
|
||||
#ifndef NOFOURPLAYER
|
||||
static void M_Setup3PJoystickMenu(INT32 choice)
|
||||
{
|
||||
setupcontrols_thirdplayer = true;
|
||||
|
@ -8491,7 +8515,6 @@ static void M_Setup4PJoystickMenu(INT32 choice)
|
|||
OP_JoystickSetDef.prevMenu = &OP_Joystick4Def;
|
||||
M_SetupJoystickMenu(choice);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void M_AssignJoystick(INT32 choice)
|
||||
{
|
||||
|
@ -8574,7 +8597,6 @@ static void M_Setup2PControlsMenu(INT32 choice)
|
|||
M_SetupNextMenu(&OP_AllControlsDef);
|
||||
}
|
||||
|
||||
#ifndef NOFOURPLAYER
|
||||
static void M_Setup3PControlsMenu(INT32 choice)
|
||||
{
|
||||
(void)choice;
|
||||
|
@ -8640,7 +8662,6 @@ static void M_Setup4PControlsMenu(INT32 choice)
|
|||
|
||||
M_SetupNextMenu(&OP_AllControlsDef);
|
||||
}
|
||||
#endif
|
||||
|
||||
#define controlheight 18
|
||||
|
||||
|
@ -8705,9 +8726,11 @@ static void M_DrawControl(void)
|
|||
"\x86""Press ""\x82""ENTER""\x86"" to change, ""\x82""BACKSPACE""\x86"" to clear"))));
|
||||
|
||||
if (i)
|
||||
V_DrawString(currentMenu->x - 16, y-(skullAnimCounter/5), highlightflags, "\x1A"); // up arrow
|
||||
V_DrawCharacter(currentMenu->x - 16, y-(skullAnimCounter/5),
|
||||
'\x1A' | highlightflags, false); // up arrow
|
||||
if (max != currentMenu->numitems)
|
||||
V_DrawString(currentMenu->x - 16, y+(SMALLLINEHEIGHT*(controlheight-1))+(skullAnimCounter/5), highlightflags, "\x1B"); // down arrow
|
||||
V_DrawCharacter(currentMenu->x - 16, y+(SMALLLINEHEIGHT*(controlheight-1))+(skullAnimCounter/5) + (skullAnimCounter/5),
|
||||
'\x1B' | highlightflags, false); // down arrow
|
||||
|
||||
for (; i < max; i++)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue