How to Configure Full Controller Support

HypovolemicHypovolemic Member
edited July 28 in Community Guides
You may have noticed that full controller support hasn't yet been implemented.  There are a few UI changes still needed to get there, but we can get pretty close by messing with the configuration files. 

Layouts


This guide contains three layouts in separate posts:

Layout 1 (this post)  -  Gear emphasized. Support ability de-emphasized.
Layout 2 (second post)  -  Support ability emphasized. Gear de-emphasized.
Layout 3 (later post)   -  Ease of ability aiming emphasized. Use/Sell de-emphasized.

There are pros and cons to each. I think Layout 2 is probably the best all around layout. I personally use Layout 3, which is very much an FPS layout. It's an acquired taste though, so YMMV.  Layout 1 is better for Gear, but given the current state of Gear in the game it's probably the weakest option.


Controller Layout 1


The image below shows the final controller configuration after following the steps in this guide. A couple functions in the layout are a bit awkward to use, but it fits almost everything - the only missing thing is the hero info page (I), but that's not really important.



Peculiarities


Alternate Action (D-Down)

The D-Down button is used as a context switch in this layout. Everything shown in green requires you to press D-Down and the corresponding button to perform the listed function. Note, this makes accessing the Weaver Dialog and Options menu rather awkward, but they are rarely need. Also, this has the weird side effect of making it so that D-Down no longer works to select menu items in the Options menu - just use the left stick instead.


Gear and Consumables

Gear and Consumables are placed on the bumpers for fast access. Consumables are the alternate action (D-Down + LB/RB).

There is an outstanding bug with the Quickcast2/3 bindings that prevents them from working and the default Loadout2/3 bindings (keys 2 and 3) are intentionally broken for the Gnomish Repair Kit, Fire Bracers and Ice Amulet. Until these issues are resolved, I've implemented a workaround in the configuration listed as "QuickHack2" and "QuickHack3". This workaround changes the behavior of the three affected Gear to fire when the button is released, instead of when pressed (for only those three Gear). The annoying thing about this is that you have to hold the button for half a second before releasing it because there is a delay between selection and firing.

