Suggested subtitles:

How to make String Theory look easy

Why I quit theorycrafting

101 reasons I should have majored in History

In the last post, we worked out the basic math modeling of our new block mechanics. That was actually the hard part, believe it or not – getting the model right is the biggest part of the job, and the most likely place to make mistakes. And we did have to make a few approximations to get there, but they should all reasonably good approximations.

Now, we need to take that modeling and calculate relationships between the different inputs. That takes a bunch of calculus, but it’s mostly straightforward plug-and-chug operations. So while it’s a lot of equations and math, it’s not terribly complicated or interesting math. In fact, after going through it, I’ll tell you that it’s incredibly tedious and ugly as hell. But we’re going to have to do it anyway, so let’s get down to it.

To recap from last time, we have the following equations:

$latex D = D_0 F_{a} F_{\rm av} F_{b}$

$latex F_{\rm av} = (1 – A)$

$latex F_b = 1 – GB_v” – (1-G) B_c S B_v’ – (1-G)B_c(1-S)B_v$

$latex G = R_{\rm SotR}/R_{\rm att}$

$latex S = R_{\rm SotR}(R_{\rm att}T_{\rm buff} – 1)/(R_{\rm att}-R_{\rm SotR})$

$latex R_{\rm SotR} = R_{\rm HPG}/3(1-\alpha_{\rm DP})$

$latex F_a$, $latex F_{\rm av}$, and $latex F_b$ are the armor, avoidance, and block mitigation factors, respectively. $latex G$ is the probability of any given attack being a guaranteed block due to Shield of the Righteous (SotR). $latex S$ is the probability that an attack which isn’t a guaranteed block occurs during the uptime of the *other* SotR buff, which gives increased block value. $latex B_c$ is our character sheet block chance, $latex B_v$ is our character sheet block value (30%), $latex B_v’$ is our block value during the SotR buff (50%), and $latex B_v”$ is our block value for the guaranteed block (75%). $latex R_{\rm SotR}$ is the rate at which we cast SotR, $latex R_{\rm att}$ is the incoming attack rate (which we’ll see shortly is actually a little different than the swing timer because of avoidance), $latex T_{\rm buff}$ is the duration of the SotR block value buff, $latex R_{\rm HPG}$ is our Holy Power generation rate, and $latex \alpha_{\rm DP}$ is the Divine Purpose proc chance (15%).

Got all that? Good. There will be a quiz on it later (not really).

**A Word on Assumptions
**

In the comments of the last post, Weebey pointed out a few aspects of the derivation that looked fishy. And rightfully so, I did have to make a few assumptions, and I wasn’t as clear as I could have been about what they were. Any good derivation should come part and parcel with a good degree of error analysis.

Let’s quickly go over the assumptions we had to make in the previous post too. First, we’re assuming that we never waste a SotR cast – that every cast gives us a guaranteed block. However, if we cast SotR twice in a row without blocking something in-between, we don’t get 2 blocks later – the buff just refreshes, it doesn’t stack. So there’s a chance we’ll get some clipping, which will cause some attrition in $latex G$. In other words, we’d need to scale $latex G$ down by an attrition factor. That’s going to be tedious though, and it shoudn’t happen very often since SotR is off-GCD and can be timed based on Holy Power pooling, so we’re ignoring that for now. When we get around to the numerical simulations (Part 4, at this rate), we’ll see how big an effect this is, and whether that’s a reasonable approximation.

Technically our expression for $latex S$ is a small approximation too, because we’ve based it on a model of a single application of the buff. Since subsequent applications add duration rather than refreshing it, it should be a very good approximation, but the same variability that applies to $latex G$ will have a subsequent effect on $latex S$. Again, we’ll have to wait for the numerical simulations (or do some ugly combinatorics) to see how much error this introduces.

In general, we’ve treated everything in this derivation as nice and regular – boss attacks and SotR casts come in nicely-spaced intervals. That in itself is an approximation, because in combat scenarios those things vary quite a bit. That leads to bunching, which leads to the same sort of attrition seen in $latex G$ and causes a greater variance in the values of $latex G$ and $latex S$ from fight to fight. You might get two or three SotR casts in a row, or you might get none for 10 seconds if you miss all of your Crusader Strikes. We should have a pretty good estimate of the stochastic behavior, but if the variances are large we might find that individual encounter-length data sets deviate significantly. The numerical sims will give us some information on that detail as well.

