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

131 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WoW 3.3.5 Hunter Deterrence source audit — 2026-10-06
## Result
This is the dated pre-integration audit. The selected catalog row, five-aura
player/companion package and guarded hit resolution are implemented in the
[October 7 continuation](DETERRENCE_INTEGRATION_2026-10-07.md). Missing-runtime
statements below describe the October 6 source-audit boundary.
Spell 19263 is a five-second, self-targeted, aura-only source row. Its linked
`spell_linked_spell` aura 67801 is part of the same defensive package. The
source contract in `src/game/wow335Deterrence.ts` accepts that exact parent,
child, and link signature and fails closed on profile or sibling drift. It
does not import the ability or resolve combat outcomes.
## Client and linked-row evidence
The read-only WoW 3.3.5a `Spell.dbc` is
`../wow-pvt-server-backups-2/wow335a/Data/patch-A.MPQ/DBFilesClient/Spell.dbc`,
SHA-256
`57011d528fd66cf39f5ab6fb168e389ab9e4cc1b8050f7201a54239d489b415c`.
`Spell.dbc` has 234 fields, so the parsed field shift is zero. Duration index
28 resolves to 5,000 ms in the pinned `SpellDuration.dbc` at
`../LadiksMPQEditor/client-current/patch-S/DBFilesClient/SpellDuration.dbc`,
SHA-256
`eeae44ef0185924f3d6ec57ab2701c66566db86e51ab0bae017a9449126eb3a`.
Raw aura values below show the parsed DBC base-points value (the raw field plus
one). All listed effects are `APPLY_AURA`, target A 1, target B 0, mechanic 0,
radius 0, period 0, and misc value 0. No effect has a triggered spell.
| Spell row | Attributes 0–7 | Damage class | School | Duration | Effects |
| --- | --- | ---: | ---: | ---: | --- |
| 19263 Deterrence | `[327696, 16, 0, 0, 0, 0, 0, 0]` | None (0) | 1 | 5,000 ms | `47:+100`, `287:+100`, `25:0` |
| 67801 Deterrence | `[328080, 16, 0, 0, 0, 0, 0, 0]` | None (0) | 1 | 5,000 ms | `288:+100`, `185:-100` |
| 65871 Deterrence | `[327696, 0, 0, 0, 0, 0, 0, 0]` | None (0) | 1 | 5,000 ms | `47:+100`, `287:+100`, `25:0` |
The pinned read-only AzerothCore data row is
`(19263,67801,2,'Deterrence')` in
`../wow-pvt-server-backups-2/azerothcore-wotlk/data/sql/base/db_world/spell_linked_spell.sql`.
The selected core defines type 2 as `SPELL_LINK_AURA` in
`src/server/game/Spells/SpellMgr.h`. `SpellMgr::LoadSpellLinked` stores this
under the Aura link key, and `Aura::HandleAuraSpecificMods` applies 67801 to
the same target through the original caster when 19263 is added. On removal, the core removes
the linked 67801 aura from that target and caster. The link is an aura
relationship, not a Spell.dbc trigger effect.
Spell 65871 is a same-name DBC row, but it is not the selected package: its
Attributes1 differs, it has no SkillLineAbility row, and no `spell_linked_spell`
row references it. Spell 19263 is the only one of these rows listed on
SkillLineAbility skill line 51. That source metadata does not establish how the
current HealerMan catalog exposes or learns the spell. The generated Hunter
catalog currently contains no 19263 entry.
## Pinned core behavior
Historical core behavior is pinned to read-only AzerothCore
`e822d718322289dd036fb2daf8867ba41283bf9a`; the link row above comes from its
base world SQL. The active project and generated data remain authoritative for
implementation.
- Aura 47 is `SPELL_AURA_MOD_PARRY_PERCENT`. Its player aura handler enables
parry and updates the player's parry percentage. The 19263 effect contributes
+100 to that aura type; the actual attack result still depends on the
defender's parry capability and the incoming attack path.
- Aura 287 is `SPELL_AURA_DEFLECT_SPELLS`. The pinned `Unit::MagicSpellHitResult`
and `Unit::MeleeSpellHitResult` check it for Magic-class spells and ranged
damage-class spells. Deflection is checked after miss/resist and requires the
defender not to be stunned. The attacker must be in the defender's front arc
unless the target has Aura 288. The linked 67801 supplies that Aura 288, so
the complete 19263 package does not retain a frontal-facing requirement.
Ordinary ranged weapon auto attacks do not enter these spell deflection
checks; linked Aura 185 changes their ranged miss chance separately.
- Aura 25 is `SPELL_AURA_MOD_PACIFY`. Its amount is zero, but the aura handler
still sets the pacified unit flag. The pinned `AttackerStateUpdate` returns
for a pacified unit, and spell casts with `PreventionType=PACIFY` are rejected.
- Aura 185 is `SPELL_AURA_MOD_ATTACKER_RANGED_HIT_CHANCE`, not a disarm aura.
On the target, its -100 modifier raises the attacker's ranged miss chance by
100 percentage points in `Unit::GetUnitMissChance`. It applies to ranged
weapon attacks and ranged-damage-class spells, subject to each spell's own
hit attributes.
- The parent is DamageClass None, has SchoolMask 1, Dispel 0, Mechanic 0, and
contains only self-targeted aura effects. Its own application is not an
incoming Magic, melee, or ranged hit. Its triggered-spell fields are zero;
67801 comes from the separate linked-aura row.
Relevant pinned paths are `src/server/game/Spells/Auras/SpellAuraDefines.h`,
`SpellAuraEffects.cpp`, `SpellMgr.cpp`, and `Auras/SpellAuras.cpp`, plus
`src/server/game/Entities/Unit/Unit.cpp` and `src/server/game/Spells/Spell.cpp`.
The enum and consumer paths establish the raw aura roles and gates; they do not
provide a complete simulator hit table.
## HealerMan boundary
Generic WoW aura conversion already recognizes Aura 47 as a parry stat and
Aura 25 as a pacify tag. The incoming player and companion hit paths consume
parry from target-local aura stats. No current Hunter Deterrence definition
applies those auras, because 19263 is absent from the generated Hunter catalog.
The existing 67801 contract in `enemyBlockAuras.ts` uses Aura 288 only as an
ordinary enemy Creature block input; that is not player/party deflection
coverage.
The normalized enemy attack record carries `spellId`, `damageClass`,
`schoolMask`, `attackKind`, and `damageOrigin`, but the generated enemy damage
source table does not retain raw `Attributes3`. The pinned
`SPELL_ATTR3_ALWAYS_HIT` bit is `0x00040000` and bypasses the deflect hit gate.
The current shared incoming result also lacks a distinct deflect stage and does
not pass attacker-relative facing or defender stunned state into that resolver.
Those missing inputs block a safe generic deflect runtime. An exact adapter
would need the active 19263/67801 aura package on the actual defender, the
source spell's profile, damage class and raw AlwaysHit attributes, ordinary
ranged-auto identity, attacker-facing relation, stun state, and placement after
the source miss/resist checks.
At the start of this source audit, the player autoattack scheduler lacked the
`pacified` aura gate already present in the party action loop. The shared runtime
continuation now gates player main/offhand and owned Scout ranged autos on active
actor-local pacify. Actual accepted-aura scheduler fixtures cover that gate;
they do not prove a Deterrence cast. A future 19263 import still needs the linked
aura lifetime and the missing deflect inputs above. This source helper records
exact rows and linkage only. See
[the integration report](CONTROL_UTILITY_CONTINUATION_2026-10-06.md).
## Focused verification
`src/game/wow335Deterrence.test.ts` verifies the parent/child signatures and
the exact type-2 aura link. It rejects another profile, the same-name 65871
duplicate, changed aura siblings, changed duration, and missing or extra link
rows. Only this focused helper test was run; no build, live run, or full suite
was part of the scoped source audit.