Carpet Bomber zones

What this is

Carpet Bomber (lgd_napalm_mortar, behavior carpet_bomber) is the bomb+fire legendary. Each weapon fire spawns a viewport-pinned bomber that follows the player and drops a sequence of bombs along a horizontal line. Every bomb impact produces three damage layers in the same frame: a direct AoE blast, a short-lived fire_patch_zone bullet, and an echo into the shared flame-zone runtime. This page documents the two persistent ground patches (the bullet-behavior patch and the shared-runtime echo) and the rules for how they interact when they overlap.

fire_patch_zone bullet

The fire_patch_zone bullet is a standalone, self-ticking ground patch. It is pushed into world.playerBullets for each bomb impact and runs the fire_patch_zone BulletBehaviors update each frame. It is not a member of the shared flame-zone runtime — it has its own tick rate, lifetime, and cleanup path through the bullet lifetime system.

FieldValueNotes
Bullet archetypefire_patchRenders as a fire patch sprite
Registered behaviorfire_patch_zonepriority: 1
Lifetime2.5 sBoth l and maxLifetime
Zone radiusbomb blast radius x 0.7_zoneRadius = blastR * 0.7
Per-tick damageceil(bomb_damage x 0.06)Stored on dmg, minimum 1
Tick rate5 Hz_zoneTickRate = 5; interval = 0.2 s
MovementNonevx = 0, vy = 0
Pierce / hitsPierce-all_collisionMode = 'pierce_all', pierceCount = 0
Target filterAlive, non-dying, post-spawn enemiesSkips _frozenForLag, _dying, _spawnT > 0.15
Spatial queryenemyGrid.query(x, y, radius + 30)Spatial grid, not a full enemy scan
Hit shapeFilled circle including enemy radius(dx*dx + dy*dy) < (r + enemy_radius)^2
Hits destructiblesNo_canHitDestructibles = false
CapNone specific to this bulletSubject to world.playerBullets.length < 100 spawn gate
Damage tagInherits weapon’s damageTagRouted through damageEnemy
TelemetryrecordWeaponHit(weaponId, dmg) per tickPer-enemy per-tick
VFXRandom ember spawn at 30 percent of framesHalved in v5.156.3
CleanupBullet expires via l <= 0Removed by the standard bullet sweep

The 5 Hz tick and the 2.5 s lifetime yield up to 12 ticks against a stationary enemy that stays inside the radius for the full duration.

Echo into shared flame zones

Each bomb impact also calls spawnFlameZone(landX, landY, 50, bomb_damage * 0.20, 0.8) on the shared flame-zone runtime described in flame-zones. This echo is the in-game “Bomb Pyre” reference in the code comments. The runtime owns its own list, tick interval, eviction policy, and VFX, so the echo behaves identically to a Fire Trail patch or a Thermite Charge pulse once spawned.

FieldValueNotes
Spawn functionspawnFlameZoneFrom src/starship-survivors/engine/effects/custom-handlers.ts
PositionBomb impact (landX, landY)Same point as the blast and the bullet patch
Radius50Fixed; not scaled by blast radius
DPS inputbomb_damage x 0.20Per the shared runtime’s dps contract
Duration0.8 sFixed
Per-tick damagedps x 0.25Runtime constant FLAME_DPS_TICK = 0.25
Tick interval0.25 sRuntime constant FLAME_DPS_TICK
Ticks at full duration30.8 / 0.25 = 3.2, floor effect from tick timer
Total potential per zonebomb_damage x 0.20 x 0.8 = bomb_damage x 0.16If a target stays for the full 0.8 s
Damage tagFireEcho is fire-tagged; spawner damage tag flows through damageEnemy
EvictionFIFO at 16 simultaneous shared-runtime zonesRuntime constant FLAME_MAX_ZONES = 16
Hits destructiblesNoRuntime queries enemies only
RenderLayered radial-gradient fire disk + ember/smoke particlesComposite mode lighter

How the two interact

The bullet patch (fire_patch_zone) and the shared-runtime echo are independent systems that overlap on each bomb impact. They do not share a tick clock, a damage counter, an eviction policy, or a deduplication pass — an enemy standing on a bomb impact takes damage from both layers, and the AoE blast is a third instant hit at the same frame.

InteractionBehaviorSource
Bomb impact frameAoE blast (damageEnemy once) + bullet patch spawn + echo spawnAll three fire in the same update iteration per bomb
Co-located radiiBullet radius is blastR x 0.7, echo radius is fixed 50Bullet patch is wider for default blast >= 72
Stacking per tickIndependent — each system applies its own tickAn enemy in both takes one bullet-patch tick (5 Hz) and one runtime tick (4 Hz) on their own schedules
Lifetime mismatchEcho expires in 0.8 s; bullet patch persists for 2.5 sThe bullet patch keeps ticking after the echo is gone
Shared-runtime cap pressureEach bomb consumes one of 16 shared-runtime slotsA full Carpet Bomber salvo (up to 18 bombs at L20) can evict every other Fire Trail / Thermite Charge / earlier-bomb echo currently active
Bullet cap pressureBullet patch spawn is gated by world.playerBullets.length < 100If the gate fails, the bullet patch is skipped but the AoE blast and the echo still fire
DestructiblesBullet patch and echo both skip destructibles; only the AoE blast can damage themCarpet Bomber’s canHitDestructibles: true applies to the blast layer only
Damage taggingBoth layers carry fireEcho is hard-coded fire; bullet patch inherits the weapon’s damageTag, which is bomb on the base weapon but the bullet patch’s dmg is routed through damageEnemy with whatever tagging the weapon spec carries
VFX overlapBoth systems emit embers at the same pointBullet patch is 30 percent per frame; echo runs the full shared-runtime VFX pass at 0.06 s
Run resetBullet patch is cleared with player bullets; echo list is cleared by clearFlameZonesDifferent code paths, same outcome

The practical effect: a single bomb against a stationary enemy can deliver, in order, one AoE hit, up to three echo ticks over 0.8 s, and up to twelve bullet-patch ticks over 2.5 s, all on top of any other shared-runtime patch the player has active. The 16-slot shared-runtime FIFO is the most likely source of “missing” damage in a stacked Fire-Trail-plus-Carpet-Bomber build, because a single Carpet Bomber salvo can evict every prior Fire Trail patch on the field.