Cogspark

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.

Your situation
Enemies in range
Target health
  • execute phase: not set · when (you have Massacre talented and the target is below 35% health) or the target is below 20% health
Your talents (click: talented, not talented, not set)
Checked
  1. The main loop
  2. Trinkets
  3. Helpers
  4. Slayer (maybe)
  5. Slayer AoE (maybe)
  6. Thane (maybe)
  7. Thane AoE (maybe)
Before the pull, done once before the fight starts (16 steps)

Before the pull16 lines

  1. Record your stats before the pull (sim bookkeeping)Snapshot raid buffed stats before combat begins and pre-potting is done.
    simcsnapshot_stats
  2. Cast Berserker Stance
    simcberserker_stance,toggle=on
  3. Set trinket 1 exclude to true when the following holds, otherwise false
    trinket 1 is Algethar Puzzle Box
    simcvariable,name=trinket_1_exclude,value=trinket.1.is.algethar_puzzle_box
  4. Set trinket 2 exclude to true when the following holds, otherwise false
    trinket 2 is Algethar Puzzle Box
    simcvariable,name=trinket_2_exclude,value=trinket.2.is.algethar_puzzle_box
  5. Set trinket 1 buffs to true when the following holds, otherwise false
    trinket 1 has an on-use effect that grants a stat buff
    simcvariable,name=trinket_1_buffs,value=trinket.1.has_use_buff
  6. Set trinket 2 buffs to true when the following holds, otherwise false
    trinket 2 has an on-use effect that grants a stat buff
    simcvariable,name=trinket_2_buffs,value=trinket.2.has_use_buff
  7. Set trinket 1 duration to 0 when the following holds, otherwise to trinket 1's stat buff's duration
    never
    simcvariable,name=trinket_1_duration,op=setif,value=0,value_else=trinket.1.proc.any_dps.duration,condition=0
  8. Set trinket 2 duration to 0 when the following holds, otherwise to trinket 2's stat buff's duration
    never
    simcvariable,name=trinket_2_duration,op=setif,value=0,value_else=trinket.2.proc.any_dps.duration,condition=0
  9. Set trinket 1 high value to 2 when the following holds, otherwise to 1
    trinket 1 is Treacherous Transmitter
    simcvariable,name=trinket_1_high_value,op=setif,value=2,value_else=1,condition=trinket.1.is.treacherous_transmitter
  10. Set trinket 2 high value to 2 when the following holds, otherwise to 1
    trinket 2 is Treacherous Transmitter
    simcvariable,name=trinket_2_high_value,op=setif,value=2,value_else=1,condition=trinket.2.is.treacherous_transmitter
  11. Set trinket 1 sync to 1 when the following holds, otherwise to 0.5
    all 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
    simcvariable,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
  12. Set trinket 2 sync to 1 when the following holds, otherwise to 0.5
    all 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
    simcvariable,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
  13. Set trinket priority to 2 when the following holds, otherwise to 1
    any 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))
    simcvariable,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)))
  14. Set damage trinket priority to 2 when the following holds, otherwise to 1
    all 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
    simcvariable,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
  15. Set trinket 1 manual to true when the following holds, otherwise false
    trinket 1 is Algethar Puzzle Box
    simcvariable,name=trinket_1_manual,value=trinket.1.is.algethar_puzzle_box
  16. Set trinket 1 manual to true when the following holds, otherwise false
    trinket 2 is Algethar Puzzle Box
    simcvariable,name=trinket_1_manual,value=trinket.2.is.algethar_puzzle_box

