#### Archived

This topic is now archived and is closed to further replies.

# Modeling Flurry with DW and WF

## 39 posts in this topic

So, I've been trying to make a little dinky spreadsheet to calculate Enhancement Shaman DPS, and an interesting conundrum has befallen me. I've figured out how to model Flurry for a single weapon. I've figured out how to model Flurry for a single weapon with Windfury. I've figured out how to model Flurry for Dual Wield, and I've figured out how to model it if both weapons have Windfury. However, I cannot for the life of me imagine how one would model Flurry with Dual Wield if only one of the two weapons has Windfury. It seems almost impossible, because I see no way to determine the probability distribution for a given swing to be at reduced speed when the preceding swings could be any combination involving zero to three Windfury-capable swings.

Let me just briefly run down how I'm handling each of the above situations, so that if I'm making some sort of conceptual mistake, someone can correct me on it.

First, there's the situation where you have one weapon with Flurry. This is very simple; The probability of a given swing having reduced speed is equal to the probability of any of the three previous swings having crit. In other words, you take the probability that none of the previous three swings crit times the base weapon speed, plus the complement of that probability times the Flurry-reduced speed (speed/1.3).

Now, if you have Flurry with Windfury, then any of the three previous swings may have procced Windfury, and if any of those extra swings crit, Flurry procced. I approach this by first calculating the probability, on any given initial swing, either that the initial swing crits or that a Windfury swing occurs and crits. In other words:

1 - ((1-Crit%)*(1-(Crit%+Hit%+Glance%)*0.20*Crit%)*(1-(Crit%+Hit%+Glance)*0.20*Crit%))

That's the probability that any given swing gets at least one crit. Then you simply substitute that in the formula for the first situation.

Now, when you have Dual Wield with no Windfury, as long as you can guarantee that the main and offhand have the same chances to crit/hit/etc. (i.e. you have the same weapon skill with both), the formula stays exactly the same. Same if you have Windfury on both weapons.

But...what if you have Windfury, say, only on the main hand, and something else on the offhand? Now, for any given swing, it's possible that some of the preceding attacks were Windfury-capable, and the rest were not. In that case, how can you know how many? Can we do some sort of probability-based average (in which case, please forgive me, as I horribly fail at more advanced probability stuff)? Or can/should we approach the model in a completely different fashion? Would it simply be more plausible to write a program to simulate the situation for different weapon speeds and output averages over extremely long time periods instead (in which case, I would very easily be capable of such a thing)?

I appreciate any help I can get on this one. It kind of reminds me of the whole thing about what fraction of a main hand swing you "gain" when your offhand procs sword spec (which I was also never able to figure out for myself).

##### Share on other sites

I'm going to wait for someone else to do it first because I'm an egotistical bastard. And no one has said my current calcs are that far off...yet.

Note: my windfury calcs have to change for expac still. White to yellow makes a big difference.

##### Share on other sites

i've been working on this for awhile, i posted a thread about it a month or so back but there was little to no interest. since then i've added a lot to it and tried to keep up with all changes made in beta. here's the latest version of my spreadsheet:

it's probably not that user friendly or easy to follow, since no one seemed to care when i started working on it, plus i'm lazy. i'd love to discuss it with anyone who's interested.

i'm pretty sure i can model just one weapon with WF while accounting for flurry, but i've never considered it. i'll think about it now and see what i get.

##### Share on other sites
I'm going to wait for someone else to do it first because I'm an egotistical bastard. And no one has said my current calcs are that far off...yet.

Aww, come on, don't do that to me. This whole thing is making me insane. Teeeeellll meeeeeee!! >_<

##### Share on other sites

i think you're making it more complicated than it needs to be. here's how i do it. i start with a sample size of a large number of swings (1000 or so, doesn't matter in the end) and with weapon info, you can figure out the total damage that each weapon should do in the given sample size, accounting for hits/crits/misses etc. I do this independantly for each weapon, MH and OH. then you add winfury on top of that, by taking the total number of hits and crits, multiply by WF proc-rate, and you have the number of times windfury is expected to proc. it would be a simple matter to just exclude WF procs for one hand in my spreadsheet.

for flurry, it's a little complicated but i think it makes sense. i first calculate the effective average weapon speed. for example, if you're using a 2.0 speed weapon in each hand, this number is 1.0 because on average you're getting a swing in every 1.0 seconds. this value is calculated as follows:

(MH_speed*OH_speed)/(MH_speed+OH_speed)

using that speed and the total number of swings in the sample size, you figure out the expected time it should take to make those swings (ignoring flurry and WF). then you calculate the actual time it takes, due to flurry. that time is calculated by this:

test_swings*wep._speed*(((1-base_crit)^3) + (1/(1+flurry_haste))*(1-(1-base_crit)^3))

where test_swings is the sample size of say 1000, wep_speed is the previously mentioned average speed.

entirely separate from this, all the damage being done is calculated. that adds WF and crits/misses etc on top of it. i *think* this method effectivly models such that WF swings don't eat flurry procs, but i suppose i'm not sure that it accounts for WF crits procing flurry.

EDIT: to clarify, the issue is making sure that WF crits DO proc flurry in the model, but only for the given weapon, yes?

just kind of getting my thoughts/calculations out there as i think about this....

##### Share on other sites
i *think* this method effectivly models such that WF swings don't eat flurry procs, but i suppose i'm not sure that it accounts for WF crits procing flurry.

EDIT: to clarify, the issue is making sure that WF crits DO proc flurry in the model, but only for the given weapon, yes?

just kind of getting my thoughts/calculations out there as i think about this....

I have no problem modeling that WF swings don't eat Flurry. The problem I'm looking to solve is how to model WF crits proccing Flurry if only one of the two weapons has WF. Flurry, when procced, applies to any and all equipped weapons (to the best of my knowledge) and lasts for three swings of either one.

##### Share on other sites

for one weapon, i think it's simpler than you are making it out to be.

without windfury, the probability that at any given time you are not in flurry is (as we all know):

(1-C)^3

but if you have Windfury, then a windfury crit on any one of those swings will still result in you being in flurry, since WF procs flurry but doesnt' eat it (correct?). thus, instead of raising it to the power of 3, we need to raise it to (3+average WF swings in this time). in 3 swings, you will proc windfury an average of 0.6 times, thus you will have an additional 1.2 swings, on average. so for a single weapon with WF, we should be using

(1-C)^4.2

with two weapons, this will remain unchanged if they both have WF, but it will go down if one has it and one doesn't. there's probably a way to use the relative speeds of each weapons to figure out what it should be. i'll think about it some more.

edit: yeah, just use the speeds to calculate what proportion of the previous 3 swings belong to a given weapon, and thus on average how many of those 3 swings have a chance to proce WF. for example, perhaps the WF weapon accounts for an average of 1.8 of those 3 swings. then the total swings you're looking at is

3+(1.8*0.2*2)=3.72

thus your magic "chance i'm not in flurry" number is:

(1-C)^3.72

EDIT2: i already have the mechanism in place to figure out how many of the 3 swings belong to a given weapon, as i needed it in order to distribute a sample of total swings between two weapons of different speeds.

the number of a given sample of swings (in this case the key 3) that each weapon contributes is:

mainhand: test_swings*(1-(MH_speed/(MH_speed+OH_speed)))

offhand: test_swings*(1-(OH_speed/(MH_speed+OH_speed)))

in the case of the flurry calculations, test_swings=3.

##### Share on other sites

Aww, come on, don't do that to me. This whole thing is making me insane. Teeeeellll meeeeeee!! >_<

I imagine Deathwing had to model this for warriors in his spreadsheet. I assume you've looked at the theory in here?

##### Share on other sites

alright, i think it's pretty simple. to clarify my previous post and consolidate it, here's how you could model dual wielding with 1 or both weapons supporting WF.

wherever you're putting your flurry calculations in, instead of having

(1-C)^3

you replace this with

(1-C)^(3+A)

here's how you calculate A.

you need a check to see if a given weapon has winfury on it. perhaps a spreadsheet cell for each weapon, where a 1 corrosponds to having WF and a 0 corrisponds to not having it. call these two cells MH_WF_check and OH_WF_check. then:

A = ((1-(OH_speed/(MH_speed+OH_speed)))*OH_WF_check+(1-(MH_speed/(MH_speed+OH_speed)))*MH_WF_check)*3*WF_procrate*2

conceptualy this breaks down to:

(percentage of swings that belong to off-hand * OH check + percentage of swings that belong to main-hand * MH check) * 3swings * 20% chance to proc WF * 2WFswings

edit: here's a hopefuly more clear representation of the A equation.

does that make sense?

##### Share on other sites

You're definitely right about being able to make it simpler in the way you identified. However, the crit rate for Windfury swings won't be exactly equal to the melee crit rate, once Windfury changes to yellow attacks (if you assume that yellow attacks use a multiple-roll system, as I conjectured in my other thread)...it'll be closer to (1-M-D-P-B)*C.

Thanks for the tip, though.

(edit) This was a response to post #7. Also, I'm now reading the Warrior DPS spreadsheet thread linked in #8. So, I'll be back in this thread in a couple hours. >_>

##### Share on other sites
You're definitely right about being able to make it simpler in the way you identified. However, the crit rate for Windfury swings won't be exactly equal to the melee crit rate, once Windfury changes to yellow attacks (if you assume that yellow attacks use a multiple-roll system, as I conjectured in my other thread)...it'll be closer to (1-M-D-P-B)*C.

you are correct about that, although it is a minor difference and an approximation i'm willing to live with.

##### Share on other sites
you replace this with

(1-C)^(3+A)

here's how you calculate A.

you need a check to see if a given weapon has winfury on it. perhaps a spreadsheet cell for each weapon, where a 1 corrosponds to having WF and a 0 corrisponds to not having it. call these two cells MH_WF_check and OH_WF_check. then:

A = ((1-(OH_speed/(MH_speed+OH_speed)))*OH_WF_check+(1-(MH_speed/(MH_speed+OH_speed)))*MH_WF_check)*3*WF_procrate*2

conceptualy this breaks down to:

(percentage of swings that belong to off-hand * OH check + percentage of swings that belong to main-hand * MH check) * 3swings * 20% chance to proc WF * 2WFswings

edit: here's a hopefuly more clear representation of the A equation.

does that make sense?

I love you for pointing out something that should have been obvious, but I probably wouldn't in a million years have made the leap needed to reach that equation. Back to work for me now. :)

By the way, I downloaded v0.2 of your spreadsheet earlier (found the old thread from a forum search before I posted this one) and, no offense, but I found it utterly incomprehensible. Of course, I'm sure anyone looking at my current work would be similarly lost, as I don't think either of us started with the intention of designing for readability. Still, I think I'm going to endeavor to make mine a bit more user-friendly, maybe put some things in like the ability to specify your gear and buffs.

Regarding the "approximation" of the new crit rate if you assume a multiple-roll system, you don't need to do that. I think you could just take the (1-C)^(3+A) equation and replace it with:

(1-C)^3 * (1-(1-M-D-B-P)*C)^A

Which would accurately model the correct crit rate for Windfury swings.

##### Share on other sites

I love you for pointing out something that should have been obvious, but I probably wouldn't in a million years have made the leap needed to reach that equation. Back to work for me now. :)

By the way, I downloaded v0.2 of your spreadsheet earlier (found the old thread from a forum search before I posted this one) and, no offense, but I found it utterly incomprehensible. Of course, I'm sure anyone looking at my current work would be similarly lost, as I don't think either of us started with the intention of designing for readability. Still, I think I'm going to endeavor to make mine a bit more user-friendly, maybe put some things in like the ability to specify your gear and buffs.

Regarding the "approximation" of the new crit rate if you assume a multiple-roll system, you don't need to do that. I think you could just take the (1-C)^(3+A) equation and replace it with:

(1-C)^3 * (1-(1-M-D-B-P)*C)^A

Which would accurately model the correct crit rate for Windfury swings.

is the newer one any easier to figure out? i added more borders to try to make things more clear. yellow cells are input cells, green cells are significant calculated values. i suppose i should make "userfriendly" the next thing i work on.

##### Share on other sites

With the understanding of the spreadsheed being incomplete in this respect, is there any way I could get a download link possibly for it?

I'd really like to get more data on what kind of realistic dps I'm looking at immedately after the patch..8grin*

##### Share on other sites
With the understanding of the spreadsheed being incomplete in this respect, is there any way I could get a download link possibly for it?

I'd really like to get more data on what kind of realistic dps I'm looking at immedately after the patch..8grin*

if you're talking about my spreadsheet, i linked it in my first post.

##### Share on other sites

Actually I somehow stupidly skipped over your post (I was messing around with some annoying alliance racking up DKs), but I'm looking it over right now and going to see if my fried brain can make it work.

My original post was to the OP, but thanks for this, I'll see what sort of numbers I can figure out.

##### Share on other sites
is the newer one any easier to figure out? i added more borders to try to make things more clear. yellow cells are input cells, green cells are significant calculated values. i suppose i should make "userfriendly" the next thing i work on.

Ah...yes, it is. I see you've since incorporated all the talents and such, too. It looks pretty good, although I guess if you use Chalon/Pf/et al's Rogue DPS sheet as a standard, all other work pales in comparison. >_>

Seriously though, your sheet is quite good. Unfortunately, it lacks a bit of flexibility, in that it seems you've assumed the Shaman is using Windfury on both weapons. Part of my motivation in starting my spreadsheet was that I wanted to compare the effectiveness of all the weapon buffs, especially given the fact that some of them (Rockbiter and Windfury) suffer from the offhand damage penalty while some (Flametongue) don't.

By the way, might I ask what the "bugged WF" sheet in your spreadsheet is supposed to represent?

(edit) Another note, I observed that when I changed the number of "Total swings" in your sheet, the end DPS result was the same anyway. I don't think you necessarily need to include that swing count as an intermediate step; it's just an additional convolution that only serves to make your sheet a bit less understandable.

##### Share on other sites

Ah...yes, it is. I see you've since incorporated all the talents and such, too. It looks pretty good, although I guess if you use Chalon/Pf/et al's Rogue DPS sheet as a standard, all other work pales in comparison. >_>

Seriously though, your sheet is quite good. Unfortunately, it lacks a bit of flexibility, in that it seems you've assumed the Shaman is using Windfury on both weapons. Part of my motivation in starting my spreadsheet was that I wanted to compare the effectiveness of all the weapon buffs, especially given the fact that some of them (Rockbiter and Windfury) suffer from the offhand damage penalty while some (Flametongue) don't.

By the way, might I ask what the "bugged WF" sheet in your spreadsheet is supposed to represent?

(edit) Another note, I observed that when I changed the number of "Total swings" in your sheet, the end DPS result was the same anyway. I don't think you necessarily need to include that swing count as an intermediate step; it's just an additional convolution that only serves to make your sheet a bit less understandable.

"bugged WF" was when off hand WF procs resulted in main hand swings. it's obsolete. i realize the "total swings" method of calculation makes it more convoluted, but it was the easiest way for me to approach the problem initialy, by calculating total damage and then quite separately calculating total time.

it was a simple matter to add windfury flexibility (1 weapon, both, neither) to the sheet, once i figure out the stuff i posted here earlier. that's in the version i'm dealing with now, just not the last version i uploaded. i agree with you that it would be useful to allow for all weapon buffs, and it is something i should work on. i think i don't have enough technical information to impliment the other weapon enchantments at the moment though. for example, i'd need the exact weaponspeed->flametounge damage conversion, the new rockbiter mechanics, the true proc-rate/proc-mechanics of frostbrand, etc. if you have this information do share!

originaly, i didn't know flametounge didn't suffer from the offhand penalty. thus dual WF seemed the hands-down best option due to best dps as well as getting you extra procs of shamanistic rage and unleashed rage.

in case you still have questions, here's a pic that hopefuly explains some of the sheet:

##### Share on other sites
"bugged WF" was when off hand WF procs resulted in main hand swings. it's obsolete. i realize the "total swings" method of calculation makes it more convoluted, but it was the easiest way for me to approach the problem initialy, by calculating total damage and then quite separately calculating total time.

it was a simple matter to add windfury flexibility (1 weapon, both, neither) to the sheet, once i figure out the stuff i posted here earlier. that's in the version i'm dealing with now, just not the last version i uploaded. i agree with you that it would be useful to allow for all weapon buffs, and it is something i should work on. i think i don't have enough technical information to impliment the other weapon enchantments at the moment though. for example, i'd need the exact weaponspeed->flametounge damage conversion, the new rockbiter mechanics, the true proc-rate/proc-mechanics of frostbrand, etc. if you have this information do share!

originaly, i didn't know flametounge didn't suffer from the offhand penalty. thus dual WF seemed the hands-down best option due to best dps as well as getting you extra procs of shamanistic rage and unleashed rage.

Here are the mechanics I've uncovered for each of the weapon buffs on the PTR...

Rockbiter

If the tooltip states "deals X to Y damage," then the base DPS of the buff is Y/4 (the slowest weapon speed in existence -- you can verify that value is correct by then multiplying it by 1.3, the fastest weapon; you'll find that X = Y*1.3/4). Thus, a weapon of speed S gets a base proc damage of S*Y/4. Every time you land a swing with a weapon enchanted with Rockbiter, the proc goes off. It can crit (for double damage), and it seems to do so at a rate equal to your melee crit rate (I have no data for this, it's merely how it feels). Thus, for melee crit and hit rates of C and H respectively, I would assume Rockbiter damage for any given swing to be:

(S*Y/4)*(C+H)*(1+C)

Offhand Rockbiter procs deal half damage. (edit) Also, Rockbiter proc damage is mitigated by armor. However, Rockbiter procs cannot be blocked, dodged, or parried, nor can they glance.

Flametongue

Same as for Rockbiter, if the tooltip states "deals X to Y damage," then the base DPS of the buff is Y/4. However, Flametongue's damage on a given swing is based only on the main hand's speed, for either the main hand or the offhand. Thus, if your main hand's speed is S, and your offhand's speed is T, either weapon will proc Flametongue for S*Y/4 damage. There's no indication as to whether or not this is intentional. Everything else about Flametongue is the same as it is now, i.e. it can crit for 150% damage (at a rate equal to your spell crit rate) and be resisted. Thus, for melee crit and hit rates of C and H respectively and spell crit rate of R, I would assume Flametongue damage for any given swing to be:

(S*Y/4)*(C+H)*(1+0.5*R)

Offhand Flametongue procs deal full damage.

Windfury

You seem to have all the information about Windfury. However, it bears repeating that Windfury proc swings seem to be considered special attacks both in that they don't suffer the Dual Wield miss penalty and in that they don't glance. They can proc Flurry and Unleashed Rage. They don't seem to be able to proc Shamanistic Rage (but I'm not 100% on this).

Frostbrand

Frostbrand sucks and I don't know very much about it. I do know that its functionality is very similar to Flametongue, except that it has a proc rate below 100%.

Stormstrike

Stormstrike is weird. It doesn't seem to proc Windfury anymore. It does properly cause a Rockbiter proc for each weapon enchanted with that spell. However, when it comes to Flametongue and Frostbrand, it seems to be very odd. If either weapon has one of those enchants, it seems that there are up to three proc chances: one for each weapon with those enchants, and an extra one that just seems to magically come with Stormstrike itself. That is, if you have Flametongue on one of your weapons and use Stormstrike, you get two Flametongue procs. If you have Flametongue on both and Stormstrike, you get three procs. If you have Frostbrand on both weapons and Stormstrike, you can get up to three procs. It's very strange, and I really couldn't figure out why it was happening.

Hope this information is of use to you. If not, at least writing it all down in one place has helped me to collect my observations before I forgot them all. >_>

##### Share on other sites

Theoretically (that is, if flurry works the way it should), you should be able to model each weapon's flurry (and resulting dps) independently. Instant attacks effect on flurry can also be modeled (with a bit more complications)

That said, I played around with a shaman who had melee stats equivalent to a warrior with naxx-gear... and if offhand swings procced the MH, and Rockbiter as a flat AP buff, was doing over 1100 unmitigated dps, so not too bad

