RoWheel Bridge
I’m excited to share my first open-source project: RoWheel Bridge. It’s an experimental .NET 9.0 application that bridges DirectInput steering wheel devices to virtual Xbox controllers. This allows for you to implement force feedback support into your driving games.
Feedback is appreciated!
GitHub Repository
Video Tutorial (For RoSim)
The Problem
For a long time, Roblox racing games have lacked proper steering wheel support. Most of us have been stuck with one-sided input handling through controller emulation programs like X360CE, which don’t support force feedback from the game.
How It Works
RoWheel Bridge runs in the background and emulates a virtual Xbox controller that Roblox can recognize. It’s able to read vibration calls through HapticService
and translate them into force feedback effects for your wheel.
Usage
- Run the program as admin for force feedback to work correctly.
- A calibration settings
.json
file is created after your first calibration. It will be used for future startups. Delete it to recalibrate your wheel. - Use the
--debug
or-d
flag to see detailed device detection information.
During calibration, you can skip optional components like the clutch pedal or shift buttons. The program works perfectly with just a steering wheel, throttle, and brake pedal calibrated.
Requirements
- Windows 10/11
- A DirectInput compatible steering wheel/pedal set
- ViGEm Bus Driver: You must install this for the virtual controller to be recognized. Download the latest release here.
Default Input Mapping
Custom input mapping is planned for a future update!
Steering Wheel Input | Xbox Controller Output | Required |
---|---|---|
Steering Wheel | Left Thumbstick X | Yes |
Throttle Pedal | Right Trigger | Yes |
Brake Pedal | Left Trigger | Yes |
Clutch Pedal | Left Thumbstick Y | No |
Shift Up Button | Y Button | No |
Shift Down Button | X Button | No |
Usage Example Code
local force = 0.5 -- Some value between -1 and 1.
-- A value of 0.5 will turn the wheel to the right with half of selected steering wheel's full force
local rightForce = math.max(force,0)
local leftForce = math.min(force,0)
-- Set vibration motors
HapticService:SetMotor(UserInputService:GetLastInputType(),Enum.VibrationMotor.Small,math.abs(leftForce))
HapticService:SetMotor(UserInputService:GetLastInputType(),Enum.VibrationMotor.Large,math.abs(rightForce))
FAQ
“Does this work with X wheel?”
Theoretically yes - this program should work with any shifter/wheelbase/pedal combo.
“How do I make force feedback for my game?”
Read into topics like slip angle/ratio and how they relate to self aligning torque/Mz. The sum of each steered wheel’s alignment torque is proportional to feedback felt in the wheel.
If you don’t know much about vehicle dynamics, a couple people have made useful implementations for A-Chassis.
This program is experimental and obviously not user friendly. I do not condone using it in a full production setting.