Some numbers on Redoubt and Tank Survival

Warning: Theorycraft inside.

Moderators: Fridmarr, Worldie, Aergis, theckhd

Some numbers on Redoubt and Tank Survival

Postby Arcand » Wed Mar 21, 2007 12:32 pm

Something I posted a while ago on my guild forum. The comparison of these numbers against Shield Block is left as an exercise for the student. :)

In case anybody else is obsessed with tank performance analysis, I thought I'd post this. I was supervising a test this morning so I had three hours stuck in a classroom with my laptop. So using Excel and a lot of random numbers, I made a simulator that throws attacks at a notional tankadin and keeps track of when Redoubt refreshes and how long is left on its timer.

Defense hurts Redoubt a little bit, since misses, dodges and parries aren't hits so they have no chance to trigger it - so I ran the tests with 30%, 35% and 40% avoidance to see what the difference was.

Enemy attack speed is also a major factor. An enemy that attacks every 10.1 seconds would never hit you with Redoubt up, and the performance gets better from there.

Anyway, the data:
Attack speed 1.00, 30% avoidance - Redoubt up against 51.6% of attacks
Attack speed 1.00, 35% avoidance - Redoubt up against 48.2% of attacks
Attack speed 1.00, 40% avoidance - Redoubt up against 45.8% of attacks
Attack speed 1.50, 30% avoidance - Redoubt up against 39.5% of attacks
Attack speed 1.50, 35% avoidance - Redoubt up against 35.8% of attacks
Attack speed 1.50, 40% avoidance - Redoubt up against 35.7% of attacks
Attack speed 2.00, 30% avoidance - Redoubt up against 30.0% of attacks
Attack speed 2.00, 35% avoidance - Redoubt up against 28.4% of attacks
Attack speed 2.00, 40% avoidance - Redoubt up against 26.3% of attacks
Attack speed 3.00, 30% avoidance - Redoubt up against 24.3% of attacks
Attack speed 3.00, 35% avoidance - Redoubt up against 23.7% of attacks
Attack speed 3.00, 40% avoidance - Redoubt up against 21.9% of attacks
The standard deviations were generally 4% or less. I was doing 2000 seconds per batch, and 28 batches per trial, so even the speed 3.00 trials involved over 18,000 attacks each. Not surprisingly, gaining an additional 10% avoidance appears to cut Redoubt's effectiveness by about 10%.

Short Version:
Against one bad guy, Redoubt will be up against roughly 30% of incoming attacks - closer to 50% if he attacks fast, closer to 20% if he attacks slow. Over a long period, Redoubt is equivalent to about a 9% increase to your block rate (more like 15% against fast attacks, more like 6% against slow).


I think I still have the Excel sheet which generated those numbers, if anyone wants to play around with it. And I was about level 62 when I did this, which is why I used such lame avoidance numbers...
Last edited by Arcand on Wed Mar 21, 2007 3:21 pm, edited 1 time in total.
Arcand
Moderator
 
Posts: 4525
Joined: Fri Mar 02, 2007 11:15 am

Postby Lore » Wed Mar 21, 2007 12:42 pm

I am curious - it seems like the 5-block limit on Redoubt would not allow it to be up for more attacks on a fast-hitting mob than a slow-hitting one. Did you factor the 5-block limit into your calculations?
User avatar
Lore
Global Mod
 
Posts: 7757
Joined: Wed Mar 21, 2007 11:52 am

Dazzling them with brilliance isn't working

Postby Arcand » Wed Mar 21, 2007 12:50 pm

Embarrassingly, I wasn't counting Redoubt charges when I generated those numbers.

Here's the version which does track Redoubt charges...as well as a few other things:

http://www.29tharmor.com/WoW/TankSim_101.xls

