Skip to content

[Bug]: AoE spell coefficients in SpellData inconsistently authored vs TBC empirical values #46

@Xerrion

Description

@Xerrion

Problem

PhDamage's Data/SpellData_*.lua files store spell-power coefficients for AoE/multi-tick spells using inconsistent conventions. Some entries pre-bake the TBC AoE penalty (× 1/2), others store linear unscaled values, producing systematic damage errors of up to ~50% on affected spells.

Background: The TBC AoE rule

Per WoWWiki Spell_power archive (oldid=1549180, July 2008, patch 2.4.3 era):

Area of Effect spells receive only 1/2 of the total bonus, divided among each tick (for damage-over-time effects). Formula: C = CastTime / 7 (instead of CastTime / 3.5).

This is the TBC 2.0+ rule. Vanilla 1.x used × 1/3; patch 2.0 relaxed it to × 1/2. Patch 2.2.0 patch notes raised Hellfire / Blizzard / Rain of Fire coefficients further, consistent with this relaxation.

Per-spell secondary penalties (slow/snare/daze) stack on top of × 1/2 and don't follow a clean rule - they must be hard-coded per spell from the empirical table, not recomputed.

cMaNGOS-TBC SpellMgr.cpp::CalculateDefaultCoefficient does NOT apply a runtime AoE multiplier. Emulators consume per-spell coefficients from spell tables (post-penalty already baked in). PhDamage should follow the same convention.

Empirical TBC values (canonical)

From the WoWWiki July 2008 table:

Spell TBC empirical (total) Per-tick Currently in PhDamage Status
Arcane Explosion (instant) 21.43% n/a 0.213 OK
Holy Nova damage (instant) 16% (split) n/a 0.161 OK
Cone of Cold (instant) 13.57% (× 0.633 snare) n/a TBD Needs audit
Consecration 8s ground 95.24% ~11.9%/tick TBD Needs audit
Blizzard (Mage) 8s/8 ticks 76.19% ~9.52%/tick 0.952 WRONG
Hurricane (Druid) 10s/10 ticks 128% (= 142.86% × 0.9 slow) 12.8%/tick 1.07 WRONG
Rain of Fire 8s/4 ticks 95.24% 23.81%/tick 0.5727 WRONG
Hellfire (enemy) 15s/15 ticks 214.29% 14.29%/tick 0.4286/tick WRONG
Hellfire (self damage) 15s 142.86% 9.52%/tick (same path?) Needs split
Volley (Hunter) 6s/6 ticks No SP scaling - ranged AP only n/a 0.50 WRONG

Proposed solution

Pure data fix - NO engine changes:

  1. Audit every *_AoE-flagged entry across all Data/SpellData_*.lua files.
  2. Replace coefficients with canonical TBC empirical values from the table above.
  3. Split Hellfire into two SpellData entries (or a hybrid encoding) to handle the 142.86% self-channel vs 214.29% enemy-AoE split.
  4. Remove SP scaling from Volley entirely (ranged AP only).
  5. Add a header comment to each SpellData file documenting the policy: "Coefficients store TBC canonical empirical values (post-AoE penalty, post-secondary penalty). DO NOT divide by 3 or 2 at runtime."
  6. Add citation comments inline for non-obvious values (e.g. Hurricane's 0.9 slow penalty, Hellfire's split paths).

Out of scope

References

Acceptance criteria

  • All AoE-flagged entries in SpellData match the canonical TBC table.
  • SpellData file headers document the post-penalty storage convention.
  • Hellfire split into self-channel and enemy-AoE paths.
  • Volley no longer scales from SP.
  • Cone of Cold and Consecration audited and corrected if needed.
  • No engine code changes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions