protonscr

Hitbox controllers using Brook Universal Fighting Board do not properly send down inputs in some specific cases

protonclosed
ValveSoftware/Proton#4787 · opened 2021-04-30 by andrewdbanks · updated 2021-06-18 · 1 comments · github
Aandrewdbanks 2021-04-30 github

Description

A hitbox controller, or a stickless arcade stick, is a popular controller type for fighting games that replaces the 8-way stick with 4 buttons. In order to be tournament legal, it needs to do something called Simultaneous Opposite Cardinal Directions (SOCD) cleaning. Hitting both left and right cancels out to be neutral (neither left nor right), and hitting up and down results in just "up", which is done this way to make jumping in a fighting game easier when you're starting from a crouched position. It's with this up/down SOCD cleaning that the problem exists.

A common example is Guile's Flash Kick in Street Fighter. You hold down for about a second, then press up and kick at the same time. On a hitbox, you never have to let go of down and back to make this work. If you tap up and kick, you'll get the flash kick, and you're supposed to land with your character in a crouching position. Instead, when done through Proton, the game won't send a down input again until you let go of the down button and hold it again. Is this a major issue? No. But for competitively-minded players, it can create strange inconsistencies and misinputs in a genre where players want every advantage to such a degree that they build their own controllers. Also, I have no idea how the input code in Proton works, but my OS is reading the input correctly, so it should definitely be solvable. I've confirmed via KDE's Joystick settings display that the down input is still being sent, and I've confirmed via the Linux-native Skullgirls that a proper Linux fighting game is getting the down input like it's supposed to.

System Specifications

Kubuntu 18.04 LTS kernel 5.4.45
Intel Core-i7 5820k
Nvidia GeForce GTX 1080 8GB VRAM, driver 460.73.01
16 GB RAM
Proton 6.3-2 and 5.13-6

Steps to Reproduce

You'll need a hitbox controller. Mine specifically is a custom build using a Brook Universal Fighting board. I don't know if this will reproduce the issue on the Hitbox brand controller or on another custom controller board. I've also tested this on three different Proton fighting games:

  • Guilty Gear XX Accent Core +R
  • Street Fighter 30th Anniversary Collection (Super Street Fighter II Turbo)
  • Street Fighter V

Once you've got the controller and the game:

  1. Boot the game up and find the training mode. Pick any character. I used Axl in Guilty Gear and Guile in Street Fighter.
  2. Go into the options and ensure that the input display is turned on, so you can see on screen which directions the game is reading.
  3. Hold down-back, which should be two buttons, down and back.
  4. Without letting go of those two buttons, tap the up button. Your character should jump and then land again.

Expected: When the character lands, they are crouch blocking.
Actual: When the character lands, the game no longer sends a down input, and the character is walking backwards.

Aandrewdbanks 2021-06-18 github

This appears to be fixed in Proton 6.3-4, in both Guilty Gear XX Accent Core +R and in the new Guilty Gear Strive.

Proton versions