diff --git a/Sources/SeriousSam/MNetworkJoin.cpp b/Sources/SeriousSam/MNetworkJoin.cpp new file mode 100644 index 0000000..6afc217 --- /dev/null +++ b/Sources/SeriousSam/MNetworkJoin.cpp @@ -0,0 +1,43 @@ +/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */ + +#include "StdH.h" +#include +#include "MenuPrinting.h" +#include "MenuStuff.h" +#include "MNetworkJoin.h" + + +void CNetworkJoinMenu::Initialize_t(void) +{ + // title + gm_mgTitle.mg_boxOnScreen = BoxTitle(); + gm_mgTitle.mg_strText = TRANS("JOIN GAME"); + gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode); + + gm_mgLAN.mg_bfsFontSize = BFS_LARGE; + gm_mgLAN.mg_boxOnScreen = BoxBigRow(1.0f); + gm_mgLAN.mg_pmgUp = &gm_mgOpen; + gm_mgLAN.mg_pmgDown = &gm_mgNET; + gm_mgLAN.mg_strText = TRANS("SEARCH LAN"); + gm_mgLAN.mg_strTip = TRANS("search local network for servers"); + gm_lhGadgets.AddTail(gm_mgLAN.mg_lnNode); + gm_mgLAN.mg_pActivatedFunction = NULL; + + gm_mgNET.mg_bfsFontSize = BFS_LARGE; + gm_mgNET.mg_boxOnScreen = BoxBigRow(2.0f); + gm_mgNET.mg_pmgUp = &gm_mgLAN; + gm_mgNET.mg_pmgDown = &gm_mgOpen; + gm_mgNET.mg_strText = TRANS("SEARCH INTERNET"); + gm_mgNET.mg_strTip = TRANS("search internet for servers"); + gm_lhGadgets.AddTail(gm_mgNET.mg_lnNode); + gm_mgNET.mg_pActivatedFunction = NULL; + + gm_mgOpen.mg_bfsFontSize = BFS_LARGE; + gm_mgOpen.mg_boxOnScreen = BoxBigRow(3.0f); + gm_mgOpen.mg_pmgUp = &gm_mgNET; + gm_mgOpen.mg_pmgDown = &gm_mgLAN; + gm_mgOpen.mg_strText = TRANS("SPECIFY SERVER"); + gm_mgOpen.mg_strTip = TRANS("type in server address to connect to"); + gm_lhGadgets.AddTail(gm_mgOpen.mg_lnNode); + gm_mgOpen.mg_pActivatedFunction = NULL; +} \ No newline at end of file diff --git a/Sources/SeriousSam/MNetworkJoin.h b/Sources/SeriousSam/MNetworkJoin.h index d38984e..0410a5e 100644 --- a/Sources/SeriousSam/MNetworkJoin.h +++ b/Sources/SeriousSam/MNetworkJoin.h @@ -7,10 +7,17 @@ #endif #include "GameMenu.h" +#include "MGButton.h" +#include "MGTitle.h" class CNetworkJoinMenu : public CGameMenu { public: + CMGTitle gm_mgTitle; + CMGButton gm_mgLAN; + CMGButton gm_mgNET; + CMGButton gm_mgOpen; + void Initialize_t(void); }; diff --git a/Sources/SeriousSam/MNetworkOpen.cpp b/Sources/SeriousSam/MNetworkOpen.cpp new file mode 100644 index 0000000..1dbdc55 --- /dev/null +++ b/Sources/SeriousSam/MNetworkOpen.cpp @@ -0,0 +1,66 @@ +/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */ + +#include "StdH.h" +#include +#include "MenuPrinting.h" +#include "MenuStuff.h" +#include "MNetworkOpen.h" + + +void CNetworkOpenMenu::Initialize_t(void) +{ + // intialize network join menu + gm_mgTitle.mg_boxOnScreen = BoxTitle(); + gm_mgTitle.mg_strText = TRANS("JOIN"); + gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode); + + gm_mgAddressLabel.mg_strText = TRANS("Address:"); + gm_mgAddressLabel.mg_boxOnScreen = BoxMediumLeft(1); + gm_mgAddressLabel.mg_iCenterI = -1; + gm_lhGadgets.AddTail(gm_mgAddressLabel.mg_lnNode); + + gm_mgAddress.mg_strText = _pGame->gam_strJoinAddress; + gm_mgAddress.mg_ctMaxStringLen = 20; + gm_mgAddress.mg_pstrToChange = &_pGame->gam_strJoinAddress; + gm_mgAddress.mg_boxOnScreen = BoxMediumMiddle(1); + gm_mgAddress.mg_bfsFontSize = BFS_MEDIUM; + gm_mgAddress.mg_iCenterI = -1; + gm_mgAddress.mg_pmgUp = &gm_mgJoin; + gm_mgAddress.mg_pmgDown = &gm_mgPort; + gm_mgAddress.mg_strTip = TRANS("specify server address"); + gm_lhGadgets.AddTail(gm_mgAddress.mg_lnNode); + + gm_mgPortLabel.mg_strText = TRANS("Port:"); + gm_mgPortLabel.mg_boxOnScreen = BoxMediumLeft(2); + gm_mgPortLabel.mg_iCenterI = -1; + gm_lhGadgets.AddTail(gm_mgPortLabel.mg_lnNode); + + gm_mgPort.mg_strText = ""; + gm_mgPort.mg_ctMaxStringLen = 10; + gm_mgPort.mg_pstrToChange = &gm_strPort; + gm_mgPort.mg_boxOnScreen = BoxMediumMiddle(2); + gm_mgPort.mg_bfsFontSize = BFS_MEDIUM; + gm_mgPort.mg_iCenterI = -1; + gm_mgPort.mg_pmgUp = &gm_mgAddress; + gm_mgPort.mg_pmgDown = &gm_mgJoin; + gm_mgPort.mg_strTip = TRANS("specify server address"); + gm_lhGadgets.AddTail(gm_mgPort.mg_lnNode); + + gm_mgJoin.mg_boxOnScreen = BoxMediumMiddle(3); + gm_mgJoin.mg_pmgUp = &gm_mgPort; + gm_mgJoin.mg_pmgDown = &gm_mgAddress; + gm_mgJoin.mg_strText = TRANS("Join"); + gm_lhGadgets.AddTail(gm_mgJoin.mg_lnNode); + gm_mgJoin.mg_pActivatedFunction = NULL; +} + +void CNetworkOpenMenu::StartMenu(void) +{ + gm_strPort = _pShell->GetValue("net_iPort"); + gm_mgPort.mg_strText = gm_strPort; +} + +void CNetworkOpenMenu::EndMenu(void) +{ + _pShell->SetValue("net_iPort", gm_strPort); +} \ No newline at end of file diff --git a/Sources/SeriousSam/MNetworkOpen.h b/Sources/SeriousSam/MNetworkOpen.h index c526b4e..5c8c51d 100644 --- a/Sources/SeriousSam/MNetworkOpen.h +++ b/Sources/SeriousSam/MNetworkOpen.h @@ -7,10 +7,21 @@ #endif #include "GameMenu.h" - +#include "MGButton.h" +#include "MGEdit.h" +#include "MGTitle.h" class CNetworkOpenMenu : public CGameMenu { public: + CTString gm_strPort; + + CMGTitle gm_mgTitle; + CMGButton gm_mgAddressLabel; + CMGEdit gm_mgAddress; + CMGButton gm_mgPortLabel; + CMGEdit gm_mgPort; + CMGButton gm_mgJoin; + void Initialize_t(void); void StartMenu(void); void EndMenu(void); diff --git a/Sources/SeriousSam/MSplitScreen.cpp b/Sources/SeriousSam/MSplitScreen.cpp new file mode 100644 index 0000000..9fbb57e --- /dev/null +++ b/Sources/SeriousSam/MSplitScreen.cpp @@ -0,0 +1,46 @@ +/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */ + +#include "StdH.h" +#include +#include "MenuPrinting.h" +#include "MSplitScreen.h" + +void CSplitScreenMenu::Initialize_t(void) +{ + // intialize split screen menu + gm_mgTitle.mg_boxOnScreen = BoxTitle(); + gm_mgTitle.mg_strText = TRANS("SPLIT SCREEN"); + gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode); + + gm_mgStart.mg_bfsFontSize = BFS_LARGE; + gm_mgStart.mg_boxOnScreen = BoxBigRow(0); + gm_mgStart.mg_pmgUp = &gm_mgLoad; + gm_mgStart.mg_pmgDown = &gm_mgQuickLoad; + gm_mgStart.mg_strText = TRANS("NEW GAME"); + gm_mgStart.mg_strTip = TRANS("start new split-screen game"); + gm_lhGadgets.AddTail(gm_mgStart.mg_lnNode); + gm_mgStart.mg_pActivatedFunction = NULL; + + gm_mgQuickLoad.mg_bfsFontSize = BFS_LARGE; + gm_mgQuickLoad.mg_boxOnScreen = BoxBigRow(1); + gm_mgQuickLoad.mg_pmgUp = &gm_mgStart; + gm_mgQuickLoad.mg_pmgDown = &gm_mgLoad; + gm_mgQuickLoad.mg_strText = TRANS("QUICK LOAD"); + gm_mgQuickLoad.mg_strTip = TRANS("load a quick-saved game (F9)"); + gm_lhGadgets.AddTail(gm_mgQuickLoad.mg_lnNode); + gm_mgQuickLoad.mg_pActivatedFunction = NULL; + + gm_mgLoad.mg_bfsFontSize = BFS_LARGE; + gm_mgLoad.mg_boxOnScreen = BoxBigRow(2); + gm_mgLoad.mg_pmgUp = &gm_mgQuickLoad; + gm_mgLoad.mg_pmgDown = &gm_mgStart; + gm_mgLoad.mg_strText = TRANS("LOAD"); + gm_mgLoad.mg_strTip = TRANS("load a saved split-screen game"); + gm_lhGadgets.AddTail(gm_mgLoad.mg_lnNode); + gm_mgLoad.mg_pActivatedFunction = NULL; +} + +void CSplitScreenMenu::StartMenu(void) +{ + CGameMenu::StartMenu(); +} \ No newline at end of file diff --git a/Sources/SeriousSam/MSplitScreen.h b/Sources/SeriousSam/MSplitScreen.h index 72592fd..721faea 100644 --- a/Sources/SeriousSam/MSplitScreen.h +++ b/Sources/SeriousSam/MSplitScreen.h @@ -7,10 +7,16 @@ #endif #include "GameMenu.h" - +#include "MGButton.h" +#include "MGTitle.h" class CSplitScreenMenu : public CGameMenu { public: + CMGTitle gm_mgTitle; + CMGButton gm_mgStart; + CMGButton gm_mgQuickLoad; + CMGButton gm_mgLoad; + void Initialize_t(void); void StartMenu(void); }; diff --git a/Sources/SeriousSam/MSplitStart.cpp b/Sources/SeriousSam/MSplitStart.cpp new file mode 100644 index 0000000..4266823 --- /dev/null +++ b/Sources/SeriousSam/MSplitStart.cpp @@ -0,0 +1,103 @@ +/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */ + +#include "StdH.h" +#include +#include "MenuPrinting.h" +#include "LevelInfo.h" +#include "MenuStuff.h" +#include "MSplitStart.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 UpdateSplitLevel(INDEX iDummy); +extern void SplitStartMenuSubInit(CSplitStartMenu* gm); + +void CSplitStartMenu::Initialize_t(void) +{ + // intialize split screen menu + gm_mgTitle.mg_boxOnScreen = BoxTitle(); + gm_mgTitle.mg_strText = TRANS("START SPLIT SCREEN"); + 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; + gm_mgGameType.mg_strTip = TRANS("choose type of multiplayer game"); + 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"); + + // level name + gm_mgLevel.mg_strText = ""; + gm_mgLevel.mg_strLabel = TRANS("Level:"); + gm_mgLevel.mg_boxOnScreen = BoxMediumRow(2); + gm_mgLevel.mg_bfsFontSize = BFS_MEDIUM; + gm_mgLevel.mg_iCenterI = -1; + gm_mgLevel.mg_pmgUp = &gm_mgDifficulty; + gm_mgLevel.mg_pmgDown = &gm_mgOptions; + gm_mgLevel.mg_strTip = TRANS("choose the level to start"); + gm_mgLevel.mg_pActivatedFunction = NULL; + gm_lhGadgets.AddTail(gm_mgLevel.mg_lnNode); + + // options button + gm_mgOptions.mg_strText = TRANS("Game options"); + gm_mgOptions.mg_boxOnScreen = BoxMediumRow(3); + gm_mgOptions.mg_bfsFontSize = BFS_MEDIUM; + gm_mgOptions.mg_iCenterI = 0; + gm_mgOptions.mg_pmgUp = &gm_mgLevel; + gm_mgOptions.mg_pmgDown = &gm_mgStart; + gm_mgOptions.mg_strTip = TRANS("adjust game rules"); + gm_mgOptions.mg_pActivatedFunction = NULL; + gm_lhGadgets.AddTail(gm_mgOptions.mg_lnNode); + + // start button + gm_mgStart.mg_bfsFontSize = BFS_LARGE; + gm_mgStart.mg_boxOnScreen = BoxBigRow(4); + gm_mgStart.mg_pmgUp = &gm_mgOptions; + gm_mgStart.mg_pmgDown = &gm_mgGameType; + gm_mgStart.mg_strText = TRANS("START"); + gm_lhGadgets.AddTail(gm_mgStart.mg_lnNode); + gm_mgStart.mg_pActivatedFunction = NULL; +} + +void CSplitStartMenu::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(); + + // clamp maximum number of players to at least 4 + _pShell->SetINDEX("gam_ctMaxPlayers", ClampDn(_pShell->GetINDEX("gam_ctMaxPlayers"), 4L)); + + UpdateSplitLevel(0); + CGameMenu::StartMenu(); +} + +void CSplitStartMenu::EndMenu(void) +{ + _pShell->SetINDEX("gam_iStartDifficulty", gm_mgDifficulty.mg_iSelected - 1); + _pShell->SetINDEX("gam_iStartMode", gm_mgGameType.mg_iSelected); + + CGameMenu::EndMenu(); +} \ No newline at end of file diff --git a/Sources/SeriousSam/MSplitStart.h b/Sources/SeriousSam/MSplitStart.h index 832a52c..1ed2838 100644 --- a/Sources/SeriousSam/MSplitStart.h +++ b/Sources/SeriousSam/MSplitStart.h @@ -7,10 +7,19 @@ #endif #include "GameMenu.h" - +#include "MGButton.h" +#include "MGTitle.h" +#include "MGTrigger.h" class CSplitStartMenu : public CGameMenu { public: + CMGTitle gm_mgTitle; + CMGTrigger gm_mgGameType; + CMGTrigger gm_mgDifficulty; + CMGButton gm_mgLevel; + CMGButton gm_mgOptions; + CMGButton gm_mgStart; + void Initialize_t(void); void StartMenu(void); void EndMenu(void); diff --git a/Sources/SeriousSam/Menu.cpp b/Sources/SeriousSam/Menu.cpp index e81e157..dee47a1 100644 --- a/Sources/SeriousSam/Menu.cpp +++ b/Sources/SeriousSam/Menu.cpp @@ -106,8 +106,12 @@ void (*_pAfterLevelChosen)(void); void InitActionsForConfirmMenu(); void InitActionsForMainMenu(); void InitActionsForInGameMenu(); +void InitActionsForNetworkJoinMenu(); +void InitActionsForNetworkOpenMenu(); void InitActionsForSinglePlayerMenu(); void InitActionsForSinglePlayerNewMenu(); +void InitActionsForSplitScreenMenu(); +void InitActionsForSplitStartMenu(); void InitActionsForVarMenu(); @@ -257,14 +261,15 @@ CTString astrMaxPlayersRadioTexts[] = { }; // here, we just reserve space for up to 16 different game types // actual names are added later -CTString astrGameTypeRadioTexts[] = { +extern CTString astrGameTypeRadioTexts[] = { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", }; -INDEX ctGameTypeRadioTexts = 1; -CTString astrDifficultyRadioTexts[] = { + +extern INDEX ctGameTypeRadioTexts = 1; +extern CTString astrDifficultyRadioTexts[] = { RADIOTRANS("Tourist"), RADIOTRANS("Easy"), RADIOTRANS("Normal"), @@ -272,6 +277,7 @@ CTString astrDifficultyRadioTexts[] = { RADIOTRANS("Serious"), RADIOTRANS("Mental"), }; + CTString astrSplitScreenRadioTexts[] = { RADIOTRANS( "1"), RADIOTRANS( "2 - split screen"), @@ -457,10 +463,6 @@ CMGButton mgNetworkLoad; // -------- Network join menu CNetworkJoinMenu gmNetworkJoinMenu; -CMGTitle mgNetworkJoinTitle; -CMGButton mgNetworkJoinLAN; -CMGButton mgNetworkJoinNET; -CMGButton mgNetworkJoinOpen; // -------- Network start menu CNetworkStartMenu gmNetworkStartMenu; @@ -477,28 +479,12 @@ CMGButton mgNetworkStartStart; // -------- Network open menu CNetworkOpenMenu gmNetworkOpenMenu; -CMGTitle mgNetworkOpenTitle; -CMGButton mgNetworkOpenAddressLabel; -CMGEdit mgNetworkOpenAddress; -CMGButton mgNetworkOpenPortLabel; -CMGEdit mgNetworkOpenPort; -CMGButton mgNetworkOpenJoin; // -------- Split screen menu CSplitScreenMenu gmSplitScreenMenu; -CMGTitle mgSplitScreenTitle; -CMGButton mgSplitScreenStart; -CMGButton mgSplitScreenQuickLoad; -CMGButton mgSplitScreenLoad; // -------- Split screen start menu CSplitStartMenu gmSplitStartMenu; -CMGTitle mgSplitStartTitle; -CMGTrigger mgSplitGameType; -CMGTrigger mgSplitDifficulty; -CMGButton mgSplitLevel; -CMGButton mgSplitOptions; -CMGButton mgSplitStartStart; // -------- Select players menu CSelectPlayersMenu gmSelectPlayersMenu; @@ -1285,7 +1271,7 @@ void StartSelectServerNET(void) void StartSelectLevelFromSplit(void) { - FilterLevels(GetSpawnFlagsForGameType(mgSplitGameType.mg_iSelected)); + FilterLevels(GetSpawnFlagsForGameType(gmSplitStartMenu.gm_mgGameType.mg_iSelected)); void StartSplitStartMenu(void); _pAfterLevelChosen = StartSplitStartMenu; ChangeToMenu( &gmLevelsMenu); @@ -2277,8 +2263,9 @@ void InitializeMenus(void) gmNetworkJoinMenu.Initialize_t(); gmNetworkJoinMenu.gm_strName="NetworkJoin"; - gmNetworkJoinMenu.gm_pmgSelectedByDefault = &mgNetworkJoinLAN; + gmNetworkJoinMenu.gm_pmgSelectedByDefault = &gmNetworkJoinMenu.gm_mgLAN; gmNetworkJoinMenu.gm_pgmParentMenu = &gmNetworkMenu; + InitActionsForNetworkJoinMenu(); gmSelectPlayersMenu.gm_bAllowDedicated = FALSE; gmSelectPlayersMenu.gm_bAllowObserving = FALSE; @@ -2288,18 +2275,21 @@ void InitializeMenus(void) gmNetworkOpenMenu.Initialize_t(); gmNetworkOpenMenu.gm_strName="NetworkOpen"; - gmNetworkOpenMenu.gm_pmgSelectedByDefault = &mgNetworkOpenJoin; + gmNetworkOpenMenu.gm_pmgSelectedByDefault = &gmNetworkOpenMenu.gm_mgJoin; gmNetworkOpenMenu.gm_pgmParentMenu = &gmNetworkJoinMenu; + InitActionsForNetworkOpenMenu(); gmSplitScreenMenu.Initialize_t(); gmSplitScreenMenu.gm_strName="SplitScreen"; - gmSplitScreenMenu.gm_pmgSelectedByDefault = &mgSplitScreenStart; + gmSplitScreenMenu.gm_pmgSelectedByDefault = &gmSplitScreenMenu.gm_mgStart; gmSplitScreenMenu.gm_pgmParentMenu = &gmMainMenu; + InitActionsForSplitScreenMenu(); gmSplitStartMenu.Initialize_t(); gmSplitStartMenu.gm_strName="SplitStart"; - gmSplitStartMenu.gm_pmgSelectedByDefault = &mgSplitStartStart; + gmSplitStartMenu.gm_pmgSelectedByDefault = &gmSplitStartMenu.gm_mgStart; gmSplitStartMenu.gm_pgmParentMenu = &gmSplitScreenMenu; + InitActionsForSplitStartMenu(); } catch( char *strError) { @@ -4829,39 +4819,11 @@ void UpdateNetworkLevel(INDEX iDummy) } // ------------------------ CNetworkJoinMenu implementation -void CNetworkJoinMenu::Initialize_t(void) +void InitActionsForNetworkJoinMenu() { - // title - mgNetworkJoinTitle.mg_boxOnScreen = BoxTitle(); - mgNetworkJoinTitle.mg_strText = TRANS("JOIN GAME"); - gm_lhGadgets.AddTail( mgNetworkJoinTitle.mg_lnNode); - - mgNetworkJoinLAN.mg_bfsFontSize = BFS_LARGE; - mgNetworkJoinLAN.mg_boxOnScreen = BoxBigRow(1.0f); - mgNetworkJoinLAN.mg_pmgUp = &mgNetworkJoinOpen; - mgNetworkJoinLAN.mg_pmgDown = &mgNetworkJoinNET; - mgNetworkJoinLAN.mg_strText = TRANS("SEARCH LAN"); - mgNetworkJoinLAN.mg_strTip = TRANS("search local network for servers"); - gm_lhGadgets.AddTail( mgNetworkJoinLAN.mg_lnNode); - mgNetworkJoinLAN.mg_pActivatedFunction = &StartSelectServerLAN; - - mgNetworkJoinNET.mg_bfsFontSize = BFS_LARGE; - mgNetworkJoinNET.mg_boxOnScreen = BoxBigRow(2.0f); - mgNetworkJoinNET.mg_pmgUp = &mgNetworkJoinLAN; - mgNetworkJoinNET.mg_pmgDown = &mgNetworkJoinOpen; - mgNetworkJoinNET.mg_strText = TRANS("SEARCH INTERNET"); - mgNetworkJoinNET.mg_strTip = TRANS("search internet for servers"); - gm_lhGadgets.AddTail( mgNetworkJoinNET.mg_lnNode); - mgNetworkJoinNET.mg_pActivatedFunction = &StartSelectServerNET; - - mgNetworkJoinOpen.mg_bfsFontSize = BFS_LARGE; - mgNetworkJoinOpen.mg_boxOnScreen = BoxBigRow(3.0f); - mgNetworkJoinOpen.mg_pmgUp = &mgNetworkJoinNET; - mgNetworkJoinOpen.mg_pmgDown = &mgNetworkJoinLAN; - mgNetworkJoinOpen.mg_strText = TRANS("SPECIFY SERVER"); - mgNetworkJoinOpen.mg_strTip = TRANS("type in server address to connect to"); - gm_lhGadgets.AddTail( mgNetworkJoinOpen.mg_lnNode); - mgNetworkJoinOpen.mg_pActivatedFunction = &StartNetworkOpenMenu; + gmNetworkJoinMenu.gm_mgLAN.mg_pActivatedFunction = &StartSelectServerLAN; + gmNetworkJoinMenu.gm_mgNET.mg_pActivatedFunction = &StartSelectServerNET; + gmNetworkJoinMenu.gm_mgOpen.mg_pActivatedFunction = &StartNetworkOpenMenu; } // ------------------------ CNetworkStartMenu implementation @@ -4891,6 +4853,7 @@ void CNetworkStartMenu::Initialize_t(void) 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); @@ -5022,6 +4985,7 @@ INDEX FindUnusedPlayer(void) ASSERT(FALSE); return iPlayer; } + void SelectPlayersFillMenu(void) { INDEX *ai = _pGame->gm_aiMenuLocalPlayers; @@ -5150,6 +5114,7 @@ void SelectPlayersFillMenu(void) mgSelectPlayersNotes.mg_strText = ""; } } + void SelectPlayersApplyMenu(void) { if (gmSelectPlayersMenu.gm_bAllowDedicated && mgDedicated.mg_iSelected) { @@ -5255,187 +5220,32 @@ void CSelectPlayersMenu::EndMenu(void) CGameMenu::EndMenu(); } -CTString _strPort; + // ------------------------ CNetworkOpenMenu implementation -void CNetworkOpenMenu::Initialize_t(void) +void InitActionsForNetworkOpenMenu() { - // intialize network join menu - mgNetworkOpenTitle.mg_boxOnScreen = BoxTitle(); - mgNetworkOpenTitle.mg_strText = TRANS("JOIN"); - gm_lhGadgets.AddTail( mgNetworkOpenTitle.mg_lnNode); - - mgNetworkOpenAddressLabel.mg_strText = TRANS("Address:"); - mgNetworkOpenAddressLabel.mg_boxOnScreen = BoxMediumLeft(1); - mgNetworkOpenAddressLabel.mg_iCenterI = -1; - gm_lhGadgets.AddTail( mgNetworkOpenAddressLabel.mg_lnNode); - - mgNetworkOpenAddress.mg_strText = _pGame->gam_strJoinAddress; - mgNetworkOpenAddress.mg_ctMaxStringLen = 20; - mgNetworkOpenAddress.mg_pstrToChange = &_pGame->gam_strJoinAddress; - mgNetworkOpenAddress.mg_boxOnScreen = BoxMediumMiddle(1); - mgNetworkOpenAddress.mg_bfsFontSize = BFS_MEDIUM; - mgNetworkOpenAddress.mg_iCenterI = -1; - mgNetworkOpenAddress.mg_pmgUp = &mgNetworkOpenJoin; - mgNetworkOpenAddress.mg_pmgDown = &mgNetworkOpenPort; - mgNetworkOpenAddress.mg_strTip = TRANS("specify server address"); - gm_lhGadgets.AddTail( mgNetworkOpenAddress.mg_lnNode); - - mgNetworkOpenPortLabel.mg_strText = TRANS("Port:"); - mgNetworkOpenPortLabel.mg_boxOnScreen = BoxMediumLeft(2); - mgNetworkOpenPortLabel.mg_iCenterI = -1; - gm_lhGadgets.AddTail( mgNetworkOpenPortLabel.mg_lnNode); - - mgNetworkOpenPort.mg_strText = ""; - mgNetworkOpenPort.mg_ctMaxStringLen = 10; - mgNetworkOpenPort.mg_pstrToChange = &_strPort; - mgNetworkOpenPort.mg_boxOnScreen = BoxMediumMiddle(2); - mgNetworkOpenPort.mg_bfsFontSize = BFS_MEDIUM; - mgNetworkOpenPort.mg_iCenterI = -1; - mgNetworkOpenPort.mg_pmgUp = &mgNetworkOpenAddress; - mgNetworkOpenPort.mg_pmgDown = &mgNetworkOpenJoin; - mgNetworkOpenPort.mg_strTip = TRANS("specify server address"); - gm_lhGadgets.AddTail( mgNetworkOpenPort.mg_lnNode); - - mgNetworkOpenJoin.mg_boxOnScreen = BoxMediumMiddle(3); - mgNetworkOpenJoin.mg_pmgUp = &mgNetworkOpenPort; - mgNetworkOpenJoin.mg_pmgDown = &mgNetworkOpenAddress; - mgNetworkOpenJoin.mg_strText = TRANS("Join"); - gm_lhGadgets.AddTail( mgNetworkOpenJoin.mg_lnNode); - mgNetworkOpenJoin.mg_pActivatedFunction = &StartSelectPlayersMenuFromOpen; -} - -void CNetworkOpenMenu::StartMenu(void) -{ - _strPort = _pShell->GetValue("net_iPort"); - mgNetworkOpenPort.mg_strText = _strPort; -} - -void CNetworkOpenMenu::EndMenu(void) -{ - _pShell->SetValue("net_iPort", _strPort); + gmNetworkOpenMenu.gm_mgJoin.mg_pActivatedFunction = &StartSelectPlayersMenuFromOpen; } // ------------------------ CSplitScreenMenu implementation -void CSplitScreenMenu::Initialize_t(void) +void InitActionsForSplitScreenMenu() { - // intialize split screen menu - mgSplitScreenTitle.mg_boxOnScreen = BoxTitle(); - mgSplitScreenTitle.mg_strText = TRANS("SPLIT SCREEN"); - gm_lhGadgets.AddTail( mgSplitScreenTitle.mg_lnNode); - - mgSplitScreenStart.mg_bfsFontSize = BFS_LARGE; - mgSplitScreenStart.mg_boxOnScreen = BoxBigRow(0); - mgSplitScreenStart.mg_pmgUp = &mgSplitScreenLoad; - mgSplitScreenStart.mg_pmgDown = &mgSplitScreenQuickLoad; - mgSplitScreenStart.mg_strText = TRANS("NEW GAME"); - mgSplitScreenStart.mg_strTip = TRANS("start new split-screen game"); - gm_lhGadgets.AddTail( mgSplitScreenStart.mg_lnNode); - mgSplitScreenStart.mg_pActivatedFunction = &StartSplitStartMenu; - - mgSplitScreenQuickLoad.mg_bfsFontSize = BFS_LARGE; - mgSplitScreenQuickLoad.mg_boxOnScreen = BoxBigRow(1); - mgSplitScreenQuickLoad.mg_pmgUp = &mgSplitScreenStart; - mgSplitScreenQuickLoad.mg_pmgDown = &mgSplitScreenLoad; - mgSplitScreenQuickLoad.mg_strText = TRANS("QUICK LOAD"); - mgSplitScreenQuickLoad.mg_strTip = TRANS("load a quick-saved game (F9)"); - gm_lhGadgets.AddTail( mgSplitScreenQuickLoad.mg_lnNode); - mgSplitScreenQuickLoad.mg_pActivatedFunction = &StartSplitScreenQuickLoadMenu; - - mgSplitScreenLoad.mg_bfsFontSize = BFS_LARGE; - mgSplitScreenLoad.mg_boxOnScreen = BoxBigRow(2); - mgSplitScreenLoad.mg_pmgUp = &mgSplitScreenQuickLoad; - mgSplitScreenLoad.mg_pmgDown = &mgSplitScreenStart; - mgSplitScreenLoad.mg_strText = TRANS("LOAD"); - mgSplitScreenLoad.mg_strTip = TRANS("load a saved split-screen game"); - gm_lhGadgets.AddTail( mgSplitScreenLoad.mg_lnNode); - mgSplitScreenLoad.mg_pActivatedFunction = &StartSplitScreenLoadMenu; -} - -void CSplitScreenMenu::StartMenu(void) -{ - CGameMenu::StartMenu(); -} - -void UpdateSplitLevel(INDEX iDummy) -{ - ValidateLevelForFlags(_pGame->gam_strCustomLevel, - GetSpawnFlagsForGameType(mgSplitGameType.mg_iSelected)); - mgSplitLevel.mg_strText = FindLevelByFileName(_pGame->gam_strCustomLevel).li_strName; + gmSplitScreenMenu.gm_mgStart.mg_pActivatedFunction = &StartSplitStartMenu; + gmSplitScreenMenu.gm_mgQuickLoad.mg_pActivatedFunction = &StartSplitScreenQuickLoadMenu; + gmSplitScreenMenu.gm_mgLoad.mg_pActivatedFunction = &StartSplitScreenLoadMenu; } // ------------------------ CSplitStartMenu implementation -void CSplitStartMenu::Initialize_t(void) +void InitActionsForSplitStartMenu() { - // intialize split screen menu - mgSplitStartTitle.mg_boxOnScreen = BoxTitle(); - mgSplitStartTitle.mg_strText = TRANS("START SPLIT SCREEN"); - gm_lhGadgets.AddTail( mgSplitStartTitle.mg_lnNode); - - // game type trigger - TRIGGER_MG(mgSplitGameType, 0, - mgSplitStartStart, mgSplitDifficulty, TRANS("Game type:"), astrGameTypeRadioTexts); - mgSplitGameType.mg_ctTexts = ctGameTypeRadioTexts; - mgSplitGameType.mg_strTip = TRANS("choose type of multiplayer game"); - mgSplitGameType.mg_pOnTriggerChange = UpdateSplitLevel; - // difficulty trigger - TRIGGER_MG(mgSplitDifficulty, 1, - mgSplitGameType, mgSplitLevel, TRANS("Difficulty:"), astrDifficultyRadioTexts); - mgSplitDifficulty.mg_strTip = TRANS("choose difficulty level"); - - // level name - mgSplitLevel.mg_strText = ""; - mgSplitLevel.mg_strLabel = TRANS("Level:"); - mgSplitLevel.mg_boxOnScreen = BoxMediumRow(2); - mgSplitLevel.mg_bfsFontSize = BFS_MEDIUM; - mgSplitLevel.mg_iCenterI = -1; - mgSplitLevel.mg_pmgUp = &mgSplitDifficulty; - mgSplitLevel.mg_pmgDown = &mgSplitOptions; - mgSplitLevel.mg_strTip = TRANS("choose the level to start"); - mgSplitLevel.mg_pActivatedFunction = &StartSelectLevelFromSplit; - gm_lhGadgets.AddTail( mgSplitLevel.mg_lnNode); - - // 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; + gmSplitStartMenu.gm_mgLevel.mg_pActivatedFunction = &StartSelectLevelFromSplit; + gmSplitStartMenu.gm_mgOptions.mg_pActivatedFunction = &StartGameOptionsFromSplitScreen; + gmSplitStartMenu.gm_mgStart.mg_pActivatedFunction = &StartSelectPlayersMenuFromSplit; } -void CSplitStartMenu::StartMenu(void) +extern void UpdateSplitLevel(INDEX iDummy) { - extern INDEX sam_bMentalActivated; - mgSplitDifficulty.mg_ctTexts = sam_bMentalActivated?6:5; - - mgSplitGameType.mg_iSelected = Clamp(_pShell->GetINDEX("gam_iStartMode"), 0L, ctGameTypeRadioTexts-1L); - mgSplitGameType.ApplyCurrentSelection(); - mgSplitDifficulty.mg_iSelected = _pShell->GetINDEX("gam_iStartDifficulty")+1; - mgSplitDifficulty.ApplyCurrentSelection(); - - // clamp maximum number of players to at least 4 - _pShell->SetINDEX("gam_ctMaxPlayers", ClampDn(_pShell->GetINDEX("gam_ctMaxPlayers"), 4L)); - - UpdateSplitLevel(0); - CGameMenu::StartMenu(); -} - -void CSplitStartMenu::EndMenu(void) -{ - _pShell->SetINDEX("gam_iStartDifficulty", mgSplitDifficulty.mg_iSelected-1); - _pShell->SetINDEX("gam_iStartMode", mgSplitGameType.mg_iSelected); - - CGameMenu::EndMenu(); + ValidateLevelForFlags(_pGame->gam_strCustomLevel, + GetSpawnFlagsForGameType(gmSplitStartMenu.gm_mgGameType.mg_iSelected)); + gmSplitStartMenu.gm_mgLevel.mg_strText = FindLevelByFileName(_pGame->gam_strCustomLevel).li_strName; } \ No newline at end of file diff --git a/Sources/SeriousSam/SeriousSam.vcxproj b/Sources/SeriousSam/SeriousSam.vcxproj index cf65491..2d764e2 100644 --- a/Sources/SeriousSam/SeriousSam.vcxproj +++ b/Sources/SeriousSam/SeriousSam.vcxproj @@ -213,8 +213,12 @@ copy Release\$(TargetName).map $(SolutionDir)..\Bin\ >nul + + + + Use diff --git a/Sources/SeriousSam/SeriousSam.vcxproj.filters b/Sources/SeriousSam/SeriousSam.vcxproj.filters index 378cb3c..921821f 100644 --- a/Sources/SeriousSam/SeriousSam.vcxproj.filters +++ b/Sources/SeriousSam/SeriousSam.vcxproj.filters @@ -144,6 +144,18 @@ Source Files\Menus + + Source Files\Menus + + + Source Files\Menus + + + Source Files\Menus + + + Source Files\Menus +