There’s been some question about how the new block mechanics will affect our damage intake, and how the different stats (dodge, parry, matery, hit, expertise, and even haste) will compare for minimizing that metric. While damage intake isn’t always the most relevant metric, it is one that’s fairly easy to calculate and gives some basic information about the baseline effectiveness of different stats. In this series of posts, I will work through the full derivation and make some comparisons between the different secondary stats.
It’s also worth noting that our mechanics will be changing in the near future, according to a new forum post by Ghostcrawler. The previous version had us gaining 25% block value and one guaranteed block for 6 seconds. The new version will have us gaining 45% block value for the guaranteed block (total of 75%) and 20% block value (total of 50%) for the remainder of the buff duration. I’m modeling the new mechanics, though it’s fairly trivial to convert this derivation to the old mechanics if things change down the line.
The formula for time-averaged damage taken per second (DTPS) is
is the net damage taken per second after all mitigation and avoidance effects
is DTPS before all mitigation and avoidance effects
is the armor mitigation factor, calculated the usual way
is your decimal avoidance from all sources, after diminishing returns
is the “block factor” which models blocking mitigation.
As I said in an earlier blog post, this differs from the old one-roll system because it converts a combined avoidance/block factor like into two multiplicative factors
and
. In that earlier post, I gave an explicit form for the block factor:
. If we ignored Shield of the Righteous (SotR),
is just your block value (30%) and
is your character sheet block chance. However, SotR throws a wrench into everything. We can still express it in a form similar to the one given above, but with more complicated expressions for the average block value
and average block chance
. And we’ll find that there’s no compelling reason to do so, as there’s a different form that gives more insight into what’s going on anyway.
To calculate , we start with the following expression:
Let’s go through this term by term. The first term is the chance that we are guaranteed a block by Shield of the Righteous () times the amount of damage we take when that happens
, where
is our block value for the guaranteed block (75%). After distributing, the second term is
, which is the chance that we don’t get a guaranteed block
multiplied by our block chance $B_c$ multiplied by the probability that the SotR buff is active
multiplied by the damage taken during that buff
, with
being our block value during the 6-second SotR buff (50%). In other words, this term represents the chance that we aren’t guaranteed a block, but block anyway during the 6-second duration of the SotR block value buff. There’s a subtlety here involving
that complicates matters, but we’ll come back to that later.
The third term is , which represents the chance that we aren’t guaranteed a block, but do so anyway without the SotR buff active. And the final term is
, which is the chance we don’t get a guaranteed block and that our natural block mechanism fails us, forcing us to take a full sized hit (damage taken = 1). Those are the four possible outcomes of the system, each weighted by their individual probabilities. And in fact, it’s easy to show that this expression is correct: let
and
equal zero, and the expression sums to 1, just as one would expect for a sum of probabilities that spans the space of possible outcomes.
With a little bit of algebra, we can put this in one of two simpler forms:
(1)
or, equivalently
(2)
Each expression gives slightly different intuition. The first expression says your block mitigation factor is just one minus the mitigation from guaranteed blocks minus the mitigation from non-guaranteed blocks, with an average block value based on SotR uptime
. In other words, it breaks it down by the type of block – guaranteed versus not guaranteed. The second expression breaks it down differently, by the amount of block value. In this case, the factor is one minus the mitigation from blocks of size
minus the mitigation from blocks of size
minus the mitigation of regular blocks (
). The coefficients of each term are simply the probabilities for blocking each amount.
As I said earlier, we could put this in a form by defining the overall chance of blocking
. With that definition, we get the following form for
:
.
But this version doesn’t do much for us – it’s no simpler an expression than (1) or (2), and it doesn’t give us any additional insight into the meaning of the terms. So for any of our calculations, we’ll start with one of the numbered equations.
We already know ,
,
, and
from the character sheet. All that remains is to calculate
and
and we have a complete analytical expression describing the new block mechanics. Let’s proceed to do that.
Calculating is fairly straightforward. The probability that any given attack will be a guaranteed block is simply
where is your SotR cast rate, and
is the incoming blockable attack rate, or one over the time between blockable attacks
. Note that this is a little different from the boss’s attack rate because of avoidance. It’s actually
, where
is the boss’s “true” attack/swing timer. So we need to assume a boss attack speed to get useful results, which is annoying, but do-able. Since SotR is off-GCD, we can estimate the SotR cast rate pretty straightforwardly as your HP generation rate divided by three, or
However, is complicated slightly if we want to include talents. Holy Avenger is actually fairly easy since it can be modeled as a simple increases to your average HPG rate. Divine purpose is more irritating, because it’s a 15% chance on every SotR to proc the effect. So it modifies the SotR cast rate as follows:
where I’ve let be the DP proc rate in case it changes. Solving for SotR:
Luckily, , is easily calculable (analytically or via simulation) for a given rotation and haste value. So we can get the information we need to calculate
.
looks very tricky, but ends up being deceptively simple. My first attempts were pretty ugly, involving double-integrals of a comb function multiplied by a rect function. And they were correct, but I realized afterward that the resulting expression was something I could have guessed using geometry. So I’ll give you the easy version:
The duration of the SotR buff is . The uptime of the buff is
, bounded by
(i.e. if the product ever goes above 1, it equals 1 because we cap out at 100% uptime). The number of boss attacks that occur during the buff is
, bounded by
. So far so good.
But isn’t the probability that the SotR block value buff is active (i.e., it’s not the uptime). In fact, it’s the probability that the buff is active for attacks that weren’t already guaranteed to be blocked due to the other SotR buff. So we need to account for the guaranteed blocks. The rate of guaranteed-blocked attacks is just
, bounded by
, and the rate of non-auto-blocked attacks is
, bounded by
.
To calculate properly, we need to find
or their equivalent rates. Which is:
You might notice that this expression looks questionable, in particular the denominator. If , it looks like
. In fact, it doesn’t, because the numerator goes to zero in that situation as well. This is why I was careful about specifying the bounds of each term earlier on – in the limit where
, the term
approaches its upper bound of
, and the expression approaches 1. That’s good, because it’s what you’d logically expect – if you’re casting SotR as often as the boss is swinging, the buff should be up for every attack (though note that
in this limit as well, making this a bit of a moot point).
This expression for is the last piece of the puzzle, because we have all of those values already. From this point it’s just a matter of doing some substitutions and taking some derivatives. In the next installment, I’ll make those substitutions and derive the expressions that will tell us how mastery stacks up to dodge, parry, hit, expertise, and haste.
