diff options
Diffstat (limited to 'src/setup/joystick.c')
-rw-r--r-- | src/setup/joystick.c | 76 |
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); |