Currently Infinity:Battlescape is in Alpha and does not have an ingame keyboard/input configuration option.
The pre-launch menu has an keyboard/input configurator though.
It also does have the option to switch between different pre configured Input Profiles:
As well as select two controllers.
It is also possible to manually go in and add new profiles by creating/copying .xml files in a specific folder.
These profiles can then be selected in the pre-launch configuration menu.
This post serves the purpose as a repository of all working options as well as general guide how to make these configuration files work for your desired setup.
Manual XML Configuration, ReadMe, Info and Events
The location of the “Keyboard profile:” .xml files is:
C:\Users\<YourUser>\Documents\I-Novae Studios\Infinity Battlescape\Profiles
.xml edit or added in here will affect the game and be selectable.
There’s another folder that serves as a “original”. It can be found here:
C:\Program Files\I-Novae Studios\Battlescape\Dev\Profiles
(Replace C:\Program Files\ with your custom instalation directory)
.xml edit or added in here will not affect the game!
In this folder there’s a Readme.txt file that serves as a guide on how to edit Profile .xml and also includes a table that shows the complete list of keys supported by the input mapper:
Here’s a paste of said Readme.txt: (from I:B Version 0.3.3.0)
Key binding & Mapping in I-Novae Engine
Each profile xml file can be edited to customize the key/events bindings.
A single line is under the form:
<Input Event = "<EventName>" Keys = "<string list>" SecKeys = "<string list>" Reverse="<boolean:true|false>" Type = "<string>" Data = "<string>" />
- <EventName> is the name of the event for which the keys are bound to
Ex: Event = "Power"
- Keys and SecKeys are respectively the primary and secondary (alternate) keys which are bound to the event.
It can be a single key, or a list of key combination separated by "+"
Ex.: Keys = "LeftCtrl + X"
- Reverse is a boolean that indicates whether the key values must be inverted (it can be used to invert a specific axis)
Ex: Reverse = "true"
- Type specifies the kind of values and range the input event is expecting. You can specify one of the followings: ToggleButton, AnalogButton, Arrow, Axis or Throttle
It is also used to check for conflicts, or that the mapped keys correspond to the type of intput (ex.: if you specify an "axis" type but provide a binary key instead).
Ranges are as follows:
ToggleButton: 0.0 or 1.0
AnalogButton: 0.0 to 1.0 (Ex.: 0.3751)
Arrow: idle returns a value of -1.0. Otherwise the value represents the normalized angle between 0.0 and 1.0 (Ex:0=up 0.25=right 0.5=down 0.75=left)
Axis: -1.0 to 1.0 with idle at 0.0
Throttle: can be assigned an axis, but the range gets remapped to 0.0 to 1.0 instead. This allows the throttle in bottom-most position to return 0.0 instead of -1.0
- Data is an event-specific data.
Ex.: the "SwitchOvercharge" event by default cycles through overcharge modes. But if you specify Data="Weapons", it willll switch to weapons overcharge no matter what the previous mode was.
LIST OF ISSUES:
- when pressing an arrow, some devices also report the "arrow angle" as a button, or a bitfield for the arrow angle ID (ex.: on an 8-hat arrow, the device can report 4 buttons which correspond each to a bit in a 4-bitsfield, which encode a total of 8 values)
-> in detection utility, should arrows ignore buttons?
- the default value when alt-tabbed is zero. This can get remapped to 0.5 for the SetTargetSpeed throttle for example, therefore when alt-tabbing your ship accelerates to 50% !
Valid key names
This table shows the complete list of keys supported by the input mapper:
Origin Key name Type Description
Mouse MouseAxisX Axis Horizontal mouse axis
Mouse MouseAxisY Axis Vertical mouse axis
Mouse MouseWheel Axis Mouse wheel (also fires wheel up/down keys)
Mouse MouseWheelUp ToggleButton Mouse wheel is going up
Mouse MouseWheelDown ToggleButton Mouse wheel is going down
Mouse MouseButtonLeft ToggleButton Left mouse button click
Mouse MouseButtonRight ToggleButton Right mouse button click
Mouse MouseButtonMiddle ToggleButton Middle mouse button click
Mouse MouseButtonX1 ToggleButton Extended mouse button 1 click
Mouse MouseButtonX2 ToggleButton Extended mouse button 2 click
Joystick0 Joystick0Axis0 Axis Axis 0 on joystick 0
Joystick0 Joystick0Axis1 Axis Axis 1 on joystick 0
Joystick0 Joystick0Axis2 Axis Axis 2 on joystick 0
Joystick0 Joystick0Axis3 Axis Axis 3 on joystick 0
Joystick0 Joystick0Axis4 Axis Axis 4 on joystick 0
Joystick0 Joystick0Axis5 Axis Axis 5 on joystick 0
Joystick0 Joystick0Axis6 Axis Axis 6 on joystick 0 (sometimes mapped to sliders/throttles)
Joystick0 Joystick0Axis7 Axis Axis 7 on joystick 0 (sometimes mapped to sliders/throttles)
Joystick0 Joystick0Arrow0 Arrow Arrow 0 on joystick 0
Joystick0 Joystick0Arrow1 Arrow Arrow 1 on joystick 0
Joystick0 Joystick0Arrow2 Arrow Arrow 2 on joystick 0
Joystick0 Joystick0Arrow3 Arrow Arrow 3 on joystick 0
Joystick0 Joystick0Button<N> ToggleButton Button #N on joystick 0 (ex.: Joystick0Button7 for button #7); N = 0 to 31
Joystick1 Joystick1Axis0 Axis Axis 0 on joystick 1
Joystick1 Joystick1Axis1 Axis Axis 1 on joystick 1
Joystick1 Joystick1Axis2 Axis Axis 2 on joystick 1
Joystick1 Joystick1Axis3 Axis Axis 3 on joystick 1
Joystick1 Joystick1Axis4 Axis Axis 4 on joystick 1
Joystick1 Joystick1Axis5 Axis Axis 5 on joystick 1
Joystick1 Joystick1Axis6 Axis Axis 6 on joystick 1 (sometimes mapped to sliders/throttles)
Joystick1 Joystick1Axis7 Axis Axis 7 on joystick 1 (sometimes mapped to sliders/throttles)
Joystick1 Joystick1Arrow0 Arrow Arrow 0 on joystick 1
Joystick1 Joystick1Arrow1 Arrow Arrow 1 on joystick 1
Joystick1 Joystick1Arrow2 Arrow Arrow 2 on joystick 1
Joystick1 Joystick1Arrow3 Arrow Arrow 3 on joystick 1
Joystick0 Joystick1Button<N> ToggleButton Button #N on joystick 1 (ex.: Joystick1Button7 for button #7); N = 0 to 31
Keyboard A ToggleButton
Keyboard B ToggleButton
Keyboard C ToggleButton
Keyboard D ToggleButton
Keyboard E ToggleButton
Keyboard F ToggleButton
Keyboard G ToggleButton
Keyboard H ToggleButton
Keyboard I ToggleButton
Keyboard J ToggleButton
Keyboard K ToggleButton
Keyboard L ToggleButton
Keyboard M ToggleButton
Keyboard N ToggleButton
Keyboard O ToggleButton
Keyboard P ToggleButton
Keyboard Q ToggleButton
Keyboard R ToggleButton
Keyboard S ToggleButton
Keyboard T ToggleButton
Keyboard U ToggleButton
Keyboard V ToggleButton
Keyboard W ToggleButton
Keyboard X ToggleButton
Keyboard Y ToggleButton
Keyboard Z ToggleButton
Keyboard 0 ToggleButton
Keyboard 1 ToggleButton
Keyboard 2 ToggleButton
Keyboard 3 ToggleButton
Keyboard 4 ToggleButton
Keyboard 5 ToggleButton
Keyboard 6 ToggleButton
Keyboard 7 ToggleButton
Keyboard 8 ToggleButton
Keyboard 9 ToggleButton
Keyboard F1 ToggleButton
Keyboard F2 ToggleButton
Keyboard F3 ToggleButton
Keyboard F4 ToggleButton
Keyboard F5 ToggleButton
Keyboard F6 ToggleButton
Keyboard F7 ToggleButton
Keyboard F8 ToggleButton
Keyboard F9 ToggleButton
Keyboard F10 ToggleButton
Keyboard F11 ToggleButton
Keyboard F12 ToggleButton
Keyboard KeyPad0 ToggleButton 0 on keypad
Keyboard KeyPad1 ToggleButton 1 on keypad
Keyboard KeyPad2 ToggleButton 2 on keypad
Keyboard KeyPad3 ToggleButton 3 on keypad
Keyboard KeyPad4 ToggleButton 4 on keypad
Keyboard KeyPad5 ToggleButton 5 on keypad
Keyboard KeyPad6 ToggleButton 6 on keypad
Keyboard KeyPad7 ToggleButton 7 on keypad
Keyboard KeyPad8 ToggleButton 8 on keypad
Keyboard KeyPad9 ToggleButton 9 on keypad
Keyboard KeyPadMultiply ToggleButton * on keypad
Keyboard KeyPadDecimal ToggleButton . on keypad
Keyboard KeyPadPlus ToggleButton + on keypad
Keyboard KeyPadClear ToggleButton 5 on keypad
Keyboard KeyPadDivide ToggleButton / on keypad
Keyboard KeyPadMinus ToggleButton - on keypad
Keyboard KeyPadEnter ToggleButton Enter on keypad
Keyboard Up ToggleButton Arrow up
Keyboard Down ToggleButton Arrow down
Keyboard Left ToggleButton Arrow left
Keyboard Right ToggleButton Arrow right
Keyboard Equal ToggleButton =
Keyboard Separator ToggleButton |
Keyboard Subtract ToggleButton -
Keyboard Decimal ToggleButton .
Keyboard Divide ToggleButton /
Keyboard Space ToggleButton Space bar
Keyboard Return ToggleButton Return/Enter
Keyboard LeftCtrl ToggleButton Left control
Keyboard RightCtrl ToggleButton Right control
Keyboard LeftShift ToggleButton Left shift
Keyboard RightShift ToggleButton Right shift
Keyboard LeftAlt ToggleButton Left alt
Keyboard RightAlt ToggleButton Right alt
Keyboard Numlock ToggleButton
Keyboard Capslock ToggleButton
Keyboard Escape ToggleButton
Keyboard PageUp ToggleButton
Keyboard PageDown ToggleButton
Keyboard End ToggleButton
Keyboard Home ToggleButton
Keyboard Insert ToggleButton
Keyboard Delete ToggleButton
Keyboard Help ToggleButton
Keyboard Tab ToggleButton
Keyboard Backspace ToggleButton
Keyboard Print ToggleButton
Keyboard Scroll ToggleButton
Keyboard Pause ToggleButton
Keyboard LeftBracket ToggleButton
Keyboard RightBracket ToggleButton
Keyboard Quote ToggleButton
Keyboard SemiColon ToggleButton
Keyboard Comma ToggleButton
Keyboard Tilde ToggleButton
Keyboard Command ToggleButton Left System key
Mapping of controls on various controllers
The following were found experimentally and are only of indicative value.
Other controllers might have different axes/buttons assignment.
Values range from -1 to +1 for axes (left to right, top to bottom).
Note that vertical axes are using DirectInput/Windows standard, which means up is going negative
(like in screen coordinates, top-left of the screen is 0,0).
So you might have to reverse some vertical axes in the input mapper.
Note that triggers are technically axes, but they give values in the 0 to 1 range, so they can be used as buttons in the input mapper too.
XBox 360 XBox 360 Playstation 4
DirectInput XInput DirectInput
Left stick X Joystick0Axis0 Joystick0Axis0 Joystick0Axis0
Left stick Y Joystick0Axis1 Joystick0Axis1 Joystick0Axis1
Right stick X Joystick0Axis2 Joystick0Axis2 Joystick0Axis4
Right stick Y Joystick0Axis3 Joystick0Axis3 Joystick0Axis5
Left trigger Joystick0Axis4 Joystick0Axis4 Joystick0Axis2 (or Joystick0Button6)
Right trigger Joystick0Axis5 Joystick0Axis5 Joystick0Axis3 (or Joystick0Button7)
Crosspad Joystick0Arrow0 Joystick0Arrow0 Joystick0Arrow0
Up Joystick0Button11 Joystick0Button11 Joystick0Button14
Right Joystick0Button12 Joystick0Button12 Joystick0Button15
Down Joystick0Button13 Joystick0Button13 Joystick0Button16
Left Joystick0Button14 Joystick0Button14 Joystick0Button17
Button down Joystick0Button0 (A) Joystick0Button0 (A) Joystick0Button1 (X)
Button left Joystick0Button2 (X) Joystick0Button2 (X) Joystick0Button0 (square)
Button right Joystick0Button1 (B) Joystick0Button1 (B) Joystick0Button2 (circle)
Button up Joystick0Button3 (Y) Joystick0Button3 (Y) Joystick0Button3 (triangle)
Left option Joystick0Button6 Joystick0Button6 Joystick0Button8
Right option Joystick0Button7 Joystick0Button7 Joystick0Button9
Shoulder left Joystick0Button4 Joystick0Button4 Joystick0Button4
Shoulder right Joystick0Button5 Joystick0Button5 Joystick0Button5
Left stick press Joystick0Button8 Joystick0Button8 Joystick0Button10
Right stick press Joystick0Button9 Joystick0Button9 Joystick0Button11
System button Joystick0Button10 Joystick0Button12
Playstation touchpad Joystick0Button13
There also is a tool Flavien created in order to help identify what key/axis/button is what, it’s especially helpfull when trying to configure joysticks. The input configuration made it obsolete, so it is recommended you rather use the one under “EDIT KEY BINDINGS”. The old tool can be found here, it may become incompatible at a certain point:
C:\Program Files\I-Novae Studios\Battlescape\Dev\Profiles\Detect Input Tool\DetectInput.exe
(Replace C:\Program Files\ with your custom installation directory), or (Windows 10)
%USERNAME%\AppData\Local\I-Novae Studios\Battlescape\Dev\Profiles\Detect Input Tool\DetectInput.exe
There is a number of events that can be configured in the .xml files. The Input/Profile configuration lists most relevant events. There might be some that may be not listed.
The majority of available events are already used/defined in the default profiles.
Still, for us with access to the game right now, here’s an attempt to list all known events:
Events used in default mapping profiles of I:B v0.2.7.0 (Input Mapper Version 0.0.0.5) (To be updated)
<!-- Ship translation -->
ShipZ Type = "Axis"
ShipX Type = "Axis"
ShipY Type = "Axis"
<!-- Ship orientation -->
ShipYaw Type = "Axis"
ShipPitch Type = "Axis"
ShipRoll Type = "Axis"
<!-- Head orientation in cockpit mode -->
<!-- Ship controls -->
<!-- Ship systems -->
<!-- Target speed in flight auto assist mode -->
DeltaTargetSpeed Type = "Axis"
<!-- Targets selection -->
<!-- View controls -->
<!-- Other game systems -->
Non Default events confirmed working in I:B v0.3.3.0
Events unknown if still working in I:B v0.3.3.0
CycleLocations (Probably debug)
Timelapse (Probably debug)
Events confirmed not working in I:B v0.3.3.0
Please feel free to add any from previous versions.
You can see in the “readme.txt” that one can configure two different Input devices beside Keyboard and Mousse. The game launcher lets you select both of them though, the first one, even if you would use “Joystick1…” Keynames it won’t work due to this.
There is a workaround though. Using third party software like Universal Control Remapper. You can have multiple devices feed into one “Master Device” and use that device as your Pirmary “Joystick0” device.
Your “Master Device” needs to be a virtual one, so sadly you can’t just map all your devices to one of your hardware devices. With vJoy you can create virtual devices.
Tutorial on how to do this ...
Install and configure vJoy
- Download and install vJoy (It’s the big green Download Image)
Direct Download Link
- Start “Configure vJoy” from the Start menu or open “vJoyConf.exe” in the installation directory.
- Make sure “Enable vJoy” is checked in the lower left corner.
- Configure your vJoy device with the ammount of features you need. If you are not sure select tab 1, add device if it’s not added yet, select all axis, enter 15 into “Number of Buttons” and leave everything as is.
- Add Device or Apply after you are done.
Install and configure UCR
- Download and extract UCR
Direct Download Link
- Start UCR.exe
- Use Default Profile or create a new one with the “Add” button.
- Start remapping your Devices by Selecting “Plugin Selection” > “Remapper (Axis To Axis)” / "Remapper (Button To Button) etc.
- Add the plugin.
- Configure the plugin. Give it a clear name to differentiate it.
- Do this for every axis and every button.
Use the "Master Device
With UCR running you can now create a configuration .xml for Battlescape the usual way. When starting the game make sure to select the “DirectInput vJoy” device as your “Controlller”.
This post is set as a wiki post in order for anyone to be able to update the information.