Gated
1. What it is
Gated is a boss-flavored affix that makes the host take zero damage while any sibling enemy in the same gate group is still alive. Unlike shielded, the affix does not spawn its own anchors — it reads the live enemy list and looks for siblings that already carry a matching gate-group identifier. Killing every sibling in the group drops the gate and lets damage reach the host.
2. Identity
| Field | Value |
|---|---|
| Affix ID | gated |
| Category | boss-flavored |
| Priority | 90 |
| Hooks | filterIncomingDamage |
| Roll pool | none (never appears on world-roaming elites) |
| State requirement | gateGroupId (string, throws if missing) |
Gated sits one rank below shielded in the affix priority order (90 vs. 100). The damage filter chain runs in descending priority, so any shielded-style filter on the same host resolves first; gated then has its say. A zero return short-circuits every lower-priority filter.
3. Mechanics
3.1 Gate-group identification
The affix uses a single piece of instance state to identify its sibling group.
| State key | Type | Default | Behavior |
|---|---|---|---|
| gateGroupId | string | none (required) | Identifier the filter looks for on sibling enemies |
If gateGroupId is missing or empty, the hook throws. There is no fallback.
3.2 Sibling marking
The host carrying the gated affix and the siblings that gate it are wired through two different surfaces of the boss roster:
| Roster entry | Carries | Surface key |
|---|---|---|
| Gated host | affixIds: ['gated'] plus affixState.gated.gateGroupId | affixState.gated |
| Gate-group sibling | No gated affix; field on the enemy entity | affixState.gateGroup.gateGroupId |
At encounter spawn, the boss runtime reads each sibling’s affixState.gateGroup.gateGroupId synthetic key and stamps it onto the enemy as a top-level gateGroupId field. The gated filter on the host then queries that field directly on each enemy in the world — siblings never need to carry the gated affix themselves.
3.3 Damage filter
On every incoming hit against the host, the filter walks the world enemy list and checks for any sibling that:
| Condition | Required state |
|---|---|
| Not the host itself | sibling reference differs from host |
| Alive | exists, not frozen for lag, not dying, hp > 0, alive flag set |
| Member of the gate group | gateGroupId field matches the host’s gate-group state |
Any sibling that passes all three conditions causes the filter to return zero. If no qualifying sibling is found, the original damage value passes through.
| Sibling state | Return |
|---|---|
| At least one qualifying sibling alive | 0 (incoming damage zeroed) |
| All qualifying siblings dead | dmg (unchanged, passes to next filter) |
3.4 Cleanup
The gateGroupId field is cleared on enemy recycle in the spawner pool — without that clear, a former gate-group member recycled into a normal trash mob would inherit the identifier and break the next encounter’s gate logic.
4. Which bosses use it
| Boss | Gated host | Group members | Gate group id |
|---|---|---|---|
| Junkrat Captains | Pierre (HP 3000) | Marco-A (HP 1500), Marco-B (HP 1500) | captains_marcos |
Pierre carries the gated affix and is invulnerable while either Marco is alive. Both Marcos share the boss health pool, fire their own ability rotation, and cannot themselves be gated. Pierre’s gold halo flares to full alpha as each Marco dies, signalling the gate is opening.
The captains encounter ships a total bar pool of 6000 HP (Pierre 50%, Marcos 25% each), arena shape rect 700 × 500.
5. Comparison to shielded
| Aspect | shielded | gated |
|---|---|---|
| Priority | 100 | 90 |
| Hooks | onSpawn + filterIncomingDamage | filterIncomingDamage only |
| Anchors spawned by affix | yes, on host spawn | no, siblings are roster-defined |
| Anchor identity | dedicated anchor flags (_isBossAnchor, no affixes, no shared HP) | normal enemies, often share HP with boss |
| Sibling marker | affix instance owns an anchor list | top-level gateGroupId field on each enemy |
| Placement | arena ring at 0.42 radius, evenly spaced | wherever the roster entry’s position resolves to |
| Respawn variant | yes (shielded_respawn) | none |
| On-death reward signal | boss_anchor_destroyed | normal kill signal (siblings count as boss kills) |
In short: shielded is anchor-driven (one host, N affix-spawned anchors that do not share HP); gated is roster-driven (one host plus N hand-authored sibling bosses that do share HP). Shielded suits arenas built around an off-host objective; gated suits a multi-character boss fight where every member has their own bar, ability set, and bar-pool slice.
6. EXTRACT-CANDIDATE flags
- The “alive” definition (exists, not frozen for lag, not dying, hp > 0, alive flag set) is shared with the shielded variants and likely every other affix that checks sibling liveness — canonical home is the affixes overview page.
- The damage-filter short-circuit rule (descending priority, zero return short-circuits) is a global affix-system rule, not gated-specific.
- The pool-recycle clear for
gateGroupId(and_isBossAnchor,phaseIndex) is a cross-affix concern; if more roster-driven affixes appear, the list belongs on the affixes or enemies-pool concept page.
7. Summary
Gated zeroes incoming damage to its host while any sibling carrying the same gateGroupId is alive. The affix does not spawn its own anchors — group siblings are authored directly in the boss roster, tagged with a gateGroup.gateGroupId synthetic key that the boss runtime stamps onto the enemy. Only Junkrat Captains uses it in the current roster: Pierre is gated by Marco-A and Marco-B, both of whom must die before Pierre takes damage. Compared to shielded, gated is lighter weight (no onSpawn, no anchor bookkeeping) but assumes the encounter has hand-authored sibling bosses to act as gate keys.