MoP Mastery/Block Calculations – Build 15739

Last time, I mused on exactly how Blizzard would implement the mastery scaling on Shield of the Righteous (SotR). This week, build 15739 answered a few of our questions. Divine Bulwark now explicitly increases the damage reduction of Shield of the Righteous. This still doesn’t clarify whether the effect is additive or multiplicative; for example, does the 8% from our base 8 mastery turn SotR into 30%+8%=38%, or 30*1.08 = 32.4%, or even 1-(1-0.3)(1-0.08) = 35.6%? But I think an additive implementation is a safe bet for all of the reasons I outlined in the last post.

One nice feature of this implementation is that it vastly simplifies the analytical calculations of total damage reductions (TDR). In this post, I’ll go through that calculation and discuss the results. Note that at the time of this writing, I don’t have access to all of the constants required to do the calculation at level 90, so we’re going to use the values for level 85. I’m also going to use the newer notation conventions that I debuted in the warrior calculation.

1. The Incoming Damage Formula

The incoming damage formula has to be updated to reflect the new mechanics:

$D = D_0 S F_{ar} F_{av} F_{b} F_{S}\large$

In this expression, $D$ is net damage taken, $D_0$ is damage intake before avoidance and mitigation effects, and $S$ is the Sanctuary mitigation factor ($S=0.9$). $F_{ar}$, $F_{av}$, $F_{b}$, and $F_{S}$ are the armor, avoidance, block, and SotR damage mitigation factors, respectively, which we’ll define shortly. To see how damage varies with different stats, we’ll want to perform implicit differentiation on $D$:

$\frac{dD}{D_0 S} = dF_{ar} F_{av} F_{b} F_{S} + dF_{av} F_{ar}F_{b}F_{S}+ dF_{b} F_{ar} F_{av} F_{S} + dF_{S}F_{ar}F_{av}F_{b}\large$

We divide through by $D_0$ and $S$ to normalize since they don’t depend on any of the variables we’re interested in. As with the previous calculations, we’ll define each of the $F_i$ and evaluate derivatives until we express $dF_i$ in terms of the individual rating contributions $r_i$.

2. Armor Mitigation Factor

The armor factor is very simple. A character with $Ar$ armor has a mitigation percentage of

$M_{ar} = Ar / (Ar + K)\large$,

where $K$ is the armor constant (32573 for an 88 boss). The armor factor is then

$F_{ar} = 1-M_{ar} = K/(Ar+K)\large$,

and differentiating we get

$dF_{ar} = -dAr K / (Ar+K)^2 = \frac{-dAr}{f_{ar}}F_{ar}\large$.

We’ve defined $f_{ar}=(Ar+K)$ to put this in a similar form to the other expressions we’ll be deriving. You can think of $f_{ar}$ as a “rating-to-percent” conversion factor for armor, since that’s what $f_i$ will represent for rating $r_i$ throughout the calculation.

3. Avoidance Mitigation Factor

Avoidance is also fairly simple, though we do need to account for diminishing returns (DR). We’ll represent our total avoidance $A$ as:

$A = A_{0}+A_d\large$

where $A_d$ is the dodge gained from sources subject to DR (primarily rating), and $A_{0}$ represents avoidance from all other sources. The equations are symmetric in dodge and parry for paladins, so we only need to consider one of them. Since we chose dodge, $A_{0}$ will include all of our miss and parry (post-DR, of course), as well as base dodge. The avoidance mitigation factor is then:

$F_{av} = 1-A\large$

and differentiating this gives us

$dF_{av} =-dA_d\large$

To express the post-DR differentials in terms of rating, we need to differentiate the diminishing returns equation which links our pre-DR dodge $a_d$ to our post-DR dodge $A_d$:

$\frac{1}{A_d} = \frac{1}{C_d} + \frac{k_d}{a_d}\large$.

Differentiating, and substituting to eliminate $a_d$, we get:

$dA_d = \frac{da_d}{k_d}\left ( 1-A_d/C_d \right )^2\large$.

$C_d$ and $k_d$ in this expression are the diminishing returns coefficients for dodge $(C_d=0.65631440$, $k_d=0.9560)$. We can simplify this slightly by introducing an avoidance dependency factor $\Phi_{av}$:

$\Phi_{av} = \frac{1}{k_d}\left ( 1-\frac{A_d}{C_d} \right )^2\large$

such that $dF_{av}$ is

$dF_{av} = -\left ( \frac{dr_d}{f_d} \right ) \Phi_{av}\large$.

This expression makes our earlier definition of $f_{ar}$ a little clearer, since $f_d$ is our rating-to-percent conversion factor for dodge ($a_d = r_d/f_d$).

4. Block Mitigation Factor

The block mitigation factor is pretty simple now that it’s independent of SotR. The expression for $F_{b}$ is

$F_{b} = 1 – B_c B_v\large$,

where $B_c$ is our block chance and $B_v$ is our block value. $B_v$ is constant now (30%), so the differential $dF_{b}$ only has one term:

$dF_{b} = -B_v dB_c\large$.

To evaluate $dB_c$, we need to account for diminishing returns. Let’s express $B_c$ as

$B_c = B_c^{(0)} + B_c^{(DR)}\large$,

which splits our block chance into two parts: $B_c^{(0)}$ covers block chance that isn’t subject to DR (base block, Guarded by the Light) and $B_c^{(DR)}$ covers the diminished block gained through mastery. If $B_c^{(DR)}$ corresponds to a pre-DR block amount $b_c$, then the DR equation for block can be written

$\frac{1}{B_c^{(DR)}} = \frac{1}{C_b}+\frac{k_b}{b_c}\large$,

where $k_b=k_d$ and $C_b=1.351$ are the block DR coefficients. And just as we did with avoidance, we can differentiate and solve this to express $dB_c^{(DR)}$ in terms of $db_c$ and $B_c^{(DR)}$:

$dB_c = \frac{db_c}{k_b}\left ( 1 – \frac{B_c^{(DR)}}{C_b} \right )^2\large$.

If we define a block dependency factor $\Phi_b$:

$\Phi_b = \frac{1}{k_b}\left ( 1-\frac{B_c^{(DR)}}{C_b} \right )^2 B_v\large$,

then since $dB_c = dB_c^{(DR)}$ we have

$dF_{b} = -\left (\frac{dr_m}{f_{mb}}\right ) \Phi_b\large$.

In this expression, $f_{mb}$ is the mastery rating-to-block-chance conversion factor.

5. SotR Mitigation Factor

SotR’s mitigation is a little more involved simply because it depends on more than one stat. The expression for $F_{\rm SotR}$ is very simple though:

$F_{\rm SotR} = 1 – S M_{S}\large$

where $S$ is the uptime of the SotR mitigation buff and $M_{S}$ is the mitigation it provides in decimal form. Differentiating this is also quite simple:

$dF_{S} = -dS M_{S} – S dM_{S}\large$

We’ll need expressions for $S$ and $M_{S}$ to complete the derivation. Since $M_{S}$ is easier, we’ll start with that one.

5.1 SotR Mitigation Factor – Mastery Contribution

SotR gives a baseline 30% DR, and we’re assuming that mastery contributions are additive, so we can write the following expression for $M_{S}$:

$M_{S} = 0.3 + r_m/f_{mm}\large$

where $r_m$ is our mastery rating and $f_{mm}$ is the mastery-to-damage-reduction-percent conversion factor. Even though this is the same as the mastery-to-block-percent conversion factor in the current build (both are 1% per ~179 rating), it seems prudent to give it an independent scale factor just in case Blizzard decides that they need to be independently tunable in the future. The derivative of $M_{S}$ is clearly $dr_m/f_{mm}$, which is all we need to complete the mastery half of the SotR mitigation factor.

5.2 SotR Mitigation Factor – Hit/Exp/Haste Contribution

Since $S$ is the SotR buff uptime, it will depend on our SotR cast rate and subsequently our holy power generation rate. $S$ is quite simply the product of our SotR cast rate and the SotR buff duration,

$S = R_{\rm SotR} T_{\rm buff}\large$,

with the caveat that $S$ has an upper bound of unity. Since both factors are positive, $S$ will always have a value between zero and one (i.e. $0<S<1$). $R_{\rm SotR}$ can be related to our holy power generation (HPG) rate by the equation

$R_{\rm SotR} = R_{\rm HPG}/3 + \alpha_{\rm DP}R_{\rm SotR}\large$,

where $\alpha_{\rm DP}$ is the Divine Purpose proc rate (0.15 if talented and 0 if not). This can be trivially re-arranged to find $R_{\rm SotR}=R_{\rm HPG}/3(1-\alpha_{\rm DP})$. $R_{\rm HPG}$ is a little more complicated, having the form,

$R_{\rm HPG} = (1+s)(1+\alpha_{\rm GC})\theta R_{\rm CS} + (1+s)\theta_s R_{\rm J} + R_{\rm BL}\large$

where $s$ is our decimal spell haste (to account for Sanctity of Battle), $\alpha_{\rm GC}$ is the proc rate of Grand Crusader, $R_{\rm CS}$ and $R_{\rm J}$ are the Crusader Strike and Judgement cast rates, $R_{\rm BL}$ is the rate of Blessed Life procs, and $\theta$ and $\theta_s$ are our melee and spell hit factors defined below for $\mu$ chance to miss, $\delta$ chance to be dodged, and $\rho$ chance to be parried (each 7.5% for a level 88 boss):

$\theta = 1 – (\mu – h) – (\delta + \rho – e)\large$
$\theta_s = 1 – (2\mu -h – e)\large$

It is clear from these expressions that $d\theta=d\theta_s = dh+de$. Differentiating $R_{\rm HPG}$ gives us

$dR_{\rm HPG} = d\theta (1+s)\left [(1+\alpha_{\rm GC})R_{\rm CS}+R_{\rm J}\right ] + ds \left [ (1+\alpha_{\rm GC})\theta R_{\rm CS} + \theta_s R_{\rm J} \right ]\large$

where we’ve ignored the very minor variations in $R_{\rm BL}$ that occur due to dodge. Combining all of the equations in this section, we can write an expression for $dS$:

$dS = dR_{\rm SotR} = dR_{\rm HPG}/3(1-\alpha_{\rm DP}) = d\theta \sigma_h + ds\sigma_s\large$,

where $\sigma_h\large$ and $\sigma_s\large$ are

$\sigma_h = \frac{(1+s)\left [(1+\alpha_{\rm GC})R_{\rm CS} + R_{\rm J}\right ]}{3(1-\alpha_{\rm DP})}\large$

$\sigma_s = \frac{(1+\alpha_{\rm GC})\theta R_{\rm CS} + \theta_s R_{\rm J}}{3(1-\alpha_{\rm DP})}\large$

Which completes the calculation of the hit, expertise, and haste contributions.

5.3 SotR Mitigation Factor – Combining Terms

Combining the results of the previous two sections, we can write a final expression for $dF_{S}$:

$dF_{S} = -\frac{dh+de}{f_h}\Phi_h – \frac{dr_s}{f_s}\Phi_s – \frac{dr_m}{f_{mm}}\Phi_m\large$,


$\Phi_h = \sigma_h M_{S}\large$
$\Phi_s = \sigma_s M_{S}\large$
$\Phi_m = S\large$

It may seem a little overkill to define these $\Phi$ factors, but you’ll see the reason why I did in the next section.

6. Bringing It All Together

If we plug our expressions for $dF_{\rm ar}$, $dF_{\rm av}$, $F_{\rm b}$, and $dF_{\rm SotR}$ into the expression for $dD/D_0 S$, we get:

$\frac{dD}{D_0S} = -\frac{dAr}{f_{ar}}F_{ar}F_{av}F_{b}F_{S} – \frac{dr_d}{f_d}F_{ar}\Phi_{av}F_{b}F_{S} \\- \frac{dr_m}{f_{mb}}F_{ar}F_{av}\Phi_{b}F_{S} – \frac{dr_h+dr_e}{f_h}F_{ar}F_{av}F_{b}\Phi_h \\- \frac{dr_s}{f_s}F_{ar}F_{av}F_{b}\Phi_s – \frac{dr_m}{f_m}F_{ar}F_{av}F_{b}\Phi_m\large$

Now the definitions for $\Phi_i$ should be a little more obvious – they’re each a replacement for one of the $F_i$. If we combine terms, we can get fairly simple expressions for the damage reduction scale factors $\Delta_i$:

$\frac{dD}{D_0S} = -dAr\Delta_{ar}-dr_d\Delta_{av}-(dr_h+dr_e)\Delta_h-dr_s\Delta_s-dr_m\Delta_m\large$,


$\Delta_{ar} = \frac{1}{f_{ar}}F_{ar}F_{av}F_{b}F_{S}\large$
$\Delta_{av} = \frac{1}{f_d}F_{ar}\Phi_{av}F_{b}F_{S}\large$
$\Delta_s = \frac{1}{f_s}F_{ar}F_{av}F_{b}\Phi_s\large$
$\Delta_m = F_{ar}F_{av}\left (\frac{1}{f_{mb}}\Phi_b F_{S} + \frac{1}{f_{mm}}F_b\Phi_m\right )\large$

7. Plugging In Numbers

It’s a fairly simple matter to plug in numbers and see how these values compare. I’ve updated the old derivations.m script to match the above derivation and incorporate some of the new changes in recent beta builds. I won’t bore you with all of the constant factors (I defined most of them earlier in this post, and you can just take a look at the code to see them anyhow), but our test paladin has 40k armor, 30% avoidance (15% dodge, 10% parry, 5% miss), 2% hit, 2% expertise, 5% spell haste, and 20 mastery, which works out to a 33% chance to block after diminishing returns (~15% from base+spec, ~18% from mastery).

For a fair comparison, we’ll multiply the armor factor by 4, since we get 4 armor per itemization point compared to one of any type of rating. If we plug the above numbers into the calculation, we get the values below (multiplied by $10^5$ for simplicity):

$4\Delta_{ar} =1.2233\large$
$\Delta_{av} =1.3484\large$
$\Delta_{h} =0.2012\large$
$\Delta_{s} =0.1513\large$
$\Delta_{m} =1.0042\large$

Very interesting. So dodge still retains the TDR crown, followed closely by armor, just as before. Unsurprising, since neither of those two effects changed all that much. Mastery gains a lot of ground in this implementation though, as I’m sure we were all hoping it would. Hit and expertise fall in at a distant fourth, with haste pulling up the rear.

The SotR component is responsible for almost 70% of the value of mastery, which is also interesting – it means that even the block contribution is enough to keep mastery ahead of hit/exp/haste. That’s a vast improvement over the weak influence it had in the guaranteed-block implementation. At the very least, we can say that this version successfully addressed the mastery problems that the previous attempts introduced.

Later this week, I’ll be posting the results of the updated numerical simulation to make sure that the two give similar results. We’ll also look at some interesting statistical details about the results to see how consistent they are for different encounter lengths. And of course, now that level 90 has been unlocked on beta, we’ll soon have enough information to run this calculation with stat values and constants reminiscent of level 90 starter gear.

8. A Note on TDR

You might ask how relevant a TDR-based stat calculation will be for tanking in Mists of Pandaria. After all, we’ve harped on the relevance of TDR in several earlier blog posts. And the truth is that we don’t really know yet, because we don’t know what raiding will look like in MoP. It depends fairly intimately on game balance and encounter design. TDR tends to be important in a few select scenarios, specifically cases where bosses don’t stress tank EH but do stress healer mana. We’ve seen that happen fairly rarely, even in Cataclysm, but there are several healing changes (including a more constrained mana pool) that may make those situations more common in Mists.

On the other hand, we’ve noted before that sometimes stamina is a more effective way to conserve healer mana than damage reduction, simply based on healer psychology. The healer who feels like they have more time to react will be able to use more of their slower, mana-efficient heals. The healer that feels like their tank is in danger of spike death will call in the big guns regardless of mana cost. That’s a difficult (if not impossible) theory to quantify, but it’s not hard to see the logic in it.

In a practical sense, this means that we should take these numbers with a grain of salt. Yes, dodge, parry and mastery will be our prime TDR stats, but we’ll have to see what the encounter landscape looks like before we can say whether they’re still attractive survivability stats. For example, Mel and I have been discussing this issue for a few weeks now, and one point that’s come up several times is that TDR may undervalue hit/exp/haste. Having 75% DR on SotR instead of 60% isn’t necessarily better for survivability than having 60% DR and using the skill more often (via faster HPG). From a healer’s perspective, maybe 60% DR is “enough.” The tank with 60% DR but higher hit/exp will turn more 100k hits into 40k hits, which may be preferable to a tank that converts fewer of those 100k hits into 25k. Luckily, that is something we can quantify, either numerically with the Monte-Carlo or analytically with the formalism I’ve put forth in this post. I’ll hopefully get to revisit that question in a later blog post. So you hit/exp enthusiasts shouldn’t give up hope just yet!

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

3 Responses to MoP Mastery/Block Calculations – Build 15739

  1. BovineJudge says:

    I believe after going on the Beta myself that the mastery bonus is indeed additive and not multiplicative. I have 29 mastery and my SotR was reducing damage by 59%.

  2. Pingback: MoP Mastery/Block Simulations – Build 15739 | Sacred Duty

  3. Pingback: MoP Beta Mitigation Stat Weights – b15961 | Sacred Duty

Leave a Reply