A is the "system clock".
B checks if enough time as passed for another boss attack; 1 means yes.
C is the boss's attack roll, which is only used if B=1.
D checks if the attack was avoided (missed, parried or dodged).
E is the roll to see if Redoubt procs.
F determines if a proc occurs. That requires that an attack is inbound, it wasn't avoided and the roll in E was 10 or less.
G is the Redoubt timer; sits at zero until a proc occurs then jumps to 10 and counts down.
H is the tank's chance to block after any modifiers from Redoubt.
I is the tank's chance to block after any modifiers from Holy Shield.
J is a random number and I don't remember what it's there for. :shock:
K checks the attack roll to see if a block occurred.
L is the number of Redoubt charges remaining. Because I have limited tolerance for Excel's brand of nested AND statement, I allowed this number to go negative.
M counts how long it's been since the last Holy Shield cast; I set it to go off every 11 seconds because of global cooldowns and stuff.
N checks if it's time for another Holy Shield cast.
O counts Holy Shield charges.
P checks if you've been critted.
Q checks if you've been crushed.
R checks if you've been hit.
S is a random damage roll; I set it so that the boss does anywhere from 80% to 120% of his average damage.
T is the damage the tank takes if a block occurred.
U is the damage the tank takes if a crit occurred.
V is the damage the tank takes if a crush occurred.
W checks if Ardent Defender is active.
X determines the final damage after modifications from Ardent Defender.
Y is the tank's health after damage is applied.
Z is a timer for healer #1.
AA is the healing done by healer #1. The next ten columns are separate timers and healing for another five healers; you can put in HoT ticks, Flash spam, GHeal spam or whatever. This part isn't as sophisticated as it should be.
AL is the tank's health after damage and healing, assuming the damage didn't kill him.
AM is a count of how long the tank has survived. When the tank's health hits zero, AN 'freezes' the final time, telling you the tank's time-to-death.

The parameters in AR and onward are the stats for the boss, the tank's numbers and the behavior for the healers; each healer can be given a casting time, base heal amount and a healing crit rate.

I want to put in a mana-consumption counter for the healers, but it hasn't happened yet.
Last edited by Arcand on Thu Mar 22, 2007 12:03 pm, edited 1 time in total.
Arcand
Moderator
 
Posts: 4525
Joined: Fri Mar 02, 2007 11:15 am

Postby Bluemania » Thu Mar 22, 2007 6:41 am

Great post, i encourage you to continue :)
Image
Bluemania
 
Posts: 36
Joined: Wed Mar 14, 2007 6:03 pm

Postby Endure » Thu Mar 22, 2007 6:50 am

M counts how long it's been since the last Holy Shield cast; I set it to go off every 11 seconds because of global cooldowns and stuff.

Can you make 11 seconds a variable? I know I for one make sure to keep HS up, and will avoid GCD overlapping.
Endure of Crimson
http://www.crimson-guild.org
0/49/12
Endure
 
Posts: 35
Joined: Wed Mar 14, 2007 3:39 pm

Postby Arcand » Thu Mar 22, 2007 10:21 am

Now uploading a new version where the holy shield recast time is on the front end. If you give HS "cooldown priority", you can now reflect it by setting the number to 10.0 or 10.1, something like that.

The new version is the one linked above - TankSim_101.xls.

By the way - to check in this simulator how often Redoubt is up, you'd need to do something like this:

Find (or create) a couple free columns someplace.

Count the boss's total number of attacks using =COUNT(B2:B6021)

Make a column that contains a 1 whenever an attack occurs and Redoubt is up. =IF(AND(B2,G2,L2),1,0) should do it, I think.

Total up the number of Redoubt-ed attacks using =COUNT(??2:??6021) where ?? is the column where you put that IF statement.

Divide the second count by the first count, and multiply by 100 if you like percentages better than 0-1 frequencies.
Last edited by Arcand on Thu Mar 22, 2007 12:09 pm, edited 2 times in total.
Arcand
Moderator
 
Posts: 4525
Joined: Fri Mar 02, 2007 11:15 am

Postby Catarine » Thu Mar 22, 2007 11:37 am

Would you mind posting it in .csv format? It would be a much smaller file.
User avatar
Catarine
 
Posts: 34
Joined: Fri Feb 23, 2007 12:39 pm

Postby Arcand » Thu Mar 22, 2007 12:28 pm

Catarine wrote:Would you mind posting it in .csv format? It would be a much smaller file.


http://www.29tharmor.com/WoW/Engine_101.csv
http://www.29tharmor.com/WoW/Interface_101.csv


Done. Create a page called Engine and a page called Interface; drop Engine_101.csv and Interface_101.csv onto the corresponding pages and that should do it.

