Protection Warrior Rotation and Spell Data

I’ve been playing around with rotations to see if i could improve it by deploying the rotational tips that are mentioned in guides and discussions, and thus make the simulation more accurate. Here follows some of the points that I believe would make the rotation better and reflect players better.

Spell Data

As part of doing this I noticed that some specific spells seems to be incorrect.

These points should be prefixed by my limited understanding of AMR simulator and wow simulating as a whole and I apologize if any of these points are incorrect

Vengeance: Revenge

Vengeance: Revenge doesn’t seem to be consumed when casting Revenge.

Here is a log of a simulation where revenge is cast, RevengeFree is consumed, but not Vengeance: Revenge.,

My guess as to why it would not be consumed would be because the trigger is of type “Power Consumed”(which i assume is rage/mana etc.). Maybe it does not trigger when revenge is cast freely (using RevengeFree). Vengeance: Ignore Pain is consumed as expected.

In game, the buff is consumed when you cast revenge, even if it is cast for free.

Ignore Pain

When HasTalent(NeverSurrender), Ignore Pain looks to have an incorrect cap.

the cap is listed as double the normal cap.

baseValue = 3.5 * AbilityDamage(true) * (1 + TotalVersatility)
cap = baseValue * 1.3
if HasTalent(NeverSurrender)
   baseValue = baseValue * (1 + 1 * (1 - HealthPercent))
if HasTalent(NeverSurrender)
   cap = cap * 2

I did some very basic testing and as far as I can tell, the cap work just as you’d expect, being 1.3 of the incresed value. My belief would be that the value should look like

baseValue = 3.5 * AbilityDamage(true) * (1 + TotalVersatility)
cap = baseValue * 1.3
if HasTalent(NeverSurrender)
   baseValue = baseValue * (1 + 1 * (1 - HealthPercent))
if HasTalent(NeverSurrender)
   cap = baseValue * 1.3

Cap information in rotation

As a sidenote I feel like a basic rule that would be applied to the rotation is that Ignore Pain should not be used if it will overcap the absorb, but I can’t figure out if this is possible in the rotation? Is there any method for getting the potential value of casting ignore pain would be, so that you can cast it if the current absorb is under 0.3 of that value?

Crystaline Carapace

The Azerite Trait Crystaline Carapace doesn’t seem to trigger any damage on attacking enemies.

Here is a sim using crystaline carapace and the log shows that it is triggered and applied, but no damage events can be found.

My gues is that the trigger for the damage has a typo

Type Damage Taken
Chance (percent)

if HasBuff(AzeriteCrystallineCarapace) and TriggerIsMelee
   = 1

But the codename for the Buff that is applied is CrystallineCarapaceBuff, AzeriteCrystallineCarapace is the codename for the spell. My guess is that the damage trigger should be

Type Damage Taken
Chance (percent)

if HasBuff(CrystallineCarapaceBuff) and TriggerIsMelee
   = 1


Here are some thoughts and ideas that I’ve mainly picked up from Wowhead and Icy Veins guides.

I haven’t found a great way of evaluating and comparing them with various gearsetups and talents. Using the combination comparison will give you the raw numbers, but it’s hard for me to grasp why some rotations perform better then others without the detailed report. Also when comparing with only one (or a few) gear sets, it seems like there is often situations where some specific ability saves the player at a particular point in the fight(s), resulting in higher TUF. Maxing out the duration of feels like it should balance out some situational outliers but might have other sideeffects i assume.

If there is any way that you recommend to evaluate rotations, please do share them.

Below I provide some examples. I understand that they are very limited and far from all-covering. They are all suggestions.

However, here are some points on some specific abilities and talents.

Ignore Pain

As I mentioned in the spell data secition above. A sensible criteria on ignore pain would be to not cast it if you go over your cap. A simplistic criteria would be to not cast it if you still have ignore pain up. Like this

not HasBuff(IgnorePain) and (SecondsUntilBigHit <= 1.5 or HasBuff(VengeanceIgnorePain))

This seems to have a small improvement in survival and damage.

Being able to change the criteria to allow casting while you have the buff but not overcapping would probably have a very small increase in damage reduction.

Shield Wall

In some situations you end up with quite high death chance and 0 uses of shield wall. Would it make sense to increase the HealthPercent threshold to 0.5 or something maybe? Having no health-threshold will probably “waste” it, but when fighitng big bosses you will not find yourself on 35%. You will be alive or dead.

Last Stand

See Point about Bolster below

