diff --git a/CHANGELOG.md b/CHANGELOG.md
index b31ab7f..d93d197 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,17 @@ the contract is "it works on RS50 and G Pro as listed here".
## Unreleased
+**Assetto Corsa Rally takes the SDK route.** The registry listed it as plain
+force feedback with nothing to do, and on a G PRO that gave nothing: with
+raw HID off the game did not see the wheel, and with it on by hand the stock
+Logitech library took the wheel and returned only its own damping
+([#105](../../issues/105)). On a G923 Xbox edition with Logitech's files in
+the prefix and raw HID on, its force feedback and TrueForce were confirmed
+working ([#83](../../issues/83)). The game now gets the same route as
+Assetto Corsa EVO: `logi-launch` turns raw HID on, stages the proxy that
+answers the SDK's rotation question and resets the wheel first, and the
+app's Setup page offers the shim install for it.
+
**Inertia no longer renders the encoder's grain, and the per-class levels
reach past 100.** `FF_INERTIA` was fed the per-tick velocity difference,
which on a quantised encoder is an impulse train: a rim turning smoothly
diff --git a/docs/GAME_SETUP.md b/docs/GAME_SETUP.md
index 6c73cc6..b6ae2f4 100644
--- a/docs/GAME_SETUP.md
+++ b/docs/GAME_SETUP.md
@@ -56,7 +56,7 @@ instead of wrapping it.
| Assetto Corsa (original) | Proton | Native FFB | Turn on simulated TrueForce | Turn on simulated TrueForce |
| Assetto Corsa Competizione | Proton | TrueForce shim | Install the shim
`logi-launch %command%` | Turn on simulated TrueForce
and leave `PROTON_ENABLE_HIDRAW` unset |
| Assetto Corsa EVO (early access) | Proton | TrueForce shim | Install the shim
`logi-launch %command%` | Turn on simulated TrueForce
and leave `PROTON_ENABLE_HIDRAW` unset |
-| Assetto Corsa Rally (early access) * | Proton | Native FFB | Nothing to do | Nothing to do |
+| Assetto Corsa Rally (early access) * | Proton | TrueForce shim | Install the shim
`logi-launch %command%` | Plain force feedback
leave `PROTON_ENABLE_HIDRAW` unset |
| Automobilista 2 | Proton | Native FFB | Turn on simulated TrueForce | Turn on simulated TrueForce |
| BeamNG.drive * | Native Linux | Native FFB | Turn on simulated TrueForce | Turn on simulated TrueForce |
| CarX Drift Racing Online | Proton | Native FFB | Nothing to do | Nothing to do |
@@ -144,5 +144,5 @@ app's Setup page afterwards.
- **verified** (4 titles): confirmed end to end by this project
- **documented** (16 titles): documented by the vendor or a reliable community source
-- **expected** (6 titles): expected to work, not confirmed
-- **unknown** (4 titles): genuinely unknown
+- **expected** (7 titles): expected to work, not confirmed
+- **unknown** (3 titles): genuinely unknown
diff --git a/tools/setup.sh b/tools/setup.sh
index a63112b..90032d8 100755
--- a/tools/setup.sh
+++ b/tools/setup.sh
@@ -72,7 +72,7 @@ TF_PFX_DIR_REL="drive_c/Program Files/Logi/Trueforce"
# their force feedback, so the copy is guarded rather than trusted.
#
# Sims that load Logitech's TrueForce SDK: ACC, AC EVO.
-SDK_SIM_APPIDS="805550 3058630"
+SDK_SIM_APPIDS="805550 3058630 3917090"
# Sims driven through DirectInput, i.e. logi-ffb: rFactor 2, Le Mans Ultimate,
# iRacing, RaceRoom. PROTON_ENABLE_HIDRAW must NOT be set for these.
DINPUT_SIM_APPIDS="365960 2399420 266410 211500"
diff --git a/userspace/logi-wheel/crates/logi-wheel-core/src/games.rs b/userspace/logi-wheel/crates/logi-wheel-core/src/games.rs
index fb7b4ba..7e68074 100644
--- a/userspace/logi-wheel/crates/logi-wheel-core/src/games.rs
+++ b/userspace/logi-wheel/crates/logi-wheel-core/src/games.rs
@@ -494,7 +494,19 @@ impl GameCompat {
if self.linux == Linux::Unsupported {
return self.setup;
}
- if self.ffb == Ffb::TrueForceShim && !caps.sdk_trueforce {
+ if self.ffb == Ffb::TrueForceShim
+ && !caps.sdk_trueforce
+ && self.simulated_tf.live_id().is_none()
+ {
+ // An SDK title with no telemetry: the simulated route below
+ // has nothing to synthesise from, so it must not be offered.
+ "Leave PROTON_ENABLE_HIDRAW unset: on this wheel it costs you \
+ force feedback, and this game publishes no telemetry yet, so \
+ there is no simulated TrueForce to turn on either. Installing \
+ the shim WITH --proxy carries the game's own TrueForce to the \
+ wheel instead (tools/install-tf-shim.sh --proxy). Steam Input \
+ off."
+ } else if self.ffb == Ffb::TrueForceShim && !caps.sdk_trueforce {
// Worded as "not available on this wheel" rather than "this
// wheel has no SDK TrueForce", because it also covers the
// unidentified wheel, about which we know only that we cannot
@@ -826,11 +838,20 @@ logi-tf-sim.",
GameCompat {
name: "Assetto Corsa Rally (early access)",
linux: Linux::Proton,
- ffb: Ffb::NativeEvdev,
- native_trueforce: Support::No,
+ // The same SDK route as Assetto Corsa EVO. Listed as plain force
+ // feedback until 2026-09: with raw HID left off, the game did not
+ // see a G PRO at all, and with it on by hand, the stock library
+ // took the wheel and gave back only its own damping (#105). On a
+ // G923 Xbox edition with Logitech's files in the prefix and raw
+ // HID on, its force feedback and TrueForce were confirmed working
+ // (#83), which is what this route arranges.
+ ffb: Ffb::TrueForceShim,
+ native_trueforce: Support::Yes,
simulated_tf: SimTf::No,
- setup: "Plain force feedback; watch for telemetry as it matures.",
- confidence: Confidence::Unknown,
+ setup: "Install the TrueForce shim once, from the app's Setup page; launch options `logi-launch %command%` (it turns raw HID on, stages the proxy that answers the SDK's rotation question, and resets the wheel first, the same recipe as Assetto Corsa EVO); turn Steam Input off. No telemetry yet, so nothing to feed the lights.",
+ // Confirmed on a G923 Xbox edition (#83); a direct-drive wheel has
+ // not yet been reported on this route.
+ confidence: Confidence::Expected,
},
GameCompat {
name: "Euro Truck Simulator 2",
diff --git a/userspace/logi-wheel/crates/logi-wheel-core/tests/game_setup_doc.rs b/userspace/logi-wheel/crates/logi-wheel-core/tests/game_setup_doc.rs
index 33463af..a2de8e8 100644
--- a/userspace/logi-wheel/crates/logi-wheel-core/tests/game_setup_doc.rs
+++ b/userspace/logi-wheel/crates/logi-wheel-core/tests/game_setup_doc.rs
@@ -46,9 +46,16 @@ fn recipe_cell(g: &GameCompat, caps: WheelCaps) -> String {
// having seen the other column say to set a variable, and needs telling
// that doing so on their wheel is not merely pointless.
if g.ffb == Ffb::TrueForceShim && !caps.sdk_trueforce {
- return "Turn on simulated TrueForce
and leave \
- `PROTON_ENABLE_HIDRAW` unset"
- .to_string();
+ // Simulated TrueForce is only on offer where the game publishes
+ // telemetry to synthesise it from; a title without any has plain
+ // force feedback on this wheel and nothing to add to it.
+ return if g.simulated_tf.live_id().is_some() {
+ "Turn on simulated TrueForce
and leave \
+ `PROTON_ENABLE_HIDRAW` unset"
+ } else {
+ "Plain force feedback
leave `PROTON_ENABLE_HIDRAW` unset"
+ }
+ .to_string();
}
let action = match g.setup_action(caps) {
SetupAction::InstallShim => "Install the shim",