The main loop18 lines

  1. Start auto-attacking
    simcauto_attack
  2. Cast Charge if at most 0.5 s into the fight or the distance you still have to move is more than 5
    simccharge,if=time<=0.5|movement.distance>5
  3. 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)
    simcheroic_leap,if=(raid_event.movement.distance>25&raid_event.movement.in>45)
  4. Drink a potion if the target lives more than 300 s longer or Recklessness is active or the target dies within 25 s
    simcpotion,if=target.time_to_die>300|buff.recklessness.up|target.time_to_die<25
  5. Cast Pummel if the target is casting
    simcpummel,if=target.debuff.casting.react
  6. go through Trinkets, then carry on below if nothing there fits

    simccall_action_list,name=trinkets

    Trinkets5 lines

    1. Use Algethar Puzzle Box if Recklessness comes off cooldown within 2 s
      simcuse_item,name=algethar_puzzle_box,if=cooldown.recklessness.remains<2
    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
      simcuse_item,slot=trinket1,if=variable.trinket_1_buffs&(variable.trinket_priority=1|!variable.trinket_2_buffs|!trinket.2.has_cooldown)&(buff.recklessness.up)
    3. 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
      simcuse_item,slot=trinket2,if=variable.trinket_2_buffs&(variable.trinket_priority=2|!variable.trinket_1_buffs|!trinket.1.has_cooldown)&(buff.recklessness.up)
    4. 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)
      simcuse_item,slot=trinket1,if=!variable.trinket_1_buffs&(variable.damage_trinket_priority=1|!variable.trinket_2_buffs|!trinket.2.has_cooldown)
    5. 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)
      simcuse_item,slot=trinket2,if=!variable.trinket_2_buffs&(variable.damage_trinket_priority=2|!variable.trinket_1_buffs|!trinket.1.has_cooldown)
  7. go through Helpers, then carry on below if nothing there fits

    simccall_action_list,name=variables

    Helpers4 lines

    1. Set st planning to true when the following holds, otherwise false
      all of these:
      • 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
      Variables
      simcvariable,name=st_planning,value=active_enemies=1&(raid_event.adds.in>15|!raid_event.adds.exists)
    2. Set adds remain to true when the following holds, otherwise false
      all 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
      simcvariable,name=adds_remain,value=active_enemies>=2&(!raid_event.adds.exists|raid_event.adds.exists&raid_event.adds.remains>5)
    3. Set execute phase to true when the following holds, otherwise false
      any of these:
      • all of these:
        • you have Massacre talented
        • the target is below 35% health
      • the target is below 20% health
      simcvariable,name=execute_phase,value=(talent.massacre.enabled&target.health.pct<35)|target.health.pct<20
    4. Set on gcd racials to true when the following holds, otherwise false
      all 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
      simcvariable,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)
  8. Cast Light's Judgment if on gcd racials is true
    simclights_judgment,if=variable.on_gcd_racials
  9. Cast Bag of Tricks if on gcd racials is true
    simcbag_of_tricks,if=variable.on_gcd_racials
  10. Cast Berserking if Recklessness is active
    simcberserking,if=buff.recklessness.up
  11. Cast Blood Fury
    simcblood_fury
  12. Cast Fireblood
    simcfireblood
  13. Cast Ancestral Call
    simcancestral_call
  14. 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
    simcinvoke_external_buff,name=power_infusion,if=buff.recklessness.remains>15&fight_remains>=135|variable.execute_phase&buff.recklessness.up|fight_remains<=25
  15. 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

    simcrun_action_list,name=slayer,if=talent.slayers_dominance&active_enemies=1

    Slayer22 lines

    1. Cast Recklessness
      simcrecklessness
    2. Cast Rampage if Enrage has less than one global cooldown left, or isn't active
      simcrampage,if=buff.enrage.remains<gcd
    3. Cast Rampage if Recklessness is active and you have 100 or more Rage
      simcrampage,if=buff.recklessness.up&rage>=100
    4. Cast Rampage if Recklessness is active and Bladestorm is off cooldown
      simcrampage,if=buff.recklessness.up&cooldown.bladestorm.ready
    5. Cast Bladestorm if Recklessness is active or the target dies within 5 s
      simcbladestorm,if=buff.recklessness.up|target.time_to_die<=5
    6. Cast Execute if Recklessness is active and Sudden Death is active
      simcexecute,if=buff.recklessness.up&buff.sudden_death.up
    7. Cast Rampage if Recklessness is active and Hack and Slash isn't active
      simcrampage,if=buff.recklessness.up&!buff.hack_and_slash.up
    8. Cast Crushing Blow
      simccrushing_blow
    9. Cast Odyn's Fury if Recklessness is active
      simcodyns_fury,if=buff.recklessness.up
    10. Cast Execute if Recklessness is active
      simcexecute,if=buff.recklessness.up
    11. Cast Bloodbath
      simcbloodbath
    12. Cast Odyn's Fury if Recklessness is active
      simcodyns_fury,if=buff.recklessness.up
    13. Cast Rampage if you have more than 100 Rage
      simcrampage,if=rage>100
    14. Cast Execute
      simcexecute
    15. Cast Odyn's Fury
      simcodyns_fury
    16. Cast Raging Blow
      simcraging_blow
    17. Cast Rampage
      simcrampage
    18. Cast Bloodthirst
      simcbloodthirst
    19. Cast Whirlwind
      simcwhirlwind
    20. Cast Storm Bolt if Bladestorm is active
      simcstorm_bolt,if=buff.bladestorm.up
  16. 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

    simcrun_action_list,name=slayer_aoe,if=talent.slayers_dominance&active_enemies>1

    Slayer AoE14 lines

    1. Cast Whirlwind if you have Improved Whirlwind talented and Whirlwind isn't active
      simcwhirlwind,if=talent.improved_whirlwind&buff.whirlwind.stack=0
    2. Cast Recklessness
      simcrecklessness
    3. Cast Avatar
      simcavatar
    4. Cast Rampage
      simcrampage
    5. Cast Bladestorm if Recklessness is active or the target dies within 5 s
      simcbladestorm,if=buff.recklessness.up|target.time_to_die<=5
    6. Cast Execute if Sudden Death is active
      simcexecute,if=buff.sudden_death.up
    7. Cast Odyn's Fury
      simcodyns_fury
    8. Cast Crushing Blow
      simccrushing_blow
    9. Cast Bloodbath
      simcbloodbath
    10. Cast Execute
      simcexecute
    11. Cast Raging Blow
      simcraging_blow
    12. Cast Bloodthirst
      simcbloodthirst
    13. Cast Whirlwind
      simcwhirlwind
    14. Cast Storm Bolt if Bladestorm is active
      simcstorm_bolt,if=buff.bladestorm.up
  17. 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

    simcrun_action_list,name=thane,if=talent.lightning_strikes&active_enemies=1

    Thane20 lines

    1. Cast Recklessness
      simcrecklessness
    2. Cast Avatar
      simcavatar
    3. Cast Rampage if Enrage has less than one global cooldown left, or isn't active or you have 100 or more Rage
      simcrampage,if=buff.enrage.remains<gcd|rage>=100
    4. Cast Bloodbath if Recklessness is active and Fury Mid2 4pc Crit has fewer than 2 stacks
      simcbloodbath,if=buff.recklessness.up&buff.fury_mid2_4pc_crit.stack<2
    5. 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
      simcthunder_blast,if=buff.thunder_blast.stack=2|buff.avatar.remains<2|buff.thunder_blast.remains<2
    6. Cast Crushing Blow if Hack and Slash is active
      simccrushing_blow,if=buff.hack_and_slash.up
    7. Cast Bloodbath
      simcbloodbath
    8. Cast Rampage if Recklessness is active
      simcrampage,if=buff.recklessness.up
    9. Cast Thunder Blast if Avatar is active
      simcthunder_blast,if=buff.avatar.up
    10. Cast Crushing Blow
      simccrushing_blow
    11. Cast Raging Blow if Hack and Slash is active
      simcraging_blow,if=buff.hack_and_slash.up
    12. Cast Thunder Blast
      simcthunder_blast
    13. Cast Rampage
      simcrampage
    14. Cast Bloodthirst
      simcbloodthirst
    15. Cast Execute if you have Deep Wounds talented
      simcexecute,if=talent.deep_wounds
    16. Cast Raging Blow
      simcraging_blow
    17. Cast Odyn's Fury
      simcodyns_fury
    18. Cast Thunder Clap if Avatar is active and you don't have Wrath and Fury talented
      simcthunder_clap,if=buff.avatar.up&!talent.wrath_and_fury
    19. Cast Execute
      simcexecute
    20. Cast Thunder Clap
      simcthunder_clap
  18. 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

    simcrun_action_list,name=thane_aoe,if=talent.lightning_strikes&active_enemies>1

    Thane AoE22 lines

    1. Cast Odyn's Fury
      simcodyns_fury
    2. Cast Recklessness
      simcrecklessness
    3. Cast Avatar
      simcavatar
    4. Cast Rampage if Enrage isn't active
      simcrampage,if=!buff.enrage.up
    5. Cast Thunder Blast
      simcthunder_blast
    6. 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)
      simcthunder_clap,if=talent.improved_whirlwind&buff.whirlwind.stack=0|(buff.avatar.up&active_enemies>6)
    7. Cast Rampage if Enrage has less than one global cooldown left, or isn't active or you have 100 or more Rage
      simcrampage,if=buff.enrage.remains<gcd|rage>=100
    8. Cast Bloodbath
      simcbloodbath
    9. Cast Crushing Blow if Hack and Slash is active
      simccrushing_blow,if=buff.hack_and_slash.up
    10. Cast Rampage if Recklessness is active
      simcrampage,if=buff.recklessness.up
    11. Cast Thunder Clap if Avatar is active
      simcthunder_clap,if=buff.avatar.up
    12. Cast Crushing Blow
      simccrushing_blow
    13. Cast Bloodthirst
      simcbloodthirst
    14. Cast Raging Blow if Hack and Slash is active
      simcraging_blow,if=buff.hack_and_slash.up
    15. Cast Execute
      simcexecute
    16. Cast Rampage
      simcrampage
    17. Cast Thunder Clap
      simcthunder_clap
    18. Cast Raging Blow
      simcraging_blow
    19. Cast Whirlwind
      simcwhirlwind

Read from ActionPriorityLists/default/warrior_fury.simc in simulationcraft/simc at 1860cd1d5763, the commit this engine build runs.