-
Notifications
You must be signed in to change notification settings - Fork 5
Simulated TrueForce
TrueForce is normally fed by the game itself through Logitech's SDK (see
Force Feedback in Games). For titles with no native TrueForce, this
project ships logi-tf-sim: a small background daemon that synthesizes
engine haptics from the game's own UDP telemetry and plays them through the
wheel's real TrueForce audio path. The same telemetry drives the wheel's
rev-light strip as a live RPM display.
An engine note through the wheel rim: a fundamental tone at the engine's firing rate plus harmonics, louder with throttle, present at idle, silent when the engine is off. The rev LEDs fill with RPM (on the RS50 using your active LIGHTSYNC slot's colors and direction; on a real G PRO rim the onboard profile owns the colors).
Any game that speaks one of these UDP telemetry formats:
| Format | Default port | Games |
|---|---|---|
| Codemasters / EA float array | 20777 | DiRT Rally 2.0 and the classic Codemasters format titles |
| Project CARS 2 | 5606 | Project CARS 2, Automobilista 2 |
The daemon listens passively and auto-detects the game from the packet format; both ports are configurable.
- Open the Setup page in logi-dd-gui or logi-dd ([[Configuring the Wheel]]) and find the Simulated TrueForce panel: master switch, daemon start/stop, and a per-game list with individual enables and intensities.
- Switch on the game's own UDP telemetry setting. Examples:
-
DiRT Rally 2.0:
hardware_settings_config.xml, set<udp enabled="true" ...>(the stock port 20777 is the default here too). - Automobilista 2 / Project CARS 2: System settings, UDP frequency to a nonzero value, protocol "Project CARS 2".
-
DiRT Rally 2.0:
- Race. The daemon idles silently until telemetry arrives and stops when it goes quiet.
Configuration lives in ~/.config/logi-dd/tf-sim.conf (plain key=value;
the Setup page edits it for you):
| Key | Meaning | Default |
|---|---|---|
enabled |
master switch | on |
intensity |
master intensity, 0-100 | 60 |
pitch |
felt rev rate, 10-200 percent. 100 puts the fundamental at the crank rate (rpm/60 Hz); lower feels like a slower, heavier engine | 50 |
leds |
drive the rev-light display from telemetry RPM | on |
port.codemasters, port.pcars
|
UDP listen ports | 20777 / 5606 |
game.<id>.enabled, game.<id>.intensity
|
per-game override, applied on top of the master | on / 100 |
Intensity is master x per-game, so you can set a global comfort level and trim individual games. Pitch is the one to play with if the engine feel reads too frantic or too lazy: it scales the fundamental frequency without touching amplitude.
The Setup page (and logi-tf-sim --sweep from a terminal) offers a
consent-gated test sweep: a synthetic RPM run-up so you can feel the effect
and calibrate intensity with no game running. Hold the rim first; it is a
direct-drive wheel.
- Simulated TrueForce and native-TrueForce games do not fight: the daemon only plays while its telemetry flows, and SDK games stream their own TrueForce directly.
- The rev-LED feeder paces itself (writes at most every ~160 ms and only on a level change) because faster bursts would starve the wheel's shared command processor; see Simulated TrueForce Internals for why.
- The daemon streams through libtrueforce, the project's native C implementation of the TrueForce SDK.
For how it works inside (parsers, synthesis, the watchdog loop), see Simulated TrueForce Internals.