Project Settings

The plugin adds two pages under Edit → Project Settings → Plugins. Both are saved to your project's Config/DefaultMassProjectileSubsystem.ini.

No asset is hardcoded. The defaults below come from the plugin's own Config/DefaultMassProjectileSubsystem.ini, and anything you assign here overrides them. Every asset either page points at is packaged automatically, so swapped-in systems, types, decals and sounds cook without being referenced from a map.

Project Settings, Plugins section
Project Settings, Plugins section
Page Class Purpose
Mass Projectile Subsystem UMassProjectileSettings World rules: budgets, surfaces, decals, audio, networking
Mass Projectile Niagara UMassProjectileNiagaraSettings Which Niagara systems draw tracers, impacts and smoke

Ammo (speed, damage, colour, sounds) is not set here. It lives on the projectile type assets. See Projectile Types.

Many fields have a runtime console override, listed in the CVar column. See Console Commands.


Mass Projectile Subsystem

Performance

Performance category expanded
Performance category expanded
Field Default Description CVar
Max Projectiles 200000 Hard cap on simultaneously alive projectiles. Spawns beyond it are dropped. —

Performance › Collision

Field Default Description CVar
Collision Budget Ms 2.0 Target worker time for the collision pass. When a frame runs over, trace budgets shrink and far rounds trace less often; they recover when there is headroom. 0 = fixed budgets. proj.CollisionBudgetMs
Max Proximity Impulse Queries 48 Near-miss physics sweeps per frame (whole world, not per round). —
Max Impact Radial Queries 24 Radial "shock" overlap queries per frame, closest hits first. —
Max Proximity Impulse Bodies 6 Max simulating bodies pushed by one radial or near-miss query. —

Performance › Tracers

Field Default Description CVar
Max Tracers Drawn Per Frame 30000 Only the closest N projectiles are drawn; all of them keep simulating. An adaptive cull radius converges on this budget. 0 = draw every projectile. proj.TracerBudget
Tracer Cull Distance 0 Hard max tracer draw distance in cm. 0 = unlimited. proj.TracerCull

Performance › Impacts

Field Default Description
Max Impact Events Per Frame 512 Batched impact bursts (dust, sparks, debris) per frame, closest first. The rest get a cheap puff.
Impact Effect Cull Distance 12000 Hits farther than this (cm) from the viewer get no impact burst.

Performance › Smoke

Field Default Description CVar
Max Smoke Samples Per Frame 1024 Lingering smoke puffs spawned per frame, closest first. Peak GPU sprites ≈ this × smoke lifetime × FPS. proj.SmokeBudget
Smoke Cull Distance 10000 Default distance (cm) beyond which types stop emitting smoke. Types can override it on their Visual trait. proj.SmokeCull

World

Field Default Description CVar
Default Wind Velocity 0,0,0 Global wind (cm/s) that air drag works against. Wind Directional Source actors in the level are added on top. proj.SetWind x y z

World Surfaces

One row per physical surface: how that material reacts to any round (ricochet angle, penetration, ballistic limit, decal size). The Default row applies to every surface without its own row. The fields are explained in Physical Surfaces.

World Surfaces with the Metal row expanded
World Surfaces with the Metal row expanded

Decals

Decals and Audio categories
Decals and Audio categories
Field Default Description
Impact Decal Material M_ImpactHoleDecal Fallback hole decal, tinted per surface by its Color vector parameter. Used when a type's Surface FX row leaves a decal slot empty.
Max Decals Per Frame 12 New decals per frame, closest to the viewer first.
Decal Cull Distance 10000 Hits farther than this (cm) from the viewer spawn no decal.
Decal Fade Screen Size 0.0005 Decals fade out once they cover less than this fraction of the screen. Raise it to hide small holes sooner; 0 = never fade by size.
Decal Lifetime 30 Seconds before a decal is removed.
Max Live Decals 300 Hard cap on live decal components; the oldest are destroyed first. 0 = lifetime only.
Mesh Hole Visual Gain 6.0 Multiplier from the physical caliber to the visible hole size, so a 7.62 mm hole still reads at FPS distances. Collision keeps the real size.

Audio