Currently their dps is much, much lower

##### Share on other sites

I am not sure that I see how you can model the weapons independently. Flurry hastes both weapons. The roundoff is always in the players favor when the buff fades so modeling them separately seems to cheat your dps.

##### Share on other sites
I am not sure that I see how you can model the weapons independently. Flurry hastes both weapons. The roundoff is always in the players favor when the buff fades so modeling them separately seems to cheat your dps.

flurry's tooltip says it increases attack speed by 30% for 3 swings

if that works out to 3 attacks at 30% increase in attack speed, each weapon can be modeled independently.

I did test with /combatlog and it appeared as though it worked that way. I did not do enough testing to verify this, however.

##### Share on other sites

What the tooltip says doesn't really matter. What matters is how it is actually implemented in the game. The key test if you are willing to do it is take 2 slow weapons of the same speed, and see if they ever do not swing at the same time. If flurry lasted 3 swings, they should eventually not swing at the same time (MH hit, OH crit, mh hit, of hit, mh hit [flurry fades] oh hit). Current theory is that flurry will last 4 swings if neccessary (3.5 on average since it will last 3 if MH crits instead of OH) if weapon speed is exactly matched (eg flurry wont fade until after the OH hit.

Test #2 is you add windfury to the mix. If it is white damage, curent theory states it should eat flurry charges(1), generate rage(2) and glance(3). If it is yellow damage it should not do those 3 things but should be affected by impale(4). 2 and 3 are easily proven, 4 requires some damage meter math which is fairly easy as well (average damage of WF crit should be 2.1 * average damage of WF hit )

1 is a bit difficult as you need to look in the combat log and prove/disprove the following sequences:

- MH crit, OH hit, windfury hit, MH hit, OH hit (flurry fades)

- MH hit, OH crit, windfury hit, MH hit, OH hit (flurry fades)

- MH hit, OH crit, MH hit, OH hit, windfury hit (flurry fades) NOTE: this one is key

Of course modeling this gets a bit tricky to say the least. Feel free to correct me if you see anything wrong :) Ive been known to make mistakes.

##### Share on other sites

my guess is that it would be implemented similar to this

pertinent values:

// mainhand

mh.Speed // weapon speed on tooltip effectively a constant.

mh.Delay // current time waited since last swing

// offhand

oh.Speed

oh.Delay

// flurry is a player buff not weapon it applies to both.

bFlurry

nFlurryCounter // number if swings left before flurry expiration

```gameUpdate(float dt) //dt will be something like 0.05f

{

if(bFlurry)

{

mh.Delay += dt*1.3;

oh.Delay += dt*1.3;

}

else

{

mh.Delay += dt;

oh.Delay += dt;

}

if(mh.Delay >= mh.Speed)

{

nFlurryCounter--;

mh.Swing(); // this will calc damage and reset delay timer and potentially reset flurry counter.

}

if(oh.Delay >= oh.Speed)

{

nFlurryCounter--;

oh.Swing(); // this will calc damage and reset delay timer and potentially reset flurry counter.

}

if(nFlurryCounter <= 0)

bFlurry = false;

}```

The important thing to notice is that even if the offhand consumes a final charge of flurry that main hand will still have gained the haste for the duration of its downtime up until that final swing.

The other possible implementation is what you describe where flurry divides your weapon delay constants by 1.3 but programatically it seems nicer to have your target be a constant instead of a changing value.

##### Share on other sites
Stormstrike

Stormstrike is weird. It doesn't seem to proc Windfury anymore. However, when it comes to Flametongue and Frostbrand, it seems to be very odd. If either weapon has one of those enchants, it seems that there are up to three proc chances: one for each weapon with those enchants, and an extra one that just seems to magically come with Stormstrike itself. That is, if you have Flametongue on one of your weapons and use Stormstrike, you get two Flametongue procs. If you have Flametongue on both and Stormstrike, you get three procs. It's very strange, and I really couldn't figure out why it was happening.

I was testing a bit last night, and it was even weirder. FT OH was one proc (WF main) but FT MH was 3 (WF OH)??

quick edit: PTR, not beta