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

5.0 KiB

WoW 3.3.5 Hunter Deterrence runtime contract — 2026-10-07

Scope

src/game/wow335DeterrenceRuntime.ts binds the selected Hunter catalog row to the audited Spell.dbc 19263 parent and its spell_linked_spell Aura link to 67801. It supplies source-shaped aura descriptors and a narrow post-hit deflect gate. The shared combat store, party runtime, and combat-result paths own cast execution, actual aura application/removal, and outcome recording.

The five source aura definitions are identified by their source spell/effect IDs: parent 19263 Auras 47, 287, and 25; linked child 67801 Auras 288 and 185. All five instances must belong to the same Hunter self-cast, target that Hunter, share one application time, and expire exactly five seconds later. The runtime contract returns no Deterrence package when any member is missing, duplicated, expired, foreign-owned, or out of step with the other members. Removing or expiring one member should remove the other members for that same owner, target, and application time.

The helper exports the parent effects for the selected catalog mapping and the linked-child effects for the original cast target. Aura 47 carries a flat +100 parry modifier. Aura 25 carries the pacify tag. Aura 287 supplies the 100-point spell-deflect source aura. Aura 288 removes the attacker's frontal-arc requirement for this package. Aura 185 carries the -100 incoming ranged-hit modifier; the existing shared hit-stat path consumes it, so the combat caller must not add a second copy of that penalty.

Deflect gate

resolveWow335DeterrenceIncoming is a final gate after the existing combat resolver has produced a landed hit, crit, or block. It preserves miss, resist, dodge, and parry. For an otherwise eligible event it returns the distinct deflect outcome; the source aura is 100%, so this gate adds no random roll.

The input must identify a non-periodic WoW 3.3.5 spell source and match the exact enemy damage-source row, including DamageClass, SchoolMask, and raw AttributesEx0/3/7. Only Magic (DamageClass 1) and ranged (DamageClass 3) spells qualify. DamageClass None, melee, unknown, foreign-profile, periodic, and weapon-auto inputs remain unchanged. A stun suppresses deflection. The core's source bypasses are preserved: AttributesEx3 ALWAYS_HIT (0x00040000) suppresses both branches; ranged DamageClass also skips the deflect check for AttributesEx0 NO_ACTIVE_DEFENSE (0x00200000); Magic DamageClass skips it for AttributesEx7 NO_ATTACK_MISS (0x02000000). The front-arc gate applies unless Aura 288 is active. A complete accepted Deterrence package always contains Aura 288, so an attacker behind the Hunter remains eligible.

Ordinary ranged autos never produce deflect. They receive Aura 185's separate incoming ranged-hit modifier through the existing aura-stat path. The helper does not calculate general miss/resist chances, and it does not widen the simulator's existing combat table to other spells or profiles.

The shared combat path also uses this exact eligibility gate before applying non-damage spell riders while the complete Deterrence package is active. For a source event that is guaranteed to deflect if it lands, control, target-aura, periodic, pull, and leech-healing riders are skipped while damage still goes through the ordinary hit resolver and records deflect only after its normal landed result. This suppression is package-specific; ordinary sourced attacks outside Deterrence retain the simulator's existing rider behavior on miss or resist. Same-update incoming events use the combat store's original-frame stun snapshot, consistent with its simultaneous batch policy.

Identity and provenance

The source contract continues to use the exact audited 19263, 67801, and type-2 link signatures in src/game/wow335Deterrence.ts. The runtime ability contract accepts only the selected wow335-hunter-deterrence Hunter mapping, its wow335-progression source, DBC ID 19263, self target, and the three exact parent source effects. Runtime activation is derived from the actual serializable ActiveAura records; callers do not pass a copied source-package object as proof. Incoming deflection independently checks its spell ID and hit attributes against the exact WoW damage-source table. Missing or mismatched source fields fail closed.

The pinned source evidence and the limits of the imported behavior are recorded in WOW335_DETERRENCE_SOURCE_2026-10-06.md. The source row authenticates hit-class and bypass metadata; the game's current miss/resist calculations remain its own policy. This contract does not create a complete AzerothCore hit table.

Focused verification

Run npx vitest run src/game/wow335Deterrence.test.ts src/game/wow335DeterrenceRuntime.test.ts for the exact source rows, linked package identity and lifetime, cleanup scope, branch-specific bypass bits, and unsupported-input exclusions. The mechanics work remains within the project's Ready-five certification boundary, level-80 cap, and existing loot scope.