vsFIGHTER-Firmware
vsFIGHTER-Firmware copied to clipboard
Firmware for the vsFIGHTER controller by Leaf Cutter Labs , supporting XInput and Nintendo Switch.
vsFIGHTER Firmware
Firmware for the vsFIGHTER by Leaf Cutter Labs supporting XInput (PC, Android, Raspberry Pi, etc.) and Nintendo Switch. Works with both the standard and Hitbox variants of the vsFIGHTER.
Usage

The vsFIGHTER uses a standard 8-button fightstick layout with 4 additional tact switches for the auxiliary buttons. Here is a button mapping table for the supported input modes:
| Generic | XInput | Switch |
|---|---|---|
| P1 | X | Y |
| P2 | Y | X |
| P3 | RB | R |
| P4 | LB | L |
| K1 | A | B |
| K2 | B | A |
| K3 | RT | ZR |
| K4 | LT | ZL |
| LS | LS | LS |
| RS | RS | RS |
| Select | Back | - |
| Start | Start | + |
Any references to these buttons will use the Generic labels in this documentation.
Home Button
There is no dedicated Home/Logo button on the vsFIGTHTER, but you can activate it via the SELECT + START + UP button combination.
Input Modes
To change the input mode, hold one of the following buttons as the controller is plugged in:
SELECTfor Nintendo SwitchSTARTfor XInput
Input mode is saved across power cycles.
D-Pad Modes
You can switch between the 3 modes for the D-Pad while the controller is in use by pressing one of the following combinations:
SELECT + START + DOWN- D-PadSELECT + START + LEFT- Emulate Left Analog stickSELECT + START + RIGHT- Emulate Right Analog stick
D-Pad mode is saved across power cycles.
SOCD Modes
Simultaneous Opposite Cardinal Direction (SOCD) cleaning will ensure the controller doesn't send invalid directional inputs to the computer/console, like Left + Right at the same time. There are 3 modes to choose from while the controller is in use by pressing one of the following combinations:
LS + RS + UP- Up Priority mode: Up + Down = Up, Left + Right = Neutral (Hitbox behavior)LS + RS + DOWN- Neutral mode: Up + Down = Neutral, Left + Right = NeutralLS + RS + LEFT- Last Input Priority (Last Win): Hold Up then hold Down = Down, then release and re-press Up = Up. Applies to both axes.
SOCD mode is saved across power cycles.
Performance
Input latency is tested using the methodology outlined at WydD's outstanding inputlag.science website, using the default 1000Hz (1ms) polling rate in the firmware.
| XInput Mode | Up Priority SOCD | Neutral SOCD | Last Win SOCD |
|---|---|---|---|
| polling | 1 ms | 1 ms | 1 ms |
| min | 0.56 ms | 0.56 ms | 0.56 ms |
| max | 1.65 ms | 1.59 ms | 1.65 ms |
| avg | 0.96 ms | 0.94 ms | 0.93 ms |
| stdev | 0.28 ms | 0.27 ms | 0.28 ms |
| % on time | 95.26% | 95.38% | 95.46% |
| %1f skip | 4.74% | 4.62% | 4.54% |
| %2f skip | 0% | 0% | 0% |
Installation
NOTE: Any saved modes/options may be cleared when reflashing the controller!
An update package is provided that uses PowerShell and a bundled version of avrdude to handle flashing the microcontroller. If you're familiar with this process or on Linux/Mac, you can just extract the .hex file and flash it manually.
Using the Update Script:
Follow these steps to update your firmware:
- Download and extract the latest firmware update package from Releases.
- Press the reset button twice quickly on the bottom of your vsFIGHTER. You'll need a small screwdriver or toothpick to press it. This will put the microcontroller into bootloader mode for about 10 seconds.
- Run the
update.batfile from the extracted firmware update folder. Make sure you do this within a few seconds of resetting the board otherwise it will fail.
Manual Installation:
You will need avrdude for your platform and the COM port of your board when in bootloader mode. Run the following command, replacing $port with your COM port (COM10 for example). Have this command ready and run it right after resetting into bootloader mode with the double press:
avrdude -v -Cavrdude.conf -patmega32u4 -cavr109 -P $port -b57600 -D -Uflash:w:vsFIGHTER-Firmware.hex:i
If the firmware filename is different, make sure to update it before running the command...and that's it! If all went well you should see a success message at the end like avrdude.exe: 15206 bytes of flash verified and avrdude.exe done. Thank you. If you have issues, try running through the steps again or opening an issue.
Changelog
v1.0.2
- Fixed Switch LS/RS Y-axes being inverted
- Should load reasonable default if invalid values are retrieved from EEPROM
v1.0.1
- Fixed Up Priority (Hitbox) SOCD behavior
- Fixed mode activators (
Select + StartandLS + RS) not registering inputs when pressed without selecting a mode - Slight latency reduction
v1.0.0
Initial release supporting the following:
- XInput (PC, Android, RPi, etc.) and Nintendo Switch input modes
- D-Pad mode selection for emulation of Left or Right analog stick
- Supports 3 SOCD cleaning methods
- Options are saved to EEPROM and persist across power cycles
- 1000 Hz (1ms) polling rate on PC platforms