From 50aa38234875257f8b74b56dab42711334f61dbd Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Fri, 28 Nov 2008 22:47:10 +0000 Subject: Add Heretic/Hexen controls to setup program. Subversion-branch: /branches/raven-branch Subversion-revision: 1390 --- src/setup/display.c | 16 +++++++++-- src/setup/joystick.c | 10 +++++-- src/setup/keyboard.c | 75 +++++++++++++++++++++++++++++++++++++++++++++------- src/setup/mainmenu.c | 47 ++++++++++++++++++++++++++++---- src/setup/mouse.c | 16 ++++++----- 5 files changed, 139 insertions(+), 25 deletions(-) diff --git a/src/setup/display.c b/src/setup/display.c index 8ce472bd..956ab6a0 100644 --- a/src/setup/display.c +++ b/src/setup/display.c @@ -74,6 +74,7 @@ static int fullscreen = 1; static int screen_width = 320; static int screen_height = 200; static int startup_delay = 1000; +static int graphical_startup = 1; static int show_endoom = 1; static int usegamma = 0; @@ -430,9 +431,20 @@ void ConfigDisplay(void) TXT_NewSeparator("Screen mode"), modes_table, TXT_NewSeparator("Misc."), - TXT_NewCheckBox("Show ENDOOM screen", &show_endoom), NULL); + if (gamemission == heretic || gamemission == hexen) + { + TXT_AddWidget(window, + TXT_NewCheckBox("Graphical startup", &graphical_startup)); + } + + if (gamemission == doom || gamemission == heretic) + { + TXT_AddWidget(window, + TXT_NewCheckBox("Show ENDOOM screen", &show_endoom)); + } + TXT_SignalConnect(fs_checkbox, "changed", GenerateModesTable, modes_table); TXT_SignalConnect(ar_checkbox, "changed", GenerateModesTable, modes_table); @@ -458,7 +470,7 @@ void BindDisplayVariables(void) if (gamemission == heretic || gamemission == hexen) { - M_BindVariable("graphical_startup", &show_endoom); + M_BindVariable("graphical_startup", &graphical_startup); } } diff --git a/src/setup/joystick.c b/src/setup/joystick.c index 9b064905..b3ab624d 100644 --- a/src/setup/joystick.c +++ b/src/setup/joystick.c @@ -26,9 +26,10 @@ #include "m_config.h" #include "m_controls.h" #include "textscreen.h" -#include "txt_joybinput.h" #include "joystick.h" +#include "mode.h" +#include "txt_joybinput.h" typedef enum { @@ -408,7 +409,7 @@ void ConfigJoystick(void) TXT_SetColumnWidths(button_table, 20, 15); - AddJoystickControl(button_table, "Fire", &joybfire); + AddJoystickControl(button_table, "Fire/Attack", &joybfire); AddJoystickControl(button_table, "Use", &joybuse); // High values of joybspeed are used to activate the "always run mode" @@ -425,6 +426,11 @@ void ConfigJoystick(void) AddJoystickControl(button_table, "Strafe Left", &joybstrafeleft); AddJoystickControl(button_table, "Strafe Right", &joybstraferight); + if (gamemission == hexen) + { + AddJoystickControl(button_table, "Jump", &joybjump); + } + TXT_SignalConnect(joystick_button, "pressed", CalibrateJoystick, NULL); TXT_SignalConnect(window, "closed", JoystickWindowClosed, NULL); diff --git a/src/setup/keyboard.c b/src/setup/keyboard.c index 908e5c7a..2a366609 100644 --- a/src/setup/keyboard.c +++ b/src/setup/keyboard.c @@ -26,6 +26,7 @@ #include "execute.h" #include "txt_keyinput.h" +#include "mode.h" #include "joystick.h" #include "keyboard.h" @@ -87,6 +88,43 @@ static void AddKeyControl(txt_table_t *table, char *name, int *var) TXT_SignalConnect(key_input, "set", KeySetCallback, var); } +static void ConfigExtraKeys(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(unused)) +{ + txt_window_t *window; + txt_table_t *view_table; + txt_table_t *fly_table; + txt_table_t *inv_table; + + window = TXT_NewWindow("Extra keyboard controls"); + + TXT_AddWidgets(window, + TXT_NewSeparator("View"), + view_table = TXT_NewTable(2), + TXT_NewSeparator("Flying"), + fly_table = TXT_NewTable(2), + TXT_NewSeparator("Inventory"), + inv_table = TXT_NewTable(2), + NULL); + + TXT_SetColumnWidths(view_table, 25, 12); + + AddKeyControl(view_table, "Look up", &key_lookup); + AddKeyControl(view_table, "Look down", &key_lookdown); + AddKeyControl(view_table, "Center view", &key_lookcenter); + + TXT_SetColumnWidths(fly_table, 25, 12); + + AddKeyControl(fly_table, "Fly up", &key_flyup); + AddKeyControl(fly_table, "Fly down", &key_flydown); + AddKeyControl(fly_table, "Fly center", &key_flycenter); + + TXT_SetColumnWidths(inv_table, 25, 12); + + AddKeyControl(inv_table, "Inventory left", &key_invleft); + AddKeyControl(inv_table, "Inventory right", &key_invright); + AddKeyControl(inv_table, "Use artifact", &key_useartifact); +} + void ConfigKeyboard(void) { txt_window_t *window; @@ -100,34 +138,51 @@ void ConfigKeyboard(void) TXT_AddWidgets(window, TXT_NewSeparator("Movement"), - movement_table = TXT_NewTable(2), + movement_table = TXT_NewTable(4), TXT_NewSeparator("Action"), - action_table = TXT_NewTable(2), + action_table = TXT_NewTable(4), + NULL); + + // Look up/down, inventory and flying controls are only in Heretic/Hexen + // and are kept in a separate window to conserve space. + if (gamemission == heretic || gamemission == hexen) + { + TXT_AddWidget(window, TXT_NewButton2("More controls...", + ConfigExtraKeys, + NULL)); + } + + TXT_AddWidgets(window, TXT_NewSeparator("Misc."), run_control = TXT_NewCheckBox("Always run", &always_run), TXT_NewInvertedCheckBox("Use native keyboard mapping", &vanilla_keyboard_mapping), NULL); - TXT_SetColumnWidths(movement_table, 20, 8); + TXT_SetColumnWidths(movement_table, 15, 4, 15, 4); TXT_SignalConnect(run_control, "changed", UpdateJoybSpeed, NULL); AddKeyControl(movement_table, "Move Forward", &key_up); + AddKeyControl(movement_table, " Strafe Left", &key_strafeleft); AddKeyControl(movement_table, "Move Backward", &key_down); + AddKeyControl(movement_table, " Strafe Right", &key_straferight); AddKeyControl(movement_table, "Turn Left", &key_left); + AddKeyControl(movement_table, " Speed On", &key_speed); AddKeyControl(movement_table, "Turn Right", &key_right); - AddKeyControl(movement_table, "Strafe Left", &key_strafeleft); - AddKeyControl(movement_table, "Strafe Right", &key_straferight); - AddKeyControl(movement_table, "Speed On", &key_speed); - AddKeyControl(movement_table, "Strafe On", &key_strafe); + AddKeyControl(movement_table, " Strafe On", &key_strafe); + + if (gamemission == hexen) + { + AddKeyControl(movement_table, "Jump", &key_jump); + } - TXT_SetColumnWidths(action_table, 20, 8); + TXT_SetColumnWidths(action_table, 15, 4, 15, 4); - AddKeyControl(action_table, "Use", &key_use); - AddKeyControl(action_table, "Fire", &key_fire); + AddKeyControl(action_table, "Fire/Attack", &key_fire); + AddKeyControl(action_table, " Use", &key_use); TXT_SetWindowAction(window, TXT_HORIZ_CENTER, TestConfigAction()); } diff --git a/src/setup/mainmenu.c b/src/setup/mainmenu.c index 1a82b507..af5e65c1 100644 --- a/src/setup/mainmenu.c +++ b/src/setup/mainmenu.c @@ -98,6 +98,29 @@ static void LaunchDoom(void *unused1, void *unused2) exit(0); } +static txt_button_t *GetLaunchButton(void) +{ + char *label; + + switch (gamemission) + { + case doom: + label = "Save parameters and launch DOOM"; + break; + case heretic: + label = "Save parameters and launch Heretic"; + break; + case hexen: + label = "Save parameters and launch Hexen"; + break; + default: + label = "Save parameters and launch game"; + break; + } + + return TXT_NewButton2(label, LaunchDoom, NULL); +} + void MainMenu(void) { txt_window_t *window; @@ -108,17 +131,31 @@ void MainMenu(void) TXT_AddWidgets(window, TXT_NewButton2("Configure Display", (TxtWidgetSignalFunc) ConfigDisplay, NULL), - TXT_NewButton2("Configure Joystick", - (TxtWidgetSignalFunc) ConfigJoystick, NULL), TXT_NewButton2("Configure Keyboard", (TxtWidgetSignalFunc) ConfigKeyboard, NULL), TXT_NewButton2("Configure Mouse", (TxtWidgetSignalFunc) ConfigMouse, NULL), + TXT_NewButton2("Configure Joystick", + (TxtWidgetSignalFunc) ConfigJoystick, NULL), TXT_NewButton2("Configure Sound", (TxtWidgetSignalFunc) ConfigSound, NULL), - TXT_NewButton2("Compatibility", - (TxtWidgetSignalFunc) CompatibilitySettings, NULL), - TXT_NewButton2("Save parameters and launch DOOM", LaunchDoom, NULL), + NULL); + + // The compatibility window is only appropriate for Doom. + + if (gamemission == doom) + { + txt_button_t *button; + + button = TXT_NewButton2("Compatibility", + (TxtWidgetSignalFunc) CompatibilitySettings, + NULL); + + TXT_AddWidget(window, button); + } + + TXT_AddWidgets(window, + GetLaunchButton(), TXT_NewStrut(0, 1), TXT_NewButton2("Start a Network Game", (TxtWidgetSignalFunc) StartMultiGame, NULL), diff --git a/src/setup/mouse.c b/src/setup/mouse.c index 16b8045f..ed9abbfd 100644 --- a/src/setup/mouse.c +++ b/src/setup/mouse.c @@ -29,6 +29,7 @@ #include "execute.h" #include "txt_mouseinput.h" +#include "mode.h" #include "mouse.h" static int usemouse = 1; @@ -96,6 +97,11 @@ static void ConfigExtraButtons(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(unused)) AddMouseControl(buttons_table, "Use", &mousebuse); AddMouseControl(buttons_table, "Strafe left", &mousebstrafeleft); AddMouseControl(buttons_table, "Strafe right", &mousebstraferight); + + if (gamemission == hexen) + { + AddMouseControl(buttons_table, "Jump", &mousebjump); + } } void ConfigMouse(void) @@ -103,7 +109,6 @@ void ConfigMouse(void) txt_window_t *window; txt_table_t *motion_table; txt_table_t *buttons_table; - txt_button_t *more_buttons; window = TXT_NewWindow("Mouse configuration"); @@ -121,8 +126,9 @@ void ConfigMouse(void) TXT_NewSeparator("Buttons"), buttons_table = TXT_NewTable(2), - more_buttons = TXT_NewButton("More buttons..."), - + TXT_NewButton2("More controls...", + ConfigExtraButtons, + NULL), NULL); TXT_SetColumnWidths(motion_table, 27, 5); @@ -138,13 +144,11 @@ void ConfigMouse(void) TXT_SetColumnWidths(buttons_table, 27, 5); + AddMouseControl(buttons_table, "Fire/Attack", &mousebfire); AddMouseControl(buttons_table, "Move forward", &mousebforward); AddMouseControl(buttons_table, "Strafe on", &mousebstrafe); - AddMouseControl(buttons_table, "Fire weapon", &mousebfire); TXT_SetWindowAction(window, TXT_HORIZ_CENTER, TestConfigAction()); - - TXT_SignalConnect(more_buttons, "pressed", ConfigExtraButtons, NULL); } void BindMouseVariables(void) -- cgit v1.2.3