gitmyhub

HorizonHaptics

Python ★ 32 updated 16d ago

HorizonHaptics - Forza Horizon 6 DualSense adaptive triggers

A Python app that reads live physics data from Forza Horizon 6 over the network and translates it into realistic trigger resistance and vibration on a PlayStation 5 DualSense controller, including ABS pulses, traction loss, turbo boost, and road texture.

Pythonsetup: moderatecomplexity 2/5

HorizonHaptics is a small Python application that adds realistic trigger resistance and vibration to a PlayStation 5 DualSense controller when playing Forza Horizon 6 on PC. The game already sends out live physics data over the network via a feature called UDP telemetry, and this app reads that data and translates it into trigger effects in real time.

The effects cover a range of driving situations. The throttle trigger (R2) builds resistance based on how hard you are accelerating in G-forces, vibrates when the wheels lose grip, adds extra resistance when a turbo boost is active, and gives a hard jolt on collision. The brake trigger (L2) gets progressively firmer as you press harder, locks up rigidly when the handbrake is pulled, and pulses during ABS activation when wheels are about to lock. Both triggers pick up road surface texture and rumble strips as a background idle effect, and both vibrate briefly on gear changes. Each effect category has its own mode setting (off, resistance only, or full vibration) so you can tailor the feel.

Setting it up involves two steps. First, inside Forza Horizon 6 you go to the HUD and Gameplay settings and turn on Data Out, pointing it at your PC's IP address and port 5300. Second, you run a launcher script (run.sh on Linux or run.bat on Windows) which installs the necessary Python packages automatically and starts the app's graphical settings window. You connect the DualSense controller via USB (Bluetooth also works). From that point the app runs in the background while you play, showing a status indicator when it is successfully receiving game data.

The settings panel lets you tune every aspect of the effects without restarting. You can adjust resistance strength, vibration frequencies, smoothing speed, grip loss thresholds, and per-effect intensity. All settings save automatically. The app requires Python 3.13 or later, which the launcher manages for you, and it works on both Linux and Windows.

Where it fits