Translate Directinput Commands For Xinput Games Mac

Mar 04, 2019  Many PC and Mac games treat the keyboard as a first-class citizen and have poor support for game controllers. You can remap your controller buttons to.

Translates data from Xbox 360 Controllers using XInput to a virtual DirectInput controller using VJoy. This gives us a better DirectInput interface to an Xbox 360 Controller (or other XInput compatible controllers), so that it can be used with older games and emulators that only support DirectInput.

This has a number of important advantages over using the normal DirectInput interface to an Xbox 360 controller, or even using one of the alternative Xbox 360 controller drivers:

  1. The triggers on the controller can be used simultaneously! In my opinion this is the most important improvement because not being able to use the triggers at the same time is simply inexcusable. (Thanks to Microsoft for asininely screwing that one up.)
  2. Since the DInput controllers are virtual, they are always 'connected'. This substantially improves things for games that require all controllers to be connected when they start up and will permenantly lose their connection to the controllers if they become disconnected. (e.g. You have to change its batteries, or it disconnects accidentally.)
  3. We can get access to the Guide / Home button and map it to a DirectInput button.
  4. In theory it works in all recent versions of Windows. (Currently tested in 8.1)
  5. Doesn't require installing alternative drivers for your Xbox 360 controller, which I was not able to get to work with a wireless Xbox 360 controller in Windows 8.
  6. The code here can be tweaked to alter the behavior of a controller.

This application requires VJoy to be installed and up to four virtual controllers to be created that all have 11 buttons, one continuous POV hat switch, and the follow axes: X, Y, Z, RX, RY, RZ. The left and right triggers will be mapped to +Z and +RZ axes respectively.

When launched, it will run in the system tray. The system tray menu has an option for bringing up a window that allows each button on the virtual controller to be pressed using the mouse. This allows games (particularly emulators) to be configured to use the virtual controller, since they automatically detect button presses and will often detect an Xbox 360 controller's button pressed before the virtual controller.

This program also properly correlates the vJoy devices as listed by DirectInput with each connected Xbox controller, so that the Xbox controller for player 1 maps to the first vJoy device, player 2 maps to the second vJoy device, and so on.

Useful tip: combine xboxToVJoy with devreorder so that all of your old DirectInput games only see the vJoy devices. This way their controller bindings will always work regardless of how Windows arbitrarily changes the order of your controllers! It's the best way I know of to have your Xinput controllers 'just work' with DirectInput games!!

Dependencies: Qt 5.x, vJoy 2.1.6 SDK, DirectX 8 SDK, XInput

Requirements: vJoy 2.1.6, XInput

Translate Directinput Commands For Xinput Games Mac

In computing, DirectInput is a legacy[1]MicrosoftAPI for collecting input from a computer user, via input devices such as the mouse, keyboard, or a gamepad. It also provides a system for action mapping, which allows the user to assign specific actions within a game to the buttons and axes of the input devices. Additionally it handles haptic feedback (input/output) devices. Microsoft introduced a new input library called XInput specifically for the Xbox 360 controller.

DirectInput and XInput provide benefits over normal Win32 input events:

  • they enable an application to retrieve data from input devices even when the application is in the background
  • they provide full support for any type of input device, as well as for haptic feedback
  • through action mapping, applications can retrieve input data without needing to know what kind of device generated that input

While DirectInput forms a part of the DirectX library, it has not been significantly revised since DirectX 8 (2001–2002). Microsoft recommends that new applications make use of the Windows message loop for keyboard and mouse input instead of DirectInput (as indicated in the Meltdown 2005 slideshow[2]), and to use XInput instead of DirectInput for Xbox 360 controllers.

History[edit]

DirectX included DirectInput from version 1.0 (1995). It initially offered true support only for joysticks, as the mouse and keyboard modules simply provided wrappers to the standard Win32 API. DirectX version 3.0 (1996) added support for keyboards and mice; it also improved joystick support. DirectX 5.0 (1997) included greatly improved joystick support, including adding haptic feedback, increasing the number of buttons, changing the underlying device-driver model and incorporating a COM-based API. Mouse support also increased the number of buttons seen from four to eight. In DirectX 7.0 (1999- ), DirectInput added a long-promised feature of seeing individual mice much like individual joysticks, but the feature didn't work with the later released Windows XP, even though as of 2010 it works with Windows 98/Me and DirectX 9. DirectX 8.0 (2000), the last version with major changes, included action mapping and broader support for different types of devices.

While Microsoft initially intended that DirectInput would handle all inputs, it hasn't turned out this way. As of 2011 Microsoft doesn't recommend using DirectInput for keyboards or mice, and has started pushing the newer XInput for Xbox 360 controllers.[3] In Windows Vista, Windows 7 and later Windows versions, the in-built action mapping UI has been removed.[4] DirectInput is not available for Windows Store apps.

XInput[edit]

