[callout]If you’d like to use the [b]Steam Frame Controller Interaction Profile[/b] you’ll need to be on at least [b]Godot 4.6 beta 1.[/b][/callout] [section]Project Setup[/section] [list] [*][b]Enable OpenXR[/b] - (Project / Project settings / XR / OpenXR) and enable stereo shaders (Project / Project settings / XR / Shaders) [*][b]OpenXR Vendors Plugin[/b] - Optionally install the [url=https://godotengine.org/asset-library/asset/3768]Godot OpenXR vendors plugin[/url] from the AssetLib tab. …
For more info: https://docs.godotengine.org/en/stable/tutorials/xr/deploying_to_android.html [/list] [subsection]Linux Arm64:[/subsection] [list] [*][b]Add a Linux Export Profile[/b] (Use the Add... button) [*][b]Rename the profile[/b] to Steam Frame Arm64 [*][b]Set the Architecture[/b] to arm64 [/list] [/list] [section]Eye Tracking[/section] Steam Frame supports Eye Tracking in Godot using the Eye Gaze Interaction extension. You can enable it in [b]Project Settings > OpenXR > Extensions[/b]. [section]Foveated Rendering[/section] Steam Frame supports the Foveated Rendering functionality in Godot via the [url=https://godotvr.github.io/godot_openxr_vendors/]OpenXR Vendors Plugin[/url] (or releases [url=https://github.com/GodotVR/godot_openxr_vendors/releases]here[/url]). …
In your project's settings, go to [b]Edit > Project Settings > Android SDK[/b], and set both the Android SDK and the Android NDK API Levelto [b]android-30[/b]. …
It indicates that the APK requires a newer SDK than the OS supports, and not the other way around.[/i] To fix this, you must manually specify the project uses a lower SDK/NDK level, and rebuild. In your Project’s settings. Go to [b]Edit > Project Settings > Android SDK > NDK API Level[/b] and set it to [b]android-30[/b] (or, in the future, whichever version is specified after the [b](current version is #XX)[/b] portion of the error). …
Clone the project and change the current directory: [code] git clone --recursive https://gitlab.steamos.cloud/jupiter/vulkan-examples.git cd vulkan-examples [/code] The project contains several different small Vulkan samples located in the examples directory. …
[subsection]Unreal Engine 4 examples[/subsection] Create an Epic Games account, if you don't have one already, and then [url=https://www.unrealengine.com/en-US/get-now]download[/url] and install the Unreal Engine 4. As an example we are going to use one of the sample projects that the Unreal Editor offers. Create a new project and choose the "Puzzle" template [docimg=Screenshot_2021-07-16_072803.png]Screenshot_2021-07-16_072803.png[/docimg] Select a project name and a location [docimg=Screenshot_2021-07-15_082533.png]Screenshot_2021-07-15_082533.png[/docimg] Go to Edit->Project settings->Packaging and choose either "Debug" or "DebugGame" as the build configuration. …
[/list] [/list] [/list] [b]Example Response:[/b] [code=json] { "response": { "result": "OK", "params": { "count": 4, "orders": [ { "orderid": "1233", "transid": "1234567890123456788", "steamid": "76561197972751825", "status": "PartialRefund", "currency": "USD", "time": "2024-01-23T18:30:00Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:15:00Z", "items": [ { "itemid": 100, "qty": 1, "amount": 99, "vat": 9, "itemstatus": "Refunded" }, { "itemid": 101, "qty": 1, "amount": 1299, "vat": 116, "itemstatus": "Succeeded" } ] }, { "orderid": "1234", "transid": "1234567890123456789", "steamid": "76561197972751825", "status": "Failed", "currency": "USD", "time": "2024-01-23T18:40:30Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:39:00Z", "items": [ { "itemid": 100, "qty": 1, "amount": 99, "vat": 9, "itemstatus": "Failed" } ] }, { "orderid": "1235", "transid": "1234567890123456790", "steamid": "76561197972751825", "status": "Succeeded", "currency": "USD", "time": "2024-01-23T18:40:40Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:39:30Z", "items": [ { "itemid": 101, "qty": 1, "amount": 1299, "vat": 116, "itemstatus": "Succeeded" } ] }, { "orderid": "1236", "transid": "1234567890123456791", "steamid": "76561197972751825", "status": "Chargedback", "currency": "USD", "time": "2024-01-23T19:55:00Z", "country": "US", "usstate": "WA", "timecreated": "2024-01-23T18:40:00Z", "items": [ { "itemid": 102, "qty": 1, "amount": 999, "vat": 89, "itemstatus": "Chargedback" } ] } ] } } } [/code] [section=GetUserAgreementInfo]GetUserAgreementInfo[/section] [code=http]GET https://partner.steam-api.com/ISteamMicroTxn/GetUserAgreementInfo/v2/[/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 [url=https://partner.steamgames.com/doc/webapi_overview/auth#publisher-keys]publisher key[/url] with [b]Microtransaction[/b] permissions.…
[/list] [/list] [/list] [b]Example Response:[/b] [code=xml] <response> <result>OK</result> <params> <state>WA</state> <country>US</country> <currency>USD</currency> </params> </response> [/code] [section=InitTxn]InitTxn[/section] [code=http]POST https://partner.steam-api.com/ISteamMicroTxn/InitTxn/v3/[/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 [url=https://partner.steamgames.com/doc/webapi_overview/auth#publisher-keys]publisher key[/url] with [b]Microtransaction[/b] permissions.…
[section=supported_languages]Supported Languages[/section] For a full list of supported languages and their associated API language code, please see [doclink=store/localization/languages][/doclink] [section]Working With Translation Vendors[/section] There are many great translation companies around the world that specialize in translating gaming content. As you consider your options for who to work with for translating your game content, there are a few things to consider: [list] [*][b] Determine your target languages[/b] - Some companies are known to focus or be strong with certain regions’ languages than others. [*] [b]Compare price sheets to know how expensive services are. …
Is it text heavy/lore heavy/easy to relate to globally? This can impact which translation vendor may be better suited for particular languages. [*] [b]Ask for a deck or list of games that a vendor has worked on and ask them exactly what work they did on those games.…
Currently in SteamVR we only expose the currently in-use refresh rate. [i]Requirements: OpenXR[/i] [/list] [section]Project Settings[/section] These settings are required for Android OpenXR builds to work on the Steam Frame. [list] [*][b]Enable OpenXR[/b] - Enable the OpenXR Plugin [i](Project settings > XR Management)[/i] [*][b]Disable Meta XR[/b] - Disable all Meta XR and Meta Quest OpenXR Features [i](Project Settings > XR Management > OpenXR > OpenXR Feature Groups)[/i] [i]Note: New versions of the OpenXR Package have fixed having the Meta Quest Support feature enabled while deploying to non-meta headsets, but we recommend turning it off if your application doesn't load into VR correctly.…
[section]Play-in-Editor[/section] Deploying to the headset can be time consuming when trying to iterate quickly. If you setup your project to run OpenXR on Standalone (desktop) you can just hit Play in the editor and do most of your gameplay testing on PC through SteamVR, even while you're project currently targets Android. …
Try automating it using the Automated Steam Wrapper process documented above. [b]Q. An Anti-virus vendor has detected my binary as having a virus after applying the Steam DRM wrapper. What can I do?[/b] [b]A.[/b] False positives like this can happen, as the DRM injection process is modifying your binary in the same way a virus might do. Feel free to contact the vendor, or use the API instead of the Steam DRM wrapper. …
Inside of this directory you'll find [code-inline]SteamworksExample.sln[/code-inline], which can be opened in Visual Studio. Open the solution and compile the project. If compilation succeeds then you're ready to go and can run the project directly from Visual Studio (you'll need to have Steam running in the background). …
This will also be true for your own games which utilize Steamworks. The Visual Studio project file should place the executable in the appropriate directory when building, but if you are using a different compiler or have modified the solution or project files you may need to copy it yourself. …
[section]Overview[/section] OpenVR is an API and runtime that allows access to VR hardware from multiple vendors without requiring that applications have specific knowledge of the hardware they are targeting. This repository on GitHub is an SDK that contains the API and samples. …
For development on Linux, the following tools were used by the Valve Linux team: [list] [*] [url=http://qt-project.org/downloads#qt-creator]QtCreator[/url] - a debugger and IDE with familiar Visual Studio key bindings. [*] [url=http://www.slickedit.com/index.php]SlickEdit[/url] - provides a basic, configurable GUI with user-defined key bindings. [*] [url=http://www.gnu.org/software/gdb/]gdb[/url] - a popular command-line debugger. [*] [url=http://cgdb.github.com/]cgdb[/url] - a wrapper of gdb that provides a split-screen view of the current location in source code during execution. [*] [url=http://eclipse.org/downloads/?…
[section]GitHub Repositories[/section] The following repositories are public and used for projects related to Steam for Linux: [list] [*] [url=https://github.com/ValveSoftware/steam-for-linux]steam-for-linux[/url] - contains content for the Steam for Linux client and the bug tracker for the Linux Steam client [*] [url=https://github.com/ValveSoftware/steam-runtime]steam-runtime[/url] - contains the Steam Linux Runtime project. …
Into the Breach uses their own art for Xbox/Steam Controllers: [docimg=intothebreach_xbox.PNG]intothebreach_xbox.PNG[/docimg] PlayStation: [docimg=intothebreach_ps4.PNG]intothebreach_ps4.PNG[/docimg] and Nintendo Switch controllers: [docimg=intothebreach_switchpro.PNG]intothebreach_switchpro.PNG[/docimg] [callout=green]Note: Even when using your own art we suggest you fallback to Steam's art when you don't recognize a controller or call our helper function to find the closest option that existed when your game was released so when future devices are added they have reasonable glyphs.…
[/list] [docimg=steam_input_gamepad_templates.png]steam_input_gamepad_templates.png[/docimg] Steps for setting the template live for your game in Steamworks can be found [url=https://partner.steamgames.com/doc/features/steam_controller/getting_started_for_devs#23]here[/url] [subsection]Creating a custom configuration[/subsection] Configurations can be auto-converted between most controller types, but you'll at a minimum want to make a Steam Controller and Xbox controller configuration. [callout=green]Note: if you plan on taking advantage of device specific features like motion controls you'll want to also have one for PlayStation 4 or Nintendo Switch controllers.…
If your solution currently isn't working, please reach out to both your vendor and Valve for support. [*]Anti-tamper / DRM: In general we don't recommend use of such solutions across any PC platforms, as they may impact disk usage and overall performance. …
[/td][/tr] [/table] Get the OPF details for 360 video playback To retrieve the 360 OPF (open projection format) data to playback a 360 video, start by making a call to this, then the callback will indicate whether the request was successful. …
For a description of the OPF format and an example response, please see the [url=https://pixvana.com/open-projection-format/]Pixvana OPF web page[/url]. [subsection=GetVideoURL]GetVideoURL[/subsection] [code=cpp]void GetVideoURL( AppId_t unVideoAppID );[/code] [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]unVideoAppID[/b][/td][td][apitype]steam_api::AppId_t[/apitype][/td][td]The video app ID to receive the video stream for.…
Our expectation for mods is that by default (a) they are non-commercial in nature, (b) are based on the official SDK for one of our games and (c) clearly communicate their status as a community project. [h4]Non-commercial[/h4] By "non-commercial," we mean that anyone who owns the original Valve game can download and play the mod for free. …
However, if you are distributing a total conversion mod that does not use our games' assets or your mod is otherwise a completely separate experience from the base game, then we may let it ship on Steam without additional formal dependencies. [*] [h4]Q: Why are there mods on Steam that do not follow these rules? [/h4] [b]A.[/b] Our approach has evolved over time and the projects you are thinking about have been grandfathered in. [*] [h4]Q: What about mods for games on Steam that were not developed by Valve? …
These are not a set of instructions that you have to do to be successful and not a substitute for making a great game. [list] [*][b]Treat your project as a unique marketing problem[/b] - A marketing plan for one title may not necessarily translate to another. Rather than looking for how you can shoe-horn your title into a prepackaged marketing strategy, think about how you can experiment with different aspects of marketing and measure their effect early. …
The samples on the graph are colored as follows: [list] [*][b]Green[/b] indicates frame times within budget. 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. …
[/list] [subsection]Core Dumps[/subsection] If a native application crashes and you get a core dump, you can use GDB to see the call stack where it crashed.After crashing, view the list of core dumps using the command: [code]coredumpctl[/code] This will bring up a list of core dumps available to view, along with their pid numbers.Find the one relevant to you, named after your project, and view the dump by entering the following command, replacing the number with the pid of the dump you want to view: [code]coredumpctl debug 1234[/code] This command will load up the dump, which might take a while.When prompted, hit enter and full symbols will be loaded.To see the stack trace where the crash occurred, enter bt from the GDB command prompt. …
[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. …
[code=cpp] "workshopitem" { "appid" "480" "publishedfileid" "5674" "contentfolder" "D:\\Content\\workshopitem" "previewfile" "D:\\Content\\preview.jpg" "visibility" "0" "title" "Team Fortress Green Hat" "description" "A green hat for Team Fortress" "changenote" "Version 1.2" } [/code] Notes: [list] [*] The keys map to the various ISteamUGC::SetItem[...] methods. …
For example: [code=cpp]steamcmd.exe +login myLoginName myPassword +workshop_build_item workshop_green_hat.vdf +quit[/code] If the command is successful, the [code-inline]publishedfileid[/code-inline] value in the VDF will be automatically updated to contain the ID of the workshop item. …
.) [*][b]Video/Audio Codecs[/b]: We recommend using standalone codecs (eg., VP9 or AV1) rather than codecs that are tied to a specific vendor (eg., WMF). [/list] [subsection]Game Features[/subsection] [list] [*][b]Clouded Saves[/b]: For games that allow saving, we recommend enabling automatic clouding of saved games: users should be able to save their game on a Deck or Steam Machine and resume on a different PC, and vice versa, without manually transferring files. …
[code] itemdefid: 500 type: tag_generator name: Tag Generator Paint tag_generator_name: paint_color tag_generator_values: red:33;blue:33;green:33;gold:1 itemdefid: 100 type: tag_tool name: Random Paint Can tag_generators: 500 tags_to_remove_on_tool_use: paint_color [/code] Then when a user applies the "Random Paint Can" tool to their "Hat" using the [api]ISteamInventory::ExchangeItems[/api] call, they have a 33% chance to get either "red," "green," or "blue" and a 1% chance to get "gold.…