Flame zones
What it is
A flame zone is a persistent circular ground patch that ticks damage to every enemy inside its radius for a fixed lifetime. One shared runtime owns the active-zone list, damage ticking, expiry, and VFX, so every source that spawns a patch — the Fire Trail weapon, the Thermite Charge artifact, and the Carpet Bomber’s per-bomb echo — reads consistently and stacks predictably. The Plasma Mortar’s persistent plasma patch is mechanically similar but runs on its own bullet-behavior path, not the shared runtime.
Mechanics
Every shared-runtime zone is described by five numbers at spawn time: position (x, y), radius, dps, and duration. After that the runtime owns it.
| Parameter | Value | Notes |
|---|---|---|
| Damage tick interval | 0.25 s | Fixed for all shared-runtime zones |
| Per-tick damage | dps × 0.25 | Applied once per tick to every enemy in radius |
| Target filter | Alive, non-dying enemies | Skips enemies flagged _dying or already dead |
| AoE shape | Filled circle | Inclusive of zone radius; ignores enemy hit radius |
| Spatial query | Spatial grid bucket | Candidates filtered by squared distance |
| Max simultaneous zones | 16 | Oldest zone evicted FIFO when a 17th spawns |
| Expiry | duration timer reaches 0 | Final burst VFX plays, zone is removed |
| VFX emit interval | 0.06 s | Per-zone ember and smoke spawning |
| Render order | Beneath particles and sprites, above terrain | Composite mode “lighter” for additive bloom |
| Run reset | Cleared on new run | No carry-over between attempts |
The runtime does not check line-of-sight, terrain, friendly fire, or shield phase. It does not stack distinct damage instances on the same enemy in the same tick — overlapping zones each apply their own tick independently, so an enemy standing in three patches takes three ticks per 0.25 s.
Damage math
Per-tick damage is the only quantity the runtime applies. DPS is the input contract and is interpreted directly:
| Formula | Meaning |
|---|---|
per_tick = dps × 0.25 | What the enemy actually takes each 0.25 s |
ticks_per_zone = duration / 0.25 | How many ticks a zone delivers if a target stays the full lifetime |
total_damage_if_stationary = dps × duration | Cap on damage a single zone deals to a single non-moving target |
Two of the three sources convert between the dps contract and a designer-facing total in their own code:
| Source | Designer-facing input | Conversion to dps |
|---|---|---|
| Fire Trail | damage stat is total damage per patch | dps = damage / lingerSec |
| Thermite Charge | dps provided directly | None |
| Carpet Bomber echo | Bomb damage scaled by 0.20 | dps = bomb_damage × 0.20 (passed as dps for an 0.8 s zone) |
The Fire Trail conversion is why doubling its linger does not change total potential damage per patch — the engine just spreads the same total across more ticks.
Sources that spawn shared-runtime zones
| Source | Radius | DPS at spawn | Duration | Cadence |
|---|---|---|---|---|
| Fire Trail (L1) | 75 | 17.5 (= 70 / 4) | 4.0 s | One patch per shot, fires every 1.0 s, always behind the ship |
| Fire Trail (L20) | 122.5 | 16.4 (= 1001.5 / 5.9) | 5.9 s | One patch per shot, fires every 1.95 s |
| Thermite Charge (artifact) | 225 | 120 | 9.0 s | Auto-pulse every 2.5 s under the ship |
| Carpet Bomber per-bomb echo | 50 | bomb_damage × 0.20 | 0.8 s | One zone per bomb impact, on top of the Carpet Bomber’s own fire-patch bullet |
The Plasma Mortar’s persistent zone is documented for completeness but runs on a separate code path (a long-lived zone bullet, not the shared runtime), so its tick rate, eviction policy, and stacking rules differ:
| Source | Radius | Per-tick damage | Tick rate | Duration | Notes |
|---|---|---|---|---|---|
| Plasma Mortar landing zone | 80% of weapon blast radius | ceil(impact_damage × 0.10) | 4 Hz | 3.0 s | Carries energy tag, not part of the 16-zone cap |
Interaction notes
- Zones inherit the spawner’s damage tag through the
damageEnemycall chain. Fire Trail, Thermite Charge, and Carpet Bomber echoes deal fire-tagged damage; the Plasma Mortar’s separate zone deals energy-tagged damage. - The 16-zone FIFO cap is global across all shared-runtime sources. A wave of Carpet Bomber echoes can evict older Fire Trail patches mid-trail.
- Stacking the Thermite Charge artifact onto a Fire Trail build produces additive ticks, not multiplicative — each zone applies its own dps × 0.25 per tick to overlapping targets.
EXTRACT-CANDIDATE: The Plasma Mortar’s plasma_fire_zone bullet-behavior is a parallel persistent-damage-patch system. Its own page (or a unified “persistent damage zones” concept) could absorb it, with this page narrowing to “shared flame-zone runtime.”
EXTRACT-CANDIDATE: The Carpet Bomber landing also spawns a second fire_patch_zone bullet-behavior patch alongside the shared-runtime echo. That is a third persistent-zone code path and is not covered here.
Summary: Documented the shared flame-zone runtime that backs Fire Trail, Thermite Charge, and the Carpet Bomber’s Bomb Pyre echo. Specified the 0.25 s tick interval, 16-zone FIFO cap, dps contract, and per-source spawn parameters in tables. Flagged that Plasma Mortar and Carpet Bomber’s main fire-patch bullet are separate parallel systems (extract candidates).