We have found that for our own games it works best to release major updates every 1-2 months at most. This let us put together a big enough update to be exciting and compelling, and allowed for time to tease or pre-announce those updates before they ship to build anticipation. …
[/olist] [b]Examples[/b] As an example of the kinds of update announcement pages that we at Valve have put together for some of our own games, you can see the latest updates for Counter-Strike 2 listed down the right-side of the [url=https://www.counter-strike.net/home]CS2 website[/url], or some updates for Dota 2 [url=http://www.dota2.com/700]here[/url] and [url=http://www.dota2.com/darkrift]here[/url]. …
Once you enable Smart Section, you will see a few options for which smart section criteria to use for this section. [subsection]2. Using filters (requires a linked app list)[/subsection] If you have more than about 50 games, and if you want to organize them by genre or tag, you may want to use the linked app list. …
There are a few different options to make the layout interesting. 2/3/4/3 [subsection]Special options for single item-per-row[/subsection] If you choose to display a single (1) item per row, then you'll find a new set of options appears for how to display that single item. …
Example: to take a specific event like TI6, Valve would create a cover image focusing on "The International" rather than a generic use of "Dota 2". Example cover images: [docimg=capsule_examples.jpg]capsule_examples.jpg[/docimg] When viewed inside the Steam Library: [docimg=event_example_home_862.jpg]event_example_home_862.jpg[/docimg] [section]Event/Announcement Detail Page[/section] [b]The guts of your event/announcement.…
So, in addition to text and static images, feel free to include Steam Store widgets or YouTube videos. [docimg=event_example_detail_lg2.jpg]event_example_detail_lg2.jpg[/docimg] [section]Steam Library - Game Details Page[/section] Your game details page in the Steam Library includes three image types to convey information about the state of your game. …
[introblock=LIvestream_2.gif] [h5]In Brief[/h5]Set up a livestream to appear on your game's store page, developer homepage or special sale landing page. [h5]Level of integration[/h5]Basic streaming of your gameplay through Steam is built in. …
Steam, Twitch, YouTube, Facebook, Mixer etc.). Here's an illustration on how it works. [docimg=Schematic2.JPG]Schematic2.JPG[/docimg] [subsection]What you need to get started[/subsection] A publisher or developer can get started with broadcasting to Steam with the following. …
[docimg=action_set_layers_basic_1.png]action_set_layers_basic_1.png[/docimg] When the player selects a class, the appropriate layer is added, e.g. "sniper" [docimg=action_set_layers_sniper_2.png]action_set_layers_sniper_2.png[/docimg] The code for this might look something like: [code=cpp] void changeClass(EClassID myClass) { if(myClass == SNIPER) { SteamInput()->ActivateActionSetLayer( controllerHandle1, sniperLayerHandle ); } //logic for other classes } [/code] If the player enters or exits a vehicle, the controls for the vehicle layer are activated/deactivated on those state changes, adding or removing new controls for vehicle specific functions. …
[docimg=action_set_layers_scope.png]action_set_layers_scope.png[/docimg] [code=cpp] void useScope(bool entering) { if(entering) { SteamInput()->ActivateActionSetLayer( controllerHandle1, scopeHandle ); //apply the scoped-in layer when you scope in } else { SteamInput()->DeactivateActionSetLayer( controllerHandle1, scopeHandle ); //remove the scoped-in layer when you lower the scope } } [/code] Here's how all the layers combine. [docimg=action_set_layers_result_2.png]action_set_layers_result_2.png[/docimg] Note how layers can not only add new actions on top of underyling layers, they can also override previous bindings -- in this case, the vehicle-specific "brake" and "gas" actions override the basic layer's "jump" and "interaction" actions, and "steer" overrides the "move" action bound to the trackpad and joystick on the base layer, and in turn is overriden by the "aim" action from the scoped-in action set layer. …
See [apitype]steamnetworkingtypes::SteamNetworkingConfigValue_t[/apitype] for more about why this is preferable to setting the options "immediately" after creation. [subsection=CreateListenSocketP2P]CreateListenSocketP2P[/subsection] [code=cpp]HSteamListenSocket CreateListenSocketP2P( int nLocalVirtualPort, int nOptions, const SteamNetworkingConfigValue_t *pOptions );[/code] Like [api]ISteamNetworkingSockets::CreateListenSocketIP[/api], but clients will connect using [api]ISteamNetworkingSockets::ConnectP2P[/api]. …
Make sure and check SteamNetworkingFakeIPResult_t::m_eResult [subsection=CreateListenSocketP2PFakeIP]CreateListenSocketP2PFakeIP[/subsection] [code=cpp]HSteamListenSocket CreateListenSocketP2PFakeIP( int idxFakePort, int nOptions, const SteamNetworkingConfigValue_t *pOptions );[/code] Create a listen socket that will listen for P2P connections sent to our FakeIP. …
Note that the expected item definition id should match the target item's item definition id. [code] SteamItemInstanceID_t inputItems[2] = { unPaintCanItemDefID, unHatItemDefID }; uint32 inputQuantities[2] = { 1, 1 }; SteamItemDef_t outputItems[1] = { unHatItemDefID }; uint32 outputQuantity[1] = { 1 }; SteamInventoryResult_t resultHandle; SteamInventory()->ExchangeItems( &resultHandle, outputItems, outputQuantity, 1, inputItems, inputQuantities, 2 ); [/code] If you wanted to have a tool that just removed a tag, you can define something like this "Paint Stripper.…
[section=GetAppList]GetAppList[/section] [code=http]GET https://api.steampowered.com/ISteamApps/GetAppList/v2/[/code] Deprecated - this API can no longer scale to the number of items available on Steam. Please use [doclink=webapi/IStoreService#GetAppList]IStoreService/GetAppList[/doclink] instead. …
When type_filter is blank or not used, all apps are returned. Version 2 will output the app name. [b]NOTE:[/b] This call requires a publisher API key to use this method. As such this API [b]MUST[/b] be called from a secure server, and can never be used directly by clients! …
Examples of Roadmap assets: [docimg=arcraidersroadmap]arcraidersroadmap[/docimg] [docimg=spacemarine2roadmap.jpg]spacemarine2roadmap.jpg[/docimg] [docimg=percentagebasedapproach]percentagebasedapproach[/docimg] [section]Setting up a Roadmap[/section] To start, navigate to your game's app landing page, and click on "Edit Store Page". …
This is the best choice for highly competitive games (such as Dota 2) or games with persistent servers that keep running even after all players leave (such as Team Fortress 2). You can read more about it in the [doclink=features/multiplayer/game_servers][/doclink] documentation.…
We start with the "recommended" section selected, where id Software (the developer) has posted their official configuration for DOOM. [docimg=browse_configs_2.png]browse_configs_2.png[/docimg] This is the one we currently have selected, which was selected for us by default when we started the game for the first time. …
They will continue to be usable but it's highly recommended that you use the latest version. Change history: [list] [*] [b]Version 2[/b] - Fixes returning the leaderboard name in XML. [/list] [b]NOTE:[/b] This call requires a publisher API key to use this method. …
They will continue to be usable but it's highly recommended that you use the latest version. Change history: [list] [*] [b]Version 2[/b] - Fixes returning the leaderboard name in XML. [/list] [b]NOTE:[/b] This call requires a publisher API key to use this method. …
In high volume e-mail periods, time to notification will be longer. [b]Frequency limited to 2 weeks[/b] Customers who have been notified about an appID within the last 2 weeks (includes all forms of emails about the same appID) will be on e-mail cooldown, and will not receive additional communication until the cooldown period has passed. …
[h4]Q: Is there a cooldown on how often an email is sent for a particular product?[/h4] [b]A:[/b] Yes, there is a 1-2 week cooldown between wishlist emails. This can be extended during periods of high traffic (like seasonal sales). [h4]Q: Where can a user configure their e-mail preferences?…
. [*] [b]macOS[/b] [code-inline]libsteam_api.dylib[/code-inline] provides both the x64 and arm64 version of the Steam API. You must link this in your Xcode project and add it to a Copy Files build phase with destination "Executables" to copy it into your application bundle. …
[/th][th]Information[/th][/tr] [tr] [td][url=https://store.steampowered.com/app/220980/]CRYENGINE[/url][/td] [td]✔[/td] [td][/td] [/tr] [tr] [td][url=https://store.steampowered.com/app/585410/]GameMaker Studio 2[/url][/td] [td]✔[/td] [td][url=https://help.yoyogames.com/hc/en-us/articles/216754138-Using-The-Steamworks-SDK-With-GameMaker-Studio]Using The Steamworks SDK With GameMaker: Studio[/url][/td] [/tr] [tr] [td][url=https://godotengine.org/]Godot[/url][/td] [td]❌[/td] [td]Third Party: [url=https://godotsteam.com]GodotSteam[/url] - [url=http://steamcommunity.com/groups/steamworks/discussions/0/1319962244122216920/]Steamworks Developer Discussions support thread[/url][/td] [/tr] [tr] [td][url=https://haxe.org]Haxe[/url][/td] [td]❌[/td] [td]Third Party: [url=https://github.com/larsiusprime/SteamWrap]SteamWrap[/url] - [url=http://steamcommunity.com/groups/steamworks/discussions/0/1327844097134144055/]Steamworks Developer Discussions support thread[/url][/td] [/tr] [tr] [td][url=https://store.steampowered.com/app/251810/]Leadwerks Game Engine[/url][/td] [td]✔[/td] [td][url=https://leadwerks.com/werkspace/page/api-reference/_/steamworks/]Leadwerks API Reference › Steamworks[/url][/td] [/tr] [tr] [td][url=https://store.steampowered.com/app/363890/]RPG Maker MV[/url][/td] [td]❌[/td] [td]Third party: [url=https://github.com/greenheartgames/greenworks]Greenworks[/url] - [url=https://steamcommunity.com/groups/steamworks/discussions/0/666827316032532562/]Steamworks Developer Discussions support thread[/url][/td] [/tr] [tr] [td][url=https://developer.valvesoftware.com/wiki/SDK_Docs]Source 2013[/url][/td] [td]✔[/td] [td][doclink=sdk/uploading/distributing_source_engine][/doclink][/td] [/tr] [tr] [td][url=https://unity3d.com]Unity[/url][/td] [td]❌[/td] [td] Third party: [url=https://github.com/Facepunch/Facepunch.Steamworks]Facepunch.Steamworks[/url] - [url=https://steamcommunity.com/groups/steamworks/discussions/0/1319961618833314524/]Steamworks Developer Discussions support thread[/url] Third party: [url=steamworks.github.io]Steamworks .NET[/url] - [url=https://steamcommunity.com/groups/steamworks/discussions/0/666827974770212954/]Steamworks Developer Discussions support thread[/url] [/td] [/tr] [tr] [td][url=https://unrealengine.com]Unreal Engine 4[/url][/td] [td]✔[/td] [td][url=https://docs.unrealengine.com/4.26/en-US/ProgrammingAndScripting/Online/Steam/]Online Subsystem Steam[/url][/td] [/tr] [tr] [td][url=http://visionaire-studio.net]Visionaire Studio[/url][/td] [td]✔[/td] [td][url=https://wiki.visionaire-tracker.net/wiki/Player_FAQ#Publish_on_Steam]Publish on Steam[/url][/td] [/tr] [/table] [h4]Languages:[/h4] [list] [*] [b]ActionScript (Adobe Flash, AIR)[/b] [list] [*] [url=https://steamcommunity.com/groups/steamworks/discussions/0/1354868867732086473/]Discussion thread[/url] [/list] [*] [b]C#[/b] [list] [*] [url=https://steamcommunity.com/groups/steamworks/discussions/0/1354868867732095009/]Discussion thread[/url] [*] [url=https://github.com/Facepunch/Facepunch.Steamworks]Facepunch.Steamworks[/url] - [url=https://steamcommunity.com/groups/steamworks/discussions/0/1319961618833314524/]Steamworks Developer Discussions support thread[/url] [*] [url=steamworks.github.io]Steamworks .NET[/url] - [url=https://steamcommunity.com/groups/steamworks/discussions/0/666827974770212954/]Steamworks Developer Discussions support thread[/url] [/list] [*] [b]D[/b] [list] [*] [url=https://steamcommunity.com/groups/steamworks/discussions/0/1354868867732139048/]Discussion thread[/url] [*] [url=https://github.com/Extrawurst/DerelictSteamworks]DerelictSteamworks[/url] - [url=https://steamcommunity.com/groups/steamworks/discussions/0/1354868867732139048/]Steamworks Developer Discussions support thread[/url] [/list] [*] [b]Java[/b] [list] [*] [url=https://steamcommunity.com/groups/steamworks/discussions/0/1354868867732145070/]Discussion thread[/url] [*] [url=https://github.com/code-disaster/steamworks4j]steamworks4j[/url] - [url=https://steamcommunity.com/groups/steamworks/discussions/0/618463738391558109/]Steamworks Developer Discussions support thread[/url] [/list] [*] [b]JavaScript[/b] [list] [*] [url=https://steamcommunity.com/groups/steamworks/discussions/0/1354868867732147238/]Discussion thread[/url] [*] [url=https://github.com/greenheartgames/greenworks]Greenworks[/url] - [url=https://steamcommunity.com/groups/steamworks/discussions/0/666827316032532562/]Steamworks Developer Discussions support thread[/url] [/list] [*] [b]Python[/b] [list] [*] [url=https://steamcommunity.com/groups/steamworks/discussions/0/1354868867732150829/]Discussion thread[/url] [*] [url=https://github.com/philippj/SteamworksPy]SteamworksPy[/url] - [url=https://steamcommunity.com/groups/steamworks/discussions/0/135514151379602794/]Steamworks Developer Discussions support thread[/url] [/list] [*] [b]Rust[/b] [list] [*] [url=https://steamcommunity.com/groups/steamworks/discussions/0/1744469130478487829/]Discussion Thread[/url] [*] [url=https://github.com/Thinkofname/steamworks-rs]steamworks-rs[/url] - [url=https://steamcommunity.com/groups/steamworks/discussions/0/1744469130477656355/]Steamworks Developer Discussions support thread[/url] [/list] [/list] [section=flat_interface]Flat interface for binding to other languages[/section] The SDK has a few features to facilitate the creation of binding layers for other languages. …
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. …
[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. …
To help troubleshoot transient frame time issues with your game, you can look at the [b]perfcriteria.txt[/b] file in the SteamVR logs folder ([b]/home/steamos/.local/share/Steam/logs[/b], or accessible through the alias [b]cdl[/b] from a shell). The first 2 lines recapitulate the Application Name, Steam Application ID, target frame time, effective resolution, etc. The rest of the file is a list of frame times leading to the violation of the threshold set with the target frame time. …
[/td] [/tr] [/table] This can be visualized like this: [docimg=app_trans2.png]app_trans2.png[/docimg] …
The way the grouping is determined will depend on your game and what makes the most sense to show. For example, in Dota 2 there are parties of up to 5 people, so we will show the party that is being played with, not the full team of 5 that is match-made by the game. In Counter-Strike, though, 2 friends may be playing on a server together, but rather than showing the whole server as part of the party, only the mutual friends who are playing together are placed in the same Steam Player Group. …
[section]Steam Deck™ Brand Guidelines and Logos[/section] Last Updated: May 2,2022 To ensure that Steam Deck™ branding and trademarks are used consistently across all marketing and communication materials, we have some guidelines that should be followed by all partners when using Steam Deck branding. …
[section]Overview[/section] On Steam, you have the option to ship your game as Free to Play (otherwise known as F2P). Free to Play games are free for customers to download. Sometimes they also contain in-game purchases to monetize content. Free to Play games don’t require you to enter pricing because the game is a free license. …
Note that this package will never become visible, but is important for our system to recognize the game as free. [docimg=Setup2.png]Setup2.png[/docimg] You can also change a game from paid to free. For more details, please see [doclink=#switching]Switching from paid to free[/doclink] [section]Selling Content for your Game[/section] Whether your game is Free to Play or paid, you have two ways to sell content for your game: DLC or in-game purchases (microtransactions). …