Finally, in the last post (which I’ve since updated) I originally said that $latex R_{\rm att}$ was the boss attack rate, or the inverse of the boss’s swing timer $latex T_{\rm att}$. That’s not strictly true, because we’ll avoid some of those attacks, and since the SotR buff ignores avoidance, the effective attack rate as it pertains to blocking will actually be lower (or equivalently, the effective swing timer will be higher). The reason I ignored this in the last post is that $latex R_{\rm att}$ only shows up in the expressions for $latex G$ and $latex S$, so those two parameters encapsulate the effect. That made it a little easier while working through the derivation by hand, but looking at it now I realize that it makes the whole thing a lot more confusing to understand.

Thus, I’ve gone back and edited Part 1 to make it clear that $latex R_{\rm att}$ is the effective attack rate rather than the “true” incoming attack rate $latex R^{(0)}_{\rm att}$, and similarly for the “effective” and “true” boss swing timers $latex T_{\rm att}$ and $T^{(0)}_{\rm att}$. The rigorous definition of $latex R_{\rm att}$ is then

$latex R_{\rm att} = (1-A) R_{\rm att}^{(0)} = F_{\rm av}/T^{(0)}_{\rm att}$.

This is the definition we’ll use when we plug in numbers.

**The Incoming Damage Formula**

OK then, it’s time to start the calculus portion of the derivation. What we’re interested in is the change in incoming damage, which is the derivative of $latex D$. We’ve never specified whether $latex D$ represented raw damage or damage per second, and it doesn’t actually matter which – the equation is the same either way. Taking our very first equation and performing implicit differentiation, we have:

$latex dD/D_0 = dF_a F_{\rm av} F_b + F_a dF_{\rm av} F_b + F_a F_{\rm av} dF_b$

Each of these terms represents a relative change in damage taken due to a small change in that factor, either armor ($latex dF_a$), avoidance ($latex dF_{\rm av}$), or block ($latex dF_b$). We’ll have to evaluate each of those differentials to relate the change in the factor to the underlying change in armor, avoidance rating, and mastery, respectively.

**Armor**** Factor**

The armor factor is easy – it’s unchanged from how it currently works. The armor mitigation factor is just one minus the amount of mitigation $latex M_a$ we get from armor, and $latex M_a$ has the form

$latex M_a = (Ar)/(Ar + K)$

where $latex Ar$ is your armor and $latex K$ is the armor constant, which is 32573 for a level 88 boss. Therefore,

$latex F_a = 1 – M_a = 1 – Ar/(Ar+K) = K/(Ar + K)$

and

$latex dF_a = -dAr K / (Ar+K)^2 = – dAr F_a / (Ar+K)$.

Simple enough! We can use this equation to directly relate a change in armor $latex dAr$ to a change in the armor mitigation factor $latex dF_a$.

**Avoidance Factor**

Next up is avoidance, which is a little trickier for two reasons: diminishing returns (DR) and rating conversions. First of all, we’ll make the assumption that we only care about one type of avoidance – say dodge. The equations are symmetric in both, so finding the results for one is equivalent to finding the results for the other. We need to express the avoidance mitigation factor a little more specifically though, to isolate the part of avoidance affected by DR. So we’ll define it like this:

$latex F_a = (1 – A_0 – A_d)$.

Here, $latex A_0$ is all of your avoidance from miss and parry, as well as any dodge sources that aren’t affected by DR (ex: base dodge). $latex A_d$ is the post-DR dodge value, so we need to relate that to the pre-DR dodge value, which we’ll call $latex a_d$. The relationship between those two is,

$latex 1/A_d = 1/C_d + k_d/a_d$,

where $latex C_d$ and $latex k_d$ are the diminishing returns coefficients for dodge (or parry). I’ve given them subscripts because block uses the same DR equation, but with different coefficients – this way we can keep them straight. Differentiating this equation gives us,

$latex -dA_d/A_d^2 = -k da_d/a_d^2$

which can be re-arranged to give

$latex dA_d = da_d k_d (A_d/a_d)^2$.

and if we solve the DR equation for $latex A/a$ and substitute, we get the most convenient form:

$latex dA_d = (da_d/k_d)(1-A_d/C_d)^2$

This is convenient because it expresses the change in post-DR avoidance $dA_d$ in terms of the change in pre-DR avoidance $latex da_d$, the post-DR dodge value $latex A_d$, and the constants $latex k_d$ and $latex C_d$. We know the constants, and we can read $latex A_d$ off of the character sheet. The pre-DR dodge value is very simply linked to rating:

