More features
Steam Input
Action sets, button prompts, controller effects and Enhanced Input.
Steam Input works in actions, not buttons. You ask for "jump" and Steam resolves whatever the player bound it to on whatever device they are holding. Remapping, radial menus, gyro and community configs then come for free, because they happen on Steam's side.
You need an action manifest first
game_actions_<appid>.vdf file describing every action set and action before a single handle resolves. Without one, every action handle comes back as 0 and nothing responds, which looks exactly like the plugin being broken. This is the most common Steam Input question there is.SteamForge gives you a SteamForge Action Manifest data asset so you do not have to hand write that file:
Use Validate Manifest before generating. It catches the mistakes that fail silently at runtime, like a space in an API name, which the file format accepts and your lookups will never match.
Shipping still means uploading the manifest through the partner site, because a published app's manifest is read from Valve's servers rather than the player's disk.
Run Get Setup Diagnostics on the SteamForge Input subsystem at any time to see what Steam can and cannot see.
Reading input
| Node | What it does |
|---|---|
| Get Connected Controllers | Every pad Steam can see |
| Get Action Set / Activate Action Set | Switch the whole active set |
| Get Digital Action / Get Digital Action State | A press or not |
| Get Analog Action / Get Analog Action State | A continuous value |
| Get Device Type | Which kind of pad, for prompts |
Look handles up once and keep them. The lookups are string keyed and doing them every frame for every action shows up in a profile.
Button prompts
Get Digital Action Origins and Get Analog Action Origins tell you what an action is currently bound to, ready to draw:
| Field | Meaning |
|---|---|
| Display Name | The control's name, already translated to the player's Steam language |
| Glyph Svg Path | An SVG glyph on disk |
| Glyph Png Path | A PNG glyph at the size you asked for |
Add Get Digital Action Display Name for the action's own name, and you have everything a rebinding screen needs.
Refresh prompts when On Configuration Loaded fires. Origins resolve against whatever layout was current when you asked, so anything cached before that event is showing the wrong buttons.
Events
| Event | When |
|---|---|
| On Controller Connected | A pad appeared |
| On Controller Disconnected | A pad went away |
| On Configuration Loaded | The player's bindings changed |
| On Gamepad Slot Changed | Steam moved a pad to a different slot |
Rumble and lights
Trigger Vibration, Trigger Vibration Extended, Set LED Color and Reset LED Color, plus Get Motion State for gyro.
DualSense adaptive triggers
Five effects, all taking a controller and which trigger to affect:
| Node | Feels like |
|---|---|
| Clear Trigger Effect | Off |
| Set Trigger Feedback | Constant resistance from a point onward: a heavy lever |
| Set Trigger Weapon | Resistance that gives way: a gun trigger breaking |
| Set Trigger Vibration | Vibration around a point: an engine, automatic fire |
| Set Trigger Slope | Resistance ramping between two points: a bow drawing |
Call Clear Trigger Effect when leaving the state that set one. Effects persist on the pad until replaced, so a bow draw effect left running follows the player into the menu.
Enhanced Input
You do not have to choose between Steam's binding UI and Unreal's Enhanced Input.
Add a SteamForge Enhanced Input Bridge component to your PlayerController and fill in the bindings, pairing a Steam action name with an Enhanced Input action. Steam resolves the hardware, Enhanced Input receives the result as if it came from a regular device, and your triggers, modifiers and the input debugger all work unchanged.