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.
UltimateLethal CrewMorale
Crew morale for Ultimate Lethal: progressive sanity debuffs and HUD distortion, threat-scaled rewards, save-scoped morale and PC, InsanityMod integration, and hallucinations.
| Date uploaded | 2 months ago |
| Version | 2.2.0 |
| Download link | Mycoolteamohyea-UltimateLethal_CrewMorale-2.2.0.zip |
| Downloads | 176 |
| Dependency string | Mycoolteamohyea-UltimateLethal_CrewMorale-2.2.0 |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2100README
UltimateLethal_CrewMorale 2.2.0
Crew Morale extends the pack's existing systems. InsanityMod remains authoritative for real insanity. Crew Morale changes morale-driven gain/recovery and hallucination behavior, but the new fake insanity HUD only changes presentation.
Morale effects
| Tier | Interaction | Stamina | LGU | Hallucination events | Insanity gain |
|---|---|---|---|---|---|
| BROKEN | -100% | -100% | normal | +100% | x3.00 |
| SHAKEN | -50% | -50% | normal | +60% | x2.10 |
| UNEASY | -25% | -25% | normal | +25% | x1.50 |
| STABLE | normal | normal | normal | normal | x1.00 |
| CONFIDENT | +25% | +25% | +5% | -20% | x0.65 |
| THRIVING | +50% | +50% | +10% | -40% | x0.35 |
| PEAK (100) | +100% | +100% | +15% | -60% | x0.15 |
Negative morale never debuffs LGU. Peak still blocks ordinary negative morale events. Last Stand remains the deliberate exception and consumes Peak morale to 70.
Progressive sanity debuffs
InsanityMod's real insanity now adds directly to the existing interaction and stamina values:
| Real insanity | Sanity contribution | Stable total | Broken total | Peak total |
|---|---|---|---|---|
| 0-59 | 0% | 0% | -100% | +100% |
| 60-74 | -10% | -10% | -110% | +90% |
| 75-89 | -25% | -25% | -125% | +75% |
| 90-100 | -50% | -50% | -150% | +50% |
There is no separate artificial cap: the default extremes naturally total -150%. The HUD's INT and STAM cells show the combined morale + sanity value. Negative interaction totals use duration scaling, so -100% means 2x hold duration and -150% means 2.5x hold duration instead of both collapsing to the same minimum speed. At -150% stamina drains at 2.5x and does not recover until the combined value rises above -100%.
Progressive sanity visuals
Real InsanityMod insanity also drives short, intermittent local-only HUD/screen interference. The useful Crew Morale values stay accurate and the compact HUD does not add duplicate information.
| Real insanity | Visual behavior |
|---|---|
| 0-59 | No added screen interference |
| 60-74 | Rare, faint edge loss and static/scan-line tears |
| 75-89 | More frequent color-split tearing and brief Crew Morale HUD jitter |
| 90-100 | Frequent heavier full-screen HUD interference and dark signal dropouts |
The effect uses smooth low-alpha pulses rather than bright full-screen flashes. [V2.2 - Sanity Visuals] provides an enable toggle, intensity, interval, duration and HUD-jitter controls. DebugForceEffect = true continuously forces the strongest pulse for testing. Existing fake Insanity HUD values, phantom audio, obvious brief figures and environmental disturbances remain separate and unchanged.
2.2.0 changes
- Changed the default interaction and stamina tier values to
-100/-50/-25/0/+25/+50/+100. - Existing configs still using the complete published v2.1 default sets migrate automatically; customized sets are preserved.
- Added a dedicated
TZPRecoveryMultiplierwith a default of1.765, raising a standard full TZP effect from roughly 17 to 30 raw insanity points before morale recovery scaling. - Added configurable progressive sanity contributions of
0/-10/-25/-50at real-insanity thresholds0/60/75/90; they stack with morale for interaction and stamina, reaching -150% at the default extremes. - Changed negative interaction scaling to added hold duration so totals below -100% remain distinct and playable.
- Added progressive intermittent full-screen HUD interference: faint at 60 insanity, stronger at 75 and frequent/heavy at 90, with configurable intensity and a testing override.
- Kept PC persistence, morale persistence, event logic and the existing sanity gain/recovery hooks unchanged.
2.1.18 changes
- Morale once again restores from the same save when rejoining or restarting, while a brand-new save initializes at
StartingMorale(55 by default). - Quota-failure resets still set and save morale at 55.
- PC persistence logic is unchanged from 2.1.17.
2.1.17 changes
- Restored the intended morale reset boundaries after the ES3 persistence repair: changing/creating a save and starting a newly hosted lobby reset morale to
StartingMorale(55 by default). - PC remains save-scoped. Reconnecting as a client to a lobby that stayed active keeps the current in-memory morale.
2.1.16 changes
- Same-save lobby re-entry is now detected from the live
StartOfRoundUnity instance instead of relying only onStartOfRound.Startor a changed save-slot name. - A queued saved-PC restoration now blocks transient LGU startup zeroes from being written over the authoritative saved balance.
2.1.15 changes
- Fixed persistence reads selecting ES3's
ES3Settingsoverload instead of the generic-default overload. - PC restoration is queued again whenever the same save slot is re-entered, while morale keeps its same-lobby continuity behavior.
2.1.14 changes
- PC restoration now waits for LGU's native wallet load, then verifies and corrects late LGU overwrites for 20 seconds before declaring the saved balance stable.
2.1.13 changes
- Added configurable stamina efficiency per morale tier. Positive values reduce stamina drain and improve recovery; negative values increase drain and slow recovery.
- Restored status colors. The status word and current morale fill use the tier color.
- Added tier chunks/dividers at 20, 35, 50, 70 and 85 so the bar shows where each morale state begins.
- Rebuilt the effect panel into fixed cells so exaggerated test values no longer push HUD text into neighboring fields.
- Added deceptive InsanityMod HUD values above a configurable threshold. The displayed number/fill can drift or spike while the real InsanityMod value remains untouched.
- Visual hallucinations are now intentionally obvious and brief: closer, larger figures with a high chance to appear near the center of view for a short jolt.
- Kept the improved 2.1.10 phantom-audio direction rather than replacing it.
- Reconnect handling now attempts to preserve morale when rejoining the same active lobby, while new lobby/save sessions and quota failure reset to StartingMorale.
- PC persistence now performs an immediate save/commit plus a delayed second commit after Crew Morale awards PC.
Focused test controls
For visual hallucination testing:
BaseChance = 1CheckSeconds = 2GlobalCooldownSeconds = 2DebugForceEventType = 2
For environment testing, change DebugForceEventType = 3.
For stamina testing, temporarily set the current tier to +100 or -100 and compare drain/recovery.
For fake insanity HUD testing, lower StartThreshold to make the presentation behavior easier to reach.
See TEST_v2.2.0.md.
Persistence
Morale and Crew Morale Player Credits are persisted inside the active Lethal Company save file. Each save slot keeps its own values. New saves start at the configured starting morale and adopt LGU's native starting PC balance.
CHANGELOG
Changelog
2.2.0
- Changed the default interaction and stamina tier values to
-100/-50/-25/0/+25/+50/+100. - Added safe migration from the complete untouched v2.1 effect defaults while preserving customized configurations.
- Added a dedicated configurable
TZPRecoveryMultiplierdefaulting to1.765, targeting roughly 30 raw insanity recovery across a standard full TZP effect before morale scaling. - Added progressive sanity debuffs to interaction and stamina: -10% at 60 insanity, -25% at 75 and -50% at 90.
- Sanity stacks directly with morale. The default worst case is Broken morale (-100%) plus critical sanity (-50%) for a natural -150% total with no separate artificial cap.
- Changed negative interaction scaling to added hold duration: -100% is 2x duration and -150% is 2.5x, so deeper penalties remain meaningful without reaching zero speed.
- Added progressive, intermittent full-screen sanity interference. Higher insanity increases pulse strength, duration and frequency while briefly jittering the Crew Morale HUD.
- Added configurable visual enable, intensity, timing, duration, jitter and force-test controls. The effect avoids bright full-screen flashing and does not alter authoritative gameplay state.
- Made no changes to PC persistence, morale persistence, event logic or existing morale-to-sanity scaling.
2.1.18
- Restored per-save morale continuity so rejoining the same save returns its saved morale instead of resetting a newly hosted lobby to 55.
- Kept new-save initialization and quota-failure resets at
StartingMorale. - Made no changes to the working PC persistence implementation.
2.1.17
- Fixed the ES3 read repair unintentionally restoring old morale into new lobby/save sessions.
- Morale now resets to
StartingMoralefor a new/different save and every newly hosted lobby; quota-failure resets remain intact. - Kept save-scoped persistence exclusively for PC while preserving in-memory morale for a client reconnect to an active lobby.
2.1.16
- Fixed same-save re-entry still missing PC restoration because
StartOfRound.Startdid not reliably invoke the persistence hook on later lobbies in the same process. - Added runtime lobby-instance detection and protected queued saved PC from being overwritten by LGU's temporary startup balance.
2.1.15
- Fixed all saved morale/PC reads failing because reflection selected
ES3.Load<T>(string, string, ES3Settings)instead ofES3.Load<T>(string, string, T defaultValue). - Fixed PC restoration not being queued when leaving and re-entering the same save slot during one game process.
2.1.14
- Fixed PC restoration racing LGU's delayed native wallet load. Saved PC is now applied after LGU initialization and continuously verified/corrected through a 20-second startup window.
2.1.13
- Threat-scaled monster kill rewards: Minor / Standard / Dangerous / Extreme, with configurable enemy-name lists and Standard fallback.
- HUD morale bar now fills each tier chunk with its own color.
- Removed duplicate BUFF/DEBUFF/STABLE label beside INT/STAM; first row is INT / STAM / conditional LGU only.
- Event notification panel auto-sizes vertically and wraps long text instead of clipping it.
- PC persistence now additionally asks LGU CurrencyManager to run any native zero-argument save/persist routine after Crew Morale PC awards and normal game saves, while retaining save-scoped fallback persistence.
2.1.11
- Added configurable per-tier stamina efficiency: -15/-10/-5/0/+5/+10/+15 by default.
- Stamina efficiency scales local sprint-meter drain and recovery deltas without changing movement speed.
- Added
STAMto the permanent morale HUD. - Restored morale status coloring and matched the current bar fill to the active status color.
- Added visible tier segments/dividers at morale 20/35/50/70/85.
- Reworked the permanent effect panel into fixed-width cells so extreme config test values remain readable.
- Added presentation-only fake InsanityMod HUD values with threshold, max offset, update interval, spike chance, duration and return-speed config.
- Fake insanity presentation attempts to update both numeric HUD text and obvious fill/progress elements while leaving InsanityMod's real value untouched.
- Reworked visual hallucinations from subtle peripheral silhouettes into deliberately obvious, close, short-lived local figures.
- Preserved the improved 2.1.10 phantom-audio pool/direction.
- Reworked morale session continuity so same-active-lobby reconnects can preserve morale using lobby identity where available, with host/save fallback.
- Removed the generic
ResetGameValuesToDefaultmorale reset hook because it could fire during disconnect/reconnect. - New lobby/save sessions and quota-failure reset paths still return morale to StartingMorale.
- Added a delayed second LGU Player Credit save/commit after Crew Morale rewards to harden PC persistence.
- Kept notification priority, critical injury, Peak blocker, Last Stand, and death anti-spoiler queue behavior.
2.1.10
- Changed Crew Morale reset behavior to match the V5.1 design: lobby/save starts and quota-failure firing/reset paths return morale to
StartingMorale(55 by default) instead of restoring per-save morale. - Added multiple quota/lobby reset hooks plus a runtime firing-sequence fallback and
MORALE RESETdebug logs. - Added configurable interaction-speed percentages for every morale tier. Defaults remain -15/-10/-5/0/+5/+10/+15. HUD
INTnow follows the configured value because it reads the same multiplier. - Added hallucination selection weights and
DebugForceEventType(0 random, 1 audio, 2 visual, 3 environment) for deterministic testing. Pair withBaseChance = 1, a short check interval, and short cooldown for validation. - Reworked the shadow event into a floor-positioned local figure with a body/head silhouette and a longer visible window; the old eye-level capsule could be easy to miss.
- Replaced the custom camera-jolt environment event with a brief local nearby-light flicker so it no longer overlaps InsanityMod's tunnel-vision/camera-shake presentation.
- Expanded phantom-audio discovery and high-insanity preference toward footsteps/running, doors, vents, radio/static/walkie cues, breathing/growls/roars/screams/snarl-type clips when those assets exist in the loaded game/mod set. Subtle metal/scrap-like sounds remain possible.
- Reworked temporary HUD feedback into a priority queue. Last Stand is highest priority; monster-kill and PC gameplay rewards outrank delayed death notices.
- Death notifications are ship-safe: players outside do not get spoiled. The notice is queued and shown after they return to the ship; multiple delayed notices can queue.
- Monster-kill morale + PC feedback is now a single combined popup instead of competing messages.
- Crew Morale PC awards now request LGU/CurrencyManager save/commit methods when exposed and then request the normal
GameNetworkManager.SaveGameValueslifecycle so LGU save hooks get a chance to persist the updated wallet. - Default HUD placement changed to
X = 0.5,Y = 0.76(above hotbar). - Default Player Credits horizontal offset changed to
PCOffsetX = -180. - Critical injury behavior, Peak blocker, Last Stand, and confirmed phantom-audio scheduler remain intact.
2.1.9
- Fixed static InsanityMod insanity reading and hallucination scheduling.
- Fixed/currentized InteractTrigger integration.
- Improved LGU Player Credits runtime resolution and kill-hook reflection resilience.
- Added exact morale/effect HUD layout and per-save persistence experiment.