Gamepad usability issues
After hearing several harrowing reports about completely broken joystick/joypad support in Doomsday I decided to pick myself up a wireless XBOX360 controller to try it out for myself (I had been planning on getting one anyway).
On starting Doomsday I expected that I would at least be able to get feedback from my joypad, however this was not the case. The only way I could get the joypad to even function was to change the default value of the variable "joydevice" (used with cvar "input-joy-device") in sys_input.c (Doomsday was defaulting to use device zero (which on this system is the virtual HID for my art tablet)).
Due to the problem with the config files not being read early enough there is no way to change the joystick/joypad device (obviously only affects systems with many HIDs but it is very common these days to have more than one (joypad, remote control, external laptop navpad, game boards...).
Next, I was on to trying the default bindings. Sadly, I was completely unable to start a game without first reconfiguring the controls and even then I ran into the following issues:
- After binding menu open/close to another button on the joypad I was able to open but not close the menu.
- Impossible to bind the POV hat for anything useful (seems that B_BindCommand is deleting all other bindings for the hat when you create a new one (most likely lacking the angle qualifier)).
- Possible to bind the joystick axes for menu navigation but once you do, the menu begins wildly repeating events (seems to be missing a repeat delay).
- Axis position drifting. Regardless of how I configured the deadzone and scale values for a particular axis I could not eliminate the drifting.
- No repeaters for the POV hat.
- Lookspring is broken.
- Most of the ctl-* cvars no longer work.
- Due to the issue with held controls during bind context (de)activation (see here http://sourceforge.net/tracker/?func=detail&aid=2849414&group_id=74815&atid=542099), most of what should be possible with the Doomsday binding system is not.
Joystick/joypad support is not looking good atm.
#1 Updated by danij about 10 years ago
Scratch what I said in my last comment. It would seem that the syntax described in comments within the source does not match up with the actual syntax used.
The POV hat binding issue is caused by B_DeleteMatching not considering the angle when attempting to match existing event bindings. Fixed.
#3 Updated by danij about 10 years ago
The various issues with the POV hat seem to be due to the way the angle is interpreted within the engine. The symbolic event constructor appears to be returning textual events with a syntax not understood by the bindings system.
"joy-hat1-angle0" is the resultant string from the symbolic echo'd event.
"joy-hat1+angle0" is the syntax the binding system expects (the angle is a condition, not a key/button name)
#11 Updated by rhargrave over 4 years ago
I would like to add that I currently have to start doomsday with
-nojoy, as I have a custom keyboard controller that doomsday (SDL?) believes is a joystick. If this is enabled, with the default input settings, my player will do nothing but run in circles.
From looking over the code for the controller (whoever wrote it made a real mess, I need to rewrite it), it does not report itself as being anything other than an HID keyboard, although it can report itself as a mouse (for mousekeys).