88 lines
5.0 KiB
Markdown
88 lines
5.0 KiB
Markdown
# 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`](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.
|