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. …
[/td] [/tr] [tr] [td][b]Event Cover Image[/b][/td] [td][color=#ca5029]Required[/color][/td] [td]800px x 450px - Artwork and marketing copy for your event or announcement [doclink=store/assets/eventassets#cover]See details[/doclink][/td] [/tr] [tr] [td][b]Event Header Image[/b][/td] [td]Optional[/td] [td]1920px wide x 622px - Event artwork and logo. …
Patch notes following your build updates is helpful for your customers to realize you are continuing work on and improve your game. [docimg=41b67b4a94e6487c5e07c6085dbb9d63d8d9e166.jpg]41b67b4a94e6487c5e07c6085dbb9d63d8d9e166.jpg[/docimg] You can always use the regular event editor to post the patch notes at a later time. …
[b]Returns:[/b] const char * The current user's persona name in UTF-8 format. Guaranteed to not be [b]NULL[/b]. Returns an empty string (""), or "[unknown]" if the Steam ID is invalid or not known to the caller. …
[b]Returns:[/b] const char * The current user's persona name in UTF-8 format. Guaranteed to not be [b]NULL[/b]. [subsection=GetPersonaState]GetPersonaState[/subsection] [code=cpp]EPersonaState GetPersonaState();[/code] Gets the friend status of the current user. …
[/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.)…
[b]See Also:[/b] [api]steam_api::SteamAPI_ReleaseCurrentThreadMemory[/api] [subsection=SteamGameServer_RunCallbacks]SteamGameServer_RunCallbacks[/subsection] [code=cpp]S_API void SteamGameServer_RunCallbacks();[/code] Dispatches callbacks created with STEAM_GAMESERVER_CALLBACK and call results to all of the registered listeners. It's best to call this at >10Hz, the more time between calls, the more potential latency between receiving events or results from the Steamworks API. Most games call this once per render-frame. …
[list] [*] [doclink=#basic]Basic[/doclink] [*] [doclink=#fps]First Person Shooter[/doclink] [*] [doclink=#action]Third Person Action / Adventure[/doclink] [*] [doclink=#tactics]Turn Based Tactics[/doclink] [*] [doclink=#rts]Real Time Strategy[/doclink] [*] [doclink=#4x]4X Strategy[/doclink] [*] [doclink=#jrpg]Console-style JRPG[/doclink] [*] [doclink=#adventure]Point-and-click Adventure[/doclink] [*] [doclink=#racing]Racing[/doclink] [*] [doclink=#platformer]Platformer[/doclink] [/list] [section=basic]Basic[/section] This is a completely minimal file -- one action set, one digital action, and one analog action. …
[code] "In Game Actions" { "actions" { "GameControls" { "title" "#Set_GameControls" "StickPadGyro" { "MoveCursor" { "title" "#Action_MoveCursor" "input_mode" "absolute_mouse" } "CameraPan" { "title" "#Action_CameraPan" "input_mode" "absolute_mouse" } "CameraZoom" { "title" "#Action_CameraZoom" "input_mode" "absolute_mouse" } } "Button" { "click" "#Action_Click" "cancel" "#Action_Cancel" "select" "#Action_Select" "select_add_remove" "#Action_AddRemove" "select_type" "#Action_SelectType" "select_idle" "#Action_SelectIdle" "move_attack" "#Action_MoveAttack" "move_no_attack" "#Action_Move" "attack_target" "#Action_Attack" "assign_group" "#Action_AssignGroup" "add_remove_group" "#Action_AddRemoveGroup" "select_group" "#Action_SelectGroup" "group_0" "#Action_Group0" "group_1" "#Action_Group1" "group_2" "#Action_Group2" "group_3" "#Action_Group3" "group_4" "#Action_Group4" "group_5" "#Action_Group5" "group_6" "#Action_Group6" "group_7" "#Action_Group7" "group_8" "#Action_Group8" "group_9" "#Action_Group9" } } "MenuControls" { "title" "#Set_MenuControls" "Button" { "MenuUp" "#Menu_Up" "MenuDown" "#Menu_Down" "MenuLeft" "#Menu_Left" "MenuRight" "#Menu_Right" "Affirm" "#Menu_Affirm" "Cancel" "#Menu_Cancel" "Other" "#Menu_Other" "ScrollUp" "#Menu_ScrollUp" "ScrollDown" "#Menu_ScrollDown" "DismissMenu" "#Menu_DismissMenu" } } } "action_layers" { "title" "#Layer_UnitMenu" "Button" { "stop" "#Unit_Stop" "hold" "#Unit_Hold" "patrol" "#Unit_Patrol" "follow" "#Unit_Follow" "queue" "#Unit_Queue" "unit_ability_1" "#Unit_Ability1" "unit_ability_2" "#Unit_Ability2" } "title" "#Layer_BuildMenu" "Button" { "build_0" "#Build_0" "build_1" "#Build_1" "build_2" "#Build_2" "build_3" "#Build_3" "build_4" "#Build_4" "build_5" "#Build_5" "build_6" "#Build_6" "build_7" "#Build_7" "build_8" "#Build_8" "build_9" "#Build_9" } } "localization" { "english" { "Set_GameControls" "Game Controls" "Set_MenuControls" "Menu Controls" "Layer_UnitMenu" "Unit Menu" "Layer_BuildMenu" "Build Menu" "Action_MoveCursor" "Move Cursor" "Action_CameraPan" "Pan camera" "Action_CameraZoom" "Zoom camera" "Action_Click" "Click mouse" "Action_Cancel" "Cancel" "Action_Select" "Select" "Action_AddRemove" "Add/remove from selection" "Action_SelectType" "Select all units of type" "Action_SelectIdle" "Select idle worker" "Action_MoveAttack" "Attack-Move" "Action_Move" "Move (no attack)" "Action_Attack" "Attack target" "Action_AssignGroup" "Assign group" "Action_AddRemoveGroup" "Add/remove from group" "Action_SelectGroup" "Select group" "Action_Group0" "Group 0" "Action_Group1" "Group 1" "Action_Group2" "Group 2" "Action_Group3" "Group 3" "Action_Group4" "Group 4" "Action_Group5" "Group 5" "Action_Group6" "Group 6" "Action_Group7" "Group 7" "Action_Group8" "Group 8" "Action_Group9" "Group 9" "Menu_Up" "Up" "Menu_Down" "Down" "Menu_Left" "Left" "Menu_Right" "Right" "Menu_Affirm" "Affirm" "Menu_Cancel" "Cancel" "Menu_Other" "Other" "Menu_ScrollUp" "Scroll Up" "Menu_ScrollDown" "Scroll Down" "Menu_DismissMenu" "Dismiss Menu" "Unit_Stop" "Stop" "Unit_Hold" "Hold ground" "Unit_Patrol" "Patrol" "Unit_Follow" "Follow" "Unit_Queue" "Queue action/waypoint" "Unit_Ability1" "Ability 1" "Unit_Ability2" "Ability 2" "Build_0" "Build option 0" "Build_1" "Build option 1" "Build_2" "Build option 2" "Build_3" "Build option 3" "Build_4" "Build option 4" "Build_5" "Build option 5" "Build_6" "Build option 6" "Build_7" "Build option 7" "Build_8" "Build option 8" "Build_9" "Build option 9" } } } [/code] [section=4x] 4X Strategy[/section] This is a simple 4X strategy game, where you move units on a main map, colonize territory (whether that's planets or islands or cities), and engage in combat with other empires. …
bool SetGenericString( const char *pszString ); // Returns false if invalid length const char *GetGenericString() const; // Returns nullptr if not generic string type bool SetGenericBytes( const void *data, size_t cbLen ); // Returns false if invalid size. const uint8 *GetGenericBytes( int &cbLen ) const; // Returns null if not generic bytes type /// See if two identities are identical bool operator==(const SteamNetworkingIdentity &x ) const; /// Print to a human-readable string. …
inline bool ParseString( const char *pszStr ); union { uint8 m_ipv6[ 16 ]; struct // IPv4 "mapped address" (rfc4038 section 4.2) { uint64 m_8zeros; uint16 m_0000; uint16 m_ffff; uint8 m_ip[ 4 ]; // NOTE: As bytes, i.e. network byte order } m_ipv4; }; uint16 m_port; // Host byte order /// See if two addresses are identical bool operator==(const SteamNetworkingIPAddr &x ) const; }; [/code] [section=connection_status]Connection status[/section] These types are used to describe the status of a connection. …
It must be a frame from the video itself, and must be 1920x1080 .jpg or .png [b]Best practices:[/b] Try to get a frame that is representative of unique content in your trailer, and avoid text. …
The most common reason for a trailer to fail is the resolution of the video. Please ensure you use a common resolution such as 1920x1080 or 1280x720 to avoid any downstream processing issues. Another common issue is an unsupported audio sample rate (please use 44Khz or 48Khz). …
[/td][/tr] [tr][td][b]x[/b][/td][td]int[/td][td]The X (width) position in pixels within the surface. (0, 0) is the top left corner.[/td][/tr] [tr][td][b]y[/b][/td][td]int[/td][td]The Y (height) position in pixels within the surface. (0, 0) is the top left corner.…
[/td][/tr] [tr][td][b]pBGRA[/b][/td][td]const char *[/td][td]A pointer to the B8G8R8A8 image data for this surface, valid until [api]steam_api::SteamAPI_RunCallbacks[/api] is next called.[/td][/tr] [tr][td][b]unWide[/b][/td][td][apitype]steam_api::uint32[/apitype][/td][td]The total width of the [code-inline]pBGRA[/code-inline] texture.…
As part of the partner onboarding process, you will be provided a link to start the tax interview. The tax interview takes 5-10 minutes and will ask you a series of questions to guide you through the completion of either tax forms (W-9 or W-8BEN). You can also access the tax interview by clicking on the “View and edit company information” from the Steamworks home page. …
In order to exercise the benefits under the tax treaty, you will need to complete a Form W-8BEN and that requires either a foreign TIN or a US TIN. Countries that have tax treaties with the U.S. can be found here: https://www.irs.gov/Businesses/International-Businesses/United-States-Income-Tax-Treaties-A-to-Z If your country of residence is Slovakia, you will need to provide a US TIN in completing the Form W-8BEN to claim tax treaty benefits and apply an exempt withholding rate. …
[subsection=GetCurrentBatteryPower]GetCurrentBatteryPower[/subsection] [code=cpp]uint8 GetCurrentBatteryPower();[/code] Gets the current amount of battery power on the computer. [b]Returns:[/b] [apitype]steam_api::uint8[/apitype] The current battery power ranging between [0..100]%. …
[subsection=LowBatteryPower_t]LowBatteryPower_t[/subsection] Called when running on a laptop and less than 10 minutes of battery is left, and then fires then every minute afterwards. [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]m_nMinutesBatteryLeft[/b][/td][td][apitype]steam_api::uint8[/apitype][/td][td]The estimated amount of battery life left in minutes.…
As such you'll need to make sure to call [api]steam_api::SteamAPI_Init[/api] prior to initializing the OpenGL/D3D device, otherwise it won't be able to hook the device creation. The overlay supports games that use DirectX 7 - 12, OpenGL, Metal, and Vulkan. The overlay will not be active in software-rasterized games. macOS: Overlay support for 10.15 (Catalina) requires adding entitlements to your build configuration. …
[/h4] [b]A.[/b] Please refer to this [url=https://microsoft.github.io/DirectX-Specs/d3d/D3D12onWin7.html#add-support-to-d3d11on12]Microsoft document[/url] on how to add Steam overlay support. [h4]Q. My game runs in a browser. …
[subsection]Visibility within Steam Next Fest[/subsection] [list] [*] [b]Set your demo live in time for press preview[/b] - Valve will be sharing the list of participating games with a list of press outlets 10 days prior to the start of Next Fest. If you release your demo by that date then press can potentially try out your demo. [*] [b]Set your demo live in time for Next Fest[/b] - Steam Next Fest only includes games with demos, so please be sure to set yours live ahead of the start of Next Fest. [*] [b]Check your tags/categories[/b] - Steam Next Fest is organized based on the categories you selected when you registered (up to 2 categories per game) and then based on the store tags applied to your game. …
Please access all previous session recordings [url=https://www.youtube.com/playlist?list=PLckFgM6dUP2iCWK3VkvB8YZI9b7HHCj8m]via this YouTube playlist[/url]. [subsection=contact]Need Help?[/subsection] [url=https://help.steampowered.com/en/wizard/HelpWithPublishing?…
[h4]Submitting requests[/h4] All requests should be sent using HTTP 1.1 GET or POST using a TLS secure connection. The Content-Type should be "application/x-www-form-urlencoded" and the POST parameters should be in the body of the request in standard form urlencoding format. Text should be transmitted as UTF-8. …
If the Quantity value for this item is greater than one, this value is the total that will get charged (Amount = Quantity x item_cost). [*] Item Description - A text description for the item. This will be displayed to the user when they are prompted to authorize the transaction. …
[doclink=marketing/upcoming_events/themed_sales/sheep_2027]More info[/doclink]. [/td][/tr] [tr][td]Feb 8 Feb 15[/td][td]Couch Co-Op Fest[/td] [td][url=https://partner.steamgames.com/optin/sale/couch_coop_2027]Registration details[/url][/td] [td]Games you can play together on the same device (games must support local co-op). [doclink=marketing/upcoming_events/themed_sales/couch_coop_2027]More info[/doclink]. [/td][/tr] [tr][td]Mar 8 Mar 15[/td][td]Rhythm Fest[/td] [td][url=https://partner.steamgames.com/optin/sale/rhythm_2027]Registration details[/url][/td] [td]Games that are about rewarding players who can hit notes / arrows / bullets / etc. in time to the beat. …
Next, go back to http://steamcommunity.com/broadcast/upload/ and look for a link to the right of the page called “Your Broadcast URL”. [docimg=stream8.png]stream8.png[/docimg] You should see your gameplay being streamed on this page. At this point, if you set your broadcast permission to “Friends only”, your stream is not public yet. …
Follow these steps: [olist] [*]From your game’s App Landing Page, under the section "Community & Moderation", click on “Post/Manage Events & Announcements”. [*]Click on the blue "Create new Event or Announcement" button. [*]Select “Live-Stream/Broadcast” [docimg=stream10.png]stream10.png[/docimg] [*]Navigate to the “Broadcasting” tab [docimg=stream11.png]stream11.png[/docimg] [*]Enable the broadcast feature on the event to reveal a few setup options for the broadcast. …
If you use an engine like Unity or Unreal, enabling Vulkan in your build for all users will result in the highest performance/longevity. (Note: Proton includes a DirectX-to-Vulkan translation layer. If your game or engine has high-quality DirectX support but no Vulkan support, it's likely that this automated translation layer will exceed the performance of doing a custom Vulkan implementation.) [*][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). …
In addition, while providing default graphics options for specific hardware (like Steam Deck) is fine, we do not recommend making some settings unavailable dependent on hardware. [*][b]Support different aspect ratios[/b]: Players have displays with many different aspect ratios - not just 16:9 or 16:10. Some are much wider or taller - so make sure your title can support gameplay at these different aspect ratios. [*][b]Offline Mode[/b]: We strongly recommend all singleplayer content is accessible without an Internet connection. …
[/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.)…
[/td][/tr] [tr=k_unServerFlagPassworded][td][b]k_unServerFlagPassworded[/b][/td][td][apitype]steam_api::uint32[/apitype][/td][td]0x10[/td][td]This game server is password protected.[/td][/tr] [tr=k_unServerFlagPrivate][td][b]k_unServerFlagPrivate[/b][/td][td][apitype]steam_api::uint32[/apitype][/td][td]0x20[/td][td]This game server shouldn't be listed on master server and won't enforce authentication of users that connect to the server. …
[list][subsection]Launch Discount[/subsection] Launch discounts start once your title is released on Steam and can be staged to run for between 7 and 14 days, ending at 10am Pacific on the applicable day. We generally suggest launch discounts around 10% to 15%, should you chose to set one. There is a limit of 40%. …
[list][subsection]Daily Deal[/subsection] Daily Deals are featured on the Steam homepage for 24 hours, and rotate every day at 10am Pacific. There are two or more Daily Deal slots per day. The artwork used for the Daily Deal is our standard "Header Capsule" 460px x 215px, and is imported from the associated game or bundle automatically. …
However the request may have failed - the detailed Steam error code will be found in the [code-inline]x-eresult[/code-inline] header. The value for "success" is 1. All other values are likely to be errors; see the documentation for [doclink=api/steam_api]steam_api.h[/doclink] for details. …
Example:[code] POST https://api.steampowered.com//ICloudService/BeginHTTPUpload/v1/ HTTP/1.1 Host: api.steampowered.com Content-Type: application/x-www-form-urlencoded Content-Length: <body length> access_token=<token>&input_json={ "appid": "1234", "file_size": "7448889", "filename": "%25WinAppDataLocal%25Foobar%2FGamename%2Fcloud%2Fgames%2Fsave.sav", "file_sha": "FDFE308499263F9361B472648E9F49DC0B8799C8", "is_public": "0", "platforms_to_sync": ["all"], "upload_batch_id": "434565457423", } [/code] [table] [tr][th]Name[/th][th]Type[/th][th]Required[/th][th]Description[/th][/tr] [tr][td][b]access_token[/b][/td][td]string[/td][td]✔[/td][td]OAuth access token for the user[/td][/tr] [tr][td][b]appid[/b][/td][td]uint32[/td][td]✔[/td][td]Your App ID[/td][/tr] [tr][td][b]file_size[/b][/td][td]uint32[/td][td]✔[/td][td]size of the file in bytes[/td][/tr] [tr][td][b]filename[/b][/td][td]string[/td][td]✔[/td][td]the file name[/td][/tr] [tr][td][b]file_sha[/b][/td][td]string[/td][td]✔[/td][td]Hex string (40 digits) representing the SHA1 digest of the file.…
Once you've confirmed that you've [doclink=/store/promo/organizers#10]read the rules[/doclink], Steam will enable a sale page so you can begin building your event. At this time, your event will be reviewed for any potential curated homepage featuring. …
For clarity, this includes pages such as "Developer X's July Sale", "Publisher X's Autumn Sale", and other adhoc pages. Developer, Publisher, and Franchise sale pages are still available once a calendar year regardless of curation status. …