Phasing
What it is
Phasing is a world-roaming elite affix that cycles a host between a vulnerable state and a short, recurring invulnerability window. It teaches the player to time big hits — large bursts during the window do nothing; large bursts in the gap drop the host fast. The affix is rolled at spawn time on elite-pack leaders by the world-elite affix roll pool; it does not require a boss arena, anchor enemies, or boss-bar plumbing.
The host emits a soft-blue particle haze while the window is active. Outside the window the haze stops and damage lands normally.
Identity
| Field | Value |
|---|---|
| Affix ID | phasing |
| Category | world-roaming elite |
| Priority | 75 |
| Hooks | onUpdate, filterIncomingDamage, onDeath |
| Roll pool | world-roaming elite affixes |
| Halo palette entry | soft blue (r 135, g 180, b 255) |
Priority 75 sits between reflective_burst (70) and periodic_invuln (85). The damage filter chain runs in descending priority order; phasing’s filter therefore fires after reflective_burst’s filter. When the host is inside the invuln window, phasing returns zero and short-circuits every lower-priority filter (reflective_burst at 70, armored at 20, hardened at 25).
What it does
On every frame, the affix decrements a cycle timer by the frame delta. When the timer reaches zero it wraps back to the full cycle interval. The host is “inside the invuln window” whenever the timer is less than or equal to the window duration. A fresh window opens at the start of every cycle and lasts for the window duration; the rest of the cycle (cycle interval minus window duration) is the vulnerable gap.
While the window is active, any incoming damage hit against the host is filtered to zero. The amount of damage that was blocked is reported to cloud telemetry on each blocked hit so the cycle and window can be tuned from production data.
While the window is active, the affix also emits roughly six soft-blue particles per second in a ring around the host as the visual tell. No particles emit during the gap.
On host death, the affix drops a Comet Fragment prop at the death point through the shared prop-spawn adapter. The drop is fail-silent when the prop pool is at capacity. The fragment’s break-effect is owned by the prop, not the affix.
Per-tier values
The affix has a single default tuning; per-roster overrides go through the affix instance state (windowDuration, cycleInterval). Mistyped overrides crash at first hook invocation.
| Param | Default | Units | Source key |
|---|---|---|---|
| Window duration | 1.2 | seconds | windowDuration |
| Cycle interval | 8 | seconds | cycleInterval |
| Visual emit rate during window | 6 | particles/sec | (constant) |
Derived from those defaults:
| Quantity | Value |
|---|---|
| Vulnerable gap per cycle | 6.8 s |
| Invuln uptime fraction | 0.15 (15%) |
| Windows per minute | 7.5 |
The cycle timer initializes to the full cycle interval on the host’s first frame, so the host starts in the vulnerable gap and the first window opens after roughly (cycle interval minus window duration) seconds of host life.
How it interacts
Damage filter ordering
| Other affix | Priority | Order relative to phasing | Outcome when phasing window is active |
|---|---|---|---|
| shielded | 100 | fires before phasing | If shielded zeros damage, phasing never sees the hit |
| shielded_respawn | 100 | fires before phasing | Same as shielded |
| respawn_as | 95 | n/a (no damage filter) | — |
| gated | 90 | fires before phasing | If gated zeros damage, phasing never sees the hit |
| periodic_invuln | 85 | fires before phasing | If periodic_invuln zeros damage, phasing never sees the hit |
| reflective_burst | 70 | fires after phasing | When phasing window is active, returns 0 and reflective_burst never runs |
| gravity_well | 55 | n/a (no damage filter) | — |
| regenerating | 50 | n/a (no damage filter) | — |
| burning_aura | 60 | n/a (no damage filter) | — |
| summoner | 40 | n/a (no damage filter) | — |
| hardened | 25 | fires after phasing | Phasing returns 0; hardened never sees the hit |
| armored | 20 | fires after phasing | Phasing returns 0; armored never sees the hit |
When the phasing window is active, the priority-75 filter returns zero and short-circuits the rest of the chain for that hit.
Co-presence with other affixes
| Other affix | Trigger | Effect | Telemetry key |
|---|---|---|---|
| hardened | Phasing window active | Hardened jumps straight to peak reduction (skips its lifetime ramp) | affix_interaction:phasing_hardens |
| regenerating | Phasing window active | Regen rate doubles for the duration of the window | affix_interaction:regen_phasing_sealed |
| summoner | Summoner proc fires (host crosses its HP threshold) | A fresh phasing invuln window snaps open the same frame (panic blink) | affix_interaction:summoner_phasing_panic_blink |
| gravity_well | Phasing window active | Gravity-well swirl particle emit rate doubles (visual depth only, no mechanical change) | affix_interaction:gravity_phasing_dense_swirl |
The summoner interaction is the only one that mutates phasing’s own state directly: it overwrites the phasing cycle timer to the window-duration value, forcing the host into the active window for that frame and continuing from there.
Telemetry
| Event | Value |
|---|---|
| affix_proc:phasing_blocked | The pre-filter damage amount the window absorbed (per hit) |
| affix_proc:phasing_drops_comet | 1 if the prop spawn landed, 0 if the pool was capped |
| affix_interaction:phasing_hardens | Pre-filter damage on a hit where hardened was also present |
| affix_interaction:regen_phasing_sealed | Doubled heal amount (≈1/sec sampled, not per-frame) |
| affix_interaction:summoner_phasing_panic_blink | 1 per panic-blink trigger |
| affix_interaction:gravity_phasing_dense_swirl | 1 (≈1/sec sampled while both are active) |
Death drop
| Prop dropped | Drop chance | Notes |
|---|---|---|
| Comet Fragment | 100% (subject to prop pool cap) | Palette- and theme-matched (phasing ice-blue ↔ comet ice-blue); fragment’s break-effect grants a 35% speed boost |
EXTRACT-CANDIDATE
- The “windowed invulnerability” pattern (cycle timer, window-active predicate, blocked-damage telemetry) is shared with periodic_invuln (same skeleton, different cancel rule). A common concept page for “windowed-invuln affixes” would canonicalize the cycle/window/gap vocabulary and let the per-affix pages link rather than restate.
- The damage filter priority-chain rule (descending priority, zero short-circuits, filters skip if a higher-priority filter already zeroed the hit) is a system-wide affix rule and belongs on the affixes overview page.
- The “elite drops a themed prop on death” pattern repeats across phasing, regenerating, reflective_burst, summoner, hardened, gravity_well, and volatile. The common contract (palette match, pool-cap fail-silent, telemetry key shape
affix_proc:<id>_drops_<prop>) is a candidate for an affix-prop-drop concept page. - Affix × affix co-presence as a category (paired triggers, telemetry shape, “sealed/turtle/panic-blink” naming convention) is becoming its own subsystem; an affix-interactions overview page could capture the contract once instead of repeating each pair on both participants’ pages.