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.
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.
There is no dedicated Home/Logo button on the vsFIGTHTER, but you can activate it via the SELECT + START + UP
button combination.
To change the input mode, hold one of the following buttons as the controller is plugged in:
SELECT
for Nintendo SwitchSTART
for XInput
Input mode is saved across power cycles.
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.
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.
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% |
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.bat
file 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.
- Fixed Switch LS/RS Y-axes being inverted
- Should load reasonable default if invalid values are retrieved from EEPROM
- Fixed Up Priority (Hitbox) SOCD behavior
- Fixed mode activators (
Select + Start
andLS + RS
) not registering inputs when pressed without selecting a mode - Slight latency reduction
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