Combat tables, diminishing returns and PANDAS

100 Draenei Warrior
Hello, I'm Waniou, and I'm here to give you a somewhat brief guide to how monsters attack you in WoW. Since this is the tank forum, I'm looking at solely things from a tank point of view so I really don't care at all about diminishing returns on crit rating and stuff. Just avoidance.

Firstly, very important update: As of 5.0, CTC capping is no longer possible, since block is now on its own special roll. Second important update: Block now suffers from diminishing returns.

1. The Combat Table

So, firstly, we look at how attacks on WoW are calculated. For normal attacks, WoW uses what's called a single roll system, so basically, when you or a mob attacks, a single random number is generated and the results of the attack are determined based on that. Think of it like rolling a dice. Say, for example, you have a 1/6 chance to be missed, you have a 1/6 chance to dodge and a 1/6 chance to parry. If you roll a 1, the attack is a miss, if you roll a 2, the attack is dodged, if you roll a 3, the attack is parried. Anything else and the attack lands.

This might seem unimportant but it has two very important results.

Firstly, avoidance is additive, not multiplicative. One of the common mistakes people make in coming into the game is getting that wrong. What's the difference? Well, if it were multiplicative, it would mean that first the game would calculate if the attack was missed. If it wasn't, it would then calculate if the attack was dodged. If it wasn't, it would then calculate if the attack was parried. This results in a different total avoidance to what it actually is. For the maths, you'd get

Avoidance total = (1 - (1 - dodge) x (1 - parry) x (1 - miss)

This is wrong. Don't use this. To get your total avoidance, you can simply add your avoidance stats together. Which leads to the second very important result: It's theoretically possible to become what is referred to as "unhittable". What this means is simply that any attack made against you will be avoided. If avoidance were multiplicative, this would only be possible if you had a move like Evasion (Which gives 50% dodge chance) on top of 50% dodge. With a combat table, you can have, say, 50% dodge, 45% parry and 5% miss and you'd be completely unhittable. With a multiplicative system, you'd still be hit roughly 25% of the time. This isn't too important unless you're interested in the maths of it, so to sum up, basically to get your total avoidance you simply add your avoidance stats (ie, miss, dodge and parry).

Ordinary Hit

The combat table is filled out in that order, from top to bottom. Now, criticals are kept in for the sake of completion here (I've left out a few things that tanks need never worry about, such as glancing or crushing blows) but against bosses, the critical chance is always 0% due to your spec passives. There are mobs, however, who can crit despite having those talents but that's not going to be covered in this thread.
It's worth noting here that player attacks use the same sort of combat table (I'll touch on this later)

So, to fill out the table with some generic avoidance stats, we get this:


Anyone who's done any basic maths knows a list of percent chances needs to add up to 100, so whatever's not avoidance is chance to be fully hit:


This is where being unhittable comes in. If you can increase your avoidance stats high enough, you can reduce that hit chance to 0%. At this point, you're unhittable, but like I said, this will only ever be possible with short term buffs.

It's worth pointing out here, that mobs higher levelled than you have an innately higher chance to hit. It works out to be a 1.5% decrease to each avoidance stat per level above you, so for a mob one level above you, you lose 4.5% avoidance (Or 3% if you're a bear, since you can't parry anyway), and for mobs two levels above you, you lose 9% avoidance (Or 6% if you're a bear), and for mobs three levels above you (ie, raid bosses), you lose 12%. Wait! What's that? Shouldn't it be 13.5%, because it's 1.5% x 3 levels (4.5%) x 3 avoidance stats? (13.5%)? Well not quite, because you only have a 3% chance to be missed. You can't have a -1.5% chance to be missed, so it's 3% less miss chance, plus 4.5% each for parry and dodge. Or, well, 7.5% for a bear.