Using Last stand when potentially being at 100% health seems to not be very benefical. I belive having some HealthPercent threshold would be sensible. In game I use it a lot like a “Oh shit” button. I tried some simming with using Last Stand when below 35% which turned out to be quite good in Mythic+, decreasing death chance somewhat. This is possible because you take many “small” hits and the only healer will sometimes need some time to throw a heal at you. However it increased Death Chance on Fetid Devourer because you will rarely find yourself at 35%. You’ll usually be dead.

I’m not sure if having a threshold at 50% to try to buffer up when in a tight spot would be benefical in all situations, but just using it when potentially at full health seems unecessary.

Combining thresholds on both Last Stand and Shieldwall:

Generally the very limited cases above would suggest that having thresholds around 60% for both would be useful. I did not attempt to allow overlapping etc.



A optimization when using Punish is to try to keep the Punish debuff up on as many targets as possible. I couldn’t evaluate this as I couldn’t really figure out how to configure it in the rotation. I tried to use multi-DoT to do it, but it didn’t work.

This is probably a very small optimization either way.

Dragons Roar

Dragons roar generates 10 rage, Shield Slam generates 15, in a defensive priority, there is no reason to prioritize Dragon Roar above Shield Slam. In a offensive priority, Dragon Roar would be first.


When bolster is selected, bolster acts as a secondary Shield Block and should not overlap with shield block. The most obvious rule would be to never use shield wall if bolster is up. Alternatively, you could also suggest using bolster whenever shieldblock is on CD. Using last stand more as a filler when Shield Block is on CD would make no differance while Last Stand is used without threshold. If Last Stand was to have a health threshold, used more reactively, it might be another rule to use Last Stand more freely when bolster is selected.

This would be a simple change like so:

  • Rotation - Bolster
    This simply does not allow casting of shield block while Bolster is up.
  • Rotation - Bolster No Overlap
    This also disallows casting of last stand while shield block is up. An approach that somewhat nerfs the usefulness of last stand, effectively using it over shield block for block%.
  • Rotation - Bolster Filler
    This adds a threshold to Last Stand, moving it more towards a defensive cooldown, then adds Last Stand as a filler for when shieldblock is not available.

This seems to be beneficial when playing with Bolster

Booming Voice

If you have the Talent Booming Voice, it is usually recomended to use it as much as possible for the big amount of rage it gives (40). It also helps your damage output somewhat. The AMR Rotation only falls back to demoralizing shout as a plaster defensive cooldown and doesn’t get alot out of Booming voice. My recommendation would be to place Booming Voice above Avatar in the priority since Booming Voice gives higher rage and optimally these spells should be used in conjunction. Since 40 rage is a lot, I think having a criteria of not overcapping rage is a good idea.

This could look something like this.

The possible downside would be in one of the situational outliers, that I mentioned earlier, where cooldowns ends up aligning in a way that demoralizing shout was continously used for a specific hit and reduces the Death Chance.

This will have a lot bigger impact if you have the Azerite Trait Deafening Crash.

If it’s too risky to use Demoralizing Shout so aggresively, the other optimization would be to only use it if ShieldWall or LastStand is off cooldown to not be left without defensive cooldown.

Another addition that could be done would be to modify the criteria for ravager to allow overlapping with Demoralizing Shout since demoralizing shout will be up more (especially with deafening crash) and could result in too low usage of ravager.

Heavy Repercussions

With Heavy Repercussions, you could argue that shield block should be delayed by 2-3 seconds if waiting for a shield slam and also to potentially wait 2-3 seconds with shield slam if waiting for a shield block.

I couldn’t really come up with any generic rule however.

These are my findings in the ways of spells not being accurate and my suggestions to improve the rotation to better reflect the recommended way to play protection warrior.

Combining these rotational changes into a single rotation would look like this. This seems to improve TUF a little at least. I also created a gearing strategy using this rotation. The most interesting thing is that it increases the value of deafening crash alot.

Please do not hesitate to come back with any questions or opinions on my findings.

1 Like

I ran a gearing strategy using the “Raid Tanking” script as well and was comparing BiS with the Mythic+ version. I enabled all loot.

Weirdly, it seems like it suggests the worst rings available. I’m assuming it’s some weird TUF-capping going on. My first thought was that it was trying to do the Reorigination-optimization that has been mentioned in the blog before, but Reorigination array is disabled, and no such trait is selected.

Addon Export

