Skip to content

Controllers

codingncaffeine edited this page Jun 7, 2026 · 2 revisions

Controllers & Input

How the Linux build handles gamepads: mapping, hot-plugging, the disc-swap chord, and rumble. Input runs on SDL3's gamepad layer (the Windows app uses XInput), so anything SDL3 recognizes — Xbox, PlayStation, Switch Pro, 8BitDo, generic HID — works without per-pad setup.

Mapping

Preferences → Controls. Pick a console, a player (1–4), and a device (a connected controller or the keyboard), then click a button's box and press the input you want. Capture auto-advances to the next row; Escape cancels. Mappings are saved per console and per player, so player 2's layout never disturbs player 1's.

  • Sticks and triggers are bindable anywhere a button is — each direction (e.g. L-Stick ←) captures as its own input.
  • Reset restores the per-console defaults; saved bindings apply at the next game launch.
  • In-game, the cog menu's Edit Game Controls… jumps straight to the right console's panel.

Disk Swap (FRONTEND section)

Disk-capable consoles (FDS, PS1, Saturn, Sega CD, Amiga) get an extra Disk Swap row that captures a two-input chord: press the first input, the box shows X + …, press a different second input to commit. Works with two controller inputs or two keys. The default when unbound is L3 + Start. Details and per-console behavior: Disk Swapping.

Hot-plugging

Connect or disconnect a controller at any time — no restart needed:

  • The library's status bar shows Controller connected: <name> / Controller disconnected: <name>.
  • The same message appears in the game window's status line during play.
  • A pad connected mid-session is picked up by the running game within about a second.

Rumble

Cores that use the libretro rumble interface vibrate the controller on all four player ports — strong (low-frequency) and weak (high-frequency) motors are driven independently, as the core requests. Nothing to configure; if the game and core support vibration and your pad has motors, it rumbles.

Two notes:

  • Dreamcast: the rumble interface's presence is what lets the Flycast core initialize maple-bus sub-peripherals (VMU, Purupuru). See Dreamcast.
  • Nintendo 64: the controller's single accessory slot means a game sees either the Memory Pak or the Rumble Pak, never both — switch via the cog menu's Pak selection. See Nintendo 64.

Keyboard fallback

Player 1 always has a keyboard fallback (arrows + Z/X/A/S, Enter = Start, Right Shift = Select, Q/W = L/R) so a game is playable before any controller is mapped. Saved keyboard mappings from the Controls panel override these defaults.

Troubleshooting

  • controller-diag.log (see Log Files) records every device the app and the game host detect, with names — first stop for "my pad isn't seen".
  • A pad that shows up but doesn't respond in the Controls panel was a known 0.7.6 bug (fixed in 0.7.7) — update first.
  • Steam's overlay can grab controller input; if buttons reach Steam instead of the game, close Steam or disable its overlay for non-Steam apps.

Clone this wiki locally