Volatile

What it is

Volatile is a world-roaming elite affix. When a host enemy carrying the affix dies, it detonates a one-shot explosion at the death point that damages the player if they are within radius and drops a Volatile Crystal prop on the ground. The detonation is purely a death-trigger — the host has no passive aura or per-frame behavior while alive. The affix is rolled at spawn time on elite-pack leaders, never appears on boss-flavored encounters, and does not require a boss arena.

Identity

FieldValue
Affix IDvolatile
Categoryworld-roaming elite
Priority60
HooksonDeath
Roll poolworld-roaming elite affix pool
Halo palette entrymagenta (r 255, g 60, b 200)

Priority 60 only matters for ordering against other onDeath hooks; volatile has no damage filter, so it never participates in the priority short-circuit chain that gates incoming damage.

What it does

On host death, the affix runs four things at the death point in this order:

  1. Emit 24 magenta starburst particles in an evenly-spaced ring with random angular jitter.
  2. If the player ship is within explosion radius, apply a flat damage hit to the player.
  3. Spawn a Volatile Crystal prop at the death point (always attempted, pool-cap failures are silent).
  4. If the host also carries the reflective_burst affix, fire a second chain burst (see “How it interacts”).

The host itself takes no damage from the explosion. The player damage path runs through the engine’s shared damage-player adapter with source tag affix:volatile. The crystal drop is unconditional — it does not depend on whether the player was hit.

Per-tier values

ParamDefaultState key
Explosion radius250 world pxradius
Player damage25damage
Burst particle count24(constant)
Particle speed120–200 px/s (random)(constant)
Crystal drop typevolatile_crystal(constant)
Crystal drop chance100% (pool-cap fail-silent)(constant)
Chain burst particle count (with reflective_burst)18(constant)

The roll pool is allowed to override the radius and damage slots through the affix instance state; mistyped values (string given for a number slot) crash at first hook invocation. Anything not in the table above is fixed and not data-tunable.

How it interacts

Player proximity check

The radius check compares squared distance between the host position at death and the shared player ship. The player is hit only if (ship.x - host.x)^2 + (ship.y - host.y)^2 <= radius^2. Outside the radius, no damage lands but the visual burst and crystal drop still fire.

Volatile Crystal drop

The dropped Volatile Crystal is a prop, not an enemy. It has its own break-time synergy: when destroyed, it has a 25% chance to spawn a burning_aura proximity tick around the next hit. The drop chain is the player kills the volatile elite, a crystal appears at the death point, breaking the crystal can fire a burning_aura tick around the next damaging hit. The drop uses the engine’s late-bound spawnPropAt adapter; if the prop pool is at cap the spawn fails silently and the rest of the death path continues.

Affix × affix: volatile + reflective_burst

If the same host carries both volatile and reflective_burst, the volatile onDeath fires a second chain burst on top of the magenta starburst:

ParamValueSource
Chain burst particle count18volatile onDeath
Chain burst palettepurple (reflective_burst palette)shared palette
Chain damagereflective_burst burstDamage (default 10)reflective_burst state
Chain radiusreflective_burst radius (default 180 world px)reflective_burst state

Both bursts paint the same death point for roughly 1.5 seconds. The chain hit-check is independent from the volatile radius — the player can land outside the volatile radius and still take the reflective_burst chain hit (or vice versa). Telemetry tag: affix_interaction:volatile_reflective_chain.

Affix × affix: volatile + summoner (perceptual only)

If the same host carries summoner, the summoner spawn proc overlays a 4-particle magenta micro-burst at each minion spawn point as a pre-tell that this host will pop on death. This is a visual cue only — the actual volatile explosion only fires when the host itself dies, not when minions die. Minions never inherit the affix.

Pipeline notes

The volatile onDeath hook is the first consumer of the engine’s prop-spawn adapter. The adapter is late-bound at engine boot via setAffixSpawnPropAt; if a hook fires before wiring, the engine throws loudly rather than silently swallowing the drop. The damage-player adapter is wired through the same boot path.

EXTRACT-CANDIDATE

  • The “elite drops a themed prop on death” pattern is shared with regenerating (mineral_vein), reflective_burst (volatile_crystal), phasing (comet_fragment), summoner (scrap_pile × 3), hardened (drone_wreck), and gravity_well (magnetar_pulse). The full prop-drop mapping belongs on a roll-up page in the affixes overview or a dedicated “elite drops” concept page rather than duplicated per affix.
  • The damage-player and prop-spawn late-bound adapter pattern (boot-time wiring with loud-throw on early call) is shared by all world-roaming affixes that touch the player or spawn props. The canonical home is the affixes runtime/architecture page.
  • The 24-particle starburst recipe (evenly-spaced ring, random angular jitter, 120–200 px/s outward speed) is reused by reflective_burst (18 particles, otherwise identical shape). The recipe is a candidate for a shared “affix VFX primitives” sub-page.