Skip to content

Commit c1016ba

Browse files
mherboldclaude
andcommitted
Fix steering sign conventions, rework friction, and add engine RPM vibration
Fix the reversed wheel centering source and soft lock damping (iRacing's steering telemetry is counterclockwise-positive; conventions now documented in CLAUDE.md), and replace the velocity-based friction model with a lead-compensated stick-point model that cannot self-oscillate on the frame-late telemetry. Add an engine RPM vibration generator with V8-style voicing (harmonics, per-firing jitter, 8-firing lope) and a roughness knob, gated on the EngineWarnings stalled flag and driven by the car's redline RPM — now captured in recordings (format v5; bundled recordings migrated) and plumbed through the tick context. Also curve the road texture speed ramp (cube root to 180 MPH), drive the slip texture amplitude from the summed understeer + oversteer effects with a both-disabled notice in the editor, keep gear change vibration from replaying stale shifts on re-enable, fix a shutdown race in the constant force effect update, and adopt the tuned module defaults from the maintainer's test graph. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 2018678 commit c1016ba

56 files changed

Lines changed: 259246 additions & 258454 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CLAUDE.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,12 @@ The post-build step copies several asset folders (sounds, recordings, calibratio
126126

127127
## Architecture & Key Patterns
128128

129+
### Steering / FFB sign conventions (get these right!)
130+
- **iRacing steering telemetry is counterclockwise-positive:** `SteeringWheelAngle` (and `SteeringWheelVelocity`) are **positive when the wheel is turned LEFT**, negative when turned right. The derived `FFBTickContext.WheelPosition` / `WheelVelocity` (angle/velocity normalized to the car's half-lock) inherit this same convention.
131+
- **FFB graph output torque is also counterclockwise-positive:** a positive module output pushes the wheel LEFT.
132+
- **Consequence:** any resisting/restoring force built from these values (friction, damping, centering, soft lock) must **negate** the telemetry-derived term — e.g. the wheel-centering source returns `-position`, and the friction/velocity sources return `-velocity`. Getting this wrong flips a stable centering spring into a runaway force toward the locks (this bug actually shipped once).
133+
- **The old DirectInput axis convention was the opposite** (positive = turned right), so any formula ported from pre-graph fixed-function code that used `DirectInput.ForceFeedbackWheelPosition/Velocity` needs its sign flipped when fed the sim-telemetry-derived values.
134+
129135
### Global Singleton (`App`)
130136
`App` (in `App.xaml.cs`) is the central singleton accessed via `App.Instance!`. It owns and initializes every component. All components call `App.Instance!` to access sibling services. This is the primary way components communicate.
131137

InnoSetup/Recordings/ARCA Ford Mustang @ Atlanta Motor Speedway - Oval (30s).csv

Lines changed: 10827 additions & 10827 deletions
Large diffs are not rendered by default.

InnoSetup/Recordings/FIA F4 @ Mount Panorama Circuit - (149s).csv

Lines changed: 53571 additions & 53571 deletions
Large diffs are not rendered by default.

InnoSetup/Recordings/Formula Vee - Classic @ Circuit de Ledenon - (104s).csv

Lines changed: 37605 additions & 37605 deletions
Large diffs are not rendered by default.

InnoSetup/Recordings/Mazda MX-5 Cup @ Virginia International Raceway - North (105s).csv

Lines changed: 37629 additions & 37629 deletions
Large diffs are not rendered by default.

InnoSetup/Recordings/Porsche 911 Cup (992.2) @ Circuit de Spa-Francorchamps - Grand Prix (152s).csv

Lines changed: 54699 additions & 54699 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)