If you dislike this behavior, then simply replace these lines:
Bindings=(Name="XboxTypeS_RightShoulder",Command="QuickHack3",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_LeftShoulder",Command="QuickHack2",ModifierKeyNames=,BindType=KBT_Controller)
With these lines:
Bindings=(Name="XboxTypeS_RightShoulder",Command="Weap3",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_LeftShoulder",Command="Weap2",ModifierKeyNames=,BindType=KBT_Controller)

Radial Comms

Because of the placement of the Radial Comms, I had to change the behavior so that it doesn't automatically send the message upon release of the B button. Instead, is sends the message upon releasing the D-Down button. Meaning, you use the comms by: (1) opening the dialog by pressing D-Down + B, (2) select the message using the right stick while holding D-Down (you don't need to hold B), and (3) release D-Down to send the message.


Configuring


Game Options

First, you need to change one game option to allow us to assign Rotate Trap to the same button as Secondary Attack. Go to Options | Gameplay and ensure that the "No-Secondary Default Behavior" option is set to "Do Nothing".

Configuration File Edits

Then edit the configuration file found at:
C:\Users\%USERNAME%\Documents\My Games\Orcs Must Die Unchained\SpitfireGame\Config\SpitfireInput.ini

Find the section titled:
[SpitfireGame.RPlayerInput]
If this section is either absent or empty just load a game and remap one button. It doesn't matter what it is. This will populate all the keybindings in the config file. 

Comment out the "OpenRadialComms" alias by placing a semicolon (;) in front of it so looks like:
;Bindings=(Name="OpenRadialComms",Command="OpenRadialComms | OnRelease SendCurrentlySelectedRadialComm",ModifierKeyNames=,BindType=KBT_Primary)
Then remove all bindings that start with "XboxTypeS" and replace them with the following lines:

; Gear Workaround
Bindings=(Name="QuickHack2",Command="EquipInventoryIndex 1 | OnRelease StartFire | OnRelease StopFire | OnRelease StopFireIfRanOnEquip 1 | OnRelease EquipInventoryIndex 0")
Bindings=(Name="QuickHack3",Command="EquipInventoryIndex 2 | OnRelease StartFire | OnRelease StopFire | OnRelease StopFireIfRanOnEquip 2 | OnRelease EquipInventoryIndex 0")

; Common Primary Actions
Bindings=(Name="XboxTypeS_LeftX",Command="Axis aStrafe Speed=1.0 DeadZone=0.3",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_LeftY",Command="Axis aBaseY Speed=1.0 DeadZone=0.3",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_RightX",Command="Axis aTurn Speed=1.0 DeadZone=0.2",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_RightY",Command="Axis aLookup Speed=1.0 DeadZone=0.2",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_LeftTrigger",Command="AltFire | KeyRotateTrap",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_RightTrigger",Command="Fire",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_Start",Command="DoGo | OpenConsumableMenu | ToggleShowTraps",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_Back",Command="ToggleShowTabUI",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_Y",Command="Ability2",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_X",Command="Ability1",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_B",Command="RequestDeathBuyback",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_A",Command="DoJump | ToggleKillStatsUI",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_DPad_Up",Command="Weap1",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_DPad_Left",Command="PrvWeapon",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_DPad_Right",Command="NxtWeapon",ModifierKeyNames=,BindType=KBT_Controller)

; Layout 1 - Primary Actions
Bindings=(Name="XboxTypeS_B",Command="KeyUse",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_LeftThumbStick",Command="BecomeUnchained",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_RightThumbStick",Command="Ability3",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_RightShoulder",Command="QuickHack3",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_LeftShoulder",Command="QuickHack2",ModifierKeyNames=,BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_DPad_Down",Command="OnRelease SendCurrentlySelectedRadialComm",ModifierKeyNames=,BindType=KBT_Controller)

; Layout 1 - Alternate Actions
Bindings=(Name="XboxTypeS_RightShoulder",Command="Consumable2",ModifierKeyNames=("XboxTypeS_DPad_Down"),BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_LeftShoulder",Command="Consumable1",ModifierKeyNames=("XboxTypeS_DPad_Down"),BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_Y",Command="WeaverOption1",ModifierKeyNames=("XboxTypeS_DPad_Down"),BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_X",Command="WeaverOption2",ModifierKeyNames=("XboxTypeS_DPad_Down"),BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_A",Command="WeaverOption3",ModifierKeyNames=("XboxTypeS_DPad_Down"),BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_B",Command="OpenRadialComms",ModifierKeyNames=("XboxTypeS_DPad_Down"),BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_Start",Command="PauseGame",ModifierKeyNames=("XboxTypeS_DPad_Down"),BindType=KBT_Controller)
Bindings=(Name="XboxTypeS_Back",Command="OpenWeaverDialog",ModifierKeyNames=("XboxTypeS_DPad_Down"),BindType=KBT_Controller)

Summary


I find this layout works pretty well and is considerably faster than the default layout, but you can adjust it freely to taste.  Most of this you can do inside the keymap options, except for getting Rotate Trap onto the Left Trigger, rebinding the Start button, and the tricks with the comms and gear.

Happy hunting!

Edit1:  Added Sabotage consumables menu to the config file (Start).
Edit2:  Updated for addition of Layout 2.
Edit3:  Updated for addition of Layout 3.
Post edited by Hypovolemic on

Comments

  • HypovolemicHypovolemic Member
    edited July 28
    Back in the Siege days I used a slightly different layout, mostly due to the long cooldowns on Gear and the importance of the Shift ability. With the current problems with quickcast being broken for certain Gear, I'm finding such a config more relevant. Maybe you will too?

    Controller Layout 2



    The above scheme is mostly the same as the previous one, except the Alternate Action button has been moved to LB, Gear and Consumables have been moved to LS/RS, the Shift Ability and Unchained have been moved to RB, and Ping works similarly to the default input just on D-Down instead. Also, I've adding the Hero Info page, just because I could.

    Configuring Layout 2


    In the previous scheme (Layout 1) there are two sections in the bindings titled "Layout 1 - Primary Actions" and "Layout 1 - Alternate Actions".  To use Layout 2 you just need to remove the Radial Comms workaround by removing the semicolon from in front of this line:
    Bindings=(Name="OpenRadialComms",Command="OpenRadialComms | OnRelease SendCurrentlySelectedRadialComm",ModifierKeyNames=,BindType=KBT_Primary)
    Then replace the "Layout 1" sections with the "Layout 2" sections below:
    ; Layout 2 - Primary Actions
    Bindings=(Name="XboxTypeS_B",Command="KeyUse",ModifierKeyNames=,BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_LeftThumbStick",Command="QuickHack2",ModifierKeyNames=,BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_RightThumbStick",Command="QuickHack3",ModifierKeyNames=,BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_RightShoulder",Command="Ability3",ModifierKeyNames=,BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_LeftShoulder",Command="",ModifierKeyNames=,BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_DPad_Down",Command="OpenRadialComms",ModifierKeyNames=,BindType=KBT_Controller)
    
    ; Layout 2 - Alternate ActionsBindings=(Name="XboxTypeS_LeftThumbStick",Command="Consumable1",ModifierKeyNames=("XboxTypeS_LeftShoulder"),BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_RightThumbStick",Command="Consumable2",ModifierKeyNames=("XboxTypeS_LeftShoulder"),BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_RightShoulder",Command="BecomeUnchained",ModifierKeyNames=("XboxTypeS_LeftShoulder"),BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_Y",Command="WeaverOption1",ModifierKeyNames=("XboxTypeS_LeftShoulder"),BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_X",Command="WeaverOption2",ModifierKeyNames=("XboxTypeS_LeftShoulder"),BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_A",Command="WeaverOption3",ModifierKeyNames=("XboxTypeS_LeftShoulder"),BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_B",Command="OpenWeaverDialog",ModifierKeyNames=("XboxTypeS_LeftShoulder"),BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_Start",Command="PauseGame",ModifierKeyNames=("XboxTypeS_LeftShoulder"),BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_Back",Command="ShowMyHeroInfo",ModifierKeyNames=("XboxTypeS_LeftShoulder"),BindType=KBT_Controller)
    

    That's it.
    Post edited by Hypovolemic on
  • Great job on the controller support  <3
    Thanks!  Now if they'd just enable right stick mouse emulation in the engine I could enable it in the config file for Sabotage...

    (*hint* *hint*)
  • HypovolemicHypovolemic Member
    edited September 19
    With the release of a new patch comes a wipe of your keybindings. Yay :/. But, it also brings Deadeye! Which is waaaay cooler than a keybinding wipe.  I thought I should add another layout that works well with such heroes. This layout is much more of an FPS game layout and is a larger departure from the default layout, but I find that it works pretty well. Though, it's an acquired taste.

    Layout 3


    Configuring Layout 3


    The biggest change here is that Gear, Consumables and the Support Ability have been moved to face buttons and Use/Sell has been placed in the slightly awkward location of R3. For most of what you do this makes aiming easier. Also, there are two sets of alternate actions in this layout. Holding D-Down is used for most alternate actions, but D-Up is used exclusively for Consumables.

    Layout 3 is configured in a similar way to Layout 2.  Just take the two sections labeled "Layout 1" in the bindings shown in the first post ("Layout 1 - Primary Actions" and "Layout 1 - Alternate Actions") and replace them with the following "Layout 3" sections:
    ; Layout 3 - Primary Actions
    Bindings=(Name="XboxTypeS_RightThumbStick",Command="KeyUse",ModifierKeyNames=,BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_RightShoulder",Command="Ability2",ModifierKeyNames=,BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_LeftShoulder",Command="Ability1",ModifierKeyNames=,BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_X",Command="Ability3",ModifierKeyNames=,BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_Y",Command="QuickHack2",ModifierKeyNames=,BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_B",Command="QuickHack3",ModifierKeyNames=,BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_LeftThumbStick",Command="BecomeUnchained",ModifierKeyNames=,BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_DPad_Down",Command="OnRelease SendCurrentlySelectedRadialComm",ModifierKeyNames=,BindType=KBT_Controller)
    
    ; Layout 3 - Alternate Actions
    Bindings=(Name="XboxTypeS_Y",Command="Consumable1",ModifierKeyNames=("XboxTypeS_DPad_Up"),BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_B",Command="Consumable2",ModifierKeyNames=("XboxTypeS_DPad_Up"),BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_Y",Command="WeaverOption1",ModifierKeyNames=("XboxTypeS_DPad_Down"),BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_X",Command="WeaverOption2",ModifierKeyNames=("XboxTypeS_DPad_Down"),BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_A",Command="WeaverOption3",ModifierKeyNames=("XboxTypeS_DPad_Down"),BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_B",Command="OpenRadialComms",ModifierKeyNames=("XboxTypeS_DPad_Down"),BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_Start",Command="PauseGame",ModifierKeyNames=("XboxTypeS_DPad_Down"),BindType=KBT_Controller)
    Bindings=(Name="XboxTypeS_Back",Command="OpenWeaverDialog",ModifierKeyNames=("XboxTypeS_DPad_Down"),BindType=KBT_Controller)
    Ta-da! Now you're playing Overwatch.
    Post edited by Hypovolemic on
Sign In or Register to comment.