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.
[MinSpawnInterval, MaxSpawnInterval].Enabled, SpawnWeight, MinSpawnCount, MaxSpawnCount)
generated for every spawnable enemy type found in the game, modded ones included
(unknown types default to disabled).UpperFloorSpawnShare): configurable split between the
ship-landing level and the basement, instead of pure area weighting.OutsideEnemyShare): each spawn rolls which pool
to pick from, so dogs/giants/Old Birds actually show up when enabled.RespawnOnLoad: wipe and repopulate on every landing, or top up existing.DebugMode logging of every decision the spawner makes.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 | ToilHeadSpawnChance% turret on Coil-Head/Manticoil, ToilSlayerChance% minigun variant |
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 |
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.
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 |
| Integration | ToilHeadSpawnChance | 25 | % turret chance for Coil-Head/Manticoil |
| Integration | ToilSlayerChance | 0 | % of those turrets that are the Slayer variant |
| 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) | extra comma-separated exclusions |
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.
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
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
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.