How to Configure Full Controller Support

HypovolemicHypovolemic Member
edited June 11 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 two layouts in separate posts:
Layout 1 (this post)
Layout 2 (second post)
There are pros and cons to each. The main difference are where Gear, Consumables, Unchained and the Support Ability are placed.


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_B",Command="KeyUse",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_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!

Edit:  Added Sabotage consumables menu to the config file (Start).
Post edited by Hypovolemic on

Comments

  • HypovolemicHypovolemic Member
    edited May 26
    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_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.
  • Great job on the controller support  <3
  • 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*)
Sign In or Register to comment.