ParanoiaOutdoorDarkness / ParanoiaFogDensity.HideHudAtZero (on/off) is replaced by HideHudBelowThreshold (a %). Default 0 hides the ring only at exactly 0% (same as before); set it higher (e.g. 20) to keep the ring hidden until your insanity is meaningful. Old HideHudAtZero config lines are now ignored — safe to delete by hand.CameraShakeIntensity config (default 1) — scales the high-insanity (90%+) camera shake, or set it to 0 to turn the shake off entirely. Added for motion-sickness comfort.Multiplayer / client-sync fixes, plus an in-progress rework of the Paranoia weather visuals.
⚠️ The Paranoia weather visuals are still a work in progress. On some moons the skybox can still look a little bright and the look varies per moon — further visual polish is coming in a later update. In the meantime you can tune it yourself with the
ParanoiaScreenTint,ParanoiaOutdoorDarkness, andParanoiaFogDensityconfig options.
StartOfRound.StartGame, which executes server-side only — so on clients _roundActive stayed false and the HUD ring never appeared (and insanity never ticked). An idempotent round start now also runs from RoundManager.FinishGeneratingNewLevelClientRpc, which fires on every machine. The host path is unchanged.DressGirlAI is server-authoritative, so her timer is only ever mutated on the host. Each client streams its live insanity to the host (throttled, ~0.4 s), and the host boosts the haunt based on the insanity of whichever player she is actually targeting — so a high-insanity client gets hunted faster too, not just the host.InsanityNetworkHandler.RegisterHandlers is now idempotent (unregisters before registering). Since round start can fire from two paths, this prevents a duplicate-registration warning from NGO.shipInnerRoomBounds, which the 2-Story mod enlarges to cover its upper floor — but the side railings and entry catwalk sit outside that inner-room box, so stepping onto them wrongly read as outdoors and triggered the Paranoia transition. Ship detection is now a union of isInHangarShipRoom, shipInnerRoomBounds, and the larger outer shipBounds (which includes the catwalk/railings and is also resized by 2-Story). Also covers Imperium teleports, which a position test catches even when the vanilla trigger is skipped.RenderSettings.ambientLight, the directional light's colour/intensity, and even snapped its rotation every frame, gated by an indoor/outdoor check — that global, instant relighting was the flash/snap. It's been replaced by a single self-contained global HDRP volume (red colour grade + mild fog) that is constant for the whole round and only fades its weight once on round start/end. No per-frame scene-lighting writes, no indoor/outdoor gating, so nothing snaps when you step in or out (jiggle-peeks included). This also restores the subtle constant filter indoors that earlier playtesting preferred, and aligns with how vanilla / WeatherRegistry weathers render (encapsulated effects rather than hijacking scene lighting). Outdoor "blood" lighting comes from a colour-only tint on the sunlight (intensity and rotation are never touched, so no shadow/sky recompute), volumetric fog is disabled for a lighter, predictable constant look, and the sun/rain setup retries briefly in case they aren't ready the frame the level finishes generating.VoiceTrack cached direct references to audio filter components on a player's VoicePlayback; when the game destroyed/recreated that object between rounds the references became Unity "fake null", and ApplyLiveDistortion/ResetFilters threw when touching them (surfacing via UpdatePostfix, ShipLeavePostfix, and round-start). Added a Unity-aware IsAlive guard so those methods no-op on dead tracks, and RefreshTracks now evicts dead tracks so a fresh one re-binds to the new playback — voice distortion/haunting self-heals instead of silently stopping for that player.ParanoiaScreenTint (default 0), ParanoiaOutdoorDarkness, ParanoiaFogDensity.Bug-fix pass driven by vDolo's playtest report.
EnableHud = false now actually hides the HUD ring at runtime. Previously the toggle was only checked at scene load, so flipping it mid-session left the ring visible.PlayerControllerB.isInHangarShipRoom to the vanilla shipInnerRoomBounds AABB. Fixes false "in ship" readings around the second-story railing with 2-Story Ship, and fixes Imperium teleports not registering as inside the ship until the player physically lands.Playtest-driven additions on top of v1.0.4.
TZPInsanityDrainRate config — sustained per-second insanity reduction while the local player has the TZP-Inhalant effect active (drunkness > 0.05). Default 1.0/s. One inhale (~17 s effect window) recovers ~17%; stack three for ~50% — a strong safety valve, particularly useful on apparatus-removed rounds where in-facility buffs are disabled.InsanityRateOnShip is replaced by RateOnShipLightsOn (default -0.3/s) and RateOnShipLightsOff (default +0.15/s). Ship lights become a tactical lever: lit ship is a passive recovery zone, dark ship is a mild threat (still slower than the facility). Old config files will retain the now-unread InsanityRateOnShip line as a cosmetic orphan — BepInEx does not auto-clean it. Safe to delete by hand.Playtest-driven additions on top of the v1.0.3 stabilization release.
UnderwaterRate config — sustained per-second insanity gain while the local player is underwater (default 0.4).CompanyMoonDecayRate config — sustained per-second insanity reduction while on the Company building moon (71 Gordion). Default 0.5. The Company is treated as a thematic refuge.MaskedTransformOnlyDuringParanoia config (default true) — restricts the 100% Masked transformation to Paranoia weather rounds. Set false to restore the old behavior.EnableHud config (default true) — master switch for the insanity HUD ring. Set false to disable it entirely (no canvas is created).Stabilization & defensive sweep — no player-facing behavior changes.
SafePatch helper wraps every Harmony patch, Unity callback, and event listener with deduplicated exception logging. A single throw in any patch can no longer silently disable other patches or spam the log.PlayerControllerB.Update, DressGirlAI.Update, OnAudioFilterRead) lift their early-exit guards above the wrapper to avoid closure allocation when nothing needs to run.BloodNightManager.GetSun() fallback FindObjectsOfType<Light>() is throttled to once every 5 seconds when the cached reference is missing.ApplyPenalty fires more than once per round.VoiceHaunt haunt-clip GameObjects (which use DontDestroyOnLoad) are tracked and cleaned up on round end so they can't pile up across long sessions.WeatherChanged listener.Most of this release is driven by feedback from vDolo — thanks!
TunnelVisionColor config — change overlay color via hex (default darker than before; less eye-strain)HideHudAtZero config — option to hide the insanity HUD ring at 0%