Not every PC game lives in Steam. Standalone installers, itch.io downloads, DRM-free releases, and small indie executables shared as a simple zip file all share one trait: there is no launcher standing between you and the game to fix your controller for you. If the game expects an Xbox-style pad and you are holding a DualShock 4, this general method — one InputMapper setup at the Windows level — is how you make the two meet, for any standalone game.
The General Method in One Sentence
InputMapper is DSDCS freeware, final build 1.7.7452.13622 from May 2020, and it maps supported controllers — the DS4 and DS4 V2, Xbox 360 and Xbox One pads, and generic DirectInput and XInput devices used as inputs — to a virtual Xbox 360 controller through ViGEmBus 1.22.0, the final archived version of that driver. Because the mapping happens at the Windows OS level, any game that reads XInput can see the virtual pad. The game does not need to know InputMapper exists. Windows has an Xbox 360 controller, you are holding it in everything but name, and the game behaves accordingly.
This is why the method generalises. Steam games, Epic and GOG titles, emulators, and a lone executable in a downloads folder all read controllers from the same Windows layer. Set the virtual controller up once and every category benefits — which is also why problems should be fixed at that layer first, before you go hunting through a specific game’s options menu. If you are starting from zero, pair this guide with how to use InputMapper for the first-run walkthrough.
Step One: One Global Profile for Most Games
Start with a single global profile: your DS4 mapped one-to-one to an Xbox 360 layout, with no creative remapping. Face button positions match their Xbox equivalents by location, triggers stay triggers, and sticks keep sensible deadzones. Install ViGEmBus and InputMapper from the download page, build that plain profile, and prove it in the Windows Game Controllers panel before you involve any game at all.
A clean global profile is your baseline and your diagnostic tool. If a new standalone game misbehaves, returning to the global profile tells you instantly whether the problem is the game or your customisations. Most standalone and indie games need nothing more than this baseline, because they were built and tested against a standard Xbox pad — which is precisely the device your global profile presents.
Step Two: Per-Game Profiles With Auto-Switching
Once the baseline works, per-game profiles handle the exceptions: a game with an unusual default layout, a title where you want the triggers swapped, or an older release that needs a couple of keyboard keys mapped onto spare buttons. InputMapper profiles can be tied to a game’s executable so the right profile loads automatically when that game starts, and the global profile returns when it closes.
Auto-switching is what makes a multi-profile setup pleasant rather than fiddly. Without it, you will eventually launch a game while the wrong profile is active and spend ten minutes blaming the game for your own setup. With it, your routine never changes: start InputMapper, start the game, play. The complete method for building and linking profiles is in InputMapper profiles — build per-game profiles sparingly, only where a game genuinely benefits, and leave everything else on the global profile.
Keep InputMapper Running Before the Game Starts
The single most common failure with standalone games is launch order. Many games scan for controllers once, at startup, and never look again. If InputMapper was not running — or its profile was not active — when the game started, the virtual controller simply was not there to be found, and reconnecting your pad mid-game changes nothing.
Make the order a habit: controller connected, InputMapper running with the correct profile active, virtual controller confirmed if you are troubleshooting, and only then the game. Leaving InputMapper running in the background while you play is expected; it is a small utility doing a live translation, and closing it mid-session removes the controller your game is actively using. If you previously tried to solve controller problems through Steam, also check that an old Steam Input configuration is not fighting your setup — the InputMapper and Steam Input conflict guide explains how to untangle that.
Exclusive Mode, HidHide, and Double Input
Standalone games show one recurring side effect: double input, where a single press acts twice because the game reads both your physical DS4 and the virtual Xbox 360 pad. Games that listen to both DirectInput and XInput are the usual suspects, and the symptom is obvious in menus long before it affects gameplay.
The remedy is to hide the physical controller from games while InputMapper keeps exclusive use of it. HidHide v1.5.230 performs that hiding, and InputMapper’s own exclusive-mode style options pursue the same goal from the other side. Work through the InputMapper double input fix step by step the first time it happens; afterwards, keeping HidHide configured once protects every standalone game you install later, not just the one that first showed the problem.
The Pre-Flight Checklist for Any Standalone Game
Use this checklist the first time you play any non-Steam game with a DS4. After a few repetitions it becomes automatic, and it turns “the controller does not work” into a two-minute diagnosis instead of a forum search.
- Controller connected by USB or Bluetooth and visible in InputMapper.
- InputMapper running, with the global profile — or the correct per-game profile — active.
- Virtual Xbox 360 controller present in the Windows Game Controllers panel and responding to test inputs.
- HidHide configured if this game, or games like it, have shown double input before.
- No second translator, such as Steam Input on a shortcut, remapping the same controller for this game.
- Game launched after all of the above, not before.
- In-game controller prompts checked once in the first menu, before starting a long session.
One caveat belongs on every checklist: kernel-level anti-cheat in some competitive titles can object to virtual controllers. Standalone competitive games are not exempt just because they skip Steam. Check a competitive game’s current rules before relying on a virtual pad there, and expect no mapper to be promised as universally accepted or safe from bans.
An honest boundary, too: DualSense and Switch Pro controllers are not InputMapper inputs, so this method does not extend to those pads. DualSense owners should follow the dedicated DualSense on PC routes instead of forcing a tool that never supported the controller. For alternatives if InputMapper ever stops suiting your library, our InputMapper alternatives page keeps the options current and honest.
More Standalone Games Worth Playing
Indie and DRM-free libraries are where standalone games shine, and a working pad makes the backlog far more approachable.
Browse Standalone Games on Humble
Affiliate link — see our Affiliate Disclosure.
Frequently Asked Questions
Does this method work for itch.io and DRM-free games?
Yes, as long as the game reads XInput. InputMapper maps your DS4 to a virtual Xbox 360 controller at the Windows level, so standalone, itch.io, and DRM-free games see that controller exactly as a Steam game would, with no launcher involved.
Should I use one global profile or a profile for every game?
Start with one clean global profile with a standard Xbox 360 layout — most games need nothing else. Add per-game profiles with auto-switching only for titles that genuinely benefit from remapping, so your setup stays simple and easy to troubleshoot.
Why does my controller only work if I start InputMapper first?
Many games scan for controllers once at startup and never check again. If the virtual controller did not exist when the game launched, the game cannot find it later, so always run InputMapper with your profile active before starting the game.
My button presses are registering twice. What causes that?
That is double input: the game is reading your physical DS4 and the virtual Xbox 360 pad together. Hide the physical controller from games with HidHide v1.5.230 while InputMapper uses it, and make sure no second translator is remapping the same pad.
