summaryrefslogtreecommitdiff
path: root/src/setup/joystick.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/setup/joystick.c')
-rw-r--r--src/setup/joystick.c76
1 files changed, 63 insertions, 13 deletions
diff --git a/src/setup/joystick.c b/src/setup/joystick.c
index dc94b2f0..22b1a089 100644
--- a/src/setup/joystick.c
+++ b/src/setup/joystick.c
@@ -14,6 +14,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "doomtype.h"
#include "i_joystick.h"
@@ -28,6 +29,8 @@
#include "txt_joyaxis.h"
#include "txt_joybinput.h"
+#define WINDOW_HELP_URL "http://www.chocolate-doom.org/setup-gamepad"
+
typedef struct
{
char *name; // Config file name
@@ -136,6 +139,7 @@ static const joystick_config_t empty_defaults[] =
{"joyb_straferight", -1},
{"joyb_prevweapon", -1},
{"joyb_nextweapon", -1},
+ {"joyb_jump", -1},
{"joyb_menu_activate", -1},
{NULL, 0},
};
@@ -292,6 +296,24 @@ static const joystick_config_t buffalo_classic_controller[] =
{NULL, 0},
};
+// Config for if the user is actually using an old PC joystick or gamepad,
+// probably via a USB-Gameport adapter.
+static const joystick_config_t pc_gameport_controller[] =
+{
+ {"joystick_x_axis", 0},
+ {"joystick_y_axis", 1},
+ // Button configuration is the default as used for Vanilla Doom,
+ // Heretic and Hexen. When playing with a Gravis Gamepad, this
+ // layout should also be vaguely similar to the standard layout
+ // described above.
+ {"joyb_fire", 0},
+ {"joyb_strafe", 1},
+ {"joyb_use", 3},
+ {"joyb_speed", 2},
+ {NULL, 0},
+};
+
+
static const known_joystick_t known_joysticks[] =
{
{
@@ -331,6 +353,13 @@ static const known_joystick_t known_joysticks[] =
xbox360_controller_linux,
},
+ // Xbox One controller as it appears on Linux.
+ {
+ "Microsoft X-Box One pad",
+ 6, 11, 1,
+ xbox360_controller_linux,
+ },
+
{
"Logitech Dual Action",
4, 12, 1,
@@ -357,6 +386,25 @@ static const known_joystick_t known_joysticks[] =
6, 14, 1,
ps4_ds4_controller,
},
+
+ // This is the configuration for the USB-Gameport adapter listed on
+ // this page as the "Mayflash USB to Gameport Adapter" (though the
+ // device is labeled as "Super Joy Box 7"):
+ // https://sites.google.com/site/joystickrehab/itemcatal
+ // TODO: Add extra configurations here for other USB-Gameport adapters,
+ // which should just be the same configuration.
+ {
+ "WiseGroup.,Ltd Gameport to USB Controller",
+ 4, 8, 1,
+ pc_gameport_controller,
+ },
+
+ // How the Super Joy Box 7 appears on Mac OS X.
+ {
+ "Gameport to USB Controller",
+ 2, 8, 1,
+ pc_gameport_controller,
+ },
};
static const known_joystick_t *GetJoystickType(int index)
@@ -520,7 +568,7 @@ static int OpenAllJoysticks(void)
result = 0;
- for (i=0; i<num_joysticks; ++i)
+ for (i = 0; i < num_joysticks; ++i)
{
all_joysticks[i] = SDL_JoystickOpen(i);
@@ -556,7 +604,7 @@ static void CloseAllJoysticks(void)
num_joysticks = SDL_NumJoysticks();
- for (i=0; i<num_joysticks; ++i)
+ for (i = 0; i < num_joysticks; ++i)
{
if (all_joysticks[i] != NULL)
{
@@ -587,6 +635,7 @@ static int CalibrationEventCallback(SDL_Event *event, void *user_data)
// At this point, we have a button press.
// In the first "center" stage, we're just trying to work out which
// joystick is being configured and which button the user is pressing.
+ usejoystick = 1;
joystick_index = event->jbutton.which;
calibrate_button = event->jbutton.button;
@@ -595,7 +644,6 @@ static int CalibrationEventCallback(SDL_Event *event, void *user_data)
if (IsKnownJoystick(joystick_index))
{
LoadKnownConfiguration();
- usejoystick = 1;
TXT_CloseWindow(calibration_window);
}
else
@@ -613,11 +661,12 @@ static int CalibrationEventCallback(SDL_Event *event, void *user_data)
static void NoJoystick(void)
{
- TXT_MessageBox(NULL, "No joysticks or gamepads could be found.\n\n"
+ TXT_MessageBox(NULL, "No gamepads or joysticks could be found.\n\n"
"Try configuring your controller from within\n"
"your OS first. Maybe you need to install\n"
"some drivers or otherwise configure it.");
+ usejoystick = 0;
joystick_index = -1;
SetJoystickButtonLabel();
}
@@ -659,7 +708,7 @@ static void CalibrateJoystick(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(unused))
TXT_SignalConnect(calibration_window, "closed", CalibrateWindowClosed, NULL);
// Start calibration
-
+ usejoystick = 0;
joystick_index = -1;
}
@@ -685,8 +734,9 @@ void ConfigJoystick(void)
window = TXT_NewWindow("Gamepad/Joystick configuration");
+ TXT_SetWindowHelpURL(window, WINDOW_HELP_URL);
+
TXT_AddWidgets(window,
- TXT_NewCheckBox("Enable gamepad/joystick", &usejoystick),
joystick_table = TXT_NewTable(2),
TXT_NewSeparator("Axes"),
axis_table = TXT_NewTable(2),
@@ -694,6 +744,13 @@ void ConfigJoystick(void)
button_table = TXT_NewTable(4),
NULL);
+ TXT_SetColumnWidths(joystick_table, 13, 40);
+
+ TXT_AddWidgets(joystick_table,
+ TXT_NewLabel("Controller"),
+ joystick_button = TXT_NewButton("zzzz"),
+ NULL);
+
TXT_SetColumnWidths(axis_table, 20, 15);
TXT_AddWidgets(axis_table,
@@ -711,13 +768,6 @@ void ConfigJoystick(void)
JOYSTICK_AXIS_HORIZONTAL),
NULL);
- TXT_SetColumnWidths(joystick_table, 20, 15);
-
- TXT_AddWidgets(joystick_table,
- TXT_NewLabel("Current controller"),
- joystick_button = TXT_NewButton("zzzz"),
- NULL);
-
TXT_SetColumnWidths(button_table, 16, 12, 14, 11);
AddJoystickControl(button_table, "Fire/Attack", &joybfire);