L90 Warrior Mitigation Followup

Last week we discussed mitigation stat weights for warriors using a Monte-Carlo simulation.  While the results were interesting, the simulation was very limited, and left a lot to be desired.  Since then, I’ve been having detailed discussions with a number of protection warriors, both in the comments and on tankspot, to try and improve the modeling.

For starters, I’ve fixed a number of bugs in the initial simulation.  I was mistakenly using the wrong mastery conversion factor, generating block and crit block values that were far too low.  The Sword and Board proc rate was also too low, and Berserker Rage was being treated as on the global cooldown.  The mastery error made mastery much weaker than it should have been.  And all three of these errors reduced the average rage generation rate, which artificially propped up the value of hit and expertise.

The absence of Shield Barrier was another major point of discussion.  The original model only included Shield Block, whose cooldown mechanic put an effective cap on the usefulness of hit and expertise.  As a result, it was no surprise that hit and expertise performed very poorly once it neared the theoretical maximum of Shield Block uptime.  While the results we obtained are correct for that model, it’s a fair criticism that the model doesn’t do a great job of modeling a real situation.  So one of the major improvements I’ve made to the model is to implement Shield Barrier.

I’ve also made some minor improvements to the queue code.  We now have independent choice of generator and finisher priority.  The generator code handles Shield Slam, Revenge, Devastate, Thunder Clap, Battle Shout, and Berserker Rage, and we have two choices for our generator priority.  The first is a “long” scheme designed for steady-state single-tank fights.  It prioritizes SS>Rev>BS>TC>Dev, and uses Berserker Rage off-GCD whenever it’s available and won’t over-cap rage.  The second priority is a “short” scheme, designed for tank swap fights.  It assumes you’ll only be tanking for 20-30 seconds, and that your co-tank will be keeping up Weakened Blows.  As such, it prioritizes SS>Rev>BS>Dev, and ignores TC entirely.  It uses the same Berseker Rage logic as the long version.

For finisher priority, we have several choices.  The first is the one we used previously, a “Shield Block only” scheme.  We also have a complementary “Shield Barrier only” scheme.  Neither of these need much explanation.  The third scheme is a combination queue that uses Shield Barrier to bleed excess rage.  The logic is pretty straightforward: use Shield Block if we can (i.e. we have rage and it’s not on cooldown).  After trying to cast Shield Block, if we still have more than 100 rage, use Shield Barrier to bleed some off.

These improved models should give us a much better idea of how the stats perform in realistic scenarios, where Shield Barrier usage gives an outlet for the excess rage that hit or expertise provide.  Now let’s take a look at the data.

“Long” generator queue, “Bleed” finisher queue:

N=50, tau=10000, stat=1500

|          |  dodge |  parry |    hit |    exp | mastery |
|     mean | 0.0078 | 0.0078 | 0.0057 | 0.0058 |  0.0102 |
|      std | 0.0006 | 0.0005 | 0.0005 | 0.0006 |  0.0006 |
| std_mean | 0.0001 | 0.0001 | 0.0001 | 0.0001 |  0.0001 |
|          |        |        |        |        |         |
|     mean | 0.7594 | 0.7589 | 0.5568 | 0.5668 |  1.0000 |
|      std | 0.0553 | 0.0447 | 0.0445 | 0.0538 |  0.0598 |
| std_mean | 0.0078 | 0.0063 | 0.0063 | 0.0076 |  0.0085 |

This is the realistic “steady-state” simulation.  Again, the first three rows reflect the raw difference in damage taken, and the second three rows give the results normalized to the mastery value.  There are a few big things to notice here.  First, the corrections to the sim have vaulted mastery ahead of dodge and parry as the top stat.  That’s not too surprising – we expected it to get at least 2.2x better due to the conversion rate, and that’s before the extra rage income from critical blocks is considered.  So it’s fairly safe to say that mastery, not avoidance, will be the king stat for warriors.

