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:
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:
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:
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:
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.