So the way this works in combat is similar to the dice roll I mentioned earlier. Every time a monster hits you, the computer calculates a random number between 0.00% and 100%, then based on that, looks up what that number corresponds to in the attack table and then does whatever with it. So, say, if it rolls a 3.67%, that becomes a miss. If it rolls a 17.91%, it becomes a dodge and so on.
Edited by Waniou on 1/20/2013 1:21 AM PST
Reply Quote
100 Draenei Warrior
This brings me to blocks. If you played before 5.0, you'd have heard of CTC (Combat Table [C]overage) capping, which involved filling up your combat table with blocks instead of hits. This is no longer possible. Blocks are now rolled after your avoidance. What does this mean? Well, it goes back to the multiplicative chance before. Say you a combat table like the one above, plus 65% block chance. Under the pre-5.0 system, you'd have a combat table like this:


You can no longer do this. Blocks are now rolled after your normal attacks, so 65% of the attacks that aren't avoided are now blocked instead. 65% of 65% is 42.25%, so 42.25% of all attacks made against you (Including the ones you avoid) are blocked, while 22.75% (35% of 65%) of all attacks made against you do full damage. If you like, you can pretend you have a combat table something like this:


This means you will never fill your combat table unless you have 100% block chance, or 100% of your other avoidance stats and Blizzard intends for this to only be possible with short term buffs such as Shield Block.
Critical blocks work on a third roll. After you block, it rolls a third time to see if the block was a critical.

This does bring up another question though, of where do absorbs (including Savage Defense and Blood Shield, or priest moves like Power Word: Shield) lie? As They're a unique case that's calculated after the attack table. If it's a miss, no damage is done to be absorbed, if it's blocked, only the reduced hit is absorbed.

There's another minor point to bring up: Special attacks. You may have heard the terms "white damage" and "yellow damage" floating around. Quite simply, white damage is your normal, melee auto-attacks (The numbers are white on your screen) and yellow damage is from your abities such as Shield Slam or Crusader Strike or whatever.

Yellow damage is special because it works on a 2-roll system. First, avoidance is calculated the same as above, then afterwards, it rolls again to see if it crits. Which simply means, if your hit and expertise rating are low, your special abilities will have a lower chance of critically hitting (Your normal melee attacks won't though, because they're on a single-roll system). Is this important for tanking? Vengeance means lolthreat and nobody's going around stacking crit rating anyway?

Unless you're a bear. I'll leave the details to bear specialists, but long story short, hit and expertise will give a bear more survivability because their Mangles will crit more, proccing Primal Fury more and giving more rage.

"But Wani! I don't want to keep having to add up my avoidance and doing funny things with calculating overall block chance every time I check my gear! How do I do it simply?" Don't worry! There is a macro that will solve your problems:
/run b=GetBlockChance() d=GetDodgeChance() p=GetParryChance() a=5+d+p+b*(95-d-p)/100 DEFAULT_CHAT_FRAME:AddMessage(string.format("%.2f", a).."% Avoidance")
Run that and it'll tell you your total avoidance. Simple!

And that's really all there is to the combat table. So now, we go onto the other topic of this thread:

2. Diminishing Returns

This is another this with a slightly confusing name because it shares it with another concept in WoW, which is diminishing returns on Crowd Control. Those who pvp a lot know that if you try to keep CCing an enemy player, the spell suffers diminishing returns, with a reduced duration. I won't go into the details but what it means is, say you polymorph that hunter. The first time, it lasts for 8 seconds. Second time, for 4 seconds. Then 2, then 1, then it becomes immune for a time. I have no idea if that's exactly how it works but that's the basics of it.

Why do I mention this here? For a very simple reason.

Avoidance diminishing returns do not work like this.

There is a unfortunately common misconception that, what avoidance diminishing returns means is that if you avoid an attack, the chance of avoiding the next attack is lower. This is not true at all and avoidance diminishing returns is nothing like this. If you have 10% dodge at the start of the battle, you will have 10% dodge after dodging an attack, you will have 10% dodge after parrying an attack and this will not change because you dodged or parried or blocked. It might change if you gain a buff, but not solely because of having dodged an attack earlier.

If anyone tells you that dodging an attack reduces the chance that you will dodge the next attack is telling you lies. It is in no way true and never has been true.

Forgive my repeated boldings, but I feel this simply is that important that it needs to be stated repeatedly.
Edited by Waniou on 10/3/2012 2:19 AM PDT
Reply Quote
100 Draenei Warrior
So, this raises the very important and very obvious question: What does avoidance diminishing returns mean?