$latex da_d = dr_d/f_d$

where $latex dr_d$ is the amount of dodge rating we’re adding and $latex f_d$ is the conversion factor relating dodge rating to dodge percentage (176.72 at level 85 in Cataclysm).

Differentiating $latex F_{\rm av}$ and plugging all of this in, we get:

$latex dF_{\rm av} = – dA_d = – (da_d/k_d)(1-A_d/C_d)^2 =- dr_d (1-A_d/C_d)^2/(k_d f_d)$

Which is our final expression for $latex dF_{\rm av}$

**Block Factor**

Finally, we need to attack the block differential. This is by far the most complicated because there are so many factors to consider. We see why when we differentiate $latex F_b$:

$latex dF_b = -dG B_v” + dG B_c S B_v’ – (1-G)dB_c S B_v’ \\ \hspace{0.5in} – (1-G)B_c dS B_v’ +dG B_c (1-S) B_v \\ \hspace{0.5in} -(1-G)dB_c (1-S) B_v + (1-G) B_c dS B_v$

Grouping terms, we can simplify this to

$latex dF_b = -dG [B_v'' -B_c S B_v' - B_c (1-S) B_v] \\ – dB_c (1-G)[S B_v' + (1-S) B_v] \\ – dS (1-G) B_c (B_v’ – B_v)$

To continue, we need the derivatives $latex dB_c$, $latex dG$, and $latex dS$. The first is easy, the last two are a bit ugly. Let’s do the easy one first. Block uses the same diminishing returns formula as avoidance, but with different coefficients. Since $latex dB_c$ is our post-DR change in block chance, we’ll let our pre-DR change in block chance be $latex db_c$, and the DR coefficients will be $latex C_B$ and $latex k_B$. We then have:

$latex dB_c = \frac{db_c}{k_B}(1-B^{\rm (DR)}_c/C_B)^2$

where $latex B^{\rm (DR)}_c = B_c-B^{(0)}_c$ is the portion of our block which is subject to diminishing returns (at this point, everything but our base block chance).

$latex db_c$ is related to mastery rating very simply:

$latex db_c = dr_m/f_m$

Thus, our final form is

$latex dB_c = \frac{dr_m}{f_m}\frac{(1-B^{\rm (DR)}_c/C_B)^2}{k_B}&s=1$.

$latex dB_c$ depends on the amount of mastery rating added $latex dr_m$, the rating-to-percentage conversion factor for mastery $latex f_m$ (which is 179.28/2.25 = 79.68 at level 85), our post-DR block chance, and the DR coefficients for block. Yes, that’s the simple one.

Now for the tricky ones. What does $latex dG$ look like?

$latex dG = dR_{\rm SotR}/R_{\rm att} – dR_{\rm att}R_{\rm SotR}/R_{\rm att}^2$

So for $latex dG$, we need to go further and find the change in SotR cast rate due to all potential factors – that means haste, expertise, and hit will show up in there. We also need the change in effective incoming attack rate, which will depend on avoidance. We’ll come back to those two later. Continuing on, the differential $latex dS$ ends up looking like this:

$latex dS = dR_{\rm SotR} \frac{R_{\rm att}}{R_{\rm SotR}} \frac{S}{(R_{\rm att}-R_{\rm SotR})} + dR_{\rm att} \frac{1-R_{\rm SotR}^2 T_{\rm buff}}{(R_{\rm att}-R_{\rm SotR})^2}&s=1$

where I’ve saved you a bit of tedious algebra and simplified the form some. Or as a textbook would say, “the derivation is left as an exercise for the reader” (man I hated when textbooks did that). So $latex dS$ also depends on the differentials of $latex R_{\rm SotR}$ and $latex R_{\rm att}$, as expected.

$latex R_{\rm att}$ will depend on avoidance, and it’s actually fairly straightforward, so we’ll do that first. $latex T^{(0)}_{\rm att}$ is the “true” boss swing timer, so that’s invariant, giving us $latex dR_{\rm att} = dF_{\rm av} / T^{(0)}_{\rm att}$. Using our earlier definition of $latex dF_{\rm av}$, we have:

$latex dR_{\rm att} = – dr_d (1-A_d/C_d)^2/(k_d f_d T^{(0)}_{\rm att})$

Which relates $latex dR_{\rm att}$ to our fundamental avoidance quantity, $latex dr_d$ dodge rating.