More importantly, note that hit and expertise have a fairly significant TDR value now.  They’re a little over half as good as mastery, but lag behind dodge and parry a bit.  The corrections to the sim have put us above the “rage cap” (at which Shield Block uptime nears its theoretical maximum) even at zero hit and expertise.  So apart from a small smoothing benefit, all of this value is from Shield Barrier usage.  This also means that there’s no intermediate point at which hit and expertise drop in value – they should maintain roughly this level of effectiveness all the way up to their hard-caps.

“Long” generator queue, “Shield Barrier Only” finisher queue:

N=50, tau=10000, stat=1500

|          |  dodge |  parry |    hit |    exp | mastery |
|     mean | 0.0101 | 0.0099 | 0.0050 | 0.0050 |  0.0060 |
|      std | 0.0006 | 0.0007 | 0.0007 | 0.0007 |  0.0006 |
| std_mean | 0.0001 | 0.0001 | 0.0001 | 0.0001 |  0.0001 |
|          |        |        |        |        |         |
|     mean | 1.6633 | 1.6429 | 0.8347 | 0.8274 |  1.0000 |
|      std | 0.0956 | 0.1139 | 0.1218 | 0.1222 |  0.1048 |
| std_mean | 0.0135 | 0.0161 | 0.0172 | 0.0173 |  0.0148 |

A Shield Barrier priority shifts things around quite a bit. First of all, mastery loses significant value thanks to the lack of Shield Block uptime.  It still gives block, crit block, and resource generation.  But without all of the guaranteed blocks from Shield Block, it just can’t keep up with avoidance, which vaults ahead in the TDR race.  hit and expertise also gain ground on mastery, though in this case they don’t eclipse it.  The boss damage we’ve chosen is high enough that it should favor Shield Block over Shield Barrier in terms of finisher use, which also means that dodge and parry will retain strength over hit and expertise.

For a boss that hits more weakly or a boss with a significant amount of unavoidable damage we’d see a reduction in the dodge/parry/mastery values and a significant jump in hit and expertise.  The sim doesn’t support unblockable/unavoidable damage yet, but it doesn’t take data to recognize the dominance of Shield Barrier in those situations.

“Long” generator queue, “Shield Block only” finisher queue:

N=50, tau=10000, stat=1500

|          |  dodge |  parry |    hit |    exp | mastery |
|     mean | 0.0071 | 0.0071 | 0.0004 | 0.0003 |  0.0079 |
|      std | 0.0005 | 0.0005 | 0.0005 | 0.0004 |  0.0005 |
| std_mean | 0.0001 | 0.0001 | 0.0001 | 0.0001 |  0.0001 |
|          |        |        |        |        |         |
|     mean | 0.8957 | 0.9008 | 0.0556 | 0.0438 |  1.0000 |
|      std | 0.0626 | 0.0675 | 0.0677 | 0.0544 |  0.0580 |
| std_mean | 0.0088 | 0.0095 | 0.0096 | 0.0077 |  0.0082 |

The “Shield Block only” queue is essentially the model we used last time.  I’m only including it here to provide contrast and confirm our earlier results with the more accurate mastery modeling.  And indeed, we see again here the weakness of hit and expertise, and the dominance of mastery/dodge/parry for TDR.  We also see the residual value of hit and expertise is next to nothing in the absence of Shield Barrier.

“Short” generator queue, “Bleed” finisher queue, front-loaded 30 sec sim:

N=1000000, tau=0.5, stat=1500

|          |  dodge |  parry |    hit |    exp | mastery |
|     mean | 0.0068 | 0.0066 | 0.0069 | 0.0070 |  0.0111 |
|      std | 0.0787 | 0.0787 | 0.0783 | 0.0780 |  0.0777 |
| std_mean | 0.0001 | 0.0001 | 0.0001 | 0.0001 |  0.0001 |
|          |        |        |        |        |         |
|     mean | 0.6116 | 0.5950 | 0.6231 | 0.6306 |  1.0000 |
|      std | 7.0751 | 7.0736 | 7.0364 | 7.0122 |  6.9847 |
| std_mean | 0.0071 | 0.0071 | 0.0070 | 0.0070 |  0.0070 |

The “short” simulation runs a million 30-second encounters, and front-loads the initial conditions so we start with 120 rage.  The idea is to simulate a tank swap situation and see whether the short time frame and unusually-high Shield Block uptime changes the stat priorities at all.

