If you're interested in finding out more info about the distribution of controllers used with Steam you can find more info in this [url=https://steamcommunity.com/games/593110/announcements/detail/1712946892833213377]blog post[/url] [section=ListDevices]Supported Devices[/section] Steam Input supports all the major controllers that players use with Steam. …
These are the major devices that we currently support. [list] [*] [doclink=features/steam_controller/device/steam_controller]Steam Controller[/doclink] [*] [doclink=features/steam_controller/device/ps4_controller]Playstation 4 Controller[/doclink] [*] [doclink=features/steam_controller/device/x360_controller]Xbox 360 Controller[/doclink] [*] [doclink=features/steam_controller/device/xb1_controller]Xbox One Controller[/doclink] [*] [doclink=features/steam_controller/device/nsp_controller]Nintendo Switch Pro Controller[/doclink] [*] Steam Link App Mobile Touch Controller [*] Playstation 3 Controller [*] Any DirectInput gamepad [/list] [docimg=controllers.jpg]controllers.jpg[/docimg] Note that the terms "Playstation 4 controller", "Xbox 360 controller", and "Xbox One controller" also refer to any variant devices (such as fighting game joysticks) that use the same input protocol as the base model.…
[subsection]Configuration List[/subsection] In the controller configuration section the configurations are listed by controller type, then by priority for loading. The "path" value is listed relative to the Action Manifest file's location on-disk. [code] "Action Manifest" { "configurations" { "controller_xboxone" { "0" { "path" "xbox_controller.vdf" } } "controller_steamcontroller_gordon" { "0" { "path" "steam_controller.vdf" } "1" { "path" "steam_controller_motion_controls.vdf" } } } "actions" { } "localization" { } } [/code] Supported controller type strings: [table] [tr][td]Steam Deck Controller[/td][td]controller_neptune[/td][/tr] [tr][td]Steam Controller[/td][td]controller_steamcontroller_gordon[/td][/tr] [tr][td]Xbox 360[/td][td]controller_xbox360[/td][/tr] [tr][td]Xbox One[/td][td]controller_xboxone[/td][/tr] [tr][td]Xbox One Elite Controller[/td][td]controller_xboxelite[/td][/tr] [tr][td]PlayStation 3 Controller[/td][td]controller_ps3[/td][/tr] [tr][td]PlayStation 4 Controller[/td][td]controller_ps4[/td][/tr] [tr][td]DualSense Controller[/td][td]controller_ps5[/td][/tr] [tr][td]DualSense Edge Controller[/td][td]controller_ps5_edge[/td][/tr] [tr][td]Nintendo Switch Pro Controller[/td][td]controller_switch_pro[/td][/tr] [tr][td]Nintendo Switch 2 Pro Controller[/td][td]controller_switch2_pro[/td][/tr] [tr][td]Nintendo Joy-Con (L)[/td][td]controller_switch_joycon_left[/td][/tr] [tr][td]Nintendo Joy-Con (R)[/td][td]controller_switch_joycon_right[/td][/tr] [tr][td]Nintendo Joy-Con Pair[/td][td]controller_switch_joycon_pair[/td][/tr] [tr][td]Remote Play Touch Controller[/td][td]controller_mobile_touch[/td][/tr] [tr][td]Generic Gamepads[/td][td]controller_generic[/td][/tr] [/table] [section]Setting up an Action Manifest File[/section] There are two main ways to setup your action manifest file, either starting from scratch or using an existing IGA file. …
On macOS and Linux emulated controller input is provided by a driver. [*] The controller will show up in your game as an Xbox controller which means that controllers with extra inputs will have some of them duplicated, ex: PlayStation trackpad click and the options button both mapping to XInput's Start button. [*] In addition to normal gamepad input it's possible to bind Switch, PlayStation, and Steam Controller gyro inputs to mouse emulation and provide motion controls. …
\n" ); break; case k_ESteamInputType_PS3Controller: case k_ESteamInputType_PS4Controller: case k_ESteamInputType_PS5Controller: printf( "PlayStation controller!…
v=7I4SiAiKqqk[/url] [url=http://cdn.akamai.steamstatic.com/apps/steamdevdays/slides2016/SteamController.pdf]Slides - PDF[/url] [url=http://www.gamasutra.com/blogs/LarsDoucet/20161012/283057/Steam_Dev_Days_Steam_Controller.php]Slides - HTML[/url] And for a specific applied example and case study, you should read this article: [url=http://www.gamasutra.com/blogs/LarsDoucet/20170125/289904/The_Steam_Controller_Configurators_Untapped_Power.php]The Steam Controller Configurator's Untapped Power[/url] With those two things under your belt, you're ready to dig into the nitty-gritty details of this document! [section=TableOfContents]Table of Contents[/section] [b]Hold my hand a little:[/b] [olist] [*] [doclink=features/steam_controller/getting_started_for_players]Getting Started as a [b]Player[/b][/doclink] [*] [doclink=features/steam_controller/getting_started_for_devs]Getting Started as a [b]Developer[/b][/doclink] [/olist] [b]Give me all the nerdy details:[/b] [olist] [*] [doclink=features/steam_controller/concepts][/doclink] [*] [doclink=features/steam_controller/device][/doclink] [*] [doclink=features/steam_controller/iga_file][/doclink] [*] [doclink=features/steam_controller/action_manifest_file][/doclink] [*] [doclink=features/steam_controller/input_source][/doclink] [*] [doclink=features/steam_controller/input_source_modes][/doclink] [*] [doclink=features/steam_controller/mode_shifting][/doclink] [*] [doclink=features/steam_controller/browse_configs][/doclink] [*] [doclink=features/steam_controller/activators][/doclink] [*] [doclink=features/steam_controller/mouse_regions][/doclink] [*] [doclink=features/steam_controller/radial_menus][/doclink] [*] [doclink=features/steam_controller/touch_menus][/doclink] [*] [doclink=features/steam_controller/action_set_layers][/doclink] [*] [doclink=features/steam_controller/legacy_mode][/doclink] …
The Steam Controller has left and right circular trackpads, whereas the PlayStation 4 controller features a single rectangular trackpad in the center. …
The PlayStation 4 and Xbox controllers all feature twin sticks, but the Steam Controller only has one, which is considered the "Left Joystick" in this case. …
Steam Input API is a flexible action-based API that supports all major controller types - Xbox, PlayStation, Nintendo Switch Pro, Steam Controller (2015), Steam Controller (2026), and Steam Deck. See the [doclink=features/steam_controller][/doclink] documentation for more information. …
\n" ); break; case k_ESteamInputType_PS4Controller: printf( "PS4 controller!\n" ); break; case k_ESteamInputType_PS5Controller: printf( "PS5 controller!…
A touch menu is an on-screen overlay of game actions, displayed as a grid of choices selectable with a controller. These are very similar to [doclink=features/steam_controller/radial_menus][/doclink], except that instead of aiming a virtual pointer to select an action, the player must touch a specific location on the input device. …
The method for doing this is identical to the one described in the [doclink=features/steam_controller/radial_menus][/doclink] document. Touch menus and radial menus draw from the exact same source files. [section]Further Reading[/section] [list] [*] [url=http://www.gamasutra.com/blogs/LarsDoucet/20170125/289904/The_Steam_Controller_Configurators_Untapped_Power.php]The Steam Controller Configurator's Untapped Power[/url] [*] [doclink=features/steam_controller/input_source][/doclink] [*] [doclink=features/steam_controller/input_source_modes][/doclink] [*] [doclink=features/steam_controller/mode_shifting][/doclink] [*] [doclink=features/steam_controller/mouse_regions][/doclink] [*] [doclink=features/steam_controller/radial_menus][/doclink] [/list] …
[docimg=toggle_controller_hud.png]toggle_controller_hud.png[/docimg] The shape of the mouse region depends on the controller and input. For example, the PS4 controller has a rectangular trackpad, which creates a rectangular mouse region, whereas the Steam controller has a circular trackpad, which creates circular mouse regions. [table] [tr] [th]Device[/th] [th]Input[/th] [th]Mouse region shape[/th] [/tr] [tr] [td]Generic gamepad[/td] [td]Joystick[/td] [td]Circle[/td] [/tr] [tr] [td]PS4 controller[/td] [td]Trackpad[/td] [td]Rectangle[/td] [/tr] [tr] [td]PS4 controller[/td] [td]Gyro[/td] [td]Rectangle[/td] [/tr] [tr] [td]PS4 controller[/td] [td]Joystick[/td] [td]Circle[/td] [/tr] [tr] [td]Steam controller[/td] [td]Trackpad[/td] [td]Circle[/td] [/tr] [tr] [td]Steam controller[/td] [td]Gyro[/td] [td]Rectangle[/td] [/tr] [tr] [td]Steam controller[/td] [td]Joystick[/td] [td]Circle[/td] [/tr] [tr] [td]Xbox controller[/td] [td]Joystick[/td] [td]Circle[/td] [/tr] [/table] Here's what the mouse region configuration screen looks like: [docimg=mouse_region.png]mouse_region.png[/docimg] [section]Basic Settings[/section] [subsection]Region Size[/subsection] This will scale the size of the region that is mapped to the outer extents of the pad/stick. …
We define full support as the follows: [list] [*] Your game uses the proper controller-specific glyphs when showing in-game input prompts. [*] The Steam Input configurator screen uses in-game actions that the player performs in your game, instead of keys or buttons. [*] You've published an official configuration for the controllers you support. [*] Your game doesn't restrict the user's ability to customize their controls. …
[/callout] You can also download the [url=https://steamcdn-a.akamaihd.net/steam/partner/controller/SteamControllerGlyphs_v1.zip]official controller glyph renders[/url] or their [url=https://steamcdn-a.akamaihd.net/steam/partner/controller/controller_api_icons.psd]PSD source[/url]. …
[subsection]LED[/subsection] The Steam Controller and the PlayStation 4 controller both have a built in LED light on the controller. The Steam Controller's light is always white, but the PlayStation 4 controller features a fully programmable colored LED. Both of these devices will respond to API calls for changing the light color, but the Steam Controller will cast the color to monochrome and simply use it to control brightness, whereas on the PlayStation 4 controller it can be used to control both the color and the brightness. …
[section]Controllers[/section] The Steam Frame Controllers have the same capabilities as your standard console gaming controllers plus touch states, grip buttons, capacitive finger tracking, and 6-DOF spatial tracking. …
SteamVR will always use a Frame Controller binding by default but in the case one is not available it will first look for a [url=https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XR_KHR_generic_controller]OpenXR Generic Controller[/url] binding, then an [url=https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#semantic-paths-oculus-touch-controller-profile]Oculus Touch[/url] binding, and remap those to the Frame Controller layout. …
[docimg=steamworks_steam_controller_custom3.png]steamworks_steam_controller_custom3.png[/docimg] [*] Publish your app changes in the partner site as usual. [/list] If you'd like, you can also specify multiple official configurations for your game. …
[subsection]Opting Controllers into Steam Input[/subsection] Next, you should set up what kind of controllers use Steam Input - if you are using Steam Input API you'll want to make sure to check the "Any Future Devices" option to make sure new controllers work by default without you having to adjust settings after support ships in Steam. …
Here are some example templates for [doclink=features/steam_controller/iga_file]IGA files[/doclink] that you can use as starting points for your games. None of these are for any specific game, and your game might have specific needs not covered by any of them, so feel free to experiment. …
[code] "In Game Actions" { "actions" { "GameControls" { "title" "#Set_GameControls" "Button" { "Action_Interact" "#Action_Interact" "Action_MoveTo" "#Action_MoveTo" "Action_Examine" "#Action_Examine" "Action_Cancel" "#Action_Cancel" "Action_Menu" "#Action_Menu" "Action_Item" "#Action_Item" } "StickPadGyro" { "MoveCursor" { "title" "#Action_MoveCursor" "input_mode" "absolute_mouse" } } } } "action_layers" { "MenuControls" { "title" "#Layer_MenuControls" "Button" { "Menu_Up" "#Menu_Up" "Menu_Down" "#Menu_Down" "Menu_Left" "#Menu_Left" "Menu_Right" "#Menu_Right" "Menu_Select" "#Menu_Select" "Menu_Cancel" "#Menu_Cancel" } } } "localization" { "english" { "Set_GameControls" "General Controls" "Layer_MenuControls" "Menu Controls" "Action_MoveCursor" "Move cursor" "Action_MoveTo" "Move to location" "Action_Interact" "Interact" "Action_Examine" "Examine" "Action_Cancel" "Cancel/Back" "Action_Menu" "Menu" "Action_Item" "Use Item" "Menu_Up" "Up" "Menu_Down" "Down" "Menu_Left" "Left" "Menu_Right" "Right" "Menu_Select" "Select" "Menu_Cancel" "Cancel" } } } [/code] [section=racing]Racing[/section] A simple racing game where you race manual transmission ("stick shift") cars. …
The developer can upload configuration for multiple different controller types -- such as PlayStation 4 controller, Steam Controller, and Xbox 360/One controllers, and on the first run, Steam will detect your device and select the appropriate configuration. [callout=red] [b]NOTE:[/b] By default, all configurations for controller models other than the one you're currently using are hidden, but you can select "Show Other Controller Types" to force them to appear. …
[/i]) [*][b]controller support[/b]: your game must support Steam Frame's physical controls. The default controller configuration must provide users with the ability to access all content. Players must not need to adjust any in-game settings in order to enable controller support or this configuration. [*][b]controller glyphs[/b]: when using Steam Frame's physical controls, on-screen glyphs must either match Frame button names, or match Xbox 360/One button names. …
[subsection]Power/System Options[/subsection] [docimg=legacy_power.png]legacy_power.png[/docimg] This lets you issue various system commands. Options include: [list] [*] [b]TURN OFF CONTROLLER[/b] [*] [b]OPEN BIG PICTURE[/b] [*] [b]MINIMIZE BIG PICTURE[/b] [*] [b]QUIT BIG PICTURE[/b] [*] [b]SUSPEND HOST PC[/b] [*] [b]SHUTDOWN HOST PC[/b] [*] [b]RESTART HOST PC[/b] [/list] [subsection]Set Light Options[/subsection] [docimg=legacy_light.png]legacy_light.png[/docimg] This lets you control how the controller's LED functions (if it has one). Only PS4 Controllers support colored light options. [list] [*] [b]Default User Setting[/b] No change to how the light functions [*] [b]Default XInput Slot Number Setting[/b] Slots 1-4 are colored red, blue, green, and purple, respectively. [*] [b]Custom Setting[/b] [list] [*][b]Controller Light Color[/b] Change the color of the light [*][b]Controller Light Saturation[/b] Change the intensity of the light [/list] [/list] [subsection]Music[/subsection] [docimg=legacy_music.png]legacy_music.png[/docimg] This lets you control music playback from your Steam music player. …
[/td][/tr] [tr=k_EAppType_Hardware][td][b]k_EAppType_Hardware[/b][/td][td]0x200[/td][td]S hardware device (Steam Machine, Steam Controller, Steam Link, etc.)[/td][/tr] [tr=k_EAppType_Franchise][td][b]k_EAppType_Franchise[/b][/td][td]0x400[/td][td]A hub for collections of multiple apps, eg films, series, games.…
[/td][/tr] [tr=k_EResultIPTInitError][td][b]k_EResultIPTInitError[/b][/td][td]68[/td][td]Intel's Identity Protection Technology (IPT) has failed to initialize.[/td][/tr] [tr=k_EResultParentalControlRestricted][td][b]k_EResultParentalControlRestricted[/b][/td][td]69[/td][td]Operation failed due to parental control restrictions for current user.…
For more information see https://partner.steamgames.com/doc/features/steam_controller/getting_started_for_players [docimg=TouchBindings.PNG]TouchBindings.PNG[/docimg] [*] On your mobile device start streaming your game, click the [...] button and drag any newly bound controls onto the screen. …
[/olist] If you want to change your official configuration, you have to publish a new config, as you would with the Steam Controller. [section]HOWTO: Advanced Touch Controller Config[/section] If your game has multiple game modes, you can set up an actionset with unique layout for each game mode. …
You can find more information about this in the on the [doclink=steamframe/loadgames][/doclink] page. [section]Steam Frame Controllers[/section] By default the controllers will show up to your games as emulating Oculus Touch, so you can bind to those controls and it will work. If you would like to bind to Frame Controller specific buttons or have Frame Controller specific offsets you can use the Steam Frame Controller OpenXR Interaction Profile or use the Frame Controller OpenVR Controller type: [b]frame_controller[/b]. …
Next, create a "controller_config" directory inside the Steam folder and place the file in the directory. The Steam folder will already have a very similarly named folder so make sure you've put it in the "controller_config" folder and not the "controller_base" folder. …
" ... "controller_type" "controller_xboxone" "controller_caps" "1590271" "major_revision" "1" "minor_revision" "1" "Timestamp" "1761699544" "actions" { ... …