Combat Drone

What it is

Combat Drone is a weapon-category, energy-tagged artifact that registers an always-on tick handler at run start. The handler runs an autonomous drone entity through a five-phase loop: orbit the ship, find an enemy cluster within range, fly to its centroid, deploy a stationary electricity field for a fixed duration, then return to the ship and resume orbit. The field damages every enemy inside its radius once per tick interval as a percentage of each enemy’s max HP, with a reduced percentage against elite-flagged enemies.

Identity

FieldValue
Display nameCombat Drone
Categoryweapon
Damage tagenergy
Triggersignal: run start (handler installed once, ticks every frame)
Trigger thresholdnone — autonomous after install
Passive flat-bonus statmagnet range (flat additive points)

The reward-card flavor describes the artifact as “a drone orbits your ship and zaps nearby enemies.” The runtime expands that into a flying drone with a deployable electricity field; the orbit-and-zap framing is the card-level description, not the literal behavior.

Per-tier values

Tier 1 (common) shares the same five named magnitudes as tier 2 (uncommon) for the triggered effect. The difference between tiers 1 and 2 is the flat passive magnet-range bonus only. Legendary tier adds three new keys to the values record: a dual-beam flag (consumed at runtime to double the field radius), a slow duration and slow percent (declared in data), and a death-explosion flag (declared in data).

TierDmg pct (per tick)Elite dmg pct (per tick)Fire rate (hz)Detection range (px)Orbit dist (px)Dual-beam flagSlow duration (s)Slow pctDeath-explosion flagFlat magnet-range bonus
1 (common)0.700.253.555065offoff+10
2 (uncommon)0.700.253.555065offoff+20
3 (rare)0.850.354.060070offoff+30
4 (epic)1.000.455.070075onoff+40
5 (legendary)1.200.556.585080on1.50.60on+50

The fire-rate value gates how often the drone is allowed to acquire a new target while orbiting (it resets a fire timer to 1 / fire-rate when it returns to orbit). The detection range is the radius around the ship the drone searches for enemy candidates. The orbit distance is the radius of its idle circle around the ship. The dmg-pct and elite-dmg-pct values drive the per-tick damage as fractions of each enemy’s max HP.

Effect

At run start the handler installs a custom_tick action that runs every frame and steps the drone through five phases:

  1. Idle / orbit. The drone orbits the ship at the tier’s orbit distance, rotating continuously. A fire timer counts down; when it expires the drone queries the spatial grid for enemies within the tier’s detection range and computes the centroid of all living, non-dying candidates. If at least one candidate exists, the centroid becomes the fly target and the drone enters phase 2.
  2. Fly to target. The drone moves toward the target at a fixed 450 px/s, facing its movement direction. When it arrives within 15 px of the target it snaps to the target position and enters phase 3 with a 0.3 s pause timer.
  3. Deploy. After the brief pause, the drone activates a stationary electricity field at its current position. Field radius is the base radius of 120 px, or double that (240 px) if the dual-beam flag on the tier is set. Field duration is a fixed 5.0 s and the damage-tick interval is a fixed 0.2 s. A deployment ring, particle burst, and HUD-slot flash play.
  4. Field active. Every 0.2 s the field damages every enemy inside its radius. Damage per affected enemy is the dmg-pct value times that enemy’s max HP, rounded up to at least 1. Enemies flagged as elite (the damage-capped flag) take the elite-dmg-pct value instead. If the field is at the larger legendary radius, both percentages are multiplied by ×1.5. A zap ring, sparks, and HUD-slot flash play on each damage tick. Ambient edge sparks render between ticks. When the field timer reaches zero the drone enters phase 5.
  5. Return to ship. The drone flies back toward the ship at 1.5× the outbound fly speed (675 px/s). When it reaches the orbit radius plus 10 px slack, it re-enters phase 1 and the fire timer resets to 1 / fire-rate.

Telemetry records a deploy event on each field activation and a zap event on each damage tick with at least one hit (carrying total damage and hit count).

The legendary tier’s slow-duration, slow-pct, and death-explosion values are declared in the data values record but not consumed by the current _tickCompanionDroid handler — see the EXTRACT-CANDIDATE flags below.

Stacking rules

  • One drone instance at a time. The artifact provides exactly one drone regardless of tier; tier upgrades replace the per-tier values record wholesale rather than adding a second drone.
  • The damage field is single-instance. Re-deploys only occur after the drone has flown back to the ship and a new detection cycle has fired; there is no overlap between consecutive fields.
  • Per-tick damage applies to every enemy in the field independently — there is no per-target contact cooldown beyond the 0.2 s field-tick interval shared by all enemies inside the radius on that frame.
  • Tier 1 (common) and tier 2 (uncommon) share the same triggered-effect values record. The only difference between those two tiers is the flat passive magnet-range bonus (+10 vs +20).
  • The flat passive magnet-range bonus scales linearly across all five tiers (+10/+20/+30/+40/+50) and is applied as a flat additive to the ship’s magnet-range stat at grant time. It is not a percentage modifier.
  • Tier upgrades are set at run start by meta-progression and do not change during a run.
  • Combat Drone’s run_start trigger and always-on tick pattern is shared with Wayfinder, Stockpile, Adept, Phase Splitter, Shield Emitter, and Gravity Pulse — all install their effects once at run start and tick or apply for the whole run.

EXTRACT-CANDIDATE flags

  • The five-phase autonomous-entity pattern (orbit → seek-centroid → fly → deploy field → return) is currently used only by Combat Drone, but the deployable-field portion (radius, fixed duration, percent-of-max-HP-per-tick) is structurally similar to Force Field Generator. Candidate concept page: concepts/deployable-field-artifacts.md.
  • “Percentage of enemy max HP per damage tick, with reduced percentage against damage-capped (elite) enemies” recurs across Combat Drone and other percent-damage artifacts. Candidate concept page: concepts/percent-of-max-hp-damage.md.
  • “Legendary tier doubles a radius via a flag in the data values record” is the literal shape of the dual-beam flag here and recurs across multiple legendary upgrades (e.g. Crate Buster’s doublePulse). Candidate concept page: concepts/legendary-flag-upgrades.md.
  • “Damage-capped enemy flag” used to gate elite-vs-normal percent damage is a recurring concept across percent-damage artifacts and weapons. Candidate concept page: concepts/damage-capped-flag.md.
  • The custom_tick action type with a registered handler name and pre-resolved numeric params is the always-on tick pattern shared by Combat Drone and Force Field Generator. Candidate concept page: concepts/custom-tick-handlers.md.
  • The legendary tier’s data values record carries slowDuration: 1.5, slowPct: 0.60, and deathExplosion: 1, but the runtime _tickCompanionDroid handler reads only v.dualBeam (for radius), v.dmgPct, v.eliteDmgPct, v.range, v.orbitDist, v.fireRate, and (defensively) a v.stunDuration that is not present in the data. The roll-up artifact summary advertises “1.5 s slow at 60%” and “death explosion” on the legendary card. The slow, the death explosion, and the stun read are a data-vs-runtime mismatch worth a dedicated audit page: concepts/artifact-data-runtime-mismatches.md.
  • The fixed field constants (120 px base radius, 5.0 s field duration, 0.2 s damage tick, 450 px/s fly speed) live in engine/world/artifacts.ts as module-level constants rather than the per-tier data values, even though they materially affect balance. Candidate concept page or audit note: concepts/artifact-runtime-constants.md.