Files
healer-man/docs/LICHBORNE_CONTROL_ESCAPE_2026-10-06.md
2026-10-07 13:05:04 -04:00

5.5 KiB
Raw Permalink Blame History

Lichborne control escape — 2026-10-06

Source proof

Lichborne spell 49039 is an exact WoW 3.3.5a source row, not a tooltip-based inference. The selected generated row is wow335-death-knight-lichborne, class death-knight, source profile wow335, talent node talent-2215, learned at level 55. It is a self spell with a 10-second duration, zero cast time, zero GCD, 120-second cooldown, and no power cost. Its spell defense fields are damageClass=0, schoolMask=32, directDamageFromEffects=false, and the complete retained attribute words are Attributes0=262144, Attributes1=163872, Attributes3=0, Attributes5=393224.

The local client profile is World of Warcraft build 3.3.5a.12340, read from ../wow335a/Data/enUS/patch-enUS.MPQ, table DBFilesClient/Spell.dbc. The source-audit artifact at artifacts/enemy-control-followup-2026-10-06/source-audit.json records the raw Spell.dbc row. Its eight raw attribute words, in order, are [262144, 163872, 0, 0, 0, 393224, 0, 0] (0x00040000, 0x00028020, then three zero words, 0x00060008, then two zero words). The active generated source remains src/game/wow335AbilityData.generated.json.

The selected row has exactly three effects. Each is effect type 6 (APPLY_AURA) and aura type 77 (MECHANIC_IMMUNITY), with caster recipient and zero points-per-level. The raw Spell.dbc base-points are zero for all three; the selected generator represents them as base points 1 and preserves sourceBasePoints=0.

Effect Raw misc value Mechanic Raw base points Die sides Selected source base points
0 1 Charm 0 1 0
1 5 Fear 0 0 0
2 10 Sleep 0 0 0

Attributes1=163872 is 0x00028020; it includes SPELL_ATTR1_IMMUNITY_PURGES_EFFECT=0x00008000. Attributes5=393224 is 0x00060008; it includes SPELL_ATTR5_ALLOW_WHILE_STUNNED=0x00000008, SPELL_ATTR5_ALLOW_WHILE_FLEEING=0x00020000, and SPELL_ATTR5_ALLOW_WHILE_CONFUSED=0x00040000. The source row therefore proves Charm, Fear, and Sleep immunity and purge, plus casting while stunned, feared, or confused. Its cast allowances are separate from the mechanics it grants: Lichborne does not grant Stun or Confuse immunity.

The existing generated aura mapping represents the selected Fear and Sleep effects as control immunities. The current AuraDefinition control-immunity type has no Charm value, so the source proof records Charm from the exact DBC effect but does not alias it to a different runtime mechanic.

Pinned core behavior

The read-only AzerothCore reference is pinned to e822d718322289dd036fb2daf8867ba41283bf9a. In src/server/shared/SharedDefines.h, the attribute definitions name the purge, stunned, fleeing, and confused flags above. In src/server/game/Spells/SpellInfo.cpp:2488–2537, SpellInfo::ApplyAllSpellImmunitiesTo applies each mechanic-immunity mask and, when the purge flag is present, removes existing auras whose spell mechanic masks intersect it. Lichborne therefore purges matching Charm, Fear, and Sleep mechanics when applied; its source effects do not include Stun or Confuse, so a separate Stun or Confuse aura stays active.

In src/server/game/Spells/Spell.cpp:6836–6853, Spell::CheckCasterAuras derives the cast-time mechanic mask from immunity effects on spells carrying the purge flag. The later active-aura check skips an aura whose whole spell mechanic mask intersects that immunity mask (Spell.cpp:6920–6978). The Attributes5 allowances independently cover stunned, fleeing, and confused caster states. This explains both shared shout cases: 49039 can start while feared, and it can start while the 20511 child applies a stun effect because that aura retains spell-level Mechanic=FEAR. A standalone stun also permits casting through the explicit stunned flag, but remains active after the cast. Confusion likewise permits casting and remains active.

Runtime boundary

enemyControlImmunityPurge.ts recognizes only the exact selected WoW rows for Berserker Rage 18499, Bladestorm 46924, and Lichborne 49039. For Lichborne it checks the class, ability identity, source profile, damage class, school mask, all retained attribute words, and each aura's effect index, aura type, mechanic value, base-points scalar, die sides, points-per-level, recipient, and generated source aura ID. Missing or changed fields fail closed.

The Lichborne proof grants charm, fear, and sleep, records the named-shout Fear purge, and separately records the direct cast allowances fear, stun, and confuse. The named cleanup remains limited to active, same-target auras from spells 5246, 19134, 20511, and 29544. It removes those because their complete spell-level mechanic is Fear, including the 20511 aura that applies a stun effect. A recognized generic Fear, stun, or confusion label can also allow Lichborne to be cast through its explicit Attributes5 flags; those auras remain active and keep their control state. Berserker Rage remains limited to its named-shout Fear purge and blocked by separate stun, confusion, and generic Fear; Bladestorm remains unable to start through control despite its later Fear and Stun immunity aura. Unknown source-spell controls fail closed.

Player and party integration must select the learned Lichborne row before using this proof. That integration retains the existing target validity, cooldown, global cooldown, and cost checks. No generic magic miss, resist, or deflect roll is part of this proof.

Focused helper validation: npm test -- --run src/game/enemyControlImmunityPurge.test.ts.