Indeed, the Steamworks [api]ISteamMatchmaking[/api] and [api]ISteamMatchmakingServers[/api] APIs have this property, as do some of our own games, such as Team Fortress 2. In this case, you can use the Steamworks "Fake IP" system. A FakeIP is an IP that "looks" like a valid IPv4 address for most purposes, but comes from a reserved address space that is not used on the Internet. …
How many copies can I send?[/h4] [b]A.[/b] You can send offers to 100 Curators, with a maximum of 5 copies of your game each. Sending more than one copy to a Curator is primarily useful for cases where you have a multiplayer game that individual reviewers within a Curator need to be able to play together. …
[section]Remote Play on Tablet[/section] If you have checked this feature, it means you have [doclink=features/remoteplay#7]created a recommended Steam Input touch controller config[/doclink] for your game, and you adapt to the various 4x3 and 16x9 aspect ratios used by tablet devices. You can use the [api]ISteamRemotePlay::BGetSessionClientResolution[/api]() function to get information about the remote device aspect ratio and resolution. …
There are costs associated with issuing each individual payment as well as potential bank fees charged to you upon receiving money that make it prohibitive to pay out for small amounts of money. Therefore, we may hold your payment until a minimum of $100 payout is earned. [*] [b]Q. Can I get paid in my local currency?[/b] A. No. We pay in US Dollars only. Your account needs to be able to accept payment via SWIFT wire transfer in USD. …
[docimg=xbox360_controller.png]xbox360_controller.png[/docimg] [subsection=FaceButtons]Face buttons[/subsection] [b]Digital[/b] The Xbox 360 controller features four standard face buttons labeled A, B, X, and Y. [docimg=xbox360_controller_face.png]xbox360_controller_face.png[/docimg] [subsection=Joysticks]Joysticks[/subsection] [b]Analog, 2 axes[/b] (+ digital "click") Like most other gamepads, the Xbox 360 controller features two analog joysticks, on the left and right side, vertically offset. …
Exchange recipes are evaluated atomically by the Inventory Service; if the supplied components do not match the recipe, or do not contain sufficient quantity, the exchange will fail. For example: [code]exchange: 101x1,102x1;103x5;104x3,105x3[/code] Will allow the item to be exchanged for either one #101 and one #102, five #103s or three #104s and three #105s. …
[b]See Also:[/b] [api]ISteamInventory::ConsumeItem[/api], [api]ISteamInventory::TransferItemQuantity[/api] [b]Example:[/b] [code=cpp]// Find an item in the user's inventory with the given itemdef SteamItemInstanceID_t CInventory::GetItemIdFromInventory( SteamItemDef_t itemDefId ); void CInventory::Exchange() { SteamItemInstanceID_t inputItems[2]; uint32 inputQuantities[2]; inputItems[0] = GetItemIdFromInventory( 103 ); inputQuantities[0] = 3; inputItems[1] = GetItemIdFromInventory( 104 ); inputQuantities[1] = 3; SteamItemDef_t outputItems[1]; outputItems[0] = 100; uint32 outputQuantity[1]; outputQuantity[0] = 1; SteamInventory()->ExchangeItems( &s_ExchangeRequestResult, outputItems, outputQuantity, 1, inputItems, inputQuantities, 2 ); }[/code] [subsection=GenerateItems]GenerateItems[/subsection] [code=cpp]bool GenerateItems( SteamInventoryResult_t *pResultHandle, const SteamItemDef_t *pArrayItemDefs, const uint32 *punArrayQuantity, uint32 unArrayLength );[/code] [table] [tr][th]Name[/th][th]Type[/th][th]Description[/th][/tr] [tr][td][b]pResultHandle[/b][/td][td][apitype]ISteamInventory::SteamInventoryResult_t[/apitype] *[/td][td]Returns a new inventory result handle.…
A complete list: [list] [*] Left Trigger Full Pull [*] Right Trigger Full Pull [*] Left Trigger Soft Pull* [*] Right Trigger Soft Pull* [*] Left Bumper [*] Right Bumper [*] Left Grip [*] Right Grip [*] Left Pad Click [*] Right Pad Click [*] Left Pad Touch [*] Right Pad Touch [*] Left Joystick Click [*] Right Joystick Click [*] D Pad Up [*] D Pad Down [*] D Pad Left [*] D Pad Right [*] A Button** [*] B Button** [*] X Button** [*] Y Button** [*] Start Button** [*] Select Button** [/list] [i]*Where available - note that Nintendo Switch controllers do not have Analog Triggers[/i] [i]**Actual label will vary between controller models[/i]…
[subsection]On-Screen Horizontal / Vertical Position[/subsection] Same as in [doclink=features/steam_controller/radial_menus][/doclink] [subsection]Menu Opacity[/subsection] Same as in [doclink=features/steam_controller/radial_menus][/doclink] [subsection]Menu Size[/subsection] Same as in [doclink=features/steam_controller/radial_menus][/doclink] [subsection]Display Binding Label on Button[/subsection] Same as in [doclink=features/steam_controller/radial_menus][/doclink] [section]Menu Buttons[/section] Each "Menu Button X" option can have an action (and/or legacy key binding) assigned to it. The basic configuration screen has four menu buttons, but you can assign up to sixteen (select "Additional Settings" for bindings for menu buttons 5-16). …
In cases where an API key is required, it can be provided either as a standard parameter or by setting the 'x-webapi-key' request header value. [section=user-keys]User Keys[/section] The standard user keys are available to everyone, all that is required is a Steam account and the domain name that will be associated with this key. …
Instead, we ask that you use the new Developer & Publisher homepage for these activities. For clarity, this includes pages such as "Developer X's July Sale", "Publisher X's Autumn Sale", and other adhoc pages. Developer, Publisher, and Franchise sale pages are still available once a calendar year regardless of curation status. …
The Steam folder will already have a very similarly named folder so make sure you've put it in the "controller_config" folder and not the "controller_base" folder. Rename the file to the following: "game_actions_X.vdf", where X is your game's Steam AppID. 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. …
At the bottom, you can upload an image to help customers compare editions. Simply drag an image (748px x 896px) that compares the various editions of your game. These images help customers understand what content is included in each edition and which purchase option is right for them. …
[subsection]Background[/subsection] You can upload a custom background image, which includes your product branding if you wish to change the overall feel of the store. This image should be 1920px x 1080px and the edges should fade to a solid background color which you can also specify. [subsection]Top-level filters[/subsection] You can associate a top-level filter with one or more tags, which are delimited by the ";" character. …
[section]Customized Tags[/section] [docimg=custom_tags_01.jpg]custom_tags_01.jpg[/docimg] You can also customize the tags that are shown in the left-most column of your tabbed area. You can hit the blue X to remove tags that aren't relevant to the games you make and you can use the controls below them to add other tags that are more relevant. …
Unless others noted below, requests should be HTTP POST requests presented as form data and should set this header: [code]Content-Type: application/x-www-form-urlencoded[/code] [Section=RetrieveSteamID]Retrieving the User's SteamID[/Section] Once you have an OAuth token for a user, you can make a server to server call to securely get the SteamID for the user associated with that token by calling: [code]https://api.steampowered.com/ISteamUserOAuth/GetTokenDetails/v1/?…
[subsection=FaceButtons]Face buttons[/subsection] [b]Digital[/b] The A, B, X, and Y buttons follow the physical layout and coloring of the XInput standard seen in devices like the Xbox 360 controller. [docimg=steam_controller_face.png]steam_controller_face.png[/docimg] [subsection=Joystick]Joystick[/subsection] [b]Analog, 2 axes[/b] (+ digital "click") The analog joystick is essentially identical to a traditional controller's, including digital "click the stick" functionality. …
. [*] If you need to specify another port then 80, it must be "ip:port" in quotes [*] Don't add "http://" in front, HTTPS is not supported [/list] Note: The default location of the Steam executable is: [list] [*] [b]For Windows[/b]: [code]C:\Program Files (x86)\Steam\[/code] [*] [b]For macOS[/b]: [code]Steam.app/contents/macOS/[/code] [*] [b]For Linux[/b]: [code]~/.local/share/Steam/[/code] [/list] [b]Note[/b] As of September 2026, Steam will begin requiring newly-created "local" app branches to be [b]password-protected[/b]. …
[/td][/tr] [tr][td][b]pflPercent[/b][/td][td]float *[/td][td]Variable to return the percentage of people that have unlocked this achievement from 0 to 100.[/td][/tr] [tr][td][b]pbAchieved[/b][/td][td]bool *[/td][td]Variable to return whether the current user has unlocked this achievement.…
[/td][/tr] [tr][td][b]pflPercent[/b][/td][td]float *[/td][td]Variable to return the percentage of people that have unlocked this achievement from 0 to 100.[/td][/tr] [tr][td][b]pbAchieved[/b][/td][td]bool *[/td][td]Variable to return whether the current user has unlocked this achievement.…
([i]Recommendations: Whenever possible, we recommend you support the Deck's native resolutions of 1280x800 (preferred) or 1280x720.[/i]) [*][b]Text Legibility[/b]: Interface text must be easily readable at a distance of 12 inches/30 cm from the screen. In other words, the smallest on-screen font character should never fall below 9 pixels in height at 1280x800. ([i]Recommendations: We expect Steam Deck will be used in a wide variety of lighting and physical configurations, such as being connected to a TV, monitor or keyboard. …
[list] [*] [doclink=#basic]Basic[/doclink] [*] [doclink=#fps]First Person Shooter[/doclink] [*] [doclink=#action]Third Person Action / Adventure[/doclink] [*] [doclink=#tactics]Turn Based Tactics[/doclink] [*] [doclink=#rts]Real Time Strategy[/doclink] [*] [doclink=#4x]4X Strategy[/doclink] [*] [doclink=#jrpg]Console-style JRPG[/doclink] [*] [doclink=#adventure]Point-and-click Adventure[/doclink] [*] [doclink=#racing]Racing[/doclink] [*] [doclink=#platformer]Platformer[/doclink] [/list] [section=basic]Basic[/section] This is a completely minimal file -- one action set, one digital action, and one analog action. …
[code] "In Game Actions" { "actions" { "GameControls" { "title" "#Set_GameControls" "StickPadGyro" { "MoveCursor" { "title" "#Action_MoveCursor" "input_mode" "absolute_mouse" } "CameraPan" { "title" "#Action_CameraPan" "input_mode" "absolute_mouse" } "CameraZoom" { "title" "#Action_CameraZoom" "input_mode" "absolute_mouse" } } "Button" { "click" "#Action_Click" "cancel" "#Action_Cancel" "select" "#Action_Select" "select_add_remove" "#Action_AddRemove" "select_type" "#Action_SelectType" "select_idle" "#Action_SelectIdle" "move_attack" "#Action_MoveAttack" "move_no_attack" "#Action_Move" "attack_target" "#Action_Attack" "assign_group" "#Action_AssignGroup" "add_remove_group" "#Action_AddRemoveGroup" "select_group" "#Action_SelectGroup" "group_0" "#Action_Group0" "group_1" "#Action_Group1" "group_2" "#Action_Group2" "group_3" "#Action_Group3" "group_4" "#Action_Group4" "group_5" "#Action_Group5" "group_6" "#Action_Group6" "group_7" "#Action_Group7" "group_8" "#Action_Group8" "group_9" "#Action_Group9" } } "MenuControls" { "title" "#Set_MenuControls" "Button" { "MenuUp" "#Menu_Up" "MenuDown" "#Menu_Down" "MenuLeft" "#Menu_Left" "MenuRight" "#Menu_Right" "Affirm" "#Menu_Affirm" "Cancel" "#Menu_Cancel" "Other" "#Menu_Other" "ScrollUp" "#Menu_ScrollUp" "ScrollDown" "#Menu_ScrollDown" "DismissMenu" "#Menu_DismissMenu" } } } "action_layers" { "title" "#Layer_UnitMenu" "Button" { "stop" "#Unit_Stop" "hold" "#Unit_Hold" "patrol" "#Unit_Patrol" "follow" "#Unit_Follow" "queue" "#Unit_Queue" "unit_ability_1" "#Unit_Ability1" "unit_ability_2" "#Unit_Ability2" } "title" "#Layer_BuildMenu" "Button" { "build_0" "#Build_0" "build_1" "#Build_1" "build_2" "#Build_2" "build_3" "#Build_3" "build_4" "#Build_4" "build_5" "#Build_5" "build_6" "#Build_6" "build_7" "#Build_7" "build_8" "#Build_8" "build_9" "#Build_9" } } "localization" { "english" { "Set_GameControls" "Game Controls" "Set_MenuControls" "Menu Controls" "Layer_UnitMenu" "Unit Menu" "Layer_BuildMenu" "Build Menu" "Action_MoveCursor" "Move Cursor" "Action_CameraPan" "Pan camera" "Action_CameraZoom" "Zoom camera" "Action_Click" "Click mouse" "Action_Cancel" "Cancel" "Action_Select" "Select" "Action_AddRemove" "Add/remove from selection" "Action_SelectType" "Select all units of type" "Action_SelectIdle" "Select idle worker" "Action_MoveAttack" "Attack-Move" "Action_Move" "Move (no attack)" "Action_Attack" "Attack target" "Action_AssignGroup" "Assign group" "Action_AddRemoveGroup" "Add/remove from group" "Action_SelectGroup" "Select group" "Action_Group0" "Group 0" "Action_Group1" "Group 1" "Action_Group2" "Group 2" "Action_Group3" "Group 3" "Action_Group4" "Group 4" "Action_Group5" "Group 5" "Action_Group6" "Group 6" "Action_Group7" "Group 7" "Action_Group8" "Group 8" "Action_Group9" "Group 9" "Menu_Up" "Up" "Menu_Down" "Down" "Menu_Left" "Left" "Menu_Right" "Right" "Menu_Affirm" "Affirm" "Menu_Cancel" "Cancel" "Menu_Other" "Other" "Menu_ScrollUp" "Scroll Up" "Menu_ScrollDown" "Scroll Down" "Menu_DismissMenu" "Dismiss Menu" "Unit_Stop" "Stop" "Unit_Hold" "Hold ground" "Unit_Patrol" "Patrol" "Unit_Follow" "Follow" "Unit_Queue" "Queue action/waypoint" "Unit_Ability1" "Ability 1" "Unit_Ability2" "Ability 2" "Build_0" "Build option 0" "Build_1" "Build option 1" "Build_2" "Build option 2" "Build_3" "Build option 3" "Build_4" "Build option 4" "Build_5" "Build option 5" "Build_6" "Build option 6" "Build_7" "Build option 7" "Build_8" "Build option 8" "Build_9" "Build option 9" } } } [/code] [section=4x] 4X Strategy[/section] This is a simple 4X strategy game, where you move units on a main map, colonize territory (whether that's planets or islands or cities), and engage in combat with other empires. …