A Call to Arms  MoP Mechanics Testing
Moderators: Fridmarr, Worldie, Aergis, theckhd
Re: A Call to Arms  MoP Mechanics Testing
tlitp wrote:@Theck :
1. Please update #29 again (sorry). As the lovely Dal.Sword got changed to 1.8 in MoP, the fastest weapon purchasable from vendors is now Tomahawk. Please add it as a requirement for this test suite, as we want to get as many swings as possible within a given time frame.
2. Remove #31, as it's been covered here.
Done and done.
Klaud: IIRC, SotR does holy damage, so you only need to use it on the lowlevel dummy test.
The parry data is still giving me trouble. I'm fairly certain the STR component of parry isn't subject to DR (or if it is, the cap is something ludicrous like 200+). However, the modeling is giving me a very low cap for the rating component of parry (something like 15, which seems unlikely). I'm pretty sure this is just a case of not having enough data to get a solid surface fit, so I'll wait for more data points.
Edit: at this point, it looks like you get 0.0011%*strength as parry, so every ~909 strength gives you 1% parry.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of GrehnSkipjack.
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty

theckhd  Moderator
 Posts: 6211
 Joined: Thu Jul 31, 2008 3:06 pm
 Location: Harrisburg, PA
Re: A Call to Arms  MoP Mechanics Testing
Parry data, yet again
Parry rating of 1191 adds 1.15%
Str 1350
Parry chance 5.85%
Str 2236
Parry chance 6.87
Str 2870
Parry chance 7.60
Str 3631
Parry chance 8.46
Str 4602
Parry chance 9.56
Str 5236
Parry chance 10.27
Str 5870
Parry chance 10.98
Str 6386
Parry chance 11.55
Str 7056
Parry chance 12.28
Str 7817
Parry chance 13.12
Str 8578
Parry chance 13.94
Str 9548
Parry chance 14.99
Str 10309
Parry chance 15.80
I'll start working on #28
Parry rating of 1191 adds 1.15%
Str 1350
Parry chance 5.85%
Str 2236
Parry chance 6.87
Str 2870
Parry chance 7.60
Str 3631
Parry chance 8.46
Str 4602
Parry chance 9.56
Str 5236
Parry chance 10.27
Str 5870
Parry chance 10.98
Str 6386
Parry chance 11.55
Str 7056
Parry chance 12.28
Str 7817
Parry chance 13.12
Str 8578
Parry chance 13.94
Str 9548
Parry chance 14.99
Str 10309
Parry chance 15.80
I'll start working on #28
The Element of Forum Hyperbole

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Klaudandus  Posts: 9359
 Joined: Thu Apr 02, 2009 7:08 am
 Location: Texas' Armpit
Re: A Call to Arms  MoP Mechanics Testing
#28  first 3 sets (CS/HotR) against lvl 93 dummy. No Glyphs, no enchants, no procs, no debuffs, no buffs. There might be some white noise, there was a lvl 80 dummy next to the raiding lvl dummy and HotR was hitting it. Just so you know. It was the best I could do since I had to go to Undercity to find dummies not in use .
1st
Str 3804
AP 7858
SP 3929
Haste 0
Hit 1.73
Crit 6.16
Exp 1.08
2nd
Str 5192
AP 10634
SP 5397
Haste 1.07
Hit 1.73
Crit 6.16
Exp 3.31
3rd
Str 6720
AP 13690
SP 6720
Haste 3.38
Hit 1.73
Crit 6.97
Exp 3.31
Will start working on two more sets once i return from my jog.
1st
Str 3804
AP 7858
SP 3929
Haste 0
Hit 1.73
Crit 6.16
Exp 1.08
2nd
Str 5192
AP 10634
SP 5397
Haste 1.07
Hit 1.73
Crit 6.16
Exp 3.31
3rd
Str 6720
AP 13690
SP 6720
Haste 3.38
Hit 1.73
Crit 6.97
Exp 3.31
Will start working on two more sets once i return from my jog.
 Attachments

 #28  first set.zip
 (119.82 KiB) Downloaded 54 times
The Element of Forum Hyperbole

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Klaudandus  Posts: 9359
 Joined: Thu Apr 02, 2009 7:08 am
 Location: Texas' Armpit
Re: A Call to Arms  MoP Mechanics Testing
4th set
Str 8170
AP 16590
SP 8295
Haste 3.38
Hit 2.87
Crit 8.14
Exp 3.31
5th set
Str 9819
AP 19885
SP 9944
Haste 4.51
Hit 2.87
Crit 9.60
Exp 3.31
There might be some extra noise in the last set, a mage and a lock decided to nuke the lvl 80 dummy i was cleaving with HotR  I hope it doesnt affect too much.
Str 8170
AP 16590
SP 8295
Haste 3.38
Hit 2.87
Crit 8.14
Exp 3.31
5th set
Str 9819
AP 19885
SP 9944
Haste 4.51
Hit 2.87
Crit 9.60
Exp 3.31
There might be some extra noise in the last set, a mage and a lock decided to nuke the lvl 80 dummy i was cleaving with HotR  I hope it doesnt affect too much.
 Attachments

 #28 4th set.zip
 (114.22 KiB) Downloaded 51 times
The Element of Forum Hyperbole

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Klaudandus  Posts: 9359
 Joined: Thu Apr 02, 2009 7:08 am
 Location: Texas' Armpit
Re: A Call to Arms  MoP Mechanics Testing
if you need more granularity, I'll provide those later on.
As for the ones required the lvl 85 dummy  I'm out of luck at the moment trying to find a dummy no one else is hitting...
As for the ones required the lvl 85 dummy  I'm out of luck at the moment trying to find a dummy no one else is hitting...
The Element of Forum Hyperbole

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Klaudandus  Posts: 9359
 Joined: Thu Apr 02, 2009 7:08 am
 Location: Texas' Armpit
Re: A Call to Arms  MoP Mechanics Testing
#28 (J, HW, Cons, SotR, AS vs lvl 85 dummy)
1st
Str 3804
AP 7858
SP 3929
Haste 0
Hit 1.73
Crit 6.16
Exp 1.08
2nd
Str 5192
AP 10634
SP 5397
Haste 1.07
Hit 1.73
Crit 6.16
Exp 3.31
3rd
Str 6720
AP 13690
SP 6720
Haste 3.38
Hit 1.73
Crit 6.97
Exp 3.31
1st
Str 3804
AP 7858
SP 3929
Haste 0
Hit 1.73
Crit 6.16
Exp 1.08
2nd
Str 5192
AP 10634
SP 5397
Haste 1.07
Hit 1.73
Crit 6.16
Exp 3.31
3rd
Str 6720
AP 13690
SP 6720
Haste 3.38
Hit 1.73
Crit 6.97
Exp 3.31
 Attachments

 #28b  2.zip
 (143.08 KiB) Downloaded 52 times
The Element of Forum Hyperbole

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Klaudandus  Posts: 9359
 Joined: Thu Apr 02, 2009 7:08 am
 Location: Texas' Armpit
