Tuesday, February 3, 2009

[General, Druid] (UPDATED)The new resistance math (and tanking Sarth3D)

UPDATED: this math appears to be correct for level 80 damage but not level 83. The coefficient against level 83 mobs appears to be not 83*5 = 415, but 500. That makes it harder to reach the 30% barrier, but not insanely so.

First off, congrats to Fire and Blood, who downed Sarth3D for the first time last night! Really nice job by everyone, and a very smooth first kill.

I think in the future I'll cover the strategy we used and the general fight - that sort of thing is kinda fun - but for now I'd like to go over something that's really changed: how resistance works in WotLK. All thanks go to Shamgarr at the EJ forums for his excellent research and testing on this; while I helped with data, he did all the heavy lifting.

In the era of BC land, resistance had a hard cap and only resisted chunks in 25/50/75/100% intervals. There were breakpoints where it was more likely to resist 75% than 50 (and 50 than 25) but if you had maxed out your resistance, you could guarantee a 75% resist, every time. The formula for this was pretty simple:

Damage reduction percentage = 75 % * effective resistance rating / ( caster level * 5 )

If you want 75%, this means that effective resistance rating had to be equal to the caster level (mob level) *5. For the flames of azzinoth, that meant 73*5, or 365.

And if that formula worked in WotLK, that would mean a level 83 mob like Sartharion would need 415. 415 FR doesn't sound like that much compared to 365, does it? 50 more points isn't so bad, and could be easily covered by the Fire Resist fur lining from leatherworking. And 75% FR would certainly make taking 70k fire breaths easier.

Except all of that is totally wrong. WotLK introduced diminishing returns and a much more granular scaling for resistance. Yay, more diminishing return math! This time it's a bit easier to digest. :)

Unlike BC , partial resists come in 10% packets. This means that smaller amounts of resistance are more likely, over time, to be meaningful - so having that 130 Frost Resist Aura on Sapphiron actually helps quite a bit.

The range of resists that you can get are also much smaller. There's no 0/25/50 resist spot any more. Instead, the average resistance is calculated fairly simply:

average resistance (damage prevented) = resistance level / ((special value) + resistance level)

Because this formula uses the resistance level as a divisor, it's naturally diminishing. Which means that at 415 resistance against a level 83 mob, your average damage taken is this:
ADT = 415/(83*5+415) = 50%. (ETA: this is incorrect; against a level 83 mob the 83*5 number is actually 500. So you need 500 resistance to get 50%, and higher values to get to the no less than 30% and 40% resists.

Now, how do we figure out what values we can take? That's the important part, as average damage doesn't tell us what the worst case scenario is. This appears to either use a two-roll system or something very similar to a two-roll system (probably a one-roll, but using this methodology) based on the average damage taken.

For the first roll, use the average damage taken number.
50% of the time, you'll use that number.
25% of the time, you'll use that number - 10%.
25% of the time, you'll use that number + 10%.

Then whatever that number is, figure out a percentage chance based on where it falls between the two 10% barriers, and roll again using the distance from the 10% barriers as the chance.

If you're on a boundary point (like we are with 500) this math is easy:
50% of the time, you'll get to 50%. There's 100% rounding to 50%, so it's always 50%
25% of the time, you'll get to 40%. There's 100% rounding to 40%, so it's always 40%
25% of the time, you'll get to 60%. There's 100% rounding to 60%, so it's always 60%.

If you're not, though, it's a bit trickier. Let's take what my Fire Resistance was against Sartharion last night - 310.

Average Resistance = 310/(500 + 310) = 38.27%

50% of the time, we'll go to 38.27%.
25% of the time, we'll go to 28.27%.
25% of the time, we'll go to 48.27%.

In the 38.27% case, we have a 17.3% chance to get to 30% (rounding down, (10-8.27)/10) and a 82.7% chance to get to 40% (round up, (10-1.73)/10).

In the 28.27% case, we have a 17.3% chance to get to 20% (rounding down, (10-8.27)/10) and a 82.7% chance to get to 30% (round up, (10-1.73)/10).

In the 48.27% case, we have a 17.3% chance to get to 40% (rounding down, (10-8.27)/10) and a 82.7% chance to get to 50% (round up, (10-1.73)/10).

So the total chances for all values are:
20%: 17.3%*25% = 4.32%
30%: 17.3%*50% + 82.7%*25% = 29.3%
40%: 17.3%*25% + 82.7%*50% = 45.7%
50%:82.7%*25% = 20.67%

This also reduces to the following formula: the chance to get a given resist x against a level 83 mob is

Probability (x) = .5 - 2.5* abs(x - (resistance/(500 + resistance)))

and ignore negative probabilities.

That's the basic math, but as a tank that's not what you care about. You care about what the most damage you will take given a specific resistance - and more importantly, what resistance you need to eliminate certain values. And this appears to be pretty easy too:

Resistance Minimum Possible Resist
215 20%
334 30%
500 40%
750 50%

So at 334 resistance, the worst that can happen is that you'll take a 30% hit. The best is that you'll take a 50% hit.

So what does this mean for resistance fights? Well, as you can see you need a huge amount of resistance to get 50% removed from the table and an average resistance of 60% - 750. You need 1167 resistance to get 70% average resistance. And 1500 resistance for an average resistance of 75%, which will still get you hit with 60% resists some of the time.

Practically, this is unobtainable given current itemization patterns. In order to get the same level of resistance that you needed (in theory) for Mother Shahraz and assuming similar gear to the Polar set, you would need at least 15 pieces of armor to get that high. Yikes. On the flip side - hey, it's not likely we'll be facing any resistance fights like Mother any time soon...

For Sarth3D main tanking this has some nice benefits. The maximum breath damage that you can take is 73825 damage, with all the bonuses up and 0 resistance. Assuming protector of the pack and blessing of sanctuary/grace, at 30% resistance you need 44112 effective HP to survive a worst-case breath.

With barkskin, you need 35289 health (or 47053 without the 25% buff).
With Survival Instincts you need 45243 health without the 25% buff).
With nightmare seed and a mighty fire protect potion, you need 50549 health.

