Lethal Company
You are viewing a potentially older version of this package. View Latest Version
Install

Details

Date Uploaded
4 hours ago
Downloads
28
Size
77KB
Dependency string
Solon-MonstersGordion-1.2.1

MonstersGordion

Dynamic, configurable spawning of vanilla Lethal Company monsters inside the Company building on 71-Gordion, on the navmesh baked by NavMeshInCompanyRedux. Host-authoritative: only the host spawns, clients receive enemies through the game's own netcode — so only the host strictly needs this mod (everyone needs NavMeshInCompanyRedux).

Built and tested against game v81.

Features

  • Timer-driven spawn cycle with a random interval in [MinSpawnInterval, MaxSpawnInterval].
  • Per-enemy config blocks (Enabled, SpawnWeight, MinSpawnCount, MaxSpawnCount) generated for every spawnable enemy type found in the game, modded ones included (unknown types default to disabled).
  • Global alive cap; enemies from the game or other mods count toward it by default, so combined populations stay bounded.
  • Reachability-safe spawn points: the interior navmesh is split into connected regions and every spawn point / patrol node must have a complete path to the main hall — no more monsters stuck on roof patches, shelf tops or in pits.
  • Floor balance (UpperFloorSpawnShare): configurable split between the ship-landing level and the basement, instead of pure area weighting.
  • Outdoor/indoor pool split (OutsideEnemyShare): each spawn rolls which pool to pick from, so dogs/giants/Old Birds actually show up when enabled.
  • Interior patrol nodes are generated on the navmesh (the Company building has none), and spawned enemies are forced into interior AI mode.
  • RespawnOnLoad: wipe and repopulate on every landing, or top up existing.
  • Verbose DebugMode logging of every decision the spawner makes.

Dependencies

Required (declared in the Thunderstore manifest):

Package Tested version
BepInEx-BepInExPack 5.4.2305
TRizzle-NavMeshInCompanyRedux 1.2.0

Optional, auto-detected at runtime (no hard dependency):

Package Tested version Integration
Zehs-ToilHead 1.9.1 per-enemy turret chances in the [ToilHead] config section — Coil-Head, Manticoil and Masked, each with a Slayer (minigun) sub-chance
AudioKnight-StarlancerAIFix 3.13.2 its EnemyAI.Start postfix applies automatically; this mod's interior fix-up runs after it
SoftDiamond-BrutalCompanyMinusExtraReborn 1.70.1 shared enemy budget via CountForeignEnemies

Installation

r2modman / Thunderstore Mod Manager: install from Thunderstore; dependencies are pulled in automatically.

Manual: drop MonstersGordion.dll into BepInEx/plugins/ and install the required dependencies yourself.

Configuration

BepInEx/config/Timofey.MonstersGordion.cfg, created on first run. Changes require a game restart (standard BepInEx behaviour).

Section Key Default Meaning
General GlobalCap 5 max enemies alive at once
General MinSpawnInterval / MaxSpawnInterval 15 / 45 random delay range, seconds
General RespawnOnLoad true wipe + restart population on every landing
General DebugMode false verbose spawn logging
Balance UpperFloorSpawnShare 70 % of spawns at ship-landing level (rest → basement)
Balance OutsideEnemyShare 50 % chance to pick from outdoor enemy types
Balance OldBirdUpperFloorOnly true spawn the Old Bird only on the upper floor
ToilHead CoilHeadTurretChance / CoilHeadSlayerChance 25 / 0 % turret on a Coil-Head, and % of those that are the minigun Slayer
ToilHead ManticoilTurretChance / ManticoilSlayerChance 25 / 0 same, for Manticoil
ToilHead MaskedTurretChance / MaskedSlayerChance 0 / 0 same, for Masked (mimic)
Integration VainShroudIterations 0 grow weeds for Bush Wolf (0 = auto; experimental)
Integration FeioparFakeTrees false fabricate trees so Feiopar can stalk (experimental)
Advanced DespawnOnShipLeave true remove this mod's enemies when leaving
Advanced CountForeignEnemies true other mods' enemies count toward caps
Advanced MinDistanceFromPlayers 12 min spawn distance to players, meters
Advanced AINodeCount 20 generated interior patrol nodes
Advanced RequireIndoorPoints true require a ceiling above spawn points
Advanced ExcludedEnemies (empty) comma-separated blacklist (or whitelist, see below)
Advanced ExcludedEnemiesIsWhitelist false flip the list into an allow-list
Advanced TreatEnemiesAsOutside true required for enemies to be able to target players (see below)
Advanced MaintenanceInterval 3 seconds between AI re-apply / rescue / cleanup passes
Advanced ForeignEnemies RemoveExcluded apply the blacklist to enemies spawned by other mods

