Star Halo cooldown

What this is

Star Halo’s spin phase deals light sweep contact damage as its stars orbit the player. The re-hit gate for that sweep is not a fixed cooldown duration written in the weapon spec — it is derived at runtime from the spin geometry: one full revolution of the halo must elapse between two hits from the same star on the same enemy. This guarantees that a given star can hit a given enemy at most spins times across the cast, no matter how long the enemy sits inside the ring.

The cooldown lives per-star (each orbiting star has its own contact map keyed on enemy reference), so an enemy parked under the formation still takes up to starCount distinct hits per revolution as different stars sweep across it.

The formula

The cooldown is computed each frame the spin phase runs.

QuantitySourceDefault
spinDurationringSpinDuration on the spec, copied to b._ringSpinDuration at spawn3.2 seconds
spinsringSpins on the spec, copied to b._ringSpins at spawn3 revolutions
revolutionPeriodspinDuration / Math.max(1, spins)1.067 seconds at the default 3.2 / 3

A hit is permitted on an enemy only when one of these holds:

ConditionBehavior
Enemy not present in this star’s contactCooldowns mapApply damage, write the current spinT into the map
spinT - lastHitTime >= revolutionPeriodApply damage, overwrite the map entry with the current spinT
spinT - lastHitTime < revolutionPeriodSkip — no damage, no VFX, no telemetry

spinT is the bullet-local spin clock (seconds since the spin phase began, accumulated frame-by-frame). The check uses this local clock, not the global game time, so pausing the cast or speed-modifying the bullet does not desync the gate.

Per-enemy sweep damage during spin is light: Math.max(1, Math.ceil(starDmg * 0.25)) — 25% of the per-star explosion damage, floored at 1.

Derived hit budget

Because the gate is exactly one revolution and the cast runs for exactly spins revolutions, each (star, enemy) pair caps at spins hits per cast. Stars do not share contact maps, so an enemy in range of every star can absorb up to starCount * spins sweep hits in the same cast.

LevelstarCountspinsMax sweep hits per enemy per cast
L15315
L48324
L812336
L1218354
L1624372
L2030390

These are maximums — an enemy only attains them by sitting in the sweep radius of every star for the full cast, which only happens if the enemy is at or near the ring’s circumference for the entire 3.2-second spin.

Why it differs from per-target-contact-cooldown

The standard per-target-contact-cooldown gate is a fixed seconds-per-hit value read from the weapon spec (e.g. Sweep and Fire Ring use 0.18 s, Line and Magnetar use 0.08 s, default 0.3 s). It is independent of weapon geometry — a faster orbit just lets the blade re-hit at the same wall-clock cadence.

Star Halo’s gate is geometry-locked:

Axisper-target-contact-cooldownStar Halo cooldown
Source of the durationStatic field on the specComputed from spinDuration / spins at runtime
Granularity of the contact mapPer bullet, per enemyPer star, per enemy (each star inside the coordinator bullet keeps its own map)
Scales with weapon levelNo — same gate at L1 and L20No directly, but spins=3 is constant so the gate is constant; level scales starCount, not hit cadence
Couples to visual rotationNo — re-hit cadence and visible motion are independentYes — exactly one rotation between hits, so the visual loop is the cooldown
Hit-budget cap per castUnbounded — depends on cast lifetimeHard-capped at spins per (star, enemy), starCount * spins per enemy
Map cleared on bullet recycleYesYes (the coordinator bullet owns the star list and dies with the cast)

The design intent is different too: the standard cooldown smooths a continuous-contact weapon into a rhythmic tick. Star Halo’s gate enforces a discrete, countable damage event — exactly spins taps from each star — that lines up with the theatrical 3-revolution cast. Damage during spin is intentionally small (25% of per-star explosion damage); the cast’s real damage comes from the post-spin burst-out + per-star AoE explosion, not the orbit sweep.