And the awesome thing is, this is totally doable with current gear. It's easier with being a leatherworker, but it's not impossible for others to reach 334 FR. And if you can do that, it means you can survive the breaths by using your own cooldowns for a while and not rely on any external cooldown, making the fight as easy for druids as it is for DKs.

I'll go into the gearing choices for Sarth3D in a later post. :)


Torosso said...

Excellent stuff.

We are going for our first serious attempts at Sarth3D this week. Minimum of 20% (178FR) is really easy to get and should be the first step.

30% is ideal though and means that you can survive without help for a very long time.

Shamad said...

25man Sarth3D really isn't an issue, you've got plenty of raidslots, most likely a few priests and paladins, so getting cooldowns is not the issue if your raids up to scrap.

This does rekindle some hope for my 10man group that was shelved after 3.0.8 as I no longer could MT it. Not quite so easy to fit those external rotations into a 10man setting. Then again, we're allready looking at gearing the DK to MT it, so it's +-0 for us.

Mitch said...

Grats on your kill!

Anonymous said...

So.... what?

I don't understand that last paragraph, barkskin will allow you to get away with less health, but adding in resistance pots will require that you have more health?

My guild has done Sarth+1D now twice, and we're rabid to try it with +2D. The warrior we usually have MT Sarth is suggesting I step in instead because of my increased health (42k fully buffed).

Basically, I'm now completely confused and not so sure I'll ever be able to do it :(

Flyv said...

My guildie and I did some research on enchants for fire resist, here's what I came up with:

20 Cloak: +20 FR vs +22 Agility. 200g to switch.
60 Bracers: +60 FR vs +90 sta. 130g to switch.
50 Flask: +50 FR vs. +35 FR and +18all stats. 0g to switch.
20 Legs: +20 FR vs. +55 sta/+22 agi. ?? to switch (arcanum)
25 Head: +25 FR/+30 sta vs. +20 def/+37 sta. 280g to switch.

If you do everything but the legs you get 155 from the enchants, which along with 130 from a paladin puts you at 285.

Shame there's no WotLK fire resist gear. I looked at wearing some level 70 stuff but you lose too much stamina.

Kalon said...

Torosso - thanks for coming by. And yeah, 178 FR is basically trivial and requires almost no real sacrifices to gear (the arcanum + cloak enchant would do it with an FR aura) and makes the fight far easier to heal, especially on Shadron's breaths without Vesperon.

Shamad - thanks as always. I agree that you can do it with external cooldowns, but one of the reasons that a DK is so invaluable for this fight is that they can do it without that requirement. The disadvantage is that it's a bit harder to heal them during the non-Vesperon cooldown parts. With a druid using this strategy you get the best of all worlds. And I do think that adding a 'use your cooldown now' part to this fight makes it that much harder. If you can avoid doing that and take less damage on a specialized gear fight anyway, why wouldn't you?

The other advantage is that in 10-man, you can have a druid tank Sarth without any cooldowns entirely. That's pretty hot.

Mitch - thanks!

SecretAgentCat - thanks for coming by too. :) I wrote that part a bit fast, but the basic idea is that if you want to use those cooldowns to save yourself by their lonesome (IE, use only survival instincts to live, or use only barkskin to live) you need a specific base HP value. If you don't have that much that cooldown by itself won't save you. So for using barkskin and having 277 FR or more, you need at least 47k health before the encounter starts. If you want to use survival instincts to survive and have 277 FR, you need 45.2k. And if you want to use a fire protection pot and a nightmare seed by themselves, you need 50.5k. As for taking Sarth2D, 42k should be fine. It's a bit on the low end in general but it's going to be better than most other tanks going in, and it really shouldn't be that much of an issue. You'll take a few big hits but honestly the damage is nothing like what you take with 3D. Make sure to kill Shadron if you're going to kill any one of them. Well...it depends. Killing Shadron makes for a much easier fight, but can teach bad habits when trying 3D.

