How to Play DirectInput Games with Steam Input
Articles Blog

How to Play DirectInput Games with Steam Input

November 7, 2019

So you just bought one of your favorite older
games and booted it up, excited to see how your favorite modern controller might make
the experience feel fresh or revitalized. But when it loads your controller does nothing. You check your config and it’s set up perfectly
for being used as a gamepad. Using your keyboard you navigate to the Settings
menu and find that it doesn’t detect your controller at all. You immediately turn to the PC Gaming Wiki
for some sort of direction in how to address this issue when you notice what is causing
the entire problem: this game only supports DirectInput. This is a moderately large issue for Steam
Input users. XInput may be a decade and a half old and
practically any game that the majority of PC users will play will work with Steam Input,
but there is still a vast library of games that only support DirectInput. And that library includes pre-XInput games
as well as a handful of modern ones — though those tend to be more niche games that require
the extra buttons and axes that DirectInput allows for. Regardless, Steam Input doesn’t natively support
DirectInput which means there are hundreds of thousands of games that aren’t compatible
with it. As with all things revolving around Steam
Input, there is a workaround for this. We need to send XInput commands from Steam
Input and then translate them to DirectInput commands before they reach the game. We’ll be using a combination of ViGEm and
XInputPlus to achieve this. I’ll be using GloSC for my ViGEm implementation
but if you don’t want or need Steam’s overlay functions then you could use VDX instead. Links for these applications can be found
in the description. First we need to use XInputPlus to make the
files necessary for the command conversion. Unzip the XInputPlus file, navigate into that
folder, and run XInputPlus.exe. The first thing we will need to do is select
the .exe file of the game that we are wanting to play. For this example I will be using Bloodrayne. Then navigate to the DirectInput tab and check
the “Enable DirectInput Output” option. From here, go to the Advanced tab and check
“Disable XInput.” This shouldn’t be necessary for games that
only support DirectInput but it’s still a good practice so you don’t run into future
issues for games that support both. From here you could hit Apply and then OK
and be finished but if you wanted to customize your buttons then you could press the Customize
button in the Basic tab and change what each button does. You’ll also notice a SHIFT function. You can set one of the gamepad buttons to
be a Shift key which will give you access to more DirectInput keys if needed. For instance, if I set ‘A’ as the Shift key
then A+Start would be Button 25 and A+DPAD Up would be POV_UP. Here’s a hint: if you did set A to be the
Shift key then you could use Multi-Key Bindings in Steam Input to set A+B or A+Left Bumper
in your Steam config so you could access these buttons without actually holding your shift
key. Alright, so now we have clicked Apply in XInputPlus
and added the files for our game. As you can see in my Bloodrayne installation
folder, I now have 2 new Dinput .dll files, an XInput .dll file, and an XInputPlus .ini
file. Now it’s time to set up GloSC and Steam Input. Open GloSC and make a new shortcut. Enable Overlay and Enable Virtual Controllers
should be checked. Finally check Launch Game and direct it to
your game’s .exe file. Give it a name, click Save, and then Add All
to Steam. Steam will reboot and you’ll have your new
shortcut in your library. Make sure that you are using a gamepad config
and run your game. This time your gamepad should be recognized
just fine.

Only registered users can comment.

  1. I have recently discovered that XInput is backwards compatible with DirectInput so technically this fix isn't needed. However there are various situations that would cause issues for Steam Input.

    1. If a game is coded to look for gamepads based on drivers.

    2. If a game's axes are not remappable.

    3. If a game requires more buttons than the 5 axes and 18 buttons afforded by XInput.

    These situations can all create issues that GloSC and XInputPlus can fix. So you could either use this combination of applications with every DirectInput game and not worry about running into issues or you could use it as needed and attempt to run games with Steam Input hooking. The former requires less tinkering as it's a guaranteed fix but the latter could give you a better experience with the overlay since you won't have to alt-tab out of the game to see it.

  2. i tried to do what you said and glosc says some ViGem thing failed to initialize every time i start nascar season 2003. and then when the game opens it shows that there are no controller axis to calibrate so sadely….. the only way i see to get the controller support working is to play the games on linux under wine, which is kinda what i was already doing… i just wanted to learn this so my windows friend could have the same convenience that i have being a linux user

Leave a Reply

Your email address will not be published. Required fields are marked *