Input: sources and measurements

The research behind the input skill and the C# example's Controls/, gathered on 2026-10-21 from the Godot 4.7.2 class reference and source, Valve's Steam Input documentation and the accessibility guidelines. Checks ran headless on 4.7.2 mono; there was no physical controller.

Sources

Source What it gave
Godot 4.7.2 InputMap.xml, InputEvent.xml, InputEventKey.xml, Input.xml, input_map.cpp, input_event.cpp The remapping API, which key field to store, IsMatch comparing the receiver's own field, 4.7's keyboard (16) and mouse (32) device ids
Controllers, gamepads and joysticks, drivers/sdl/joypad_sdl.cpp SDL3 for desktop controllers since 4.5; GetJoyInfo keys, ids as strings; no repeat events from controllers
@GlobalScope.xml JoyButton, SDL's controller_list.h Buttons by position (A is the bottom button, Nintendo's "B"); Microsoft, Sony, Nintendo and Valve vendor ids, Steam Deck's product id
Steam Input (concepts, action sets and layers, activators, mode shifting, IGA file, action manifest), ISteamInput, gamepad emulation best practices, Steam Deck recommendations Actions instead of buttons, glyph functions, a virtual pad that looks like an Xbox pad, switching prompts only on a click or key, Deck Verified requirements
GodotSteam input, Steamworks.NET (MIT) Steam Input from Godot, in GDScript or C#
Kenney Input Prompts 1.5 (CC0) Folder and file names of the prompt pictures
Xbox Accessibility Guideline 107, Game Accessibility Guidelines Remap everything, labels follow remaps, hold-or-toggle, no simultaneous presses, one input method for menus and play
Forgiveness Mechanics (Seth Coster, GDC talk on Levelhead) Coyote time, the jump buffer, hold-to-confirm restart and fall-through resets with their windows; Example.Core/Platformer/Forgiveness.cs
Building a Better Jump (Kyle Pittman, GDC Math for Game Programmers) Launch speed and gravity from a designed height and distance, heavier fall and release gravities, an exact step instead of Euler (10.7 px of apex error at 60 Hz); Example.Core/Platformer/JumpArc.cs, math
50 Game Camera Mistakes (John Nesky, GDC, probably 2014) The look stick's place among a third-person camera's priorities: the player's turn beats avoidance, hints wait after it, pitch eases into its limits; camera, Example.Core/Feel/OrbitCamera.cs
Accessibility Best Practices: Mobility Considerations (Karen Stevens, GDC 2021), Godot 4.7.2 core/input/input.cpp Adjustable and axial deadzones, sensitivity both ways per axis, stick swap, fewer buttons, vibration levels; how GetAxis and GetVector apply per-action deadzones (StickSettings)
AAA Gaming While Blind (Karen Stevens, GDC 2018), Godot 4.7.2 Input.xml, core/input/input.cpp, drivers/sdl/joypad_sdl.cpp Rumble patterns that carry information, per-player vibration levels and strength, a cue on menu wraps; which motor is which, and that out-of-range magnitudes are ignored (Haptics, LinearMenu)

Measurements

What Result
InputMap.GetActions() in a project with 3 actions 94, of which 91 are ui_*
stored.IsMatch(raw) versus raw.IsMatch(stored) for a physical-key binding true and false
A captured pad event stored as is Matches only that pad; normalized to device -1 it matches every pad
Input.ParseInputEvent then IsActionPressed false until the next frame
DisplayServer.KeyboardGetLabelFromPhysical headless An error ("not supported by this display server")
Key text through OS.GetKeycodeString and OS.FindKeycodeFromString Every key except Key.Special round-trips, modifiers included ("Ctrl+Left")
Loading an InputEventKey .tres with an embedded script The script ran
Input.StartJoyVibration(0, 0.3, 1, 0.45) headless, no pad GetJoyVibrationStrength(0) reads (0.3, 1) and GetJoyVibrationDuration(0) 0.45: testable without hardware
A magnitude outside 0 to 1 The whole call is ignored, without an error (input.cpp)
ui_down on the last Button of a VBoxContainer Focus stays: Godot does not loop a column by itself
The C# example ControlsTest (gdUnit4) Keyboard and pad at once, rebinding, conflicts, save and load, damaged files, prompt switching, controller families: all pass

Not confirmed