Field Default Description
Flyby Attenuation ATT_BulletFlyby Spatialization for flyby whizzes when the type's Audio trait leaves its own attenuation empty.
Flyby Master Volume 1.0 Master volume for all flybys.
Max Flyby Sounds Per Frame 3 Flybys started per frame.
Min Flyby Interval Seconds 0.04 Minimum gap between frames that start flybys (prevents machine-gun whiz spam).
Impact Attenuation None Spatialization for impact/ricochet/exit sounds. Empty = Flyby Attenuation.
Impact Master Volume 1.0 Master volume for impact sounds.
Max Impact Sounds Per Frame 4 Impact sounds started per frame, closest hits first.
Min Impact Sound Interval Seconds 0.03 Minimum gap between frames that start impact sounds.
Impact Sound Cull Distance 15000 Hits farther than this (cm) from the listener are silent.

Networking

Networking category with Replicated Types
Networking category with Replicated Types
Field Default Description
Net Fire Event Lifetime 13 Seconds a replicated fire event stays in the buffer. This is also the late-join catch-up window. Keep it ≥ your longest Max Lifetime.
Max Buffered Net Fire Events 512 Buffer cap (oldest dropped first). Bounds the join-in-progress payload.
Max Net Catch Up Seconds 13 Max seconds a client fast-forwards a late-arriving shot.
Max Net Projectiles Per Fire Event 256 Server check: max rounds in one client fire RPC (pellets × rounds batched in one frame). A violating client is disconnected.
Max Net Fire Events Per Second Per Player 200 Server rate limit. Excess events are dropped, not kicked.
Max Net Fire Origin Distance Cm 3000 Server check: shots whose muzzle is farther than this from the shooter are dropped (anti teleport-fire). 0 disables.
Replicated Types Rifle, Shell, Plasma Types that can travel over the network. Array order is the wire index and must match on server and clients. Listed types are preloaded at level load.

Rules for Replicated Types

  • Add every type a client can fire. A client firing an unlisted type spawns nothing (the log warns once); only the server can fire unlisted types.
  • Append new types at the end. Reordering changes the index of existing types, which only matters if server and client builds differ.
  • Standalone games may leave it empty. Listing a type still preloads it so the first shot does not hitch.

Debug

Field Default Description
Stats Log Interval 0 Seconds between PERF lines in the log (LogMassProjectiles). 0 (default) disables; try 5 while profiling.
Debug Paths Off Draws every projectile's path coloured by speed (green full, yellow half, red spent; magenta inside a penetrated material) with hit markers (blue enter, cyan exit, yellow ricochet, red stop). Paths and Speeds also prints the speed at each hit. Takes effect live, even during play. Development builds only. CVar proj.DebugPaths.
Debug Paths Duration 3 Seconds each path line stays up (game time, so longer in slow motion). CVar proj.DebugPathsDuration.
Debug Paths Max 500 Path spans recorded per frame, so a mass swarm cannot flood the screen. CVar proj.DebugPathsMax.

Mass Projectile Niagara

Mass Projectile Niagara settings
Mass Projectile Niagara settings

Every slot is optional. An empty or missing system disables only that visual layer; simulation, hits, decals and audio keep running.

Field Default Description
Enable Niagara Visualizer ✔ Master switch. Off = no Niagara components are created (headless, or when you use a custom visualizer).
Projectile System NS_MassProjectile Tracers. One component instance per projectile type, all using this asset with different User.* values.
Impact FX System NS_ProjectileImpactFX All impact bursts in the world, in one instance. Empty = a cheap per-type puff from the Projectile System.
Smoke Trail System NS_ProjectileSmokeTrail Lingering smoke puffs that keep dissolving after the round is gone.
Default Bullet Mesh Material M_ProjectileMesh Used for mesh bullets whose type sets neither Bullet Mesh Material nor a mesh with its own material. Needs Used with Niagara Mesh Particles.
State Channel (Advanced) NDC_ProjectileState Niagara Data Channel written only when proj.UseNDC 1. The shipped systems do not need it.

After you change a slot during a play session, run proj.ReloadAssets, or restart PIE.

To replace the shipped look, see Visuals and Niagara.

Need help? Contact support.