Releases: Rendresen/ChicanePusherLab
Release list
ChicanePusherLab v1.0.85
Multiplayer / dedicated-server stability fix (recommended for all servers).
The pusher-thrust follower runs on every aircraft in the scene (local, AI and remote). Its force step previously ran on aircraft this peer does not simulate, and without a non-finite-value guard — so on a dedicated server a single bad thrust value could corrupt the shared physics solver and fling every object in the world out of position.
Fixed: pusher force is now applied only by the peer that actually simulates the aircraft (host/server still drives AI normally), every physics input is finite-checked, and thrust magnitude is capped. The local aircraft, single-player and host-side AI are unaffected. No config changes.
Also includes the lateral-trim and handling refinements since the previous release.
ChicanePusherLab v1.0.84
ChicanePusherLab v1.0.84
Lateral trim — hands-free
-
The closed-loop lateral trim now nulls your sideways drift directly, so it trims out the Chicane's lateral creep while you fly wings-level and hands-off — no held counter-bank needed. New
[ChicanePusherThrust] LateralTrimLoopUseLateralVelocity(default on); set false to revert to the previous track-rate loop. Tuning:LateralTrimLoopVelKi(flip its sign if it ever pulls the wrong way). -
Open-loop feedforward default retuned to 170 (
LateralTrimForceNPerMps).
v1.0.72–73 — AI / remote pusher flag guard
Defensive write of AutopilotHelo.compoundHelo = true on the Chicane at spawn, so AI and remote-player Chicanes get the game autopilot's speed-seeking pusher command (and actually use the pusher). Cfg-gated via EnableAICompoundFlag (default true).
v1.0.74 — Force Flight Assist
New [FlightAssist] ForceFlightAssistAlwaysOn (default on): the Chicane keeps its flight stability / FBW active even when you toggle Auto Thrust off. Previously the two shared one flag, so turning Auto Thrust off also dropped your stability. Set false to restore the old coupling.
v1.0.76 — Live blade-model toggle
New [MainRotorVisual] EnableIbisBladeSwap (default on): switch live, no restart, between the thick 3D Ibis blades and the native Chicane blades.
v1.0.79 — Rotor donor handedness → clean toggle
New [MainRotorVisual] UseUpperRotorDonor (Upper/Lower, default Upper = correct handedness). Removed the old text-match donor selection (IbisRotorSearchTerms / IbisRotorMeshExcludeTerms / IbisRotorDonorPathContains).
v1.0.77–82 — Blade hub-rotation (experimental) + perf
Added [MainRotorVisual] IbisBladeHubRotationDeg, a WIP cosmetic slider to rotate the blade visual — currently non-functional, ships inert at 0. Reworked to be fully event-driven so it has zero per-frame cost when unused. (v1.0.82 = the perf-clean public release.)
v1.0.83–84 — Hands-free lateral trim
The closed-loop lateral trim now nulls your sideways drift directly instead of track-rate, so it trims out the Chicane's lateral creep while you fly wings-level and hands-off — no held counter-bank. New [ChicanePusherThrust] LateralTrimLoopUseLateralVelocity (default on; false reverts to the old track-rate loop) and LateralTrimLoopVelKi. Open-loop feedforward default retuned to 170 (LateralTrimForceNPerMps).
Existing configs are preserved; fresh installs get the tuned defaults.
ChicanePusherLab v1.0.82
ChicanePusherLab v1.0.82
Main rotor blades
- The spinning rotor now uses the correctly-handed (upper) UH-90 blade by default. New
[MainRotorVisual] UseUpperRotorDonortoggle (Upper/Lower) to flip it. - New
[MainRotorVisual] EnableIbisBladeSwaptoggle: switch live (no restart) between the thick 3D Ibis blades and the native chicane blades. - Replaced the old text-based donor selection (search/exclude/path-contains) with the clean Upper/Lower toggle.
Handling
[FlightAssist] ForceFlightAssistAlwaysOn(default on): the chicane keeps its flight stability/FBW active even when you toggle Auto Thrust off (previously, turning Auto Thrust off also dropped flight assist). Set false to restore the old coupling.
Plus accumulated fixes since v1.0.71.
ChicanePusherLab v1.0.81
ChicanePusherLab v1.0.81
Main rotor blades
- The spinning rotor now uses the correctly-handed (upper) UH-90 blade by default. New
[MainRotorVisual] UseUpperRotorDonortoggle (Upper/Lower) to flip it. - New
[MainRotorVisual] EnableIbisBladeSwaptoggle: switch live (no restart) between the thick 3D Ibis blades and the native chicane blades. - Replaced the old text-based donor selection (search/exclude/path-contains) with the clean Upper/Lower toggle.
Handling
[FlightAssist] ForceFlightAssistAlwaysOn(default on): the chicane keeps its flight stability/FBW active even when you toggle Auto Thrust off (previously, turning Auto Thrust off also dropped flight assist). Set false to restore the old coupling.
Plus accumulated fixes since v1.0.71.
ChicanePusherLab v1.0.71
The Chicane's slow uncommanded right-drift at speed is now trimmed out automatically — across the whole flight envelope, every loadout, hands off the stick.
New — automatic lateral trim
Tracks straight hands-off. A new lateral-trim controller watches how your velocity vector is rotating and bleeds the residual creep to zero. Engages from 100 kph. Works across speed, weight, air density, and the Mach governor's rotor slowdown — no per-loadout cfg tuning needed.
Stable through loadout changes. Dropping ordnance or burning down fuel doesn't kick the trim; the controller absorbs weight changes (including a full winged release) without a lurch.
Stays out of your way. Freezes during deliberate turns (bank > 6° or track-rate > 6°/s) and holds when you're already straight (deadband < 0.1°/s). Never fights your inputs.
Diagnostics are off by default — silent release build. (Set [Diagnostics] EnableDiagnostics=true in the config if you want F8 dumps for tuning or a field report.)
Install
Drop ChicanePusherLab.dll into BepInEx/plugins/ChicanePusherLab/, or let NOMNOM auto-update. Existing configs are preserved.
ChicanePusherLab v1.0.63
ChicanePusherLab v1.0.63 — performance hotfix
- Fixed a per-frame GC allocation that caused stutter in helicopter-heavy missions: the per-aircraft identity check allocated two strings on every call and ran for every helo every physics tick (via the rotor power-clamp and the optional yaw auto-center). Now cached per aircraft → allocation-free after first sight. Solo play was unaffected; busy missions should run smoothly.
- Behaviour unchanged. Includes everything from v1.0.62 (flight-tuned baked defaults + the rotor/pusher feature suite).
ChicanePusherLab v1.0.62
ChicanePusherLab v1.0.62 — flight-tuned release
- Defaults now baked to the dialed-in tuning: pusher power (2.4/1.8 MW) & thrust curve (36/34/28 kN), blade angles 60/-30, Blade tip Mach target 0.93, rotor-fade band 500/0.75, nacelle & blur-disc trim, overspeed 510 kph, lateral trim.
- Rotor Mach governor (ON by default): holds advancing blade-tip Mach across the envelope — rotor spins down at speed so the tip stays subsonic, hover RPM kept.
- Correct rotor flapback (ON by default): flap retuned to peak over the nose instead of the stock retreating lag; tracks governed RPM and is stable through spin-up.
- AI & multiplayer Chicanes now use the pusher prop instead of crawling on rotor thrust (DriveNonLocalPusher).
- Smoother event-driven auto-hover; optional hands-off yaw auto-center (off by default).
- Spinning blur-disc fore/aft + nacelle trim, flight-tuned.
- Perf: diagnostics never touch the per-frame/physics hot paths unless enabled; clean 0-warning build.
ChicanePusherLab v1.0.51
Added
- Pusher prop bends on aircraft destruction. When the airframe is destroyed (any cause), the pusher blades swap to the bent/damaged mesh and spin down. Previously they only bent on a prop ground-strike or tail-sever. Runs off the existing replicated death flag — no per-frame cost.
- Pusher/prop/nacelle position are now sliders (were "X,Y,Z" text strings with no slider in the F1 menu), and live-adjustable in real time:
-[PusherLayout] PusherLocalPositionX/Y/Z — the whole pusher assembly
-[PusherLayout] PropLocalPositionX/Y/Z — the blade plane + hub
-[GeneralNacelleShape] NacelleLocalPositionX/Y/Z — the cosmetic nacelle
-Static-blade placement controls (move the static blades, not the spinning blur disc — tune with the prop stopped):
-[PropVisual] StaticBladeOffsetX/Y/Z — slide blades on the hub (Z = fore/aft along the spin axis)
-[PropVisual] StaticBladeRadialOffset — move each blade in/out along its own span (+ outward, − toward the hub), keeping the 4-blade ring symmetric
Fixed
- Live position edits did nothing. The pusher mount was being re-pinned to its spawn pose every frame by the tail-track LateUpdate, stomping any config change (this was also the cause of the slight prop shift). It now re-captures the weld pose after a move, so edits hold.
Both live paths now re-apply position + nacelle: the per-slider F1 edit and the Reload/F5 button. - Hardened the pusher-mount lookup so it's found even after a rebuild.
Changed
- Tuned default prop placement on the hub: StaticBladeOffsetZ = -0.04, StaticBladeRadialOffset = -0.015. All other position/scale defaults unchanged from v1.0.50.
Upgrade note
- The old PusherLocalPosition / PropLocalPosition / NacelleLocalPosition string keys in a pre-v1.0.51 config are now ignored (harmless orphans); the new …X/Y/Z slider keys replace them. Fresh installs get the new keys automatically.
ChicanePusherLab v1.0.50
ChicanePusherLab v1.0.50
Five fixes (all behavior-neutral)
_lastCricketPowerStats string.Format in ComputeCricketStyleBladeThrustN was running unconditionally every FixedUpdate for a string only the F8 dump ever consumes. ~5–7 KB/s GC × #aircraft for nothing in release builds. Now gated by EnableDiagnostics, matching the sibling perBladeDiag already in the same loop.
_lastPowerBudgetSource ToString concatenations in ComputePusherForceN — ~12 unconditional ToString-then-concat per tick (~5–10 KB/s GC × #aircraft) for another F8-only field. Same EnableDiagnostics gate. Same pattern as the v1.0.3 lateral-trim "BLOCKED(...)" gate.
TransmissionFixedUpdatePrefix per-tick allocations removed:
new int[n] (outTier) → reused static _outTierBuffer (grown on demand).
new StringBuilder() (clsLog) gated by EnableDiagnostics; _trxLastClassification reads "" when gated off.
TryReadAircraftAirDensity had two compounding bugs: it re-resolved aircraft.GetType().GetField("airDensity", ...) on every call (ignoring the cached _aircraftAirDensityField populated in BuildAircraftInputAccessors), and it was never per-tick memoized like its v1.0.3 siblings TryReadAircraftThrottle / ReadAircraftSpeedMetersPerSecond. Called 2–4× per tick from the disc-drag block, the cricket aero, and the IbisDuctedFan thrust inverse. Now uses the cached FieldInfo + a _dnsCacheT/_dnsCacheV/_dnsCacheOk per-tick memo.
FindDeep(_pusherRoot, "VisualPropAxis") ran twice per FixedUpdate (cricket aero loop + GetForcePointWorld) plus once in the F8 dump. Now cached as _propAxisCached, populated in Configure alongside the _pusherRoot assignment, with a Unity-null-safe lazy fallback at each call site so a rebuilt subtree still resolves.
Diagnostic behavior with the gate off
With EnableDiagnostics = false (the release default):
F8 dump still works.
The gated fields stay frozen at their last-emitted value: cricketExact line + lastPowerBudgetSource. lastClassification reads .
This is the intended gating, not a regression. Flip EnableDiagnostics = true in the cfg and the live values come back.
ChicanePusherLab v1.0.48
ChicanePusherLab v1.0.48 — Live cfg editing + tuned nacelle
What's new
F1 live-update for visual cfg (v1.0.45)
Every visual cfg knob (nacelle geometry, material/UV, prop transforms/scales,
spin timings, ibis rotor visual) now live-updates through the BepInEx
ConfigurationManager (F1 in-game). No F5, no respawn — edit the value, the
chicane mesh regenerates in place. HUD, MFD, tail-rotor binding, and the
pusher follower are preserved across edits.
Per-section asymmetric hex controls (v1.0.46–v1.0.48)
Three new layers of control over each hex cross-section (rear + mid) for
sculpting the tail-duct geometry:
- Per-section pair X-scales —
RearTopPairScale,RearBottomPairScale,
MidTopPairScale,MidBottomPairScale. Multiply the X coordinate of an
upper or lower pair per section. Defaults 1.0. - Per-vertex X offsets —
RearTopLeftOffsetX/…RightOffsetX/
…BottomLeftOffsetX/…BottomRightOffsetXand same for mid. Additive
local-X meters per individual non-pointy vertex. Lets each vertex shift
laterally on its own, asymmetric. Defaults 0.0. - Per-pair Y offsets —
RearTopPairOffsetY,RearBottomPairOffsetY,
MidTopPairOffsetY,MidBottomPairOffsetY. Symmetric within the pair,
additive local-Y meters. Lift/lower the "shoulder" or "haunch" lines of
the duct. Defaults 0.0.
All 16 new knobs are live-updateable via F1 — drag the value, watch the mesh
morph.
Flight-tuned defaults
The nacelle shape, mid station, and prop axial position have been re-tuned via
the F1 workflow and the new values are baked as the v1.0.48 defaults. Migrations
are gated by exact old-default match — anyone who'd already moved off the old
defaults keeps their values.
Carries forward from v1.0.42
- 3-anchor pusher thrust curve (kN at V=0, mid, cliff) — actuator-disc base
- Transmission tier allocator with throttle clamp
- Dimensional Comanche body-drag derivation
- Lateral trim flight-tuned across loadouts
- Cockpit overspeed warning lifted to 530 kph (chicane-scoped Harmony patch)
- Pusher prop spin-down on damage: 3 s gunfire, 1 s ground-strike / tail-sever
- All diagnostic toggles default OFF per release rules
Top speeds
- 425 kph winged, 16× AGM-48 + 24× Kingpin
- 510 kph wingless, 24× Kingpin in bay
Manual install: drop ChicanePusherLab.dll in BepInEx/plugins/ChicanePusherLab/