Tuesday, March 6, 2018

How to expand the functions of an Xbox controller on a PC

I'm a fan of PC gaming because of the customizability, but what I'm not a fan of is gaming on a keyboard and mouse. It's so not ergonomic and so cumbersome. I just really love the way a good console controller fits in my hands and vibrates so lovingly....

Anyway, after playing borderlands 2 with my best friend who uses a keyboard and mouse religiously I've realized that playing with an Xbox One S controller has its limitations over a keyboard/mouse setup (I consider the Xbox One S controller the best controller out there for PC gaming, though I do like the layout of the PS4 controller better, but I like how the Xbox controller works naively without having to install third party drivers).

Pros of using a console controller:
  • Ergonomic design
  • Forced feedback (vibration)
  • No buttons you don't use: easier to access the ones you need
  • Analogue sticks and triggers
  • Way more intuitive controls 
Cons of using a console controller:
  • You're limited in how many buttons you have so multiple functions are assigned to the same button and some functions you are just absent on the controller.
    • Example: Borderlands II assigns pick up and reload to X which is really annoying and makes it super easy to accidentally reload with your Mechromancer when you're picking up ammo, causing you to lose your stacks. Yeah, super annoying.
  • You can rotate way faster on a mouse. The controller pan/tilt speed is regulated by the system whereas the mouse pan/tilt speed depends more on how quickly you move your mouse.
  • Keyboard button mappings in games are almost always customizable, but sometimes controller button mappings aren't customizable at all and when they are they are severely limited.
So, I got sick of accidental reloads, accidentally throwing grenades, and not being able to press T to talk to my friends without reaching over to my keyboard and I started looking for an alternative.

At first I tried out mapping my Wii balance board to other keys like T using a dolphin bar and Wii Balance Walker, which is a super cool program by the way. It worked ok and was kind of fun, but in practice not very playable and only help expand the functionality using my feet without really solving any of the problems.

Then I thought: I wish I could remap the buttons to whatever I wanted, but still keep some of the controllers native button mappings (because sometimes it's useful to have one button mapped to multiple functions), and who wants to remap an analogue stick to a digital keypad: that's icky.

I remembered this amazing program called AntiMicro that I used on Linux to map my old PS3 controller to use as a chorded keyboard, and I was delighted to discover that I they now make it for windows!

So, I installed it. It let me easily map my Xbox controller to any keyboard or mouse function I wanted, there was just one problem: the controller still performed its native functions on top of the ones in AntiMicro. So, I couldn't really remap anything, just add functions.

Then I remembered this program called x360ce which tricks games into thinking that any controller is an Xbox controller. You just copy the file into the same directory as your game's executable then run the configuration (sometimes you have to mode the name of the dll file: but they tell you how to do that on their page).

I realized that x360ce could be used for a completely different purpose: to disable some gamepad buttons in game, while leaving them completely operational to the rest of Windows. This allows you to use AntiMicro to then remap each button/stick/trigger to a keyboard or mouse function without it also performing it's default in game operation.

So this is a guide to how I totally modded my Xbox controller:

  1. Download x360ce (either 64 bit or 32 bit depending on your game) and copy it to your came directory with the executable file.
  2. Open the file: it will prompt you to make a config file, let it do that.
  3. Disable all the buttons you want to map to keyboard inputs by selecting <empty>. If you ever plan on using the triggers at the same time then you're going to have to set those to <empty> and remap them to keyboard or mouse buttons because for some dumb reason x360ce and the default windows xinput driver set both triggers on the same axis and there is no way of separating them in this app without installing a third party gamepad driver.  In the picture below you can see I only kept the left stick and Dpad active and the A and B buttons (since both of those buttons tend to be mapped to sets of functions in game that you can't easily map to key presses) and because I had not plans on remapping the Dpad or the left stick.
  4. Next you need to go to the Force Feedback tab and select "Enable force feedback." You shouldn't need to do anything else on this tab.

  5.  Now select the Advanced tab and then select "Force Feedback Pass Through." If you are trying to follow this guide with any other controller besides an Xbox controller then you probably don't need to select this option.
  6. Damn it! Stupid blogger screwed up my numbering scheme and I can't fix it. Oh well.
  7. Next you download AntiMicro and use it to map your previously <empty> buttons to whatever the heck you want.
  8. Here are a few AntiMicro presets I made for Borderlands II. One of them uses the right shoulder button as a shift button to switch to a higher mouse speed for the right stick and to change the function of the buttons. A slower mouse mode can be entered by holding the right shoulder and start.  The other one uses both shoulder buttons to shift into different modes, but I find it a bit more awkward to play with in some respects.
So far the only issue i can find with using this method is that if the last button you pressed is mapped to a keyboard then it thinks you are using a keyboard. The only problem this creates is if it thinks you are using a keyboard it doesn't send out force feedback data (vibration). Which basically means that it doesn't vibrate when you shoot guns in BL2, but usually vibrates otherwise.

Like I said before I really like a vibrating controller, so, I spent like 10 hours straight trying to figure out a way to resolve this issue. The only way I could think of was to find a way to separate the Z axis on the game pad into to axes in x360ce, but I guess you need a different driver to do that and it was a pain in the ass, so I gave up.

Anyway, if you want to increase the functionality of your controller and have many of the benefits of a keyboard/mouse setup then this should work for you at the cost of losing some of those good vibes.








No comments:

Post a Comment