Keyboard, controller and GameCube controls
Updated · Covers WindowSmash v0.2.0-alpha.1 and OpenSmash runtime-c2ca705
Choose your project before changing a binding or adapter driver. The keyboard shoulder buttons differ, and the Windows GameCube paths require different modes and drivers.
On this page
Keyboard defaults by project
WindowSmash
| Switch input | Default keyboard input |
|---|---|
| Left stick | Arrow keys |
| A / B / X / Y | Z / X / C / V |
| L / R | A / S |
| ZL / ZR | Q / W |
| Right stick | I / J / K / L |
| + / − | Enter / Backspace |
| Switch input | Default keyboard input |
|---|---|
| Switch inputLeft stick | Default keyboard inputArrow keys |
| Switch inputA / B / X / Y | Default keyboard inputZ / X / C / V |
| Switch inputL / R | Default keyboard inputA / S |
| Switch inputZL / ZR | Default keyboard inputQ / W |
| Switch inputRight stick | Default keyboard inputI / J / K / L |
| Switch input+ / − | Default keyboard inputEnter / Backspace |
OpenSmash
| Switch input | Default keyboard input |
|---|---|
| Left stick | Arrow keys |
| A / B / X / Y | Z / X / C / V |
| L / R | Q / E |
| ZL / ZR | A / S |
| D-pad left / up / right / down | J / I / L / K |
| Right stick and stick clicks | Unbound |
| + / − | Enter / Backspace |
| Switch input | Default keyboard input |
|---|---|
| Switch inputLeft stick | Default keyboard inputArrow keys |
| Switch inputA / B / X / Y | Default keyboard inputZ / X / C / V |
| Switch inputL / R | Default keyboard inputQ / E |
| Switch inputZL / ZR | Default keyboard inputA / S |
| Switch inputD-pad left / up / right / down | Default keyboard inputJ / I / L / K |
| Switch inputRight stick and stick clicks | Default keyboard inputUnbound |
| Switch input+ / − | Default keyboard inputEnter / Backspace |
OpenSmash keyboard input needs window focus. It normally uses the first empty player position after connected controllers. Check that player assignment before treating a keyboard as unresponsive.
Connect and assign a gamepad
WindowSmash
- Connect the pad before or during play.
- Open Esc → Controllers on Windows/Linux, or press F2 for the device list.
- Select the detected pad.
- Set its Player assignment if the next free slot is not the one you want.
- Choose positional or printed-label face buttons.
- Close the settings to test the pad in the game.
Pads normally take the next free player slot, and a reconnected pad gets its previous slot back. An Xbox pad's right-hand B acts as Switch A in positional mode. On Windows, PlayStation/Switch Pro and most non-XInput pads need SDL3.dll next to build/ssbu.exe; rerun the installer if it is missing. Without it, only XInput players 1–4 work. Linux uses its SDL2 path instead.
OpenSmash
On Windows:
- Connect the pad.
- Open F1 → Controls in the Vulkan menu.
- Assign the pad to the intended player slot.
- Set the keyboard's player separately if it should share a slot or be disabled.
- Return focus to the game to test the buttons.
The file's [players] section uses player1 through player8: auto selects a free slot, a device GUID reserves it, and none leaves it unused. In [keyboard], player = auto takes the first empty position after the pads found at startup; 1–8 merges with that player and none disables it. Linux pads use SDL3; GameCube adapters on Linux still need testing.
Assign an OpenSmash controller on Linux
A GUID is the controller's device identifier. Connect your pad, then use this example to give it player 2 and the keyboard player 1:
- Close OpenSmash.
- Open a terminal in the OpenSmash project folder.
- Run
build-linux/work/ssbu_native --pad-test. - Identify your pad by its device name and live button or stick inputs in the output.
- Copy the value after
GUIDfor that device. - Press Ctrl+C to stop the test.
- Open
build-linux/config/controllers.ini. - Under
[players], setplayer2 = YOUR_GUID, replacingYOUR_GUIDwith the copied value. - Under
[keyboard], setplayer = 1if you want the keyboard to control player 1. - Save the file.
- Run
./play.shto apply the assignments, including the keyboard's player choice. - Test the pad and keyboard in the game to check that each controls its intended player.
Gamepads and GameCube adapters
| Windows path | Adapter mode | Driver and ownership |
|---|---|---|
| Windows pathWindowSmash | Adapter modeWii U mode for third-party adapters | Driver and ownershipWindows-installed driver; a WinUSB replacement can stop recognition |
| Windows pathOpenSmash | Adapter modeSwitch mode for WUP-028/Mayflash four-port path | Driver and ownershipWinUSB; close other programs that hold the adapter |
WindowSmash GameCube setup on Windows
- Put a third-party adapter in Wii U mode.
- Connect the adapter and controller.
- Let Windows install its normal adapter driver.
- Connect the second grey USB plug if you want wired-controller rumble.
- Open the game's Options → Controls to change its native GameCube bindings.
If an earlier WinUSB change prevents detection, open Device Manager, uninstall the WUP-028 device with its driver-removal box selected, then reconnect the adapter. Apply that recovery only to WindowSmash; OpenSmash needs WinUSB.
OpenSmash GameCube setup on Windows
- Put a switchable four-port adapter in Switch mode.
- Check that the WUP-028/Mayflash adapter has the WinUSB driver required by OpenSmash's direct adapter path.
- If WinUSB is absent, use Slippi's install GameCube adapter drivers option for that adapter.
- Close other software holding the adapter.
- Launch OpenSmash.
- Leave
gamecube_style = nativein the controller file for native GameCube controls.
If that style behaves incorrectly, change it to pro and test again. This WinUSB path is Windows-only; Linux instead needs SDL3 built with libusb support. Do not install a Windows driver on Linux.
WindowSmash uses the game’s native GameCube layout for the adapter. The second, grey USB plug supplies rumble; WaveBird has no rumble. Other pads can use style = gamecube in controllers.ini.
OpenSmash defaults to gamecube_style = native; try gamecube_style = pro if the controller behaves incorrectly. Its direct WinUSB implementation is Windows-only; Linux uses SDL3 with libusb support. WindowSmash Linux uses SDL2.
controllers.ini and remapping
| Project/platform | Controller file |
|---|---|
| Project/platformWindowSmash | Controller fileRoot controllers.ini in the project, generated on first start |
| Project/platformOpenSmash Windows | Controller file<install location>/config/controllers.ini |
| Project/platformOpenSmash Linux | Controller filebuild-linux/config/controllers.ini |
Remap WindowSmash
- Open Esc → Controllers on Windows/Linux.
- Select the pad to change.
- Open Buttons....
- Choose the Switch button and replacement pad control shown by the menu.
- Restart through Game → Restart the game if the setting is marked next start.
Changes save immediately. On Mac, or for file-only settings, close the game and edit the root file; restart to apply. For example, set layout = labels under [device default] to use printed face-button letters. Set keyboard_player = 0 under [general] to disable the keyboard, or 1–8 to assign it. Use keyboard_player to choose WindowSmash’s keyboard player; OpenSmash uses its own [keyboard] section. Game → the keys shows WindowSmash's keyboard controls.
Remap OpenSmash
For OpenSmash’s Windows Vulkan settings menu:
- Open the menu with F1 if it is available in your build.
- Select Controls.
- Select Change beside one input.
- Press the replacement key or controller input.
Use Default to restore that binding. If F1 does not open, close the game and set menu = on in config/graphics.ini. Linux has no F1 menu, so use its file path above.
To change an OpenSmash keyboard binding in either file:
- Open the generated
controllers.inifor that installation. - Find the
[keyboard]section. - Replace one key, for example change
A = ZtoA = F. - Save the file.
- Return focus to the game to test the new key.
The file reloads within about a second. Per-device entries override controller-type entries; check both if a pad mapping does not change. To reset all mappings, close the game, rename the controller file to a backup name, then relaunch so defaults are generated.
Versions covered by this guide
| Project | Source version | Release status and game versions |
|---|---|---|
| ProjectWindowSmash | Source versiona9aac43 |
Release status and game versionsNo formal release; v0.2.0-alpha.1 is a prerelease. 11.0.0 and 13.0.5; 13.0.5 has limited match testing. Mac: opening/menus only. |
| ProjectOpenSmash-Ultimate | Source versioneac10a1 |
Release status and game versionsNo formal release; runtime-c2ca705 is a prerelease. 13.0.4 and 13.0.5 recognised; Linux tested with 13.0.4. |