And as we see, it does have a pretty significant effect.  Because we start with both Shield Block charges and full rage, we can keep Shield Block up for 27 of those 30 seconds.  Extra rage generation doesn’t have a large effect on Shield Block uptime; in fact, in the short simulations I ran using a “Shield Block only” finisher queue, hit and expertise were nearly worthless.  But it does help generate more Shield Barrier uses with rage bleed, and as a result we see very similar hit and expertise stat weights to those we obtain from the steady-state simulation.

What change significantly is the dodge and parry valuations.  The high uptime of Shield Block means that our dodges and parries are less effective – we’re turning blocks or crit-blocks into full avoids, which is a significantly smaller damage savings than turning a full hit into an avoid.  As a result, the dodge and parry TDR values fall behind hit and expertise.  Being able to get up another Shield Barrier is just more valuable under these conditions.

This is an interesting result for another reason.  It’s usually the case that “RNG” stats like dodge and parry are better for raw TDR than “control” stats like hit and expertise.  But in this specific case, the control stats give you the best of both worlds.

Damage Intake Mapping

This is a feature I’ve had implemented for quite a while, initially intended to look at damage intake patterns in my paladin modeling.  The idea is to try and quantify the benefits of “control” stats by analyzing how it affects the “smoothness” of damage intake.  I still intend to do that, but this warrior modeling has taken more time than I expected, so I haven’t gotten to it.  However, I think there’s something to be gained in this article by including some basic results.

The code calculates the moving average of damage taken per second over 5 attacks (7.5 seconds) for the entire encounter.  This 5-attack moving average represents a potential spike window.  The assumption is that “control” stats smooth the damage intake patterns and reduce the representation of high-DTPS values in the moving average, shifting the distribution to lower-DTPS values.

What I want to address here, though, is the disparity between Shield Block and Shield Barrier.  Under certain conditions, a Shield Barrier cast will prevent more overall damage than a Shield Block cast, even against blockable damage..  Some have suggested that this will lead warriors to simply spam Shield Barrier as a finisher.

I don’t know whether that’s true or not, but my gut feeling is that it won’t be optimal even if it is better for TDR.  And the reason is simply spike damage and control.  To explain, let’s look at the damage intake pattern for the “Bleed” finisher strategy.  We’ll use a raw boss damage of 250k per attack, which is around 93k after mitigation (armor, spec, Weakened Blows).  That attack size with a 1.5-second swing timer gives about 67k Vengeance AP, or a 150k Shield Barrier absorb per cast.

The first plot to consider is a histogram of hit size:

Hit size histogram for the "Bleed" finisher strategy

Hit size histogram for the “Bleed” finisher strategy

The statistics on this plot require a bit of explanation.  The stats for avoids, crit blocks, blocks, and full hits are just what you’d expect – the percentage of each of those event types.  Beneath that, I’m reporting some absorption information, which gives the (absolute) percentage of each type of attack that is absorbed.  In other words, 0.54% of all attacks were rolled as hits but partially absorbed, and 0.95% were hits that were fully absorbed.  So while 22.3% of all attacks were rolled as hits, only 22.3-0.54-0.95=20.81% were actually taken as full sized hits.

However, note the distribution of hit sizes here.  There are very few full hits, and a lot of partial mitigation events.  That’s the point of damage smoothing: whittle as many of those full hits as possible down into smaller-damage chunks.  This idea is further reinforced if we plot is a histogram of the 5-attack DTPS moving average:

Histogram of 5-attack moving average DTPS for the "Bleed" finisher strategy

Histogram of 5-attack moving average DTPS for the “Bleed” finisher strategy

You can see that this is a very smooth distribution.  We have a lot of events in the middle of the plot, in the 50% average DTPS range.  Remember that all of the DTPS values in this sim are normalized, so “0.5” or 50% average DTPS means half of the DTPS you’d get if the boss hit you for 93k on all 5 attacks.  Most importantly, you’ll note that there are very few events at the upper end of the spectrum, above 90% DTPS.  That’s the advantage of a smoothing strategy – you minimize the number of high-DTPS periods you’ll experience, reducing the chance you’ll die to a spike and making you easier to heal.