Why TreatEnemiesAsOutside exists

The game gates targeting behind player.isInsideFactory != enemy.isOutside. Players inside the Company building are not flagged as being in a factory (there is no EntranceTeleport there), so enemies must be flagged as outdoor enemies or PlayerIsTargetable — and with it every chase and every collision kill — silently fails. The mod still assigns interior patrol nodes, so enemies stay in the building. Only turn this off for debugging.

Which enemies are enabled by default

Enabled — work well: all interior enemies (Bracken, Thumper, Hoarding Bug, Snare Flea, Bunker Spider, Coil-Head, Ghost Girl, Spore Lizard, Nutcracker, Jester, Masked, Hygrodere, Butler, Barber, Maneater), plus Stingray and Tulip Snake, and the outdoor threats that path fine indoors — Baboon Hawk, Eyeless Dog, Forest Keeper, Old Bird and Giant Kiwi. Nest-requiring types (Old Bird, Giant Kiwi) get their nest placed on the interior navmesh automatically; the Old Bird is additionally locked to the upper floor.

Disabled by default — do NOT work correctly on Gordion yet (kept in the config and code, toggleable, and preserved on the experimental git branch):

  • Feiopar (PumaAI) stalks only from trees; without them it just idles. The experimental [Integration] FeioparFakeTrees fabricates trees but it parks near the ceiling — off by default.
  • Cadaver Growths requires a dungeon (Found no dungeon) and self-destructs; Cadaver Bloom is a dormant seed the Growth would plant.
  • Bush Wolf (Kidnapper Fox) needs vain shrouds, which do not currently grow on the Company moon (see [Integration] VainShroudIterations).
  • Earth Leviathan burrows through terrain and looks wrong inside a building.

Every landing writes a spawnability report to the log naming each enemy, its AI class and why it will or will not spawn, and the mod auto-disables any type that keeps dying within seconds of spawning so it is never spammed.

Per-enemy sections: [Enemy.Flowerman], [Enemy.Bunker Spider], … with Enabled, SpawnWeight, MinSpawnCount, MaxSpawnCount. Defaults: interior threats enabled; outdoor giants/dogs/Old Birds, bees, Butler Bees and Manticoil disabled (enable them yourself); Lasso and Red pill hard-excluded.

Building from source

Requires the .NET SDK 8+ and NuGet access — game assemblies come from the LethalCompany.GameLibs.Steam package (stripped + publicized), no manual DLL copying.

dotnet build -c Release

Output: bin/Release/netstandard2.1/MonstersGordion.dll. Set the LC_PLUGINS environment variable to your plugins folder to auto-copy after each build.

To assemble the Thunderstore package zip:

powershell -ExecutionPolicy Bypass -File build-package.ps1

Project layout

MonstersGordion/
├── MonstersGordion.csproj      # SDK project, NuGet-only references
├── NuGet.config                # nuget.org + BepInEx feed
├── manifest.json               # Thunderstore manifest
├── icon.png                    # Thunderstore icon (256x256)
├── CHANGELOG.md
├── build-package.ps1           # builds dist/MonstersGordion-<ver>.zip
└── src/
    ├── Plugin.cs               # BepInEx entry point, Harmony bootstrap
    ├── PluginConfig.cs         # all config entries incl. per-enemy blocks
    ├── EnemyCatalog.cs         # EnemyType discovery + exclusions
    ├── NavMeshSampler.cs       # tiered, reachability-checked point sampling
    ├── LandingWatcher.cs       # polling-based landing/leave detection
    ├── CompanyMonsterSpawner.cs# timer, pools, weighted pick, caps, cleanup
    ├── Patches/                # ShipLeave/OnDestroy cleanup, death logging
    └── Compat/                 # ToilHead, StarlancerAIFix, BCME, scanner

How it works (short)

On every landing on Gordion (detected by polling StartOfRound.shipHasLanded, host only) the mod triangulates the navmesh, welds it into connected regions, anchors reachability in the main hall, generates patrol nodes, and starts the spawn coroutine. Each cycle: roll interval → check GlobalCap → fill MinSpawnCount deficits first, otherwise roll outdoor/indoor pool → weighted pick → tiered reachable spawn point → RoundManager.SpawnEnemyGameObject → two frames later force interior AI (SetEnemyOutside(false), custom node set, agent warp) and roll the ToilHead turret. Leaving the moon stops everything and (by default) despawns the mod's enemies.

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.