Things I learned about Excel while working on this project, which maybe some other people didn't realize:

If the random numbers aren't working for you, click Tools > Add-Ins and check the Analysis Toolpak, then OK.

Hitting F9 forces a recompute of every cell in the workbook, including the generation of a fresh batch of random numbers...so you can run multiple trials by mashing F9.
Last edited by Arcand on Fri Mar 23, 2007 12:43 pm, edited 1 time in total.
Arcand
Moderator
 
Posts: 4525
Joined: Fri Mar 02, 2007 11:15 am

Postby Catarine » Thu Mar 22, 2007 1:02 pm

Awesome, thanks!

EDIT: Actually, I just get the values doing it that way. I'll suck it up and dl the real deal. :)
User avatar
Catarine
 
Posts: 34
Joined: Fri Feb 23, 2007 12:39 pm

Postby Catarine » Thu Mar 22, 2007 3:11 pm

I've been tinkering with this. Doesn't this assume a two-roll system? It appears you have one roll to see if the attack is avoided (miss/parry/dodge) and then if that fails, a second roll to see if the attack is blocked. Most mathletes attribute a one-roll system to WOW.

EDIT: Very nice stuff, though :D. I learned a bunch of excel tricks working with your sheet.
User avatar
Catarine
 
Posts: 34
Joined: Fri Feb 23, 2007 12:39 pm

Postby Arcand » Thu Mar 22, 2007 3:40 pm

Nope, it's one roll; I just test that roll multiple times depending on what I'm interested in at a given moment. Here's the pseudocode for each column:

A (the swing timer): Did the boss attack in the last row? If so, he's now 0.1 seconds into his next swing. If not add 0.1 to the count and that's how far he is into his next swing.

B: Has the time since last attack become equal to the boss's speed? If so, it's time to attack, return a 1. If not, return a 0.

C: The attack roll.

D (checks if attack was 'avoided' - missed, parried or dodged): Was the roll less than or equal to the avoidance chance? If so, return a 1. If not, return a 0.

E: A roll to see if Redoubt triggers, used in F.

F: If an attack is incoming, and it wasn't avoided, and the roll in F low enough to trigger Redoubt (10 or less for most of us), then Redoubt just triggered; return 1. Otherwise return 0.

G (the Redoubt timer): If Redoubt just procced, the timer is at 10 seconds; otherwise, if the timer is running, knock 0.1 seconds off it. If it's sitting at 0, leave it there.

H: Start with the base block chance, then add 30% to it if the Redoubt timer is running AND if Redoubt still has charges left.

I: Take the block chance from H, add another 30% to it if the Holy Shield timer is running AND if Holy Shield still has charges left.

I think this (K) is the part that made you think I was using two rolls - hopefully this clarifies what I'm really doing.

K: If the attack roll was less than (Avoidance chance + Block chance), but the attack wasn't avoided, then it must be blocked; return 1. Otherwise return 0.

So if your avoidance is 48 and your block chance is 47, say, and the attack roll is a 58, it goes like this:

D says was the roll less than 48? No. So it wasn't avoided.
K says was the roll less than (48+47=)95? Yes. So it was blocked or avoided. But D returned 0 so it wasn't avoided, so it must have been blocked.

