[/b][/callout] [section]Project Setup[/section] [list] [*][b]Enable OpenXR[/b] - (Project / Project settings / XR / OpenXR) and enable stereo shaders (Project / Project settings / XR / Shaders) [*][b]OpenXR Vendors Plugin[/b] - Optionally install the [url=https://godotengine.org/asset-library/asset/3768]Godot OpenXR vendors plugin[/url] from the AssetLib tab. …
[section]Foveated Rendering[/section] Steam Frame supports the Foveated Rendering functionality in Godot via the [url=https://godotvr.github.io/godot_openxr_vendors/]OpenXR Vendors Plugin[/url] (or releases [url=https://github.com/GodotVR/godot_openxr_vendors/releases]here[/url]). [callout]Version 4.2.x is needed for vendor extension support including foveated rendering. 4.2.3 is the minimum version with Linux Arm64 support. 5.x or newer recommended.…
Most APIs are already supported by Proton, and most games work out of the box. We're continuing to improve Proton compatibility, and our goal is to get as close to full coverage as possible. To test your game’s Proton compatibility, you will need a Linux environment. …
If your solution currently isn't working, please reach out to both your vendor and Valve for support. [*]Anti-tamper / DRM: In general we don't recommend use of such solutions across any PC platforms, as they may impact disk usage and overall performance. …
[section=supported_languages]Supported Languages[/section] For a full list of supported languages and their associated API language code, please see [doclink=store/localization/languages][/doclink] [section]Working With Translation Vendors[/section] There are many great translation companies around the world that specialize in translating gaming content. As you consider your options for who to work with for translating your game content, there are a few things to consider: [list] [*][b] Determine your target languages[/b] - Some companies are known to focus or be strong with certain regions’ languages than others. [*] [b]Compare price sheets to know how expensive services are. …
Is it text heavy/lore heavy/easy to relate to globally? This can impact which translation vendor may be better suited for particular languages. [*] [b]Ask for a deck or list of games that a vendor has worked on and ask them exactly what work they did on those games.…
[/list] [/list] [/list] [b]Example Response:[/b] [code=json] { "response": { "result": "OK", "params": { "count": 4, "orders": [ { "orderid": "1233", "transid": "1234567890123456788", "steamid": "76561197972751825", "status": "PartialRefund", "currency": "USD", "time": "2024-01-23T18:30:00Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:15:00Z", "items": [ { "itemid": 100, "qty": 1, "amount": 99, "vat": 9, "itemstatus": "Refunded" }, { "itemid": 101, "qty": 1, "amount": 1299, "vat": 116, "itemstatus": "Succeeded" } ] }, { "orderid": "1234", "transid": "1234567890123456789", "steamid": "76561197972751825", "status": "Failed", "currency": "USD", "time": "2024-01-23T18:40:30Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:39:00Z", "items": [ { "itemid": 100, "qty": 1, "amount": 99, "vat": 9, "itemstatus": "Failed" } ] }, { "orderid": "1235", "transid": "1234567890123456790", "steamid": "76561197972751825", "status": "Succeeded", "currency": "USD", "time": "2024-01-23T18:40:40Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:39:30Z", "items": [ { "itemid": 101, "qty": 1, "amount": 1299, "vat": 116, "itemstatus": "Succeeded" } ] }, { "orderid": "1236", "transid": "1234567890123456791", "steamid": "76561197972751825", "status": "Chargedback", "currency": "USD", "time": "2024-01-23T19:55:00Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:40:00Z", "items": [ { "itemid": 102, "qty": 1, "amount": 999, "vat": 89, "itemstatus": "Chargedback" } ] } ] } } } [/code] [section=GetUserAgreementInfo]GetUserAgreementInfo[/section] [code=http]GET https://partner.steam-api.com/ISteamMicroTxn/GetUserAgreementInfo/v2/[/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 [url=https://partner.steamgames.com/doc/webapi_overview/auth#publisher-keys]publisher key[/url] with [b]Microtransaction[/b] permissions.…
[/list] [/list] [/list] [b]Example Response:[/b] [code=xml] <response> <result>OK</result> <params> <state>WA</state> <country>US</country> <currency>USD</currency> </params> </response> [/code] [section=InitTxn]InitTxn[/section] [code=http]POST https://partner.steam-api.com/ISteamMicroTxn/InitTxn/v3/[/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 [url=https://partner.steamgames.com/doc/webapi_overview/auth#publisher-keys]publisher key[/url] with [b]Microtransaction[/b] permissions.…
Try automating it using the Automated Steam Wrapper process documented above. [b]Q. An Anti-virus vendor has detected my binary as having a virus after applying the Steam DRM wrapper. What can I do?[/b] [b]A.[/b] False positives like this can happen, as the DRM injection process is modifying your binary in the same way a virus might do. Feel free to contact the vendor, or use the API instead of the Steam DRM wrapper. …
[section]Overview[/section] OpenVR is an API and runtime that allows access to VR hardware from multiple vendors without requiring that applications have specific knowledge of the hardware they are targeting. This repository on GitHub is an SDK that contains the API and samples. …
[table] [tr] [td]OpenVR (Depth-assisted reprojection)[/td] [td][url=https://github.com/ValveSoftware/openvr/wiki/IVRCompositor::Submit]IVRCompositor::Submit[/url] with [url=https://github.com/ValveSoftware/openvr/blob/v2.15.6/headers/openvr.h#L191]VRTextureWithPoseAndDepth_t[/url][/td] [/tr] [tr] [td]OpenVR (Depth+Motion-assisted reprojection)[/td] [td][url=https://github.com/ValveSoftware/openvr/wiki/IVRCompositor::Submit]IVRCompositor::Submit[/url] with [url=https://github.com/ValveSoftware/openvr/blob/v2.15.6/headers/openvr.h#L202]VRTextureWithMotion_t[/url][/td] [/tr] [tr] [td]OpenXR (Depth-assisted reprojection)[/td] [td][url=https://registry.khronos.org/OpenXR/specs/1.0/man/html/XR_KHR_composition_layer_depth.html]XR_KHR_composition_layer_depth[/url][/td] [/tr] [tr] [td]OpenXR (Depth+Motion-assisted reprojection) Vendor-agnostic[/td] [td][url=https://registry.khronos.org/OpenXR/specs/1.1/man/html/XR_EXT_frame_synthesis.html]XR_EXT_frame_synthesis[/url][/td] [/tr] [tr] [td]OpenXR (Depth+Motion-assisted reprojection) Oculus[/td] [td][url=https://registry.khronos.org/OpenXR/specs/1.0/man/html/XR_FB_space_warp.html]XR_FB_space_warp[/url][/td] [/tr] [/table] You can visualize the depth or motion vectors submitted by using the [doclink=steamframe/debugging#GameTextures]Draw Performance Assessment Game Textures in Headset[/doclink] option. …
.) [*][b]Video/Audio Codecs[/b]: We recommend using standalone codecs (eg., VP9 or AV1) rather than codecs that are tied to a specific vendor (eg., WMF). [/list] [subsection]Game Features[/subsection] [list] [*][b]Clouded Saves[/b]: For games that allow saving, we recommend enabling automatic clouding of saved games: users should be able to save their game on a Deck or Steam Machine and resume on a different PC, and vice versa, without manually transferring files. …
= (UINT)-1 && GetRawInputDeviceInfoA( devices[i].hDevice, RIDI_DEVICENAME, devName, &nameSize ) != (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!…
For a standard game w/ Xbox controller support we recommend checking all checkboxes other than Xbox: [docimg=steamworks_steam_input_optin_settings.png]steamworks_steam_input_optin_settings.png[/docimg] If your game has flight stick or racing wheel support you'll want to uncheck the box for Generic/DirectInput controllers because Steam doesn't support remapping those devices. [subsection]Selecting a configuration[/subsection] You can choose to create your own configuration or pick from one of our premade templates. …
[docimg=Editions_PackageSelect.jpg]Editions_PackageSelect.jpg[/docimg] Click the boxes to select editions of your game. By doing so, these packages will be displayed above other purchase options on your page that don’t contain the base game. …
There are more appropriate spots on Steam to show this information and this information can quickly become outdated. [*]Keep the asset as simple and easy to understand as possible. Avoid including unnecesary box art or key art. Keep in mind that due to the image size small text may be difficult to read. [*]Avoid including developer logos or unnecessary art [*]Remove unnecessary legal text. …
Then, in step 3, paste all the file IDs for your configurations into the box, separated by the comma character (,) characters. The first one on the list will be considered the highest priority, and will be picked by default for new players. …
[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. …
Please use the key art and logo that is being used for any retail boxes or marketing. Do not include quotes or other strings of text beyond the title of your game. The art should immediately tell the customer something important about your product. …
For best results, use the logo that is being used for any retail boxes or marketing. You’ll want to ensure the logo is both visible and legible against the hero graphic background. The PNG image should have a transparent background. …
v=PShS32hcing [section]Building and Testing[/section] For general help with building depots and preparing content, please see [doclink=sdk/uploading][/doclink] [olist] [*] In the Steamworks Settings for your application, create [doclink=store/application/depots]depots[/doclink] for the new operating systems in the Creating & Adding Depots section (under the "SteamPipe" tab>Depots). Save this change. [b]NOTE:[/b] Don't check the boxes under [b]Supported Operating Systems[/b] on the General Application Settings tab yet, that will be done when you're ready to release. [*] Create a Steam build for these new depots. [*] Set that build to a beta branch with a password. [*] Update your autogrant package to contain these new depots so Steam will let you download the files. …
You can see all packages associated with your application on the [url=https://partner.steamgames.com/apps/associated/]Associated Packages & DLC[/url] page. [*] In the [url=https://partner.steamgames.com/apps/view/]Steamworks Settings for your app[/url], check the appropriate operating system boxes under [b]Supported Operating Systems[/b]. [*] Edit your store page and check the appropriate operating system boxes on the Basic Info tab. [*] Then scroll down and enter the corresponding system requirements. …
[b]Design:[/b] For best results, please use the key art and logo that is being used for any retail boxes or marketing. The art used for them should immediately tell the customer something important about the game. It should be graphically-centric and give the user some sense of the game-play. …
For best results, please use the same artwork that you use for any retail box or marketing and make sure the logo is clearly legible. [b]Size:[/b] 707px x 232px …
You'll need to bundle the Windows debug runtime with your game when you upload it to your developer kit, and Visual Studio & remote debugging tools running on your Windows development box. [callout]This feature is still under development. Please leave any feedback / issues on the [url=https://steamcommunity.com/groups/steamworks/discussions/27/]Steam Deck Developer Forums[/url]. …
In order to have the remote debugging tools available, when you install Visual Studio, be sure to include a development Workload like the "Desktop development with C++" [docimg=VirtualBox_Win_10_05_08_2021_18_05_44.png]VirtualBox_Win_10_05_08_2021_18_05_44.png[/docimg] [section]Usage[/section] [subsection]Vulkan Examples[/subsection] The project [url=https://gitlab.steamos.cloud/jupiter/vulkan-examples]Vulkan Examples[/url] is a good starting point for getting used to remotely debug games uploaded to the Steam Deck or Steam Machine. …
Or use this link: https://partner.steamgames.com/pub/users [*]Hover over the row with the user you wish to apply the permission to and click the edit symbol on the far right. [*]In the pop-up dialog, tic the box for "Receive Steamworks Communication" and click save. [*]This will send an invitation to the user. The user will need to click the button in the email and confirm their email address in order to start receiving emails. …
[section]Steamworks printed materials examples[/section] The following is available for you to use as an example when printing instructions for printed Steamworks materials. For instance, a card insert for a retail box copy, or a printed Steam key for promotional distribution at a live event. See the Steam Subscriber Agreement (SSA) section above for localized versions of the required text. [docimg=SteamPhysicalKeyExample.png]SteamPhysicalKeyExample.png[/docimg] Steamworks boxed game [docfile=SteamDiscInsertExample.pdf]quick start guide[/docfile] …
. [*]If you have more than one purchase option, you will be prompted to pick which of your purchase options (and price) you wish your widget to display. [*]You will also see a box that is pre-populated with the first part of your product description. You can edit this to say whatever you want about your product. [*]Hit "Create Widget". [*]You will now see a preview of your widget along with the HTML, which you will need to copy and paste into your website or blog where you wish to display it. …
. [*] Set the correct language, OS or architecture. [*] Choose the correct DLC from the dropdown box to associate this depot with the DLC. [*] Click Save Changes. Note that the Steam client will not know about the new depot until you have published your changes. [*] Add the depots to any packages which need to contain your depot (e.g. …
[/list] [/olist] Additional Notes: [list] [*]If you check the box “Disable Steam automatically downloading this DLC,” a player who owns the DLC can manually choose to install it from their library, even if your game does not make use of the ISteamApps:InstallDLC API. [*] It is possible for a user to initiate the download of the DLC from the Steam Client UI via the Properties ->DLC tab. [*] You can also use [api]ISteamApps::UninstallDLC[/api] to remove the DLC content if needed. …
. [*] Then go to the 'Edit Store' section for your app and find the Item Store tab. [*] Check the box to enable your Item Store. There are a few ways you can customize your store (see below for details), but they are all optional. [/list] Once enabled for your own game, you can easily open your Item Store page from within your game by launching the Steam Overlay and passing it this page’s URL. …