[section=PerformanceGraph]Performance Graph[/section] You can turn on the in-headset performance graph from the Quick Access Menu: click the Clock button in the lower right hand corner of the Dashboard, then the Performance button, scroll down to VR Settings and toggle [b]Show Perf Overlay In VR[/b]. [docimg=steamframe-perfgraph2.png]steamframe-perfgraph2.png[/docimg] The overlay is made of 2 parts: a colored history graph representing game frame times and some raw numbers. …
In other words, they mean that your game is making framerate. [*][b]Yellow[/b] means your game is running at half rate (each submitted frame is taking between 1 and 2 vsync intervals to finish). [*][b]Red[/b] means your game is taking more than 2 vsync intervals to finish each frame. [*][b]Pink[/b] means SteamVR's compositor GPU preemption failed for some reason. …
This is important for a few reasons: [list] [*]This categorization will not only impact [b]where and how[/b] the event shows up, but also help players understand the event’s[b] functional context[/b]. Not every type of event needs to be presented in the same way to players, so we’ve designed the system to accommodate everything from small patch notes to the biggest update of the year. [*]Some types of events (such as livestreams or in-game discounts) have end dates, so selecting that type of event will allow you to specify when the promotion ends, and prompt the event to stop appearing. …
[subsection]Editor[/subsection] Once you've picked a category, you'll find a robust set of tools to create and customize your event. This includes a new type of header image at the top of your event (which gets used in a few other places), and a snappy preview mode that lets you quickly switch between editing and previewing your event detail page. …
[/color][/b] As a general guideline, make sure to hit SAVE at the bottom of the announcement/sales feature tool, every time you make any changes - you can use the preview option right after the change has been made: [docimg=image2020-4-17_12-41-2.png]image2020-4-17_12-41-2.png[/docimg] -- We will take you through the different tab options here now, before getting to the sales page. …
Once you add a section, you can specify what kind of content should be in that section. [subsection]Default Section Types[/subsection] [callout] Please see [doclink=marketing/event_tools/sales/sections]Sale Page Section Types[/doclink] for more details on each type of section you can make use of [/callout] [section]Adding Games[/section] At the bottom of a section, you will see a field "FEATURED ITEMS" this is where you add your apps - simply search for them or enter the appID. …
[/callout] The file must contain a dictionary named [b]steam_frame[/b] and one or more of the following entries: [table] [tr] [th]Name[/th] [th]Value / Type[/th] [th]Corresponding Video -> Per-Application Video Settings menu entry[/th] [th]Behavior when not specified[/th] [/tr] [tr] [td]preferResolution[/td] [td]<integer>, width component[/td] [td]Resolution Per Eye[/td] [td]Use 1728x1728[/td] [/tr] [tr] [td]preferMinRefreshRate[/td] [td]<integer>[/td] [td]Frame Limit / Refresh Rate Override[/td] [td]Use 72 Hz[/td] [/tr] [tr] [td]preferHalfFramerate[/td] [td]true, false[/td] [td]Frame Limit / Throttling Behavior[/td] [td]No throttling[/td] [/tr] [tr] [td]preferMotionSmoothingMode[/td] [td]"off", "on", "alwaysOn"[/td] [td]Motion Smoothing[/td] [td]Use global setting under Video -> Motion Smoothing[/td] [/tr] [/table] [callout=red]JSON syntax can be prone to errors. …
Example [b]vrpreferences.json[/b]: [code=json] { "steam_frame": { "preferResolution": 2160, "preferMinRefreshRate": 90, "preferHalfFramerate": true, "preferMotionSmoothingMode": "off" } } [/code] This example file suggests: [list] [*]A default resolution of 2160x2160 [*]A default display refresh rate of 90 Hz [*]A default frame throttling to 1/2 (Frame Limit to 45 FPS) [*]A default override to disable Motion Smoothing [/list] To validate that the [b]vrpreferences.json[/b] is picked up by SteamVR, the [b]vrserver.txt[/b] log file can be searched: [code=plain] [Info] - [Settings] Loading app-provided preferences from '/home/steamos/.local/share/Steam/steamapps/common/<game folder>/vrpreferences.json' [/code] Parsing errors will be reported in this log, for example: [code=plain] [Info] - Parsing of JSON file "/home/steamos/.local/share/Steam/steamapps/common/[...]…
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. …
We recommend these be in a subdirectory like "FLAC". [*]On the [b]Depots[/b] page, create a new depot and set its type to [b]Optional high-quality/uncompressed audio[/b]. [*]Save your depot configuration changes. [*]Publish the depot configuration changes. …
Click 'Request Review' in the ‘Sale’ tab of the Sale Event Editor. Reviews typically take 2–3 business days, so be sure to plan this into your own timelines for launch. [subsection]5. Publish Your Event[/subsection] Once your sales event has been approved, you’re free to publish it whenever you’re ready. …
Upcoming games are welcome to be on the page, but the focus should be on discounted titles - a majority of your catalog, if not all of it, should be on discount. The discounts should be front and center. For partners with F2P games, there should be something special occurring in-game to celebrate the sale, whether that is an in-game event, in-game cosmetics, or something in between. …
[docimg=clicks_conversions.png]clicks_conversions.png[/docimg] The report also shows 6 of the 20 visits were by customers signed in to Steam. Steamworks attributed 2 wishlist additions, and 1 purchase, to the 6 "Tracked Visits". [section]Getting Started[/section] UTM Analytics in Steamworks is already enabled for your game. …
At this time only app and sale pages are supported. We hope to expand support for additional page types in the future. [h4]Q. Do UTM links get recorded if the store page opens an age gate?[/h4] A. Yes, the UTM click event is recorded for the app when the age gate page is shown. …
[/td][/tr] [tr][td][b]pchContentType[/b][/td][td]const char *[/td][td]Sets the value of the calls "content-type" http header.[/td][/tr] [tr][td][b]pubBody[/b][/td][td][apitype]steam_api::uint8[/apitype] *[/td][td]The raw POST body data to set.…
Setting this raw body makes it the only contents for the post, the [code-inline]pchContentType[/code-inline] parameter will set the "content-type" header for the request to inform the server how to interpret the body. …
[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). …
to learn more about each field. The example below shows 5 launch options, 2 for Windows, 2 for macOS and 1 for Linux. Launch option 3 will only be shown on Windows if the user also owns the DLC specified. …
Follow these steps so that your initial login token is properly saved: [olist] [*] Run "steamcmd.exe +login <username> on the machine that will be preforming the build" [*] Enter your password, and the SteamGuard token [*] Type "info", and you should see your account listed as connected [*] Type "quit" [*] For each future run, do not enter a password. …
You can also tick the "Commercial License" option under "Show selected types" when using the filter to search the Steam store. On the game's store page, the commercial license price will be displayed right under the regular purchase option. [*][h4]Are commercial licenses refundable?[/h4] The [url=https://store.steampowered.com/steam_refunds/]refund policy[/url] is set up to closely mimic the consumer version (2 weeks/2 hours). [*][h4]Can I see if a player is in a Café?[/h4] You can make use of our webAPI ownership calls to find out if the player is accessing a license from the Café they're in and provide them with special items or content. …
[section=ReportAbuse]ReportAbuse[/section] [code=http]POST https://partner.steam-api.com/ISteamCommunity/ReportAbuse/v1/[/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 publisher authentication key.[/td][/tr] [tr][td][b]steamidActor[/b][/td][td]uint64[/td][td]✔[/td][td]SteamID of user doing the reporting[/td][/tr] [tr][td][b]steamidTarget[/b][/td][td]uint64[/td][td]✔[/td][td]SteamID of the entity being accused of abuse[/td][/tr] [tr][td][b]appid[/b][/td][td]uint32[/td][td]✔[/td][td]AppID to check for ownership[/td][/tr] [tr][td][b]abuseType[/b][/td][td]uint32[/td][td]✔[/td][td]Abuse type code (see EAbuseReportType enum)[/td][/tr] [tr][td][b]contentType[/b][/td][td]uint32[/td][td]✔[/td][td]Content type code (see ECommunityContentType enum)[/td][/tr] [tr][td][b]description[/b][/td][td]string[/td][td]✔[/td][td]Narrative from user[/td][/tr] [tr][td][b]gid[/b][/td][td]uint64[/td][td][/td][td]GID of related record (depends on content type)[/td][/tr] [/table] Allows publishers to report users who are behaving badly on their community hub. …
[/td][/tr] [/table] [code-inline]game_names[/code-inline] has the following structure: [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]id[/b][/td][td]uint32[/td][td]ID number of entry; referenced in site info below[/td][/tr] [tr][td][b]name[/b][/td][td]string[/td][td]Game name[/td][/tr] [/table] [code-inline]sites[/code-inline] has the following structure: [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]siteid[/b][/td][td]uint64[/td][td]64-bit SiteID of the site[/td][/tr] [tr][td][b]site_name[/b][/td][td]string[/td][td]Site name you have assigned to the site[/td][/tr] [tr][td][b]games[/b][/td][td]see below[/td][td]list of all game titles played[/td][/tr] [/table] [code-inline]games[/code-inline] has the following structure: [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]id[/b][/td][td]uint32[/td][td]ID of game in the [code-inline]game_names[/code-inline] section of the response[/td][/tr] [tr][td][b]license_type[/b][/td][td]string[/td][td]Playtime is divided up for each game by the type of license used. …
[/td][/tr] [tr][td][b]playtime_seconds[/b][/td][td]uint32[/td][td]total playtime for this game and license type, in seconds, for the requested period.[/td][/tr] [/table] …
This is particularly useful when combined with the "Always On" menu activation type. A natural example is binding this to "pause," so that whenever you bring up the radial menu, the game pauses and you have time to make your choice. …
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. …
[section=RankedByTrend]RankedByTrend[/section] [code=http]POST https://partner.steam-api.com/ISteamPublishedItemSearch/RankedByTrend/v1/[/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 publisher authentication key.…
[/td][/tr] [tr][td][b]steamid[/b][/td][td]uint64[/td][td]✔[/td][td]SteamID of user[/td][/tr] [tr][td][b]appid[/b][/td][td]uint64[/td][td]✔[/td][td]appID relevant to all subsequent tags[/td][/tr] [tr][td][b]tagcount[/b][/td][td]uint32[/td][td]✔[/td][td]Number of Tags Specified[/td][/tr] [tr][td][b]usertagcount[/b][/td][td]uint32[/td][td]✔[/td][td]Number of User specific tags requested[/td][/tr] [tr][td][b]hasappadminaccess[/b][/td][td]bool[/td][td][/td][td]Whether the user making the request is an admin for the app and can see private files[/td][/tr] [tr][td][b]fileType[/b][/td][td]uint32[/td][td][/td][td]EPublishedFileInfoMatchingFileType, defaults to k_PFI_MatchingFileType_Items[/td][/tr] [tr][td][b]tag[0][/b][/td][td]string[/td][td][/td][td]Tag to filter result set[/td][/tr] [tr][td][b]usertag[0][/b][/td][td]string[/td][td][/td][td]A user specific tag[/td][/tr] [/table] [b]NOTE:[/b] This call requires a publisher API key to use this method. …
Generator Legendary applies the tag [code-inline]quality:legendary[/code-inline] and creates sword or shield items, while Generator Common applies the tag [code-inline]quality:common[/code-inline] and also creates sword or shield items. [code] itemdefid: 10 type: item name: Sword itemdefid: 11 type: item name: Shield itemdefid: 100 type: generator name: Generator A bundle: 101x1;102x9 tags: color:red itemdef: 101 type: generator name: Generator Legendary bundle: 10;11 tags: quality:legendary itemdef: 102 type: generator name: Generator Common bundle: 10;11 tags: quality:common [/code] Another way to assign tags would be to use the [code-inline]tag_generator[/code-inline] item definition type. …
In the end you could end up with "Legendary Red Shield with Flames" or a "Common Red Sword with Lasers." [code] itemdefid: 10 type: item name: Sword itemdefid: 11 type: item name: Shield itemdefid: 100 type: generator name: Generator A bundle: 10;11 tags: color:red tag_generators: 101;102 itemdefid: 101 type: tag_generator name: Tag Generator Quality tag_generator_name: quality tag_generator_values: legendary:1;common:9 itemdefid: 102 type: tag_generator name: Tag Generator FX tag_generator_name: fx tag_generator_values: flames;sparks;lasers [/code] The format for the [code-inline]tag_generators[/code-inline] field is a list of all item definition ids of the tag generators you want applied, separated by the ";" character. …
[section]Peer-to-peer games[/section] For peer-to-peer traffic on Steam, all you need to do to take advantage of SDR is to use APIs such as [api]ISteamNetworkingSockets::CreateListenSocketP2P[/api] and [api]ISteamNetworkingSockets::ConnectP2P[/api]. Steam will take care of everything else. For other platforms and stores, read more about additional technical requirements below. …
[section]Simple Connection Flow to Dedicated Server Without Game Coordinator[/section] If you don't have your own central matchmaking / login service (we sometimes call this the "game coordinator") that assigns players to servers, or just want to keep things as simple as possible, then you can connect to a dedicated server in a known data center using [api]ISteamNetworkingSockets::CreateListenSocketP2P[/api] and [api]ISteamNetworkingSockets::ConnectP2P[/api]. In this case, the connection begins on the client just like an ordinary P2P connection. …
[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). …
[/td][/tr] [tr=eServerModeAuthentication][td][b]eServerModeAuthentication[/b][/td][td]2[/td][td]Authenticate users, list on the server list, don't run VAC on clients that connect.[/td][/tr] [tr=eServerModeAuthenticationAndSecure][td][b]eServerModeAuthenticationAndSecure[/b][/td][td]3[/td][td]Authenticate users, list on the server list and VAC protect clients.…
You can assign actions to these buttons. [b]Legacy note[/b]: Any type of button can be assigned, but XInput buttons will only work with XInput Gamepad compatible games. [subsection]Basic Settings[/subsection] [table] [tr][th]Name[/th][th]Values[/th][th]Description[/th][/tr] [tr][td][b]Mode Shifting[/b][/td][td]...…
Touch Menus can have a variety of buttons, layouts, size, opacity, and can use icons. [b]Legacy Note[/b]: Any type of button can be assigned, but XInput buttons will only work with XInput Gamepad compatible games. [subsection]Basic Settings[/subsection] [table] [tr][th]Name[/th][th]Values[/th][th]Description[/th][/tr] [tr][td]Touch Menu Button Count[/td][td]2,4,7,9,12,13, or 16 Buttons[/td][td]This selects how many on-screen buttons will show on your touch menu.…
Attached accessories will be visible in the Inventory view on the community, and will create "Unique" (non-commodity) item listings when they are offered on the Steam Community Market. It's up to you to decide what accessory types to support, and what cosmetic or gameplay effects different accessory types might have. You may also choose to support different types of accessories on different item types in your game. …
", "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". The action of the tag tool will be to apply the accessory tag, with the itemdef of this sticker as the argument. …