foxygit / doom Log in
commit 50aa38234875257f8b74b56dab42711334f61dbd
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Fri Nov 28 22:47:10 2008 +0000
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Fri Nov 28 22:47:10 2008 +0000

    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)