[subsection=CreateMouseCursor]CreateMouseCursor[/subsection] [code=cpp]RemotePlayCursorID_t CreateMouseCursor( int nWidth, int nHeight, int nHotX, int nHotY, const void *pBGRA, int nPitch = 0 );[/code] [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]nWidth[/b][/td][td]int[/td][td]The width of the cursor, in pixels[/td][/tr] [tr][td][b]nHeight[/b][/td][td]int[/td][td]The height of the cursor, in pixels[/td][/tr] [tr][td][b]nHotX[/b][/td][td]int[/td][td]The X coordinate of the cursor hot spot in pixels, offset from the left of the cursor[/td][/tr] [tr][td][b]nHotY[/b][/td][td]int[/td][td]The Y coordinate of the cursor hot spot in pixels, offset from the top of the cursor[/td][/tr] [tr][td][b]pBGRA[/b][/td][td]const void *[/td][td]A pointer to the cursor pixels, with the color channels in red, green, blue, alpha order[/td][/tr] [tr][td][b]nPitch[/b][/td][td]int[/td][td]The distance between pixel rows in bytes, defaults to nWidth * 4[/td][/tr] [/table] Create a cursor that can be used with SetMouseCursor(). …
[/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.…
If your Mac application already supports 64-bit, please login to Steamworks and select the "macOS -> 64 Bit Binaries Included" checkbox in the "Supported Operating Systems" section for your application. This will ensure that your macOS app will appear as compatible for users who are running Steam on macOS 10.15. …
You can see all packages associated with your application on the [url=https://partner.steamgames.com/apps/associated/]Associated Packages & DLC[/url] page. [*] In the [url=https://partner.steamgames.com/apps/view/]Steamworks Settings for your app[/url], check the appropriate operating system boxes under [b]Supported Operating Systems[/b]. [*] Edit your store page and check the appropriate operating system boxes on the Basic Info tab. [*] Then scroll down and enter the corresponding system requirements. …
Note that the inputs here are sent by scancode, so although the display here is a standard USA English keyboard, the input that is actually sent depends on your system language/keyboard layout. So inputs like "WASD" on the configurator layout will actually map to whatever keys are in the corresponding positions in your system layout. …
[/callout] [subsection]Toggle Magnifier[/subsection] [docimg=legacy_magnification.png]legacy_magnification.png[/docimg] This toggles the operating system's magnification tool, zooming in on the current mouse position. Currently the only operating systems that support the magnifier are Windows and Steam OS. …
The fraudsters’ goal is to move those virtual goods to other accounts, either owned by the fraudster or a player who is paying for those goods outside of the system. Alternatively, fraudsters may attempt to sell the entire account, again while being paid outside of the system. Your team will need to find a balance within your economy that blocks bad users, yet does not impact your legitimate users. …
[section]Linking Accounts[/section] Do you have your own account system? If so, we strongly encourage you to use Steamworks API to automatically create or link the Steam customer's account with your system, rather than requiring the customer to manually create an account through your game or website. …
On July 1 2023, Google replaced their third-party traffic reporting system (Universal Analytics) with their own, called Google Analytics 4 (GA4). Over time, we've come to realize that Google's tracking solutions don't align well with our approach to customer privacy, and the migration to GA4 felt like the right time to end our support and focus instead on building the most useful parts of aggregated reporting into Steam itself. …
These include: [list][*][b]Expanded presentation of external traffic sources to detail more common domains[/b] - for more details on traffic reporting, please see [doclink=marketing/traffic_reporting][/doclink] [*][b]Key updates to Steam's overall UTM System[/b] - For more details on UTM System, please see [doclink=marketing/utm_analytics][/doclink] [/list] [list][list][*][b]One-Day conversion tracking[/b], which fixes previous technical issues that slowed updates down, and expands the conversion window to 3 days. [*][b]Geographic breakdown[/b], which adds the ability to see regional breakdowns for the visitors to your store page [*][b]Visitor device category[/b], adding a split of device types for each campaign to let you see how your mobile vs. desktop audiences are learning about your game. [*][b]New vs. returning users[/b] are now break-out stats that help you see the percentage of visits to your store page that come from new versus returning players.…
[section]Features[/section] SteamVR lets users manage several areas of their VR experience, including: [list] [*]Room Setup - Define your play area [*]Device Status and Management - Update Firmware, Pair new devices, change audio settings, mirroring, and customize features like [url=https://steamcommunity.com/games/250820/announcements/detail/1705071932992003492]Motion Smoothing[/url] [/list] [subsection]System Report[/subsection] System Reports are a useful tool when troubleshooting your hardware, and you may need to generate one for customer support. You can generate a System Report in SteamVR by going to Settings->General, then click Create System Report, and click Save to File. [section]In-App Purchasing[/section] SteamVR supports in-app purchasing using the same microtransactions API as other Steam applications. …
[/td][/tr] [tr][td][doclink=features/enhancedrichpresence][/doclink][/td][td]With the recent release of the new Steam Friends and Chat client we've enhanced the capabilities of our rich presence system to show more about the games being played. We see a player's rich presence as a way to engage the player's friends in their activity. …
[/td][/tr] [tr][td][doclink=features/cloud][/doclink][/td][td]The Steam Cloud provides an easy and transparent remote file storage system for your game. Files specified in the Auto-Cloud configuration or written to disk (created, modified, deleted, etc.) using the Cloud API will automatically be replicated to the Steam servers after the game exits.…
[docimg=steamworks_settings.png]steamworks_settings.png[/docimg] [section]Step 2 - Set Supported Operating Systems[/section] Navigate to the [b]Application > General[/b] tab for your app, and check [b]Android [/b] under [b]Supported Operating Systems[/b]. …
Set your APK as the [b]Executable[/b], and set the [b]Operating System[/b] to [b]Android[/b]. [docimg=android_launch_options.png]android_launch_options.png[/docimg] [section]Step 5 - Steam Cloud[/section] Navigate to the [b]Application > Steam Cloud[/b] tab for your app, and follow [doclink=features/cloud]these instructions[/doclink] for setting quota, etc. …
[/list] [section]Troubleshooting[/section]If you install SteamVR on a system that does not include Steam as per the above workflow, depending on what software was previously installed on that system you may be missing some software dependencies. If this is the case on your system you may see an error message reporting one or several of the following of the following files missing on your system: d3dx10_43.dll MSVCP140.dll VCRUNTIME140.dll MSVCP140.dll This issue can generally be addressed by installing the Microsoft DirectX Runtime and the Microsoft Visual C++ Redistributable. …
If your content should be available to users running in any language, use the default [All Languages] selection. [*] [b]OS[/b] - If this is set, the depot is only mounted on systems of given OS. [*] [b]Architecture[/b] - System Architecture: You only need to specify 32/64 bit architecture if you have separate depots for each. …
[docimg=set_install_dir.png]set_install_dir.png[/docimg] [section=os_depots]Operating System Depots[/section] If your app supports multiple platforms, you should use separate depots to store the platform specific content. …
[section]Overview[/section] Screenshot support is provided automatically through the [doclink=features/overlay][/doclink] to every game through Steam and Steamworks provides a set of APIs designed to interact with this system. The Steamworks Screenshots API allows you to take screenshots and add them to a users local screenshot library with additional metadata such as the name of a location in your game or tagging users that appear in the screenshot. [callout][b]NOTE[/b]: The [doclink=features/overlay]Steam Overlay[/doclink] must be active in your game for the Screenshots system to be available.[/callout] Users can press a hotkey controlled by Steam (F12 by default), to trigger a screenshot. The user can change the hotkey and other screenshot settings that will take effect in any game they play in Steam by going to Settings -> In-Game. …
Please see the [doclink=features/microtransactions][/doclink] documentation for suggestions for in-game economies and best practices. [section]How the Payment System Works[/section] The payment system is a combination of whatever purchase process you have in-game, the Steam billing web service, and a customer approval process. …
[olist] [*] When a user wishes to buy something in-game, your game sends a purchase request to your purchasing server. The purchasing server can be any service entity that your game system has for handling purchase requests. It could be a web server or your authentication system. The server will need to communicate with the Steam billing servers over HTTP. …
This will allow you to [b]ssh[/b], [b]adb[/b], and [b]rdp[/b] into your headset. You will find this at [b]Steam Settings > System > Enable Developer Mode[/b]. [docimg=steamframe-devmode_1.png]steamframe-devmode_1.png[/docimg] Then on the left, scroll down to the [b]Developer[/b] section, scroll toward the bottom of that page and click [b]Set User Password[/b]. [docimg=steamframe-setpassword.png]steamframe-setpassword.png[/docimg] [section=beta]Beta[/section] For the latest updates, it is recommended to opt into the beta branch on Steam Frame as well as both the Steam client and SteamVR on PC. For Steam Frame, navigate to [b]Steam Settings > System > System Update Channel[/b], click the drop-down and select [b]Beta[/b]. [docimg=steamframe-os-branch-select.png]steamframe-os-branch-select.png[/docimg] [docimg=steamframe-os-beta-branch.png]steamframe-os-beta-branch.png[/docimg] For the Steam client, on your Desktop PC go to [b]Steam Settings > Interface > Client Beta Participation[/b] and select [b]Steam Beta Update[/b]. …
id=1545634111 You can read about building using the SteamVR Input System and the SteamVR Unity Plugin here: https://steamcommunity.com/sharedfiles/filedetails/?id=1416820276 [section]Skeletal Input[/section] The Skeletal Input system will allow controller makers to capture the pose of the user’s hand as accurately as their sensors are able, and provide it as a stream of animation data to the running app. …
But it also has a special option for opening a nested radial menu, "System Options": [docimg=slime_rancher_1.png]slime_rancher_1.png[/docimg] Selecting this will activate a player-defined "System Options" action set layer. …
There is also an option to "Return", which will deactivate the "System Options" action set layer and cause the normal options to appear the next time we activate this radial menu: [docimg=slime_rancher_3.png]slime_rancher_3.png[/docimg] Here's how we set it up. …
Steam Frame natively runs a Snapdragon 8 Gen 3 (Arm64) chip on [url=https://store.steampowered.com/steamos]SteamOS[/url] (Linux Arch-based) and includes a range of compatibility layers for other Operating Systems and architectures. [subsection]Windows via Proton[/subsection] Windows games can be run via [url=https://github.com/ValveSoftware/Proton/]Proton[/url]. …
FEX translates x86 compiled games to Arm64 instructions, but forwards API calls to native host system libraries like OpenGL or Vulkan to reduce emulation overhead, and leverages code caching to minimize in-game stuttering as much as possible. …
To enable the interaction profile you must request to use the extension: [code]XR_VALVE_frame_controller_interaction[/code] Then you can suggest bindings for the interaction profile path: [code]/interaction_profiles/valve/frame_controller_valve[/code] You can use the following paths: [code] "/user/hand/right/input/a/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/a/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/b/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/b/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/x/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/x/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/y/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/y/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/menu/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/menu/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/system/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/system/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/bumper/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/bumper/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/squeeze/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/squeeze/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/squeeze/value", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/right/input/trigger/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/trigger/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/trigger/value", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/right/input/thumbstick/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/thumbstick/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/right/input/thumbstick/x", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/right/input/thumbstick/y", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/right/input/thumbstick", XR_ACTION_TYPE_VECTOR2F_INPUT "/user/hand/right/input/grip/pose", XR_ACTION_TYPE_POSE_INPUT "/user/hand/right/input/aim/pose", XR_ACTION_TYPE_POSE_INPUT "/user/hand/right/output/haptic", XR_ACTION_TYPE_VIBRATION_OUTPUT "/user/hand/left/input/dpad_up/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_up/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_left/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_left/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_down/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_down/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_right/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/dpad_right/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/view/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/view/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/system/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/system/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/bumper/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/bumper/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/squeeze/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/squeeze/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/squeeze/value", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/left/input/trigger/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/trigger/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/trigger/value", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/left/input/thumbstick/touch", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/thumbstick/click", XR_ACTION_TYPE_BOOLEAN_INPUT "/user/hand/left/input/thumbstick/x", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/left/input/thumbstick/y", XR_ACTION_TYPE_FLOAT_INPUT "/user/hand/left/input/thumbstick", XR_ACTION_TYPE_VECTOR2F_INPUT "/user/hand/left/input/grip/pose", XR_ACTION_TYPE_POSE_INPUT "/user/hand/left/input/aim/pose", XR_ACTION_TYPE_POSE_INPUT "/user/hand/left/output/haptic", XR_ACTION_TYPE_VIBRATION_OUTPUT [/code] [subsection=openvr]OpenVR Bindings[/subsection] You can bind to the Steam Frame Controllers like you would any other OpenVR controller type. …
[code] Left Controller "/user/hand/left/input/dpad_up": click, touch "/user/hand/left/input/dpad_down": click, touch "/user/hand/left/input/dpad_left": click, touch "/user/hand/left/input/dpad_right": click, touch "/user/hand/left/input/view": click, touch "/user/hand/left/input/bumper": click, touch "/user/hand/left/input/trigger": click, touch, value 1d "/user/hand/left/input/grip": click, touch, value 1d "/user/hand/left/input/thumbstick": click, touch, value 2d "/user/hand/left/input/system": click, touch Right Controller "/user/hand/right/input/a": click, touch "/user/hand/right/input/b": click, touch "/user/hand/right/input/x": click, touch "/user/hand/right/input/y": click, touch "/user/hand/right/input/menu": click, touch "/user/hand/right/input/bumper": click, touch "/user/hand/right/input/trigger": click, touch, value 1d "/user/hand/right/input/grip": click, touch, value 1d "/user/hand/right/input/thumbstick": click, touch, value 2d "/user/hand/right/input/system": click, touch [/code] [section]HMD[/section] It is unlikely that you will have a reason to need the hmd name, but if you do, its [b]controller_type[/b] is [code-inline]"frame_hmd"[/code-inline]. …
For this reason it is very important that your game has [url=https://partner.steamgames.com/doc/features/cloud]Steam Cloud[/url] enabled or has a separate online save system of its own. If your game does not have either online save system, players of your game may lose their progress and saves when playing a game through a Steam Cloud Play service. …
You need to sign the addendum, opt each game into the program and ensure your game has either Steam Cloud enabled or its own online save system. Most of the time these are the only requirements. When testing your game, if another issue comes up we will reach out to you to help fix any specific issues. …
[list] [*]Make sure your Steam Deck/Machine is connected to the network, and all updates have been applied ([b]Settings > System[/b]) [*][b]On your Steam Deck/Machine[/b]: Go to Settings > System, and select [b]Enable Developer Mode[/b] under the System Settings section. …