Learn more: [doclink=store/broadcast]Live-Streaming[/doclink] [*][h3]Upcoming releases page / queue (automatic)[/h3] When your game has been posted as 'coming soon', it appears on the 'all upcoming releases' list, ordered by release date. …
Learn more: [doclink=marketing/discounts]Discounting[/doclink] [*][h3]Steam Themed Sale Events[/h3] Throughout the year, there are many opportunities to participate in organized themed fests on Steam. …
Note that the store page review is needed even if the demo doesn't have a separate store page. [*][b]May 24[/b] - All required items must be submitted for review by this date in order for your game to be prepared for Steam Next Fest ([i]if you haven’t completed them already for the Press Preview[/i]) [/list] [b]June 2027[/b] [list] [*][b]June 3[/b] - This is the deadline to opt OUT of trailer permissions if you have previously opted in, to ensure your trailer will NOT be included in official marketing materials. [*][b]June 3[/b] - Press preview starts at 10am PDT. …
You can check out our past live Q&A sessions on YouTube [url=https://www.youtube.com/playlist?list=PLckFgM6dUP2iCWK3VkvB8YZI9b7HHCj8m]here[/url]. These sessions cover a wide variety of topics to help you prepare for getting the most out of Steam Next Fest. …
([i]Recommendations: We recommend using OpenXR's [url=https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XR_EXT_render_model]XR_EXT_render_model[/url] or [url=https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XR_EXT_interaction_render_model]XR_EXT_interaction_render_model[/url], or OpenVR's [url=https://github.com/ValveSoftware/openvr/blob/0924064316de3effbcd1acf1e309182a2deb1c05/headers/openvr.h#L4782]IVRRenderModel[/url] interface, for obtaining the controller model mesh at runtime in order to automatically support current and future devices.…
The default controller configuration must provide users with the ability to access all content. Players must not need to adjust any in-game settings in order to enable controller support or this configuration. [*][b]controller glyphs[/b]: when using Steam Frame's physical controls, on-screen glyphs must either match Frame button names, or match Xbox 360/One button names. …
After you activate an action such as "assign_group" or "add_remove_group", the game's programming will wait until an action such as "group_0" or "group_3" is pressed. "assign_group" + "group_2" means, "assign the current selection to group 2," whereas "select_group" + "group_5" means, "select everything currently assigned to group 5.…
Additionally, the Unit commands have the special action "queue." When an order action is received, if the game detects that the "queue" action is also currently being fired, it will not immediately execute the original order, but instead stick it on queue for that unit. …
This will display the potential item drops in the item description, in order from most likely to drop to least likely. See the [doclink=features/inventory/schema#SpecifyBundles]bundle or generator items[/doclink] section.…
[h4]Exchange Example[/h4] [code] // require one of: // - one item#100 and one item#101; or, // - five of item#102; or, // - 3 of item#103 and three of item#104. "exchange":"100,101;102x5;103x3,104x3" // requires one left glove and one right glove: "exchange":"handed:left,handed:right" // require three trees plus something fancy: "exchange":"type:tree*3,quality:fancy" // require either: // - item#201 and item#202; or, // - a banana-flavored item and a heavy object "exchange":"201x1,202x1;flavor:banana,mass:heavy" // recycle five "common" artifacts into one "special" artifact: { "name":"special_generator", "type":"generator", "tags":"rarity:special", "bundle":...., "exchange":"rarity:common*5", ... } [/code] [subsection=PromoItems]Promo Items[/subsection] Promotional items can be granted to players based on a few different criteria: [list] [*] Ownership of an appid (including a DLC appid) [*] An achievement [*] Playtime in an appid [*] Manually granted - client needs to call AddPromoItem with the specific item def id. …
The IP can be a mapped IPv4 address void SetIPv4( uint32 nIP, uint16 nPort ); // Sets to IPv4 mapped address. IP and port are in host byte order. bool IsIPv4() const; // Return true if IP is mapped IPv4 uint32 GetIPv4() const; // Returns IP in host byte order (e.g. aa.bb.cc.dd as 0xaabbccdd). …
k_ESteamNetworkingConnectionState_Connecting = 1, /// Some connection types use a back channel or trusted 3rd party /// for earliest communication. If the server accepts the connection, /// then these connections switch into the rendezvous state. …
[url=https://www.dropbox.com/scl/fo/nhpf8p5hapsrxcm4hawda/AMFHnBhk8NmeGX42dmzSIic?rlkey=gd3mz04wf8ftmlwgcz7k0u105&st=ozzx3fcm&dl=0t]Steam Next Fest Asset Kit[/url] [section=faq]Frequently Asked Questions[/section] [b]Q. …
You can check out our past live Q&A sessions on YouTube [url=https://www.youtube.com/playlist?list=PLckFgM6dUP2iCWK3VkvB8YZI9b7HHCj8m]here[/url]. These sessions cover a wide variety of topics to help you prepare for getting the most out of Steam Next Fest. …
You can limit the number of accessories on a single item with the property "accessory_limit": [code=json]"accessory_limit": 3,[/code] The default limit is 4. Larger limits are not recommended. In-game, if an item is customizable, you can find the attached accessories by examining the per-item tags (call the SDK method [code-inline]ISteamInventory::GetResultItemProperty()[/code-inline] with the property name "tags"). …
", "icon_url":..., "accessory_tag": "sticker", "accessory_limit": 3, "allowed_tags_from_tools": "sticker" } [/code] Each sticker type is created with the "type" set to a "tag_tool". …
. [*] cart - is item definition index numbers separated by commas, with optional xN or *N quantity suffix. Order does not matter. Duplicates are treated as additional quantity. [*] total - is the expected total cost of the cart. Checkout will fail if this does not match. …
[/list] The following strings will be substituted in the return url: [list] [*] [RESULT] - result code ( 0 = success, 1 = user declined, 2 = currency mismatch, 3 or above is a internal failure code ). [*] [ORDERID] - 64-bit unsigned decimal integer representing Steam "orderid"; can be used with ISteamMicroTxn/QueryTxn api to verify transaction details - blank if user cancelled. …
Here you can stay up to date with popular café titles, see what's being played in arcades around the world and access available special offers. In order to view and purchase the commercial game licenses, you must be logged in with a Steam account that has previously signed the PC Café Agreement. …
Site license accounts will be able to purchase commercial packages multiple times or in quantity so the 2 weeks/2 hours clock starts ticking at the first purchase event. For example, if they purchased L4D and then 3 weeks later purchased another copy of L4D, a refund request would be denied because the first copy is more than 2 weeks old. If they instead purchased their second copy only 1 week after the first copy, both purchases could be refunded provided there was less than 2 combined hours of playtime on the licenses. [*][h4]Will my location need to be online all the time?…
[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.…
" Be mindful that publishing a store page will move ALL store page data and assets (including screenshots, trailers and library assets) to Steam's public servers. There, they can potentially be scrapped or datamined by 3rd party websites and shared on social media. This is true even if your app is in an unreleased or hidden state, so be careful not to inadvertently share an unannounced game or secret DLC project with the public this way! …
[/list] [section]Frequently Asked Questions[/section] [h4]Q. Does my game have to be released in order to use Curator Connect?[/h4] [b]A.[/b] Your game needs to have at least a 'coming soon' page publicly visible before you can send copies of your game to Steam Curators. …
[/b] You must have "Generate CD Keys" permission within Steamworks in order to access the Curator Connect feature. If you have that permission, you will see a link under the "Marketing" section on your app landing page in Steamworks. …
Ex: param1[/td][/tr] [/table] Gets the associated launch parameter if the game is run via steam://run/<appid>/?param1=value1;param2=value2;param3=value3 etc. Parameter names starting with the character '@' are reserved for internal use and will always return an empty string. …
[subsection=NewLaunchQueryParameters_t]NewLaunchQueryParameters_t[/subsection] Posted after the user executes a steam url with query parameters such as [code-inline]steam://run/<appid>//?param1=value1;param2=value2;param3=value3;[/code-inline] while the game is already running. The new params can be queried with [api]ISteamApps::GetLaunchQueryParam[/api]. …
[/td][/tr] [tr][td][b]nIP[/b][/td][td][apitype]steam_api::uint32[/apitype][/td][td]The IP address of the server in host order, i.e 127.0.0.1 == 0x7f000001.[/td][/tr] [tr][td][b]nConnPort[/b][/td][td][apitype]steam_api::uint16[/apitype][/td][td]The port used to connect to the server, in host order.…
[/td][/tr] [tr][td][b]nIP[/b][/td][td][apitype]steam_api::uint32[/apitype][/td][td]The IP address of the server in host order, i.e 127.0.0.1 == 0x7f000001.[/td][/tr] [tr][td][b]nConnPort[/b][/td][td][apitype]steam_api::uint16[/apitype][/td][td]The port used to connect to the server, in host order.…
If you don't know what your game's Steam AppID is, it can be found by logging into your Steam partner site. [callout] [h3]NOTE: These are the typical controller_config locations for each platform:[/h3] Windows: C:\Program Files (x86)\Steam\controller_config macOS: ~/Library/Application Support/Steam/Steam.AppBundle/Steam/Contents/MacOS/controller_config Linux: ~/.steam/steam/controller_config [/callout] Now open up the file in your favorite text editor. …
When in doubt, use [code-inline]"absolute_mouse"[/code-inline]. [callout=red] [h3][b]"joystick_move"[/b] vs. [b]"absolute_mouse"[/b][/h3] We can’t stress enough that when creating a camera input for your first/third person game or anything cursor driven, you should always use the [b]"absolute_mouse"[/b] type and react to deltas as if it’s a mouse. …
[/td][/tr] [tr][td][b]unIPServer[/b][/td][td][apitype]steam_api::uint32[/apitype][/td][td]The IP of the game server in host order, i.e 127.0.0.1 == 0x7f000001.[/td][/tr] [tr][td][b]usPortServer[/b][/td][td][apitype]steam_api::uint16[/apitype][/td][td]The connection port of the game server, in host order.…
[/td][/tr] [tr][td][b]unIPServer[/b][/td][td][apitype]steam_api::uint32[/apitype][/td][td]The IP address of the game server in host order, i.e 127.0.0.1 == 0x7f000001.[/td][/tr] [tr][td][b]usPortServer[/b][/td][td][apitype]steam_api::uint16[/apitype][/td][td]The connection port of the game server, in host order.…
The Web API method calls must originate from a hosted server that is separated from the game client – the publisher key must not be shipped with any game client code. [section=Authentication]Authentication and 3rd Party Accounts[/section] In order to call the Game Notifications APIs, you must first establish the identity of the Steam user logged into your game. …
It is important that you do not trust user identity in messages sent directly from the game client to your game server, as these messages can be tampered with. For games that use 3rd party accounts, use the instructions provided above but cache the user’s Steam ID in your system. [section=API]Game Notifications API[/section] [subsection=TechOverview]Technical Overview[/subsection] The Game Notifications API is written and exposed through Web APIs and require 4 parameters passed in each method: [list] [*] appid (the application id for your game) [*] format (the format of the result. …
([apitype]steamnetworkingtypes::SteamNetworkingMessage_t[/apitype]::m_nConnUserData might also be useful.) Delivery order of messages among different connections will usually match the order that the last packet was received which completed the message. …
Usually you will call this function once, near the start of the connection, perhaps after exchanging a few messages. [*] To assign all lanes the same priority, you may use pLanePriorities=NULL. [*] If you wish all lanes with the same priority to share bandwidth equally (or if no two lanes have the same priority value, and thus priority values are irrelevant), you may use pLaneWeights=NULL [*] Priorities and weights determine the order that messages are SENT on the wire. There are NO GUARANTEES on the order that messages are RECEIVED! Due to packet loss, out-of-order delivery, and subtle details of packet serialization, messages might still be received slightly out-of-order! …
[section=examples]Examples[/section] [subsection=account_linking]Linking third-party accounts to Steam accounts[/subsection] Third-party accounts can be linked to Steam accounts by associating a user's SteamID with the 3rd party account. A user's SteamID can be securely retrieved either in-game or through a web browser and once the initial association has occurred, you can safely allow access to the 3rd party account by merely verifying a user's SteamID. This eliminates the need for Steam users to do any sort of secondary login to 3rd party account systems. Additionally, if new 3rd party accounts can be automatically created and linked when a new SteamID is encountered, the Steam user will never have to be aware that a secondary authentication is taking place at all. …
[subsection=SteamGameServer_Init]SteamGameServer_Init[/subsection] [code=cpp]inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString );[/code] [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]unIP[/b][/td][td]uint32[/td][td]The IP address you are going to bind to. (This should be in host order, i.e 127.0.0.1 == 0x7f000001). You can use INADDR_ANY to bind to all local IPv4 addresses.[/td][/tr] [tr][td][b]usSteamPort[/b][/td][td]uint16[/td][td]The local port used to communicate with the steam servers.…
[/td][/tr] [tr=eServerModeAuthenticationAndSecure][td][b]eServerModeAuthenticationAndSecure[/b][/td][td]3[/td][td]Authenticate users, list on the server list and VAC protect clients.[/td][/tr] [/table]…