It's really quite simple. Well, the maths isn't so much but the concept is very simple. As you gain more dodge rating, the amount of dodge you get per point is lower and as you gain more parry rating, the amount of parry you get per point is lower and if you're a warrior or paladin, the more mastery rating you have, the amount of block you get per point is lower. This is always in effect, there's no magic % where it starts kicking in. It just becomes harsher at higher levels of avoidance.

It's also worth pointing out that the three avoidance stats aren't linked in diminishing returns. Having high parry will not increase the amount diminishing returns affects dodge and vice versa.

Now, you're probably wondering, why do we have diminishing returns on avoidance? What's the point? Does Blizzard just hate tanks and want us all to suffer?

No, that's absurd. Diminishing returns are not a bad thing and exist for two main reasons.

Firstly, high avoidance is bad. Well, yes, we want high avoidance, but it's a bad thing for the game. When tank avoidance is really high (Like it was back in Wrath of the Lich King because of talents and not as harsh diminishing returns), in order to threaten tanks, bosses need to swing really really hard, which means that healers need to be able to heal for stupidly huge amounts, which means we have a fun wee rollercoaster ride from full health to 10% health, back to full health and the only challenge for healers is how quickly they can hit their Flash Heal button. By restricting tank avoidance, bosses don't have to hit as hard and healers become more limited by their mana, which is a more involved game for them and it makes things generally better for the tank/healer game as a whole.

The second reason is more subtle, but still important. If we don't have diminishing returns on avoidance, the more avoidance you get, the better it becomes for you.

To look at an extreme example, but it's one that illustrates the point perfectly, pretend you have 97% avoidance, and 100 parry rating will always give 1% parry. At the moment, only 3% of attacks make it through. You get an upgrade and it gives you an extra 100 parry rating over what you had. Now you've got 98% avoidance, so only 2% of attacks make it through. In other words, you've reduced the damage you take over the course of a fight by a 33%. After killing another boss, you gain another upgrade, giving you another 100 parry rating, so now you have 99% avoidance. This 100 parry rating reduced the damage you take by another 50%, making it about 50% better than the last 100 parry rating you got.

You can see how it works? As you gain more avoidance, your damage reduction increases exponentially, meaning the more avoidance you've got, the better it is for you. Again, this isn't something good for the game and diminishing returns keeps this in check.

So, to get into the maths of it, we have this lovely formula:

1 1 k
- = - + -
x' c x

x' is avoidance after diminishing returns
x is avoidance before diminishing returns
c is the cap. This is the theoretical "maximum" and as you get closer to that number, the
harsher DR you suffer. This has one of four numbers, depending on your class and the stat:
Block: c = 150.3759
Parry (for warriors, pallies and dks): c = 237.1860
Dodge (for pallies): c = 66.56744
Dodge (for warriors) c = 90.6425
k is just a constant that controls scaling and is also based on class:
For pallies: k = 0.886
For warriors: k = 0.956

It's not too ugly (Although I say this as someone with a degree in maths) but you can clearly see from it that 1: Like I said, it doesn't change in combat depending on previously having dodged things) and 2: Like I also said, there's no magic number where it starts kicking in. There's no such thing as a dodge or a parry cap, where suddenly you don't want parry or dodge. The cap shown isn't a number you'll ever reach, it's what maths calls an "asymptote", meaning it's a number you'll never reach and the closer you get to it, the harder it is to reach.
Edited by Waniou on 11/3/2012 9:11 PM PDT
Reply Quote
100 Draenei Warrior
It's also worth pointing out that your base avoidance doesn't suffer from diminishing returns. This is the 3-5% your character always has, regardless of spec and gear. This also includes the avoidance you get from your base strength and agility (Not from extra strength/agility on gear or from buffs). Strip your character, right click off any buffs and that's your base avoidance and that's added on after all your avoidance from buffs and gear, which all does suffer from diminishing returns. Which probably sounds confusing, so say you're a warrior, so you have 3% base parry, then your gear gives you another 15% parry before diminishing returns. Say diminishing returns reduces your parry by 20%, so this will only work on the latter number, giving you 12% parry from gear and buffs, plus another 3% from your base parry, giving you a total of 15%, not 14.4% you'd get if your base parry also suffered from diminishing returns.

