WARNING
The information found here regarding Breath of Sindragosa and Defile is outdated. Please refer to the newer post regarding that information.
Modeling level 100 talent damage
With the new expansion comes new shinies. In this the first “real” post of this blog, let’s dive in and take a deep look at each option. While you COULD just use simcraft to find the damage output differences, I prefer to do my theorycrafting on paper. Plus who doesn’t love math? It is important to remember however that doing this gives us a THEORETICAL model of these talents. You have to adjust the conditions around these models to get any practical information.
The first step to comparing damage without simulating it, is to model each of the talents mathematically. This means making a formulaic representation of the abilities damage. For example: if you wanted to mathematically model the damage per second of a dot that ticked once every 3 seconds for 50% AP each tick, it would look something like this: DPS = (damage)*(ticks per second), which is basically saying “how often and for how much”. Plugging in our given values (50% AP every 3 seconds) and we get DPS = (.5*AP)*(1/3) = 1/6*AP, or 16.67% AP per second. If you had 7,000 attack power, this dot would have a base DPS (so not including anything like +% dmg modifiers or other boss mechanics) of 1166.67 DPS.
One of the reasons I prefer to do my theorycrafting this way as opposed to using simcraft, is because it’s very easy to come back and adjust for various nerfs/buffs. Let’s say they buffed this buffs tick rate to once every 2 seconds. All we’d have to do is adjust the formula: DPS = (.5*AP)*(1/2) = 1/4*AP or 25% AP per second, at 7,000 AP this becomes 1750 dps. Quite a buff! nerfbat incoming…
Now that we’ve established what a formulaic model LOOKS like, we need to go about making one that works for the lvl 100 talent options. In the example above we only looked at single target damage. For a real comparison we’re going to have to account for the number of enemies (and a bunch of other talent specific stuff), which means our final comparison will be in terms of both AP and the number of mobs we are attacking, and stuff like how often you use Blood Boil, and all sorts of goodies.
With the intro out of the way, let’s start modeling!
Breath of Sindragosa
Breath of Sindragosa is by far the easiest to figure out conceptually speaking. The damage formula for it is as follows: AP on the primary target, and AP/n for all secondary targets where n is the total number of targets, primary included. For example, if you had 3000 AP (and no versatility or other +dmg% modifiers) and used BoS to hit 5 targets, the first target would take 3000 damage. The other 4 targets would take 1/5*3000 = 600 damage each. This means that the total damage of a tick of Breath of Sindragosa is equal to AP+(AP/n)*(n-1).
The only other factor we need to fully model BoS is how long we can keep the buff up on average. This means knowing how fast we generate RP on average, and treating how much RP we have when we first use it as a variable. I will make a blog post regarding this and other numbers like it soon, but for now just trust me that our RP gen per minute is:
To find the total time you can cast BoS, need to find out how long we can maintain RP. Do to this we can simply use a simple physics equation: v1= v2 + a*t (hence Einstein). Our v1 is our ending RP (in this case , 0 because we’ll have run out). Our starting RP is whatever we had when we started using BoS. a is how fast we are gaining and/or losing RP. BoS costs 15 RP per tick, and it ticks every second. This gives us a rune expenditure of 15 RP per second. Using the RP gen per second we can find the net gain/loss of RP per second to represent a:
plug it all in and solve for t and you get:
(note that even though it looks like t will be negative here, a will also be negative so t will end up positive.)
With t found, we can model the whole of BoS’s damage as damage per tick*the number of ticks per use of BoS. Since it ticks once every second, number of ticks is t+1, because you get a tick at 0 seconds when you first use that ability. This means if BoS lasts for 3 total seconds, you would get ticks at t = 0,1,2, and 3. However you also have to subtract 15 RP from inital RP, as it takes 15 RP to initiate BoS. After all is said and done, they cancel eachother out. You don’t get a tick at 0 seconds, but you don’t spend the 15 rp either, leading to an extra tick on the end. This means t = number of ticks. Now we finally find BoS dmg per second to be:
DPS = (damage per tick * ticks/second)
Finally we will need to account for the RP spent in terms of potential Death Coils. BoS damage isn’t free. Every tick of BoS is worth 15 RP, which is half a Death Coil. This means that per tick, we subtract half a Death Coil (which is .85*AP/2 = .425*AP) from every tick.
And at last we have a full model for the damage gains of BoS:
Necrotic Plague
You cannot refresh NP, and doing anything that would apply NP simply adds a stack. This means that how fast you get to 15 stacks (the cap) is dependent on how fast you are using Blood Boil. So how do we find BB/sec? Well like the average RP generation from the BoS segment, that takes a TON of math and I don’t want to clutter this post with it just yet. There WILL be a blog post down the road showing how the numbers are achieved, but for the purposes of this comparison suffice it to say that the BB/sec for MAX BB use (every B AND D rune) is:
(we’ll call this $BB)
(note: The number of enemies attacking you comes from the RP gained from NP, where you get 2 RP whenever a mob swings at you. We are assuming a 1.5 second swing timer.)
From here, calculating the time until 15 stacks is just like figuring out how long it will take a car to reach 60 miles an hour. The base “acceleration” of NP is one tick (which grows it 1 stack) per 2 seconds. In other words, 0.5 stacks per second. We simply add the stacks/sec acceleration given by the BB/sec model we have above, and we get an acceleration of 0.5+$BB per second.
Now that we have a way to model the growth of NP as a function of haste and multistrike, we can start to piece together the total damage.
First let’s break the growth into 2 parts: the rise to 15 stacks and the total time in 15 stacks. These together will add up to 30 seconds (NPs total duration) so we can put it in an equation like this: (growth time + max stack time) = 30. We can find the growth time by an old-fashioned physics equation. v2=v1+a*t, where v2 is our desired velocity (or in our case stack count) v1 is starting velocity (in our case, 1 stacks) and a is our growth (0.5+$BB) and t is what we want to solve for. t = 14/(.5+$BB). This means we can find the time that NP is at max stacks by taking 30 – 14/(.5+$BB). Let’s solve the easy part first, the max stack damage. All we need to do is find the number of ticks we get at 15 stacks. We already know the average time in seconds NP will be at 15 stacks (30-14/(.5+$BB)), and we know NP ticks every 2 seconds. Therefore the total tick count at 15 stacks is equal to 15-14/(2*(.5+$BB)).
Now we’ve spent quite a lot of time looking at variables. Sometimes it’s nice to come up for air and check to make sure our numbers are realistic. Given my current stats (518 haste and 21.56% multistrike raid buffed) we can figure out using our math above that my theoretical max BB/second is 0.34895, in other words I’m blood boiling an average of once every ~3 seconds. It’s important to remember that this is an average. You will have much high BB/sec if you pop ERW after expending all your runes on BB for a total of 8 BB each 1 GCD apart, but you would also then have a very large downtime of no BB due to no runes. With my average BB/sec, it would take me about 17.67 seconds to reach 15 stacks if I were spamming BB. This is about what we’d expect given that if you used no Blood Boils at all it would take you the full 30 seconds to reach 15 stacks on the final tick.
Recap so far
If this isn’t an accurate impression of you at this point, then it will be. It will be…
Alright let’s take some inventory. We have figured out the theoretical maximum Blood Boils per second as a function of haste and multistrike. Then using that, we found the model for how many ticks we have at full strength (15 stacks) and how many we have leading up to full strength.
Now let’s go further and apply the number of ticks * damage of each tick to get an actual damage result. The 15 stack damage is easy to calculate, since the stack doesn’t change. The formula for NP is (1+0.025AP)*stacks, so the total damage of that part of NP is equal to damage*numbers of ticks = (15+.375*AP)*(15-14/(2*(.5+$BB))). All that’s left is to find the damage of the growth portion of NP. This takes a bit more modeling (sick of it yet?)
We know how many ticks it will take to reach 15 stacks (14/(.5+$BB))/2), We know how fast the stacks grow, and we know how much damage NP will do at a given stack value. The way we are going to model this looks like this: tick1+tick2+tick3+….tickn, where n is the number of ticks that occur at <15 stacks. So for example let’s say that you managed to use Blood Boil every 2 seconds (to make the math cleaner). Tick1 would be at 1 stack, tick2 at 3 stacks, tick3 at 5 stacks…..tick 8 finally hits 15 stacks, so n was 7 because the 8th stack was at full strength.
If you’ve taken any math at a pre-calculus level or above (and remembers it) you should be familiar with the ∑ symbol. It represents a summation operation. So the sum from i=1 to 5 of the function i would be: 1+2+3+4+5. We are going to use a summation to model the ticks <15 stacks, but what do we sum from? And how far do we go? Well we’d like to sum from 1 (1 stack) to our tick count (14/(.5+$BB))/2), however there is a slight problem. Indexing only uses integers. In other words, it doesn’t make sense to count: first, second, third, third and a half-th(?). When you enumerate items, you can’t have a partial item. The number of ticks we have is a theoretical average, and is not an integer, meaning we have to account for the left over bit somewhere else. In other words, if we would get 8.5 ticks as a theoretical average, then we would sum over 8 ticks and add one more tick worth half of what a normal 9th tick would be. We can do this with the floor function “⌊⌋” in our summation, which will round our tick count down for summation.
But what will the function look like that we sum over? How do we know the current stack count? Well we know that each tick is 2 seconds apart, so we can use the stack growth rate to see the average stack count for that tick based on the time since the very first tick. For example tick 8 would happen at 16 seconds, and with a growth of (.5+$BB) it would have a stack of 16*(0.5+$BB)+1 (the +1 is because NP starts at 1 stack, not 0). With all that in place the model for the <15 stack portion, and including the portion for the full strength ticks, we get a full model of NP’s tick damage that looks like this:
That is a bit messy, however it is a complete model of the ticking damage for NP. We don’t need this again until we put it all together.
There’s one final piece that needs to be considered when looking at NP’s damage, and that is the RP gained when mobs swing at you. Observant readers will notice I added a little note when I showed the BB/sec formula, which means all the work up till now has been including the RP gains from NP. Phew… But we still need to acknowledge the damage of actually spending the RP, not just how that RP affects BB/sec.
You get 5 RP whenever you are swung at, and we can assume that a standard mob will swing at you once every 1.5 seconds. This means that for each target you get 10/3 RP per second, or (10/3)*n where n is the number of targets. Death Coil costs 30 RP, so that means you get ((10/3)*n)/30 DC per minute. That’s not the end though, because those Death Coils gave us Blood Tap stacks, which can be used for more runes, which gives us more RP which gives us….
It may sounds like an infinite loop, but I promise it’s not. It diminishes significantly each time. It can be modeled by what’s called a geometric series. The value gets smaller and smaller so quickly, there is a point at which it will never give more than a certain amount of RP. To help visualize this, let’s use the old half-step thought problem. If you were to stand 2 meters away from an object, then half the distance between you and the object every second, how many seconds would it take to reach the object? After the first second you would be 1 meter away, then .5 meters away, then .25 meters, then .125 meters, then .0625 meters… This would go on until the end of time, and you would never reach the object until you reached infinity.
“But there is a set distance between the 2 objects! How can you move forward forever? The total distance covered can NOT exceed 1 meter!! And what the hell does this have to do with Necrotic Plague!?!?” -you
To answer the first point, yes. Let’s take a look at it in the form of a geometric sum. Notice how in the graph below, the curve gets more and more horizontal as you get higher and higher, never quite reaching 2 but always getting closer.
You can see that as you get closer and closer to infinity, you get closer and closer to 2. This is called a convergent series, and it means that if you added up ALL points to infinity in that series, you would get a non-infinite value – in this case 2.
To answer your second question, we are going to use the same principle to figure out the total gain from an infinite series of turning runes into RP, then turning the RP into Death Coils, then turning those into runes, which turns back into RP, so on so forth. When you spend 30 RP on DC, you get 2 charges of BT. This translates to 40% of a rune. Let’s assume for the sake of comparing damage output that you will use that rune on a Blood Boil. So our first “step” has us getting 1 DC and 40% of a BB. When we spend that BB though, we get 10 RP back, so the next chunk has us getting 40% of 10 RP back to spend on 2/15ths of a Death Coil, so on so forth. Let’s look at it on paper.
30 RP = 1 DC + 2/5BB + 4 RP
4 RP = 2/15 DC + 4/75BB + 8/15 RP.
8/15 RP = 4/225 + 8/1125BB + 16/225 RP
so on so forth
Can you see the pattern? Rewritten, this is 1 DC + .4*BB + 2/15*(1 DC + .4*BB) + 4/225*(1 DC + .4*BB)+…..
If we rewrite it again with (1 DC +.4*BB) replaced with x we get x+2/15*x+4/225*x+……
We have a geometric series! YAAAY!!!
Just like the distance problem (which is called “Zora’s paradox” btw) from earlier, we can find the value that a certain amount of RP gives us including ALL the infinite returns of RP and runes by finding the sum we just wrote. Turns out it ends up being a very clean (15/13)*x where x is the amount of rp. If you like this kind of math, then you’ll love the blog post that covers how we found the BB/sec formula.
So in summation (no pun intended) we have the mathematical model of NP for damage and as a function of haste, multistrike, and the number of targets and it is:
Now that we have the total damage, we need to subtract the damage we lose by not having our normal dots. We can’t have both at the same time, so we need to account for their damage when looking at NP.
Where n is the number of targets and $BB is the BB/sec, given by the equation:
Now we just account for this happening once every 30 seconds, and we get the DPS.
Defile
Defile is by far the easiest of the three options to model. There are only a couple of situation factors to think about here: How long the target stays in Defile and how many targets it is hitting. Defile increases its tick damage by 2.5% every tick. So if it’s damage is x, then the 2nd tick will tick for 1.025x, and the tick after that ticking for 1.025(1.025*x). This should seem very familiar to what we just did with Necrotic Plague. It’s a geometric series! YAAAAY!!!!1
This geometric series looks like x + 1.025x + 1.0252*x + 1.0253*x. We already know how to solve geometric series. The only difference is i will go from 0 to 9, representing the 10 ticks of Defile as opposed to from 0 to infinity. This means the total damage for Defile per cast is ∑09(x*1.025i), and on a 30 second timer we can cast it twice a minute, giving us a dps of (1/30)*∑09(x*1.025i) which simplifies to 0.373446*x. Now we just substitute x in for the tick formula for Defile, which is 1+.275*AP and multiply times the number of enemies in the radius of Defile and you get the final DPS of Defile: n*(1/30)*∑09((1+.275*AP)*1.025i) where n is the number of enemies in Defile.
Before we’re done however, we have to subtract DnD damage. At the time of this writing, DnD is almost identical in damage to Blood Boil. In fact, the only time DnD does more damage than Blood Boil is if EVERY tick hits the boss. If the boss moves off dnd for even 1 tick you would have done more damage with BB, but for the sake of this model DnD is still the correct ability to subtract for the rune as we are looking at things in a vacuum where we can always assume every tick hits.
Putting it all together
OOOOKAY. after a TON of math, we now have some math models for each talent choice dependent only on base stats such as AP, haste, and multistrike.
As a recap, here are the models.
Breath of Sindragosa
where n is the number of targets hit by the cone.
Necrotic Plague
Where n is the number of targets and $BB is the average BB/sec, given by the equation:
Defile
where n is the number of targets in Defile’s radius.
Comparing the models
In order to compare the models we made, we need to set up some situations. The possible situations are innumerable, and can be as specific as you need for your situation, but there are some default situations that are commonly considered when looking at dps. Those are things like large aoe packs, small aoe packs (like 3-4 mobs), sustained vs burst damage, high stats vs low stats, etc. I will point out that we are currently unable to model sustained vs burst, as all our calculations involved full duration. In other words, we are locked into a sustained situation because I have been writing this blog post for 3 days, and am frankly tired of modeling Necrotic Plague. Just know that it’s completely possible using the same techniques displayed in this post.
Let’s make 2 simple comparisons: Current gear with high AoE and current gear with 1 target.
In order to apply these comparisons, we just set up values for the variables in play. Let’s use my gear (which is currently only 632. The loot gods have not been kind). As of this post I have 518 haste, 533 multistrike with food, and 5122 AP when flasked. Specifically, let’s find out how many adds it takes for Breath of Sindragosa to do more damage than Defile.
The model is going to look like Breath of Sindragosa DPS > Defile DPS, and treating n in both equations as a free variable. If a value for n greater than 0 exists that satisfies that inequality, then that add count n is the number at which NP will be more sustained DPS versus Defile.
Lets assume you enter BoS with fairly high rp (let’s say 75). Plug in all our values and we find:
BoS DPS = ((5122+(5122/n)*(n-1)-.425*5122)(-(75)/((((13/11)*(60 + 207.9(518/10000+1) + 577.5(518/10000+1)*(.15+533/6600)))/60)-15)))/120 = 746.933-474.243/n
Next calculate Defile’s damage as a function of add count:
Defile DPS = n*(1/30)*(∑09((1+.275*5122)*1.025i)-(1+.12*5211)*10)= 317.618 n
then we plot them and compare!
Notice how the blue curve (Breath of Sindragosa) never surpasses the red line (Defile). This means that with our given stats, Defile will always do more damage, assuming all hits tick. This is what we would expect, since Defile doesn’t have diminishing returns on AoE and BoS has a steep DR, giving it the curved shape.
But what if…
Defile is ONLY based on AP, while BoS is also based on haste and multistrike. How much haste would you need for BoS to surpass Defile on 1 targets? Again assuming you build to 90 RP before using BoS.
We will set up the curves as before, but this time leave haste as an independent variable. Just like before we are looking at the curves and how they interact.
Notice how they intersect at around 2000. This means that after than intersection point (which is actually 1938.92 haste rating) then BoS will do more damage single target than Defile. HOWEVER. It is INCREDIBLY important that we keep in mind that this includes our AP sitting at 5122 and not moving an inch. THIS DOES NOT MEAN THAT YOU SHOULD USE BoS. You should still use Defile any time you are not going to be moving the boss often, even if you had an on use haste trinket to reach this value because this is assuming you also get plenty of RP going into BoS which isn’t always reliable. You will also lose damage from using an on use haste trinket compared to a better itemized trinket as haste is not nearly as good for us as strength, bonus armor, crit, or versatility.
Conclusion
While Defile is still going to be the talent of choice 90% of the time until they balance the tier, it is still worth knowing how to mathematically model these talents should they become balanced. It’s also a fun way to kick off a blood DK blog!
Q.E.D.