Now let’s see how this changes if we use the “Shield Barrier only” strategy:

Hit size histogram for the "Shield Barrier only" finisher strategy

Note that most of the events have moved to the extremes.  We have very few events in the middle, which are the small, slow hits.  Instead, we have about 40% of our events doing zero damage (avoids and full absorbs) and another 40% at the high end doing full damage.  The binary nature of this will generally mean that damage intake is spikier, even though we’re actually taking less damage overall (note that DTPS drops from about 53% to 49% by switching to this strategy).

If we plot the 5-attack DTPS moving average histogram, we see a similar story:

Histogram of 5-attack moving average DTPS for the "Shield Barrier only" finisher strategy

Even though the mean of this distribution is smaller, the standard deviation is considerably larger.  We have a much wider distribution of damage spike sizes.  And while we have more near zero intake, we also have more at the extreme upper end.  Rather than 1-1.5% of our events falling above 90%, we have closer to 4% of our events in that range.  That’s a 2x-3x increase in dangerous spikes that you or your healers have to react to.

Now, you could make the argument that a smart player will use Shield Barrier on alternating attacks to make sure they don’t take two full-sized hits in a row.  That’s somewhat limited by rage income, which is where the events above 90% intake come from.  However, you could make the same argument for the “Shield Block bleed” strategy.  A good player will be trying to minimize those upper 10% of events in either strategy.  But the player using the Shield Block strategy has fewer of them to deal with to begin with.


It’s perhaps unsurprising that we’re seeing some parallels to paladin gearing strategies in both the stat and finisher choices here.  There’s the high-TDR Shield Barrier strategy that gives spikier damage profiles, and the lower-TDR “Bleed” strategy that smooths the damage profile at the expense of about 10% increased damage intake.  You could make a similar argument for hit/exp/mastery gearing vs. dodge/parry gearing.  The inclusion of Shield Barrier in the sims has given a new level of validation to hit and expertise as reasonable defensive stats.

All things considered, I think that Blizzard has done a pretty good job of balancing the stats for warriors.  All of the different stats are within spitting distance of one another, and there’s some valid reasoning for choosing the lower-TDR stats.

This entry was posted in Tanking, Theck's Pounding Headaches, Theorycrafting and tagged , , , , , , , , , , . Bookmark the permalink.