The obvious next question is where's the best place to be? Obviously, we want to lose as little avoidance as possible to diminishing returns. This becomes slightly complicated, unless you're a druid, because druids can't parry, or a monk because you won't find any parry leather. For druids and monks, just get dodge like you normally would and kinda ignore parry.
It's a little more complicated for plate tanks. As in, I'm about to maths a bit here. Dodge suffers much harsher diminishing returns for us than parry does, so in general, you want more parry than dodge (Contrast with WotLK, where it was reversed and parry was terrible because it suffered harsher diminishing returns, and Cata where you wanted them balanced). Where exactly is a much more complicated question that involves either looking at pretty graphs or using funny equations. Theck, being the awesome mathematician that he is, and having paid far more attention to the MoP beta than me gives us this one:

Ideal parry/dodge ratio: Cp/Cd - ((Cp/Cd)baseDodge - baseParry)/totalDodge

This looks funny because it's written in a funny way and you probably haven't studied maths like me. But basically, Cp and Cd are the diminishing returns caps from the formula above for parry and dodge respectively. So how can we use this formula? Basically, we can make a macro like this:

For warriors or DKs:
/run d=GetDodgeChance() p=237.1860*d/90.6425-((237.1860/90.6425)*5.01-3.22) DEFAULT_CHAT_FRAME:AddMessage("Ideal parry for current dodge: "..string.format("%.2f",p))
Pallies have slightly lower base strength and a few different constant, so use this one:
/run d=GetDodgeChance() p=237.1860*d/66.56744-((237.1860/66.56744)*5.01-3.19) DEFAULT_CHAT_FRAME:AddMessage("Ideal parry for current dodge: "..string.format("%.2f",p))

This'll give you how much parry you should be aiming for, for your current amount of dodge. Firstly, note that this doesn't mean you should sacrifice other, more important stats to maintain this balance. You really won't gain that much by doing this and this is sort of a "Do this last" thing. Secondly, note that this number will change if you're reforging dodge into parry. The less dodge you have, the lower the ratio the formula will give you.

Lastly, armour is also affected by diminishing returns in a similar way. The equation for this (above 85) is:
Reduction = Armor / (Armor + MobLevel * 4037.5 – 317117.5)

Like with avoidance diminishing returns, this isn't a bad thing and it basically means that armour is worth more-or-less the same for you, no matter how much armour you've already got.

I've probably gone into more detail here than was needed, but hopefully, this will clear up any questions.

3. Summary

So. Combat table is a single roll, then a second one for block. Your total avoidance is worked out by adding it up and if it's more than 102.4%, bosses can't hit you.

Diminishing returns simply means that the more dodge you have, the less dodge chance you get from dodge rating and the same for parry and block.

It's really not that complicated at all.

4. Ending stuff
My sources for this stuff come from,
and for some of the MoP changes:

Thanks to all the OTers and other people around here who helped me get this information. You people are the main reason I come back to this forum :D
Edited by Waniou on 11/30/2012 9:04 PM PST
Reply Quote
100 Draenei Warrior
5. Appendix: More information if you care.

Here's a good post from Mnemonic, giving examples of why diminishing returns aren't as bad as it sounds. It's based in Cata, but the point still stands.

Skip down to the quote if you're only interested in the numbers.

Waniou has a great post stickied at the top of this forum that explains the logic behind avoidance diminishing returns and how to best allocate your stats such that none are wasted. The fact that avoidance diminishes is not something that can be argued against, however it really seems like a large portion of the population doesn't fully grasp the extent to which it happens, or the extent to which it plays a part in our gearing.

