From 2fcc548f29cd2619cf6fdd3eaa3ca2edf1c215c7 Mon Sep 17 00:00:00 2001 From: zcaliptium Date: Tue, 15 Mar 2016 01:03:22 +0300 Subject: [PATCH] GameExecutable: Move some stuff from Menu.cpp into files PART V Now it's 4463 lines! --- Sources/SeriousSam/MNetworkStart.cpp | 151 +++++ Sources/SeriousSam/MNetworkStart.h | 15 + Sources/SeriousSam/MSelectPlayers.cpp | 115 ++++ Sources/SeriousSam/MSelectPlayers.h | 20 + Sources/SeriousSam/MServers.cpp | 97 +++ Sources/SeriousSam/MServers.h | 11 +- Sources/SeriousSam/MSplitStart.cpp | 5 +- Sources/SeriousSam/Menu.cpp | 634 +++--------------- Sources/SeriousSam/MenuStuff.cpp | 105 +++ Sources/SeriousSam/MenuStuff.h | 16 + Sources/SeriousSam/SeriousSam.vcxproj | 3 + Sources/SeriousSam/SeriousSam.vcxproj.filters | 15 +- 12 files changed, 642 insertions(+), 545 deletions(-) create mode 100644 Sources/SeriousSam/MNetworkStart.cpp create mode 100644 Sources/SeriousSam/MSelectPlayers.cpp create mode 100644 Sources/SeriousSam/MServers.cpp diff --git a/Sources/SeriousSam/MNetworkStart.cpp b/Sources/SeriousSam/MNetworkStart.cpp new file mode 100644 index 0000000..414db34 --- /dev/null +++ b/Sources/SeriousSam/MNetworkStart.cpp @@ -0,0 +1,151 @@ +/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */ + +#include "StdH.h" +#include +#include "MenuPrinting.h" +#include "LevelInfo.h" +#include "MenuStuff.h" +#include "MNetworkStart.h" + +#define TRIGGER_MG(mg, y, up, down, text, astr) \ + mg.mg_pmgUp = &up; \ + mg.mg_pmgDown = &down; \ + mg.mg_boxOnScreen = BoxMediumRow(y); \ + gm_lhGadgets.AddTail(mg.mg_lnNode); \ + mg.mg_astrTexts = astr; \ + mg.mg_ctTexts = sizeof(astr) / sizeof(astr[0]); \ + mg.mg_iSelected = 0; \ + mg.mg_strLabel = text; \ + mg.mg_strValue = astr[0]; + +extern INDEX ctGameTypeRadioTexts; +extern void UpdateNetworkLevel(INDEX iDummy); +extern CTString astrGameTypeRadioTexts[20]; +extern CTString astrDifficultyRadioTexts[6]; + + +void CNetworkStartMenu::Initialize_t(void) +{ + // title + gm_mgTitle.mg_boxOnScreen = BoxTitle(); + gm_mgTitle.mg_strText = TRANS("START SERVER"); + gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode); + + // session name edit box + gm_mgSessionName.mg_strText = _pGame->gam_strSessionName; + gm_mgSessionName.mg_strLabel = TRANS("Session name:"); + gm_mgSessionName.mg_ctMaxStringLen = 25; + gm_mgSessionName.mg_pstrToChange = &_pGame->gam_strSessionName; + gm_mgSessionName.mg_boxOnScreen = BoxMediumRow(1); + gm_mgSessionName.mg_bfsFontSize = BFS_MEDIUM; + gm_mgSessionName.mg_iCenterI = -1; + gm_mgSessionName.mg_pmgUp = &gm_mgStart; + gm_mgSessionName.mg_pmgDown = &gm_mgGameType; + gm_mgSessionName.mg_strTip = TRANS("name the session to start"); + gm_lhGadgets.AddTail(gm_mgSessionName.mg_lnNode); + + // game type trigger + TRIGGER_MG(gm_mgGameType, 2, + gm_mgSessionName, gm_mgDifficulty, TRANS("Game type:"), astrGameTypeRadioTexts); + gm_mgGameType.mg_ctTexts = ctGameTypeRadioTexts; + gm_mgGameType.mg_strTip = TRANS("choose type of multiplayer game"); + gm_mgGameType.mg_pOnTriggerChange = &UpdateNetworkLevel; + + // difficulty trigger + TRIGGER_MG(gm_mgDifficulty, 3, + gm_mgGameType, gm_mgLevel, TRANS("Difficulty:"), astrDifficultyRadioTexts); + gm_mgDifficulty.mg_strTip = TRANS("choose difficulty level"); + + // level name + gm_mgLevel.mg_strText = ""; + gm_mgLevel.mg_strLabel = TRANS("Level:"); + gm_mgLevel.mg_boxOnScreen = BoxMediumRow(4); + gm_mgLevel.mg_bfsFontSize = BFS_MEDIUM; + gm_mgLevel.mg_iCenterI = -1; + gm_mgLevel.mg_pmgUp = &gm_mgDifficulty; + gm_mgLevel.mg_pmgDown = &gm_mgMaxPlayers; + gm_mgLevel.mg_strTip = TRANS("choose the level to start"); + gm_mgLevel.mg_pActivatedFunction = NULL; + gm_lhGadgets.AddTail(gm_mgLevel.mg_lnNode); + + // max players trigger + TRIGGER_MG(gm_mgMaxPlayers, 5, + gm_mgLevel, gm_mgWaitAllPlayers, TRANS("Max players:"), astrMaxPlayersRadioTexts); + gm_mgMaxPlayers.mg_strTip = TRANS("choose maximum allowed number of players"); + + // wait all players trigger + TRIGGER_MG(gm_mgWaitAllPlayers, 6, + gm_mgMaxPlayers, gm_mgVisible, TRANS("Wait for all players:"), astrNoYes); + gm_mgWaitAllPlayers.mg_strTip = TRANS("if on, game won't start until all players have joined"); + + // server visible trigger + TRIGGER_MG(gm_mgVisible, 7, + gm_mgMaxPlayers, gm_mgGameOptions, TRANS("Server visible:"), astrNoYes); + gm_mgVisible.mg_strTip = TRANS("invisible servers are not listed, cleints have to join manually"); + + // options button + gm_mgGameOptions.mg_strText = TRANS("Game options"); + gm_mgGameOptions.mg_boxOnScreen = BoxMediumRow(8); + gm_mgGameOptions.mg_bfsFontSize = BFS_MEDIUM; + gm_mgGameOptions.mg_iCenterI = 0; + gm_mgGameOptions.mg_pmgUp = &gm_mgVisible; + gm_mgGameOptions.mg_pmgDown = &gm_mgStart; + gm_mgGameOptions.mg_strTip = TRANS("adjust game rules"); + gm_mgGameOptions.mg_pActivatedFunction = NULL; + gm_lhGadgets.AddTail(gm_mgGameOptions.mg_lnNode); + + // start button + gm_mgStart.mg_bfsFontSize = BFS_LARGE; + gm_mgStart.mg_boxOnScreen = BoxBigRow(7); + gm_mgStart.mg_pmgUp = &gm_mgGameOptions; + gm_mgStart.mg_pmgDown = &gm_mgSessionName; + gm_mgStart.mg_strText = TRANS("START"); + gm_lhGadgets.AddTail(gm_mgStart.mg_lnNode); + gm_mgStart.mg_pActivatedFunction = NULL; + + + +} + +void CNetworkStartMenu::StartMenu(void) +{ + extern INDEX sam_bMentalActivated; + gm_mgDifficulty.mg_ctTexts = sam_bMentalActivated ? 6 : 5; + + gm_mgGameType.mg_iSelected = Clamp(_pShell->GetINDEX("gam_iStartMode"), 0L, ctGameTypeRadioTexts - 1L); + gm_mgGameType.ApplyCurrentSelection(); + gm_mgDifficulty.mg_iSelected = _pShell->GetINDEX("gam_iStartDifficulty") + 1; + gm_mgDifficulty.ApplyCurrentSelection(); + + _pShell->SetINDEX("gam_iStartMode", CSessionProperties::GM_COOPERATIVE); + + INDEX ctMaxPlayers = _pShell->GetINDEX("gam_ctMaxPlayers"); + if (ctMaxPlayers<2 || ctMaxPlayers>16) { + ctMaxPlayers = 2; + _pShell->SetINDEX("gam_ctMaxPlayers", ctMaxPlayers); + } + + gm_mgMaxPlayers.mg_iSelected = ctMaxPlayers - 2; + gm_mgMaxPlayers.ApplyCurrentSelection(); + + gm_mgWaitAllPlayers.mg_iSelected = Clamp(_pShell->GetINDEX("gam_bWaitAllPlayers"), 0L, 1L); + gm_mgWaitAllPlayers.ApplyCurrentSelection(); + + gm_mgVisible.mg_iSelected = _pShell->GetINDEX("ser_bEnumeration"); + gm_mgVisible.ApplyCurrentSelection(); + + UpdateNetworkLevel(0); + + CGameMenu::StartMenu(); +} + +void CNetworkStartMenu::EndMenu(void) +{ + _pShell->SetINDEX("gam_iStartDifficulty", gm_mgDifficulty.mg_iSelected - 1); + _pShell->SetINDEX("gam_iStartMode", gm_mgGameType.mg_iSelected); + _pShell->SetINDEX("gam_bWaitAllPlayers", gm_mgWaitAllPlayers.mg_iSelected); + _pShell->SetINDEX("gam_ctMaxPlayers", gm_mgMaxPlayers.mg_iSelected + 2); + _pShell->SetINDEX("ser_bEnumeration", gm_mgVisible.mg_iSelected); + + CGameMenu::EndMenu(); +} diff --git a/Sources/SeriousSam/MNetworkStart.h b/Sources/SeriousSam/MNetworkStart.h index 2072e6e..79bbdc5 100644 --- a/Sources/SeriousSam/MNetworkStart.h +++ b/Sources/SeriousSam/MNetworkStart.h @@ -7,10 +7,25 @@ #endif #include "GameMenu.h" +#include "MGButton.h" +#include "MGEdit.h" +#include "MGTitle.h" +#include "MGTrigger.h" class CNetworkStartMenu : public CGameMenu { public: + CMGTitle gm_mgTitle; + CMGEdit gm_mgSessionName; + CMGTrigger gm_mgGameType; + CMGTrigger gm_mgDifficulty; + CMGButton gm_mgLevel; + CMGTrigger gm_mgMaxPlayers; + CMGTrigger gm_mgWaitAllPlayers; + CMGTrigger gm_mgVisible; + CMGButton gm_mgGameOptions; + CMGButton gm_mgStart; + void Initialize_t(void); void StartMenu(void); void EndMenu(void); diff --git a/Sources/SeriousSam/MSelectPlayers.cpp b/Sources/SeriousSam/MSelectPlayers.cpp new file mode 100644 index 0000000..f16fe4f --- /dev/null +++ b/Sources/SeriousSam/MSelectPlayers.cpp @@ -0,0 +1,115 @@ +/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */ + +#include "StdH.h" +#include +#include "MenuPrinting.h" +#include "MSelectPlayers.h" + +#define ADD_GADGET( gd, box, up, dn, lf, rt, txt) \ + gd.mg_boxOnScreen = box; \ + gd.mg_pmgUp = up; \ + gd.mg_pmgDown = dn; \ + gd.mg_pmgLeft = lf; \ + gd.mg_pmgRight = rt; \ + gd.mg_strText = txt; \ + gm_lhGadgets.AddTail(gd.mg_lnNode); + +#define TRIGGER_MG(mg, y, up, down, text, astr) \ + mg.mg_pmgUp = &up; \ + mg.mg_pmgDown = &down; \ + mg.mg_boxOnScreen = BoxMediumRow(y); \ + gm_lhGadgets.AddTail(mg.mg_lnNode); \ + mg.mg_astrTexts = astr; \ + mg.mg_ctTexts = sizeof(astr) / sizeof(astr[0]); \ + mg.mg_iSelected = 0; \ + mg.mg_strLabel = text; \ + mg.mg_strValue = astr[0]; + +extern CTString astrNoYes[2]; +extern CTString astrSplitScreenRadioTexts[4]; +extern void SelectPlayersFillMenu(void); +extern void SelectPlayersApplyMenu(void); + +void CSelectPlayersMenu::Initialize_t(void) +{ + // intialize split screen menu + gm_mgTitle.mg_boxOnScreen = BoxTitle(); + gm_mgTitle.mg_strText = TRANS("SELECT PLAYERS"); + gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode); + + TRIGGER_MG(gm_mgDedicated, 0, gm_mgStart, gm_mgObserver, TRANS("Dedicated:"), astrNoYes); + gm_mgDedicated.mg_strTip = TRANS("select to start dedicated server"); + gm_mgDedicated.mg_pOnTriggerChange = NULL; + + TRIGGER_MG(gm_mgObserver, 1, gm_mgDedicated, gm_mgSplitScreenCfg, TRANS("Observer:"), astrNoYes); + gm_mgObserver.mg_strTip = TRANS("select to join in for observing, not for playing"); + gm_mgObserver.mg_pOnTriggerChange = NULL; + + // split screen config trigger + TRIGGER_MG(gm_mgSplitScreenCfg, 2, gm_mgObserver, gm_mgPlayer0Change, TRANS("Number of players:"), astrSplitScreenRadioTexts); + gm_mgSplitScreenCfg.mg_strTip = TRANS("choose more than one player to play in split screen"); + gm_mgSplitScreenCfg.mg_pOnTriggerChange = NULL; + + gm_mgPlayer0Change.mg_iCenterI = -1; + gm_mgPlayer1Change.mg_iCenterI = -1; + gm_mgPlayer2Change.mg_iCenterI = -1; + gm_mgPlayer3Change.mg_iCenterI = -1; + gm_mgPlayer0Change.mg_boxOnScreen = BoxMediumMiddle(4); + gm_mgPlayer1Change.mg_boxOnScreen = BoxMediumMiddle(5); + gm_mgPlayer2Change.mg_boxOnScreen = BoxMediumMiddle(6); + gm_mgPlayer3Change.mg_boxOnScreen = BoxMediumMiddle(7); + gm_mgPlayer0Change.mg_strTip = + gm_mgPlayer1Change.mg_strTip = + gm_mgPlayer2Change.mg_strTip = + gm_mgPlayer3Change.mg_strTip = TRANS("select profile for this player"); + gm_lhGadgets.AddTail(gm_mgPlayer0Change.mg_lnNode); + gm_lhGadgets.AddTail(gm_mgPlayer1Change.mg_lnNode); + gm_lhGadgets.AddTail(gm_mgPlayer2Change.mg_lnNode); + gm_lhGadgets.AddTail(gm_mgPlayer3Change.mg_lnNode); + + gm_mgNotes.mg_boxOnScreen = BoxMediumRow(9.0); + gm_mgNotes.mg_bfsFontSize = BFS_MEDIUM; + gm_mgNotes.mg_iCenterI = -1; + gm_mgNotes.mg_bEnabled = FALSE; + gm_mgNotes.mg_bLabel = TRUE; + gm_lhGadgets.AddTail(gm_mgNotes.mg_lnNode); + gm_mgNotes.mg_strText = ""; + + /* // options button + mgSplitOptions.mg_strText = TRANS("Game options"); + mgSplitOptions.mg_boxOnScreen = BoxMediumRow(3); + mgSplitOptions.mg_bfsFontSize = BFS_MEDIUM; + mgSplitOptions.mg_iCenterI = 0; + mgSplitOptions.mg_pmgUp = &mgSplitLevel; + mgSplitOptions.mg_pmgDown = &mgSplitStartStart; + mgSplitOptions.mg_strTip = TRANS("adjust game rules"); + mgSplitOptions.mg_pActivatedFunction = &StartGameOptionsFromSplitScreen; + gm_lhGadgets.AddTail( mgSplitOptions.mg_lnNode);*/ + + /* // start button + mgSplitStartStart.mg_bfsFontSize = BFS_LARGE; + mgSplitStartStart.mg_boxOnScreen = BoxBigRow(4); + mgSplitStartStart.mg_pmgUp = &mgSplitOptions; + mgSplitStartStart.mg_pmgDown = &mgSplitGameType; + mgSplitStartStart.mg_strText = TRANS("START"); + gm_lhGadgets.AddTail( mgSplitStartStart.mg_lnNode); + mgSplitStartStart.mg_pActivatedFunction = &StartSelectPlayersMenuFromSplit; + */ + + ADD_GADGET(gm_mgStart, BoxMediumRow(11), &gm_mgSplitScreenCfg, &gm_mgPlayer0Change, NULL, NULL, TRANS("START")); + gm_mgStart.mg_bfsFontSize = BFS_LARGE; + gm_mgStart.mg_iCenterI = 0; +} + +void CSelectPlayersMenu::StartMenu(void) +{ + CGameMenu::StartMenu(); + SelectPlayersFillMenu(); + SelectPlayersApplyMenu(); +} + +void CSelectPlayersMenu::EndMenu(void) +{ + SelectPlayersApplyMenu(); + CGameMenu::EndMenu(); +} \ No newline at end of file diff --git a/Sources/SeriousSam/MSelectPlayers.h b/Sources/SeriousSam/MSelectPlayers.h index 5d5f4da..4f747d8 100644 --- a/Sources/SeriousSam/MSelectPlayers.h +++ b/Sources/SeriousSam/MSelectPlayers.h @@ -7,12 +7,32 @@ #endif #include "GameMenu.h" +#include "MGButton.h" +#include "MGChangePlayer.h" +#include "MGTitle.h" +#include "MGTrigger.h" class CSelectPlayersMenu : public CGameMenu { public: BOOL gm_bAllowDedicated; BOOL gm_bAllowObserving; + + CMGTitle gm_mgTitle; + + CMGTrigger gm_mgDedicated; + CMGTrigger gm_mgObserver; + CMGTrigger gm_mgSplitScreenCfg; + + CMGChangePlayer gm_mgPlayer0Change; + CMGChangePlayer gm_mgPlayer1Change; + CMGChangePlayer gm_mgPlayer2Change; + CMGChangePlayer gm_mgPlayer3Change; + + CMGButton gm_mgNotes; + + CMGButton gm_mgStart; + void Initialize_t(void); void StartMenu(void); void EndMenu(void); diff --git a/Sources/SeriousSam/MServers.cpp b/Sources/SeriousSam/MServers.cpp new file mode 100644 index 0000000..92f67e5 --- /dev/null +++ b/Sources/SeriousSam/MServers.cpp @@ -0,0 +1,97 @@ +/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */ + +#include "StdH.h" +#include +#include "MenuPrinting.h" +#include "MServers.h" + +CTString _strServerFilter[7]; +CMGButton mgServerColumn[7]; +CMGEdit mgServerFilter[7]; + +void CServersMenu::Initialize_t(void) +{ + gm_mgTitle.mg_boxOnScreen = BoxTitle(); + gm_mgTitle.mg_strText = TRANS("CHOOSE SERVER"); + gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode); + + gm_mgList.mg_boxOnScreen = FLOATaabbox2D(FLOAT2D(0, 0), FLOAT2D(1, 1)); + gm_mgList.mg_pmgLeft = &gm_mgList; // make sure it can get focus + gm_mgList.mg_bEnabled = TRUE; + gm_lhGadgets.AddTail(gm_mgList.mg_lnNode); + + ASSERT(ARRAYCOUNT(mgServerColumn) == ARRAYCOUNT(mgServerFilter)); + for (INDEX i = 0; i=2)"); + mgServerFilter[4].mg_strTip = TRANS("filter by game (ie. coop)"); + mgServerFilter[5].mg_strTip = TRANS("filter by mod"); + mgServerFilter[6].mg_strTip = TRANS("filter by version"); +} + +void CServersMenu::StartMenu(void) +{ + extern void RefreshServerList(void); + RefreshServerList(); + + CGameMenu::StartMenu(); +} + +void CServersMenu::Think(void) +{ + if (!_pNetwork->ga_bEnumerationChange) { + return; + } + _pNetwork->ga_bEnumerationChange = FALSE; +} diff --git a/Sources/SeriousSam/MServers.h b/Sources/SeriousSam/MServers.h index c8e7304..bc8f5bd 100644 --- a/Sources/SeriousSam/MServers.h +++ b/Sources/SeriousSam/MServers.h @@ -7,16 +7,23 @@ #endif #include "GameMenu.h" +#include "MGButton.h" +#include "MGEdit.h" +#include "MGServerList.h" +#include "MGTitle.h" class CServersMenu : public CGameMenu { public: BOOL m_bInternet; + + CMGTitle gm_mgTitle; + CMGServerList gm_mgList; + CMGButton gm_mgRefresh; + void Initialize_t(void); void StartMenu(void); void Think(void); - - BOOL OnKeyDown(int iVKey); // __Evolution }; #endif /* include-once check. */ \ No newline at end of file diff --git a/Sources/SeriousSam/MSplitStart.cpp b/Sources/SeriousSam/MSplitStart.cpp index 4266823..6df0b44 100644 --- a/Sources/SeriousSam/MSplitStart.cpp +++ b/Sources/SeriousSam/MSplitStart.cpp @@ -18,10 +18,9 @@ mg.mg_strLabel = text; \ mg.mg_strValue = astr[0]; - extern INDEX ctGameTypeRadioTexts; extern void UpdateSplitLevel(INDEX iDummy); -extern void SplitStartMenuSubInit(CSplitStartMenu* gm); + void CSplitStartMenu::Initialize_t(void) { @@ -31,7 +30,6 @@ void CSplitStartMenu::Initialize_t(void) gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode); // game type trigger - extern CTString astrGameTypeRadioTexts[20]; TRIGGER_MG(gm_mgGameType, 0, gm_mgStart, gm_mgDifficulty, TRANS("Game type:"), astrGameTypeRadioTexts); gm_mgGameType.mg_ctTexts = ctGameTypeRadioTexts; @@ -39,7 +37,6 @@ void CSplitStartMenu::Initialize_t(void) gm_mgGameType.mg_pOnTriggerChange = &UpdateSplitLevel; // difficulty trigger - extern CTString astrDifficultyRadioTexts[6]; TRIGGER_MG(gm_mgDifficulty, 1, gm_mgGameType, gm_mgLevel, TRANS("Difficulty:"), astrDifficultyRadioTexts); gm_mgDifficulty.mg_strTip = TRANS("choose difficulty level"); diff --git a/Sources/SeriousSam/Menu.cpp b/Sources/SeriousSam/Menu.cpp index 2b465a8..be8214d 100644 --- a/Sources/SeriousSam/Menu.cpp +++ b/Sources/SeriousSam/Menu.cpp @@ -57,7 +57,6 @@ #include "MenuStuff.h" // macros for translating radio button text arrays -#define RADIOTRANS(str) ("ETRS" str) #define TRANSLATERADIOARRAY(array) TranslateRadioTexts(array, ARRAYCOUNT(array)) extern CMenuGadget *_pmgLastActivatedGadget; @@ -110,7 +109,10 @@ void InitActionsForInGameMenu(); void InitActionsForNetworkMenu(); void InitActionsForNetworkJoinMenu(); void InitActionsForNetworkOpenMenu(); +void InitActionsForNetworkStartMenu(); void InitActionsForOptionsMenu(); +void InitActionsForSelectPlayersMenu(); +void InitActionsForServersMenu(); void InitActionsForSinglePlayerMenu(); void InitActionsForSinglePlayerNewMenu(); void InitActionsForSplitScreenMenu(); @@ -219,74 +221,6 @@ static CTextureObject _toLogoMenuB; #define PLACEMENT(x,y,z) CPlacement3D( FLOAT3D( x, y, z), \ ANGLE3D( AngleDeg(0.0f), AngleDeg(0.0f), AngleDeg(0.0f))) -extern CTString astrNoYes[] = { - RADIOTRANS( "No"), - RADIOTRANS( "Yes"), -}; -CTString astrComputerInvoke[] = { - RADIOTRANS( "Use"), - RADIOTRANS( "Double-click use"), -}; -CTString astrWeapon[] = { - RADIOTRANS( "Only if new"), - RADIOTRANS( "Never"), - RADIOTRANS( "Always"), - RADIOTRANS( "Only if stronger"), -}; -CTString astrCrosshair[] = { - "", - "Textures\\Interface\\Crosshairs\\Crosshair1.tex", - "Textures\\Interface\\Crosshairs\\Crosshair2.tex", - "Textures\\Interface\\Crosshairs\\Crosshair3.tex", - "Textures\\Interface\\Crosshairs\\Crosshair4.tex", - "Textures\\Interface\\Crosshairs\\Crosshair5.tex", - "Textures\\Interface\\Crosshairs\\Crosshair6.tex", - "Textures\\Interface\\Crosshairs\\Crosshair7.tex", -}; - -CTString astrMaxPlayersRadioTexts[] = { - RADIOTRANS( "2"), - RADIOTRANS( "3"), - RADIOTRANS( "4"), - RADIOTRANS( "5"), - RADIOTRANS( "6"), - RADIOTRANS( "7"), - RADIOTRANS( "8"), - RADIOTRANS( "9"), - RADIOTRANS( "10"), - RADIOTRANS( "11"), - RADIOTRANS( "12"), - RADIOTRANS( "13"), - RADIOTRANS( "14"), - RADIOTRANS( "15"), - RADIOTRANS( "16"), -}; -// here, we just reserve space for up to 16 different game types -// actual names are added later -extern CTString astrGameTypeRadioTexts[] = { - "", "", "", "", "", - "", "", "", "", "", - "", "", "", "", "", - "", "", "", "", "", -}; - -extern INDEX ctGameTypeRadioTexts = 1; -extern CTString astrDifficultyRadioTexts[] = { - RADIOTRANS("Tourist"), - RADIOTRANS("Easy"), - RADIOTRANS("Normal"), - RADIOTRANS("Hard"), - RADIOTRANS("Serious"), - RADIOTRANS("Mental"), -}; - -CTString astrSplitScreenRadioTexts[] = { - RADIOTRANS( "1"), - RADIOTRANS( "2 - split screen"), - RADIOTRANS( "3 - split screen"), - RADIOTRANS( "4 - split screen"), -}; - // ptr to current menu CGameMenu *pgmCurrentMenu = NULL; @@ -368,11 +302,6 @@ CCustomizeKeyboardMenu gmCustomizeKeyboardMenu; // -------- Choose servers menu CServersMenu gmServersMenu; -CMGTitle mgServersTitle; -CMGServerList mgServerList; -CMGButton mgServerColumn[7]; -CMGEdit mgServerFilter[7]; -CMGButton mgServerRefresh; // -------- Customize axis menu CCustomizeAxisMenu gmCustomizeAxisMenu; @@ -384,20 +313,11 @@ COptionsMenu gmOptionsMenu; CVideoOptionsMenu gmVideoOptionsMenu; CMGTitle mgVideoOptionsTitle; CMGTrigger mgDisplayAPITrigger; -CTString astrDisplayAPIRadioTexts[] = { - RADIOTRANS( "OpenGL"), - RADIOTRANS( "Direct3D"), -}; CMGTrigger mgDisplayAdaptersTrigger; CMGTrigger mgFullScreenTrigger; CMGTrigger mgResolutionsTrigger; CMGTrigger mgDisplayPrefsTrigger; -CTString astrDisplayPrefsRadioTexts[] = { - RADIOTRANS( "Speed"), - RADIOTRANS( "Normal"), - RADIOTRANS( "Quality"), - RADIOTRANS( "Custom"), -}; + INDEX _ctResolutions = 0; CTString * _astrResolutionTexts = NULL; CDisplayMode *_admResolutionModes = NULL; @@ -405,12 +325,6 @@ INDEX _ctAdapters = 0; CTString * _astrAdapterTexts = NULL; CMGButton mgVideoRendering; CMGTrigger mgBitsPerPixelTrigger; -CTString astrBitsPerPixelRadioTexts[] = { - RADIOTRANS( "Desktop"), - RADIOTRANS( "16 BPP"), - RADIOTRANS( "32 BPP"), -}; - CMGButton mgVideoOptionsApply; // -------- Audio options menu @@ -419,17 +333,6 @@ CMGTitle mgAudioOptionsTitle; CMGTrigger mgAudioAutoTrigger; CMGTrigger mgAudioAPITrigger; CMGTrigger mgFrequencyTrigger; -CTString astrFrequencyRadioTexts[] = { - RADIOTRANS( "No sound"), - RADIOTRANS( "11kHz"), - RADIOTRANS( "22kHz"), - RADIOTRANS( "44kHz"), -}; -CTString astrSoundAPIRadioTexts[] = { - RADIOTRANS( "WaveOut"), - RADIOTRANS( "DirectSound"), - RADIOTRANS( "EAX"), -}; CMGSlider mgWaveVolume; CMGSlider mgMPEGVolume; CMGButton mgAudioOptionsApply; @@ -442,16 +345,6 @@ CNetworkJoinMenu gmNetworkJoinMenu; // -------- Network start menu CNetworkStartMenu gmNetworkStartMenu; -CMGTitle mgNetworkStartTitle; -CMGEdit mgNetworkSessionName; -CMGTrigger mgNetworkGameType; -CMGTrigger mgNetworkDifficulty; -CMGButton mgNetworkLevel; -CMGTrigger mgNetworkMaxPlayers; -CMGTrigger mgNetworkWaitAllPlayers; -CMGTrigger mgNetworkVisible; -CMGButton mgNetworkGameOptions; -CMGButton mgNetworkStartStart; // -------- Network open menu CNetworkOpenMenu gmNetworkOpenMenu; @@ -464,20 +357,6 @@ CSplitStartMenu gmSplitStartMenu; // -------- Select players menu CSelectPlayersMenu gmSelectPlayersMenu; -CMGTitle mgSelectPlayerTitle; - -CMGTrigger mgDedicated; -CMGTrigger mgObserver; -CMGTrigger mgSplitScreenCfg; - -CMGChangePlayer mgPlayer0Change; -CMGChangePlayer mgPlayer1Change; -CMGChangePlayer mgPlayer2Change; -CMGChangePlayer mgPlayer3Change; - -CMGButton mgSelectPlayersNotes; - -CMGButton mgSelectPlayersStart; extern void PlayMenuSound(CSoundData *psd) { @@ -502,49 +381,6 @@ CModelObject *AddAttachment_t(CModelObject *pmoParent, INDEX iPosition, return &pamo->amo_moModelObject; } -void SetPlayerModel(CModelObject *pmoPlayer) -{ -/* try { - pmoPlayer->SetData_t( CTFILENAME( "Models\\Player\\SeriousSam\\Player.mdl")); - pmoPlayer->mo_toTexture.SetData_t( CTFILENAME( "Models\\Player\\SeriousSam\\Player.tex")); - pmoPlayer->PlayAnim(PLAYER_ANIM_WALK, AOF_LOOPING); - CModelObject *pmoBody = AddAttachment_t(pmoPlayer, PLAYER_ATTACHMENT_TORSO, - CTFILENAME("Models\\Player\\SeriousSam\\Body.mdl"), BODY_ANIM_MINIGUN_STAND, - CTFILENAME("Models\\Player\\SeriousSam\\Body.tex"), - CTFILENAME(""), - CTFILENAME("")); - CModelObject *pmoHead = AddAttachment_t(pmoBody, BODY_ATTACHMENT_HEAD, - CTFILENAME("Models\\Player\\SeriousSam\\Head.mdl"), 0, - CTFILENAME("Models\\Player\\SeriousSam\\Head.tex"), - CTFILENAME(""), - CTFILENAME("")); - CModelObject *pmoMiniGun = AddAttachment_t(pmoBody, BODY_ATTACHMENT_MINIGUN, - CTFILENAME("Models\\Weapons\\MiniGun\\MiniGunItem.mdl"), 0, - CTFILENAME("Models\\Weapons\\MiniGun\\MiniGun.tex"), - CTFILENAME(""), - CTFILENAME("")); - AddAttachment_t(pmoMiniGun, MINIGUNITEM_ATTACHMENT_BARRELS, - CTFILENAME("Models\\Weapons\\MiniGun\\Barrels.mdl"), 0, - CTFILENAME("Models\\Weapons\\MiniGun\\MiniGun.tex"), - CTFILENAME("Models\\ReflectionTextures\\LightBlueMetal01.tex"), - CTFILENAME("Models\\SpecularTextures\\Medium.tex")); - AddAttachment_t(pmoMiniGun, MINIGUNITEM_ATTACHMENT_BODY, - CTFILENAME("Models\\Weapons\\MiniGun\\Body.mdl"), 0, - CTFILENAME("Models\\Weapons\\MiniGun\\MiniGun.tex"), - CTFILENAME("Models\\ReflectionTextures\\LightBlueMetal01.tex"), - CTFILENAME("Models\\SpecularTextures\\Medium.tex")); - AddAttachment_t(pmoMiniGun, MINIGUNITEM_ATTACHMENT_ENGINE, - CTFILENAME("Models\\Weapons\\MiniGun\\Engine.mdl"), 0, - CTFILENAME("Models\\Weapons\\MiniGun\\MiniGun.tex"), - CTFILENAME("Models\\ReflectionTextures\\LightBlueMetal01.tex"), - CTFILENAME("Models\\SpecularTextures\\Medium.tex")); - - } catch( char *strError) { - FatalError( strError); - } - */ -} - // translate all texts in array for one radio button void TranslateRadioTexts(CTString astr[], INDEX ct) { @@ -1186,7 +1022,7 @@ void StartSelectPlayersMenuFromSplit(void) { gmSelectPlayersMenu.gm_bAllowDedicated = FALSE; gmSelectPlayersMenu.gm_bAllowObserving = FALSE; - mgSelectPlayersStart.mg_pActivatedFunction = &StartSplitScreenGame; + gmSelectPlayersMenu.gm_mgStart.mg_pActivatedFunction = &StartSplitScreenGame; gmSelectPlayersMenu.gm_pgmParentMenu = &gmSplitStartMenu; ChangeToMenu( &gmSelectPlayersMenu); } @@ -1195,7 +1031,7 @@ void StartSelectPlayersMenuFromNetwork(void) { gmSelectPlayersMenu.gm_bAllowDedicated = TRUE; gmSelectPlayersMenu.gm_bAllowObserving = TRUE; - mgSelectPlayersStart.mg_pActivatedFunction = &StartNetworkGame; + gmSelectPlayersMenu.gm_mgStart.mg_pActivatedFunction = &StartNetworkGame; gmSelectPlayersMenu.gm_pgmParentMenu = &gmNetworkStartMenu; ChangeToMenu( &gmSelectPlayersMenu); } @@ -1204,7 +1040,7 @@ void StartSelectPlayersMenuFromOpen(void) { gmSelectPlayersMenu.gm_bAllowDedicated = FALSE; gmSelectPlayersMenu.gm_bAllowObserving = TRUE; - mgSelectPlayersStart.mg_pActivatedFunction = &JoinNetworkGame; + gmSelectPlayersMenu.gm_mgStart.mg_pActivatedFunction = &JoinNetworkGame; gmSelectPlayersMenu.gm_pgmParentMenu = &gmNetworkOpenMenu; ChangeToMenu( &gmSelectPlayersMenu); @@ -1220,7 +1056,7 @@ void StartSelectPlayersMenuFromServers(void) { gmSelectPlayersMenu.gm_bAllowDedicated = FALSE; gmSelectPlayersMenu.gm_bAllowObserving = TRUE; - mgSelectPlayersStart.mg_pActivatedFunction = &JoinNetworkGame; + gmSelectPlayersMenu.gm_mgStart.mg_pActivatedFunction = &JoinNetworkGame; gmSelectPlayersMenu.gm_pgmParentMenu = &gmServersMenu; ChangeToMenu( &gmSelectPlayersMenu); @@ -1255,7 +1091,7 @@ void StartSelectLevelFromSplit(void) } void StartSelectLevelFromNetwork(void) { - FilterLevels(GetSpawnFlagsForGameType(mgNetworkGameType.mg_iSelected)); + FilterLevels(GetSpawnFlagsForGameType(gmNetworkStartMenu.gm_mgGameType.mg_iSelected)); void StartNetworkStartMenu(void); _pAfterLevelChosen = StartNetworkStartMenu; ChangeToMenu( &gmLevelsMenu); @@ -1266,7 +1102,7 @@ void StartSelectPlayersMenuFromSplitScreen(void) { gmSelectPlayersMenu.gm_bAllowDedicated = FALSE; gmSelectPlayersMenu.gm_bAllowObserving = FALSE; -// mgSelectPlayersStart.mg_pActivatedFunction = &StartSplitScreenGame; +// gmSelectPlayersMenu.gm_mgStart.mg_pActivatedFunction = &StartSplitScreenGame; gmSelectPlayersMenu.gm_pgmParentMenu = &gmSplitScreenMenu; ChangeToMenu( &gmSelectPlayersMenu); } @@ -1274,7 +1110,7 @@ void StartSelectPlayersMenuFromNetworkLoad(void) { gmSelectPlayersMenu.gm_bAllowDedicated = FALSE; gmSelectPlayersMenu.gm_bAllowObserving = TRUE; - mgSelectPlayersStart.mg_pActivatedFunction = &StartNetworkLoadGame; + gmSelectPlayersMenu.gm_mgStart.mg_pActivatedFunction = &StartNetworkLoadGame; gmSelectPlayersMenu.gm_pgmParentMenu = &gmLoadSaveMenu; ChangeToMenu( &gmSelectPlayersMenu); } @@ -1283,7 +1119,7 @@ void StartSelectPlayersMenuFromSplitScreenLoad(void) { gmSelectPlayersMenu.gm_bAllowDedicated = FALSE; gmSelectPlayersMenu.gm_bAllowObserving = FALSE; - mgSelectPlayersStart.mg_pActivatedFunction = &StartSplitScreenGameLoad; + gmSelectPlayersMenu.gm_mgStart.mg_pActivatedFunction = &StartSplitScreenGameLoad; gmSelectPlayersMenu.gm_pgmParentMenu = &gmLoadSaveMenu; ChangeToMenu( &gmSelectPlayersMenu); } @@ -2226,8 +2062,9 @@ void InitializeMenus(void) gmServersMenu.Initialize_t(); gmServersMenu.gm_strName="Servers"; - gmServersMenu.gm_pmgSelectedByDefault = &mgServerList; + gmServersMenu.gm_pmgSelectedByDefault = &gmServersMenu.gm_mgList; gmServersMenu.gm_pgmParentMenu = &gmNetworkOpenMenu; + InitActionsForServersMenu(); gmNetworkMenu.Initialize_t(); gmNetworkMenu.gm_strName="Network"; @@ -2237,9 +2074,10 @@ void InitializeMenus(void) gmNetworkStartMenu.Initialize_t(); gmNetworkStartMenu.gm_strName="NetworkStart"; - gmNetworkStartMenu.gm_pmgSelectedByDefault = &mgNetworkStartStart; + gmNetworkStartMenu.gm_pmgSelectedByDefault = &gmNetworkStartMenu.gm_mgStart; gmNetworkStartMenu.gm_pgmParentMenu = &gmNetworkMenu; - + InitActionsForNetworkStartMenu(); + gmNetworkJoinMenu.Initialize_t(); gmNetworkJoinMenu.gm_strName="NetworkJoin"; gmNetworkJoinMenu.gm_pmgSelectedByDefault = &gmNetworkJoinMenu.gm_mgLAN; @@ -2250,7 +2088,8 @@ void InitializeMenus(void) gmSelectPlayersMenu.gm_bAllowObserving = FALSE; gmSelectPlayersMenu.Initialize_t(); gmSelectPlayersMenu.gm_strName="SelectPlayers"; - gmSelectPlayersMenu.gm_pmgSelectedByDefault = &mgSelectPlayersStart; + gmSelectPlayersMenu.gm_pmgSelectedByDefault = &gmSelectPlayersMenu.gm_mgStart; + InitActionsForSelectPlayersMenu(); gmNetworkOpenMenu.Initialize_t(); gmNetworkOpenMenu.gm_strName="NetworkOpen"; @@ -4325,7 +4164,7 @@ void InitActionsForVarMenu() { } // ------------------------ CServersMenu implementation -void RefreshServerList(void) +extern void RefreshServerList(void) { _pNetwork->EnumSessions(gmServersMenu.m_bInternet); } @@ -4335,24 +4174,14 @@ void RefreshServerListManually(void) ChangeToMenu(&gmServersMenu); // this refreshes the list and sets focuses } -void CServersMenu::Think(void) -{ - if (!_pNetwork->ga_bEnumerationChange) { - return; - } - _pNetwork->ga_bEnumerationChange = FALSE; -} - -CTString _strServerFilter[7]; - void SortByColumn(int i) { - if (mgServerList.mg_iSort==i) { - mgServerList.mg_bSortDown = !mgServerList.mg_bSortDown; + if (gmServersMenu.gm_mgList.mg_iSort==i) { + gmServersMenu.gm_mgList.mg_bSortDown = !gmServersMenu.gm_mgList.mg_bSortDown; } else { - mgServerList.mg_bSortDown = FALSE; + gmServersMenu.gm_mgList.mg_bSortDown = FALSE; } - mgServerList.mg_iSort=i; + gmServersMenu.gm_mgList.mg_iSort = i; } void SortByServer(void) { SortByColumn(0); } @@ -4363,95 +4192,21 @@ void SortByGame(void) { SortByColumn(4); } void SortByMod(void) { SortByColumn(5); } void SortByVer(void) { SortByColumn(6); } -void CServersMenu::Initialize_t(void) -{ - mgServersTitle.mg_boxOnScreen = BoxTitle(); - mgServersTitle.mg_strText = TRANS("CHOOSE SERVER"); - gm_lhGadgets.AddTail( mgServersTitle.mg_lnNode); +extern CMGButton mgServerColumn[7]; +extern CMGEdit mgServerFilter[7]; - mgServerList.mg_boxOnScreen = FLOATaabbox2D(FLOAT2D(0,0), FLOAT2D(1,1)); - mgServerList.mg_pmgLeft = &mgServerList; // make sure it can get focus - mgServerList.mg_bEnabled = TRUE; - gm_lhGadgets.AddTail(mgServerList.mg_lnNode); +void InitActionsForServersMenu() { + gmServersMenu.gm_mgRefresh.mg_pActivatedFunction = &RefreshServerList; - ASSERT(ARRAYCOUNT(mgServerColumn)==ARRAYCOUNT(mgServerFilter)); - for (INDEX i=0; i=2)"); - mgServerFilter[4].mg_strTip = TRANS("filter by game (ie. coop)") ; - mgServerFilter[5].mg_strTip = TRANS("filter by mod") ; - mgServerFilter[6].mg_strTip = TRANS("filter by version"); + mgServerColumn[0].mg_pActivatedFunction = SortByServer; + mgServerColumn[1].mg_pActivatedFunction = SortByMap; + mgServerColumn[2].mg_pActivatedFunction = SortByPing; + mgServerColumn[3].mg_pActivatedFunction = SortByPlayers; + mgServerColumn[4].mg_pActivatedFunction = SortByGame; + mgServerColumn[5].mg_pActivatedFunction = SortByMod; + mgServerColumn[6].mg_pActivatedFunction = SortByVer; } -void CServersMenu::StartMenu(void) -{ - RefreshServerList(); - - CGameMenu::StartMenu(); -} - -// __Evolution -BOOL CServersMenu::OnKeyDown(int iVKey) -{ - if (iVKey == VK_F5) { - RefreshServerListManually(); - return TRUE; - } - return CGameMenu::OnKeyDown(iVKey); -} -// __Evolution - // ------------------------ CNetworkMenu implementation void InitActionsForNetworkMenu() { @@ -4470,136 +4225,21 @@ void InitActionsForNetworkJoinMenu() } // ------------------------ CNetworkStartMenu implementation -void UpdateNetworkLevel(INDEX iDummy) +extern void UpdateNetworkLevel(INDEX iDummy) { ValidateLevelForFlags(_pGame->gam_strCustomLevel, - GetSpawnFlagsForGameType(mgNetworkGameType.mg_iSelected)); - mgNetworkLevel.mg_strText = FindLevelByFileName(_pGame->gam_strCustomLevel).li_strName; + GetSpawnFlagsForGameType(gmNetworkStartMenu.gm_mgGameType.mg_iSelected)); + gmNetworkStartMenu.gm_mgLevel.mg_strText = FindLevelByFileName(_pGame->gam_strCustomLevel).li_strName; } -void CNetworkStartMenu::Initialize_t(void) +void InitActionsForNetworkStartMenu() { - // title - mgNetworkStartTitle.mg_boxOnScreen = BoxTitle(); - mgNetworkStartTitle.mg_strText = TRANS("START SERVER"); - gm_lhGadgets.AddTail( mgNetworkStartTitle.mg_lnNode); - - // session name edit box - mgNetworkSessionName.mg_strText = _pGame->gam_strSessionName; - mgNetworkSessionName.mg_strLabel = TRANS("Session name:"); - mgNetworkSessionName.mg_ctMaxStringLen = 25; - mgNetworkSessionName.mg_pstrToChange = &_pGame->gam_strSessionName; - mgNetworkSessionName.mg_boxOnScreen = BoxMediumRow(1); - mgNetworkSessionName.mg_bfsFontSize = BFS_MEDIUM; - mgNetworkSessionName.mg_iCenterI = -1; - mgNetworkSessionName.mg_pmgUp = &mgNetworkStartStart; - mgNetworkSessionName.mg_pmgDown = &mgNetworkGameType; - mgNetworkSessionName.mg_strTip = TRANS("name the session to start"); - gm_lhGadgets.AddTail( mgNetworkSessionName.mg_lnNode); - - // game type trigger - TRIGGER_MG(mgNetworkGameType, 2, - mgNetworkSessionName, mgNetworkDifficulty, TRANS("Game type:"), astrGameTypeRadioTexts); - mgNetworkGameType.mg_ctTexts = ctGameTypeRadioTexts; - mgNetworkGameType.mg_strTip = TRANS("choose type of multiplayer game"); - mgNetworkGameType.mg_pOnTriggerChange = &UpdateNetworkLevel; - - // difficulty trigger - TRIGGER_MG(mgNetworkDifficulty, 3, - mgNetworkGameType, mgNetworkLevel, TRANS("Difficulty:"), astrDifficultyRadioTexts); - mgNetworkDifficulty.mg_strTip = TRANS("choose difficulty level"); - - // level name - mgNetworkLevel.mg_strText = ""; - mgNetworkLevel.mg_strLabel = TRANS("Level:"); - mgNetworkLevel.mg_boxOnScreen = BoxMediumRow(4); - mgNetworkLevel.mg_bfsFontSize = BFS_MEDIUM; - mgNetworkLevel.mg_iCenterI = -1; - mgNetworkLevel.mg_pmgUp = &mgNetworkDifficulty; - mgNetworkLevel.mg_pmgDown = &mgNetworkMaxPlayers; - mgNetworkLevel.mg_strTip = TRANS("choose the level to start"); - mgNetworkLevel.mg_pActivatedFunction = &StartSelectLevelFromNetwork; - gm_lhGadgets.AddTail( mgNetworkLevel.mg_lnNode); - - // max players trigger - TRIGGER_MG(mgNetworkMaxPlayers, 5, - mgNetworkLevel, mgNetworkWaitAllPlayers, TRANS("Max players:"), astrMaxPlayersRadioTexts); - mgNetworkMaxPlayers.mg_strTip = TRANS("choose maximum allowed number of players"); - - // wait all players trigger - TRIGGER_MG(mgNetworkWaitAllPlayers, 6, - mgNetworkMaxPlayers, mgNetworkVisible, TRANS("Wait for all players:"), astrNoYes); - mgNetworkWaitAllPlayers.mg_strTip = TRANS("if on, game won't start until all players have joined"); - - // server visible trigger - TRIGGER_MG(mgNetworkVisible, 7, - mgNetworkMaxPlayers, mgNetworkGameOptions, TRANS("Server visible:"), astrNoYes); - mgNetworkVisible.mg_strTip = TRANS("invisible servers are not listed, cleints have to join manually"); - - // options button - mgNetworkGameOptions.mg_strText = TRANS("Game options"); - mgNetworkGameOptions.mg_boxOnScreen = BoxMediumRow(8); - mgNetworkGameOptions.mg_bfsFontSize = BFS_MEDIUM; - mgNetworkGameOptions.mg_iCenterI = 0; - mgNetworkGameOptions.mg_pmgUp = &mgNetworkVisible; - mgNetworkGameOptions.mg_pmgDown = &mgNetworkStartStart; - mgNetworkGameOptions.mg_strTip = TRANS("adjust game rules"); - mgNetworkGameOptions.mg_pActivatedFunction = &StartGameOptionsFromNetwork; - gm_lhGadgets.AddTail( mgNetworkGameOptions.mg_lnNode); - - // start button - mgNetworkStartStart.mg_bfsFontSize = BFS_LARGE; - mgNetworkStartStart.mg_boxOnScreen = BoxBigRow(7); - mgNetworkStartStart.mg_pmgUp = &mgNetworkGameOptions; - mgNetworkStartStart.mg_pmgDown = &mgNetworkSessionName; - mgNetworkStartStart.mg_strText = TRANS("START"); - gm_lhGadgets.AddTail( mgNetworkStartStart.mg_lnNode); - mgNetworkStartStart.mg_pActivatedFunction = &StartSelectPlayersMenuFromNetwork; -} - -void CNetworkStartMenu::StartMenu(void) -{ - extern INDEX sam_bMentalActivated; - mgNetworkDifficulty.mg_ctTexts = sam_bMentalActivated?6:5; - - mgNetworkGameType.mg_iSelected = Clamp(_pShell->GetINDEX("gam_iStartMode"), 0L, ctGameTypeRadioTexts-1L); - mgNetworkGameType.ApplyCurrentSelection(); - mgNetworkDifficulty.mg_iSelected = _pShell->GetINDEX("gam_iStartDifficulty")+1; - mgNetworkDifficulty.ApplyCurrentSelection(); - - _pShell->SetINDEX("gam_iStartMode", CSessionProperties::GM_COOPERATIVE); - - INDEX ctMaxPlayers = _pShell->GetINDEX("gam_ctMaxPlayers"); - if (ctMaxPlayers<2 || ctMaxPlayers>16) { - ctMaxPlayers = 2; - _pShell->SetINDEX("gam_ctMaxPlayers", ctMaxPlayers); - } - - mgNetworkMaxPlayers.mg_iSelected = ctMaxPlayers-2; - mgNetworkMaxPlayers.ApplyCurrentSelection(); - - mgNetworkWaitAllPlayers.mg_iSelected = Clamp(_pShell->GetINDEX("gam_bWaitAllPlayers"), 0L, 1L); - mgNetworkWaitAllPlayers.ApplyCurrentSelection(); - - mgNetworkVisible.mg_iSelected = _pShell->GetINDEX("ser_bEnumeration"); - mgNetworkVisible.ApplyCurrentSelection(); - - UpdateNetworkLevel(0); - - CGameMenu::StartMenu(); -} - -void CNetworkStartMenu::EndMenu(void) -{ - _pShell->SetINDEX("gam_iStartDifficulty", mgNetworkDifficulty.mg_iSelected-1); - _pShell->SetINDEX("gam_iStartMode", mgNetworkGameType.mg_iSelected); - _pShell->SetINDEX("gam_bWaitAllPlayers", mgNetworkWaitAllPlayers.mg_iSelected); - _pShell->SetINDEX("gam_ctMaxPlayers", mgNetworkMaxPlayers.mg_iSelected+2); - _pShell->SetINDEX("ser_bEnumeration", mgNetworkVisible.mg_iSelected); - - CGameMenu::EndMenu(); + gmNetworkStartMenu.gm_mgLevel.mg_pActivatedFunction = &StartSelectLevelFromNetwork; + gmNetworkStartMenu.gm_mgGameOptions.mg_pActivatedFunction = &StartGameOptionsFromNetwork; + gmNetworkStartMenu.gm_mgStart.mg_pActivatedFunction = &StartSelectPlayersMenuFromNetwork; } +// #define ADD_GADGET( gd, box, up, dn, lf, rt, txt) \ gd.mg_boxOnScreen = box;\ gd.mg_pmgUp = up;\ @@ -4636,44 +4276,44 @@ INDEX FindUnusedPlayer(void) return iPlayer; } -void SelectPlayersFillMenu(void) +extern void SelectPlayersFillMenu(void) { INDEX *ai = _pGame->gm_aiMenuLocalPlayers; - mgPlayer0Change.mg_iLocalPlayer = 0; - mgPlayer1Change.mg_iLocalPlayer = 1; - mgPlayer2Change.mg_iLocalPlayer = 2; - mgPlayer3Change.mg_iLocalPlayer = 3; + gmSelectPlayersMenu.gm_mgPlayer0Change.mg_iLocalPlayer = 0; + gmSelectPlayersMenu.gm_mgPlayer1Change.mg_iLocalPlayer = 1; + gmSelectPlayersMenu.gm_mgPlayer2Change.mg_iLocalPlayer = 2; + gmSelectPlayersMenu.gm_mgPlayer3Change.mg_iLocalPlayer = 3; if (gmSelectPlayersMenu.gm_bAllowDedicated && _pGame->gm_MenuSplitScreenCfg==CGame::SSC_DEDICATED) { - mgDedicated.mg_iSelected = 1; + gmSelectPlayersMenu.gm_mgDedicated.mg_iSelected = 1; } else { - mgDedicated.mg_iSelected = 0; + gmSelectPlayersMenu.gm_mgDedicated.mg_iSelected = 0; } - mgDedicated.ApplyCurrentSelection(); + gmSelectPlayersMenu.gm_mgDedicated.ApplyCurrentSelection(); if (gmSelectPlayersMenu.gm_bAllowObserving && _pGame->gm_MenuSplitScreenCfg==CGame::SSC_OBSERVER) { - mgObserver.mg_iSelected = 1; + gmSelectPlayersMenu.gm_mgObserver.mg_iSelected = 1; } else { - mgObserver.mg_iSelected = 0; + gmSelectPlayersMenu.gm_mgObserver.mg_iSelected = 0; } - mgObserver.ApplyCurrentSelection(); + gmSelectPlayersMenu.gm_mgObserver.ApplyCurrentSelection(); if (_pGame->gm_MenuSplitScreenCfg>=CGame::SSC_PLAY1) { - mgSplitScreenCfg.mg_iSelected = _pGame->gm_MenuSplitScreenCfg; - mgSplitScreenCfg.ApplyCurrentSelection(); + gmSelectPlayersMenu.gm_mgSplitScreenCfg.mg_iSelected = _pGame->gm_MenuSplitScreenCfg; + gmSelectPlayersMenu.gm_mgSplitScreenCfg.ApplyCurrentSelection(); } BOOL bHasDedicated = gmSelectPlayersMenu.gm_bAllowDedicated; BOOL bHasObserver = gmSelectPlayersMenu.gm_bAllowObserving; BOOL bHasPlayers = TRUE; - if (bHasDedicated && mgDedicated.mg_iSelected) { + if (bHasDedicated && gmSelectPlayersMenu.gm_mgDedicated.mg_iSelected) { bHasObserver = FALSE; bHasPlayers = FALSE; } - if (bHasObserver && mgObserver.mg_iSelected) { + if (bHasObserver && gmSelectPlayersMenu.gm_mgObserver.mg_iSelected) { bHasPlayers = FALSE; } @@ -4682,16 +4322,16 @@ void SelectPlayersFillMenu(void) INDEX i=0; if (bHasDedicated) { - mgDedicated.Appear(); - apmg[i++] = &mgDedicated; + gmSelectPlayersMenu.gm_mgDedicated.Appear(); + apmg[i++] = &gmSelectPlayersMenu.gm_mgDedicated; } else { - mgDedicated.Disappear(); + gmSelectPlayersMenu.gm_mgDedicated.Disappear(); } if (bHasObserver) { - mgObserver.Appear(); - apmg[i++] = &mgObserver; + gmSelectPlayersMenu.gm_mgObserver.Appear(); + apmg[i++] = &gmSelectPlayersMenu.gm_mgObserver; } else { - mgObserver.Disappear(); + gmSelectPlayersMenu.gm_mgObserver.Disappear(); } for (INDEX iLocal=0; iLocal<4; iLocal++) { @@ -4705,32 +4345,32 @@ void SelectPlayersFillMenu(void) } } - mgPlayer0Change.Disappear(); - mgPlayer1Change.Disappear(); - mgPlayer2Change.Disappear(); - mgPlayer3Change.Disappear(); + gmSelectPlayersMenu.gm_mgPlayer0Change.Disappear(); + gmSelectPlayersMenu.gm_mgPlayer1Change.Disappear(); + gmSelectPlayersMenu.gm_mgPlayer2Change.Disappear(); + gmSelectPlayersMenu.gm_mgPlayer3Change.Disappear(); if (bHasPlayers) { - mgSplitScreenCfg.Appear(); - apmg[i++] = &mgSplitScreenCfg; - mgPlayer0Change.Appear(); - apmg[i++] = &mgPlayer0Change; - if (mgSplitScreenCfg.mg_iSelected>=1) { - mgPlayer1Change.Appear(); - apmg[i++] = &mgPlayer1Change; + gmSelectPlayersMenu.gm_mgSplitScreenCfg.Appear(); + apmg[i++] = &gmSelectPlayersMenu.gm_mgSplitScreenCfg; + gmSelectPlayersMenu.gm_mgPlayer0Change.Appear(); + apmg[i++] = &gmSelectPlayersMenu.gm_mgPlayer0Change; + if (gmSelectPlayersMenu.gm_mgSplitScreenCfg.mg_iSelected >= 1) { + gmSelectPlayersMenu.gm_mgPlayer1Change.Appear(); + apmg[i++] = &gmSelectPlayersMenu.gm_mgPlayer1Change; } - if (mgSplitScreenCfg.mg_iSelected>=2) { - mgPlayer2Change.Appear(); - apmg[i++] = &mgPlayer2Change; + if (gmSelectPlayersMenu.gm_mgSplitScreenCfg.mg_iSelected >= 2) { + gmSelectPlayersMenu.gm_mgPlayer2Change.Appear(); + apmg[i++] = &gmSelectPlayersMenu.gm_mgPlayer2Change; } - if (mgSplitScreenCfg.mg_iSelected>=3) { - mgPlayer3Change.Appear(); - apmg[i++] = &mgPlayer3Change; + if (gmSelectPlayersMenu.gm_mgSplitScreenCfg.mg_iSelected >= 3) { + gmSelectPlayersMenu.gm_mgPlayer3Change.Appear(); + apmg[i++] = &gmSelectPlayersMenu.gm_mgPlayer3Change; } } else { - mgSplitScreenCfg.Disappear(); + gmSelectPlayersMenu.gm_mgSplitScreenCfg.Disappear(); } - apmg[i++] = &mgSelectPlayersStart; + apmg[i++] = &gmSelectPlayersMenu.gm_mgStart; // relink for (INDEX img=0; img<8; img++) { @@ -4753,31 +4393,31 @@ void SelectPlayersFillMenu(void) apmg[img]->mg_pmgDown = apmg[imgSucc]; } - mgPlayer0Change.SetPlayerText(); - mgPlayer1Change.SetPlayerText(); - mgPlayer2Change.SetPlayerText(); - mgPlayer3Change.SetPlayerText(); + gmSelectPlayersMenu.gm_mgPlayer0Change.SetPlayerText(); + gmSelectPlayersMenu.gm_mgPlayer1Change.SetPlayerText(); + gmSelectPlayersMenu.gm_mgPlayer2Change.SetPlayerText(); + gmSelectPlayersMenu.gm_mgPlayer3Change.SetPlayerText(); - if (bHasPlayers && mgSplitScreenCfg.mg_iSelected>=1) { - mgSelectPlayersNotes.mg_strText = TRANS("Make sure you set different controls for each player!"); + if (bHasPlayers && gmSelectPlayersMenu.gm_mgSplitScreenCfg.mg_iSelected>=1) { + gmSelectPlayersMenu.gm_mgNotes.mg_strText = TRANS("Make sure you set different controls for each player!"); } else { - mgSelectPlayersNotes.mg_strText = ""; + gmSelectPlayersMenu.gm_mgNotes.mg_strText = ""; } } -void SelectPlayersApplyMenu(void) +extern void SelectPlayersApplyMenu(void) { - if (gmSelectPlayersMenu.gm_bAllowDedicated && mgDedicated.mg_iSelected) { + if (gmSelectPlayersMenu.gm_bAllowDedicated && gmSelectPlayersMenu.gm_mgDedicated.mg_iSelected) { _pGame->gm_MenuSplitScreenCfg = CGame::SSC_DEDICATED; return; } - if (gmSelectPlayersMenu.gm_bAllowObserving && mgObserver.mg_iSelected) { + if (gmSelectPlayersMenu.gm_bAllowObserving && gmSelectPlayersMenu.gm_mgObserver.mg_iSelected) { _pGame->gm_MenuSplitScreenCfg = CGame::SSC_OBSERVER; return; } - _pGame->gm_MenuSplitScreenCfg = (enum CGame::SplitScreenCfg) mgSplitScreenCfg.mg_iSelected; + _pGame->gm_MenuSplitScreenCfg = (enum CGame::SplitScreenCfg) gmSelectPlayersMenu.gm_mgSplitScreenCfg.mg_iSelected; } void UpdateSelectPlayers(INDEX i) @@ -4786,91 +4426,13 @@ void UpdateSelectPlayers(INDEX i) SelectPlayersFillMenu(); } -void CSelectPlayersMenu::Initialize_t(void) +void InitActionsForSelectPlayersMenu() { - // intialize split screen menu - mgSelectPlayerTitle.mg_boxOnScreen = BoxTitle(); - mgSelectPlayerTitle.mg_strText = TRANS("SELECT PLAYERS"); - gm_lhGadgets.AddTail( mgSelectPlayerTitle.mg_lnNode); - - TRIGGER_MG(mgDedicated, 0, mgSelectPlayersStart, mgObserver, TRANS("Dedicated:"), astrNoYes); - mgDedicated.mg_strTip = TRANS("select to start dedicated server"); - mgDedicated.mg_pOnTriggerChange = UpdateSelectPlayers; - - TRIGGER_MG(mgObserver, 1, mgDedicated, mgSplitScreenCfg, TRANS("Observer:"), astrNoYes); - mgObserver.mg_strTip = TRANS("select to join in for observing, not for playing"); - mgObserver.mg_pOnTriggerChange = UpdateSelectPlayers; - - // split screen config trigger - TRIGGER_MG(mgSplitScreenCfg, 2, mgObserver, mgPlayer0Change, TRANS("Number of players:"), astrSplitScreenRadioTexts); - mgSplitScreenCfg.mg_strTip = TRANS("choose more than one player to play in split screen"); - mgSplitScreenCfg.mg_pOnTriggerChange = UpdateSelectPlayers; - - mgPlayer0Change.mg_iCenterI = -1; - mgPlayer1Change.mg_iCenterI = -1; - mgPlayer2Change.mg_iCenterI = -1; - mgPlayer3Change.mg_iCenterI = -1; - mgPlayer0Change.mg_boxOnScreen = BoxMediumMiddle(4); - mgPlayer1Change.mg_boxOnScreen = BoxMediumMiddle(5); - mgPlayer2Change.mg_boxOnScreen = BoxMediumMiddle(6); - mgPlayer3Change.mg_boxOnScreen = BoxMediumMiddle(7); - mgPlayer0Change.mg_strTip = - mgPlayer1Change.mg_strTip = - mgPlayer2Change.mg_strTip = - mgPlayer3Change.mg_strTip = TRANS("select profile for this player"); - gm_lhGadgets.AddTail( mgPlayer0Change.mg_lnNode); - gm_lhGadgets.AddTail( mgPlayer1Change.mg_lnNode); - gm_lhGadgets.AddTail( mgPlayer2Change.mg_lnNode); - gm_lhGadgets.AddTail( mgPlayer3Change.mg_lnNode); - - mgSelectPlayersNotes.mg_boxOnScreen = BoxMediumRow(9.0); - mgSelectPlayersNotes.mg_bfsFontSize = BFS_MEDIUM; - mgSelectPlayersNotes.mg_iCenterI = -1; - mgSelectPlayersNotes.mg_bEnabled = FALSE; - mgSelectPlayersNotes.mg_bLabel = TRUE; - gm_lhGadgets.AddTail( mgSelectPlayersNotes.mg_lnNode); - mgSelectPlayersNotes.mg_strText = ""; - - /* // options button - mgSplitOptions.mg_strText = TRANS("Game options"); - mgSplitOptions.mg_boxOnScreen = BoxMediumRow(3); - mgSplitOptions.mg_bfsFontSize = BFS_MEDIUM; - mgSplitOptions.mg_iCenterI = 0; - mgSplitOptions.mg_pmgUp = &mgSplitLevel; - mgSplitOptions.mg_pmgDown = &mgSplitStartStart; - mgSplitOptions.mg_strTip = TRANS("adjust game rules"); - mgSplitOptions.mg_pActivatedFunction = &StartGameOptionsFromSplitScreen; - gm_lhGadgets.AddTail( mgSplitOptions.mg_lnNode);*/ - -/* // start button - mgSplitStartStart.mg_bfsFontSize = BFS_LARGE; - mgSplitStartStart.mg_boxOnScreen = BoxBigRow(4); - mgSplitStartStart.mg_pmgUp = &mgSplitOptions; - mgSplitStartStart.mg_pmgDown = &mgSplitGameType; - mgSplitStartStart.mg_strText = TRANS("START"); - gm_lhGadgets.AddTail( mgSplitStartStart.mg_lnNode); - mgSplitStartStart.mg_pActivatedFunction = &StartSelectPlayersMenuFromSplit; -*/ - - ADD_GADGET( mgSelectPlayersStart, BoxMediumRow(11), &mgSplitScreenCfg, &mgPlayer0Change, NULL, NULL, TRANS("START")); - mgSelectPlayersStart.mg_bfsFontSize = BFS_LARGE; - mgSelectPlayersStart.mg_iCenterI = 0; + gmSelectPlayersMenu.gm_mgDedicated.mg_pOnTriggerChange = UpdateSelectPlayers; + gmSelectPlayersMenu.gm_mgObserver.mg_pOnTriggerChange = UpdateSelectPlayers; + gmSelectPlayersMenu.gm_mgSplitScreenCfg.mg_pOnTriggerChange = UpdateSelectPlayers; } -void CSelectPlayersMenu::StartMenu(void) -{ - CGameMenu::StartMenu(); - SelectPlayersFillMenu(); - SelectPlayersApplyMenu(); -} - -void CSelectPlayersMenu::EndMenu(void) -{ - SelectPlayersApplyMenu(); - CGameMenu::EndMenu(); -} - - // ------------------------ CNetworkOpenMenu implementation void InitActionsForNetworkOpenMenu() { diff --git a/Sources/SeriousSam/MenuStuff.cpp b/Sources/SeriousSam/MenuStuff.cpp index 735252b..8713855 100644 --- a/Sources/SeriousSam/MenuStuff.cpp +++ b/Sources/SeriousSam/MenuStuff.cpp @@ -5,6 +5,111 @@ #include "MenuStuff.h" +#define RADIOTRANS(str) ("ETRS" str) + +extern CTString astrNoYes[] = { + RADIOTRANS("No"), + RADIOTRANS("Yes"), +}; + +extern CTString astrComputerInvoke[] = { + RADIOTRANS("Use"), + RADIOTRANS("Double-click use"), +}; + +extern CTString astrWeapon[] = { + RADIOTRANS("Only if new"), + RADIOTRANS("Never"), + RADIOTRANS("Always"), + RADIOTRANS("Only if stronger"), +}; + +extern CTString astrCrosshair[] = { + "", + "Textures\\Interface\\Crosshairs\\Crosshair1.tex", + "Textures\\Interface\\Crosshairs\\Crosshair2.tex", + "Textures\\Interface\\Crosshairs\\Crosshair3.tex", + "Textures\\Interface\\Crosshairs\\Crosshair4.tex", + "Textures\\Interface\\Crosshairs\\Crosshair5.tex", + "Textures\\Interface\\Crosshairs\\Crosshair6.tex", + "Textures\\Interface\\Crosshairs\\Crosshair7.tex", +}; + +extern CTString astrMaxPlayersRadioTexts[] = { + RADIOTRANS("2"), + RADIOTRANS("3"), + RADIOTRANS("4"), + RADIOTRANS("5"), + RADIOTRANS("6"), + RADIOTRANS("7"), + RADIOTRANS("8"), + RADIOTRANS("9"), + RADIOTRANS("10"), + RADIOTRANS("11"), + RADIOTRANS("12"), + RADIOTRANS("13"), + RADIOTRANS("14"), + RADIOTRANS("15"), + RADIOTRANS("16"), +}; +// here, we just reserve space for up to 16 different game types +// actual names are added later +extern CTString astrGameTypeRadioTexts[] = { + "", "", "", "", "", + "", "", "", "", "", + "", "", "", "", "", + "", "", "", "", "", +}; + +extern INDEX ctGameTypeRadioTexts = 1; + +extern CTString astrDifficultyRadioTexts[] = { + RADIOTRANS("Tourist"), + RADIOTRANS("Easy"), + RADIOTRANS("Normal"), + RADIOTRANS("Hard"), + RADIOTRANS("Serious"), + RADIOTRANS("Mental"), +}; + +extern CTString astrSplitScreenRadioTexts[] = { + RADIOTRANS("1"), + RADIOTRANS("2 - split screen"), + RADIOTRANS("3 - split screen"), + RADIOTRANS("4 - split screen"), +}; + +extern CTString astrDisplayPrefsRadioTexts[] = { + RADIOTRANS("Speed"), + RADIOTRANS("Normal"), + RADIOTRANS("Quality"), + RADIOTRANS("Custom"), +}; + +extern CTString astrDisplayAPIRadioTexts[] = { + RADIOTRANS("OpenGL"), + RADIOTRANS("Direct3D"), +}; + +extern CTString astrBitsPerPixelRadioTexts[] = { + RADIOTRANS("Desktop"), + RADIOTRANS("16 BPP"), + RADIOTRANS("32 BPP"), +}; + +extern CTString astrFrequencyRadioTexts[] = { + RADIOTRANS("No sound"), + RADIOTRANS("11kHz"), + RADIOTRANS("22kHz"), + RADIOTRANS("44kHz"), +}; + +extern CTString astrSoundAPIRadioTexts[] = { + RADIOTRANS("WaveOut"), + RADIOTRANS("DirectSound"), + RADIOTRANS("EAX"), +}; + ULONG GetSpawnFlagsForGameType(INDEX iGameType) { if (iGameType == -1) return SPF_SINGLEPLAYER; diff --git a/Sources/SeriousSam/MenuStuff.h b/Sources/SeriousSam/MenuStuff.h index afbdd4a..efc7a68 100644 --- a/Sources/SeriousSam/MenuStuff.h +++ b/Sources/SeriousSam/MenuStuff.h @@ -6,6 +6,22 @@ #pragma once #endif +extern INDEX ctGameTypeRadioTexts; + +extern CTString astrNoYes[2]; +extern CTString astrWeapon[4]; +extern CTString astrComputerInvoke[2]; +extern CTString astrCrosshair[8]; +extern CTString astrMaxPlayersRadioTexts[15]; +extern CTString astrGameTypeRadioTexts[20]; +extern CTString astrDifficultyRadioTexts[6]; +extern CTString astrSplitScreenRadioTexts[4]; +extern CTString astrDisplayPrefsRadioTexts[4]; +extern CTString astrDisplayAPIRadioTexts[2]; +extern CTString astrBitsPerPixelRadioTexts[3]; +extern CTString astrFrequencyRadioTexts[4]; +extern CTString astrSoundAPIRadioTexts[3]; + ULONG GetSpawnFlagsForGameType(INDEX iGameType); BOOL IsMenuEnabled(const CTString &strMenuName); diff --git a/Sources/SeriousSam/SeriousSam.vcxproj b/Sources/SeriousSam/SeriousSam.vcxproj index 39a8681..813b63d 100644 --- a/Sources/SeriousSam/SeriousSam.vcxproj +++ b/Sources/SeriousSam/SeriousSam.vcxproj @@ -219,7 +219,10 @@ copy Release\$(TargetName).map $(SolutionDir)..\Bin\ >nul + + + diff --git a/Sources/SeriousSam/SeriousSam.vcxproj.filters b/Sources/SeriousSam/SeriousSam.vcxproj.filters index 28357aa..132d40c 100644 --- a/Sources/SeriousSam/SeriousSam.vcxproj.filters +++ b/Sources/SeriousSam/SeriousSam.vcxproj.filters @@ -111,9 +111,6 @@ Source Files\Gadgets - - Header Files - Source Files @@ -171,6 +168,15 @@ Source Files\Menus + + Source Files\Menus + + + Source Files\Menus + + + Source Files\Menus + @@ -350,6 +356,9 @@ Header Files\Menus headers + + Header Files +