From 9caebe584ccb95239b2ed360d4bce3dffc5ecfea Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Fri, 10 Dec 2010 19:15:37 +0000 Subject: Add "warp" menu to the main menu of the setup tool, like Vanilla setup.exe (thanks Proteh). Subversion-branch: /trunk/chocolate-doom Subversion-revision: 2206 --- NEWS | 6 ++- setup/mainmenu.c | 5 +++ setup/multiplayer.c | 120 +++++++++++++++++++++++++++++++++++++--------------- setup/multiplayer.h | 1 + 4 files changed, 97 insertions(+), 35 deletions(-) diff --git a/NEWS b/NEWS index ced00d3c..467fd3e9 100644 --- a/NEWS +++ b/NEWS @@ -22,10 +22,12 @@ devices (ie. without a proper keyboard) much more practical. * There is now a key binding to change the multiplayer spy key (usually F12). - * There is now a configuration file parameter to set the OPL I/O - port, for cards that don't use port 0x388. + * The setup tool now has a "warp" button on the main menu, like * Up to 8 mouse buttons are now supported (including the mousewheel). + Vanilla setup.exe (thanks Proteh). + * There is now a configuration file parameter to set the OPL I/O + port, for cards that don't use port 0x388. * The Python scripts used for building Chocolate Doom now work with Python 3 (but also continue to work with Python 2) (thanks arin). diff --git a/setup/mainmenu.c b/setup/mainmenu.c index 006a3547..1c341d78 100644 --- a/setup/mainmenu.c +++ b/setup/mainmenu.c @@ -162,6 +162,7 @@ void MainMenu(void) { txt_window_t *window; txt_window_action_t *quit_action; + txt_window_action_t *warp_action; window = TXT_NewWindow("Main Menu"); @@ -189,8 +190,12 @@ void MainMenu(void) NULL); quit_action = TXT_NewWindowAction(KEY_ESCAPE, "Quit"); + warp_action = TXT_NewWindowAction(KEY_F1, "Warp"); TXT_SignalConnect(quit_action, "pressed", QuitConfirm, NULL); + TXT_SignalConnect(warp_action, "pressed", + (TxtWidgetSignalFunc) WarpMenu, NULL); TXT_SetWindowAction(window, TXT_HORIZ_LEFT, quit_action); + TXT_SetWindowAction(window, TXT_HORIZ_CENTER, warp_action); TXT_SetKeyListener(window, MainMenuKeyPress, NULL); } diff --git a/setup/multiplayer.c b/setup/multiplayer.c index c5d0d1e9..dfd9e3ba 100644 --- a/setup/multiplayer.c +++ b/setup/multiplayer.c @@ -189,7 +189,11 @@ static void AddIWADParameter(execute_context_t *exec) } } -static void StartGame(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(user_data)) +// Callback function invoked to launch the game. +// This is used when starting a server and also when starting a +// single player game via the "warp" menu. + +static void StartGame(int multiplayer) { execute_context_t *exec; @@ -201,7 +205,6 @@ static void StartGame(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(user_data)) AddExtraParameters(exec); AddIWADParameter(exec); - AddCmdLineParameter(exec, "-server"); AddCmdLineParameter(exec, "-skill %i", skill + 1); if (nomonsters) @@ -219,20 +222,6 @@ static void StartGame(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(user_data)) AddCmdLineParameter(exec, "-respawn"); } - if (deathmatch == 1) - { - AddCmdLineParameter(exec, "-deathmatch"); - } - else if (deathmatch == 2) - { - AddCmdLineParameter(exec, "-altdeath"); - } - - if (timer > 0) - { - AddCmdLineParameter(exec, "-timer %i", timer); - } - if (warptype == WARP_DOOM1) { // TODO: select IWAD based on warp type @@ -243,7 +232,27 @@ static void StartGame(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(user_data)) AddCmdLineParameter(exec, "-warp %i", warpmap); } - AddCmdLineParameter(exec, "-port %i", udpport); + // Multiplayer-specific options: + + if (multiplayer) + { + AddCmdLineParameter(exec, "-server"); + AddCmdLineParameter(exec, "-port %i", udpport); + + if (deathmatch == 1) + { + AddCmdLineParameter(exec, "-deathmatch"); + } + else if (deathmatch == 2) + { + AddCmdLineParameter(exec, "-altdeath"); + } + + if (timer > 0) + { + AddCmdLineParameter(exec, "-timer %i", timer); + } + } AddWADs(exec); @@ -257,6 +266,16 @@ static void StartGame(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(user_data)) exit(0); } +static void StartServerGame(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(unused)) +{ + StartGame(1); +} + +static void StartSinglePlayerGame(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(unused)) +{ + StartGame(0); +} + static void UpdateWarpButton(void) { char buf[10]; @@ -509,12 +528,27 @@ static txt_widget_t *IWADSelector(void) return result; } -static txt_window_action_t *StartGameAction(void) +// Create the window action button to start the game. This invokes +// a different callback depending on whether to start a multiplayer +// or single player game. + +static txt_window_action_t *StartGameAction(int multiplayer) { txt_window_action_t *action; + TxtWidgetSignalFunc callback; action = TXT_NewWindowAction(KEY_F10, "Start"); - TXT_SignalConnect(action, "pressed", StartGame, NULL); + + if (multiplayer) + { + callback = StartServerGame; + } + else + { + callback = StartSinglePlayerGame; + } + + TXT_SignalConnect(action, "pressed", callback, NULL); return action; } @@ -556,14 +590,18 @@ static txt_window_action_t *WadWindowAction(void) return action; } -void StartMultiGame(void) +// "Start game" menu. This is used for the start server window +// and the single player warp menu. The parameters specify +// the window title and whether to display multiplayer options. + +static void StartGameMenu(char *window_title, int multiplayer) { txt_window_t *window; txt_table_t *gameopt_table; txt_table_t *advanced_table; txt_widget_t *iwad_selector; - window = TXT_NewWindow("Start multiplayer game"); + window = TXT_NewWindow(window_title); TXT_AddWidgets(window, gameopt_table = TXT_NewTable(2), @@ -578,7 +616,7 @@ void StartMultiGame(void) NULL); TXT_SetWindowAction(window, TXT_HORIZ_CENTER, WadWindowAction()); - TXT_SetWindowAction(window, TXT_HORIZ_RIGHT, StartGameAction()); + TXT_SetWindowAction(window, TXT_HORIZ_RIGHT, StartGameAction(multiplayer)); TXT_SetColumnWidths(gameopt_table, 12, 12); @@ -587,29 +625,45 @@ void StartMultiGame(void) iwad_selector = IWADSelector(), TXT_NewLabel("Skill"), skillbutton = TXT_NewDropdownList(&skill, skills, 5), - TXT_NewLabel("Game type"), - TXT_NewDropdownList(&deathmatch, gamemodes, 3), TXT_NewLabel("Level warp"), warpbutton = TXT_NewButton2("????", LevelSelectDialog, NULL), - TXT_NewLabel("Time limit"), - TXT_NewHorizBox(TXT_NewIntInputBox(&timer, 2), - TXT_NewLabel("minutes"), - NULL), NULL); + if (multiplayer) + { + TXT_AddWidgets(gameopt_table, + TXT_NewLabel("Game type"), + TXT_NewDropdownList(&deathmatch, gamemodes, 3), + TXT_NewLabel("Time limit"), + TXT_NewHorizBox(TXT_NewIntInputBox(&timer, 2), + TXT_NewLabel("minutes"), + NULL), + NULL); + + TXT_AddWidgets(advanced_table, + TXT_NewLabel("UDP port"), + TXT_NewIntInputBox(&udpport, 5), + NULL); + } + TXT_SetColumnWidths(advanced_table, 12, 12); TXT_SignalConnect(iwad_selector, "changed", UpdateWarpType, NULL); - TXT_AddWidgets(advanced_table, - TXT_NewLabel("UDP port"), - TXT_NewIntInputBox(&udpport, 5), - NULL); - UpdateWarpType(NULL, NULL); UpdateWarpButton(); } +void StartMultiGame(void) +{ + StartGameMenu("Start multiplayer game", 1); +} + +void WarpMenu(void) +{ + StartGameMenu("Level Warp", 0); +} + static void DoJoinGame(void *unused1, void *unused2) { execute_context_t *exec; diff --git a/setup/multiplayer.h b/setup/multiplayer.h index b9871ed5..bc88318c 100644 --- a/setup/multiplayer.h +++ b/setup/multiplayer.h @@ -26,6 +26,7 @@ extern char *net_player_name; extern char *chat_macros[10]; void StartMultiGame(void); +void WarpMenu(void); void JoinMultiGame(void); void MultiplayerConfig(void); -- cgit v1.2.3