DirectInput-to-XInput remapper and companion utility for the 8BitDo Ultimate 2C controller in Bluetooth mode on Windows.
Overview • Features • Installation & Usage • Hardware Axis Mapping • Building from Source • License
When connected via Bluetooth on Windows, the 8BitDo Ultimate 2C controller communicates via DirectInput rather than XInput. Additionally, the right analog stick is exposed on DirectInput lZ and lRz axes.
Because most modern Windows games expect an XInput device, Ultimate2CFixer reads the DirectInput state from the controller, maps the inputs accordingly, and feeds them into a virtual Xbox 360 controller using ViGEmBus.
- DirectInput to XInput Translation: Maps Left Stick (
lX,lY), Right Stick (lZ,lRz), triggers, and buttons to a virtual Xbox 360 gamepad. - Configurable Polling Rate: Update intervals of 125 Hz (8 ms), 250 Hz (4 ms), 500 Hz (2 ms), and 1000 Hz (1 ms).
- Stick Response Curves: Linear (1:1), Smooth Aim (cubic S-curve), and Aggressive (square-root).
- Optional Hair Trigger: User-configurable toggle that maps any trigger pull beyond the deadzone directly to full activation (255).
- Live Input Telemetry: Visual indicators for analog sticks, ABXY layout, LB/RB bumpers, and LT/RT analog triggers.
- Battery Status: Reads battery percentage via Windows WinRT Bluetooth Low Energy (BLE) GATT service.
- System Tray & Resource Trimming: Flushes physical working set memory when minimized to the system tray.
- Settings Persistence: Saves user preferences to the Windows Registry (
HKCU\Software\Ultimate2CFixer\Settings). - Localization: English and Turkish interface support.
- Windows 10 / 11 (64-bit)
- ViGEmBus driver (the application prompts to install this if not detected)
- Download
Ultimate2CFixer.exefrom the Releases page. - Pair the 8BitDo Ultimate 2C controller via Windows Bluetooth settings.
- Open
Ultimate2CFixer.exeand click Start Service.
DirectInput DIJOYSTATE2 axis layout for the 8BitDo Ultimate 2C in Bluetooth mode:
┌────────────────────────────────────────────────────────┐
│ 8BitDo Ultimate 2C (Bluetooth) │
├──────────────────────┬─────────────────────────────────┤
│ DirectInput Field │ Gamepad Control │
├──────────────────────┼─────────────────────────────────┤
│ state.lX │ Left Stick (Horizontal) │
│ state.lY │ Left Stick (Vertical) │
│ state.lZ │ Right Stick (Horizontal) │
│ state.lRz │ Right Stick (Vertical) │
│ state.rglSlider[0] │ Left Trigger (LT) Analog Depth │
│ state.rglSlider[1] │ Right Trigger (RT) Analog Depth │
│ state.rgbButtons[6] │ Left Bumper (LB) │
│ state.rgbButtons[7] │ Right Bumper (RB) │
│ state.rgbButtons[8] │ Left Trigger (LT) Digital Click │
│ state.rgbButtons[9] │ Right Trigger (RT) Digital Click│
└──────────────────────┴─────────────────────────────────┘
Note
The Right Stick is mapped to lZ and lRz, not lRx/lRy.
- Windows 10 / 11 (64-bit)
- Visual Studio 2022 with C++ desktop workload
- CMake 3.20 or newer
# Clone the repository
git clone https://github.com/bezelye404/Ultimate2CbluetoothFix.git
cd Ultimate2CbluetoothFix
# Configure
cmake -B build -S .
# Build Release executable
cmake --build build --config ReleaseThe compiled binary will be placed at:
build/Release/Ultimate2CFixer.exe
This project is licensed under the MIT License - see the LICENSE file for details.
- ViGEmBus by Benjamin Höglinger-Stelzer (Nefarius).