https://bugs.winehq.org/show_bug.cgi?id=42137
Bug ID: 42137 Summary: DirectInput needs to join both Xbox shoulder triggers into a single axis (aka half-axis problem) Product: Wine Version: 1.6.1 Hardware: x86 OS: Linux Status: NEW Keywords: hardware Severity: normal Priority: P2 Component: directx-dinput Assignee: wine-bugs@winehq.org Reporter: 00cpxxx@gmail.com CC: aric@codeweavers.com Distribution: ---
When MS introduced the Xbox controller into dinput it had the idea of joining both Xbox controller shoulder triggers into a single axis. So the left trigger ranges to the negative side while the right trigger to the positive side of the same axis.
Wine currently exposes the triggers are separate axes Z and rZ, this affects some games negatively because the not-pressed default values for the triggers is the lowest possible, for example if the axis ranges from -100 to +100 Wine exposes -100 to the application. The effect is that the application thinks the axis is always pressed and weird things happen, eg auto selecting Z/rZ as every button when configuring a joystick or wrongly selecting Z/rZ as rX/rY making FPS players always look up or down.
I don't know if this happens only for Xbox controllers but I believe so. I'll have the chance to test with a real PS3 controller soon.
If that is MS only, we need to find a way to distinguish the joysticks (VID/PID?) and merge the axes to mimic MS behavior.
At the same time and in opposite direction the XInput API does not employ this hack, since XInput was made for Xbox only controllers it will properly report the values for the axes separately.