Combat resolves through circle-and-polygon hitboxes: weapons fire bullets and beams that test against enemy bodies; enemies fire bullets that test against the player’s convex hull polygon; the ship’s body itself rams enemies when it makes contact at speed. Every damage event flows through one of two chains — player-takes-damage or enemy-takes-damage — which apply multipliers, route through shield then hull, deliver knockback, and emit feedback (flash, shake, freeze-frame, floating numbers).
Stats / variables tables
Global player-damage multiplier
Stat
Value
Outgoing-damage multiplier (PLAYER_DAMAGE_MULT)
0.263
Player-take-damage chain — multipliers
Stage
Stat
Value
Flat damage reduction
Formula
max(0, 1 − damageReduction / 100)
Flat damage reduction
Clamp at 100% DR
all damage zeroed
Threshold DR
HP fraction at which threshold DR begins
40%
Threshold DR
HP fraction at which threshold DR maxes out
5%
Threshold DR
Maximum reduction
24%
Threshold DR
Ramp
linear from 0% at 40% HP to 24% at 5% HP
Final damage
Formula
amount × flatDR × thresholdDR
Player knockback (on every damaging hit)
Stat
Value
Base knockback magnitude
5
Per-damage magnitude
0.19 × final damage
Knockback cap
15
Direction
Opposite of incoming hit angle
Knockback when invulnerable
0 (skipped)
Knockback when final damage is 0
Still applied (base value)
Shield rules (player)
Stat
Value
Shield-hit invuln-flash duration
0.3 s
Shield-break grace invuln
engine config INVULN
Shield-break linger timer
2.5 s
Bleed-through from shield to hull
None
Hull damage while shield > 0
None
Shield regen delay reset trigger
Any damage
Background shield regen reset trigger
Any damage
Damage taken during background regen
Routes to hull; cancels regen progress
Shield damage breaks kill streak
No
Shield-damage feedback
Stat
Value
Shield-hit camera shake amp
4 + (absorbed / shieldMax) × 5
Shield-hit camera shake dur
0.18 + (absorbed / shieldMax) × 0.12 s
Shield-hit freeze-frame
0.025 + (absorbed / shieldMax) × 0.04 s
Shield-break camera shake amp
11
Shield-break camera shake dur
0.45 s
Shield-break freeze-frame minimum
0.10 s
Shield-break invert-screen duration
0.10 s
Hull-damage feedback
Stat
Value
Hull-hit camera shake amp
6 + (hullDmg / hpMax) × 8
Hull-hit camera shake dur
0.25 + (hullDmg / hpMax) × 0.20 s
Hull-hit freeze-frame
0.04 + (hullDmg / hpMax) × 0.06 s
Hull-hit silhouette flash duration
0.08 s
Red screen flash intensity
0.3 + (hullDmg / hpMax) × 2.0 (capped at 1.0)
Hull damage breaks kill streak
Yes
Damage types (weapon)
Type
Routing
normal
Shield absorbs first; if shield > 0, all damage absorbed; never bleeds to hull
true
Bypasses shield absorption; applies straight to hull
Min travel distance from spawn before bullet hitbox arms
ENEMY_PROJ_ARM_DISTANCE
Fizzling enemy bullet hitbox
Disarmed (visible but inert)
Enemy-enemy separation (boid)
Stat
Value
Separation range
60
Separation force
150
Spawn-protection (no separation)
_spawnT > 0.15 s
Currently enabled in main resolve
Disabled (enemies pass through each other; flock behaviors handle their own spacing)
Lifesteal
Stat
Value
Heal per enemy hit
rawDmg × ship.lifeSteal
Heal cap
ship.hpMax
Lifesteal source
Stacks from artifact procs + Leech modifier (+0.005 per rank)
Damage-floor / flooring
Stat
Value
AOE-damage floor per hit (explosive blast)
max(1, ceil(directDmg × 0.5 × falloff))
Minimum enemy-XP-orb amount
max(1, ceil(…))
Damage-tag particle scaling
max(2, min(10, round(2 + dmg / 60)))
Critical hits
Stat
Value
Critical hit / damage multiplier in core combat
None (no crit roll in the damage chain)
Friendly fire
Stat
Value
Player damage to player
None
Enemy damage to enemy
None (enemy bullets only collide with player; explosive AOE only damages enemies and destructibles)
Reflective affixes
Bounce a copy of damage back toward player via affix filter chain
Gauntlet kill-switch
Stat
Value
ship._gauntletPlayerDamageDisabled
Suppresses all player-sourced damage to enemies for the duration of the gauntlet
How it works (gameplay flow)
Player takes damage
Invuln gate first: if the ship is invulnerable, damage and knockback are both skipped.
Flat DR multiplier applied (damageReduction / 100, clamped at 100%).
Threshold DR applied: at low HP the player becomes increasingly durable, reaching 24% damage reduction at 5% HP.
Final damage = amount × flatDR × thresholdDR.
Knockback applied unconditionally (capped at 15) opposite the hit direction. Even zero-damage hits push the ship.
If shield > 0, the shield absorbs the entire final damage value. Excess damage past shield HP is discarded. Hull is untouched.
If shield == 0, hull takes the damage (multiplied by hpDamageMult if the source provides one; shooter machine-gun bullets use 0.35).
When this hit drops the shield to zero, the ship gains shield-break grace invulnerability so the same attack does not chunk hull in the same frame, and shield enters background-regen-from-zero mode (damage during regen routes to hull and cancels regen progress).
Shield regen delay timer resets to ship.shieldRegenDelay on every damage event.
Hull damage breaks the kill streak; shield damage does not.
Enemy takes damage
Dead, frozen-for-lag, dying, charger-phase-2, and per-part hit-immune enemies all reject damage outright.
Boss shield (where present) absorbs first; if it absorbs the full hit, no bar drain.
Shred multiplier scales remaining damage (shredded enemies take more).
Boss damage cap applies after filters: 30 + maxHP × 2% per hit. Shared-health boss bodies cap against the live pool of all bar-contributing bodies, not just the one being struck.
After a capped hit, the boss part enters 200ms hit-immunity.
Damage is subtracted, flash and squash trigger, floating damage number spawns.
Personal Space artifact knockback applies (elite pack leaders are immune).
Lifesteal heals the player by damage × ship.lifeSteal.
On lethal damage the enemy is frozen-for-lag (HP=0, lag-bar drains visually) before transitioning to dying state; kill credit, signals, kill-streak, XP orbs, and elite/boss bonuses all fire at the kill-blow moment, not when the visual finishes.
Ship contact / ram damage
Triggered when the ship’s hull polygon overlaps an enemy collision circle.
Ship is invulnerable from this path while ship.invulnerable is true.
Mass-weighted push-apart separates ship and enemy by their mass fractions of the overlap.
If shipSpeed ≥ ram threshold (default 150 u/s): ram damage applies to the enemy (lerp 40 → 1000 across speed range, × meleeMult), ship velocity bleeds by the mass-share factor.
T-BONE label fires when the enemy lies within ±40° of the ship’s heading at the moment of ram.
Charger in phase 2 and charger-recovering states skip the contact pass entirely.
Boss damage caps
Single-body boss / dmg-capped enemy: each hit capped at 30 + hpMax × 2%, plus 200ms per-part immunity.
Shared-health boss: each hit capped at 30 + (sum of live bar bodies’ hpMax) × 2%. Non-player damage sources cannot damage shared-health bodies at all.
Boss shield (hasShield) is absorbed before the cap is computed.
Interactions
Weapons: damage flows from each weapon’s WeaponCoreSpec — base damage, fireRate, projectileCount, blastRadius, chainCount, beamWidth, behavior tags, plus damageTag and damage_type (‘normal’ vs ‘true’). Legendary weapons carry a secondaryDamageTag that fires a second damage-tag signal.
Modifiers (horizontals): Health (hpMax + damageReduction + hpRegen), Shield (shieldMax + regen rate + regen delay), Vitality (hpRegen), Bulwark (damageReduction), Charge / Overshield (shield), Leech (lifeSteal), tagged damage modifiers (damage_bullet / energy / fire / bomb at +25% per rank, damage_all at +10% per rank).
Affixes: filterIncomingDamage hooks on shielded, shielded_respawn, gated, periodic_invuln, reflective, reflective_burst, phasing, hardened, armored — each can scale, gate, or zero an incoming hit; onDeath hooks on volatile, gravity_well.
Artifacts: Personal Space (weapon knockback), legendary stun (weapon stun duration), Reactive Shield (listens to shield_hit signal), Soul Leech (listens to enemy_kill).
Status effects: shredded enemies take a multiplier from getShredMult.
Does not roll critical hits in the core damage chain.
Does not apply friendly fire between player projectiles and the player ship.
Does not damage enemies with other enemies’ projectiles or explosions.
Does not bleed shield damage through to hull; if shield is alive, it absorbs the entire incoming hit and any excess is discarded.
Does not regenerate hull HP from this module (hp regen is driven elsewhere; this module only handles damage application, lifesteal heal, and shield regen-delay reset).
Does not let shared-health boss sub-bodies be damaged by non-player sources.
Does not allow elite pack leaders to be knocked back or stunned by the weapon-knockback artifact path.
Does not insert dying, frozen-for-lag, or spawn-protected enemies into the collision grid.
Does not let one boss part be chunked independently of its encounter: shared-health caps and per-part hit immunity bound burst DPS.
Does not apply the explosive-blast AOE to the primary target a second time.
Does not require destructible AOE damage — destructibles destroy only on direct ship contact.
Does not enable enemy-enemy separation in the main resolve pass; pass-through is the default.
Does not apply ram damage or speed bleed when the ship is invulnerable.
Does not apply knockback to the player when invulnerability blocks the hit.
Does not skip knockback when final damage is zero — the base 5-unit shove still fires.