At level 85, 179 mastery rating provides 1 mastery skill, which is a good place to start. For the sake of comparison, 179 dodge rating is almost exactly 1% dodge as well, before any diminishing returns. (The actual number is roughly 1.02%, but it's close enough.)

For this experiment, I'm going to be moving my character's gear around to reach different thresholds of dodge, and then adding a piece of gear that has 185 dodge rating on it. This is the closest you can get to the magical 179 number on a current piece of gear. Rather than post a block of code that will leave most people scratching their heads, this thread is simply to provide real-world examples to dispel the myth that DR reduces our avoidance to "microscopic proportions." The numbers here come directly from my character sheet, no need for complicated formulae.

My base, unbuffed dodge is 3.96%. Completely naked, 185 dodge rating gives me 1.08% dodge. This is obviously not a realistic place to start comparisons, because no one starts tanking with their base dodge chance. Instead, let's look at some major thresholds, starting at 8% dodge:

Normal mode dungeon tanks may have around 8% dodge. At 7.95% dodge, another 185 rating gives me .95% dodge. The ratings have diminished 12%.

Heroic mode dungeon tanks may have around 10% dodge. At 10.05% dodge, another 185 rating gives me .89% dodge. The ratings have diminished 18%.

Normal mode raid tanks may have around 12% dodge. At 11.96% dodge, another 185 rating gives me .83% dodge. The ratings have diminished 24%.

Heroic mode raid tanks may have around 14% dodge. At 13.97% dodge, another 185 rating gives me .78% dodge. The ratings have diminished 28%.

Keep in mind that in all of these examples, the next tier of gear has roughly 13% more stat allocation. (This information can be gleaned by comparing stamina levels. Sockets cloud the issue slightly since the budget is taken from other stats seemingly randomly, and also since not all items are perfectly budgeted, however as a whole the stat gain is reliably measurable. )

This information is important to consider since the increased stat allocation offsets the increased cost of more avoidance. Going up a tier will always provide you with significantly more stat points than diminishing returns will take away. Note that it does not entirely balance out--it's not intended to. Avoidance is supposed to diminish, and it does so on a completely reasonable curve.

This seems like a no-brainer, but the idea seems to be going around that there is a currently reachable point where your avoidance diminishes in such a way that you will only be gaining a small fraction of it. This is false. In the best currently available gear, the greatest reduction you will see on your avoidance ratings is roughly 28%, which is only 16% more than what a tank in 333 blues would see.

TLDR: In this expansion's lifetime, you will always gain more avoidance from the increased rating than you will lose from the increased diminishing returns. Avoidance is not a bad stat because it diminishes. Avoidance will continue to provide significant benefits far into the DR curve, including gearing points at which certain classes stop gaining benefit from mastery.

The original attack tables guide (It's now locked) is available here:
Might be still worth a read for some of the comments but much of the information is now outdated.
Edited by Waniou on 8/28/2012 1:52 AM PDT
Reply Quote
85 Human Paladin
Reserving another for good measure.
Reply Quote
85 Blood Elf Paladin


Also you wrote half the macro. You deserve credit for it as well!

Also for anyone wanting to go thru the comments of the original:
Edited by Celyndrashad on 5/8/2011 4:04 PM PDT
Reply Quote
100 Draenei Warrior
Sweet, got my re-sticky! :D Thank you, mysterious forum moderator and/or moderators who got my thread all fixed up nicely!
Reply Quote
85 Human Paladin
05/10/2011 10:11 PMPosted by Ðemolition
how come they asked you to redo it?

He wanted to add stuff and ran out of reserved posts.
Reply Quote
100 Draenei Warrior
Yeah, basically that. I never reserved any posts, so I asked them if they could somehow add some. This was their solution, and, well, it's worked.
Reply Quote
85 Human Paladin
Throwing this in.

0.61% agi->dodge and 0.2652% str->parry after kings.
Reply Quote
85 Blood Elf Paladin
Throwing this in.

0.61% agi->dodge and 0.2652% str->parry after kings.

I tend to dislike thinking of it that way because people might multiply their post kings agility/str by those numbers instead.

There are two basic ways of look at it (using 100 unbuffed agility):

(1.05 kings)*(0.58)*(100 unbuffed agility)=0.61*100 unbuffed agility


(1.05kings)*(0.58)*(100 unbuffed agility)=0.58*(105 kings buffed agility)

Saying that its 0.61 after kings i think the average player will do this:

(1.05kings)*0.61*(100 unbuffed agility)=0.61*(105 kings buffed agility) which is wrong.

I know theck et al use 0.61 but they are not likely to make that mistake.
Edited by Celyndrashad on 5/11/2011 4:32 PM PDT
Reply Quote
85 Dwarf Paladin
I am bringing this alt up. I have heard on other forums, maybe DK cause I am doing one of those too, that there is a DR with parry and dodge being too far apart. They recommend one being ahead of the other since they can get that buffed in the raid. This presentation does not mention a problem with that disparity. Is there a reason to have them close together?
Reply Quote
100 Draenei Warrior
Diminishing returns on parry and dodge are independant of each other. As an example, if you have 1000 parry rating, getting 100 more will increase your parry chance by the same amount whether you have 100 dodge rating or 10000 dodge rating. So basically, to get the most avoidance, you want to minimise how much you lose to diminishing returns, which is why you want to balance them out.
But you're kinda right, getting buffs will affect your avoidance because you get more avoidance from agility than strength, and the way Kings/MotW affects your agility is different to how it affects your strength (Because you'll have about 10 times as much strength as agility). If you look at the two macros there, you'll see a +549 and a *1.05, that's the macro taking that into account. If you get your parry that much more than your dodge, when you get full raid buffs, you'll have your dodge/parry perfectly balanced.
Reply Quote
85 Blood Elf Paladin
A question regarding the DM macro for Dodge and Parry. I run the macro and it gives me a number of say...keep 150 parry rating over dodge. What if I am like twice as stacked in the parry % than dodge? I guess what I am trying to ask is... Should I reforge all my parry to dodge to keep it with in the desired rating? I currently have ~10% dodge and ~16% parry.
Reply Quote
100 Draenei Warrior
Pretty much, yeah, that's the point. You want to reforge parry to dodge, or vice versa, until you're about that point. Obviously, getting exactly on it will be damn near impossible but getting close is good.
Reply Quote
100 Blood Elf Paladin
Is the avoidance formula assuming certain talents within the tanking tree of a given tank-class, or does it just go from the raw numbers? I just want to make sure I'm using it right before I start tweaking my gear to hit the right numbers.
Reply Quote
100 Draenei Warrior
The one that gives you how much more parry than dodge you want? Yeah, that's independant of spec since there aren't any talents that affect your avoidance anyway.
Reply Quote
85 Blood Elf Paladin
In preparation for 4.2 my new macro:

==Paladins/warriors/dks using mastery food===
/run local _,s,p,n=UnitStat("player",2) print("Must be unbuffed. Try to keep Parry Rating this much higher than dodge: "..string.format("%.2f", 0-(((UnitStat("player",1)+549)*1.05-UnitStat("player",1))*0.27)))

If you prefer a macro giving a positive number this is the same thing:
/run local _,s,p,n=UnitStat("player",2) print("Must be unbuffed. Try to keep Dodge Rating this much higher than Parry: "..string.format("%.2f", (((UnitStat("player",1)+549)*1.05-UnitStat("player",1))*0.27)))

===Using dodge food===

/run local _,s,p,n=UnitStat("player",2) print("Must be unbuffed. Try to keep Parry Rating this much higher than dodge: "..string.format("%.2f", 90-(((UnitStat("player",1)+549)*1.05-UnitStat("player",1))*0.27)))

If you prefer a macro giving a positive number this is the same thing:
/run local _,s,p,n=UnitStat("player",2) print("Must be unbuffed. Try to keep Dodge Rating this much higher than Parry: "..string.format("%.2f", (((UnitStat("player",1)+549)*1.05-UnitStat("player",1))*0.27)-90))
Edited by Celyndrashad on 7/1/2011 1:46 PM PDT
Reply Quote

Please report any Code of Conduct violations, including:

Threats of violence. We take these seriously and will alert the proper authorities.

Posts containing personal information about other players. This includes physical addresses, e-mail addresses, phone numbers, and inappropriate photos and/or videos.

Harassing or discriminatory language. This will not be tolerated.

Forums Code of Conduct

Report Post # written by

Explain (256 characters max)