$64;EU;Daggerspine;Davai;Titans Clean Up Crew;9;2;120;25;13:150,7:140,15:425,12:19,11:150;3;.s1;34;2112211;.s2;35;1122121;.s3;36;1223211;.q1;152810s7b1712;5116s5b-180b3606a277639a-10702a1662;34s10b-3601b3247b18b1x154128;115s2b-3285b3411b1b6;85s12b-3409b3257b18b1x0e5941;158s11b-3291b3267b7e-1;975s15b-3259b3259b219;148s9b-3478b3259b219;170s14b-3468b3246b19b204x1;1027s6b-3514b3294b13;825s13b-4758b1466b3277b335;100s1a12111a-13027a-3721;1890s3b-3557b3224b340a16615a-16469;417s16b-3589b3246b342e24;1379s8;.q2;152810s7b1712;5090s3b-180b3608a280407a-508;60s10b-3603b3247b18b1x154128;115s2b-3285b3411b1b6;52s17b-3404b3254b17;25s12b-4762b1476b3268b17b1x0e5941;1141s15b-3276b3259b219;148s9b-3478b3259b219;170s14b-3468b3246b19b204x1;1027s6b-3514b3294b13;825s13b-4758b1466b3277b335;100s1a811a-13027a-3721;981s11b-3602b3263b6e0;915s5b-3254b3254b338;411s16b-3587b3246b342e23;1379s8;.q3;152810s7b1712;3080s10b-190b3264b216;2068s5b-3470b3606a280429a-16442a4450;117s2b-3618b3409b1b6;1053s13;165s15b-3409b3259b219;148s9b-3478b3259b219;19s12b-3493b3267b7e5941;1178s6b-3294b3294b13;825s14b-4758b1466b3277b335;100s1b-344a12273a-13027a-3721a16;981s11b-3258b3263b6e0;909s3b-3224b3224b340a16599a-16469;422s17b-3564b3224b340;5s16b-3594b3254b338e21;1369s8;.inv;3371;0;0;2885;692;1581;0;10038;0;2958;1053;3466;1;5359;20674;248;2;12072;2;0;268;604;3936;11845;6161;0;0;0;0;0;183;6712;4606;9540;0;182;557;223;43;323;975;806;454;270;1591;140;1;1;2294;149;0;2;3;5;0;1268;555;241;3;48;313;0;7;0;2234;3007;99;55;9;2;2;5;312;8;225;3620b752b730b1b1x137371y-3684z7835p1478p248p1611q-1853q242q1802r-2056r1994;390;229b-733b730b4b2x11171y-9005z-2420;2b-737b731b0b6x-3897y9711z-3388p-1990p337p1598q-1937q2054q36r-2087r197r1800;837;1158;1538b324b1819;1b-1819b1647x7891e5439;8b1b171x-2e-11;1124;104;260;2410;287;440b-1819b1819;30b-171b171;1b-171b171;488;1;45;469;1681;3;4;2;1;7;2;2;1;2;35;2;1;151b-2965;187;380;9;1;1;445;323;95;159;47;688;989;3428;180;411;157;202;126;3097;204;430;1;1;2;85;189;253;1;341;4;53;0;11;1;1;1;1;1;1;1;1;0;28;2;1;1;1;1;2;27;3;47b1146b1819;5;10;27;207;86;89;64;325;268;420;37;1;716;1;3;1;0;11;0;1;1;939;0;28b-2118b3274b33a279172a-15064a4329;1913;116b-3287b3254b17;2b-3271b3243b361a11970a-16420a16036a-16045;3b-3604b3608a16429a-508;26b-3608b3606a-2260a-10702a1662;0b-3606b3606;3b-3606b3604a10153a-11816a1658;3b-3604b3608;28b-3603b3247b18b1x2545;4b-3271b3608a4230a-5887;163b-3608b3254b17;3b-4762b1491b3254b17;22b-4762b1476b3268b17b1x0e513;2b-3261b3242b19;6b-3276b3257b18b1x0e0;158b-3291b3267b7e-1;1089b-3274b3274b33a14904a-17857;6b-3307b3267b7;9b-3274b3274b33a15188a-11489a754;13b-3297b3264b216;4b-3475b3259b259a4387a-5887;1b-3533b3274b33a6745a6217a-11304;4b-3302b3263b6;167b-3249b3246b19b204x1;16b-3474b3251b222;159;40;227;0;0;61;184;0;0;0;100;0;1;1;0;79;4;60;1;3;1;86b-3543b3324b39a11960a-13618a1500;71;4;1;0;0;1;0;0;1;837;1;910;1;437b-3343b3303b17;138;177;11;229b-3270b3254b339a10735;3b-3593b3593b11;0b-3604b3254b339a1407a-653a202;3b-3593b3254b338;0b-3592b3593b13a-1371a-11820a-2975;1b-5096b1490b3254b338;144;97;42;39;88b-3587b3246b342e24;1377$



