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. …
For best results, skip separate launchers altogether and integrate their functionality into the game client UI instead, where controller support is likely better. [*]Media Foundation: To save additional bandwidth and disk use, we recommend using standalone codecs like VP9 or AV1. [*]Anti-cheat: We recommend using user-space anti-cheat components for best results, as they can typically run in the Wine environment and provide the same level of functionality. …
For multi-disc soundtracks, track numbers must be unique across disks. For example, "disc 1, track 1" might have track ID 1 and "disc 2, track 1" might have track ID 10. [h4]Track Numbering[/h4] The Steam Music Player determines play order from the filenames, not the metadata. …
[b]Q: Does the revenue for my associated game soundtrack count towards total revenue for the game for purposes of calculating revenue share?[/b] A: Yes. [section=simpledepots]Simple Soundtrack Depots[/section] While soundtracks have access to the same advanced [doclink=store/application/depots]depot[/doclink] configuration tools and settings, the average soundtrack is much simpler than the average game. …
[section]Best Practices[/section] DLC can be a great way to offer value to the customers that are interested in investing deeper in the product, it can also have non-monetary costs of customer perception that are harder to measure. It might not be a good idea to launch with a DLC on day 1 as customers may perceive that the full game was ready to release but you chose to take away content from the game to make more money through a paid DLC. …
Give it a name similar to the existing DLC depot so you can easily identify 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. …
[/td][/tr] [tr][td][b]cubData[/b][/td][td][apitype]steam_api::uint32[/apitype][/td][td]The total size [b]in bytes[/b] of the [code-inline]pData[/code-inline] array.[/td][/tr] [/table] Gets the daily history for an aggregated stat. pData will be filled with daily values, starting with today. So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago, etc. You must have called [api]ISteamUserStats::RequestGlobalStats[/api] and it needs to return successfully via its callback prior to calling this. …
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. …
[/td][/tr] [tr][td][b]srcIP[/b][/td][td][apitype]steam_api::uint32[/apitype][/td][td]The IP address that this packet was sent to in host order, i.e 127.0.0.1 == 0x7f000001.[/td][/tr] [tr][td][b]srcPort[/b][/td][td][apitype]steam_api::uint16[/apitype][/td][td]The port that this packet was sent through, in host order.…
[/td][/tr] [tr][td][b]m_nRank[/b][/td][td][apitype]steam_api::int32[/apitype][/td][td]The overall rank of the server (0-based).[/td][/tr] [tr][td][b]m_unTotalConnects[/b][/td][td][apitype]steam_api::uint32[/apitype][/td][td]Total number of clients who have ever connected to the server.[/td][/tr] [tr][td][b]m_unTotalMinutesPlayed[/b][/td][td][apitype]steam_api::uint32[/apitype][/td][td]Total number of minutes ever played on the server.…
If you need the overlay enabled, you can do so by: [olist] [*]Making sure your Steam account has the Edit App Metadata permission [*]Navigate from the App's landing page to > Edit Steamworks Settings > Installation tab > General Installation [*]Check box for Enable Steam Overlay for Application [*]Publish [/olist] [/callout] [section=activating]Integrating Steam Timeline functionality in your app[/section] The Steam Timeline API calls can be found here: [api]ISteamTimeline[/api] [section=icons]Timeline Icons[/section] Steam Timelines includes a set of icons ready to use for your game. …
"[code-inline]steam_0[/code-inline]", "[code-inline]steam_1[/code-inline]", etc. You can also upload custom icons for your product on the Steamworks site. Default set of icons: [no_glow] [table] [tr] [th]Icon[/th][th]Name[/th][th]Description[/th] [/tr] [tr] [td][docimg=marker_2.png][/docimg][/td][td]steam_marker[/td][td]Marker[/td] [/tr] [tr] [td][docimg=achievment_1.png][/docimg][/td][td]steam_achievement[/td][td]Achievement[/td] [/tr] [tr] [td][docimg=attack_1.png][/docimg][/td][td]steam_attack[/td][td]Attack[/td] [/tr] [tr] [td][docimg=bolt_1.png][/docimg][/td][td]steam_bolt[/td][td]Bolt[/td] [/tr] [tr] [td][docimg=bookmark_1.png][/docimg][/td][td]steam_bookmark[/td][td]Bookmark[/td] [/tr] [tr] [td][docimg=bug.png][/docimg][/td][td]steam_bug[/td][td]Bug[/td] [/tr] [tr] [td][docimg=cart.png][/docimg][/td][td]steam_cart[/td][td]Cart[/td] [/tr] [tr] [td][docimg=caution.png][/docimg][/td][td]steam_caution[/td][td]Caution[/td] [/tr] [tr] [td][docimg=chat.png][/docimg][/td][td]steam_chat[/td][td]Chat[/td] [/tr] [tr] [td][docimg=checkmark.png][/docimg][/td][td]steam_checkmark[/td][td]Checkmark[/td] [/tr] [tr] [td][docimg=chest.png][/docimg][/td][td]steam_chest[/td][td]Chest[/td] [/tr] [tr] [td][docimg=circle.png][/docimg][/td][td]steam_circle[/td][td]Circle[/td] [/tr] [tr] [td][docimg=combat.png][/docimg][/td][td]steam_combat[/td][td]Combat[/td] [/tr] [tr] [td][docimg=completed.png][/docimg][/td][td]steam_completed[/td][td]Completed[/td] [/tr] [tr] [td][docimg=crown.png][/docimg][/td][td]steam_crown[/td][td]Crown[/td] [/tr] [tr] [td][docimg=death.png][/docimg][/td][td]steam_death[/td][td]Death[/td] [/tr] [tr] [td][docimg=defend.png][/docimg][/td][td]steam_defend[/td][td]Defend[/td] [/tr] [tr] [td][docimg=diamond.png][/docimg][/td][td]steam_diamond[/td][td]Diamond[/td] [/tr] [tr] [td][docimg=edit.png][/docimg][/td][td]steam_edit[/td][td]Edit[/td] [/tr] [tr] [td][docimg=effect.png][/docimg][/td][td]steam_effect[/td][td]Effect[/td] [/tr] [tr] [td][docimg=explosion.png][/docimg][/td][td]steam_explosion[/td][td]Explosion[/td] [/tr] [tr] [td][docimg=fix.png][/docimg][/td][td]steam_fix[/td][td]Fix[/td] [/tr] [tr] [td][docimg=flag.png][/docimg][/td][td]steam_flag[/td][td]Flag[/td] [/tr] [tr] [td][docimg=gem.png][/docimg][/td][td]steam_gem[/td][td]Gem[/td] [/tr] [tr] [td][docimg=group.png][/docimg][/td][td]steam_group[/td][td]Group[/td] [/tr] [tr] [td][docimg=heart.png][/docimg][/td][td]steam_heart[/td][td]Heart[/td] [/tr] [tr] [td][docimg=info.png][/docimg][/td][td]steam_info[/td][td]Info[/td] [/tr] [tr] [td][docimg=invalid.png][/docimg][/td][td]steam_invalid[/td][td]Invalid[/td] [/tr] [tr] [td][docimg=minus.png][/docimg][/td][td]steam_minus[/td][td]Minus[/td] [/tr] [tr] [td][docimg=pair.png][/docimg][/td][td]steam_pair[/td][td]Pair[/td] [/tr] [tr] [td][docimg=person.png][/docimg][/td][td]steam_person[/td][td]Person[/td] [/tr] [tr] [td][docimg=plus.png][/docimg][/td][td]steam_plus[/td][td]Plus[/td] [/tr] [tr] [td][docimg=purchase.png][/docimg][/td][td]steam_purchase[/td][td]Purchase[/td] [/tr] [tr] [td][docimg=question.png][/docimg][/td][td]steam_question[/td][td]Question[/td] [/tr] [tr] [td][docimg=ribbon.png][/docimg][/td][td]steam_ribbon[/td][td]Ribbon[/td] [/tr] [tr] [td][docimg=screenshot.png][/docimg][/td][td]steam_screenshot[/td][td]Screenshot[/td] [/tr] [tr] [td][docimg=scroll.png][/docimg][/td][td]steam_scroll[/td][td]Scroll[/td] [/tr] [tr] [td][docimg=square.png][/docimg][/td][td]steam_square[/td][td]Square[/td] [/tr] [tr] [td][docimg=star.png][/docimg][/td][td]steam_star[/td][td]Star[/td] [/tr] [tr] [td][docimg=starburst.png][/docimg][/td][td]steam_starburst[/td][td]Starburst[/td] [/tr] [tr] [td][docimg=timer.png][/docimg][/td][td]steam_timer[/td][td]Timer[/td] [/tr] [tr] [td][docimg=transfer.png][/docimg][/td][td]steam_transfer[/td][td]Transfer[/td] [/tr] [tr] [td][docimg=triangle.png][/docimg][/td][td]steam_triangle[/td][td]Triangle[/td] [/tr] [tr] [td][docimg=trophy.png][/docimg][/td][td]steam_trophy[/td][td]Trophy[/td] [/tr] [tr] [td][docimg=view.png][/docimg][/td][td]steam_view[/td][td]View[/td] [/tr] [tr] [td][docimg=x.png][/docimg][/td][td]steam_x[/td][td]X[/td] [/tr] [/table] [/no_glow] [section=example]Example Code[/section] Below is a code sample for integrating Steam Timeline with Left 4 Dead. …
But it also has a special option for opening a nested radial menu, "System Options": [docimg=slime_rancher_1.png]slime_rancher_1.png[/docimg] Selecting this will activate a player-defined "System Options" action set layer. The next time we open the radial menu, we will see this instead: [docimg=slime_rancher_2.png]slime_rancher_2.png[/docimg] Now we have options such as "Take screenshot", "Show keyboard", and volume controls. …
We click "add action layer." [docimg=slime_rancher_add_layer_1.png]slime_rancher_add_layer_1.png[/docimg] We'll call it "System Options." [docimg=slime_rancher_add_layer_2_1.png]slime_rancher_add_layer_2_1.png[/docimg] Now that that's done, we return to our base configuration and "game controls" action set, then select the left trackpad and configure our basic radial menu: [docimg=slime_rancher_radial_menu_config_1.png]slime_rancher_radial_menu_config_1.png[/docimg] Everything is pretty normal except for Menu Button 5, which activates the action set layer. …
[subsection]How to Sign Up as a Developer[/subsection] [list] [*]1. The Actual Authority user of your Steamworks account must sign the new Steam Cloud Gaming Addendum by logging into Steamworks and clicking the following link to sign the Addendum: https://partner.steamgames.com/newpartner/signlatestsda/?…
Click “Edit Store Page” and navigate to the “Basic Info” tab. [*]5. Find the "Cloud Play" section and select two boxes “Enable your game to run streamed from the Cloud, hosted by Valve, and the following service providers:” and “NVIDIA GeForce NOW.” [*]6. …
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. …
This minimum price restriction does not apply for packages that only contain DLC apps. [*][b]For must-purchase-together bundles[/b], the total cost of the bundle must be at least $0.58 USD [/olist] [/olist] [section]Collaborative Bundles[/section] You can create bundles across multiple developers/publishers. …
So, if Game A and Game B were sold together in a bundle, the sale would appear as 1 unit of Game A and 1 unit of Game B. The CSV from the Sales & Activations Reports portal will also indicate if a package sale was recorded as being sold in a bundle. …
[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] …
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. …
Here's an example: [code] "localization" { "english" { "Title_Config1" "Official Configuration" "Description_Config1" "This config was created by the developers of Game X.…
- "joystick_move": x & y will be values ranging between -1 & 1, representing the current position of the joystick. [/code] While you're in your code, make sure you're not preventing the user from combining different kinds of input simultaneously. …
[subsection]Early Access Store Page[/subsection] If you are releasing in Early Access, you will need to check the box under the Early Access tab and answer all the questions in that section. You can check out the [doclink=store/earlyaccess][/doclink] documentation for more specific information about Early Access on Steam. [subsection]Store Page Video Tutorial[/subsection] This Steamworks Tutorial details the process of creating and viewing your store page in Steam. https://www.youtube.com/watch?v=lU1SFAa3QqM [section]Updated Features for your store page[/section] [callout]Note: These are new features that have been added since the above video was released.…
[introblock=GameNotifications_1_static.png] [h5]In Brief[/h5]Steam can host and distribute a demo version of your game that you can use to demonstrate part of your gaming experience. …
[/b] Demos can display on a base game's store page in two different ways: [list] [*]a more subtle option in the right-hand side bar of the base game's store page. [*]a more prominent green box in the center of the base game's store page. [/list] You can toggle those display options manually. In your base game's Edit Store Page section, select the Special Settings tab and scroll down to Associated Demos to see these options. …
[b]Returns:[/b] int The number of users that meet the specified criteria. [b]NOTE:[/b] Returns [b]-1[/b] if the current user is not logged on. [b]Example:[/b] [code=cpp]int nFriends = SteamFriends()->GetFriendCount( k_EFriendFlagImmediate ); if ( nFriends == -1) { printf( "GetFriendCount returned -1, the current user is not logged in.…
[/td][/tr] [tr][td][b]iPersonaName[/b][/td][td]int[/td][td]The index of the history to receive. [b]0[/b] is their current persona name, [b]1[/b] is their most recent before they changed it, etc.[/td][/tr] [/table] Gets one of the previous display names for the specified user. …
To ensure uninterrupted functionality during the transfer, we recommend the following process: [olist] [*] When the recipient confirms the transfer, they must check the [doclink=gettingstarted/managing_apps/sharing]Share management rights[/doclink] box at the bottom of the page so the apps remain in the sender's existing web API group(s) after the transfer. Granting financial data access is not required. [*]Once the transfer is approved by Valve, the recipient will need to create new API key(s) under their Steamwork's partner account with the affected apps. [*]Update the game's server infrastructure to use the new API key(s) and confirm expected functionality using the new web api key(s). [*]When ready, either partner can [url=https://partner.steamgames.com/appsharing/details/]cancel the application share[/url] to remove management and web API access of the transferred apps from the old partner account. …
You may wish to choose a particular date to conform to your contract, but we find that for accounting purposes, the 1st of the current or following month may be a convenient date for some partners. We do not recommend and may not allow dates far in advance of the current date or dates earlier than the 1st of the current month. …
[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. …
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. …
[introblock=Achievements_1.gif] [h5]In Brief[/h5]Use achievements to reward players for hitting certain milestones or for interacting with your game in particular ways. …
[/olist] For example, you can turn on the Bulk Move mode, use the search box to filter achievements by api name, then click the checkbox in the column headers to select all visible achievements in a group to move. …