Gamepad Controls From https://github.com/zturtleman/spearmint/wiki/Gamepad-Controls ---------------- In Spearmint, gamepads have mappings from joystick events to virtual bindable keys. If the device mapping is missing or the virtual keys are not bound to actions, the gamepad will not be usable in game. Spearmint will automatically set the controller mapping if there is one built into SDL2 or in the gamecontrollerdb.txt file in the Spearmint binary downloads. Otherwise you need to manually configure the mapping in the console. In the future, there will probably be a way to do from the UI. In any case, you will need to bind the gamepad to actions in the controls menu. Joystick mappings are device specific so if you have multiple of the same controller for splitscreen you only need to configure the mapping once. Manual joystick mappings are saved in the root of the home directory or in the settings directory in the Spearmint binary downloads. They are not cross-platform so the platform is in the filename. joy-(platform)-(device GUID).txt ## Joystick Event Strings Joystick event string format used by various commands and in saved mappings. * `button0` / `b0` refers to button 0. * `hat0.2` / `h0.2` refers to hat 0 with mask 1. UP is mask 1. RIGHT is mask 2. DOWN is mask 4. LEFT is mask 8. * `+axis0` / `+a0` refers to positive values of axis 0. * `-axis0` / `-a0` refers to negative values of axis 0. 0 to 15 are supported for button, hat, and axis. The separation of positive and negative axis allows binding left(ex: -axis0)/right(ex: +axis0) and up(ex: -axis1)/down(ex: +axis1) of a joystick. Not to be confused to +moveup and -moveup for down and up key events. ## Cvars * `in_joystickDebug 1`. This causes a message to be printed in the console showing joystick event each time you move an axis in a new direction or press a button. ## Commands * `joyremaplist`. This shows the device name and event to key mappings. * `joyremap ` Adds/replaces an event to key mapping. Where `` is the `button0` etc from in_joystickDebug messages and `` is JOY_ (use tab to complete key names). * `joyunmap ` Remove an event to key mapping. where `` is the 'button0' etc from in_joystickDebug messages. * `joyunmapall` Remove all event to key mappings. Additional players use 2, 3, or 4 before the command name (e.g., 2joyremaplist, 2joyremap). Multiple events can point to the same key. A single event cannot point to multiple keys. ## How to manually configure Using the console set `in_joystickDebug 1`. That way each time you move an axis or press a button it is shown in the console. In the console use `joyremap ` where `` is the 'button0' etc from in_joystickDebug messages and `` is JOY_*. You can type JOY_ and then press TAB to see a list of keys. For player 2, 3, 4, use 2joyremap, 3joyremap, 4joyremap. However, joystick mappings are device specific so if you have multiple of the same controller you only need to configure it once. After device mappings are set **you'll need to** using the controls menu and **bind the gamepad to actions**. To bind gamepad buttons/sticks/triggers you just have to press them, the same as keyboard and mouse buttons. It it doesn't work, check if you configure it correctly. Set `in_joystickDebug 1` press the button/axis again and run `joyremaplist` command and look if it's on the list. If it's not on the list add it using `joyremap`. It may seem weird to have to set up controls *twice* (mappings and binds). This will hopefully be dealt with later, by adding default joystick binds. ## Virtual Keys Full list of virtual joystick keys. ``` JOY_A // selects in UI JOY_B // goes back in UI JOY_X JOY_Y JOY_BACK JOY_GUIDE JOY_START // D-Pad movement directions JOY_DPAD_UP JOY_DPAD_RIGHT JOY_DPAD_DOWN JOY_DPAD_LEFT JOY_LEFTSHOULDER // upper left button JOY_RIGHTSHOULDER JOY_LEFTTRIGGER // lower left button JOY_RIGHTTRIGGER JOY_LEFTSTICK // press down on left stick JOY_RIGHTSTICK // joystick movement directions JOY_LEFTSTICK_UP JOY_LEFTSTICK_RIGHT JOY_LEFTSTICK_DOWN JOY_LEFTSTICK_LEFT JOY_RIGHTSTICK_UP JOY_RIGHTSTICK_RIGHT JOY_RIGHTSTICK_DOWN JOY_RIGHTSTICK_LEFT ```