Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
InsanityMod
Insanity system for Lethal Company. Sanity drains in the facility, spikes when you witness deaths, and peaks with tunnel vision, camera shake, and haunting voice playback. Includes Paranoia custom weather.
CHANGELOG
Changelog
v1.0.9
- Fix: Paranoia outdoors no longer dims toward a near-blackout late in the day on non-snowy moons. The mod's sun-dimming was stacking on the game's natural dusk darkening; the dim floor is raised (and the fog is less dense near the player) so the moody red look stays but the ground remains visible. Tune further with
ParanoiaOutdoorDarkness/ParanoiaFogDensity. - Fix: The insanity HUD ring now reliably hides while the pause / quick menu is open. It was stalling when opening the menu froze game time (so it never faded out); it now hides instantly.
- Change:
HideHudAtZero(on/off) is replaced byHideHudBelowThreshold(a %). Default0hides 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. OldHideHudAtZeroconfig lines are now ignored — safe to delete by hand.
v1.0.8
- Fix: Paranoia no longer suppresses the dusty light-shaft haze under interior lights. v1.0.7 forced volumetric fog off, which removed that haze on Paranoia rounds (moons whose native fog is preserved, like Titan, were unaffected). Volumetric fog is kept on now, so the haze returns — and with the red Paranoia fog it reads as ominous red dust under the lights. The haze is dialed down inside the facility, where its many lights would otherwise turn into harsh red cones; the surface and ship keep the full look.
- Fix: The insanity HUD ring now hides while the pause / quick menu is open, so it no longer overlaps menu buttons (e.g. MoreCompany's cosmetics button or the settings options).
- New:
CameraShakeIntensityconfig (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.
v1.0.7
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.
- Fix: Insanity now starts correctly for non-host players. Round start previously ran only from
StartOfRound.StartGame, which executes server-side only — so on clients_roundActivestayed false and the HUD ring never appeared (and insanity never ticked). An idempotent round start now also runs fromRoundManager.FinishGeneratingNewLevelClientRpc, which fires on every machine. The host path is unchanged. - Fix + improvement: Ghost Girl haunt-speed boost no longer desyncs online, and now works for every player.
DressGirlAIis server-authoritative, so hertimeris 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. - Fix:
InsanityNetworkHandler.RegisterHandlersis now idempotent (unregisters before registering). Since round start can fire from two paths, this prevents a duplicate-registration warning from NGO. - Fix: 2-Story Ship railings/catwalk/upper floor are now correctly treated as inside the ship. v1.0.6 only checked
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 ofisInHangarShipRoom,shipInnerRoomBounds, and the larger outershipBounds(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. - Rework: Paranoia visuals no longer "re-render" or white-flash when crossing the ship threshold. The old approach drove
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. - Fix: Voice-haunt no longer throws (logged) errors on round transitions. A
VoiceTrackcached direct references to audio filter components on a player'sVoicePlayback; when the game destroyed/recreated that object between rounds the references became Unity "fake null", andApplyLiveDistortion/ResetFiltersthrew when touching them (surfacing viaUpdatePostfix,ShipLeavePostfix, and round-start). Added a Unity-awareIsAliveguard so those methods no-op on dead tracks, andRefreshTracksnow 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. - Fix: The Paranoia weather name no longer renders as boxes (□□□) in the terminal under non-English languages. The vanilla terminal font is Latin-only and can't draw e.g. Korean glyphs, so the weather name is now a fixed ASCII proper noun ("Paranoia") for every language — consistent with the vanilla weather names (Eclipsed, Foggy, …).
- Tuning: Paranoia's tint is now world-space, not a flat full-screen filter, so the ship interior stays clean while the sky and the view out the windows still read red. It comes from: distance-based fog (reddens the sky/horizon, barely touches the near interior), a direct tint on the volumetric clouds (which render past the fog and otherwise stay bright), and sun dimming for surface gloom (colour + intensity only, never rotation — leaves the interior, lit by its own lights, alone). The optional full-screen colour grade now defaults OFF (it's the only layer that would tint the interior). Three config sliders expose this for live tuning (LethalConfig-friendly):
ParanoiaScreenTint(default 0),ParanoiaOutdoorDarkness,ParanoiaFogDensity.
v1.0.6
Bug-fix pass driven by vDolo's playtest report.
- Fix:
EnableHud = falsenow 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. - Fix: Paranoia visuals no longer bleed into unrelated sessions after Save & Quit. Returning to the main menu now force-resets the active flag, the per-level set, and any lingering HDRP volumes / rain.
- Fix: Paranoia weather no longer overwrites the native snow / fog cover on Rend, Dine, and Titan. The red HDRP Fog override is skipped on those moons; ColorAdjustments (red tint + darkening) still apply, so Paranoia still reads as Paranoia.
- Fix: Ship-interior detection switched from
PlayerControllerB.isInHangarShipRoomto the vanillashipInnerRoomBoundsAABB. 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. - Fix: Underwater insanity gain now takes priority over outdoor decay. Previously the −0.8/s decay partially cancelled the +0.4/s underwater rate, producing a net decrease in flooded weathers — now the decay branch is suppressed while submerged outdoors, so insanity climbs as intended.
v1.0.5
Playtest-driven additions on top of v1.0.4.
- Fix: Paranoia weather visuals are now strictly outdoor-only. The red sky tint and exposure cut no longer leak into the ship or facility interior. Indoor↔outdoor transitions fade fog, sky tint, ambient light, and sun together over ~0.5 s — eliminating the bright→red flash that appeared when stepping off the ship ramp.
- New:
TZPInsanityDrainRateconfig — sustained per-second insanity reduction while the local player has the TZP-Inhalant effect active (drunkness > 0.05). Default1.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. - Change:
InsanityRateOnShipis replaced byRateOnShipLightsOn(default-0.3/s) andRateOnShipLightsOff(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-unreadInsanityRateOnShipline as a cosmetic orphan — BepInEx does not auto-clean it. Safe to delete by hand.
v1.0.4
Playtest-driven additions on top of the v1.0.3 stabilization release.
- New: HUD ring now fades in/out (≈0.5 s) when crossing the 0% threshold — replaces the abrupt toggle from v1.0.3.
- New:
UnderwaterRateconfig — sustained per-second insanity gain while the local player is underwater (default0.4). - New:
CompanyMoonDecayRateconfig — sustained per-second insanity reduction while on the Company building moon (71 Gordion). Default0.5. The Company is treated as a thematic refuge. - New:
MaskedTransformOnlyDuringParanoiaconfig (defaulttrue) — restricts the 100% Masked transformation to Paranoia weather rounds. Setfalseto restore the old behavior. - New:
EnableHudconfig (defaulttrue) — master switch for the insanity HUD ring. Setfalseto disable it entirely (no canvas is created).
v1.0.3
Stabilization & defensive sweep — no player-facing behavior changes.
- New:
SafePatchhelper 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. - Perf: Per-frame hot paths (
PlayerControllerB.Update,DressGirlAI.Update,OnAudioFilterRead) lift their early-exit guards above the wrapper to avoid closure allocation when nothing needs to run. - Perf:
BloodNightManager.GetSun()fallbackFindObjectsOfType<Light>()is throttled to once every 5 seconds when the cached reference is missing. - Fix: End-of-round insanity stats no longer get appended twice if the game's
ApplyPenaltyfires more than once per round. - Fix:
VoiceHaunthaunt-clip GameObjects (which useDontDestroyOnLoad) are tracked and cleaned up on round end so they can't pile up across long sessions. - Fix: Plugin teardown now clears the Paranoia weather level set and removes the
WeatherChangedlistener. - Fix: Network message handlers wrapped — a malformed packet can no longer break the handler registration.
- Chore: Dropped a per-level "InsanityHud overlay created" log line.
v1.0.2
Most of this release is driven by feedback from vDolo — thanks!
- New: Paranoia weather now has proper visual atmosphere — dark moody sky, dim red sun, light fog, and red color grading (HDRP volumes)
- New: Rain particles activate during Paranoia weather
- New: Custom terminal color for Paranoia weather (dark crimson)
- New:
TunnelVisionColorconfig — change overlay color via hex (default darker than before; less eye-strain) - New:
HideHudAtZeroconfig — option to hide the insanity HUD ring at 0% - Fix: Paranoia visuals now apply at the correct moment (after level finishes loading) instead of leaking into the ship-departure transition
- Fix: Ship interior no longer pitch-black during Paranoia weather (fog/heavy darkening only applied outdoors)
- Fix: Smooth fade-out of Paranoia visuals when the ship departs, instead of an abrupt pop
- Fix: Voice haunt buffer is now cleared immediately on ship departure as well as round start
- Change: End-of-round insanity stats now appended to the existing penalty breakdown text for cleaner integration with the evaluation screen
v1.0.1
- Fix: Insanity HUD no longer visible on the main menu after exiting a save
- Fix: Tunnel vision and other VFX now properly clear when returning to the main menu mid-round
- New: Insanity rises outdoors at night instead of decaying (configurable, default 0.05/s after hour 19)
- New: Eclipse weather also raises insanity outdoors at a higher rate (default 0.1/s)
- Change: Renamed "Blood Night" weather to Paranoia to avoid confusion with the existing Blood Moon event
- Change: Apparatus removal reworked — now triggers an immediate insanity spike (+15) and disables all insanity-reduction buffs inside the facility for the rest of the round (replaced the ×2.0 rate multiplier)
v1.0.0
- Initial release