My major was digital logic design, so it pains me to use clunky structures like this...but at the time it was the cleanest approach I could think of. :(


L: If the attack was blocked, knock a charge off Redoubt.

M: If Holy Shield was just cast, then it's been 0.1 seconds since it happened. If not, add 0.1 seconds to the "elapsed time since last cast".

N: Has it been 10.1 seconds (or whatever the recast time is)? If so, return 1; if not, return 0.

O (Holy Shield charge counter): If Holy Shield was just cast, then it has 4 charges left. If a block just occurred, knock 1 off the total.

P (Crit check): If the attack roll was lower than (Avoid chance + Block chance + Crit chance), but it wasn't avoided and it wasn't blocked, then it was a crit; return 1. Otherwise, return 0.

Q (Crush check): If the attack roll was lower than (Avoid chance + Block chance + Crit chance + Crush chance), but it wasn't avoided and it wasn't blocked and it wasn't a crit, then it was a crush; return 1. Otherwise return 0.

R (Hit check): If there was an attack and it wasn't avoided, blocked, critical or crushing, it was an ordinary hit; return 1. Otherwise, return 0.

S: If it's time for a boss attack, pick a number between 0.8 and 1.2 and multiply the boss's base damage by that, then multiply by 100% minus the tank's mitigation and knock off any innate damage reduction (6% for Righteous Defense, for most of us).

T: If the attack was blocked, do all that stuff in S but then subtract the Block Value.

U: If the attack was a crit, do all that stuff in S and then double the result.

V: If the attack was a crush, do all that stuff in S and then multiply the result by 1.5.

W: Is the tank's health less than 0.2 x max? If so, Ardent Defender is active; return 1. Otherwise return 0.

X: If W says 1, reduce the damage by whatever rank of Ardent Defender the tank has.

Y: Take the tank's health from the previous row, subtract any damage done.

(( Time to go home, so I'm bolting. If anything else in here doesn't make sense please let me know; I'll either explain what I was doing or blanch in horror and quickly patch up the mistake you've discovered. ))
Arcand
Moderator
 
Posts: 4525
Joined: Fri Mar 02, 2007 11:15 am

Postby Catarine » Fri Mar 23, 2007 12:26 pm

Oops, it was the J column, which I see from your first post (and from further digging) is not used for anything. Great work.
User avatar
Catarine
 
Posts: 34
Joined: Fri Feb 23, 2007 12:39 pm

Postby hiro » Wed May 02, 2007 9:51 am

Endure wrote:M counts how long it's been since the last Holy Shield cast; I set it to go off every 11 seconds because of global cooldowns and stuff.

Can you make 11 seconds a variable? I know I for one make sure to keep HS up, and will avoid GCD overlapping.


Can I please get a combatlog from a fight you feel you did a good job on HS?

I have this theory that HS coverage is a lot worse than we suspect due to the cooldown, and I'd love to see the numbers from such an established and experienced pally tank.

I can provide FTP hosting or e-mail access if need be.
hiro
 
Posts: 14
Joined: Mon Apr 16, 2007 5:57 am

Postby Arcand » Wed May 02, 2007 10:48 am

I've got a log from this past weekend's wipes on the Curator (he completely owns us) where, although I'm not sure my HS usage was scintillating, my mental checklist before the fight included "this week I will focus on preventing crushes by keeping HS up".

On both attempts (all three attempts? I forget) I stayed up, happily tanking away, until the Astral Flares had gutted the raid and we got the DIAGP (die in a good place) order.

I can make that available when I go to lunch, in about an hour and a half.

Edit: Okay, I think I got it. Try this:

http://www.29tharmor.com/WoW/Curator_02_04.txt
Last edited by Arcand on Wed May 02, 2007 2:39 pm, edited 2 times in total.
Arcand
Moderator
 
Posts: 4525
Joined: Fri Mar 02, 2007 11:15 am

Postby Arcand » Wed May 02, 2007 12:42 pm

FTP hates me, or this computer, or both - can't get the file up right now. I'll try again later so you can check my math.

From our first attempt, here are the times for every instance of "You gain Holy Shield" and the intervals I calculated:

8:25.140 12.016
8:37.156 10.500
8:47.656 10.578
8:58.234 12.687
9:10.921 10.438
9:21.359 10.453
9:31.812 10.453
9:42.265

Seven activations means I had 70 seconds of Holy Shield over a period of
77.125 seconds. (70/77.125 = uncrushable 90.76% of the time.)

I got crushed twice. The first one happens after a judgement, the second seems to be bad cooldown management; I cast Consecration and the global cooldown delays my HS cast.
Last edited by Arcand on Wed May 02, 2007 2:46 pm, edited 1 time in total.
Arcand
Moderator
 
Posts: 4525
Joined: Fri Mar 02, 2007 11:15 am

Next

Return to Advanced Theorycraft and Calculations

Who is online

Users browsing this forum: Google [Bot] and 1 guest

Who is online

In total there are 2 users online :: 1 registered, 0 hidden and 1 guest (based on users active over the past 5 minutes)
Most users ever online was 380 on Tue Oct 14, 2008 6:28 pm

Users browsing this forum: Google [Bot] and 1 guest