So it seems that when you reach very high itemlevels using a custom Gearing Strategy, something weird is happening.

In theory, if you are ranking gear that is near where you made the custom gearing strategy, it should work reasonably well. Once you get significantly higher or lower (or use different talents, or use things that are significantly tougher or weaker than what you used to make the strategy), custom strategies can start to lose accuracy.

Most of the improvements I have been working on are for the adaptive AMR strategies – I plan to circle back and see if it is possible to bring some of those improvements into custom strategies without making them take forever to run.

Thanks for the detailed post. I won’t be able to go through it until tomorrow, but I’ll certainly check it out.

1 Like

It did go wonky far far above the base gear i created it with (385 vs 355) so that would make sense. I just felt like there was no reason (machine learning or human) that would cause less stats to be preferred. But thanks for the clarification!

I fixed up the vengeance not being consumed by a free revenge. Also looked at Ignore Pain and yeah, looks like the cap is dynamic with your health when you have never surrender. Bloodsport actually gets multiplied by never surrender also. so I made that change too.

I fixed the damage on the carapace trait too - so hilariously low I didn’t even notice!

I’ll have to run more tests on the rotation tweaks to see what will end up being a generic improvement across setups. I’d been meaning to optimizer the rotation for deafening crash some more anyway, since so many people are in love with that trait :wink:


Haha, well to be fair, Deafening Crash is really the only interesting traits for Protection Warriors, so I’d say it’s fair that we want to use it :stuck_out_tongue:

I noticed that the Rotation has been updated! I see that some other criterias was chosen for demo shout which makes sense!

I still feel like the thresholds on last stand and shield wall is too low? I tried some scenarios comparing the new rotation with a copy of the rotation with thresholds of shieldwall set to 60% and last stand at 50% and had a marginal increase in TUF, mostly by reducing Death Chance. I couldn’t really find a scenario where this resulted in a lower TUF.

The most critical problem with the threshold is however that when you have the talent Bolster you will get very little use out of the talent, having a negative impact on negation and chance of survival. The difference is alot more noticable when comparing characters with the Bolster talent.

When using bolster you should also probably use it even more aggresively to keep up that block chance. I’d suggest a separate rule using it as a Shield Block filler.

I obviously assume that these thresholds was set for a reason so I’m just curious as to what situations this proved to be the best…
What scripts is the tanking rotations optimized/benchmarked with? I realise that it’s benchmarked with a multitude of gear levels which I can’t try, but I’m just curious of what scenarios is being prioritized.

I did testing with Bolster - what I was finding that when I had the script set such that the death chance was significant - like 10% or more, holding last stand for 35% or less health was reducing my death chance the most. Like you said, this leads to less uses than would be possible, but, that boost of health when you are low is just so, so good that it overcomes the gain from more uptime on the block. I was using the mythic+ script for most of the testing, and I think I was using Fortified.

When I lower the damage such that my chance to die isn’t very high, a higher health threshold was a tad better. I kept the low health threshold because it seemed to be the best use of Last Stand when you are doing content that is seriously difficult. I’ve found this across a lot of the tank specs: around 35% health or so is the sweet spot for when you want to use abilities that can get your health up fast. Talents like bloodworms for blood that automatically kick in around that health threshold are also insanely good at lowering death chance.

I do need to create a more thorough set of tests for this kind of stuff though - I’d like to run a big batch of sims and vary that health threshold as a parameter and see if I can find an optimal average value across different gear/talent setups. Just haven’t had the time yet!

1 Like

Hmm I was seeing quite serious Deatch Chance reduction when raising the health threshold using my warrior, but when using higher itemlevels that benefit seems to disappear completely. I feel like 32.9% - 22.9% deatch chance should represent a pretty appropiate difficulty?


I also tried adding a seperate rule to use bolster as a filler for shield block but similiarly it only increased survival chance at ~356ilvl but not at ~368.

Interesting… maybe we should use an actual health threshold instead of % health. Seems like the amount of health you have remaining at 50% in 356 gear and 35% in 368 gear is going to be very similar.

That’s interesting! Yea i guess the problem with a absolute health threshold would be very hard to nail down because it’d be dependant on type of content and difficulty.