Re: A Call to Arms  MoP Mechanics Testing
#28 (J, HW, Cons, SotR, AS vs lvl 85 dummy)
4th set
Str 8170
AP 16590
SP 8295
Haste 3.38
Hit 2.87
Crit 8.14
Exp 3.31
5th set
Str 9819
AP 19885
SP 9944
Haste 4.51
Hit 2.87
Crit 9.60
Exp 3.31
4th set
Str 8170
AP 16590
SP 8295
Haste 3.38
Hit 2.87
Crit 8.14
Exp 3.31
5th set
Str 9819
AP 19885
SP 9944
Haste 4.51
Hit 2.87
Crit 9.60
Exp 3.31
 Attachments

 #28b  4.zip
 (131.59 KiB) Downloaded 55 times
The Element of Forum Hyperbole

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Klaudandus  Posts: 9359
 Joined: Thu Apr 02, 2009 7:08 am
 Location: Texas' Armpit
Re: A Call to Arms  MoP Mechanics Testing
Klaud, quick question: For the parry data, are all of those values unbuffed? I.e. you didn't use Kings or other buffs to increase STR? Just purely gear?
<edit> also, what race was that character?
<edit> nevermind, I see it's BE. Can someone (anyone) tell me what the base (naked, unbuffed) dodge and parry values are for a level 90 BE on beta. Literally take off all gear and cancel all buffs, and just read off the base dodge/parry values from the character sheet.
<edit> also, what race was that character?
<edit> nevermind, I see it's BE. Can someone (anyone) tell me what the base (naked, unbuffed) dodge and parry values are for a level 90 BE on beta. Literally take off all gear and cancel all buffs, and just read off the base dodge/parry values from the character sheet.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of GrehnSkipjack.
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty

theckhd  Moderator
 Posts: 6211
 Joined: Thu Jul 31, 2008 3:06 pm
 Location: Harrisburg, PA
Re: A Call to Arms  MoP Mechanics Testing
i never had any buffs with me. i can get more parry sets data later today, once i get out of the office.
also, let me see if i can get some sets with zero parry rating and full str, including trinkets, would that help?
also, let me see if i can get some sets with zero parry rating and full str, including trinkets, would that help?
The Element of Forum Hyperbole

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Klaudandus  Posts: 9359
 Joined: Thu Apr 02, 2009 7:08 am
 Location: Texas' Armpit
Re: A Call to Arms  MoP Mechanics Testing
Klaudandus wrote:i never had any buffs with me. i can get more parry sets data later today, once i get out of the office.
also, let me see if i can get some sets with zero parry rating and full str, including trinkets, would that help?
I think at this point, I have it pretty much nailed down, so it's not necessary. I did some testing this morning with an 85 premade, and convinced myself that STR>parry is affected by diminishing returns (using the same test you just proposed  naked to full ret gear with 0 parry or dodge rating).
Using the data from that 85 premade, I figured out the dodge/parry formulas at 85. Armed with that knowledge, I went back to your data sets and figured out how things work at 90. The one missing piece of the puzzle that could confirm or refute the formula I have is the base amount of parry a naked level 90 BE paladin has. So if anyone can give me that value (guess: 3.18ish), I'd appreciate it.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of GrehnSkipjack.
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty

theckhd  Moderator
 Posts: 6211
 Joined: Thu Jul 31, 2008 3:06 pm
 Location: Harrisburg, PA
Re: A Call to Arms  MoP Mechanics Testing
do u need more granularity for #28 tests? i really need to know cuz some dummies are only available really early in the morning.
The Element of Forum Hyperbole

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Klaudandus  Posts: 9359
 Joined: Thu Apr 02, 2009 7:08 am
 Location: Texas' Armpit
Re: A Call to Arms  MoP Mechanics Testing
I haven't had time to look at the data sets yet, so I really can't give you an answer yet. I should be able to get to them some time tomorrow though. In the meantime, don't feel obligated to gather any more data.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of GrehnSkipjack.
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty

theckhd  Moderator
 Posts: 6211
 Joined: Thu Jul 31, 2008 3:06 pm
 Location: Harrisburg, PA
Re: A Call to Arms  MoP Mechanics Testing
ok, just let me know... i got all week off next week.
The Element of Forum Hyperbole

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Klaudandus  Posts: 9359
 Joined: Thu Apr 02, 2009 7:08 am
 Location: Texas' Armpit
Re: A Call to Arms  MoP Mechanics Testing
Klaudandus wrote:ok, just let me know... i got all week off next week.
Will do. Until then, if you would kindly log in and get nekkid at your earliest convenience... I could really use that base parry value.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of GrehnSkipjack.
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty

theckhd  Moderator
 Posts: 6211
 Joined: Thu Jul 31, 2008 3:06 pm
 Location: Harrisburg, PA
Re: A Call to Arms  MoP Mechanics Testing
and i thought u wanted me naked for my body.
The Element of Forum Hyperbole

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Klaudandus  Posts: 9359
 Joined: Thu Apr 02, 2009 7:08 am
 Location: Texas' Armpit
Re: A Call to Arms  MoP Mechanics Testing
Naked BE
Health: 151051
Mana: 60000
Str 176
Agi 107
Sta 332
Int 117
Spi 121
Dodge 3.01
Parry 3.19
And one last parry set.
Str 11568
Parry chance 15.97%
Parry of 0 adds 0.00%
Health: 151051
Mana: 60000
Str 176
Agi 107
Sta 332
Int 117
Spi 121
Dodge 3.01
Parry 3.19
And one last parry set.
Str 11568
Parry chance 15.97%
Parry of 0 adds 0.00%
The Element of Forum Hyperbole

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Flüttershy  Draenei Protection Paladin, Aerie Peak
Klaudandus  BE Protection Paladin, Feathermoon (Semiretired)

Klaudandus  Posts: 9359
 Joined: Thu Apr 02, 2009 7:08 am
 Location: Texas' Armpit
Re: A Call to Arms  MoP Mechanics Testing
Klaudandus wrote:Dodge 3.01
Parry 3.19
"Poifect!"
DR formula post incoming.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of GrehnSkipjack.
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty

theckhd  Moderator
 Posts: 6211
 Joined: Thu Jul 31, 2008 3:06 pm
 Location: Harrisburg, PA
Re: A Call to Arms  MoP Mechanics Testing
They just gave all plate tanks 2% dodge through passives. Doubt that changes any formulae other then sticking a +2 on there, though?
 KysenMurrin
 Posts: 4811
 Joined: Thu Jun 26, 2008 6:37 am
 Location: UK
Re: A Call to Arms  MoP Mechanics Testing
KysenMurrin wrote:They just gave all plate tanks 2% dodge through passives. Doubt that changes any formulae other then sticking a +2 on there, though?
Nope, since it's through a talent, it shouldn't be affected by DR, so it's just increasing base dodge from 3.01 to 5.01.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of GrehnSkipjack.
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty

theckhd  Moderator
 Posts: 6211
 Joined: Thu Jul 31, 2008 3:06 pm
 Location: Harrisburg, PA
