Ultimate2CFixer

Free and open source · Windows 10 and 11

Ultimate2CFixer

The 8BitDo Ultimate 2C, over Bluetooth, as an Xbox controller.

In Bluetooth mode, Windows sees the 8BitDo Ultimate 2C as a DirectInput device, and many games only look for Xbox (XInput) controllers. Ultimate2CFixer reads the controller and hands its input to Windows as a virtual Xbox 360 gamepad.

MIT license · Windows 10 and 11, 64-bit · one executable, under 400 KB

How it works

Three steps, and a small driver doing the translation in the background.

  1. 1

    Pair the controller

    Connect the 8BitDo Ultimate 2C in Bluetooth mode from Windows' Bluetooth settings.

  2. 2

    Open the app

    Open Ultimate2CFixer.exe. It starts working on its own, and the Start Service and Stop Service buttons are there if you'd rather do it by hand. If a driver is missing, the app offers to install it for you.

  3. 3

    Play

    Games see an Xbox 360 controller that does whatever your Ultimate 2C does. The real one is hidden, so a button press never counts twice.

What it does

A small utility with a few settings, so it can be tuned without getting in the way.

DirectInput to XInput

Reads the controller's DirectInput state, including the right stick on the lZ and lRz axes and both triggers as analog axes, and feeds it to a virtual Xbox 360 gamepad through ViGEmBus.

Max update rate

Pick a top speed of 125, 250, 500 or 1000 Hz. The app only wakes up when the controller has something to say, so an idle controller costs next to nothing.

Stick response curves

Linear (1:1), Smooth Aim (a cubic S-curve) or Aggressive (square root), plus a deadzone of 0, 8, 12 or 20 percent.

Hair trigger

An optional setting that treats any trigger pull beyond the deadzone as a full press.

No double input

Without this, Steam and games would see two controllers and every press would count twice. So while the app is open, only the virtual gamepad is visible. The real controller is hidden with the HidHide driver, and handed back when you close the app.

Live input view

Shows the sticks, the A, B, X and Y buttons, the bumpers and the analog depth of both triggers, so you can see what the controller reports.

Battery level

Reads the battery percentage over Bluetooth Low Energy, with an optional low battery alert.

Tray and small footprint

The _ button tucks the app into the system tray, the X button closes it, and it can start with Windows. The v1.1.0 release notes put the executable at 332 KB and the memory use at about 2 to 5 MB while idle.

Layout and language

A Nintendo layout option swaps A with B and X with Y. The interface comes in English, Turkish or Spanish (the Spanish is a machine translation). Settings are remembered between runs.

Axis mapping

How the 8BitDo Ultimate 2C reports its controls over Bluetooth, and where they end up on the virtual Xbox pad. The right stick is on lZ and lRz, not lRx and lRy.

DirectInputOn the virtual Xbox pad
lX, lYLeft stick
lZ, lRzRight stick
Brake axisLeft trigger, analog
Accelerator axisRight trigger, analog
Buttons 6 and 7Left and right bumper
Buttons 8 and 9Trigger click, only used if the controller doesn't report an analog pull

The trigger axes are reported as HID usages (Brake and Accelerator), and DirectInput's standard layout has no place for them. So the app reads the controller in its own format, picking each control by its HID usage.

Install

You need Windows 10 or 11 (64-bit) and two small drivers, ViGEmBus and HidHide. If they're missing, the app offers to install them.

Download

Get Ultimate2CFixer.exe from the releases page. It is a single file, with nothing to unpack.

Open the releases page

Pair the controller in Windows' Bluetooth settings and open the app. The file isn't code signed yet, so Windows SmartScreen may warn you the first time you run it.

ViGEmBus and HidHide

ViGEmBus creates the virtual gamepad, and HidHide hides the real controller from other programs. If either is missing, the app downloads its installer from the project's GitHub releases and runs it, but only after checking that it's signed by a verified publisher.

ViGEmBus · HidHide

Build from source

You need Visual Studio 2022 with the C++ desktop workload and CMake 3.20 or newer.

git clone https://github.com/bezelye404/Ultimate2CbluetoothFix.git
cd Ultimate2CbluetoothFix
cmake -B build -S .
cmake --build build --config Release

What it touches

Everything the app changes on your PC, in one place.

  • A virtual controller

    While the service runs, Windows has an extra Xbox 360 controller, created through ViGEmBus.

  • The real controller

    While the app is open, HidHide keeps your 8BitDo controller out of sight of other programs. It's handed back when you close the app.

  • The registry

    Your settings live in HKCU\Software\Ultimate2CFixer\Settings. If you turn on start with Windows, a startup entry is added for your user.

  • The network

    The only things it fetches from the internet are the ViGEmBus and HidHide installers, and only when a driver is missing. Battery level comes over Bluetooth, not the network.

Frequently asked questions

Why does the controller need a fix over Bluetooth?

In Bluetooth mode, Windows sees the Ultimate 2C as a DirectInput device, with the right stick on the lZ and lRz axes. Many games only support Xbox (XInput) controllers, so they do not see it. Ultimate2CFixer reads the DirectInput state and passes it on through a virtual Xbox 360 controller.

What is ViGEmBus, and do I have to install it?

ViGEmBus is an open-source driver that lets programs create virtual gamepads, and Ultimate2CFixer needs it. If it is missing, the app offers to download and install it.

What is HidHide, and why does the app hide my controller?

Without it, Steam and games would see two controllers, the real one and the virtual one, and every press would count twice. HidHide is an open-source driver that hides the real controller from other programs. Ultimate2CFixer turns it on whenever it runs (there's no setting for it) and gives the controller back when you close the app. If the driver is missing, the app offers to install it.

Why do I sometimes have to switch the controller off and on?

Some programs, like a browser tab or Steam, may already be holding the controller when the hiding starts, and Windows doesn't tell them anything changed. If you open the app while the controller is already on, it lets you know: turn the controller off and on once, and reload the browser page. If the app starts with Windows, before the controller connects, you won't run into this.

Which versions of Windows work?

Windows 10 and 11, 64-bit.

Does it work with other controllers?

It was written for the 8BitDo Ultimate 2C in Bluetooth mode, and the axis mapping matches that controller. Other controllers are not covered.

Where are my settings stored?

In the registry, under HKCU\Software\Ultimate2CFixer\Settings, for your Windows user only.

What does the hair trigger option do?

It treats any trigger pull beyond the deadzone as a full press, so a light touch registers as 255, the maximum.

Can it start with Windows and stay out of the way?

Yes. There's a start with Windows option, the _ button tucks the app into the system tray, and the X button closes it.

Which languages does the interface have?

English, Turkish and Spanish. The Spanish text is a machine translation.

Is it free?

Yes. It is released under the MIT license and the source code is on GitHub.