mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-06-19 23:23:00 -04:00
358 lines
15 KiB
C
358 lines
15 KiB
C
#include <ultra64.h>
|
|
#include "constants.h"
|
|
#include "game/menu.h"
|
|
#include "game/filemgr.h"
|
|
#include "game/fmb.h"
|
|
#include "game/mainmenu.h"
|
|
#include "game/challenge.h"
|
|
#include "game/mplayer/mplayer.h"
|
|
#include "game/mplayer/scenarios.h"
|
|
#include "game/mplayer/setup.h"
|
|
#include "bss.h"
|
|
#include "data.h"
|
|
#include "types.h"
|
|
|
|
s32 fmbHandleDropOut(s32 operation, struct menuitem *item, union handlerdata *data)
|
|
{
|
|
if (operation == MENUOP_SET) {
|
|
menuPopDialog();
|
|
menuPopDialog();
|
|
|
|
if (mpGetNumChrs() == 1) {
|
|
func0f0f820c(&g_MainMenu4MbMenuDialog, MENUROOT_4MBMAINMENU);
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
s32 fmdHandleAbortGame(s32 operation, struct menuitem *item, union handlerdata *data)
|
|
{
|
|
if (operation == MENUOP_SET) {
|
|
if (g_Vars.stagenum == STAGE_4MBMENU) {
|
|
func0f0f820c(&g_MainMenu4MbMenuDialog, MENUROOT_4MBMAINMENU);
|
|
} else {
|
|
func0f0f820c(&g_SoloMissionPauseMenuDialog, MENUROOT_MAINMENU);
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
s32 fmbHandleAdvancedSetup(s32 operation, struct menuitem *item, union handlerdata *data)
|
|
{
|
|
if (operation == MENUOP_SET) {
|
|
func0f0f820c(&g_AdvancedSetup4MbMenuDialog, MENUROOT_4MBMAINMENU);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
s32 fmbHandleAcceptChallenge(s32 operation, struct menuitem *item, union handlerdata *data)
|
|
{
|
|
if (operation == MENUOP_SET) {
|
|
challengeSetCurrentBySlot(g_Menus[g_MpPlayerNum].main4mb.slotindex);
|
|
func0f0f820c(&g_MpQuickGo4MbMenuDialog, MENUROOT_4MBMAINMENU);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void fmbReset(void)
|
|
{
|
|
s32 i;
|
|
u32 prevplayernum = g_MpPlayerNum;
|
|
g_MpPlayerNum = 0;
|
|
|
|
if (g_FileState != FILESTATE_UNSELECTED) {
|
|
if (var80087260 == 0) {
|
|
g_Vars.mpsetupmenu = MPSETUPMENU_GENERAL;
|
|
menuPushRootDialog(&g_MainMenu4MbMenuDialog, MENUROOT_4MBMAINMENU);
|
|
}
|
|
} else {
|
|
g_FileState = FILESTATE_SELECTED;
|
|
|
|
for (i = 0; i != 6; i++) {
|
|
mpPlayerSetDefaults(i, true);
|
|
}
|
|
|
|
g_Vars.bondplayernum = 0;
|
|
g_Vars.coopplayernum = -1;
|
|
g_Vars.antiplayernum = -1;
|
|
|
|
challengeDetermineUnlockedFeatures();
|
|
|
|
menuPushRootDialog(&g_FilemgrFileSelect4MbMenuDialog, MENUROOT_4MBFILEMGR);
|
|
|
|
#if PAL
|
|
if (g_Vars.language >= 6) {
|
|
menuPushDialog(&g_ChooseLanguageMenuDialog);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
g_MpPlayerNum = prevplayernum;
|
|
}
|
|
|
|
s32 fmbHandleMainMenu(s32 operation, struct menudialogdef *dialogdef, union handlerdata *data)
|
|
{
|
|
if (operation == MENUOP_OPEN) {
|
|
g_Vars.waitingtojoin[0] = false;
|
|
g_Vars.waitingtojoin[1] = false;
|
|
g_Vars.waitingtojoin[2] = false;
|
|
g_Vars.waitingtojoin[3] = false;
|
|
}
|
|
|
|
if (g_Menus[g_MpPlayerNum].curdialog
|
|
&& g_Menus[g_MpPlayerNum].curdialog->definition == &g_MainMenu4MbMenuDialog
|
|
&& operation == MENUOP_TICK) {
|
|
g_Vars.mpsetupmenu = MPSETUPMENU_GENERAL;
|
|
g_Vars.mpquickteam = MPQUICKTEAM_NONE;
|
|
g_Vars.usingadvsetup = false;
|
|
challengeUnsetCurrent();
|
|
challengeRemovePlayerLock();
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
struct menuitem g_GameFiles4MbMenuItems[] = {
|
|
{ MENUITEMTYPE_LABEL, 0, 0x00004010, L_OPTIONS_100, 0x00000000, NULL }, // "Copy:"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000000, L_OPTIONS_103, 0x00000000, filemgrOpenCopyFileMenuHandler }, // "Single Player Agent File"
|
|
{ MENUITEMTYPE_SELECTABLE, 1, 0x00000000, L_OPTIONS_104, 0x00000000, filemgrOpenCopyFileMenuHandler }, // "Combat Simulator Settings File"
|
|
{ MENUITEMTYPE_SELECTABLE, 2, 0x00000000, L_OPTIONS_105, 0x00000000, filemgrOpenCopyFileMenuHandler }, // "Combat Simulator Player File"
|
|
{ MENUITEMTYPE_SEPARATOR, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
{ MENUITEMTYPE_LABEL, 0, 0x00004010, L_OPTIONS_101, 0x00000000, NULL }, // "Delete:"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000000, L_OPTIONS_103, 0x00000000, filemgrOpenDeleteFileMenuHandler }, // "Single Player Agent File"
|
|
{ MENUITEMTYPE_SELECTABLE, 1, 0x00000000, L_OPTIONS_104, 0x00000000, filemgrOpenDeleteFileMenuHandler }, // "Combat Simulator Settings File"
|
|
{ MENUITEMTYPE_SELECTABLE, 2, 0x00000000, L_OPTIONS_105, 0x00000000, filemgrOpenDeleteFileMenuHandler }, // "Combat Simulator Player File"
|
|
{ MENUITEMTYPE_SEPARATOR, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_OPTIONS_102, 0x00000000, (void *)&g_PakChoosePakMenuDialog }, // "Delete Game Notes..."
|
|
{ MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
};
|
|
|
|
struct menudialogdef g_GameFiles4MbMenuDialog = {
|
|
MENUDIALOGTYPE_DEFAULT,
|
|
L_OPTIONS_099, // "Game Files"
|
|
g_GameFiles4MbMenuItems,
|
|
NULL,
|
|
MENUDIALOGFLAG_IGNOREBACK,
|
|
NULL,
|
|
};
|
|
|
|
struct menuitem g_FilemgrFileSelect4MbMenuItems[] = {
|
|
{ MENUITEMTYPE_LABEL, 0, 0x00004010, L_OPTIONS_096, 0x00000000, NULL }, // "Choose Your Reality"
|
|
{ MENUITEMTYPE_LIST, 0, 0x00200000, 0x000000f5, 0x00000000, filemgrChooseAgentListMenuHandler },
|
|
{ MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
};
|
|
|
|
struct menudialogdef g_FilemgrFileSelect4MbMenuDialog = {
|
|
MENUDIALOGTYPE_DEFAULT,
|
|
L_OPTIONS_095, // "Perfect Dark"
|
|
g_FilemgrFileSelect4MbMenuItems,
|
|
filemgrMainMenuDialog,
|
|
MENUDIALOGFLAG_IGNOREBACK,
|
|
&g_GameFiles4MbMenuDialog,
|
|
};
|
|
|
|
struct menuitem g_AudioVideo4MbMenuItems[] = {
|
|
#if VERSION >= VERSION_NTSC_1_0
|
|
{ MENUITEMTYPE_SLIDER, 0, 0x00002800, L_OPTIONS_308, L_MPMENU_000, menuhandlerSfxVolume }, // "Sound"
|
|
{ MENUITEMTYPE_SLIDER, 0, 0x00002800, L_OPTIONS_309, L_MPMENU_000, menuhandlerMusicVolume }, // "Music"
|
|
#else
|
|
{ MENUITEMTYPE_SLIDER, 0, 0x00002800, L_OPTIONS_308, 0x7fff, menuhandlerSfxVolume }, // "Sound"
|
|
{ MENUITEMTYPE_SLIDER, 0, 0x00002800, L_OPTIONS_309, 0x7fff, menuhandlerMusicVolume }, // "Music"
|
|
#endif
|
|
{ MENUITEMTYPE_DROPDOWN, 0, 0x00000000, L_OPTIONS_310, 0x00000000, menuhandlerSoundMode }, // "Sound Mode"
|
|
{ MENUITEMTYPE_SEPARATOR, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
{ MENUITEMTYPE_DROPDOWN, 0, 0x00000000, L_OPTIONS_311, 0x00000000, menuhandlerScreenRatio }, // "Ratio"
|
|
#if PAL
|
|
{ MENUITEMTYPE_DROPDOWN, 0, 0x00000000, L_MPWEAPONS_269, 0x00000000, menuhandlerLanguage }, // "Language"
|
|
#endif
|
|
{ MENUITEMTYPE_SEPARATOR, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000008, L_OPTIONS_312, 0x00000000, NULL }, // "Back"
|
|
{ MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
};
|
|
|
|
struct menudialogdef g_AudioVideo4MbMenuDialog = {
|
|
MENUDIALOGTYPE_DEFAULT,
|
|
L_OPTIONS_307, // "Audio/Visual"
|
|
g_AudioVideo4MbMenuItems,
|
|
menudialog0010559c,
|
|
0,
|
|
NULL,
|
|
};
|
|
|
|
struct menuitem g_MpPlayerSetup4MbMenuItems[] = {
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MPMENU_030, (u32)&mpGetCurrentPlayerName, (void *)&g_MpPlayerNameMenuDialog }, // "Name"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MPMENU_033, 0x00000000, (void *)&g_MpControlMenuDialog }, // "Control"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MPMENU_034, 0x00000000, (void *)&g_MpPlayerOptionsMenuDialog }, // "Player Options"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MPMENU_035, 0x00000000, (void *)&g_MpPlayerStatsMenuDialog }, // "Statistics"
|
|
{ MENUITEMTYPE_SEPARATOR, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MPMENU_029, 0x00000000, (void *)&g_MpLoadPlayerMenuDialog }, // "Load Player"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000000, (u32)&mpMenuTextSavePlayerOrCopy, 0x00000000, menuhandlerMpSavePlayer },
|
|
{ MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
};
|
|
|
|
struct menudialogdef g_MpPlayerSetup4MbMenuDialog = {
|
|
MENUDIALOGTYPE_DEFAULT,
|
|
L_MPMENU_028, // "Player Setup"
|
|
g_MpPlayerSetup4MbMenuItems,
|
|
NULL,
|
|
MENUDIALOGFLAG_DROPOUTONCLOSE,
|
|
&g_MpChallengeListOrDetailsMenuDialog,
|
|
};
|
|
|
|
struct menudialogdef g_MpDropOut4MbMenuDialog;
|
|
|
|
struct menuitem g_MpQuickGo4MbMenuItems[] = {
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MISC_456, 0x00000000, (void *)&g_MpReadyMenuDialog }, // "Start Game"
|
|
#if VERSION >= VERSION_NTSC_1_0
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MPMENU_029, 0x00000000, (void *)&g_MpLoadPlayerMenuDialog }, // "Load Player"
|
|
#endif
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MISC_458, 0x00000000, (void *)&g_MpPlayerSetup4MbMenuDialog }, // "Player Settings"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MISC_457, 0x00000000, (void *)&g_MpDropOut4MbMenuDialog }, // "Drop Out"
|
|
{ MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
};
|
|
|
|
struct menudialogdef g_MpQuickGo4MbMenuDialog = {
|
|
MENUDIALOGTYPE_DEFAULT,
|
|
L_MISC_460, // "Quick Go"
|
|
g_MpQuickGo4MbMenuItems,
|
|
menudialogMpQuickGo,
|
|
0,
|
|
NULL,
|
|
};
|
|
|
|
struct menuitem g_MpConfirmChallenge4MbMenuItems[] = {
|
|
#if VERSION == VERSION_PAL_FINAL
|
|
{ MENUITEMTYPE_SCROLLABLE, DESCRIPTION_MPCONFIG, 0x00000000, 0x0000007c, 65, NULL },
|
|
#else
|
|
{ MENUITEMTYPE_SCROLLABLE, DESCRIPTION_MPCONFIG, 0x00000000, 0x0000007c, 55, NULL },
|
|
#endif
|
|
{ MENUITEMTYPE_SEPARATOR, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000000, L_MPMENU_057, 0x00000000, fmbHandleAcceptChallenge }, // "Accept"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000008, L_MPMENU_058, 0x00000000, NULL }, // "Cancel"
|
|
{ MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
};
|
|
|
|
struct menudialogdef g_MpConfirmChallenge4MbMenuDialog = {
|
|
MENUDIALOGTYPE_DEFAULT,
|
|
(u32)&func0f17e318,
|
|
g_MpConfirmChallenge4MbMenuItems,
|
|
menudialog0017e3fc,
|
|
0,
|
|
NULL,
|
|
};
|
|
|
|
struct menuitem g_MpChallenges4MbMenuItems[] = {
|
|
{ MENUITEMTYPE_LIST, 1, 0x00200000, 0x00000078, 0x0000004d, mpChallengesListMenuHandler },
|
|
{ MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
};
|
|
|
|
struct menudialogdef g_MpChallenges4MbMenuDialog = {
|
|
MENUDIALOGTYPE_DEFAULT,
|
|
L_MPMENU_050, // "Combat Challenges"
|
|
g_MpChallenges4MbMenuItems,
|
|
mpCombatChallengesMenuDialog,
|
|
0,
|
|
NULL,
|
|
};
|
|
|
|
struct menuitem g_MainMenu4MbMenuItems[] = {
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00400004, L_MISC_441, 0x00000000, (void *)&g_MpChallenges4MbMenuDialog }, // "Challenges"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00400004, L_MISC_442, 0x00000001, (void *)&g_MpLoadPresetMenuDialog }, // "Load/Preset Games"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00400004, L_MISC_443, 0x00000002, (void *)&g_MpQuickTeamMenuDialog }, // "Quick Start"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00400000, L_MISC_444, 0x00000003, fmbHandleAdvancedSetup }, // "Advanced Setup"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00400004, L_OPTIONS_305, 0x00000000, (void *)&g_AudioVideo4MbMenuDialog }, // "Audio/Video"
|
|
{ MENUITEMTYPE_SEPARATOR, 0, 0x00000000, 0x00000082, 0x00000000, NULL },
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00400004, L_OPTIONS_306, 0x00000000, (void *)&g_ChangeAgentMenuDialog }, // "Change Agent"
|
|
{ MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
};
|
|
|
|
struct menudialogdef g_MainMenu4MbMenuDialog = {
|
|
MENUDIALOGTYPE_DEFAULT,
|
|
L_OPTIONS_302, // "Small but Perfect Menu"
|
|
g_MainMenu4MbMenuItems,
|
|
fmbHandleMainMenu,
|
|
MENUDIALOGFLAG_MPLOCKABLE | MENUDIALOGFLAG_IGNOREBACK,
|
|
NULL,
|
|
};
|
|
|
|
struct menuitem g_MpDropOut4MbMenuItems[] = {
|
|
{ MENUITEMTYPE_LABEL, 0, 0x00000010, L_MPMENU_196, 0x00000000, NULL }, // "Are you sure you want to drop out?"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000000, L_MPMENU_197, 0x00000000, fmbHandleDropOut }, // "Drop Out"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000008, L_MPMENU_198, 0x00000000, NULL }, // "Cancel"
|
|
{ MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
};
|
|
|
|
struct menudialogdef g_MpDropOut4MbMenuDialog = {
|
|
MENUDIALOGTYPE_DANGER,
|
|
L_MPMENU_195, // "Drop Out"
|
|
g_MpDropOut4MbMenuItems,
|
|
NULL,
|
|
0,
|
|
NULL,
|
|
};
|
|
|
|
struct menuitem g_UnusedAbortMenuItems[] = {
|
|
{ MENUITEMTYPE_LABEL, 0, 0x00000010, L_MPMENU_053, 0x00000000, NULL }, // "Are you sure you want to abort the game?"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000000, L_MPMENU_054, 0x00000000, fmdHandleAbortGame }, // "Abort"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000008, L_MPMENU_055, 0x00000000, NULL }, // "Cancel"
|
|
{ MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
};
|
|
|
|
struct menudialogdef g_UnusedAbortMenuDialog = {
|
|
MENUDIALOGTYPE_DANGER,
|
|
L_MPMENU_052, // "Abort"
|
|
g_UnusedAbortMenuItems,
|
|
NULL,
|
|
0,
|
|
NULL,
|
|
};
|
|
|
|
struct menuitem g_MpEditSimulant4MbMenuItems[] = {
|
|
{ MENUITEMTYPE_DROPDOWN, 0, 0x00020000, L_MPMENU_095, 0x00000000, mpBotDifficultyMenuHandler }, // "Difficulty:"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000000, L_MPMENU_096, 0x00000000, menuhandlerMpChangeSimulantType }, // "Change Type..."
|
|
{ MENUITEMTYPE_SEPARATOR, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00020000, L_MPMENU_098, 0x00000000, menuhandlerMpDeleteSimulant }, // "Delete Simulant"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000008, L_MPMENU_099, 0x00000000, NULL }, // "Back"
|
|
{ MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
};
|
|
|
|
struct menudialogdef g_MpEditSimulant4MbMenuDialog = {
|
|
MENUDIALOGTYPE_DEFAULT,
|
|
(u32)&mpMenuTitleEditSimulant,
|
|
g_MpEditSimulant4MbMenuItems,
|
|
menudialogMpSimulant,
|
|
MENUDIALOGFLAG_MPLOCKABLE,
|
|
NULL,
|
|
};
|
|
|
|
struct menuitem g_AdvancedSetup4MbMenuItems[] = {
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00020004, L_MPMENU_019, (u32)&mpMenuTextScenarioShortName, (void *)&g_MpScenarioMenuDialog }, // "Scenario"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000000, L_MPMENU_021, 0x00000000, menuhandlerMpOpenOptions }, // "Options"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MPMENU_020, (u32)&mpMenuTextArenaName, (void *)&g_MpArenaMenuDialog }, // "Arena"
|
|
{ MENUITEMTYPE_DROPDOWN, 0, 0x00020000, L_MPMENU_044, 0x00000000, menuhandlerMpLock }, // "Lock"
|
|
{ MENUITEMTYPE_SEPARATOR, 0, 0x00000000, 0x00000082, 0x00000000, NULL },
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MPMENU_023, 0x00000000, (void *)&g_MpWeaponsMenuDialog }, // "Weapons"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MPMENU_024, 0x00000000, (void *)&g_MpLimitsMenuDialog }, // "Limits"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MPWEAPONS_184, 0x00000000, (void *)&g_MpHandicapsMenuDialog }, // "Player Handicaps"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MPMENU_025, 0x00000000, (void *)&g_MpSimulantsMenuDialog }, // "Simulants"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MPMENU_022, 0x00000000, (void *)&g_MpTeamsMenuDialog }, // "Teams"
|
|
{ MENUITEMTYPE_SEPARATOR, 0, 0x00000000, 0x00000082, 0x00000000, NULL },
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00000004, L_MPMENU_036, 0x00000000, (void *)&g_MpReadyMenuDialog }, // "Start Game"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00060004, L_MPMENU_018, 0x00000000, (void *)&g_MpLoadSettingsMenuDialog }, // "Load Settings"
|
|
{ MENUITEMTYPE_SELECTABLE, 0, 0x00060000, L_MPMENU_026, 0x00000000, menuhandlerMpSaveSettings }, // "Save Settings"
|
|
{ MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
|
|
};
|
|
|
|
struct menudialogdef g_AdvancedSetup4MbMenuDialog = {
|
|
MENUDIALOGTYPE_DEFAULT,
|
|
L_MPMENU_017, // "Game Setup"
|
|
g_AdvancedSetup4MbMenuItems,
|
|
menudialogMpGameSetup,
|
|
MENUDIALOGFLAG_MPLOCKABLE | MENUDIALOGFLAG_DROPOUTONCLOSE,
|
|
&g_MpPlayerSetup4MbMenuDialog,
|
|
};
|