InControl: Standardized Controls

Device profiles map supported controllers on various platforms to a strict set of named controls that can be relied upon to be present. Physical positions (particularly for action buttons) will match across devices for uniformity.

  • LeftStickLeft, LeftStickRight, LeftStickUp, LeftStickDown, LeftStickButton
  • RightStickLeft, RightStickRight, RightStickUp, RightStickDown, RightStickButton
  • DPadLeft, DPadRight, DPadUp, DPadDown
  • Action1, Action2, Action3, Action4
  • LeftTrigger, RightTrigger
  • LeftBumper, RightBumper
  • Command

Illustration: Standardized Controls

Note: the API makes little distinction between analog and button controls, so both a float value and bool state can be queried for any input.

Of course, there are a few devices which may only have some of these controls, but wherever possible they are mapped. You can generally rely on these all being available.

You’ll notice no other specific face buttons are in the standard set, simply because there are so many of them (start, back, select, option, system, menu, etc.) and every controller is different. Some controllers only have a single “menu” button. These buttons are mapped to non-standard controls, but they have also all been mapped to a single alias called Command.

A full list of possible mapped controls (both standard and non-standard) are represented by the enum InputControlType.

Non-standard controls can be queried just like standard controls, but be aware they are controller specific. Using them is not recommended unless you plan to only support a specific controller.

Unsupported or unknown devices can be used, however their default mappings are utterly unpredictable. From the API, inputs for unsupported devices will appear as Button0 thru Button19 and Analog0 thru Analog9. Do with them what you will.