- fixed a good amount of bugs, crashes, controller connection/disconnection issues
- added the calibration of the controller with the calibrate button
- added a deadzone and a range setting
- updated to .NET 8
- updated hidapi and packages
- use HidHide instead of the outdated HIDGuardian
- instantly connect and disconnect
- other minor improvements
I only tested the changes with the official pro controller and joycons as I don't have the other controllers to test.
Allows the Nintendo Switch Pro Controller, Joycons, and Switch SNES controller to be used with Cemu using Cemuhook, Citra, Dolphin, Yuzu, and system-wide with generic XInput support.
It also allows using the gyro to control your mouse and remap the special buttons (SL, SR, Capture) to key bindings of your choice.
If anyone would like to donate to the original creator (for whatever reason), you can do so here.
Thank you for using my software and all the constructive feedback I've been getting about it. I started writing this project a while back and have since then learnt a lot more about programming and software development in general. I don't have too much time to work on this project, but I will try to fix bugs when and if they arise. Thank you for your patience in that regard too!
It's been quite a wild ride, with nearly 590k (!!) official download on GitHub and probably many more through the nightlies. I think this project was responsible for both software jobs I landed so far, so I am quite proud of it.
Go to the Releases tab!
- Install drivers
- Read the READMEs (they're there for a reason!)
- Run Drivers/ViGEmBus_1.22.0_x64_x86_arm64.exe
- Run Drivers/HidHide_1.5.212_x64.exe (optional but recommended to hide the default device)
- Restart your computer
- Run BetterJoy.exe
- Run as Administrator if your keyboard/mouse button mappings don't work
- Connect your controllers.
- Start your game or emulator and configure your controller.
- If you use Cemu, ensure CemuHook has the controller selected.
- If using Joycons, CemuHook will detect two controllers - each will give all buttons, but choosing one over the other just chooses preference for which hand to use for gyro controls.
- Go into Input Settings, choose XInput as a source and assign buttons normally.
- If you don't want to do this for some reason, just have one input profile set up with Wii U Gamepad as the controller and enable "Also use for buttons/axes" under GamePad motion source. This is no longer required as of version 3
- Turn rumble up to 70-80% if you want rumble.
- As of version 3, you can use the pro controller and Joycons as normal xbox controllers on your PC - try it with Steam!
Check out the wiki! There, you'll find all sorts of goodness such as the changelog, description of app settings, the FAQ and Problems page, and info on how to make BetterJoy work with Steam better.
- Hold down the small button (sync) on the top of the controller for 5 seconds - this puts the controller into broadcasting mode.
- Search for it in your bluetooth settings and pair normally.
- To disconnect the controller - hold the home button (or capture button) down for 2 seconds (or press the sync button). To reconnect - press any button on your controller.
- Plug the controller into your computer.
- Go into "Bluetooth and other devices settings"
- Under the first category "Mouse, keyboard, & pen", there should be the pro controller.
- Click on it and a "Remove" button will be revealed.
- Press the "Remove" button
- If you didn't already, install Visual Studio Community 2022 via the official guide. When asked about the workloads, select .NET Desktop Development.
- Get the code project via Git or by using the Download ZIP button.
- Open Visual Studio Community and open the solution file (BetterJoy.sln).
- Open the NuGet manager via Tools > NuGet Package Manager > Package Manager Settings.
- You should have a warning mentioning restoring your packages. Click on the Restore button.
- You can now run and build BetterJoy.
- Download Visual Studio Build Tools via the official link.
- Install NuGet by following
the official guide.
You should follow the section for nuget.exe.
Verify that you can run
nuget
from your favourite terminal. - Get the code project via Git or by using the Download ZIP button.
- Open a terminal (cmd, PowerShell, ...) and enter the folder with the source code.
- Restore the NuGet dependencies by running:
nuget restore
- Now build the app with MSBuild:
The available values for CONFIGURATION are Release and Debug. The available values for PLATFORM are x86 and x64 (you want the latter 99.99% of the time).
msbuild .\BetterJoy.sln -p:Configuration=CONFIGURATION -p:Platform=PLATFORM -t:Rebuild
- You have now built the app. See the next section for locating the binaries.
The built binaries are located under
BetterJoy\bin\PLATFORM\CONFIGURATION
where PLATFORM
and CONFIGURATION
are the one provided at build time.
A massive thanks goes out to rajkosto for putting up with 17 emails and replying very quickly to my silly queries. The UDP server is also mostly taken from his ScpToolkit repo.
Also I am very grateful to mfosse for pointing me in the right direction and to Looking-Glass without whom I would not be able to figure anything out. (being honest here - the joycon code is his)
Many thanks to nefarius for his ViGEm project! Apologies and appreciation go out to epigramx, creator of WiimoteHook, for giving me the driver idea and for letting me keep using his installation batch script even though I took it without permission. Thanks go out to MTCKC for inspiration and batch files.
A last thanks goes out to dekuNukem for his documentation, especially on the SPI calibration data and the IMU sensor notes!
Massive thank you to all code contributors!
Icons (modified): "Switch Pro Controller", " Switch Detachable Controller Left", "Switch Detachable Controller Right" icons by Chad Remsing from the Noun Project. Super Nintendo Controller icon by Mark Davis from the the Noun Project; icon modified by Amy Alexander.