0

With a bluetooth Xbox One controller on a Windows PC, it seems like the Z Axis registers identical inputs when I press both triggers at the same time as when I don't press anything at all, as shown below.

Is there a way to fix it so that pressing both triggers can be recognized by the system as different from not pressing the triggers?

enter image description here

2 Answers 2

1

The Windows USB game controllers dialog (joy.cpl) uses the legacy DirectInput API. Xbox-compatible controllers have special behavior in DirectInput that causes the trigger axes to be combined to a single Z Axis input:

The combination of the left and right triggers in DirectInput is by design. Games have always assumed that DirectInput device axes are centered when there is no user interaction with the device. However, the Xbox controller was designed to register minimum value, not center, when the triggers are not being held. Older games would therefore assume user interaction.

https://learn.microsoft.com/en-us/windows/win32/xinput/xinput-and-directinput

DirectInput API has poor compatibility with modern gamepads. These days, applications should use XInput or Windows.Gaming.Input. When Xbox controller inputs are read through XInput or Windows.Gaming.Input, the left and right trigger inputs are not combined.

2
  • So I take it that this problem is completely solved as long as the software using it uses the XInput of Windows Gaming Input APIs; If I'm using software uses the older DirectInput API, is there any software work-around for that?
    – plu
    Jan 8 at 8:11
  • 1
    Yes, there are third party apps that can create a virtual DirectInput gamepad that separates the LT and RT axes. I haven't tried it but apparently x360ce can do it. It looks like XInput Plus is using x360ce under the hood.
    – nondebug
    Jan 9 at 19:23
1

Building on the response(s)/hints from here + some additional information/resources elsewhere [1][2], I completely solved the problem. Assuming a windows OS and a program that is still using DirectInput.

  1. First download "XInput Plus" [2],
  2. On "Target Program" select the exact path of the .exe file of the program.
  3. Then on the DirectInput tab, select "Enable DirectInput Output".
  4. Assign the left and right triggers (LT/RT) to to some unused button assignments like Button 12/13, as per Fig. 1.
  5. Then on the Setting tab, under "Dll Files", select all the xinput dll files, as per Fig. 2.
  6. If there's an existing xinput dll file in the same directory as the program, back that up and/or remove it from the program directory.
  7. Then click apply.
  8. Now on the program, the L and R triggers will register as distinct button presses.

----(Fig. 1)

----enter image description here

----(Fig. 2)

----enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .