Math about Mastery and Holy Shield

There’s a lot of discussion going on about what Blizzard plans to do with our mastery.  We know they’re tinkering with it behind the scenes because they don’t like that we can reach a mastery cap.  However, we can only guess at exactly how they’re going to go about making those changes, if they make them at all.

One of the most common suggestions is that they’ll give us a mirror of the Warrior mastery by reducing the block chance granted but granting additional block value.  In other words, instead of 2.25% block chance per point of mastery, maybe we’d get 1.75% block chance and 0.4% extra block value.  There’s a lot to like about that idea.  It makes it harder to cap mastery, which is one of their stated design goals.  It also gives mastery acquired in excess of the cap some marginal value, reducing the devaluation of mastery and avoidance procs or on-uses.

But how would such a change affect our overall mitigation?  Tweaking parameters might make mastery more interesting, but it could cause collateral damage if it leads to a severe change in damage intake.  So, let’s take a look at some equations and see what we can figure out.

We can represent average damage taken per second (DTPS) pretty simply.  The formula is

DTPS = Do*Fa*S*[1-A-Bv*Bc]

In this notation, Do is unmitigated damage, Fa is the armor mitigation factor, S is the Sanctuary reduction factor, A is our total avoidance, and Bc and Bv are block chance and value, respectively.  A, Bv, and Bc are all represented in decimal format, so if we have a 52% chance to block for 41%, Bc is 0.52 and Bv is 0.41.

Before we go further, we can already draw a few conclusions.  First of all, we can ignore Do, Fa, and S – the quantity we care about is the relative change in damage taken.  Fa and S will obviously affect the absolute change in DTPS, but not the relative change.  We can get everything we need from the factor in brackets.

The second is that as long as the factor [1-A-Bv*Bc] remains constant, damage intake stays constant.  So if we fix avoidance at a reasonable value, it’s the product Bv*Bc that matters – as long as that product doesn’t change, damage intake doesn’t change.  That gives us a constraint equation to work with.  We want to change the way Bv and Bc scale with mastery without changing their product.

Let’s try that.  Right now, Bv doesn’t scale with mastery at all.  Bc, on the other hand, scales as 0.0225*M, where M here is our mastery.  If we want to allow both to scale independently with mastery, we define scale factors X and Y, such that

Bv=0.31+X*M
Bc=0.05+Y*M

In the current implementation, Y is 2.25% and X is zero.  If we want to change X and Y while keeping Bv*Bc constant, we have the following constraint equation:

(0.31+X*M)(0.05+Y*M)=constant.

The value of that constant depends on what level of mitigation we want to maintain.  If we’re considering 4.1 levels, then we’d want to maintain a value of (0.41)*(0.05+0.0225*M) to represent the 40% static block from Holy Shield.  If we’re interested in 4.2 values, we’d need to decide how to incorporate the new Holy Shield mechanic.  We could ignore it completely, and use (0.31)*(0.05+0.0225*M).  Or we could approximate it by assuming we use it on cooldown and taking a time average, in which case HS grants 6.66% extra block value, bumping the constant up to (0.3766)*(0.05+0.0225*M).

Chances are neither of those models are right – a good tank can probably eke out a higher effective block value by timing it well, and encounter mechanics might reduce its effectiveness.  But they give us two decent baselines to consider, so we’ll try both of those.  The only difference between the models is the average block value, so let’s call that Bvo and represent the constant as Bvo*(0.05+0.0225*M); that way we can just plug in an appropriate value for Bvo when we’re done.  We can solve the constraint equation for Y to see how it varies with X, which gives us

Y=[Bvo*(0.05+0.0225*M)/(Bvo+X*M) - 0.05]/M

While this doesn’t look particularly pretty, it’s actually relatively simple.  The scaling is a little easier to see if you ignore the base 5% block value, which gives you Y=Bvo*0.0225/(Bvo+X*M).  In that form, it’s clear that we just have a simple reciprocal relationship between Y and X*M.  Plotting the full version of Y for different values of X gives us a nice visual representation:

Plot of the constraint equation for X and Y for two different values of Bvo.

So for example, for a tank with M=23 mastery, X=0.15% and Y=2% would be almost identical to X=0% and Y=2.25% for total damage reduction, as would (X=0.2%, Y=1.96%), (X=0.3%, Y=1.84%), (X=0.4%, Y=1.74%).  The values for the green curve are a little higher because a higher “base” block value makes block chance more valuable, and thus we need to drop less of it to keep damage taken constant.  Since the two curves use different Bvo values, they’re essentially two different versions of the constraint equation that represent two different levels of damage intake.

If Blizzard does end up adjusting mastery this way, it will be easy to tell if it’s an overall buff or nerf to total damage reduction by figuring out where the point lies on this plot.  If it falls below the blue line, it’s a net increase in damage taken (a nerf), whereas if it falls above the green line it’s a net decrease (a buff).  If it falls between them, it’s probably more or less the same as the current mastery implementation (X=0%, Y=2.25%).

Perhaps a more practical question for many players is, “How will this affect our gearing priorities?”  In particular, how would this sort of a change affect the relative value of mastery compared to avoidance rating?  There are actually two aspects to that question, one fairly simple and one a bit more subtle.

The simple answer is that it doesn’t change anything near the balance point.  As long as the product Bv*Bc is constant, the relative worth of mastery and avoidance remains unchanged.  So that’s reassuring, at least – it means that if the change adheres to the constraint equation, we wouldn’t feel obligated to completely reforge our gear.

However, there’s a more subtle point buried in the equations.  We’re considering (0.3+X*M)(0.05+Y*M), which for X=0% and Y=2.25% scales linearly with mastery.  However, if X is nonzero it also gains a quadratic term, X*Y*M^2.  This means that mastery will get better (and thus more desirable) the more of it you have.  Practically, it also means that if you balance around a mastery value M, mastery will be stronger above that point and weaker below it.  So if we balance around having 20 mastery, the player with 15 mastery will get less benefit per point of mastery than the player with 25.  Luckily both X and Y are small, so it’s a very weak scaling and probably isn’t a significant enough effect to worry about.

I should note that there is one thing in here that does change the relative worth of avoidance and mastery: Holy Shield.  Changing the average block value Bv independently does change the product Bv*Bc, and that’s exactly what Holy Shield does.  Holy Shield at 10% static block (Bv=0.41) will give mastery a very different relative worth than 6.66% average block (Bv=0.376) or 0% (Bv=0.31).

To illustrate this, I’ve plotted the “mastery rating equivalent” of 1 point of avoidance rating, which is the amount of mastery rating it would take to give the same total damage reduction as 1 point of avoidance.  I’m plotting this as a function of character-sheet avoidance (either dodge or parry, not the sum) to show where the crossover point occurs – if the mastery rating equivalent is equal to 1, the two stats are equal.  If the mastery equivalent is larger than one, avoidance would be better, and if it’s less than one mastery would be better.

Plot showing the mastery/avoidance crossover point for different values of Bvo. Values of "mastery rating equivalent" higher than 1 mean avoidance is more effective at reducing damage taken, while values lower than 1 mean mastery is better.

We’re considering the case where X=0% here, so Bv=Bvo; remember that as long as we adhere to the constraint equation these are also equally valid for a combination value/chance mastery implementation.  I’ve plotted the equivalent for several values of Bvo, ranging from 0.31 (“I forgot to train Holy Shield”) to 0.376 (“I use it on cooldown”).  You can see from the plot that in the absolute worst case, where we ignore Holy Shield entirely, avoidance remains the stronger option until you’ve reached 17.42% avoidance on your character sheet.  However, using Holy Shield on cooldown drops that to 11.98%, which most of us have already eclipsed even after reforging as much avoidance to mastery as possible.  As I said before, skilled use of Holy Shield may be able to push that crossover point even lower, and encounter mechanics may raise it (though not past the worst-case of 17.42%).

In summary, it’s entirely possible to change our mastery without a significant impact on total damage taken, as long as the change satisfies the constraint equation given earlier.  There’s no rule that says Blizzard must obey that equation, of course, but at least we have the proper tools to evaluate such a change and see if it’s a net buff or nerf to our mitigation.  The new version of Holy Shield is certainly a nerf using that metric, though Meloree pointed out earlier this week that TDR isn’t always a very relevant measure of time-varying mitigation effects.  In any event, the “nerf” to our average mitigation isn’t enough to make avoidance more attractive than mastery for most tanks, even using the simple TDR metric.  Once the damage-smoothing advantages of mastery are considered, it’s still going to be our best secondary stat, at least until we reach block cap.

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

3 Responses to Math about Mastery and Holy Shield

  1. Pingback: Blognews – Loots / Boss Firelands, Ragnaros 25 « Tank'à'Faire : Tanking & Co

  2. Saif says:

    This reminds me to hit my GRE books. ;-)

    Thanks for explaining how the ability is modeled – this was a very clear explanation and while I’m not sure I grock it completely, I do have a better feeling for how the devs might go about making the changes that they do. Stuff that doesn’t seem organic or intuitive on the surface does still make sense that if you look at the mechanics underneath.

    As a programmer who has to explain fluctuating sales patterns and incomprehensible profit margins to business people for a living, I appreciate the effort you put in here. :-)

  3. BennyHill says:

    What if your block value didn’t change until you reached the block cap? Mc is the mastery at which you could block cap.

    [Bc + A 1]
    Bv=0.3677+X*(M-Mc)
    Bc=0.05+Y*Mc

    Y = 0.0225
    Solve for X such that d(Bc*Bv)/dM is the same whether or not you are block capped.

    d(Bc*Bv)/dM = d/dM [(0.3766 + X*(M - Mc))*Bc]
    d(Bc*Bv)/dM = X*Bc
    X = 0.008475 / Bc

    Estimating Bc as 0.65 at the cap yields X to 0.013, or 1.3% average block value per mastery.

    That would ensure that you don’t have a quadratic term and mastery would stay at the same mitigation value no matter how much mastery you have. Blizzard could even get creative about how you change your average Bv past the cap. Allowing mastery to reduce the CD of the new Holy Shield, increase the uptime, or increase the 20% increased block value would suffice and be more interesting than a passive bonus.

Leave a Reply