Re: A Call to Arms  MoP Mechanics Testing
As mentioned earlier, I had trouble getting anything conclusive out of Klaud's parry data. Part of the problem was that the data only covers a limited range of parry, and part of it was based on an assumption I made early on. Initially, I assumed that the parry cap would be reasonably close to what it is now. But the nearlinearity of the data set contradicted that  either some portion of it wasn't affected by DR (i.e. str>parry), or the cap was a lot higher than I was expecting.
It turned out to be the latter. The dodge cap is, as far as I can tell, unchanged from Cata (around 65.5%). The parry cap is around 235%. Since that sounds sort of crazy, I'll provide the methodology and data. All of the data and curve fitting calculations are available here, for those with MATLAB: dr_eqn_data_L85.m I have not tested this file with Octave/FreeMat, but I didn't use anything fancier than fit() calls.
The first thing I did was hop onto beta and make a new premade 85 human paladin. The problem with doing all of this at 90 is that we don't have enough gear to climb the parry curve very far. But the relative gear level is much higher on an 85 premade, which lets us push the boundaries further. If I had been thinking clearly, I'd have transferred another copy of Theck to push things even higher. Oops. In any event, the 85 premade managed to do the job.
The procedure was as follows. I first stripped the premade of all gear and recorded all of the base values of interest: strength, agi, dodge, and parry. I then equipped one piece of gear at a time, recording the new strength, agi, total dodge percentage, total parry percentage, dodge rating, preDR dodge percentage due to that rating (from the tooltip), parry rating, and preDR parry percentage due to that rating. After equipping all gear, I started to gem and enchant it one piece at a time, using STR and/or dodge enchants and parry gems. I then stripped the character again and repeated the process with ret gear to test strength scaling independently, this time using STR gems/enchants to keep parry/dodge rating at 0. At no point during this process did I cast any spells  all of these values are completely unbuffed. The data from this test is summarized in the table below:
First, I analyzed the dodge data, since that's the simplest. I already knew that it was pretty close to what we have on live based on Klaud's L90 data. I used the usual DR formula:
Where totalDodge and preDodge are the values from the table, baseDodge is the 3.01% recorded initially, and C and k are the dodge cap and scale factor, respectively. C and k are the variables we're trying to find, of course. Using MATLAB's nonlinear least squares fitting algorithm to fit
You can see that the fit is very good  R squared value of one, very small SSE (sum of squares due to error) and RMSE (root mean squared error). One curious note is that the 95% confidence interval for C includes the current value (65.631440). Based on this, I guessed that the dodge cap is in fact unchanged from Cataclysm. So I decided to try fixing that parameter to just fit k:
Or, graphically
It's not surprising that this works just as well, but it nails down our C and k for dodge very nicely: C=65.631440, k=0.885. To summarize our conclusions and assumptions from this part:
Conclusion #1: The dodge cap ("C_d") at 85 is very close to the Cataclysm value, but the scale factor ("k_d") has changed slightly.
Assumption #1: The dodge cap at 85 is identical to the Cataclysm value, since it falls within experimental error of the value measured. C_d is 65.631440.
Conclusion #2: The scale factor has been reduced slightly from the Cataclysm value (k_d was 0.956, is now 0.885).
Next, I decided to fit the ret data. Since we're scaling only with strength, this should tell us very clearly whether the parry granted through strength is affected by diminishing returns, and if so, what the formula looks like. Traditionally the effects granted by base stats aren't affected by DR, so we're actually going to fit the following values:
using the form
In other words, we're using the usual DR equation, but this time with an additional scale factor a representing the strengthtoparry conversion. You may note that there's a redundancy in this formula  k and a aren't independently measurable. From the data though, it's clear that it takes between ~216 and ~236 strength to add 1% parry postDR, so that gives us a rough starting point for a. Note that since k is less than one, the actual value of a will be a little higher (smaller k makes rating/strength more effective than the usual preDR conversion rate). If we fit the data with this in mind, we get:
Again, excellent agreement. The huge ranges on a and k reflect the fact that those two values can't be determined independently this way (more on that in a second though). However, I noted that the fit puts k very close to the value found in the dodge fit. We also know that k is the same for dodge and parry in Cataclysm, and was the same for both in Wrath even when the two had different caps. It's not much of a stretch to guess that k_p = k_d in Mists as well. To confirm this, we try the fit again fixing k_p=k_d=0.885:
That seems reasonable, but how do we convince ourselves that this combination of k and a is any more valid than another combination? The answer is base parry. While naked, we should have about 3% parry plus the parry generated from base strength. A quick calculation shows:
which is 0.67 when rounded, consistent with our baseParry value of 3.67. The baseParry calculation is only so accurate though  due to rounding, baseStr gives 0.67% for any value of a between 243 and 246.6. But the curve fitting puts a tighter bound on a (243.5 to 243.8). If we perform one final fit to this data, fixing a=243.7, we get a slightly tighter range of values for C:
Or again, graphically:
At this point I stopped looking at the level 85 data and returned to Klaud's L90 data set. I could of course try to perform a multidimensional fit to the level 85 parry data from prot gear, which has both strength and parry rating, but I decided this wasn't necessary. I had gotten what I needed from the 85 data, which was information about C_d, k_d, C_p, k_p, and the fact that parry gained through strength is definitely affected by diminishing returns. What remained was to determine whether any of those values changed with character level, and that would only be determined by looking at the L90 data.
To summarize the assumptions and conclusions in this part:
Assumption #1: k_d=k_p.
Conclusion #1: Assuming k_d=k_p gives us a good fit with a value of a that is consistent with the amount of parry gained from base strength.
Conclusion #2: Under this assumption, C_p is around 235.
It turned out to be the latter. The dodge cap is, as far as I can tell, unchanged from Cata (around 65.5%). The parry cap is around 235%. Since that sounds sort of crazy, I'll provide the methodology and data. All of the data and curve fitting calculations are available here, for those with MATLAB: dr_eqn_data_L85.m I have not tested this file with Octave/FreeMat, but I didn't use anything fancier than fit() calls.
The first thing I did was hop onto beta and make a new premade 85 human paladin. The problem with doing all of this at 90 is that we don't have enough gear to climb the parry curve very far. But the relative gear level is much higher on an 85 premade, which lets us push the boundaries further. If I had been thinking clearly, I'd have transferred another copy of Theck to push things even higher. Oops. In any event, the 85 premade managed to do the job.
The procedure was as follows. I first stripped the premade of all gear and recorded all of the base values of interest: strength, agi, dodge, and parry. I then equipped one piece of gear at a time, recording the new strength, agi, total dodge percentage, total parry percentage, dodge rating, preDR dodge percentage due to that rating (from the tooltip), parry rating, and preDR parry percentage due to that rating. After equipping all gear, I started to gem and enchant it one piece at a time, using STR and/or dodge enchants and parry gems. I then stripped the character again and repeated the process with ret gear to test strength scaling independently, this time using STR gems/enchants to keep parry/dodge rating at 0. At no point during this process did I cast any spells  all of these values are completely unbuffed. The data from this test is summarized in the table below:
 Code: Select all
