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. …
[/callout] If you are using Git on the command line, you can cherry pick it using the following command: [code]git remote add valve git@github.com:Valve-VR/UnrealEngine.git git fetch valve 751cf4a5135bb0ac0167260e7012b974085534b2 git cherry-pick 751cf4a5135bb0ac0167260e7012b974085534b2[/code] Or by using your Git GUI client of choice. [callout]For 5.7 use https://github.com/Valve-VR/UnrealEngine/commit/d678d468040336c0d2ecbba5c877ed8145497713[/callout] If you have not set up Unreal to build before, please see Epic's [url=https://dev.epicgames.com/documentation/en-us/unreal-engine/building-unreal-engine-from-source]Getting Started guide[/url] for more information. …
Binned3 allocates a large chunk of memory at the beginning of the app load, which is unfortunately too large, and causes an out of memory (OOM) crash. To fix this, restore the Binned2 allocator in your project’s Target.cs file with the following line: [code]StaticAllocator = StaticAllocatorType.Binned2;[/code] [subsection]Can’t Install APK on Lepton because of SDK Error[/subsection] If you see an error like the following when installing the APK on Lepton, it indicates that the Project is built with a version of the Android SDK / NDK that is too new for the version of Android on the device. …
[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. …
If you believe your key is compromised, you can invalidate it and generate a new one on this page. [/callout] [docimg=stream2.png]stream2.png[/docimg] [*]Enter Your Game's AppID You can see your game’s App ID by visiting your game’s App landing page in Steamworks or going to your game’s Steam store page--your appID is in the URL. …
[docimg=stream6.png]stream6.png[/docimg] [*]In the “Server” field, use the RTMP URL generated under the “Upload Server” field at http://steamcommunity.com/broadcast/upload/ [*]In the “Stream Key” field, enter the token provided at http://steamcommunity.com/broadcast/upload/ [*]In OBS, navigate to File-->Settings-->Output [docimg=stream7.png]stream7.png[/docimg] [*]Under Output Mode, select “Advanced” in the drop-down menu. [*]On the Streaming tab, enter Keyframe Interval to 2. [u]Note: This step is important. Without this setting your stream will fail to start.[/u]. If you're stream is interrupted frequently then check your [url=https://steamcommunity.com/broadcast/history]broadcast history[/url] to see if you are hitting an error like the following: "Make sure your upload key-frame interval is set to 2 seconds and use constant bitrate (CBR). …
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.…
Trading Cards). [subsection=cards]Cards[/subsection] [docimg=card2.png]Steam Trading Cards[/docimg] The amount of trading cards must be between 5 and 15 cards, based on the theme of the game. Sets are usually 6-10 cards, less for shorter games. …
Once set as ready for review, your cards will automatically appear in our queue to review by Valve. This process typically takes 2-3 days and any necessary feedback will be provided to you via the tool. [subsection]Trading cards for free apps[/subsection] Free apps may only have trading cards if the app has in-app purchases. …
[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! …
Remember: Seasonal Sales are exempt from Discount Cooldowns created by other discounts, so the Nov 15-22 launch discount would not prevent the game from joining the Dec 17 Winter Sale, even though they are within 30 days of each other. [subsection]Example 2: Joining Multiple Featuring Events with One Discount[/subsection] Later next Spring, things are going well and Bass Ain't Bitin' 2 is invited to three featuring events in the month of June! …
One potential solution would be the following: [list] [*] On September 1st, Bass Ain't Bitin' 2 sets up a 14-day discount on its current Early Access prices. At the same time, it also announces that it intends to increase prices at the end of this sale. …
[/td][/tr] [tr=k_EGameIDTypeShortcut][td][b]k_EGameIDTypeShortcut[/b][/td][td]2[/td][td]The game ID is a shortcut.[/td][/tr] [tr=k_EGameIDTypeP2P][td][b]k_EGameIDTypeP2P[/b][/td][td]3[/td][td]The game ID is a P2P file.…
[/td][/tr] [tr=k_EPositionBottomLeft][td][b]k_EPositionBottomLeft[/b][/td][td]2[/td][td]Bottom left corner.[/td][/tr] [tr=k_EPositionBottomRight][td][b]k_EPositionBottomRight[/b][/td][td]3[/td][td]Bottom right corner.…
Subsequent calls should use the result_highwatermark from the prior call, and will only show the dates with new data since the prior call. [u][b]Step 2:[/b][/u] For each date returned by GetChangedDatesForPartner, make a call to GetDetailedSales. Each new date should start with a highwatermark_id value of 0. …
For example: - On June 1st, it would be good practice to query May 31st and June 1st data. - On June 2nd, it would be good practice to query June 1st and June 2nd, but re-querying May 31st should not provide any new or changed data. …
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". …
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/?agreement_type=13 [*]2. In Steamworks, you need to approve the games you would like to show up in GeForce NOW. Please take the following steps. [*]3. Search for the app you would like to approve for Cloud Play. …
ncid=pa-srch-goog-17521&gclid=Cj0KCQjwlN32BRCCARIsADZ-J4t5Mghorda2SVQEvLcf646QsSvUmynfi6yP8qJ_UGCnB2-KexbOhpcaAiMIEALw_wcB#product-matrix]HERE[/url] for NVIDIA GeForce NOW. [b]Will there be other cloud gaming services added to Steam Cloud Play?…
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?…
You can call [apitype]ISteamInput::GetInputTypeForHandle[/apitype] to determine an individual controller's model type or implement separate mouse-style and joystick-style camera actions. [b] 3. Use SDL version 2.0.8 or above, if possible[/b] If you're using [url=https://www.libsdl.org/]SDL[/url] (Simple DirectMedia Layer), one of the most popular cross-platform game libraries for handling things like input, make sure you're using the latest version, or at least version 2.0.8 or above. …
Here's an example: [code] "localization" { "english" { "Title_Config1" "Official Configuration" "Description_Config1" "This config was created by the developers of Game X." "Title_Config2" "Official Southpaw Configuration" "Description_Config2" "This config was created by the developers of Game X, and is setup for Southpaw users.…
[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. …
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. …