Cogspark Works · Rotation
Fury Warrior
The priority list SimulationCraft plays this spec with · engine build 20261019-1860cd1-w8a2c73d · game data 12.1.5.70448
§1How to read this
A rotation in SimulationCraft is a priority list, not a sequence. Every time the character can act, the sim starts at the top of The main loop and does the first line whose conditions hold. Lower lines only happen when nothing above them fits.
- The page shows the list as a decision tree: set what you know about the fight and your talents, and it lights the lists the sim checks, in order.
- Cast lines use the ability. Hover, focus or tap an icon or a name for its tooltip.
- Go through another list: its lines are checked in order; when none of them fits, the sim comes back and carries on with the next line here.
- Switch to another list: the rest of this list is skipped and the choice is made from that list alone.
- Helpers are values the list works out on the spot, such as “are we holding a cooldown”. Setting one takes no time and the list carries on. The tree works out the ones your situation settles.
The list is written to perform well in the sim, not to be the only right way to play. Every line keeps its original simc text under the simc toggle at its right, and the list author’s note where there is one.
§2Decision tree
Set what you know. The tree lights the lists the sim checks, top to bottom; in each list it presses the first ability whose conditions hold and that is ready. Readiness (cooldowns, resources) isn’t in the list, so a lit ability is the first one allowed, not a promise it is cast.
- The main loop
- Trinkets
- Helpers
- Slayer (maybe)
- Slayer AoE (maybe)
- Thane (maybe)
- Thane AoE (maybe)
Before the pull, done once before the fight starts (16 steps)
Before the pull16 lines
- Record your stats before the pull (sim bookkeeping)Snapshot raid buffed stats before combat begins and pre-potting is done.
simc
snapshot_stats - Cast Berserker Stance
simc
berserker_stance,toggle=on - Set trinket 1 exclude to true when the following holds, otherwise falsetrinket 1 is Algethar Puzzle Box
simc
variable,name=trinket_1_exclude,value=trinket.1.is.algethar_puzzle_box - Set trinket 2 exclude to true when the following holds, otherwise falsetrinket 2 is Algethar Puzzle Box
simc
variable,name=trinket_2_exclude,value=trinket.2.is.algethar_puzzle_box - Set trinket 1 buffs to true when the following holds, otherwise falsetrinket 1 has an on-use effect that grants a stat buff
simc
variable,name=trinket_1_buffs,value=trinket.1.has_use_buff - Set trinket 2 buffs to true when the following holds, otherwise falsetrinket 2 has an on-use effect that grants a stat buff
simc
variable,name=trinket_2_buffs,value=trinket.2.has_use_buff - Set trinket 1 duration to 0 when the following holds, otherwise to trinket 1's stat buff's durationnever
simc
variable,name=trinket_1_duration,op=setif,value=0,value_else=trinket.1.proc.any_dps.duration,condition=0 - Set trinket 2 duration to 0 when the following holds, otherwise to trinket 2's stat buff's durationnever
simc
variable,name=trinket_2_duration,op=setif,value=0,value_else=trinket.2.proc.any_dps.duration,condition=0 - Set trinket 1 high value to 2 when the following holds, otherwise to 1trinket 1 is Treacherous Transmitter
simc
variable,name=trinket_1_high_value,op=setif,value=2,value_else=1,condition=trinket.1.is.treacherous_transmitter - Set trinket 2 high value to 2 when the following holds, otherwise to 1trinket 2 is Treacherous Transmitter
simc
variable,name=trinket_2_high_value,op=setif,value=2,value_else=1,condition=trinket.2.is.treacherous_transmitter - Set trinket 1 sync to 1 when the following holds, otherwise to 0.5all of these:
- trinket 1 buffs is true
- you have Recklessness talented
- the remainder of trinket 1's cooldown divided by Recklessness's cooldown is 0
simc
variable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_1_buffs&talent.recklessness&trinket.1.cooldown.duration%%cooldown.recklessness.duration=0 - Set trinket 2 sync to 1 when the following holds, otherwise to 0.5all of these:
- trinket 2 buffs is true
- you have Recklessness talented
- the remainder of trinket 2's cooldown divided by Recklessness's cooldown is 0
simc
variable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_2_buffs&talent.recklessness&trinket.2.cooldown.duration%%cooldown.recklessness.duration=0 - Set trinket priority to 2 when the following holds, otherwise to 1any of these:
- all of these:
- trinket 1 buffs is false
- trinket 2 buffs is true
- any of these:
- trinket 2 has a cooldown
- trinket 1 has no cooldown
- all of these:
- trinket 2 buffs is true
- trinket 2's cooldown divided by trinket 2 duration times (1.5 plus (1 if trinket 2 can grant Strength, else 0)) times trinket 2 sync times trinket 2 high value times (1 plus ((trinket 2's item level minus trinket 1's item level) divided by 100)) is more than trinket 1's cooldown divided by trinket 1 duration times (1.5 plus (1 if trinket 1 can grant Strength, else 0)) times trinket 1 sync times trinket 1 high value times (1 plus ((trinket 1's item level minus trinket 2's item level) divided by 100))
simc
variable,name=trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_1_buffs&variable.trinket_2_buffs&(trinket.2.has_cooldown|!trinket.1.has_cooldown)|variable.trinket_2_buffs&((trinket.2.cooldown.duration%variable.trinket_2_duration)*(1.5+trinket.2.has_buff.strength)*(variable.trinket_2_sync)*(variable.trinket_2_high_value)*(1+((trinket.2.ilvl-trinket.1.ilvl)%100)))>((trinket.1.cooldown.duration%variable.trinket_1_duration)*(1.5+trinket.1.has_buff.strength)*(variable.trinket_1_sync)*(variable.trinket_1_high_value)*(1+((trinket.1.ilvl-trinket.2.ilvl)%100))) - all of these:
- Set damage trinket priority to 2 when the following holds, otherwise to 1all of these:
- trinket 1 buffs is false
- trinket 2 buffs is false
- trinket 2's item level is at least trinket 1's item level
simc
variable,name=damage_trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_1_buffs&!variable.trinket_2_buffs&trinket.2.ilvl>=trinket.1.ilvl - Set trinket 1 manual to true when the following holds, otherwise falsetrinket 1 is Algethar Puzzle Box
simc
variable,name=trinket_1_manual,value=trinket.1.is.algethar_puzzle_box - Set trinket 1 manual to true when the following holds, otherwise falsetrinket 2 is Algethar Puzzle Box
simc
variable,name=trinket_1_manual,value=trinket.2.is.algethar_puzzle_box
The main loop18 lines
- Start auto-attacking
simc
auto_attack - Cast Charge if at most 0.5 s into the fight or the distance you still have to move is more than 5
simc
charge,if=time<=0.5|movement.distance>5 - Cast Heroic Leap if the next movement phase's farthest distance is more than 25 and the next movement phase starts in more than 45 s (or never)
simc
heroic_leap,if=(raid_event.movement.distance>25&raid_event.movement.in>45) - Drink a potion if the target lives more than 300 s longer or Recklessness is active or the target dies within 25 s
simc
potion,if=target.time_to_die>300|buff.recklessness.up|target.time_to_die<25 - Cast Pummel if the target is casting
simc
pummel,if=target.debuff.casting.react go through Trinkets, then carry on below if nothing there fits
simc
call_action_list,name=trinketsTrinkets5 lines
- Use Algethar Puzzle Box if Recklessness comes off cooldown within 2 s
simc
use_item,name=algethar_puzzle_box,if=cooldown.recklessness.remains<2 - Use your trinket 1 if trinket 1 buffs is true and (trinket priority is 1 or trinket 2 buffs is false or trinket 2 has no cooldown) and Recklessness is activeTrinkets
simc
use_item,slot=trinket1,if=variable.trinket_1_buffs&(variable.trinket_priority=1|!variable.trinket_2_buffs|!trinket.2.has_cooldown)&(buff.recklessness.up) - Use your trinket 2 if trinket 2 buffs is true and (trinket priority is 2 or trinket 1 buffs is false or trinket 1 has no cooldown) and Recklessness is active
simc
use_item,slot=trinket2,if=variable.trinket_2_buffs&(variable.trinket_priority=2|!variable.trinket_1_buffs|!trinket.1.has_cooldown)&(buff.recklessness.up) - Use your trinket 1 if trinket 1 buffs is false and (damage trinket priority is 1 or trinket 2 buffs is false or trinket 2 has no cooldown)
simc
use_item,slot=trinket1,if=!variable.trinket_1_buffs&(variable.damage_trinket_priority=1|!variable.trinket_2_buffs|!trinket.2.has_cooldown) - Use your trinket 2 if trinket 2 buffs is false and (damage trinket priority is 2 or trinket 1 buffs is false or trinket 1 has no cooldown)
simc
use_item,slot=trinket2,if=!variable.trinket_2_buffs&(variable.damage_trinket_priority=2|!variable.trinket_1_buffs|!trinket.1.has_cooldown)
go through Helpers, then carry on below if nothing there fits
simc
call_action_list,name=variablesHelpers4 lines
- Set st planning to true when the following holds, otherwise falseall of these:Variables
- there is a single enemy
- any of these:
- the next add wave starts in more than 15 s (or never)
- the fight has no add waves
simc
variable,name=st_planning,value=active_enemies=1&(raid_event.adds.in>15|!raid_event.adds.exists) - Set adds remain to true when the following holds, otherwise falseall of these:
- there are 2 or more enemies
- any of these:
- the fight has no add waves
- all of these:
- the fight has add waves
- the time left in the current add wave is more than 5 s
simc
variable,name=adds_remain,value=active_enemies>=2&(!raid_event.adds.exists|raid_event.adds.exists&raid_event.adds.remains>5) - Set execute phase to true when the following holds, otherwise falseany of these:
- all of these:
- you have Massacre talented
- the target is below 35% health
- the target is below 20% health
simc
variable,name=execute_phase,value=(talent.massacre.enabled&target.health.pct<35)|target.health.pct<20 - all of these:
- Set on gcd racials to true when the following holds, otherwise falseall of these:
- Recklessness isn't active
- Recklessness isn't active
- you have less than 80 Rage
- Sudden Death isn't active
- Bladestorm is on cooldown
- any of these:
- Execute is on cooldown
- execute phase is false
simc
variable,name=on_gcd_racials,value=buff.recklessness.down&buff.recklessness.down&rage<80&buff.sudden_death.down&!cooldown.bladestorm.ready&(!cooldown.execute.ready|!variable.execute_phase)
- Cast Light's Judgment if on gcd racials is true
simc
lights_judgment,if=variable.on_gcd_racials - Cast Bag of Tricks if on gcd racials is true
simc
bag_of_tricks,if=variable.on_gcd_racials - Cast Berserking if Recklessness is active
simc
berserking,if=buff.recklessness.up - Cast Blood Fury
simc
blood_fury - Cast Fireblood
simc
fireblood - Cast Ancestral Call
simc
ancestral_call - Get Power Infusion from an ally if (Recklessness has more than 15 s left and at least 135 s of the fight remain) or (execute phase is true and Recklessness is active) or the fight ends within 25 s
simc
invoke_external_buff,name=power_infusion,if=buff.recklessness.remains>15&fight_remains>=135|variable.execute_phase&buff.recklessness.up|fight_remains<=25 Is it true that you have Slayer's Dominance talented and there is a single enemy?Not set
If so, switch to Slayer, and nothing below is checked
simc
run_action_list,name=slayer,if=talent.slayers_dominance&active_enemies=1Slayer22 lines
- Cast Recklessness
simc
recklessness - Cast Rampage if Enrage has less than one global cooldown left, or isn't active
simc
rampage,if=buff.enrage.remains<gcd - Cast Rampage if Recklessness is active and you have 100 or more Rage
simc
rampage,if=buff.recklessness.up&rage>=100 - Cast Rampage if Recklessness is active and Bladestorm is off cooldown
simc
rampage,if=buff.recklessness.up&cooldown.bladestorm.ready - Cast Bladestorm if Recklessness is active or the target dies within 5 s
simc
bladestorm,if=buff.recklessness.up|target.time_to_die<=5 - Cast Execute if Recklessness is active and Sudden Death is active
simc
execute,if=buff.recklessness.up&buff.sudden_death.up - Cast Rampage if Recklessness is active and Hack and Slash isn't active
simc
rampage,if=buff.recklessness.up&!buff.hack_and_slash.up - Cast Crushing Blow
simc
crushing_blow - Cast Odyn's Fury if Recklessness is active
simc
odyns_fury,if=buff.recklessness.up - Cast Execute if Recklessness is active
simc
execute,if=buff.recklessness.up - Cast Bloodbath
simc
bloodbath - Cast Odyn's Fury if Recklessness is active
simc
odyns_fury,if=buff.recklessness.up - Cast Rampage if you have more than 100 Rage
simc
rampage,if=rage>100 - Cast Execute
simc
execute - Cast Odyn's Fury
simc
odyns_fury - Cast Raging Blow
simc
raging_blow - Cast Rampage
simc
rampage - Cast Bloodthirst
simc
bloodthirst - Cast Whirlwind
simc
whirlwind - Cast Storm Bolt if Bladestorm is active
simc
storm_bolt,if=buff.bladestorm.up
Is it true that you have Slayer's Dominance talented and there is more than one enemy?Not set
If so, switch to Slayer AoE, and nothing below is checked
simc
run_action_list,name=slayer_aoe,if=talent.slayers_dominance&active_enemies>1Slayer AoE14 lines
- Cast Whirlwind if you have Improved Whirlwind talented and Whirlwind isn't active
simc
whirlwind,if=talent.improved_whirlwind&buff.whirlwind.stack=0 - Cast Recklessness
simc
recklessness - Cast Avatar
simc
avatar - Cast Rampage
simc
rampage - Cast Bladestorm if Recklessness is active or the target dies within 5 s
simc
bladestorm,if=buff.recklessness.up|target.time_to_die<=5 - Cast Execute if Sudden Death is active
simc
execute,if=buff.sudden_death.up - Cast Odyn's Fury
simc
odyns_fury - Cast Crushing Blow
simc
crushing_blow - Cast Bloodbath
simc
bloodbath - Cast Execute
simc
execute - Cast Raging Blow
simc
raging_blow - Cast Bloodthirst
simc
bloodthirst - Cast Whirlwind
simc
whirlwind - Cast Storm Bolt if Bladestorm is active
simc
storm_bolt,if=buff.bladestorm.up
Is it true that you have Lightning Strikes talented and there is a single enemy?Not set
If so, switch to Thane, and nothing below is checked
simc
run_action_list,name=thane,if=talent.lightning_strikes&active_enemies=1Thane20 lines
- Cast Recklessness
simc
recklessness - Cast Avatar
simc
avatar - Cast Rampage if Enrage has less than one global cooldown left, or isn't active or you have 100 or more Rage
simc
rampage,if=buff.enrage.remains<gcd|rage>=100 - Cast Bloodbath if Recklessness is active and Fury Mid2 4pc Crit has fewer than 2 stacks
simc
bloodbath,if=buff.recklessness.up&buff.fury_mid2_4pc_crit.stack<2 - Cast Thunder Blast if Thunder Blast has exactly 2 stacks or Avatar has less than 2 s left, or isn't active or Thunder Blast has less than 2 s left, or isn't active
simc
thunder_blast,if=buff.thunder_blast.stack=2|buff.avatar.remains<2|buff.thunder_blast.remains<2 - Cast Crushing Blow if Hack and Slash is active
simc
crushing_blow,if=buff.hack_and_slash.up - Cast Bloodbath
simc
bloodbath - Cast Rampage if Recklessness is active
simc
rampage,if=buff.recklessness.up - Cast Thunder Blast if Avatar is active
simc
thunder_blast,if=buff.avatar.up - Cast Crushing Blow
simc
crushing_blow - Cast Raging Blow if Hack and Slash is active
simc
raging_blow,if=buff.hack_and_slash.up - Cast Thunder Blast
simc
thunder_blast - Cast Rampage
simc
rampage - Cast Bloodthirst
simc
bloodthirst - Cast Execute if you have Deep Wounds talented
simc
execute,if=talent.deep_wounds - Cast Raging Blow
simc
raging_blow - Cast Odyn's Fury
simc
odyns_fury - Cast Thunder Clap if Avatar is active and you don't have Wrath and Fury talented
simc
thunder_clap,if=buff.avatar.up&!talent.wrath_and_fury - Cast Execute
simc
execute - Cast Thunder Clap
simc
thunder_clap
Is it true that you have Lightning Strikes talented and there is more than one enemy?Not set
If so, switch to Thane AoE, and nothing below is checked
simc
run_action_list,name=thane_aoe,if=talent.lightning_strikes&active_enemies>1Thane AoE22 lines
- Cast Odyn's Fury
simc
odyns_fury - Cast Recklessness
simc
recklessness - Cast Avatar
simc
avatar - Cast Rampage if Enrage isn't active
simc
rampage,if=!buff.enrage.up - Cast Thunder Blast
simc
thunder_blast - Cast Thunder Clap if (you have Improved Whirlwind talented and Whirlwind isn't active) or (Avatar is active and there are more than 6 enemies)
simc
thunder_clap,if=talent.improved_whirlwind&buff.whirlwind.stack=0|(buff.avatar.up&active_enemies>6) - Cast Rampage if Enrage has less than one global cooldown left, or isn't active or you have 100 or more Rage
simc
rampage,if=buff.enrage.remains<gcd|rage>=100 - Cast Bloodbath
simc
bloodbath - Cast Crushing Blow if Hack and Slash is active
simc
crushing_blow,if=buff.hack_and_slash.up - Cast Rampage if Recklessness is active
simc
rampage,if=buff.recklessness.up - Cast Thunder Clap if Avatar is active
simc
thunder_clap,if=buff.avatar.up - Cast Crushing Blow
simc
crushing_blow - Cast Bloodthirst
simc
bloodthirst - Cast Raging Blow if Hack and Slash is active
simc
raging_blow,if=buff.hack_and_slash.up - Cast Execute
simc
execute - Cast Rampage
simc
rampage - Cast Thunder Clap
simc
thunder_clap - Cast Raging Blow
simc
raging_blow - Cast Whirlwind
simc
whirlwind
Read from ActionPriorityLists/default/warrior_fury.simc in simulationcraft/simc at 1860cd1d5763, the commit this engine build runs.
Blizzard’s own suggestion system (the one-button rotation), as simc carries it. It is simpler than SimulationCraft’s list and is not what Cogspark simulates.
§2Decision tree
Set what you know. The tree lights the lists the sim checks, top to bottom; in each list it presses the first ability whose conditions hold and that is ready. Readiness (cooldowns, resources) isn’t in the list, so a lit ability is the first one allowed, not a promise it is cast.
- The main loop
- Cooldowns
- Assisted Combat
Before the pull, done once before the fight starts (2 steps)
Before the pull2 lines
- Record your stats before the pull (sim bookkeeping)
simc
snapshot_stats - Cast Berserker Stance
simc
berserker_stance,toggle=on
The main loop4 lines
go through Cooldowns, then carry on below if nothing there fits
simc
call_action_list,name=cooldownsCooldowns8 lines
- Use your trinketsSome cooldowns are not used by the Assisted Combat system. This simple default cooldown usage has been provided by simc.
simc
use_items - Drink a potion
simc
potion - Cast Blood Fury
simc
blood_fury - Cast Berserking
simc
berserking - Cast Fireblood
simc
fireblood - Cast Ancestral Call
simc
ancestral_call - Cast Recklessness
simc
recklessness - Cast Avatar
simc
avatar
go through Assisted Combat, then carry on below if nothing there fits
simc
call_action_list,name=assisted_combatAssisted Combat20 lines
- Cast Battle Shout if Battle Shout Highlight is activeThis is the default action priority list from the game's Assisted Combat system.
simc
battle_shout,if=buff.battle_shout_highlight.up - Cast Thunder Clap if Rend isn't on the target and you have Storm of Blood talented and you have Crashing Thunder talented
simc
thunder_clap,if=!dot.rend.ticking&talent.storm_of_blood&talent.crashing_thunder - Cast Whirlwind if Rend isn't on the target and you have Storm of Blood talented
simc
whirlwind,if=!dot.rend.ticking&talent.storm_of_blood - Cast Recklessness if Slam is off cooldownThis is for Blizzard automation and is not included in the game's Assisted Combat system.
simc
recklessness,if=cooldown.slam.ready - Cast Avatar if Slam is off cooldownThis is for Blizzard automation and is not included in the game's Assisted Combat system.
simc
avatar,if=cooldown.slam.ready - Cast Odyn's Fury if your distance to the target is at most 12
simc
odyns_fury,if=target.distance<=12 - Cast Rampage if Enrage isn't active
simc
rampage,if=buff.enrage.down - Cast Thunder Clap if Thunder Blast is active and your distance to the target is at most 6 and Enrage is active(Overridden from 'buff.thunder_blast.up&target.distance<=5&buff.enrage.up')
simc
thunder_clap,if=buff.thunder_blast.up&target.distance<=6&buff.enrage.up - Cast Thunder Clap if your distance to the target is at most 6 and you have Crashing Thunder talented and you have Improved Whirlwind talented and Whirlwind isn't active(Overridden from 'target.distance<=5&talent.crashing_thunder&talent.improved_whirlwind&buff.whirlwind.down')
simc
thunder_clap,if=target.distance<=6&talent.crashing_thunder&talent.improved_whirlwind&buff.whirlwind.down - Cast Whirlwind if your distance to the target is at most 10 and you don't have Crashing Thunder talented and you have Improved Whirlwind talented and Whirlwind isn't active and there are more than 3 enemies
simc
whirlwind,if=target.distance<=10&!talent.crashing_thunder&talent.improved_whirlwind&buff.whirlwind.down&active_enemies>3 - Cast Bladestorm if your distance to the target is at most 10 and Enrage is active
simc
bladestorm,if=target.distance<=10&buff.enrage.up - Cast Rampage
simc
rampage - Cast Execute
simc
execute - Cast Thunder Clap if your distance to the target is at most 6 and you have Crashing Thunder talented and there are more than 3 enemies(Overridden from 'target.distance<=5&talent.crashing_thunder&active_enemies>3')
simc
thunder_clap,if=target.distance<=6&talent.crashing_thunder&active_enemies>3 - Cast Bloodthirst
simc
bloodthirst - Cast Raging Blow
simc
raging_blow - Cast Thunder Clap if your distance to the target is at most 6 and you have Crashing Thunder talented(Overridden from 'target.distance<=5&talent.crashing_thunder')
simc
thunder_clap,if=target.distance<=6&talent.crashing_thunder - Cast Heroic Throw if your distance to the target is more than 15
simc
heroic_throw,if=target.distance>15 - Cast Slam(Overridden from 'buff.unknown_spell_209694.down')
simc
slam - Cast Whirlwind
simc
whirlwind
- Start auto-attacking
simc
auto_attack - Cast Charge if at most 0.5 s into the fight or the distance you still have to move is more than 5
simc
charge,if=time<=0.5|movement.distance>5
Read from ActionPriorityLists/assisted_combat/warrior_fury.simc in simulationcraft/simc at 1860cd1d5763, the commit this engine build runs.