Level 85 human paladin
baseStr=164;
baseDodge=3.01;
baseParry=3.67;
baseAgi=97;
Protection gear:
Total % preDR Dodge preDR Parry
STR AGI Dodge Parry Rating Pct Rating Pct
510.00 97.00 3.01 6.35 0.00 0.00 260.00 0.98
737.00 97.00 3.01 7.91 0.00 0.00 389.00 1.47
1018.00 97.00 3.72 9.99 169.00 0.64 595.00 2.24
1244.00 97.00 3.72 11.64 169.00 0.64 760.00 2.87
1610.00 97.00 4.78 13.21 427.00 1.61 760.00 2.87
1817.00 97.00 4.78 14.67 427.00 1.61 909.00 3.43
2098.00 97.00 5.62 15.85 638.00 2.41 909.00 3.43
2308.00 97.00 5.62 16.72 638.00 2.41 909.00 3.43
2674.00 97.00 6.51 19.20 868.00 3.27 1172.00 4.42
2884.00 97.00 7.57 20.05 1150.00 4.34 1172.00 4.42
3057.00 97.00 8.40 20.74 1377.00 5.19 1172.00 4.42
3284.00 97.00 8.93 21.65 1525.00 5.75 1172.00 4.42
3459.00 97.00 9.37 22.34 1651.00 6.23 1172.00 4.42
3606.00 97.00 9.88 23.46 1799.00 6.79 1326.00 5.00
3606.00 97.00 9.88 23.70 1799.00 6.79 1393.00 5.26
3606.00 97.00 9.88 23.94 1799.00 6.79 1460.00 5.51
3606.00 97.00 9.88 24.18 1799.00 6.79 1527.00 5.76
3606.00 97.00 9.88 24.32 1799.00 6.79 1567.00 5.91
3606.00 97.00 9.88 24.47 1799.00 6.79 1607.00 6.06
3606.00 97.00 9.88 24.61 1799.00 6.79 1647.00 6.21
3606.00 97.00 9.88 24.75 1799.00 6.79 1687.00 6.36
3606.00 97.00 9.88 24.89 1799.00 6.79 1727.00 6.52
3606.00 97.00 9.88 25.03 1799.00 6.79 1767.00 6.67
3606.00 97.00 9.88 25.17 1799.00 6.79 1807.00 6.82
3606.00 97.00 9.88 25.31 1799.00 6.79 1847.00 6.97
3606.00 97.00 9.88 25.45 1799.00 6.79 1887.00 7.12
3989.00 97.00 9.88 26.91 1799.00 6.79 1887.00 7.12
3989.00 97.00 9.96 26.91 1824.00 6.88 1887.00 7.12
3989.00 97.00 10.13 26.91 1874.00 7.07 1887.00 7.12
4039.00 97.00 10.13 27.10 1874.00 7.07 1887.00 7.12
4039.00 97.00 10.43 27.10 1960.00 7.39 1887.00 7.12
4039.00 97.00 10.65 27.10 2026.00 7.64 1887.00 7.12
4039.00 97.00 10.82 27.10 2077.00 7.84 1887.00 7.12
4039.00 97.00 10.82 27.43 2077.00 7.84 1984.00 7.48
4039.00 97.00 10.99 27.43 2130.00 8.04 1984.00 7.48
4039.00 97.00 10.99 27.64 2130.00 8.04 2046.00 7.72
4039.00 97.00 10.99 27.83 2130.00 8.04 2099.00 7.92
4039.00 97.00 10.99 28.04 2130.00 8.04 2160.00 8.15
4039.00 97.00 10.99 28.19 2130.00 8.04 2206.00 8.32
4039.00 97.00 10.99 28.40 2130.00 8.04 2267.00 8.55
4039.00 97.00 10.99 28.53 2130.00 8.04 2306.00 8.70
Retribution Gear:
Total % preDR Dodge preDR Parry
STR AGI Dodge Parry Rating Pct Rating Pct
510.00 97.00 3.01 5.27 0.00 0.00 0.00 0.00
737.00 97.00 3.01 6.30 0.00 0.00 0.00 0.00
1018.00 97.00 3.01 7.57 0.00 0.00 0.00 0.00
1244.00 97.00 3.01 8.57 0.00 0.00 0.00 0.00
1610.00 97.00 3.01 10.19 0.00 0.00 0.00 0.00
1837.00 97.00 3.01 11.18 0.00 0.00 0.00 0.00
2118.00 97.00 3.01 12.39 0.00 0.00 0.00 0.00
2399.00 97.00 3.01 13.60 0.00 0.00 0.00 0.00
2765.00 97.00 3.01 15.14 0.00 0.00 0.00 0.00
3047.00 97.00 3.01 16.32 0.00 0.00 0.00 0.00
3274.00 97.00 3.01 17.26 0.00 0.00 0.00 0.00
3501.00 97.00 3.01 18.19 0.00 0.00 0.00 0.00
3884.00 97.00 3.01 19.74 0.00 0.00 0.00 0.00
4292.00 97.00 3.01 21.37 0.00 0.00 0.00 0.00
4359.00 97.00 3.01 21.64 0.00 0.00 0.00 0.00
4426.00 97.00 3.01 21.90 0.00 0.00 0.00 0.00
4493.00 97.00 3.01 22.17 0.00 0.00 0.00 0.00
4533.00 97.00 3.01 22.32 0.00 0.00 0.00 0.00
4573.00 97.00 3.01 22.48 0.00 0.00 0.00 0.00
4613.00 97.00 3.01 22.64 0.00 0.00 0.00 0.00
4653.00 97.00 3.01 22.79 0.00 0.00 0.00 0.00
4693.00 97.00 3.01 22.95 0.00 0.00 0.00 0.00
4743.00 97.00 3.01 23.15 0.00 0.00 0.00 0.00
4793.00 97.00 3.01 23.33 0.00 0.00 0.00 0.00
4843.00 97.00 3.01 23.54 0.00 0.00 0.00 0.00
4893.00 97.00 3.01 23.73 0.00 0.00 0.00 0.00
First, I analyzed the dodge data, since that's the simplest. I already knew that it was pretty close to what we have on live based on Klaud's L90 data. I used the usual DR formula:
 Code: Select all
totalDodge = baseDodge + 1/(1/C+k/preDodge)
Where totalDodge and preDodge are the values from the table, baseDodge is the 3.01% recorded initially, and C and k are the dodge cap and scale factor, respectively. C and k are the variables we're trying to find, of course. Using MATLAB's nonlinear least squares fitting algorithm to fit
 Code: Select all
netDodge=totalDodgebaseDodge,
 Code: Select all
d2_try1_fit =
General model:
d2_try1_fit(x) = 1./(1./C+k./x)
Coefficients (with 95% confidence bounds):
C = 66.01 (65.28, 66.74)
k = 0.8854 (0.8842, 0.8866)
d2_try1_gof =
sse: 4.7067e004
rsquare: 1.0000
dfe: 39
adjrsquare: 1.0000
rmse: 0.0035
You can see that the fit is very good  R squared value of one, very small SSE (sum of squares due to error) and RMSE (root mean squared error). One curious note is that the 95% confidence interval for C includes the current value (65.631440). Based on this, I guessed that the dodge cap is in fact unchanged from Cataclysm. So I decided to try fixing that parameter to just fit k:
 Code: Select all
