= (UINT)-1 ) { if ( rdi.hid.dwVendorId == VALVE_DIRECTINPUT_GAMEPAD_VID && rdi.hid.dwProductId == VALVE_DIRECTINPUT_GAMEPAD_PID ) { uint32 ulVID = strtoul( &devName[STEAM_INPUT_VID_INDEX], NULL, 16 ); uint32 ulPID = strtoul( &devName[STEAM_INPUT_PID_INDEX], NULL, 16 ); uint64 ulDeviceHandle = strtoull( &devName[STEAM_INPUT_SIAPI_HANDLE_INDEX], NULL, 16 ); uint32 unGamepadIndex = strtoul( &devName[STEAM_INPUT_GAMEPAD_INDEX], NULL, 16 ); Log( "Raw input device: VID = 0x%x, PID = 0x%x, handle = 0x%llx, index = 0x%x, %s\n", ulVID, ulPID, ulDeviceHandle, unGamepadIndex, devName ); // You can now use either the VID/PID to identify the device directly or use ulDeviceHandle with GetInputTypeForHandle ESteamInputType inputType = SteamInput()->GetInputTypeForHandle( ulDeviceHandle ); switch( inputType ) { case k_ESteamInputType_Unknown: printf( "unknown!…
\n" ); break; case k_ESteamInputType_PS3Controller: case k_ESteamInputType_PS4Controller: case k_ESteamInputType_PS5Controller: printf( "PlayStation controller!…
To enable the interaction profile you must request to use the extension: [code]XR_VALVE_frame_controller_interaction[/code] Then you can suggest bindings for the interaction profile path: [code]/interaction_profiles/valve/frame_controller_valve[/code] You can use the following paths: [code] "/user/hand/right/input/a/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/a/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/b/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/b/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/x/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/x/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/y/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/y/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/menu/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/menu/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/system/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/system/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/bumper/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/bumper/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/squeeze/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/squeeze/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/squeeze/value", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/right/input/trigger/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/trigger/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/trigger/value", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/right/input/thumbstick/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/thumbstick/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/thumbstick/x", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/right/input/thumbstick/y", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/right/input/thumbstick", XR_ACTION_TYPE_VECTOR2F_INPUT "/user/hand/right/input/grip/pose", XR_ACTION_TYPE_POSE_INPUT "/user/hand/right/input/aim/pose", XR_ACTION_TYPE_POSE_INPUT "/user/hand/right/output/haptic", XR_ACTION_TYPE_VIBRATION_OUTPUT "/user/hand/left/input/dpad_up/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_up/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_left/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_left/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_down/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_down/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_right/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_right/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/view/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/view/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/system/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/system/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/bumper/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/bumper/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/squeeze/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/squeeze/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/squeeze/value", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/left/input/trigger/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/trigger/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/trigger/value", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/left/input/thumbstick/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/thumbstick/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/thumbstick/x", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/left/input/thumbstick/y", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/left/input/thumbstick", XR_ACTION_TYPE_VECTOR2F_INPUT "/user/hand/left/input/grip/pose", XR_ACTION_TYPE_POSE_INPUT "/user/hand/left/input/aim/pose", XR_ACTION_TYPE_POSE_INPUT "/user/hand/left/output/haptic", XR_ACTION_TYPE_VIBRATION_OUTPUT [/code] [subsection=openvr]OpenVR Bindings[/subsection] You can bind to the Steam Frame Controllers like you would any other OpenVR controller type. …
[subsection]OpenVR[/subsection] OpenVR has two functions in IVRInput [b]GetEyeTrackingDataRelativeToNow[/b] and [b]GetEyeTrackingDataForNextFrame[/b]. To use those you will need to create a new action of type [code-inline]"eyetracking"[/code-inline] to pass into the functions. …
Here is a quick overview of that process for those unfamiliar: https://youtu.be/a8tNvhwkth8 [section]Frame Compatibility Ratings[/section] Many games work great as-is on Frame. Some games may require manual user configuration, or may only be relevant to users with specific setups. …
[b]Performance[/b] [list] [*][b]2D titles[/b]: your game must run at a minimum 30 fps at 1280x720 during normal play. [*][b]VR titles[/b]: your game must run at a minimum of 72 fps at 1728x1728 during normal play. ([i]Recommendations: We strongly recommend submitting both motion vector and depth suitable for reprojection. …
Don't forget to make [url=https://partner.steamgames.com/documentation/steamcontroller#step12]Titles & Descriptions[/url] for each of them. When your official configurations have been posted they will appear in the "Custom Configuration" section: [docimg=steamworks_steam_input_branch_settings.png]steamworks_steam_input_branch_settings.png[/docimg] For each configuration you can get a direct link, see what controller type it is for, control which beta branches it is available on, or remove it entirely. …
[docimg=steamworks_steam_input_optin_settings.png]steamworks_steam_input_optin_settings.png[/docimg] Checking these boxes will cause those controller types to make use of Steam Input rather than their standard gamepad input protocols. [subsection]Updating your official configurations[/subsection] There are two ways to update your configuration. …
[section]Notes on Data collection date ranges[/section] There are a few date ranges to make note of where new data collection metrics were added: [list] [*]Overall traffic data shown has only been collected since September 23, 2014 12:00 AM GMT. [*]Region and ownership data has only been collected since October 17, 2018 12:00 AM GMT [*]Steam Platform Traffic (non-store traffic) has only been recorded since October 17, 2018 12:00 AM GMT. [*]"Direct Navigation" data has only been collected since April 17, 2019 12:00 AM GMT. [*]Impression and visit reports since March 23, 2021 exclude users that have opted out of applicable cookies. …
This typically shouldn't be needed except for debugging purposes. [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]m_bConnectionActive[/b][/td][td][apitype]steam_api::uint8[/apitype][/td][td]Do we have an active open connection with the user ([b]true[/b]) or not ([b]false[/b])?…
[/td][/tr] [tr=k_EP2PSessionErrorMax][td][b]k_EP2PSessionErrorMax[/b][/td][td]5[/td][td]Unused.[/td][/tr] [/table] [subsection=ESNetSocketConnectionType]ESNetSocketConnectionType[/subsection] Describes how the socket is currently connected. Only used by the old networking API. [table] [tr][th]Name[/th][th]Value[/th][th]Description[/th][/tr] [tr=k_ESNetSocketConnectionTypeNotConnected][td][b]k_ESNetSocketConnectionTypeNotConnected[/b][/td][td]0[/td][td][/td][/tr] [tr=k_ESNetSocketConnectionTypeUDP][td][b]k_ESNetSocketConnectionTypeUDP[/b][/td][td]1[/td][td][/td][/tr] [tr=k_ESNetSocketConnectionTypeUDPRelay][td][b]k_ESNetSocketConnectionTypeUDPRelay[/b][/td][td]2[/td][td][/td][/tr] [/table] [subsection=ESNetSocketState]ESNetSocketState[/subsection] Connection progress indicators, used by [api]ISteamNetworking::CreateP2PConnectionSocket[/api]. …
For example, if there are 6 main maps for a game you might do a set featuring the 6 maps, or character classes, weapon types, etc. You must set the minimum playtime required to earn a card under the badge's card drop settings. Images Required: [list][*][b]Type:[/b] Large Card Images [b]Format:[/b] 1920px x 1080px JPG, smaller than 350KB. [b]Description:[/b] These act as "zoomed in" versions of the smaller card image. They must be thematically similar to the small image. [*][b]Type:[/b] Small Card Images [b]Format:[/b] 206px x 184px PNG [b]Description:[/b] These act as a view into the large image and will have the card title and frame overlaid onto it automatically. [*][b]Type:[/b] Game Logo [b]Format:[/b] 206px x 44px transparent PNG, must be legible on both dark and light backgrounds. …
PowerFormId=1b290fb6-bf33-4529-b6b4-0c05174271f7&env=na1&acct=8eb740d5-3d42-42a7-b032-df44d160f47f&v=2]commercial/government use license[/url]. A PDF copy for your prior review can be downloaded [docfile=2023STEAMVRCOMMERCIALINSTALLATIONLICENSE.pdf]here[/docfile]. …
If this is the case on your system you may see an error message reporting one or several of the following of the following files missing on your system: d3dx10_43.dll MSVCP140.dll VCRUNTIME140.dll MSVCP140.dll This issue can generally be addressed by installing the Microsoft DirectX Runtime and the Microsoft Visual C++ Redistributable. You should always install the most recent version of these, which you can find under the following download links: DirectX Runtime: https://www.microsoft.com/en-us/download/details.aspx?…
All requests should be sent using HTTP 1.1 and use a secure TLS connection when possible. The Content-Type must be [code-inline]application/x-www-form-urlencoded[/code-inline] and the POST parameters must be in the body of the request in standard form urlencoding format. Text must be transmitted as UTF-8. [h4]Authentication[/h4] Many Web API methods have access restrictions which require a unique key, see [doclink=webapi_overview/auth][/doclink] for more information. …
[section=CreateSession]CreateSession[/section] [code=http]POST https://partner.steam-api.com/IGameNotificationsService/CreateSession/v1/[/code] [table] [tr][th]Name[/th][th]Type[/th][th]Required[/th][th]Description[/th][/tr] [tr][td][b]key[/b][/td][td]string[/td][td]✔[/td][td]Steamworks Web API publisher authentication key.…
[b]Example Response:[/b] [code=xml] { "response": { } } [/code] [b]Calling Example:[/b] [code] { "sessionid": "10" } [/code] [section=DeleteSessionBatch]DeleteSessionBatch[/section] [code=http]POST https://partner.steam-api.com/IGameNotificationsService/DeleteSessionBatch/v1/[/code] [table] [tr][th]Name[/th][th]Type[/th][th]Required[/th][th]Description[/th][/tr] [tr][td][b]key[/b][/td][td]string[/td][td]✔[/td][td]Steamworks Web API publisher authentication key.…
Generator Legendary applies the tag [code-inline]quality:legendary[/code-inline] and creates sword or shield items, while Generator Common applies the tag [code-inline]quality:common[/code-inline] and also creates sword or shield items. [code] itemdefid: 10 type: item name: Sword itemdefid: 11 type: item name: Shield itemdefid: 100 type: generator name: Generator A bundle: 101x1;102x9 tags: color:red itemdef: 101 type: generator name: Generator Legendary bundle: 10;11 tags: quality:legendary itemdef: 102 type: generator name: Generator Common bundle: 10;11 tags: quality:common [/code] Another way to assign tags would be to use the [code-inline]tag_generator[/code-inline] item definition type. …
In the end you could end up with "Legendary Red Shield with Flames" or a "Common Red Sword with Lasers." [code] itemdefid: 10 type: item name: Sword itemdefid: 11 type: item name: Shield itemdefid: 100 type: generator name: Generator A bundle: 10;11 tags: color:red tag_generators: 101;102 itemdefid: 101 type: tag_generator name: Tag Generator Quality tag_generator_name: quality tag_generator_values: legendary:1;common:9 itemdefid: 102 type: tag_generator name: Tag Generator FX tag_generator_name: fx tag_generator_values: flames;sparks;lasers [/code] The format for the [code-inline]tag_generators[/code-inline] field is a list of all item definition ids of the tag generators you want applied, separated by the ";" character. …
v=<video id> youtu.be/<video id> [/code] For example, using the Video ID of 'UUn-ET4vv1s' we would see the following widget in your event. [docimg=2019-09-17_8-17-04.png]2019-09-17_8-17-04.png[/docimg] Note: With YouTube, we have a few additional formatting options via the [previewyoutube] tag accessible via the toolbar's import YouTube icon. …
[code] https://sketchfab.com/models/<model id> https://sketchfab.com/models/7b08add6fb40478a9bc465a8ef0d8ffb [/code] That would automatically generate a summary block about the 3D model in the event description. This summary includes the items name and authors name. …
The logo should be easily legible against the background. [b]Size:[/b] 600px x 900px (an additional half-size 300px x 450px PNG will be auto-generated from larger file) [section=header]Library Header [color=#ca5029]Required[/color][/section] The library header is used in different places within the Steam Client Library. …
For ex: a main character’s face should be entirely in the safe area or risk being cropped. [b]Size: [/b]3840px x 1240px (an additional half-size 1920px x 620px PNG will be auto-generated from larger file) [subsection=logo]Library Logo [color=#ca5029]Required[/color][/subsection] [docimg=Logo_example_1.png]Logo_example_1.png[/docimg] [b]Usage:[/b] Appears at the top of a user’s library details page for this product, placed on top of the hero graphic. …
[callout]In the section marked [b]Input Mapping Contexts (IMC)[/b] the Steam Frame controller keys will appear as options. Ensure that the Input Action types match the type of key input that you bind them to![/callout] [section]Variable Rate Shading (VRS)[/section] The Steam Frame Unreal Engine plugin supports Variable Rate Shading (VRS), which allows the engine to manage the resolution at which different areas of the screen are rendered. …
[callout]For 5.7 use https://github.com/Valve-VR/UnrealEngine/commit/17a2778f392d32813fb35183e72ce0467d183b8a 2025/01/22: Current recommendation is to [b]NOT[/b] use 5.7 due to regressions with MSAA and shadows in the forward renderer that are actively being worked on. …
Click 'save' the same way you would when entering a discount and you will have removed that discount. [section]Types of Discounts[/section] [subsection]Self-Serve[/subsection] Partners are able to create and manage the following discounts on their own. …
[/doclink] [/list] [subsection]Curated[/subsection] The following discount types are created and managed by Valve. When selecting products to fill these front-page promotional slots, we consider games of all price points and genres. …
[/td][/tr] [/table] [section=cover]Cover Image [color=#ca5029]Required[/color][/section] [docimg=cover.png]cover.png[/docimg] [b]Size:[/b] 800px wide x 450px tall [b]Design:[/b] This image should primarily contain the artwork and branding for your event. Steam will always automatically include your game's name and icon next to the cover image, so it isn't critical to include your game branding in the cover image (but you may still choose to do so). …
[section=header]Header Image [color=#d7bc86]Suggested[/color][/section] [docimg=header.png]header.png[/docimg] [b]Size:[/b] 1920px wide x 622px tall (please see template file for important notes) [b]Design:[/b] Add a rich header image to your detail page to communicate the theme or essence of your update or announcement. …
[subsection=SteamGameServer_Init]SteamGameServer_Init[/subsection] [code=cpp]inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );[/code] [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]unIP[/b][/td][td]uint32[/td][td]The IP address you are going to bind to. (This should be in host order, i.e 127.0.0.1 == 0x7f000001). …
[/td][/tr] [tr][td][b]pchVersionString[/b][/td][td]const char *[/td][td]The version string is usually in the form x.x.x.x, and is used by the master server to detect when the server is out of date. (Only servers with the latest version will be listed.)…
[section=update_notice]Store page notice about last update[/section] If it has been more than 12 months (one year) since the developers of an Early Access game have updated the game and posted an 'update' type event to tell players about it, Steam will add a note to the store page, just above the Developer Questionnaire letting players know that the game has not updated in a while. This notice will appear when either of the following criteria has been met: [list] [*]It has been more than 12 months since a build has been assigned to the 'default' branch in Steamworks. [*]It has been more than 12 months since the developer has posted an 'update' type event, communicating to players about the update (This includes all three 'update' type events: Major Update, Regular Update, or Patch Notes) [/list] [section]Frequently Asked Questions[/section] [list][*][h4]Q: Can my unreleased Early Access Game be listed as Coming Soon?…
[/h4] [b]A.[/b] The answer depends upon a number of factors including the type of income and the information you provided to us through the tax interview, but revenue share payments are classified as a royalty and reported as follows: [list][*] If you submitted a W8 as a non-US tax payer, you will receive a 1042-S showing your US Source income and the amount of Withholding Tax paid by Valve on your behalf. [*] If you submitted a W9 as a US Tax payer, you will receive a Form 1099 unless you are a C or S Corporation (or LLC filing as a C or S Corporation.) …
[/b] These are separate tax rates that are applied depending on the content type of your sales. The royalty copyright rate will apply to US sourced sales on games and related DLCs. The royalty film rate will apply to US sourced sales on film and video. …