


Stupidly exaggerated blood visuals! When a bullet physically exits a sosig, it projects blood from the exit wound onto any surface behind it — walls, floors, other sosigs. Real penetration detection means blunt hits, armored stops, and ricochets produce nothing.
noise.png (10 levels, 0.7–1.0 range) so the splatter looks dimensional rather than flat. Dots scale with distance and stretch along the bullet path.Blood color is read from the sosig's actual body color, not hardcoded. Priority order:
Mustard Colour hex string, Ketchup bool).This means alien-colored sosigs from custom scripts, and any sosig whose color NGA overrides, will bleed the right color automatically.
Set a custom blood color instead of each sosig's natural color, using Color Override (hex, e.g. #8C1A1A) and Color Override Mode:
| Mode value | Behavior |
|---|---|
1 |
Soft — replaces the default blood color, but sosigs with a color specifically set via NGA SosigIntegrityConfigs (e.g. zombies) keep their own color |
2 |
Hard — replaces blood color for every sosig, no exceptions |
| anything else (spaces ignored) | Unset — no override, vanilla per-sosig color behavior described above |
All settings in F1 (ConfigurationManager) or the .cfg file in BepInEx/config.
| Setting | Default | Description |
|---|---|---|
| Enabled | true | Toggle all blood effects |
| Lifetime seconds | 30 | How long splash stains persist |
| Max rays per shot | 3000 | Raycasts per penetration event (capped to image pixel count) |
| Cone half-angle | 10 | Half-angle in degrees of the splash spread cone |
| Dot base radius | 0.008 | Base radius of each splash dot in metres |
| Range metres | 50 | Maximum splash cast distance |
| Projection Mode | Animated | How dots appear: Animated / Delayed / Immediate |
| Projection Speed Ratio | 2 | Bullet speed multiplier for dot travel speed in Animated mode |
| Projection Speed Bias | 10 | Flat m/s added to dot travel speed |
| Dot Max Scale | 5 | Maximum size multiplier for dots at full range |
| Dot Scale Range metres | 50 | Distance at which dots reach maximum size |
| Gib Ray Count | 200 | Rays fired on segment explosion |
| Color Override | #8C1A1A | Hex blood color used when Color Override Mode is Soft or Hard |
| Color Override Mode | 0 | 1 = Soft override, 2 = Hard override, anything else = Unset (see Color Override section above) |
Blood only spawns from bullets fired by the player — sosig-vs-sosig gunfire never triggers blood effects, since that crossfire is what causes the worst frame spikes in big fights. This is automatic, no config needed.
Splash is the most CPU/GPU intensive effect. If you are dropping frames, apply these fixes in order of impact.
1. Switch Projection Mode to Immediate
The default Animated mode keeps a live particle system running with thousands of in-flight dots. Immediate removes all flight animation — dots appear the instant the bullet exits. This is the single biggest FPS win. No visual difference in stain placement, only the flying animation is removed.
2. Reduce Max rays per shot
Default 3000 is high. Try 1000 or 500. Below ~200 the splatter starts to look sparse. This directly controls how many raycasts happen per shot and how many dot quads build up per second.
3. Reduce Lifetime seconds
Fewer accumulated stain meshes = fewer draw calls per frame across a long fight. 10–15 seconds keeps the scene looking fresh without piling up hundreds of meshes.
4. Reduce Gib Ray Count
Segment explosions fire rays in 360°. High gib fights (shotguns, explosives, multiple sosigs) multiply this cost fast. Cutting from 200 to 100 helps significantly in those scenarios.
5. Reduce Dot Max Scale
Smaller maximum dot size = less GPU fragment overdraw from large-radius quads at range.
6. Reduce Range metres
Caps the maximum raycast distance. Combined with reduced Max rays per shot, limits the worst-case cost per shot.
Projection Mode = Immediate, Max rays per shot = 500, Lifetime seconds = 10, Gib Ray Count = 100