d2_try2_fit =
General model:
d2_try2_fit(x) = 1./(1./65.631440+k./x)
Coefficients (with 95% confidence bounds):
k = 0.8848 (0.8846, 0.885)
d2_try2_gof =
sse: 4.8415e004
rsquare: 1.0000
dfe: 40
adjrsquare: 1.0000
rmse: 0.0035
Or, graphically
It's not surprising that this works just as well, but it nails down our C and k for dodge very nicely: C=65.631440, k=0.885. To summarize our conclusions and assumptions from this part:
Conclusion #1: The dodge cap ("C_d") at 85 is very close to the Cataclysm value, but the scale factor ("k_d") has changed slightly.
Assumption #1: The dodge cap at 85 is identical to the Cataclysm value, since it falls within experimental error of the value measured. C_d is 65.631440.
Conclusion #2: The scale factor has been reduced slightly from the Cataclysm value (k_d was 0.956, is now 0.885).
Next, I decided to fit the ret data. Since we're scaling only with strength, this should tell us very clearly whether the parry granted through strength is affected by diminishing returns, and if so, what the formula looks like. Traditionally the effects granted by base stats aren't affected by DR, so we're actually going to fit the following values:
 Code: Select all
netParry = totalParrybaseParry
netStr = totalStrbaseStr
using the form
 Code: Select all
netParry = 1/(1/C+k/(netStr/a))
In other words, we're using the usual DR equation, but this time with an additional scale factor a representing the strengthtoparry conversion. You may note that there's a redundancy in this formula  k and a aren't independently measurable. From the data though, it's clear that it takes between ~216 and ~236 strength to add 1% parry postDR, so that gives us a rough starting point for a. Note that since k is less than one, the actual value of a will be a little higher (smaller k makes rating/strength more effective than the usual preDR conversion rate). If we fit the data with this in mind, we get:
 Code: Select all
p1_try1_fit =
General model:
p1_try1_fit(x) = 1./(1./C+k./(x./a))
Coefficients (with 95% confidence bounds):
C = 235.1 (233.1, 237.1)
a = 259.8 (3.907e+006, 3.908e+006)
k = 0.83 (1.248e+004, 1.248e+004)
p1_try1_gof =
sse: 3.6086e004
rsquare: 1.0000
dfe: 23
adjrsquare: 1.0000
rmse: 0.0040
Again, excellent agreement. The huge ranges on a and k reflect the fact that those two values can't be determined independently this way (more on that in a second though). However, I noted that the fit puts k very close to the value found in the dodge fit. We also know that k is the same for dodge and parry in Cataclysm, and was the same for both in Wrath even when the two had different caps. It's not much of a stretch to guess that k_p = k_d in Mists as well. To confirm this, we try the fit again fixing k_p=k_d=0.885:
 Code: Select all
p1_try2_fit =
General model:
p1_try2_fit(x) = 1./(1./C+0.885./(x./a))
Coefficients (with 95% confidence bounds):
C = 235.1 (233.4, 236.8)
a = 243.7 (243.5, 243.8)
p1_try2_gof =
sse: 3.6086e004
rsquare: 1.0000
dfe: 24
adjrsquare: 1.0000
rmse: 0.0039
That seems reasonable, but how do we convince ourselves that this combination of k and a is any more valid than another combination? The answer is base parry. While naked, we should have about 3% parry plus the parry generated from base strength. A quick calculation shows:
 Code: Select all
baseStr/243.7 = 0.6730
which is 0.67 when rounded, consistent with our baseParry value of 3.67. The baseParry calculation is only so accurate though  due to rounding, baseStr gives 0.67% for any value of a between 243 and 246.6. But the curve fitting puts a tighter bound on a (243.5 to 243.8). If we perform one final fit to this data, fixing a=243.7, we get a slightly tighter range of values for C:
 Code: Select all
p1_try3_fit =
General model:
p1_try3_fit(x) = 1./(1./C+0.885./(x./243.7))
Coefficients (with 95% confidence bounds):
C = 235.5 (235.2, 235.9)
p1_try3_gof =
sse: 3.6493e004
rsquare: 1.0000
dfe: 25
adjrsquare: 1.0000
rmse: 0.0038
Or again, graphically:
At this point I stopped looking at the level 85 data and returned to Klaud's L90 data set. I could of course try to perform a multidimensional fit to the level 85 parry data from prot gear, which has both strength and parry rating, but I decided this wasn't necessary. I had gotten what I needed from the 85 data, which was information about C_d, k_d, C_p, k_p, and the fact that parry gained through strength is definitely affected by diminishing returns. What remained was to determine whether any of those values changed with character level, and that would only be determined by looking at the L90 data.
To summarize the assumptions and conclusions in this part:
Assumption #1: k_d=k_p.
Conclusion #1: Assuming k_d=k_p gives us a good fit with a value of a that is consistent with the amount of parry gained from base strength.
Conclusion #2: Under this assumption, C_p is around 235.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of GrehnSkipjack.
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty

theckhd  Moderator
 Posts: 6211
 Joined: Thu Jul 31, 2008 3:06 pm
 Location: Harrisburg, PA
Re: A Call to Arms  MoP Mechanics Testing
The file containing the data and calculations for this section is here: dr_eqn_data_L90.m
First, let's start with what we already know. From Simcraft's datamining, we know the rating conversion factors for dodge and parry are both 1035. Klaud's naked data set tells us that:
Klaud's data set is fairly extensive, but very scattered. Rather than try to reproduce it all in a table, I'm just going to give the portions that are relevant to each section. First, we'll look at dodge since that's easy:
Remember that the postDR values have base dodge builtin, which is why they're so much higher. The preDR values are read directly from the parry tooltip. If we pretend we don't know anything about the constants, and just try to fit with the old DR formula plus base dodge b, we get this:
Not bad, though the ranges for K, b, and C are all pretty wide. We again note that the Cataclysm/MoP level 85 value for C falls within the confidence interval. In addition, we know that b=3.01, so let's try and fit again with those two constraints:
In other words, exactly like the L85 data. From this we can conclude that the formulas do not change with character level.
Conclusion: The combination of this data and the L85 data suggests that the dodge equation is exactly:
with bonusDodge being the dodge from all other sources. For us, this is just dodge rating. Presumably for bears/monks, this will include the dodge gained from (totalAgibaseAgi).

