Repository navigation
Controls
| Key | Switch button | In a race |
|---|---|---|
| W A S D | left stick | steer |
| Arrow keys, mouse | right stick | camera (MOUSE_SENS) |
| Space, Enter, E | A | accelerate; confirm in menus |
| Left Shift, Backspace | B | brake, reverse; back in menus |
| V | X | rear view |
| Left click | Y | world map (free roam) |
| F, X, R | ZR / R | hop, drift, charge jump, trick |
| Q, Z, right click | L / ZL | use an item |
| 1 2 3 4 | D-pad left, up, right, down | down rewinds; all move in menus |
| Tab | + | pause; the LAN host starts the race with it |
| M | − | photo mode |
| Left Ctrl, C | stick clicks |
The keyboard is always player 1.
| Key | |
|---|---|
| F1 (or − and + held together on a controller) | open or close the settings menu; L/R or Q/E switch tabs |
| Esc | open or close the menu, release the mouse (click the window to capture it again) |
| F10 (or both stick clicks) | performance overlay: off, fps, full |
| F11 | fullscreen on or off |
| F2 | turbo, if TURBO is on |
| F3 / F4 | freeze / one frame, if FREEZE_KEYS = 1
|
F1 → Controls → Buttons: a row per action with Key 1, Key 2 and Controller. Select a cell, press A or Enter, then the new key, mouse button or controller button (Esc cancels, it also gives up after 5 s). Delete or X clears a cell. A key already in use moves to the new action; a controller button swaps with the one it replaces. Reset all buttons restores the defaults. F1, F8, F10, F11 and Esc cannot be bound.
By hand in mkw.ini: BIND_<ACTION> = key:<name>, pad:<name>, for example BIND_ZR = key:f, pad:zr.
key:default, pad:default and none also work; stick directions take keys only.
- Actions:
A B X Y L R ZL ZR PLUS MINUS LEFT UP RIGHT DOWN LCLICK RCLICK,LSTICK_LEFT/UP/RIGHT/DOWN,RSTICK_LEFT/UP/RIGHT/DOWN. - Pad names:
south east west north l r zl zr lstick rstick start back dpad_left dpad_up dpad_right dpad_down. - Key names:
a–z,0–9,space tab enter backspace lshift rshift lctrl rctrl lalt capslock up down left right insert delete home end pageup pagedown f2–f7 f9 f12 num0–num9 minus equals comma period slash…, mousemouse_l mouse_r mouse_m mouse_x1 mouse_x2.
Any controller SDL 3 knows works (Xbox, PlayStation, Switch Pro, 8BitDo, Steam Deck …). Buttons go by position:
PAD_LAYOUT = nintendo puts A on the right face button, xbox on the bottom one; auto picks by the controller's
labels. Gyro steering, rumble strength and curve, trigger rumble and the stick dead zone are in F1 → Controls.
If an Xbox Elite controller sends every stick move twice, turn Steam Input off for it, or set
SDL_JOYSTICK_HIDAPI_XBOX_ONE=0.
-
Bluetooth: turn on F1 → Controls → Switch 2 controllers (Bluetooth) (
SWITCH2 = 1), restart, then hold the controller's Sync button with the game open. Gyro and rumble work. If nothing happens, setSWITCH2 = 2: the log lists every Bluetooth device it sees. Windows' Bluetooth stack tops out at about 60–70 reports a second. -
USB-C on Linux: needs the system's
libusb-1.0and udev permissions (Steam's rules give them). -
USB-C on Windows: install the WinUSB driver once with Zadig on Interface 1 of USB
ID
057E 2069(Pro Controller 2; Joy-Con2066/2067, GameCube2073), not Interface 0. See the README's "Switch 2 controllers over USB on Windows".
Rumble is two standard motors, not HD Rumble 2's waveforms.
Each player needs a controller of their own, connected before you choose 2, 3 or 4 players. The keyboard only
counts for player 1, so one controller plus the keyboard is one player: the game asks for more controllers and goes
back to the title (the log says hid: controller applet asks for 2-2 players, 1 with a controller). From v0.1.9 the
screen says how many controllers are missing.
Two players run at 60 fps; three and four players run at 30, like the console.
Something wrong or missing here? Say so in Discussions. mkw-recomp is not affiliated with Nintendo.