🏎️ FH6SmartShift (v1.1.1) — Virtual Dyno, Dragy Timer & Shift Telemetry System for Forza Horizon 6 & Forza Motorsport
Author: mtowarek01
Version: v1.1.1 (Dual-Game FH6 & Forza Motorsport Engine, 100% Dyno Map Gate, Dragy Timer, F1 Shift Beep, Tuning Advisor & WPF UI)
FH6SmartShift is an advanced, real-time (60 Hz) C# telemetry plugin for SimHub and a dedicated racing dashboard suite engineered for the Forza Horizon 6 and Forza Motorsport physics engines.
Unlike basic scripts that only average rev-limiter bounce RPM, FH6SmartShift constructs a live 401-band Virtual Dyno (50 RPM resolution up to 20,000 RPM). By capturing raw UDP telemetry from the game — including engine power (Power), torque (Torque), boost pressure (Boost), wheel rotation speeds (WheelRotationSpeed), longitudinal and lateral tire slip (TireSlipRatio, TireSlipAngle), and suspension travel — the plugin autonomously learns transmission gear ratios and calculates the exact mathematical power curve intersection point between consecutive gears (Gears 1–10).
To get a 100% repeatable Virtual Dyno curve, accurate peak torque readings, and verified Gearbox Tuning Advisor recommendations, follow this 2-step calibration method on a flat straight:
During a hard standing launch (0–200 km/h), 1st gear typically experiences heavy wheelspin (which the plugin's traction gate filters out to protect your data), and upshifts into Gears 2–6 land high in the rev range (typically above 4,800–5,500 RPM). As a result, the entire mid-range (2,500–4,800 RPM — where peak torque usually lives) is skipped, leaving the dyno map around 55–65% complete.
- Shift into 3rd or 4th gear while cruising at low RPM (below
2,500 RPM). - Press and hold 100% Wide-Open Throttle (WOT) cleanly all the way to the rev limiter.
- Why this works best: A higher gear loads the engine smoothly without wheelspin, gives turbochargers time to reach 100% boost pressure before hitting the mid-range, and sweeps every single
50 RPMband from2,500 RPMto redline in one continuous pass. - Watch the dashboard badge switch to
DYNO OK 100%. Reaching100%automatically unlocks the verified Virtual Dyno Curve and Automated Gearbox Tuning Advisor insideFH6SmartShift_GarageReport.html.
- Accelerate cleanly through each gear (Gear 1 up to your top gear) for at least
0.35 sper gear without spinning the tires. - As each gear ratio locks, its slot in the dashboard matrix turns Blue
(R). - Once the next gear (
N+1) is locked and the dyno map is populated, the plugin automatically calculates the power curve intersection and turns each gear Green(P)(Mathematical Peak Shift) or Green(L)(Rev-Limiter Optimal Shift).
Every time the plugin saves telemetry data (or when you click 📊 Open Virtual Dyno & Tuning Report (HTML) in the SimHub WPF Settings tab / trigger FH6SmartShift.OpenDynoReport), it generates an interactive standalone browser application in:
C:\Program Files (x86)\SimHub\PluginsData\Common\FH6SmartShift_GarageReport.html
- Top Control Bar (Profile Selector, Custom Naming & Database Sharing):
- Vehicle & Build Dropdown (
carSelect): Switch between all saved profiles across Forza Horizon 6 ([FH]) and Forza Motorsport ([FM]), formatted with Car Name, PI Class, Drivetrain (FWD/RWD/AWD), and Gauge Cluster RPM (e.g.,Car #1006 | PI800 | AWD | Gauge 10000 RPM (1006_PI800_DT2_R10000)). ✏️ Name Car&💾 CarList.json: Because raw Forza UDP telemetry only transmits a numericCarOrdinalID, click✏️ Name Carto assign a custom name to any car or specific tune, and click💾 CarList.jsonto save your dictionary toPluginsData\Common\.📤 Export Car&📥 Import / Merge JSON: Export any single calibrated car build (FH6_CarProfile_<Key>.json) to share with other tuners, or import and merge external.jsonprofiles into your database (💾 Save Merged DB).
- Vehicle & Build Dropdown (
- Engine & Dyno Profile Summary Banner (
📋 Copy Summary):- Displays map completion status (
[DYNO MAP: 100% COMPLETE]), peak power in HP and kW with exact RPM, peak torque in Nm with exact RPM, maximum turbo boost in psi and bar, and detected hidden rev limiters (GhostLimiterRpm) with a one-click📋 Copy Summarybutton:
Example:
Engine & Dyno Profile — Car #1006 (1006_PI800_DT2_R10000): Peak power of 628.8 HP (468.9 kW) at 9000 RPM, peak torque of 583.8 Nm at 6200 RPM, 4.20 psi (~0.29 bar) of boost, and a detected hidden rev limiter (GhostLimiterRpm) at 9481.0 RPM (on an 10000 RPM gauge cluster). - Displays map completion status (
- Dragy Acceleration Telemetry Cards (
Best PB):- Displays saved Personal Best acceleration times calculated via 60 Hz sub-frame linear interpolation:
- ⏱️
0–100 KM/H (BEST PB)— Standing launch telemetry (e.g.,2.25 s). - 🚀
100–200 KM/H (BEST PB)— Rolling or standing mid-range pull (e.g.,4.26 s). - 🏁
0–200 KM/H (BEST PB)— Full standing sprint (e.g.,6.53 s).
- ⏱️
- Displays saved Personal Best acceleration times calculated via 60 Hz sub-frame linear interpolation:
- Complete Gears 1–10 Shift & Ratio Table:
Gear Ratio (RpmPerRadS): Locked mechanical ratio (EngineRPM / WheelRadS, e.g.,138.76in Gear 1 down to28.11in Gear 10).RPM Drop on N+1 Upshift (dropRatio): Ratio step (nextRatio / currentRatio) and percentage RPM drop on upshift (e.g.,0.678 (-32.2%)on1 -> 2, down to close-ratio0.927 (-7.3%)on9 -> 10).Next Gear Landing RPM: Exact engine RPM immediately after upshifting at the target RPM (e.g.,~6376 RPMon1 -> 2,~8734 RPMon9 -> 10).Saved JSON Threshold (Rpm)&Physical Shift Target (OptimalShiftRpm): Raw trigger stored in JSON and the exact unbuffered physical shift target (e.g.,9401 RPMfor limiter-optimal gears1–7&10, and9448 RPM/9423 RPMfor math-peak optimal gears8&9).Dashboard Status: Color-coded calibration badge matching the SimHub dashboard ((P)Math Peak Optimal,(L)Limiter Confirmed,(L?)Edge/Unconfirmed,(P?)Unconfirmed Trigger,(R)Ratio Locked,(-)Unmapped).
- Automated Gearbox Tuning Advisor (100%-Map Gated Telemetry Analysis):
- Once the engine map reaches 100%, automatically evaluates every gear transition (
N -> N+1) against your engine's torque curve, power curve, and boost curve:- ✅
Powerband Alignment: Confirms how many gear transitions land squarely between Peak Torque and Peak Power (e.g.,9 gear transition(s) land squarely inside the optimal power window between Peak Torque (6200 RPM) and Peak Power (9000 RPM)). - 🐌
Turbo Lag Risk: Flags gear transitions where landing RPM drops turbo boost below72%of peak boost (e.g.,Turbo Lag Risk on Gear 1 -> 2: Boost pressure at ~6376 RPM is only 2.1 psi (vs 4.2 psi peak). Shorten Gear 2 to keep the turbo spooled!). ⚠️ Too Wide / Power Drop / Very Close Ratio: Flags overly wide gear steps (landing below90%of Peak Torque RPM or losing> 22%peak power) and overly tight low-gear spacing (dropRatio > 0.895).
- ✅
- Once the engine map reaches 100%, automatically evaluates every gear transition (
- 401-Band Virtual Dyno Curve Canvas (
Power HP & Torque Nm):- Plots smoothed Engine Power (HP, Green) and Engine Torque (Nm, Blue) across the entire RPM range (
1,000–10,000+ RPM) without artificial straight-line bridging across unmapped gaps.
- Plots smoothed Engine Power (HP, Green) and Engine Torque (Nm, Blue) across the entire RPM range (
These foundational systems form the core physics and mathematical engine of FH6SmartShift:
- 📊 401-Band Live Virtual Dyno (
PowerMap,TorqueMap,BoostMap):- Samples engine output at 60 Hz across 401 discrete
50 RPMbands (from0to20,000 RPM) during Wide-Open Throttle (Accel >= 240,> 5000 W). - Uses asymmetric Exponential Moving Average (EMA) filtering to reject transient dips while capturing true peak output, accompanied by a live 20-block coverage indicator (
MapCoverageBar[████████░░░░░░░░░░░░]) and percentage readout (LiveMappingProgress).
- Samples engine output at 60 Hz across 401 discrete
- 🧮 Mathematical Power Curve Intersection Engine (Gears 1–10):
- Evaluates every gear transition (
N -> N+1) by comparing smoothed power in the current gear (pNow) against landing power in the next gear (pNextatr * dropRatio). - Turbo Boost-Drop Compensation: Penalizes
pNextby0.85if upshifting drops boost pressure below70%of current boost, preventing premature shifts into turbo lag. - Automatically classifies each gear in real time: Red
(-)(Unmapped), Blue(R)(Ratio Locked), Orange(L?)(Provisional Ceiling), Yellow(P?)(Unconfirmed Peak), Green(P)(Confirmed Mathematical Peak Intersection), or Green(L)(Confirmed Limiter Optimal).
- Evaluates every gear transition (
- ⚙️ Autonomous Gear Ratio Learning & Auto-Reset on Re-Tuning:
- Computes mechanical ratios (
CurrentEngineRpm / avgWheelSpeed) for AWD, RWD, and FWD drivetrains using a 25-sample circular buffer and interquartile range (IQR) cluster filtering. - Enforces global ratio monotonicity across Gears 1–10 and automatically detects when you change transmission sliders in the tuning menu (
RatioMismatchCount), resetting stale ratios without wiping your engine dyno map.
- Computes mechanical ratios (
- 👻 Hidden Rev Limiter ("Ghost Limiter") Detection & Auto-Unlock:
- Many upgraded or engine-swapped cars in Forza cut fuel/ignition hundreds of RPM before the visual gauge
EngineMaxRpm. - The plugin detects power cuts (
powerRatio < 0.85), sudden RPM deceleration (< -150 RPM/s), or RPM walls near the ceiling, locksGhostLimiterRpmafter 2 confirmed hits, and purges contaminated upper bands (CleanUpContaminatedBands). - If you later upgrade cams/valves and rev past
GhostLimiterRpm + 150 RPMfor0.10 s, it automatically breaks and unlocks the old ceiling (GhostLimiterBreakAccumulator).
- Many upgraded or engine-swapped cars in Forza cut fuel/ignition hundreds of RPM before the visual gauge
- ⚡ Dynamic Driver Reaction-Time Lead Buffer:
- Tracks real-time engine RPM acceleration (
_currentRpmAccelinRPM/s) and triggers the shift light bar ahead of the physical target (ShiftTriggerRpm = realShiftRpm - liveBuffer, scaled up to1500 RPMin Gears 1–2 and600 RPMin Gears 3+) so your physical reaction time lands right on the optimal shift point without hitting the limiter.
- Tracks real-time engine RPM acceleration (
- 🔽 Smart Downshift & Hill-Climb Assistant (
IsDownshiftSafe&IsDownshiftSuggested):- Braking & Chassis Dive Compensation: Calculates safe downshift thresholds (
93%landing multiplier,88%max cap) and dynamically raisesDownshiftTriggerRpmunder braking (up to+600 RPM) and dynamic front-axle dive (DbgChassisDive, up to+250 RPMrelative to a self-calibrating static sag baseline_staticChassisDiveBase). - Hill-Climb / Load Downshift Prompt (
_climbDownshiftActive): Suggests a downshift at WOT when vehicle acceleration stagnates (_speedTrendKmhPerS <= +1.0 km/h/s) and the lower gear provides at least+5%more wheel power (pLand > pNow * 1.05) with safe RPM headroom.
- Braking & Chassis Dive Compensation: Calculates safe downshift thresholds (
- 🛡️ 7-Layer Physics & Surface Contamination Filter (
filtersOk):- Automatically pauses dyno sampling during wheelspin (
tractionOk), airborne wheels (NormalizedSuspensionTravel <= 0.02), puddles (WheelInPuddleDepth > 0.01), rumble strips/kerbs (SurfaceRumble > 0), rear suspension rebound spikes (|ΔSuspensionTravelMetersRear| > 0.08 m), vehicle damage (Damage1/2 > 0.05), clutch/handbrake engagement, and post-shift settle windows (0.25 supshift,0.45 sdownshift,0.15 sclutch).
- Automatically pauses dyno sampling during wheelspin (
- 🏎️ Chassis, Suspension & Traction Warnings:
- Grip Loss (
IsGripLost): Triggers above1.25 Gcombined acceleration or> 0.30driven wheel slip. - Power Oversteer (
PowerOversteerWarning&OversteerSeverity): Alerts RWD/AWD drivers when rear combined tire slip exceeds0.60under throttle (0.0–1.0severity scale). - High-Speed Aero Bottoming (
AeroBottomingWarning): Triggers when any damper hits>= 98%compression above200 km/h, helping tuners dial in ride height and spring stiffness. - Body Slip Angle (
BodySlipAngle) & Top Gear Detection (IsTopGear): Real-time chassis drift angle in degrees and automatic top/overdrive gear identification.
- Grip Loss (
- 💾 Per-Build Profile Persistence, Legacy Migration & Daily Backups:
- Stores independent profiles keyed by
{Ordinal}_PI{PI}_DT{DT}_R{Rpm}(so an A800 RWD build and an S1-900 AWD build of the same car never overwrite each other). - Uses lock-cloned asynchronous background saving (
Task.Run) for zero frame stutter and maintains 3 rolling daily backups (.bak_yyyyMMdd) inPluginsData\Common\.
- Stores independent profiles keyed by
Building on the v1.0 foundation, versions v1.1.0 and v1.1.1 introduce:
- 🏁 Dual-Game Engine (Forza Horizon 6 & Forza Motorsport):
- Automatically detects the active game in SimHub (
[FH6SmartShift.ActiveGameMode]returns"FH6"or"FM"). - Prefixes Forza Motorsport vehicle keys with
FM_to keep Horizon ([FH]) and Motorsport ([FM]) databases cleanly separated, while tightening tire slip gates for track racing in Forza Motorsport.
- Automatically detects the active game in SimHub (
- 🔒 100% Dyno Map Verification Gate & Turbo Spool Filter (v1.1.1):
- Tracks full-range mapping progress from
~2,500–3,000 RPM(min(3000, 0.45 * RpmAtMaxPower)) toactualLimiter - 250 RPM. - Locks the HTML Virtual Dyno chart and Gearbox Tuning Advisor until the map reaches 100% completion (with a
👁️ Toggle Partial Curvebutton for live diagnostics), eliminating fake straight-line bridging across unmapped mid-range RPM bands. - Turbo Spool-Up Protection (
MaxBoost): Rejects low-boost transient samples above2,800 RPM(< 78%peak boost) when a turbocharger is still spooling up after a gear shift, preventing jagged torque spikes, and automatically heals 1–2 band pockets (HealEngineMapPockets).
- Tracks full-range mapping progress from
- 🛡️ Self-Healing Gear Ratio Progression (v1.1.1):
- Enforces a
0.35 spost-upshift stabilization window and a1.2%interquartile spread (10+samples) before locking gear ratios. - Instant Upward Self-Correction: Since wheelspin during acceleration always inflates wheel speed and underestimates
RpmPerRadS, if the plugin later observes a higher mechanical ratio (> +2.5%) under full grip (< 4%slip), it immediately overwrites the slip-contaminated value. - Geometric Progression Sanitizer (
SanitizeGearProgression): Automatically detects and purges any middle gear whose recorded ratio creates an impossible deep drop (< 0.635) followed by an abnormally flat step (> 0.875).
- Enforces a
- 📊 Interactive HTML Garage Inspector & Automated Gearbox Tuning Advisor (
FH6SmartShift_GarageReport.html). - ⏱️ Built-In Sub-Frame "Dragy" Performance Timer (
0–100,100–200,0–200 km/h) with Personal Best persistence. - 🔊 F1 / GT3 Audio Shift Beep (
ToggleShiftBeep— Off by Default):- Optional background audio cue (
2650 Hz,60 ms) triggered the exact instant all 12 LEDs lock atShiftLightFlash(0.40 scooldown, zero frame-time impact). Disabled by default; enable anytime in the SimHub WPF Settings tab or via actionFH6SmartShift.ToggleShiftBeep.
- Optional background audio cue (
- 🏷️ Custom Car & Build Naming (
✏️ Name Car&FH6SmartShift_CarList.json). - 🌐 Single-Car Export (
📤 Export Car) & Database Merge (📥 Import / Merge JSON). - 🖥️ Native SimHub WPF Control Center (
IWPFSettings) with an interactive Driver Reaction-Time Lead Buffer Slider (0.10 s – 0.40 s). - 🎯 Active Gear Delegates (
CurrentGearColor,CurrentGearStatusText), Smooth 12-LED Engine (LedActiveCount1..12) & 3-Color Slide Recovery Bar (▲ DEEPENING,● HOLDING,◄ RECOVERING).
The repository includes both Classic and Optimal MoTeC-Style dashboard layouts (KM/H and MPH variants) scaled cleanly for landscape mobile screens (1334×513 / 980×377) and PC overlays.
- 12-Segment Predictive Shift Light Bar (Top): Scales dynamically to your car's calculated shift point (
ShiftTriggerRpm), including a real-time reaction-time buffer based on RPM acceleration. - Central Gear, Speed & RPM Cluster: High-contrast gear readout flanked by vehicle speed (
KM/HorMPH) and live engine RPM. - Gears 1–10 Calibration Matrix (Right): Real-time per-gear learning status (
(-)Red,(R)Blue,(L?)Orange,(P)/(L)Green). - Live Mapping Progress (
100.0), Clock (18:33),SLIPWarning & Bottom Bar: Essential peripheral indicators at the bottom of the screen.
The updated layout refines visual hierarchy and exposes the v1.1.1 telemetry properties:
- Smooth 12-LED Bar (Zero Skipping): Bound to
[FH6SmartShift.LedActiveCount](1..12) and[FH6SmartShift.ShiftLightFlash]. Lights up all 12 LEDs sequentially (Green 1–4, Yellow 5–8, Red 9–11, Blue/Red 12) with step hysteresis and WOT anti-flicker protection. - Compact Dyno Status Pill & Small Clock (
DYNO OK 100%+18:33): Combines[FH6SmartShift.EngineMapStatus]and[FH6SmartShift.LiveMappingProgress]into a status badge alongside a compact system clock. - Downshift & Hill-Climb Assistant (
▼ DOWN): Bound to[FH6SmartShift.IsDownshiftSuggested]and[FH6SmartShift.IsDownshiftSafe]. Illuminates green to the left of the speed readout during safe braking downshifts or when the hill-climb assistant detects a>= 5%wheel-power gain in the lower gear. - Live Shift Target Pill (
SHIFT @ 7520): Placed directly beneath the liveENGINE RPMreadout, displaying[FH6SmartShift.OptimalShiftRpm]so you always know the exact target RPM for the currently engaged gear. - Multi-Function Warning Pill (
SLIP/OVRST!/BOTTOM!) & 3-Color Slide Recovery System:- Warning Pill: Combines
[FH6SmartShift.IsGripLost](YellowSLIP),[FH6SmartShift.PowerOversteerWarning](RedOVRST!), and[FH6SmartShift.AeroBottomingWarning](BlueBOTTOM!above200 km/h). - 3-Color Slide Recovery Bar: Bound to
SlideSeverity,SlideBarColor,SlideStateText, andBodySlipAngle:- 🔴 Red (
▲ DEEPENING): Slip angle and wheelspin are increasing — ease off the throttle or add counter-steer! - 🟠 Orange (
● HOLDING): Car is maintaining a steady drift/slip angle. - 🟢 Green (
◄ RECOVERING): Slip angle is decreasing and tires are regaining grip — safe to straighten the wheel and apply full throttle!
- 🔴 Red (
- Warning Pill: Combines
- Gears 1–10 Calibration Matrix (
GEAR MATRIX (1–10)) & Active Gear Frame: Cleanly separated two-column matrix on the right side of the screen, plus direct support for[FH6SmartShift.CurrentGearColor]and[FH6SmartShift.CurrentGearStatusText]to highlight the active gear.
| Matrix Label | Color | Hex Code | Actual Condition in C# Code |
|---|---|---|---|
N: (P) |
🟢 Green | #4CAF50 |
Peak Optimal (IsConfirmed && IsMathOptimal): Confirmed power curve intersection with gear N+1 (pNext >= 1.015 * pNow across 5 steps) and active landing zone density >= 78%. |
N: (L) |
🟢 Green | #4CAF50 |
Limiter Confirmed (IsConfirmed && !IsMathOptimal): Confirmed optimal shift right at the true/ghost rev limiter (no intersection before cutoff, or top gear confirmed). |
N: (L?) |
🟠 Orange | #F39C12 |
Edge / Unconfirmed Limit (TriggerIsEdge): Provisional trigger near the mapped ceiling while the engine map is still being populated. |
N: (P?) |
🟡 Yellow | #F1C40F |
Unconfirmed Trigger (PowerPeakCaught && ShiftTriggerRpm > 0): Gear has a saved threshold, awaiting full confirmation. |
N: (R) |
🔵 Blue | #3498DB |
Ratio Locked (RpmPerRadS > 0): Gear ratio learned (>= 10 tight-cluster IQR samples), waiting for gear N+1 ratio or WOT pull to limiter. |
N: (-) |
🔴 Red | #E74C3C |
Unmapped / Paused: Gear has no learned ratio yet, memory was reset, or game is paused/in menu (IsRaceOn == 0). |
├── FH6SmartShift.cs # Full C# source code of the plugin (v1.1.1 - FH6 & FM)
├── FH6SmartShift.csproj # .NET Framework 4.8 (C# 7.3 + WPF) project file
├── FH6SmartShift.dll # Compiled library ready to drop into SimHub
├── FH6SmartShift_GarageReport.html # Interactive Virtual Dyno, Dragy & Tuning Inspector
├── FH6SmartShift — Dyno, Dragy & Gearbox Tuning Inspector.jpg # Annotated Gears 1-10 Table, Dragy & Tuning Advisor screenshot
├── FH6SmartShift — Dyno, Dragy & Gearbox Tuning Inspector 2.jpg # Annotated 401-Band Virtual Dyno Curve screenshot
├── FH6SmartShift_Dashboard_EN.jpg # Annotated classic dashboard infographic
├── FH6SmartShift_Optimal_Layout_v1.1.jpg # Annotated v1.1 MoTeC-style dashboard layout
├── DashTemplates.zip # Classic SimHub dashboards (KM/H & MPH)
├── FH6SmartShift_Optimal.zip # Optimal v1.1 MoTeC-style SimHub dashboard (1334x513)
├── README.md # Online repository documentation (v1.1.1)
└── README.pdf # Printable user manual & technical reference