Flyv - thanks for coming by, and nice post. Yeah, getting to 277 really isn't hard. I chose to use a flask of chromatic wonder, but there are a lot of options. Also don't discount the legs. They lose a fair amount of stamina, but have a ton of FR. They're actually one of the better tradeoffs. A blastguard leg set can be even better for this, since you can gem it with 3 24 stam bits. I wouldn't switch the leg enchant though; not enough of a gain.

Anonymous said...

I always just lurk in your blog, and I do enjoy it. I had a question and following the math over at EJ made my head wanna explode.
I see the distribution for:
104 10%
178 20%
277 30%

I just wanted to clarify that points spent in between the values still give benefit, but just aren't enough to raise to the next minimum resisted value?

So being 1 point less of the above values would be huge, but being 1 point over the value is very minor?

That make sense and does it seem to be correct?

Anonymous said...

"For Sarth3D main tanking this has some nice benefits. The maximum breath damage that you can take is 73825 damage, with all the bonuses up and 0 resistance. Assuming protector of the pack and blessing of sanctuary/grace, at 30% resistance you need 44112 effective HP to survive a worst-case breath."

44112 HP before or after the pull

Kalon said...

Anon1 - yep, if you have points between the breakpoints in resist they'll still benefit. Each point between two breakpoints makes it more likely that you'll resist more.
For example, if you have 104 resist you have a 25% chance for a 10%, 50% for 20 and 25% for 30. Bump that up to 105, and you have a 24% for a 10, 49% for a 20, 25% for a 30 and a small chance for a 40% resist.

And at 103, you have a small chance for a 0 resist.

The breakpoints are what you need for minimum resistance. Anything else is undependable but makes you take less, making it similar to avoidance. It's good, but don't go insane if you can't stack it.

Anon2 - 44112 health after the pull, or 58816 before. In practice this is unobtainable, so you need to use some cooldowns - but it's close enough to what you can have that it's doable with personal cooldowns.

Mugio said...

What about the Effulgent Skyflare Diamond as your meta? That should buy you 2% more spell damage reduction. You might as well use that meta on the same helm that you'll be putting your Fire Resist enchant on.

Kalon said...

Mugio - that's an answer for another post that's coming, but the quickie version is that it's bugged and instead of giving another 2% reduction, it gives 2% more spell resistance. So if you have 277 FR, it gives...4 FR.

Shamad said...

I do see your reasoning for using a druid on 25man without external cooldowns, but personally I'll be keeping this info from the guild until we get around to gearing up the DK, since tbh we need what challenge the game can give to keep us alert and awake until Ulduar comes ;) Better off practising healer-tank coordination on farm content than when we're rushing to complete Ulduar to maintain a server top3 ranking and all that.

Anonymous said...

What about Gift of the Wild That is 37 Resist? I don't see that listed.

Anonymous said...

Hi Kalon,

Just wondering about the maths used here. You say that the worst case breath is 73825 damage, however with 30% resistance + 12% mitigation via PotP and 3% BoSanc/Grace that adds up to 45% damage mitigation on the breath. 55% of 73825 is 40603.75, assuming that the mitigation isn't additive in percentage, that puts the damage at 51677 after resistance and 45476 after PotP and 44566 after BoSanc/Grace. I am a little confused as to how the math works out here. If you could clarify a bit on them it would really help a lot.


Anonymous said...

Could the constant for level 83 resist calculation possibly be 498, rather than 500? Not that it makes much difference - even if it is, that would make the cutoff 125/214/332/498, a difference of 0-2.

(Obviously, 498 = 83 * 6)

Anonymous said...
This comment has been removed by a blog administrator.