Onward to parry. Klaud has provided us with a number of parry data sets that cover a pretty broad range of strength and parry rating. First, we'll look at a subset of that data that keeps parry rating fixed. There are actually two data sets like this, at different parry ratings:
I attempted to fit these sets of data two different ways: once with a linear fit totalParry = b + Str./a, and once with the full DR equation:
Here, I've used the L85 values of k and C_p, since the L90 dodge data suggests that the constants don't change. While it is possible, of course, that C_p changes with level while C_d does not, that seems very unlikely. What we ideally want to nail down with this data set is a, the strengthtoparry conversion factor, which is leveldependent. If we perform these fits on the first data set, these are the results:
As you can see, both fits are pretty good. But the proper DR version is better than the linear approximation. This does explain why I had so much trouble fitting the L90 data initially though  we're so low on the DR curve that everything still looks pretty linear.
Nonetheless, the second fit gives us a pretty good estimate of a, roughly 952. b is also consistent with what we expect for baseParry, which should be 3.00 or 3.01 (unclear, since baseDodge=3.01 despite not having any other sources of dodge). Fitting the second data set gives similar results:
At this point, my best estimate of the two parameters are b=3.00 and a=952.
At this point, we can try to tackle the entire parry data set, given below:
Again, preDR is just the component of preDR parry provided by parry rating. We start with a very open expression, leaving all of the parameters free:
Not bad at all. All four parameters ended up very close to the expected values. The range on C and a are still pretty broad, however. To tighten those up, we fix k=0.885 and b=3.00, since we're pretty sure about those two. That gives us:
We're getting closer. At this point, I decided to assume that our C_p from the L85 data was exact. This seems pretty reasonable given that we don't think it changes with level, and our L85 data was much bettersuited to giving us an accurate value for C_p. So we set C=235.5 and see what the algorithm spits out for a:
Which is exactly what we expected based on our str data subset.
For the visuallyinclined, here's a surface plot showing the fit and the data:
And the residuals:
Conclusion: this data suggests that the parry equation at level 90 is:
with bonusParry being the preDR parry granted by parry rating.
First, let's start with what we already know. From Simcraft's datamining, we know the rating conversion factors for dodge and parry are both 1035. Klaud's naked data set tells us that:
 Code: Select all
baseStr=176
baseDodge=3.01
baseParry=3.19
Klaud's data set is fairly extensive, but very scattered. Rather than try to reproduce it all in a table, I'm just going to give the portions that are relevant to each section. First, we'll look at dodge since that's easy:
 Code: Select all
Dodge data, in %
preDR postDR
2.8000 6.0300
2.9700 6.2100
3.3000 6.5400
2.2400 5.4500
3.0200 6.2600
2.5800 5.8000
3.3600 6.6000
3.1900 6.4300
0.8000 3.9100
1.1200 4.2500
1.4100 4.5600
1.6800 4.8500
1.8600 5.0400
2.0800 5.2800
2.1800 5.3900
2.4700 5.6800
2.7600 5.9800
3.0800 6.3100
3.3400 6.5800
3.6200 6.8600
3.8300 7.0700
Remember that the postDR values have base dodge builtin, which is why they're so much higher. The preDR values are read directly from the parry tooltip. If we pretend we don't know anything about the constants, and just try to fit with the old DR formula plus base dodge b, we get this:
 Code: Select all
d1_fit =
General model:
d1_fit(x) = b+1./(1./C+k./x)
Coefficients (with 95% confidence bounds):
C = 72.31 (58.09, 86.53)
b = 3.017 (2.999, 3.035)
k = 0.8914 (0.8781, 0.9047)
d1_gof =
sse: 4.1960e004
rsquare: 1.0000
dfe: 18
adjrsquare: 1.0000
rmse: 0.0048
Not bad, though the ranges for K, b, and C are all pretty wide. We again note that the Cataclysm/MoP level 85 value for C falls within the confidence interval. In addition, we know that b=3.01, so let's try and fit again with those two constraints:
 Code: Select all
d2_fit =
General model:
d2_fit(x) = 3.01+1./(1./65.631440+k./x)
Coefficients (with 95% confidence bounds):
k = 0.885 (0.8843, 0.8857)
d2_gof =
sse: 4.4994e004
rsquare: 1.0000
dfe: 20
adjrsquare: 1.0000
rmse: 0.0047
In other words, exactly like the L85 data. From this we can conclude that the formulas do not change with character level.
Conclusion: The combination of this data and the L85 data suggests that the dodge equation is exactly:
 Code: Select all
totalDodge = baseDodge + 1/(1/C_d + k/bonusDodge)
baseDodge = 3.01
C_d = 65.631440
k = 0.885
with bonusDodge being the dodge from all other sources. For us, this is just dodge rating. Presumably for bears/monks, this will include the dodge gained from (totalAgibaseAgi).

Onward to parry. Klaud has provided us with a number of parry data sets that cover a pretty broad range of strength and parry rating. First, we'll look at a subset of that data that keeps parry rating fixed. There are actually two data sets like this, at different parry ratings:
 Code: Select all
Set 1: fixed at 2.10% parry from rating
Str postDR parry
3638.00 9.50
4242.00 10.17
4752.00 10.74
5477.00 11.55
6115.00 12.25
6606.00 12.79
7210.00 13.44
7935.00 14.23
8779.00 15.13
Set 2: fixed at 1.15% parry from rating
Str postDR parry
1350.00 5.85
2236.00 6.87
2870.00 7.60
3631.00 8.46
4602.00 9.56
5236.00 10.27
5870.00 10.98
6389.00 11.55
7056.00 12.28
7817.00 13.12
8578.00 13.94
9548.00 14.99
10309.00 15.80
I attempted to fit these sets of data two different ways: once with a linear fit totalParry = b + Str./a, and once with the full DR equation:
 Code: Select all
b+baseStr./a+1./(1./235.5+0.885./(2.1+(xbaseStr)./a))
Here, I've used the L85 values of k and C_p, since the L90 dodge data suggests that the constants don't change. While it is possible, of course, that C_p changes with level while C_d does not, that seems very unlikely. What we ideally want to nail down with this data set is a, the strengthtoparry conversion factor, which is leveldependent. If we perform these fits on the first data set, these are the results:
 Code: Select all
ps1_fit =
General model:
ps1_fit(x) = b+x./a
Coefficients (with 95% confidence bounds):
a = 911.9 (905.3, 918.6)
b = 5.529 (5.478, 5.579)
ps1_gof =
sse: 0.0019
rsquare: 0.9999
dfe: 7
adjrsquare: 0.9999
rmse: 0.0164
 Code: Select all
ps2_fit =
General model:
ps2_fit(x) = b+176./a+1./(1./235.5+0.885./(2.1+(x176)./a))
Coefficients (with 95% confidence bounds):
a = 952.3 (950.6, 954)
b = 3.006 (2.994, 3.018)
ps2_gof =
sse: 1.0177e004
rsquare: 1.0000
dfe: 7
adjrsquare: 1.0000
rmse: 0.0038
As you can see, both fits are pretty good. But the proper DR version is better than the linear approximation. This does explain why I had so much trouble fitting the L90 data initially though  we're so low on the DR curve that everything still looks pretty linear.
Nonetheless, the second fit gives us a pretty good estimate of a, roughly 952. b is also consistent with what we expect for baseParry, which should be 3.00 or 3.01 (unclear, since baseDodge=3.01 despite not having any other sources of dodge). Fitting the second data set gives similar results:
 Code: Select all
ps3_fit =
General model:
ps3_fit(x) = b+x./a
Coefficients (with 95% confidence bounds):
a = 900.3 (893, 907.7)
b = 4.417 (4.359, 4.475)
ps3_gof =
sse: 0.0177
rsquare: 0.9998
dfe: 11
adjrsquare: 0.9998
rmse: 0.0402
 Code: Select all
ps4_fit =
General model:
ps4_fit(x) = b+176./a+1./(1./235.5+0.885./(1.15+(x176)./a))
Coefficients (with 95% confidence bounds):
a = 951.9 (951.2, 952.5)
b = 3 (2.995, 3.004)
ps4_gof =
sse: 1.0299e004
rsquare: 1.0000
dfe: 11
adjrsquare: 1.0000
rmse: 0.0031
At this point, my best estimate of the two parameters are b=3.00 and a=952.
At this point, we can try to tackle the entire parry data set, given below:
 Code: Select all