XInput,[5] an API for 'next generation' controllers, was introduced in December 2005 alongside the launch of the Xbox 360. This instruction set provided full support for Xbox 360 controllers in Windows XP SP1 and subsequent operating systems, and is described by Microsoft as being easier to program for and requiring less setup than DirectInput. XInput is compatible with DirectX version 9 and later.

Xbox 360 Controller support[edit]

An Xbox 360 Controller, with the default Microsoft driver, has the following limitations with DirectInput, compared to XInput:

  • the left and right triggers will act as a single axis representing the signed difference between the triggers, not as independent analog axes
  • vibration effects will not operate
  • querying for headset devices will not operate

None of these limitations exist if using the Xbox 360 Controller with XInput.[6]

Vibration effects will not work on the Xbox One Controller.

According to MSDN, '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 360 controller was designed to register minimum value, not center, when the triggers are not being held.' MSDN proffered the 'solution' of combining the triggers, setting one trigger to a positive direction and the other to a negative direction, so no user interaction is indicative to DirectInput of the 'control' being at center.[7]

Difference Between Xinput And Directinput

The above, however, ignores the fact that many DirectInput controllers, such as gamepads with dual analog sticks and racing-wheel controller sets, already map triggers and pedals independently. In addition, many DirectInput devices also have vibration effects. At least one driver, XBCD, gives the Xbox 360 controllers the vibration support, dead zones and (optionally) independent triggers through DirectInput.[citation needed] This suggests that Microsoft's Xbox 360 controller driver intentionally has weaker DirectInput support, rather than due to any differences between DirectInput and XInput APIs. On the other hand, Xbox 360 controller and XInput support only very basic control of vibration motors[8][9] in contrast with great palette of various effects supported by DirectInput.[10]

DirectInput vs XInput[edit]

Microsoft has not made any major changes to DirectInput since DirectX 8, and introduced XInput later in DirectX 9: there remains some confusion about the current status and future of the two APIs.

The XInput API also as of 2010 has limits that DirectInput does not:

Translate Directinput Commands For Xinput Games Mac Os

  • XInput supports only 'next generation' controllers. This limits it basically to controllers for the Xbox 360 that also have Windows drivers. Legacy Windows controllers, joysticks and generalized haptic feedback devices are not supported.
  • XInput supports a maximum of four controllers at a time. This is an Xbox limit, carried over to Windows. Although as of 2010 few PC games require more than four controllers at once, DirectInput itself has no such limitation.
  • XInput does not support keyboards, mice, or mouse-type devices. While this mirrors Microsoft's recommendation not to use DirectInput with these devices,[11] programmers can use DirectInput with these devices.
  • XInput supports maximum of 4 axes, 10 buttons, 2 triggers and 8-direction digital pad per controller, compared to DirectInput's support for 8 axes, 128 buttons, and full-range POV. (The number of axes, buttons and triggers XInput supports corresponds directly to the Xbox 360 controller.)

Advantage of XInput over DirectInput:

  • When used with an Xbox 360 Controller, the left and right trigger buttons will act independently, instead of as a single button[12]

Directinput Windows 10

As of 2011 XInput is for Xbox 360 controllers, while DirectInput is for any controller.In XInput 1.4 introduced with Windows 8 support of querying for headset devices was reintroduced.[13]

References[edit]

  1. ^https://msdn.microsoft.com/en-us/library/ee416842.aspx
  2. ^'Meltdown 2005 slideshow (.zip)'. Archived from the original on 2015-05-21. Retrieved 2012-11-13.CS1 maint: BOT: original-url status unknown (link)
  3. ^'Taking Advantage of High-Definition Mouse Movement'. MSDN. Microsoft. Retrieved 2009-01-25.
  4. ^'DirectInput ConfigureDevices in Windows Vista'. Web.archive.org. 2008-12-27. Archived from the original on December 27, 2008. Retrieved 2012-11-13.
  5. ^http://msdn.microsoft.com/en-us/library/windows/desktop/ee417014(v=vs.85).aspx
  6. ^http://msdn.microsoft.com/en-us/library/windows/desktop/ee417014(v=vs.85).aspx
  7. ^'XInput and DirectInput'. Microsoft. 2012-09-17. Retrieved 2012-12-27.
  8. ^'Gamepad - Rumbler Control'. Free60 Project. Archived from the original on 2009-03-13. Retrieved 2009-01-25.
  9. ^'XINPUT_VIBRATION'. Msdn.microsoft.com. Retrieved 2009-01-25.
  10. ^'DIEFFECT'. MSDN. Microsoft. Retrieved 2009-01-25.
  11. ^'DirectInput'. MSDN. Microsoft. Retrieved 2010-05-30.
  12. ^https://msdn.microsoft.com/en-us/library/windows/desktop/ee417014(v=vs.85).aspx
  13. ^'XInputGetAudioDeviceIds function'. MSDN. Retrieved 10 December 2013.

External links[edit]

Directinput Download

  • Microsoft's DirectInput documentation[permanent dead link]

Translate Directinput Commands For Xinput Games Mac Online

Retrieved from 'https://en.wikipedia.org/w/index.php?title=DirectInput&oldid=916350740'