$latex R_{\rm SotR}$ depends on $latex R_{\rm HPG}$. So we need to find out how $latex R_{\rm HPG}$ depends on haste, expertise, and hit. That expression looks something like this:

$latex R_{\rm HPG} = [1 - (m-h) - (d+p-e)](1+\alpha_{\rm GC})(1+s)R_{\rm CS} \\ + [1 - (2m-h-e)](1+s)R_{\rm J} + R_{\rm BL}$

Where I’ve used $latex m$ to represent the hit cap, $latex h$ for hit, $latex d$ for dodge cap, $latex p$ for parry cap, $latex e$ for expertise, and $latex s$ for haste. $latex R_{\rm CS}$ and $latex R_{\rm J}$ are the cast rates for Crusader Strike and Judgement, respectively, before the effects of haste rating. The first term is the HPG rate due to Crusader Strike (which can miss, dodge, or be parried) and Grand Crusader. Since Grand Crusader grants HP on-cast rather than on-hit, it’s simply a linear scaling of our CS cast rate, so I’ve used $latex \alpha_{\rm GC}=0.2$ to represent that. Note that this makes another assumption – that we don’t waste any GC procs. That’s a fairly safe assumption in the 4.5-second CS system, though.

The second term is HPG due to Judgment, which is on spell miss, but gets contributions from both hit and expertise anyway. The final term is any income we might get from the Glyph of Blessed Life, but it could also incorporate any other constant income that’s unrelated to hit, expertise, or haste.

The reason I say it will look “something like this” is because I haven’t been careful to enforce hit and expertise caps in these expressions, partly because that would make the expressions a lot uglier to read. We don’t really need to worry about that though, as we can just assume we’re not silly enough to be stacking hit or expertise past their relevant caps. There are edge cases where this could happen (e.g. you have 7.5% hit and more than 7.5% exp, in which case exp suddenly becomes half as effective as it normally would be), but we’ll assume we’re not in those conditions (and handling that special case is easy to do in post-processing anyway). Differentiating, we have:

$latex dR_{\rm HPG} = (dh + de)(1+s)\left [ (1+\alpha_{\rm GC})R_{\rm CS} + R_{\rm J}\right ] \\ + ds [1-(m-h)-(d+p-e)](1+\alpha_{\rm GC})R_{\rm CS} \\ + ds [1-(2m-h-e)] R_{\rm J} $

Or, using our definition of $latex R_{\rm HPG}$ to simplify a bit,

$latex dR_{\rm HPG} = (dh + de)(1+s)[(1+\alpha_{\rm GC})R_{\rm CS} + R_{\rm J}] + ds(R_{\rm HPG}-R_{\rm BL})/(1+s) $.

$latex dh$, $latex de$, and $latex ds$ still need to be expressed in terms of their rating equivalents, but that’s fairly straightforward since they’re all linear:

$latex dh = dr_h/f_h$

$latex de = dr_e/f_e$

$latex ds = dr_s/f_s$

And there we have it. From here we can substitute backwards to express $latex dG$ and $latex dS$ in terms of the rating quantities $latex dr_h$, $latex dr_e$, and $latex dr_s$. That’s another task I’ll leave as an exercise for the reader, but I’ll quote you the results:

$latex dR_{\rm SotR} = \left ( \frac{dr_h}{f_h} + \frac{dr_e}{f_e} \right ) \frac{(1+s)[(1+\alpha_{\rm GC})R_{\rm CS}+R_{\rm J}]}{3(1-\alpha_{\rm DP})} + \frac{dr_s}{f_s}\frac{R_{\rm HPG} – R_{\rm BL}}{3(1-\alpha_{\rm DP})(1+s)}&s=2$

$latex dG =\left ( \frac{dr_h}{f_h}+\frac{dr_e}{f_e}\right ) \frac{(1+s)[(1+\alpha_{\rm GC})R_{\rm CS}+R_{\rm J}]}{3 R_{\rm att} (1-\alpha_{\rm DP})} + \frac{dr_s}{f_s}\frac{R_{\rm HPG}-R_{\rm BL}}{3 R_{\rm att}(1-\alpha_{\rm DP})(1+s)} \\ – \frac{dr_d}{f_d}\frac{R_{\rm SotR}(1-A_d/C_d)^2}{k_d T^{(0)}_{\rm att}R_{\rm att}^2}&s=2$