Str preDR postDR
4914.00 1.41 10.19
5308.00 1.51 10.73
5483.00 1.27 10.68
5956.00 1.26 11.19
6123.00 1.38 11.50
6371.00 1.28 11.67
6589.00 0.80 11.40
6751.00 0.80 11.58
6430.00 0.55 10.96
6430.00 0.81 11.24
6430.00 1.09 11.53
6430.00 1.33 11.79
6430.00 1.67 12.14
6430.00 1.93 12.41
6430.00 2.27 12.76
6430.00 2.57 13.07
6430.00 2.75 13.26
9354.00 0.76 14.38
9354.00 1.21 14.84
9354.00 1.46 15.10
9354.00 1.66 15.29
9354.00 1.84 15.48
9354.00 2.13 15.77
9354.00 2.34 15.98
9354.00 2.63 16.28
9354.00 3.00 16.65
3638.00 2.10 9.50
4242.00 2.10 10.17
4752.00 2.10 10.74
5477.00 2.10 11.55
6115.00 2.10 12.25
6606.00 2.10 12.79
7210.00 2.10 13.44
7935.00 2.10 14.23
8779.00 2.10 15.13
1350.00 1.15 5.85
2236.00 1.15 6.87
2870.00 1.15 7.60
3631.00 1.15 8.46
4602.00 1.15 9.56
5236.00 1.15 10.27
5870.00 1.15 10.98
6389.00 1.15 11.55
7056.00 1.15 12.28
7817.00 1.15 13.12
8578.00 1.15 13.94
9548.00 1.15 14.99
10309.00 1.15 15.80
Again, preDR is just the component of preDR parry provided by parry rating. We start with a very open expression, leaving all of the parameters free:
 Code: Select all
General model:
p1_fit(x,y) = b+176./a+1./(1./C+k./((x176)./a+y))
Coefficients (with 95% confidence bounds):
C = 234 (226.3, 241.6)
a = 951.7 (949.6, 953.8)
b = 3.001 (2.989, 3.013)
k = 0.885 (0.8819, 0.8882)
p1_gof =
sse: 7.5968e004
rsquare: 1.0000
dfe: 44
adjrsquare: 1.0000
rmse: 0.0042
Not bad at all. All four parameters ended up very close to the expected values. The range on C and a are still pretty broad, however. To tighten those up, we fix k=0.885 and b=3.00, since we're pretty sure about those two. That gives us:
 Code: Select all
General model:
p2_fit(x,y) = 3.00+176./a+1./(1./C+0.885./((x176)./a+y))
Coefficients (with 95% confidence bounds):
C = 233.5 (230.4, 236.6)
a = 951.5 (950.8, 952.2)
p2_gof =
sse: 7.6093e004
rsquare: 1.0000
dfe: 46
adjrsquare: 1.0000
rmse: 0.0041
We're getting closer. At this point, I decided to assume that our C_p from the L85 data was exact. This seems pretty reasonable given that we don't think it changes with level, and our L85 data was much bettersuited to giving us an accurate value for C_p. So we set C=235.5 and see what the algorithm spits out for a:
 Code: Select all
General model:
p3_fit(x,y) = 3.00+176./a+1./(1./235.5+0.885./((x176)./a+y))
Coefficients (with 95% confidence bounds):
a = 952 (951.8, 952.1)
p3_gof =
sse: 7.8737e004
rsquare: 1.0000
dfe: 47
adjrsquare: 1.0000
rmse: 0.0041
Which is exactly what we expected based on our str data subset.
For the visuallyinclined, here's a surface plot showing the fit and the data:
And the residuals:
Conclusion: this data suggests that the parry equation at level 90 is:
 Code: Select all
totalParry=baseParry+baseStr./a+1./(1./C_p+k./((totalStrbaseStr)./a+bonusParry))
baseParry=3.00
baseStr=176
a=952
C_p=235.5
k=0.885
with bonusParry being the preDR parry granted by parry rating.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of GrehnSkipjack.
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty

theckhd  Moderator
 Posts: 6211
 Joined: Thu Jul 31, 2008 3:06 pm
 Location: Harrisburg, PA
Re: A Call to Arms  MoP Mechanics Testing
The new build today added 2% dodge to Sanctuary, and while I haven't tested it yet, it's very likely that it will not be affected by diminishing returns. So to summarize the last two posts, the new dodge and parry DR equations are:
with the following constants:
bonusDodge is the preDR dodge from dodge rating (shown in the tooltip) and bonusParry is the preDR parry from parry rating (shown in the tooltip). I chose Q to represent the StrengthtoParry conversion factor because it takes us from "S" to "P" in "PQRS", and Q is more fun than R.
Now that we have the formulas, let's look at what they mean. First of all, here are the DR curves plotted for you:
It's clear that by 10% worth of dodge rating, we're already seeing the effects of diminishing returns (which is why the L90 dodge data was easy to fit). But it takes 23 times as much parry to start seeing distinct curvature. What this means for tanks is that our gearing is going to be very lopsided  we're going to want a lot more parry than we have dodge.
To illustrate that more clearly, let's look at the differential gain in avoidance. The following plot shows how much avoidance you gain by adding 1% preDR avoidance, plotted as a function of your postDR avoidance level. To put that in less technical terms: if you already have X% postDR dodge, then adding another 1% preDR dodge will give you Y% postDR dodge, where X and Y are the values on the plot. The dotted lines are guides to help us see how much parry we should have at 10%, 15%, and 20% dodge  in other words, to keep dodge and parry balanced such that adding Z parry rating is equivalent to adding Z dodge rating. Note that I've already included base dodge and parry in this plot, so that's accounted for.
This plot tells us exactly how bad the discrepancy between dodge and parry is. If we have 10% total dodge on our character sheet, we'd want to stack up to 21% parry to make sure that we're not being inefficient with our diminishing returns. And it gets worse as we go higher  at 15% total dodge, we'd want 39% parry, and at 20% dodge we'd want 57% parry. The ideal ratio of parry:dodge gets larger as we stack more dodge (though to be fair, this is only because of base dodge and parry  the ideal ratio of preDR parry and dodge is a constant).
We can express this mathematically as follows. The differential gain in postDR dodge and parry dA_d and dA_p due to a small amount of preDR dodge and parry da_d and da_p are:
If we set dA_d = dA_p and da_d = da_p, we can solve for A_p in terms of A_d:
Note that A_p and A_d are the postDR values ignoring base dodge and parry, i.e. T_p = B_p + A_p and T_d = B_d + A_d, where T_i and B_i are the total and base values of dodge and parry (i is d or p). If we want to compare total parry T_p to total dodge T_d, we get:
which we could plot if we wanted to know exactly how much parry we should aim for at a given dodge level. If you're interested, here is that plot.
We can also consider the ideal parrytododge ratio, R_pd = T_p/T_d. That's simply:
which looks like this when plotted:
As you can see, the ideal parrytododge ratio quickly jumps up to 2:1 and then slowly increases to 3:1 and higher as you stack more dodge. It saturates at C_p/C_d = 3.588.
In summary, we're going to value parry a lot more than dodge at level 90.
Note that while I have only tested this with a paladin, it's a reasonable assumption that these formulas will work for warriors and DKs. And likely for Monks as well, if they can parry (I think they can, but I haven't been paying much attention to them). Since druids can't parry, their DR formula is likely to have a different(i.e. much higher) value of C_d, otherwise they'll be severely disadvantaged compared to tanks that can parry.
 Code: Select all
