(better) Switch pro controller support

Issue #7003 new
Manson Casey created an issue

So bear with me here…there is a wild ADHD laden ride up ahead that while is all over the place, it holds merit.

Ok, so…with that out of the way, onto the issue/feature request.

THE ISSUE(s)

We all can agree that the switch pro controller is an amazing controller but it has pairing issues with windows that is far from optimal in a console-like exp that LB offers. The way around this? The Mayflash Magic-NS in Pro Controller Mode. It syncs instantly every time. It works beautifully when SDL2 support is implemented (like in Yuzu, Cemu, DusckStation, RPCS3, SMBx etc). When it is not being “driven” by SDL2, it sends “phantom” keypresses (check out USB controller properties and you'll see what I mean), which in and of itself is not an issue with any other programs, games and Windoze itself….that is until LB is involved. When LB is running that is when the (real) issues come to the surface. So if I have the dongle plugged in (which is what I really am wanting to do and launch LB, things get freaking cray-zee. The system volume gets lowered to 0 like the volume down button is getting pressed continuously, the left right panel of LB gets hidden, games get launched, I lose control over my mouse, left clicks get sent along with ctrl and shift and directional keys. I know it sounds like a faulty dongle, it is not though. I bought a second (newer version) dongle to test out as well as for my joy-cons but it is the same situation. I know I can set LB to use only my Xbox One/360/s/x controllers but that defeats the ability to use my system with any of my gamepads (more on this later), which is something I proudly tell anyone that has ears about. I also know that I can switch to xinput mode on the dongle, and it works fine for regular games, but I lose motion controls (for cemu and yuzu specifically) and this defeats the purpose of using my switch pro/joy-cons on my system. I know this is a LB specific issue because this issue only arises when I launch LB or have it running in the tray and plug in the dongle. Mind you, I have a total of 42 controllers that are either 1st party (Switch, Wii/Wii U, DS3/4 DualSense, Xbox 360/Xbox One/Series S/X) or reputable 3rd party mfg ie: Hori arcade sticks, 8BitDo, RetroBit and USB controller adaptors (I am a bit of an obsessive controller purist, hence the discovery of this issue) and the Switch Pro Controller is the only one where this issue arises.

POSSIBLE SOLUTION

Well, initially I was going to suggest a Whitelist/Blacklist function to block the switch or any other offending controller, but after the 97 millionth time of trying to explain the situation clearly, I realized that whitelist suggestion is just a band-aid but SDL2 implementation is the REAL fix. The reason for me believing this is as I mentioned above; the controller functions flawlessly in any emu and game that offers SDL2 support without being a PITA the rest of the time. So I would like to propose implementing SDL2 (I suppose I already did that).

BENEFITS TO MY PRPOSAL

Implementing SDL2 will not only solve my issue, it will also fulfill and close many 1st party controller support requests such as the DS3, DS4, DualSense, GameCube etc while making LB even more of a robust and capable frontend. Most importantly, I can leave all of my dongles plugged into my system and it will truly be a console-like experience for everyone.

Thanks for reading this and for your consideration. If you agree with the SDL2 proposal, please vote for this so Jason sees how much it is needed.

Comments (4)

  1. Jack

    I’ll be frank, I didn’t read this entire ticket, but I am here to second the suggestion that implementing SDL2 as the controller driver would be a huge improvement. I’m not sure if this should go in a new ticket “Fully support controllers that use enhanced SDL2 features” (would also capture Issue #6710), but this ticket seems to capture the request well enough, and I’d rather not clutter the backlog.

    Now, to why I second this feature request. Supporting a wider segment of popular controllers is valuable, especially given that the Big Box controller focused interface is the core paid feature. The UX issue is also made worse by the way that many of these controllers (DS4, DS5, Switch Pro) handle mode switching between standard and enhanced input modes which can create some very frustrating and confusing situations such as: my troubleshooting thread, another likely example, and another, etc.

    There’s some additional technical detail in my troubleshooting thread about why exactly this is such a confusing problem, and some ideas about workarounds or other ways to handle it, but ultimately a driver with advanced controller support would be the most complete and stable fix.

  2. Joshua

    I would also like to reignite this issue, I am having the same problems currently with a PS4 controller and would love to have this possible fix implemented.

  3. George

    Just wanted to chime in and reignite this issue. SDL2 supports all the NSO retro controllers (like the SNES, N64, NES and Genesis and 6button Megadrive controllers). These controllers are all easily usable in retroarch using the latest SDL2 (although the SDL2.dll packaged with retroarch is old but replacing with the latest version fixes this)

    Also this PR: https://github.com/libretro/retroarch-joypad-autoconfig/pull/1119 will allow retroarch to automatically detect and map each of these controllers so that, they simply work… without this PR they will work, but one will need to map the buttons to ensure they work as needed in the emulators.. but its not difficult..

    Now onto BIGBOX… the default theme hows A/B buttons for Back/Select (XBOX style) in the bottom right of the GUI… This can be very confusing if someone is using an SNES or N64 controller etc. The buttons can be mapped but the images at the bottom don’t match up.. There is a workaround – by copying the default theme directory and swapping some of the buttons in the themes/images/controller folder to more accurately match the controller you are using → however, this doesnt completely eliminate the confusion if you are using different controllers at different times.

    If launchbox had support for SDL.. Launchbox itself could detect the controller and show the appropriate images. And if multiple controllers are in use in launchbox GUI.. the Gui could change the images to the controller that last pressed a button.. For example, if you use an SNES controller to navigate the GUI, i.e. press left or right, the GUI shows SNES images.. if you then hit left or right on the n64 controller the images can change to correspond to the n64 controller.. etc.

    EDIT: just wanted to say that something like this would also solve: https://bitbucket.org/jasondavidcarr/launchbox/issues/1877/controller-autoconfigs

    EDIT2: just wanted to add also – it looks like if/when SDL3 releases and projects like launchbox eventually upgrade a project like https://github.com/icculus/ControllerImage could make it possible to dynamically change the onscreen help prompts etc. based on the controller being used etc.

    It might be a while before this becomes possible (SDL3 is not even released yet)… but it is interesting.

  4. George

    also multiple controller’s each with their own mapping specification is important… i.e. sometimes i wanna play SNES game.. so I pick up SNES NSO controller.. sometimes I want to play PSX game so I pick up PS4 controller.. it all works in retroarch with their autoconfigs; however, in launchbox, i need to remap the controller everytime I change it since it only supports 1 mapping at a time.

  5. Log in to comment