$latex dS =\left ( \frac{dr_h}{f_h}+\frac{dr_e}{f_e}\right ) \frac{(1+s)[(1+\alpha_{\rm GC})R_{\rm CS}+R_{\rm J}]S}{3(1-\alpha_{\rm DP})R_{\rm SotR}(R_{\rm att}-R_{\rm SotR})} \\ + \frac{dr_s}{f_s}\frac{(R_{\rm HPG}-R_{\rm BL})R_{\rm att} S}{3(1-\alpha_{\rm DP})(1+s)R_{\rm SotR}(R_{\rm att}-R_{\rm SotR})} \\ – \frac{dr_d}{f_d}\frac{(1-R_{\rm SotR}^2T_{\rm buff})}{(R_{\rm att}-R_{\rm SotR})^2}\frac{(1-A_d/C_d)^2}{k_d T^{(0)}_{\rm att}}&s=2$

We have one final task: substitute these expressions into the one for $latex dF_b$ so that we have one expression that links $latex dF_b$ to $latex dr_h$, $latex dr_e$, and $latex dr_s$. This is not a pretty job, so forgive me if I skip the messy algebra and quote you the result:

$latex dF_b =-\left ( \frac{dr_h}{f_h} + \frac{dr_e}{f_e}\right ) \left ( \frac{(1+s)[(1+\alpha_{\rm GC})R_{\rm CS} + R_{\rm J}]}{3(1-\alpha_{\rm DP})} \right ) \left [\frac{B_v'' - B_c S B_v' - B_c (1-S)B_v}{R_{\rm att}} + \frac{S(1-G)B_c(B_v'-B_v)}{R_{\rm SotR}(R_{\rm att}-R_{\rm SotR})} \right ] \\ – \frac{dr_s}{f_s}\left ( \frac{(R_{\rm HPG}-R_{\rm BL})}{3 (1-\alpha_{\rm DP})(1+s)} \right ) \left [ \frac{B_v'' - B_c S B_v' - B_c (1-S)B_v}{R_{\rm att}} +\frac{S(1-G)B_c(B_v'-B_v)}{R_{\rm SotR}(R_{\rm att}-R_{\rm SotR})}\right] \\ – \frac{dr_d}{f_d} \left ( \frac{(1-A_d/C_d)^2}{k_d T^{(0)}_{\rm att}}\right ) \left [ \frac{R_{\rm SotR}[B_v'' - B_c S B_v' - B_c (1-S)B_v ]}{R_{\rm att}^2} + \frac{(1-R_{\rm SotR}^2 T_{\rm buff}) (1-G) B_c (B_v’-B_v) }{(R_{\rm att}-R_{\rm SotR})^2} \right ] \\ – \frac{dr_m}{f_m}\frac{(1-B^{\rm (DR)}_c/C_B)^2}{k_B}(1-G)[S B_v' + (1-S) B_v]&s=1$

…. W T F. So much for the nicer, simpler, easier-to-understand block mechanics, eh?

This is, frankly, way too much algebra to conveniently lug around. We’re going to need a more compact way to write this if we’re going to get anywhere with it. So we’re going to define a few constants to help us with that. They are:

$latex F_{bG} = B_v” – B_c S B_v’ – B_c(1-S)B_v&s=1$

$latex F_{bB} = (1-G)[S B_v' + (1-S)B_v]&s=1$

$latex F_{bS} = (1-G)B_c(B_v’-B_v)&s=1$

$latex \beta_h = \frac{(1+s)[(1+\alpha_{\rm GC})R_{\rm CS}+R_{\rm J}]}{3(1-\alpha_{\rm DP})} \left [ \frac{F_{bG}}{R_{\rm att}}+ \frac{S F_{bS}}{(R_{\rm att}-R_{\rm SotR})R_{\rm SotR}} \right ]&s=2$

$latex \beta_s = \frac{(R_{\rm HPG}-R_{\rm BL})}{3(1-\alpha_{\rm DP})(1+s)} \left [ \frac{F_{bG}}{R_{\rm att}} + \frac{S F_{bS}}{(R_{\rm att}-R_{\rm SotR})R_{\rm SotR}} \right ]&s=2$

$latex \beta_d = \frac{(1-A_d/C_d)^2}{k_d T^{(0)}_{\rm att}} \left [ \frac{R_{\rm SotR} F_{bG}}{R_{\rm att}^2} + \frac{(1-R_{\rm SotR}^2T_{\rm buff}) F_{bS}}{(R_{\rm att}-R_{\rm SotR})^2} \right ]&s=2$

$latex \beta_m = \frac{(1-B^{\rm (DR)}_c/C_B)^2}{k_B}F_{bB}&s=2$

The factors $latex F_{bG}$, $latex F_{bB}$, $latex F_{bS}$ allow us to put our original equation for $latex dF_b$ in a simpler form:

$latex dF_b = -dG F_{bG} – dB_c F_{bB} – dS F_{bS}&s=1$.

And the factors $latex \beta_h$, $latex \beta_s$, $latex \beta_d$, and $latex \beta_m$, which represent the block scaling factors for hit/expertise, haste, dodge/avoidance, and mastery, respectively, allow us to put our final expression for $latex dF_b$ in a very simple form:

$latex dF_b = -\left (\frac{dr_h}{f_h}+\frac{dr_e}{f_e}\right ) \beta_h – \frac{dr_s}{f_s}\beta_s – \frac{dr_d}{f_d}\beta_d -\frac{dr_m}{f_m}\beta_m&s=2$

This is going to be much easier to work with. With this expression for $latex dF_b$, along with the previously-derived expressions for $latex dF_{\rm av}$, $latex dF_a$, $latex F_a$, $latex F_{\rm av}$, $latex F_b$, and all of the sub-factors we’ve defined in this post, we can finally start making comparisons between the different stats.

Unfortunately, that’s going to have to wait until next time, because this blog post is already much too long. Next time (Part 3), we’ll summarize the equations we have, and start plugging in reasonable numbers to see how the different stats stack up against one another. Then, in Part 4, we’ll use a simple Monte-Carlo simulation to see how well this analytical model holds up to a simple numerical model, which will tell us how well the assumptions we’ve made in this analytical model hold up under more realistic conditions.

*Editor’s note:* Since publication, I have found one or two minor errors in the calculation – mostly transcription errors that occurred, either in my hand-calculations or when converting into LaTeX format for the blog post. I have updated the post with these corrections without annotation.

I don’t undestand a single piece of any of that… but man I love that you do that

gronc

I really hope you didn’t have to do all that algebra by hand; I know I would have gone crazy, and the odds of an error would have been in excess of 90%.

This is largely semantic, but I don’t think it’s the blocking change per se that makes it so nasty–moving to a second roll, in my opinion, actually makes more intuitive sense than the current system. In fact, when I started playing, I assumed it was a one roll system, and was mildly surprised when I found out how it really worked. Most of the nastiness seems to come the new version of SotR.

I have one small request for the next post: I would like to see the sign of the cross term d^2 F_{b}/(dr_{h}dr_{m}). Intuitively, this should split into two components with opposite signs: a positive component due to higher hit increasing G, which depresses the value of mastery; and a negative part that comes from higher hit leading to larger S. My guess is that with the new implementation the first term is going to be larger than the second, so that hit and mastery do not “help” each other (recall that, since we are looking to minimize damage taken, we actually want negative derivatives), but I’m not sure.

EDIT: I meant to say I assumed it was a two roll system!

You’re right, most of the nastiness is due to SotR, and not the two-roll system itself.

And yes, I did all of the algebra by hand, and double-checked most of it by doing it again. I did actually miss something, as my proofreader pointed out to me (although a fat lot of good that does NOW) – Grand Crusader. Luckily that’s easily fixed by treating it as an extension of $latex R_{rm CS}$. I’m going to have to go back and edit that in, because it’s a legitimate oversight, and not one I can easily hand-wave away as “well, we’re just encapsulating that in $latex R_{rm CS}$.” Or rather, I could do that, but it would be disingenuous and not terribly intuitive.

There, it should be properly updated for Grand Crusader now.

Theck, did you take into account that the new expertise is going to take away from dodge first, then from parry? If not, will it change anything about your model for holy power generation due to expertise? And it can’t be said enough, Thank you for all that you do!

src: http://us.battle.net/wow/en/blog/4544194/Dev_Watercooler_–_Mists_of_Pandaria_Stat_Changes-3_1_2012

Yes, that’s taken into account. that’s the (d+p-e) term. If it were the old system, it would have to be something like (d-e)+(p-e). With all of those quantities being zero-bounded, of course.

Theck, you are one VERY insane man – and I don’t think the community would love any more any other way

/em’s brain explodes

Pingback: Warrior Block Calculations – Part 1 | Sacred Duty