Dodge = baseDodge + sancDodge + 1/(1/C_d + k/bonusDodge)
Parry = baseParry + baseStr/Q + 1/(1/C_p + k/(bonusParry+(StrbaseStr)/Q))
with the following constants:
 Code: Select all
baseDodge = 3.01
sancDodge = 2
baseParry = 3.00
baseStr = varies per race
C_d = 65.631440
C_p = 235.5
k = 0.885
Q = 952
bonusDodge is the preDR dodge from dodge rating (shown in the tooltip) and bonusParry is the preDR parry from parry rating (shown in the tooltip). I chose Q to represent the StrengthtoParry conversion factor because it takes us from "S" to "P" in "PQRS", and Q is more fun than R.
Now that we have the formulas, let's look at what they mean. First of all, here are the DR curves plotted for you:
It's clear that by 10% worth of dodge rating, we're already seeing the effects of diminishing returns (which is why the L90 dodge data was easy to fit). But it takes 23 times as much parry to start seeing distinct curvature. What this means for tanks is that our gearing is going to be very lopsided  we're going to want a lot more parry than we have dodge.
To illustrate that more clearly, let's look at the differential gain in avoidance. The following plot shows how much avoidance you gain by adding 1% preDR avoidance, plotted as a function of your postDR avoidance level. To put that in less technical terms: if you already have X% postDR dodge, then adding another 1% preDR dodge will give you Y% postDR dodge, where X and Y are the values on the plot. The dotted lines are guides to help us see how much parry we should have at 10%, 15%, and 20% dodge  in other words, to keep dodge and parry balanced such that adding Z parry rating is equivalent to adding Z dodge rating. Note that I've already included base dodge and parry in this plot, so that's accounted for.
This plot tells us exactly how bad the discrepancy between dodge and parry is. If we have 10% total dodge on our character sheet, we'd want to stack up to 21% parry to make sure that we're not being inefficient with our diminishing returns. And it gets worse as we go higher  at 15% total dodge, we'd want 39% parry, and at 20% dodge we'd want 57% parry. The ideal ratio of parry:dodge gets larger as we stack more dodge (though to be fair, this is only because of base dodge and parry  the ideal ratio of preDR parry and dodge is a constant).
We can express this mathematically as follows. The differential gain in postDR dodge and parry dA_d and dA_p due to a small amount of preDR dodge and parry da_d and da_p are:
 Code: Select all
dA_d = (1/k)(1A_d/C_d)^2 da_d
dA_p = (1/k)(1A_p/C_p)^2 da_p
If we set dA_d = dA_p and da_d = da_p, we can solve for A_p in terms of A_d:
 Code: Select all
A_p = (C_p/C_d)*A_d
Note that A_p and A_d are the postDR values ignoring base dodge and parry, i.e. T_p = B_p + A_p and T_d = B_d + A_d, where T_i and B_i are the total and base values of dodge and parry (i is d or p). If we want to compare total parry T_p to total dodge T_d, we get:
 Code: Select all
T_p = B_p + (C_p/C_d)(T_dB_d)
which we could plot if we wanted to know exactly how much parry we should aim for at a given dodge level. If you're interested, here is that plot.
We can also consider the ideal parrytododge ratio, R_pd = T_p/T_d. That's simply:
 Code: Select all
R_pd = T_p/T_d = C_p/C_d  ((C_p/C_d)B_dB_p)/T_d
which looks like this when plotted:
As you can see, the ideal parrytododge ratio quickly jumps up to 2:1 and then slowly increases to 3:1 and higher as you stack more dodge. It saturates at C_p/C_d = 3.588.
In summary, we're going to value parry a lot more than dodge at level 90.
Note that while I have only tested this with a paladin, it's a reasonable assumption that these formulas will work for warriors and DKs. And likely for Monks as well, if they can parry (I think they can, but I haven't been paying much attention to them). Since druids can't parry, their DR formula is likely to have a different(i.e. much higher) value of C_d, otherwise they'll be severely disadvantaged compared to tanks that can parry.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of GrehnSkipjack.
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty

theckhd  Moderator
 Posts: 6211
 Joined: Thu Jul 31, 2008 3:06 pm
 Location: Harrisburg, PA
Re: A Call to Arms  MoP Mechanics Testing
Your first set of data up there, you've labelled "Rating" above Dodge/Parry columns, then "PreDR %" above Dodge/Parry columns, but looks like the numbers go rating, %, rating, %.
 KysenMurrin
 Posts: 4811
 Joined: Thu Jun 26, 2008 6:37 am
 Location: UK
Re: A Call to Arms  MoP Mechanics Testing
KysenMurrin wrote:Your first set of data up there, you've labelled "Rating" above Dodge/Parry columns, then "PreDR %" above Dodge/Parry columns, but looks like the numbers go rating, %, rating, %.
Thanks, fixed.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of GrehnSkipjack.
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty
Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 6.x, Blog: Sacred Duty

theckhd  Moderator
 Posts: 6211
 Joined: Thu Jul 31, 2008 3:06 pm
 Location: Harrisburg, PA
Re: A Call to Arms  MoP Mechanics Testing
It's such a tiny thing it shouldn't make a difference, but I noticed this:
And I thought it might be helpful to look at other classes, so I did. And it didn't really help.
Naked, 85 unspecced dwarf Paladin: 3.01 dodge, 3.69 parry
Agi classes:
Naked 86 Pandaren Windwalker Monk: 3.33 dodge, 8.01 parry (5% from Sparring passive)
Naked 87 Dwarf Enhancement Shaman: 3.15 dodge, 3.01 parry
Caster:
85 Gnome Mage: 3.00 dodge, can't parry.
I was thinking I'd see 3.01% everywhere until I tried that last one...
baseParry, which should be 3.00 or 3.01 (unclear, since baseDodge=3.01 despite not having any other sources of dodge).
And I thought it might be helpful to look at other classes, so I did. And it didn't really help.
Naked, 85 unspecced dwarf Paladin: 3.01 dodge, 3.69 parry
Agi classes:
Naked 86 Pandaren Windwalker Monk: 3.33 dodge, 8.01 parry (5% from Sparring passive)
Naked 87 Dwarf Enhancement Shaman: 3.15 dodge, 3.01 parry
Caster:
85 Gnome Mage: 3.00 dodge, can't parry.
I was thinking I'd see 3.01% everywhere until I tried that last one...
 KysenMurrin
 Posts: 4811
 Joined: Thu Jun 26, 2008 6:37 am
 Location: UK
Return to Advanced Theorycraft and Calculations
Who is online
Users browsing this forum: No registered users and 1 guest