Backports the M8230 CS gas hand grenade from EFT 1.0 — a volumetric, occlusion-aware gas cloud that burns eyes, forces coughing, blocks meds and is stopped by a proper gas mask. Ported from WelcomeToTarkov/ManimalCSGas (by Manimal) to SPT 4.1.2.
🟣 JOIN THE DISCORD — https://discord.gg/nxa3W7w4rJ
This is the single most important link in this README. All updates, release announcements, bug fixes, early builds and support happen in the Discord first. If you run this mod, join it — it is the only place you will reliably hear about breaking changes and new versions.
What's coming next: I am building a post-1.0 patcher and backend, written from scratch and engineered to be very performant — a proper foundation instead of the current patchwork. All of these mods will shortly be merged into that new system. If you want to follow that work, or use it when it lands, the Discord is where it will be announced.
| Dependency | Minimum version |
|---|---|
| WTT-ClientCommonLib | 2.0.20 |
| WTT-ServerCommonLib | 2.0.20 |
Requires SPT 4.1.2. It will not run on 4.0.x — see What the port changed below.
- Install the dependencies above first.
- Download the latest release zip from GitHub.
- Extract it into your SPT install root — the folder containing
EscapeFromTarkov.exeandSPT_Runtime.
The zip is already laid out correctly and will place:
BepInEx/plugins/CSGas/CSGasClient.dll <- client plugin
SPT_Runtime/user/mods/CSGasServer/ <- server mod (DLL + db/ + bundles/ + config/)
Note: server mods live under
SPT_Runtime/user/mods/— notuser/mods/at the SPT root. A server mod folder placed at the root is silently ignored by the server, with no error.
Gas-mask tiers are in SPT_Runtime/user/mods/CSGasServer/config/gas_masks.json and are served to the
client at runtime. Cloud size, duration, damage and line-of-sight behaviour are in
BepInEx/config/com.manimal.csgas.cfg.
SPT 4.1.2 is a breaking release on both halves:
- Server: net9.0 → net10.0;
AbstractModMetadata→IModMetadata(andIsBundleModis gone — bundles are detected automatically);IOnLoad.OnLoad()→OnLoadAsync(CancellationToken);OnLoadOrder.PostDBModLoaderremoved; route handlers take a trailingCancellationToken. - Client: 4.1.2 deobfuscated
Assembly-CSharp. Every obfuscated reference was re-pointed at its named type and verified against the shipped assemblies — for exampleThrowWeapItemClass→EFT.InventoryLogic.ThrowWeap,GInterface203→EFT.IMedsController,GClass1006→VolumetricBounds,DamageInfoStruct→EFT.Ballistics.DamageInfo. - Reflection targets: string-literal Harmony targets compile fine and fail silently at runtime, so
all of them were audited against the shipped assemblies —
Grenade.collider_0→_collider,Player.method_74→OnHealthApplyDamage, and theRigidbodyproperty → the field onThrowable.
"Errors were found with mods, NO MODS WILL BE LOADED" — a dependency version range is unsatisfied. SPT aborts the entire mod load on one conflict, so the mod it names is often not the one at fault.
The grenade throws but nothing happens — the M8230 prefab failed to resolve its emission effect.
The client repairs this at the cook and the throw; check LogOutput.log for [CSGas] warnings.
Original mod by Manimal — WelcomeToTarkov/ManimalCSGas. This repository is a port to SPT 4.1.2; all original design and assets are theirs.
MIT — see LICENSE. Copyright (c) 2026 danauraborealis.