Coasters: Immersion 0.1.2
Curse Maven Snippet
What's new
Mostly a jitter hunt. A per-frame CSV log (F8) was added, and it turned up five separate bugs that all felt the same — the camera stuttering — but had different causes. None of them were guessed; each fix is backed by before/after measurements.
Camera smoothness
- The filter ran 3–8 times per frame instead of once. Its cache guard measured time since the last integration, so it almost never hit. Worse than the cost was the measurement: within one frame the source orientation hasn't changed, so the measured input rate came out as exactly zero, then huge at the frame boundary — and that fed the turn anticipation. p99 camera acceleration dropped from 90,361 to 7,335.
- Two seams at the tick boundary. Control-point smoothing was chained, so the same point got different values depending on which segment it fell in; and outside the sample buffer the mod fell back to linear interpolation, switching interpolators between frames. Endpoints are now clamped and the curve fades out over three ticks instead of giving up.
- Impossible time steps. The worst spikes happened in 0.4–1.3 ms frames, never in slow ones. Steps under 2.5 ms no longer integrate; the skipped time carries over.
- Large jumps snap instead of being chased. A 1,372 °/s input produced a 21,595 °/s filtered output — a spring being yanked. Past 60° in one frame, the camera now snaps.
Forces
- Forces now depend on where you sit. Added the rigid-body term
α × r + ω × (ω × r); the centripetal part is what actually separates the front row from the back in a sustained curve. - Instant response when inverted. Forces were filtered after projection onto the seat axes, smearing the one thing that changes instantly. Also makes airtime arrive without delay.
- Being upside down is detected by attitude, not just force. Starts counting around 110° instead of waiting for ~180°.
- Multiplayer. Other riders' forces came from networked position differentiated twice; false spikes read as weightlessness and made them throw their arms up for no reason.
Rider
- Hands-up is a gesture now, not physics. The gravity-driven arm lift is gone — it blended with the gesture and read as neither. The gesture is an eased ramp (0.85 s up, 1.15 s down) instead of a spring, so it no longer starts abruptly or overshoots.
- The chance is finally a chance. It used to only scale a threshold, so a big enough drop always triggered it. Now it's a real per-drop roll, 30% by default, deterministic across clients.
New
- Seat Aligner — click a seat to cycle which way the rider faces, in 45° steps. Stored server-side so everyone sees the same thing.
- Track analyser —
/immersion analyze [radius]scans the circuit without riding it and marks rough spots in the world with F3 open. It measures jerk, not force: lateral force isv²·κ, so a jolt is a curvature jump — two pieces that fit perfectly but arrive turning differently./immersion clearclears them. - Spin drives on moving vehicles now use a real rotary constraint instead of a controller pulling the platform along, which always lagged and felt rubbery.
Interface
Menu split into ten sections instead of 36 flat rows. Accent colour changed from amber (too close to Minecraft's warning orange) to a muted cyan, and colour is now reserved for section titles, enabled toggles and slider fills — if everything is highlighted, nothing is.
Performance
Camera filter down to one integration per frame; diagnostics no longer compute anything when nobody is looking at them.
This mod has no additional files

