pixelsmokefx

v1.1.0·Updated 2026-08-13

Real low-poly 3D smoke on every bullet hit - no particles, no assets, generated at runtime. Your shots always render; enemy shots only on-screen within 200 m. One DLL for BepInEx 5.x.

About this mod Author’s original text

Pixel Smoke Fx

Low-poly 3D smoke for bullet hits in Ravenfield (EA29+). Zero particles, zero assets, zero external files - the smoke mesh is generated at runtime inside the plugin.

Built for BepInEx 5.x on Ravenfield EA29 and newer (Unity 2020.3-era builds; verified on EA35).

What it does

Every bullet hit (non-explosive weapons) leaves a burst of three round low-poly smoke puffs that expand fast, shrink exponentially, and fade to nothing - pure code, no particle systems, no texture files. Since v1.1.0 the puffs are damage-sized (sniper hits billow big, shotgun pellets stay tiny) and styled as a black anime/soot cloud: smooth round profile (subdivision-3 icosphere, gentle displacement), per-face vertex colors baked in three discrete brightness bands (bright top / mid / dark bottom - classic cel shading), no flat black silhouette.

hit -> SpawnDecal hook -> pool slot (no Instantiate/Destroy churn)

-> icosphere mesh (generated once, shared by all slots)

-> damage -> size factor (clamped) -> expand (0.04 -> 1.0 in 0.15s)

-> exp shrink -> alpha fade -> back to pool

Key behaviors

| Behavior | Default | cfg key |

|----------|---------|---------|

| Master switch | on | [General] Enabled |

| Player shots render ALWAYS (no distance/frustum culling for your own fire) | on | [General] AlwaysRenderPlayer |

| Other shots render only when on screen | - | frustum culling |

| Other shots render only when closer than 200 m | 200 m | [Performance] HalfDist |

| Full size under 60 m, half size beyond | 60 m | [Performance] FullDist |

| Pool slots (concurrent smoke cap) | 120 | [Performance] PoolSize |

| Same-gun burst window (all shotgun pellets render) | 0.08 s | [Performance] BurstWindow |

| Min gap between bursts (global / per gun) | 0.005 / 0.02 s | [Performance] GlobalCooldown / GunCooldown |

| Blob lifetime | 1.5 s | [Performance] Lifetime |

| Expand window / shrink rate / master size | 0.15 / 2.2 / 0.7 | [Fx] ExpandTime / DecayRate / BaseScale |

| Damage that maps to size factor 1.0 | 40 | [Fx] DamageRef |

| Min / max damage size factor | 0.5 / 1.5 | [Fx] MinSizeFactor / MaxSizeFactor |

| Low-damage pellet floor (shotguns) | 0.25 | [Fx] ShotgunFactor |

Why it's fast

  • No particles: one static mesh per puff (1280 triangles, flat-shaded), shared across all slots.
  • Pooled: objects are reused, nothing is Instantiate/Destroyed per hit.
  • Culled early: off-screen non-player shots skip before any work; renderers outside the frustum skip per-frame pushes.
  • Zero garbage: cached components, cached reflection, zero allocation hot path.
  • 360 renderers absolute worst case (120 slots x 3 puffs) - trivial for this engine.

Requirements

  • Ravenfield EA29+ (any Unity 2020.3-era build; verified on EA35, Steam or standalone)
  • BepInEx 5.x (install to /BepInEx)

Installation

  • Install BepInEx 5.x into the Ravenfield folder if you have not already (run the game once so BepInEx creates its folders).
  • Copy PixelSmokeFx.dll into /BepInEx/plugins.
  • Launch the game. The plugin logs Pixel Smoke Fx: harmony hook CONFIRMED on first boot.

(Folder structure: see INSTALL.txt in the same zip.)

Configuration

All settings live in BepInEx/config/com.local.pixelsmokefx.cfg (auto-created on first boot).

| Section | Option | Meaning |

|---|---|---|

| General | Enabled | master switch |

| General | TargetWeapon | only weapons whose name contains this substring; empty = all non-explosive guns |

| General | AlwaysRenderPlayer | shots fired by YOU always render, regardless of distance inside viewport |

| Performance | PoolSize | concurrent-smoke cap (down for old PCs, up for long battles) |

| Performance | GlobalCooldown | min seconds between any two bursts (same-burst hits bypass) |

| Performance | GunCooldown | min seconds between bursts of the same weapon |

| Performance | BurstWindow | hits from one weapon within this window count as ONE shot and all render (shotgun-friendly) |

| Performance | FullDist / HalfDist | size LOD + far cutoff for non-player shots

Install & use Install: follow the bundled instructions

  1. Unzip the archive from playbuff and read the bundled readme / instructions first.
  2. Most mods rely on the game's mod loader — the usual route is a community mod manager (such as r2modman): pick this game, install, and it handles the loader and dependencies.
  3. For a manual install, put the mod files into the matching Mod / plugins folder inside the game directory.
  4. Launch the game to confirm it loaded; mods with listed dependencies need those installed as well.

Install locations vary a lot between mods — the bundled readme is the most reliable guide.

Dependencies

Install these first, or the mod will not work:

BepInEx-BepInExPack_Ravenfield

File & checksum

Filename
pixelsmokefx-1.1.0.zip
File size
116.7 KiB