[/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.…
These files should be in the AES standard [url=https://www.sofaconventions.org/]SOFA format[/url]. [*] [b]Model occlusion of sound sources.[/b] Steam Audio can quickly model raycast occlusion of direct sound by solid objects. Steam Audio also models partial occlusion for non-point sources, and transmission of occluded sound through the occluding geometry. [*] [b]Model reflections and related environmental audio effects.[/b] Steam Audio can model how sound is reflected by solid objects. This can be used to model many kinds of environmental audio effects, including slap echoes, flutter echoes, occlusion of sound by buildings, and more. [*] [b]Model propagation of sound along multiple paths.…
[/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.…
[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.…
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. …
. [*][b][doclink=#narrated_menus]Narrated Game Menus[/doclink][/b]: Players can listen to game menus with narrated audio. [*][b][doclink=#stereo_sound]Stereo Sound[/doclink][/b]: Players can identify how far to the left or right sounds are coming from. [*][b][doclink=#surround_sound]Surround Sound[/doclink][/b]: Players can identify how far in any direction sounds are coming from. …
[/list] [subsection=surround_sound]Surround Sound[/subsection] [h4]Why is this tag important to players?[/h4] Players can look for this tag to know that they can tell what direction a sound came from, in any direction including above, below, behind and ahead. …
[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. …
The Steam Voice API is a set of functions that allow you record audio from the user's microphone. This can be used to implement voice chat or a voice command system. [section]Voice Chat Integration[/section] Voice chat in your game can be implemented using the following steps: [list] [*] [b]Recording[/b] First call [api]ISteamUser::StartVoiceRecording[/api] to begin recording the users microphone, this could be called whenever the user is pressing a push-to-talk hotkey or at the start of the gameplay session if the microphone should always be recording. …
Optionally you may want to use [api]ISteamUser::GetVoiceOptimalSampleRate[/api] to get the sample rate of the Steam Voice decompressor before calling [api]ISteamUser::DecompressVoice[/api], this will result in lower CPU usage, but may sound worse. [/list] [section]Example[/section] The [doclink=sdk/api/example][/doclink] has a high quality implementation of the Steam Voice API. …
If you need to support a language that is currently not supported by Steam, please let us know in the [url=steamcommunity.com/groups/steamworks/discussions]Steamworks Development Discussions[/url] [subsection=setup_graphics]Graphics and Sound Effects[/subsection] The following files can be replaced to customize the setup application and Steam installation for your game: [olist] [*] [code-inline]splash.tga[/code-inline] - Image displayed by Steam while installing files from disk (392x165 pixels) [*] [code-inline]icon.ico[/code-inline] - Icon used in [code-inline]autorun.inf[/code-inline] as the icon for your installation disk [*] [code-inline]resources\setup.bmp[/code-inline] and [code-inline]resources\setup_<language>.bmp[/code-inline] - Image used for the background of setup.exe (640x480 pixels). Setup will first search for a localized version, and then load [code-inline]setup.bmp[/code-inline] if a localized version doesn't exist. [*] [code-inline]resources\click.wav[/code-inline] - Played when a button is clicked in setup.exe (delete to play no sound) [*] [code-inline]resources\hover.wav[/code-inline] - Played when a mouse hovers over a button in setup.exe (delete to play no sound) [*] [code-inline]resources\launch.wav[/code-inline] - Played when setup.exe starts (delete to play no sound) [/olist] The font name, height, color and other text attributes can be configured through [code-inline]setup.ini[/code-inline]. …
The following libraries provide support for other aspects of game development: [list] [*] [url=http://www.freetype.org/index.html]FreeType[/url] - font rendering (both vector-based and bitmap fonts) on Linux [*] [url=http://www.freedesktop.org/wiki/Software/fontconfig]Fontconfig[/url] - configuring and customizing font access [*] [url=http://www.radgametools.com/miles.htm]Miles Sound System[/url] - a middleware sound engine for Linux development [*] [url=http://www.radgametools.com/bnkmain.htm]Bink Video[/url] - a video codec designed for game developers [*] [url=http://www.webmproject.org/]WebM[/url] - an open media file format; used for recording Team Fortress 2 video instead of QuickTime. …
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. …
[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. …
The below example shows a Store Page Banner across the top the [b]Rift of the NecroDancer[/b] Store Page, which promotes and links to the Save & Sound Themed Sale. [/list] [list] [table] [tr] [th]Example:[/th] [th]This Store Page Banner:[docimg=Sound_Save_SalePageBanner.jpg]Sound_Save_SalePageBanner.jpg[/docimg][/th] [th]Links Customers to this Sales Event:[docimg=Sound_Save_ThemedSale_Landing.jpg]Sound_Save_ThemedSale_Landing.jpg[/docimg][/th] [/tr] [/table] [subsection]Wishlist Notifications[/subsection] When a game participating in your Sales Event goes on a discount of at least 20%, players who have wishlisted that game will receive the usual [doclink=/marketing/wishlist]Steam Wishlist Notification[/doclink], which leads them to the game's Store Page, which in turn can lead them to your sale homepage via the Store Page Banner, as outlined above. …
.) [*][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. …
[b]Do you plan to release SteamOS as a standalone, general-purpose operating system?[/b] We definitely plan on releasing SteamOS as a separate operating system. We don't have exact timing on that. We're really focused on making sure that Steam Deck is a great experience, and we'll release it for other hardware soon. …
They'll check for a bunch of Steam Deck compatibility items, like controller support, legibility, performance, and system support. After that your title will get a Deck Verified categorization, which will show up in the store on Steam Deck (as well as the library). …
Startup movies also play in Big Picture mode on desktop, and eventually on [url=https://store.steampowered.com/sale/steammachine]Steam Machine[/url]. They contain both sound and video.[/h4] [url=https://store.steampowered.com/points/shop/c/steamdeck/cluster/1](Click here to see examples live in the Points Shop.)…
[/list] [subsection]Asset Checklist[/subsection] [list] [*]1920 x 1200px .webm or .mp4 (full-size movie / with sound) < 50MB [*]1920 x 1200px .png, .jpg, .webp (still) < 10MB [/list] [docfile=steam_deck_startup_movie_template.zip]Download the templates here[/docfile] Please remember that, under the Steam Distribution Agreement, all marketing materials you provide need to be non-infringing. …
Instead, it is concerned with the use of AI in creating content that ships with your game, and is consumed by players. This includes content such as artwork, sound, narrative, localization, etc. If your game used AI services during development or incorporates AI services as a part of the product, this section will require you to describe that implementation in detail: [list][*][b]Pre-Generated:[/b] Any kind of content that ships with your game and is consumed by players that is created with the help of AI tools during development. …
These serve as placeholder values for redemptions of key ranges that were made before the key request system was created (ie. prior to January, 2013) [b]CPartnerFinancials_PackageInfo[/b] [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]packageid[/b][/td][td]uint32[/td][td]A unique id[/td][/tr] [tr][td][b]package_name[/b][/td][td]string[/td][td]The package name. …
Max size - 128 characters[/td][/tr] [/table] [b]Example response: [/b] [code] "response": { "results": [ { "partnerid": "10500", "date": "2025/05/01", "line_item_type": "Package", "packageid": 123, "bundleid":777 "package_sale_type": "Steam", "platform": "Windows", "country_code": "AU", "base_price": "3995", "sale_price": "1995", "currency": "AUD", "gross_units_sold": 10, "gross_units_returned": -2, "gross_sales_usd": "311.7201", "gross_returns_usd": "-25.5322", "net_tax_usd": "26.0431", "primary_appid": 999, "additional_revenue_share_tier": 0, "net_units_sold": 8, "net_sales_usd": "260.1448", "combined_discount_id": 8888, "total_discount_percentage": 50 }, { "partnerid": "10500", "date": "2025/05/01", "line_item_type": "Package", "packageid": 456, "package_sale_type": "Steam", "platform": "Windows", "country_code": "CA", "base_price": "5999", "sale_price": "5999", "currency": "CAD", "gross_units_sold": 100, "gross_units_returned": 0, "gross_sales_usd": "4309.0101", "gross_returns_usd": "0.0000", "net_tax_usd": "517.0812", "primary_appid": 1099, "additional_revenue_share_tier": 1, "viw_grant_partnerid": "5200", "net_units_sold": 100, "net_sales_usd": "3791.9288", }, { "partnerid": "10500", "date": "2025/05/01", "line_item_type": "MicroTxn", "appid": 1099, "game_item_id": 1, "country_code": "US", "currency": "USD", "gross_units_sold": 2, "gross_units_returned": 0, "gross_sales_usd": "9.9800", "gross_returns_usd": "0.0000", "net_tax_usd": "0.9980", "primary_appid": 1099, "additional_revenue_share_tier": 1, "net_units_sold": 2, "net_sales_usd": "8.9820", "avg_sale_price_usd": "4.9900" }, { "partnerid": "10500", "date": "2025/05/01", "line_item_type": "Package", "packageid": 123, "package_sale_type": "Retail", "platform": "Unknown", "country_code": "AE", "primary_appid": 999, "key_request_id": 7100, "gross_units_activated": 10 }, ], "key_request_info": [ { "key_request_id": 7100, "key_request_notes": "Keys for Key Markets", "game_code_id": 842, "game_code_description": "Retail Distribution - Middle East & North Africa", "territory_code_id": 0, "territory_code_description": "UNUSED" } ], "package_info": [ { "packageid": 123, "package_name": "Grate Expectations: Cheese Preparation Simulator - Deluxe Edition" }, { "packageid": 456, "package_name": "Grate Expectations 2: Curd Your Loins - Launch Edition" } ] "app_info": [ { "appid": 999, "app_name": "Grate Expectations: Cheese Preparation Simulator }, { "appid": 1099, "app_name": "Grate Expectations 2: Curd Your Loins" } ], "bundle_info": [ { "bundleid": 777, "bundle_name": "Grate Expectations Deluxe Bundle" }, ], "combined_discount_info": [ { "combined_discount_id": 8888, "combined_discount_name": "Bundle Discount", "total_discount_percentage": 50, "discount_ids": [11111] }, ], "game_item_info": [ { "appid": 1099, "game_item_id": 1, "game_item_description": "500 Grams of Whey", "game_item_category": "Essential Cheese Product" } ], "country_info": [ { "country_code": "AE", "country_name": "United Arab Emirates", "region": "Middle East & North Africa" }, { "country_code": "AU", "country_name": "Australia", "region": "Oceania" }, { "country_code": "CA", "country_name": "Canada", "region": "North America" }, { "country_code": "US", "country_name": "United States", "region": "North America" }, ], "max_id": "29481179373" [/code] [section=GetAppWishlistReporting]GetAppWishlistReporting[/section] [code=http]GET https://partner.steam-api.com/IPartnerFinancialsService/GetAppWishlistReporting/v001/[/code] [b]Request values[/b][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]Financial[/b] permissions.…
= (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!…