Feature 03 / FF CBRN
Hazards thatkeep the receipt
Fog banks, gas zones or your own danger provider. Three ways to breathe, a supply chain that runs out, ACE pain and a simulation that costs no network ticks.
danger / maxDanger × dt
Protection modes, evaluated every tick
Illustrative gauge. Danger is resolved on each client from fog, zones or a mission provider.
Danger
Local simulation. No hazard server.
Every player machine evaluates its own exposure. There is no authoritative server hazard state, so no network tick is spent on danger and a client hitch cannot drain a whole filter.
- Safe predicate — a mission callback can declare an interior safe.
- Custom provider — a reactor, scripted plume or sensor network replaces everything below.
- Fog layer — live
fogParams, scaled by altitude betweenfogDangerStartandfogDangerFull; a ceiling fades danger out overfogTransitionmetres. - Zones — full strength inside
innerRadius, linear fade toradius, filtered by min/max ASL. Fog and zones combine withmax. - Clamp — the result is clamped to
maxDanger.
Vehicle occupants and Zeus players are treated as sheltered: danger and supply drain drop, exposure recovers, load traits and radio range are restored, and the HUD hides. The tick keeps running, so effects resume immediately on exit.
Protection
Breathe three ways, or not at all.
| Mode | Requires | Drain |
|---|---|---|
air | Connected SCBA backpack | airUseRate plus fatigue, multiplied by scbaUseMultiplier |
backpackFilter | Connected combination backpack with cartridge minutes | Filter rate plus hazard, plus a low-stamina bonus from ACE anaerobic reserve |
maskFilter | Fitted filter in compatible facewear | Filter rate plus hazard; stamina does not change use |
none | — | No protection: exposure accumulates |
The fitted mask family is tracked independently of the visual respirator class, so switching between filter and no-filter models does not reset remaining minutes. Backpack supplies live on the backpack container and survive a respawn when the loadout is preserved.
Consequences
Exposure, pain and breathing stress.
Exposure
Accumulates as danger/maxDanger * dt and decays with recoveryRate. Crossing
damageThreshold applies ACE body damage.
Pain
Applied per second from painRate. Filtered players skip it unless missingSuitPainEnabled
is on.
Breathing stress
Ramps while unfiltered and decays after filtration resumes. It drives a loadCoef multiplier, a
stamina cap and extra blur.
The multiplier is recomputed from the current trait, so ACE or another system can recalculate load without being overwritten blindly.
Integrate
Your hazard, the same HUD.
FF_cbrn_config = createHashMapFromArray [
["dangerProvider", { params ["_unit"]; _reactorDanger }],
["onDangerChanged", { params ["_unit", "_danger"]; }],
["onProtectionChanged", { params ["_unit", "_protection"]; }],
["maskClasses", ["My_Respirator"]],
["suitClasses", ["My_Suit"]]
];
Class arrays let mods with their own respirators and suits work without code changes.
cbrnDrainFilter drains only the active filter, which is how the pulse recovery profile applies equipment
consequences. cbrnDecontaminate is available for scripted decon stations.
Feature 03 / 08 Every system deep dive