30 Responses to L90 Warrior Mitigation Followup

  1. Mythor says:

    The 4p bonus (Reduces the cost of your Shield Block ability by 5 Rage and increases the damage absorbed by your Shield Barrier by 5%) will fit very nicely in the ‘bleed’ strat.

    The spikes in Sbar only fight still make me worried about those kind of encounters but for sblock/sbar fights I like the results.

  2. Button says:

    Excellent analysis! Much more thorough than your last, and the best DR vs smoothing comparison I’ve seen yet.

  3. tigerlol says:

    Awesome stuff and greatly appreciated!

  4. Coreus says:

    This was a great read! I’m also really impressed with what the devs have done with Warrior stats overall. The strength of Mastery in a tank-swap fight is especially interesting.

    Worth noting the confirmation bias though. I do agree with you, but it was hard not to notice your expectation of proving Shield Block as superior.

    • Theck says:

      I’m not sure what you mean by that comment about confirmation bias. The tests were run independently of bias. The text might sound biased, but keep in mind that I also had the advantage of *knowing the answers* while writing it.

      If you’re saying I’m biased towards smoothness over TDR, well, sure. Have you read any of the other posts on the blog? 😛 I’m pretty consistently biased towards damage smoothing, but most good tanks are.

  5. tigerlol says:

    While mastery seems to be the strongest stat, how do you think we should go about customizing our gear? I am returning to the game after a pretty long break (before mastery was introduced). Back then it was EH all the way. Now when choosing between mastery, parry, dodge, hit and expertise, can we expect some values where X mastery becomes less favourable than X of another stat?

    I mostly want to understand if and why it would be better to ignore hit and expertise and only go for mastery when you can, or if balance is king. At this point it seems to me like you should gem mastery, reforge hit and expertise to mastery if you can, and maintain a good ratio between dodge and parry. But are there situations where reforging from hit and expertise to dodge or parry can be more favourable?

    Awesome job on this blog and thanks for doing some work for us warriors.

    • Theck says:

      I think that whether you use hit and expertise comes down to a damage smoothing argument. Hit and expertise might not give you the highest TDR, but they give you more Shield Barriers to use in the gaps between SB casts, which smooths your damage intake. It’s much the same rationale as the “Bleed” vs “Shield Barrier Only” comparison in the blog post.

      I’m in the “damage smoothing” camp myself, so I see no problem with aiming for hit and expertise caps (soft or hard, depending on preference) before stacking more mastery.

  6. Booi says:


    You mentioned that your sim uses a 1.5 second swing speed. I don’t have access to the beta so I can’t verify this. But Teng suggests that 2 seconds is closer to the norm:


  7. Jackinthegreen says:

    Theck, were you using Barrier at 60 rage with this, or was it anywhere between 20 and 60?

    • Theck says:

      60 rage only.

      • Jackinthegreen says:

        Some tests run on EJ’s warrior forums (http://elitistjerks.com/f81/t126901-mists_pandaria_all_specs/p20/) show less spikiness when using barrier at various rage levels.

        • Theck says:

          Yeah, I’d expect that. Your spike period would generally fall during the SB downtime period. So using any SBr in that period, even a low-rage one, would lower spikes.

          In fact, it’s probably more effective to scatter 20-rage SBrs and cover more of those periods. I didn’t think about coding the logic for that, but a simple (use SBr if rage>20 and SB unavailable) might approximate it pretty well. My worry is that it would accidentally lower SB uptime because of rage starvation, but it may still be a smoother result.

          • Siliconlife says:

            Awesome analysis here!

            I’m interested in SBlockSBar discussion, as i still dont know which one is better. Some people say SBar all the way. Your conclusion on “Shield Barrier” only shows it’s pretty spikey, but mitigates more damage. I would like to see a 20-rage SBars simulation to see the impact on smoothness.
            Also, what do you think about targeted SBar’s; Will saving up Rage for high spike damage put SBar > SBlock in respect to smoothness?

          • Gregasaurous says:

            As we saw in Dargon Soil, pooling resources to survive a Tank-Killing-Laser-of-Doom is sometimes an unavoidable strategy. I’m not sure if we’ll be facing many similar situations in MoP (haven’t acquainted myself with boss mechanics just yet) but at the end of the day we all do what we have to too stay alive.

  8. Pingback: Avoidance, Mitigation, and Damage Smoothing | Sacred Duty

  9. Pingback: Mists of Pandaria: All Specs - Page 20 - Elitist Jerks

  10. nickstaroba says:

    Thanks for this Theck! Very interesting read and not too difficult despite my lack of education in higher mathematics. I’ve referenced this article in my thread over at askmrrobot.com: http://forums.askmrrobot.com/index.php?topic=4088.msg27290#msg27290 (which you’ve already posted in). Just trying to get some updated stat weights ready for raid on Tuesday. Would appreciate any further input you may have.

  11. Pingback: Mists of Pandaria: All Specs - Page 21 - Elitist Jerks

  12. Pingback: [MoP] Protection Warrior - Page 5 - Elitist Jerks

  13. Pingback: The Care and Feeding of Warriors: Tanking itemization » Pandaria.nl - World of Warcraft Mists of Pandaria blog

  14. Pingback: The Care and Feeding of Warriors: Tanking itemization | Mass-Dispel

  15. Pingback: The Care and Feeding of Warriors: Tanking itemization - Owned Gamers

  16. Pingback: The Care and Feeding of Warriors: Tanking itemization : Mists of Pandaria

  17. Pingback: The Care and Feeding of Warriors: Tanking itemization | Mikes Wow Macros

  18. Pingback: 5.1 Warrior Simulations – Part 1 – The Model | Sacred Duty

  19. Pingback: 5.1 Warrior Simulations – Part 1 – The Model | Sacred Duty

  20. Pingback: 5.1 Warrior Simulations – Part 3 – Stat Priorities | Sacred Duty

Leave a Reply