Damage/Heal Formula

I’m trying to create a helpful WeakAura for my healing spec to be efficient while avoiding overheals, and I’m trying to calculate the heal of a spell dynamically, rather than hard-coding a known value and having to update it every time my stats change.

AMR seems to have the best, most comprehensive resource in regards to WoW’s damage and healing formulas, but no matter how strictly I follow the formulas documented, I always end up with inaccurate results. I think there are a few terms I’m not understanding properly.

So, can someone explain exactly what these functions are, in the context of the AMR theorycrafting “wiki”?

Example page

It is non-trivial to calculate how much any spell heals for in WoW, for sure.

StatRating is the total amount of rating you have, from any source.
StatExtra is the total amount of extra you have of that stat from any source. Like, if you had an item that said: increases your chance to critically strike by 1%. I’m not sure if many sources like this actually exist anymore, but I think we have that in there to handle some weird cases.
StatMultiplier is all the multipliers on a particular stat from any source - usually buffs.

If you are having trouble calculating the healing of a spell, you can give an example and I can probably help you out. I am the person who populated the wiki for all of the healing spells and effects. Usually if you aren’t getting the right number, you are missing a passive effect somewhere.

1 Like

Alright, let’s see where I’m going wrong…

Specifically, I’m trying to calculate the healing value for Vivify’s “AoE” heal.

As seen in this simulation, VivifyAoE is meant to restore 12,828 health. This also matches perfectly with what the in-game spellbook says. So far, so good! The sim also shows the gear/talents I have, and I can’t see any passive effect that would affect Vivify’s AoE… There is “Uplifted Spirits” and “Devout Spirit”, but I’m fairly sure that only applies to Vivify’s main heal.

So, the math.

VivifyAoe =
0.74 * TotalSpellPower
0.74 * (Round(StatRating(SpellPower), 0) + TotalIntellect)
0.74 * (8149) + (8149)

I don’t have Uplifted Spirits, so we can move on to the TotalHealingMultiplier. If anywhere, I think this is where I’m going wrong. I don’t see anything that would give me anything for StatMultiplier(HealingMultiplier) or TotalHealingTakenMultiplier, so I assume those are both 1 and just throw in my Versatility.

12060.52 * 1 * 1 * (1 + 0.1147)

Somehow I’ve got a number that’s ~600 health off…which isn’t really a big deal, but the programmer in me wants it to be as perfect as possible… If it were 600 health below the expected number, I might think I’d missed some healing buff, but because it’s 600 above…I’m not sure where I’ve gone wrong.

Hooold on a second, I just realized I made a massive derp. Saying I both do and don’t have “Uplifted Spirits” in the same post. Okay, so I do have Uplifted Spirits; two stacks of it, in fact.

So, new question: How do I calculate AzeriteItemEffectBudget() and where did the constant 4.417178 come from?

There still has to be something else I’m doing wrong, because I’m already over what the heal should be, and Uplifted Spirits is sure to just add more…

Here is where you’ve most likely made your mistake: You’re essentially adding your Spell Power / Intellect twice.

As far as I know, StatRating(SpellPower) gets the amount of the Spell Power stat from your equipment and other effects. While this has been mostly removed over the year there are still some items or effects purely adding spell power. This is not the same as your total Spell Power.

1 Like

That…makes perfect sense, now that you mention it. I didn’t think about it at the time, though I did find it somewhat curious that both values were the same… I’ve only picked up the game again recently; I’ve never played during an era where Spell Power was on gear directly. :smile:

Still, there must be yet more I’m missing… If I omit the doubled spell power, that brings the pre-versatility value down to 6,030.26… And with Uplifted Spirits adding about 1,000 apiece, and Versatility adding 11%… That’s still not quite enough to reach 12,828. Hmm.

I’ll wait to hear back from Swol, too; maybe there is indeed another passive buff I’m missing…

For azerite:

4.417178 is the “average” found in the spell data. You have to multiply that by a budget that depends on the item level(s) of the item(s) you have the trait on. For ilvl 435 the scaling is 248.

248 * 4.417178 = 1095.46 * 2 = 2190.92

Healing of Vivify with 8149 intellect and 11.47% vers:

0.74 * 8149 + 2190.92 = 8,221.18

8221.18 * 1.1147 * 1.4 = 12,829.81

(The 1.4 comes from the 40% healing multiplier on the mistweaver monk spec passive. All healers have this multiplier in BfA.)

Aha, that 1.4 multiplier certainly explains things! I hadn’t seen/read about that anywhere else…

Digging into game data is certainly a bit daunting, but I think I see where I can find those “average” values looking through the DBCs.

Is there a list and/or a formula for getting the azerite “scaling” factor from its ilvl?

There is a table for the scale data. I’m not sure exactly where we get it from… I think you can get it from simc if you look in their source code though.

On our wiki, if you look at the bottom of the spell you’ll see a “Referenced By…” section. In there you can see every spell that references that spell. “Mistweaver Monk” is in there and so you could find the relevant multiplier by following that trail.

We attempted to document as much as possible how to find all this information. We didn’t put the actual scaling tables for the items in the wiki, though.