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:
- Audit every
*_AoE-flagged entry across all Data/SpellData_*.lua files.
- Replace coefficients with canonical TBC empirical values from the table above.
- Split Hellfire into two SpellData entries (or a hybrid encoding) to handle the 142.86% self-channel vs 214.29% enemy-AoE split.
- Remove SP scaling from Volley entirely (ranged AP only).
- 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."
- 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.
Problem
PhDamage's
Data/SpellData_*.luafiles 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):
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::CalculateDefaultCoefficientdoes 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:
Proposed solution
Pure data fix - NO engine changes:
*_AoE-flagged entry across allData/SpellData_*.luafiles.Out of scope
References
Acceptance criteria