Cogspark

Cogspark Works · Rotation

Devourer Demon Hunter

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
Your talents (click: talented, not talented, not set)
More conditions (14)
the target dies within 4 s
the Soul Fragments Reap would consume is at least 1
Soulburst is active
Metamorphosis is active
Eradicate is active
the Soul Fragments Reap would consume is at least 4
the stacks of Collapsing Star Stacking plus the Soul Fragments Reap would consume is at least 30
voidfall dump is true
the fight ends within 45 s
the Soul Fragments Reap would consume is at least 8
the Soul Fragments Reap would consume is at least 4 plus (4 if (there is more than one enemy and Eradicate is active), else 0)
Void Metamorphosis Stack is at maximum stacks
you have less than 100 Fury
your Fury plus (4 times the Soul Fragments Reap would consume) plus (10 if you have Scythe's Embrace talented, else 0) is at least 100
Checked
  1. The main loop
  2. Helpers
  3. Cooldowns
  4. Reaps (maybe)
  5. Annihilator (maybe)
  6. Annihilator meta (maybe)
  7. Annihilator out (maybe)
  8. Voidscarred (maybe)
  9. Voidscarred meta (maybe)
  10. Voidscarred out (maybe)
  11. Voidscarred hunt entry (maybe)
Before the pull, done once before the fight starts (8 steps)

Before the pull8 lines

  1. Record your stats before the pull (sim bookkeeping)
    simcsnapshot_stats
  2. Set trinket 1 buffs to true when the following holds, otherwise false
    any of these:
    • trinket 1 can grant Intellect
    • trinket 1 can grant Mastery
    • trinket 1 can grant Versatility
    • trinket 1 can grant Haste
    • trinket 1 can grant Critical Strike
    simcvariable,name=trinket_1_buffs,value=trinket.1.has_buff.intellect|trinket.1.has_buff.mastery|trinket.1.has_buff.versatility|trinket.1.has_buff.haste|trinket.1.has_buff.crit
  3. Set trinket 2 buffs to true when the following holds, otherwise false
    any of these:
    • trinket 2 can grant Intellect
    • trinket 2 can grant Mastery
    • trinket 2 can grant Versatility
    • trinket 2 can grant Haste
    • trinket 2 can grant Critical Strike
    simcvariable,name=trinket_2_buffs,value=trinket.2.has_buff.intellect|trinket.2.has_buff.mastery|trinket.2.has_buff.versatility|trinket.2.has_buff.haste|trinket.2.has_buff.crit
  4. 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
    • all of these:
      • trinket 2 buffs is true
      • trinket 2's stat buff's duration times trinket 2's stat buff's base value is more than trinket 1's stat buff's duration times trinket 1's stat buff's base value
    simcvariable,name=trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_1_buffs&variable.trinket_2_buffs|variable.trinket_2_buffs&((trinket.2.proc.any_dps.duration)*trinket.2.proc.any_dps.default_value)>((trinket.1.proc.any_dps.duration)*trinket.1.proc.any_dps.default_value)
  5. 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
  6. Cast Arcane Torrent
    simcarcane_torrent
  7. Cast Soul Immolation
    simcsoul_immolation
  8. Cast Consume
    simcconsume

The main loop6 lines

  1. Switch your targettarget on the enemy with the highest time until the target diesAt most once every 0.25 s
    simcretarget,target_if=max:target.time_to_die,line_cd=0.25
  2. go through Helpers, then carry on below if nothing there fits

    simccall_action_list,name=variables

    Helpers2 lines

    1. Set voidfall dump to true when the following holds, otherwise false
      all of these:
      • Eradicate isn't active
      • any of these:
        • all of these:
          • Voidfall Spending has 3 or more stacks
          • your last spell on the global cooldown was Void Ray
        • Voidfall Spending has 3 or more stacks (counting only what you've had time to react to)
      simcvariable,name=voidfall_dump,op=set,value=!buff.eradicate.up&(buff.voidfall_spending.stack>=3&prev_gcd.1.void_ray|buff.voidfall_spending.react>=3)
    2. Set no ray this window to true when the following holds, otherwise false
      the fight time when you last used Void Ray is less than the fight time when Metamorphosis last triggered
      simcvariable,name=no_ray_this_window,op=set,value=action.void_ray.last_used<buff.metamorphosis.last_trigger
  3. go through Cooldowns, then carry on below if nothing there fits

    simccall_action_list,name=cooldowns

    Cooldowns8 lines

    1. Get Power Infusion from an ally if Metamorphosis is active and Power Infusion isn't active
      simcinvoke_external_buff,name=power_infusion,if=buff.metamorphosis.up&!buff.power_infusion.up
    2. Drink a potion if Metamorphosis is active or the fight ends within 30 s
      simcpotion,if=buff.metamorphosis.up|fight_remains<=30
    3. Use your trinket 1 if (Metamorphosis is active and (no ray this window is true or you use the Annihilator hero talents) and (trinket 2 has no cooldown or trinket 2 is on cooldown or trinket priority is 1)) or trinket 1's stat buff's duration is at least the time left in the fight or the fight ends within trinket 1's stat buff's duration
      simcuse_item,slot=trinket1,if=buff.metamorphosis.up&(variable.no_ray_this_window|hero_tree.annihilator)&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1)|trinket.1.proc.any_dps.duration>=fight_remains|fight_remains<=trinket.1.buff.any_dps.duration
    4. Use your trinket 2 if (Metamorphosis is active and (no ray this window is true or you use the Annihilator hero talents) and (trinket 1 has no cooldown or trinket 1 is on cooldown or trinket priority is 2)) or trinket 2's stat buff's duration is at least the time left in the fight or the fight ends within trinket 2's stat buff's duration
      simcuse_item,slot=trinket2,if=buff.metamorphosis.up&(variable.no_ray_this_window|hero_tree.annihilator)&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2)|trinket.2.proc.any_dps.duration>=fight_remains|fight_remains<=trinket.2.buff.any_dps.duration
    5. Use your trinket 1 if trinket 1 buffs is false and (damage trinket priority is 1 or trinket 2 is on cooldown or trinket 2's cooldown is 0 s) and the time left on the global cooldown is more than 0.1 sUsed without waiting for the global cooldown
      simcuse_item,use_off_gcd=1,slot=trinket1,if=!variable.trinket_1_buffs&(variable.damage_trinket_priority=1|trinket.2.cooldown.remains|trinket.2.cooldown.duration=0)&gcd.remains>0.1
    6. Use your trinket 2 if trinket 2 buffs is false and (damage trinket priority is 2 or trinket 1 is on cooldown or trinket 1's cooldown is 0 s) and the time left on the global cooldown is more than 0.1 sUsed without waiting for the global cooldown
      simcuse_item,use_off_gcd=1,slot=trinket2,if=!variable.trinket_2_buffs&(variable.damage_trinket_priority=2|trinket.1.cooldown.remains|trinket.1.cooldown.duration=0)&gcd.remains>0.1
    7. Use your trinket 1 if trinket 1 buffs is false and (damage trinket priority is 1 or trinket 2 is on cooldown or trinket 2's cooldown is 0 s)
      simcuse_item,slot=trinket1,if=!variable.trinket_1_buffs&(variable.damage_trinket_priority=1|trinket.2.cooldown.remains|trinket.2.cooldown.duration=0)
    8. Use your trinket 2 if trinket 2 buffs is false and (damage trinket priority is 2 or trinket 1 is on cooldown or trinket 1's cooldown is 0 s)
      simcuse_item,slot=trinket2,if=!variable.trinket_2_buffs&(variable.damage_trinket_priority=2|trinket.1.cooldown.remains|trinket.1.cooldown.duration=0)
  4. Is it true that the target dies within 4 s and the Soul Fragments Reap would consume is at least 1 and Soulburst isn't active?Not set

    If so, go through Reaps, then carry on below if nothing there fits

    simccall_action_list,name=reaps,if=target.time_to_die<=4&action.reap.souls_consumed>=1&!buff.soulburst.up
  5. Is it true that you use the Annihilator hero talents?Not set

    If so, switch to Annihilator, and nothing below is checked

    simcrun_action_list,name=annihilator,if=hero_tree.annihilator

    Annihilator2 lines

    1. Is it true that Metamorphosis is active?Not set

      If so, switch to Annihilator meta, and nothing below is checked

      simcrun_action_list,name=annihilator_meta,if=buff.metamorphosis.up

      Annihilator meta14 lines

      1. Cast Pick Up Fragment if Reap is on cooldown and ((you have Eradicate talented and the target dies within 15 s) or (your Soul Fragments plus the stacks of Collapsing Star Stacking is at least 30 and Collapsing Star Stacking has fewer than 30 stacks))Used without waiting for the global cooldown
        simcpick_up_fragment,use_off_gcd=1,if=cooldown.reap.remains&(talent.eradicate&target.time_to_die<15|soul_fragments+buff.collapsing_star_stacking.stack>=30&buff.collapsing_star_stacking.stack<30)
      2. Cast Devour if Soulburst is active and there is a single enemy
        simcdevour,if=buff.soulburst.up&active_enemies=1
      3. Cast The Hunt if you have Devourer's Bite talented
        simcthe_hunt,if=talent.devourers_bite
      4. Cast Voidblade if you have Devourer's Bite talented and there are 3 or fewer enemies
        simcvoidblade,if=talent.devourers_bite&active_enemies<=3
      5. Cast Collapsing Star if the fight ends within 10 s
        simccollapsing_star,if=fight_remains<10
      6. Cast Void Ray if you have Eradicate talented and there is more than one enemy and Eradicate isn't active
        simcvoid_ray,if=talent.eradicate&active_enemies>1&!buff.eradicate.up
      7. Cast Collapsing Star if there is more than one enemy or Void Ray is on cooldown
        simccollapsing_star,if=active_enemies>1|cooldown.void_ray.remains
      8. Is it true that (there is a single enemy or Eradicate is active) and the Soul Fragments Reap would consume is at least 4?Not set

        If so, go through Reaps, then carry on below if nothing there fits

        simccall_action_list,name=reaps,if=(active_enemies=1|buff.eradicate.up)&action.reap.souls_consumed>=4
      9. Is it true that you don't have Eradicate talented and the stacks of Collapsing Star Stacking plus the Soul Fragments Reap would consume is at least 30 and the Soul Fragments Reap would consume is at least 4?Not set

        If so, go through Reaps, then carry on below if nothing there fits

        simccall_action_list,name=reaps,if=!talent.eradicate&buff.collapsing_star_stacking.stack+action.reap.souls_consumed>=30&action.reap.souls_consumed>=4
      10. Cast Void Ray if there is more than one enemy or you have Eradicate talented or you have 100 or more Fury or you have less than 55 Fury
        simcvoid_ray,if=active_enemies>1|talent.eradicate|fury>=100|fury<55
      11. Is it true that voidfall dump is true?Not set

        If so, go through Reaps, then carry on below if nothing there fits

        simccall_action_list,name=reaps,if=variable.voidfall_dump
      12. Is it true that the stacks of Collapsing Star Stacking plus the Soul Fragments Reap would consume is at least 30 and the Soul Fragments Reap would consume is at least 4 and the fight ends within 45 s?Not set

        If so, go through Reaps, then carry on below if nothing there fits

        simccall_action_list,name=reaps,if=buff.collapsing_star_stacking.stack+action.reap.souls_consumed>=30&action.reap.souls_consumed>=4&fight_remains<45
      13. Cast Soul Immolation if Soul Immolation isn't on any enemy and your Fury is less than void_metamorphosis_base_drain_ps and (Reap is on cooldown or there is a single enemy)
        simcsoul_immolation,if=active_dot.soul_immolation=0&fury<void_metamorphosis_base_drain_ps&(cooldown.reap.remains|active_enemies=1)
      14. Cast Devour
        simcdevour
    2. switch to Annihilator out, and nothing below is checked

      simcrun_action_list,name=annihilator_out

      Annihilator out10 lines

      1. Cast Pick Up Fragment if Void Metamorphosis Stack isn't at maximum stacks and the stacks of Void Metamorphosis Stack is at least the maximum stacks of Void Metamorphosis Stack minus 2At most once every 0.6 sUsed without waiting for the global cooldown
        simcpick_up_fragment,mode=nearest,type=all,use_off_gcd=1,line_cd=0.6,if=!buff.void_metamorphosis_stack.at_max_stacks&buff.void_metamorphosis_stack.stack>=buff.void_metamorphosis_stack.max_stack-2
      2. Cast Voidblade if you have Devourer's Bite talented and there are 3 or fewer enemies and Void Metamorphosis Stack is at maximum stacks
        simcvoidblade,if=talent.devourers_bite&active_enemies<=3&buff.void_metamorphosis_stack.at_max_stacks
      3. Cast Metamorphosis
        simcmetamorphosis
      4. Cast Consume if Soulburst is active
        simcconsume,if=buff.soulburst.up
      5. Is it true that (there is a single enemy or Eradicate is active) and the Soul Fragments Reap would consume is at least 4?Not set

        If so, go through Reaps, then carry on below if nothing there fits

        simccall_action_list,name=reaps,if=(active_enemies=1|buff.eradicate.up)&action.reap.souls_consumed>=4
      6. Is it true that you don't have Eradicate talented and the Soul Fragments Reap would consume is at least 8?Not set

        If so, go through Reaps, then carry on below if nothing there fits

        simccall_action_list,name=reaps,if=!talent.eradicate&action.reap.souls_consumed>=8
      7. Cast Void Ray
        simcvoid_ray
      8. Is it true that voidfall dump is true?Not set

        If so, go through Reaps, then carry on below if nothing there fits

        simccall_action_list,name=reaps,if=variable.voidfall_dump
      9. Cast Soul Immolation if Soul Immolation isn't on any enemy and (there is more than one enemy or you have Eradicate talented)
        simcsoul_immolation,if=active_dot.soul_immolation=0&(active_enemies>1|talent.eradicate)
      10. Cast Consume
        simcconsume
  6. Is it true that you use the Voidscarred hero talents?Not set

    If so, switch to Voidscarred, and nothing below is checked

    simcrun_action_list,name=voidscarred,if=hero_tree.voidscarred

    Voidscarred2 lines

    1. Is it true that Metamorphosis is active?Not set

      If so, switch to Voidscarred meta, and nothing below is checked

      simcrun_action_list,name=voidscarred_meta,if=buff.metamorphosis.up

      Voidscarred meta20 lines

      1. Cast Pick Up Fragment if Void Ray comes off cooldown within 2 global cooldowns and your Fury is less than void_metamorphosis_base_drain_ps times the cooldown left on Void RayAt most once every 0.35 sUsed without waiting for the global cooldown
        simcpick_up_fragment,mode=nearest,type=all,use_off_gcd=1,line_cd=0.35,if=cooldown.void_ray.remains<gcd.max*2&fury<void_metamorphosis_base_drain_ps*cooldown.void_ray.remains
      2. Cast Vengeful Retreat if Voidstep is activeUsed without waiting for the global cooldown
        simcvengeful_retreat,use_off_gcd=1,if=buff.voidstep.up
      3. Cast Void Ray if no ray this window is true and (you don't have Eradicate talented or there is a single enemy)
        simcvoid_ray,if=variable.no_ray_this_window&(!talent.eradicate|active_enemies=1)
      4. Cast Eradicate if Void Ray comes off cooldown within one global cooldown and Soulburst isn't active
        simceradicate,if=cooldown.void_ray.remains<gcd.max&!buff.soulburst.up
      5. Cast Void Ray if you have Eradicate talented and Eradicate isn't active and (there is more than one enemy or you have less than 30 Fury)
        simcvoid_ray,if=talent.eradicate&!buff.eradicate.up&(active_enemies>1|fury<30)
      6. Cast Reaper's Toll if there is more than one enemy and Hungering Slash has less than 2 global cooldowns left, or isn't active
        simcreapers_toll,if=active_enemies>1&buff.hungering_slash.remains<gcd.max*2
      7. Cast Predator's Wake if Collapsing Star is active
        simcpredators_wake,if=buff.collapsing_star.up
      8. Cast Reaper's Toll if you have Voidrush talented and Collapsing Star is active and Voidblade comes off cooldown within one global cooldown
        simcreapers_toll,if=talent.voidrush&buff.collapsing_star.up&cooldown.voidblade.remains<gcd.max
      9. Cast Pierce the Veil if you have Voidrush talented and Collapsing Star is active
        simcpierce_the_veil,if=talent.voidrush&buff.collapsing_star.up
      10. Cast Collapsing Star
        simccollapsing_star
      11. Cast Devour if Soulburst is active
        simcdevour,if=buff.soulburst.up
      12. Cast Reaper's Toll if there are more than 3 enemies and your Fury is less than void_metamorphosis_base_drain_ps times the cooldown left on Void Ray
        simcreapers_toll,if=active_enemies>3&fury<void_metamorphosis_base_drain_ps*cooldown.void_ray.remains
      13. Cast Reaper's Toll if you have 8 or fewer Soul Fragments
        simcreapers_toll,if=soul_fragments<=8
      14. Cast Pierce the Veil if there are fewer than 4 enemies
        simcpierce_the_veil,if=active_enemies<4
      15. Cast Predator's Wake if Hungering Slash isn't active
        simcpredators_wake,if=!buff.hungering_slash.up
      16. Cast Pierce the Veil
        simcpierce_the_veil
      17. Is it true that the Soul Fragments Reap would consume is at least 4 plus (4 if (there is more than one enemy and Eradicate is active), else 0) and Soulburst isn't active?Not set

        If so, go through Reaps, then carry on below if nothing there fits

        simccall_action_list,name=reaps,if=action.reap.souls_consumed>=4+4*(active_enemies>1&buff.eradicate.up)&!buff.soulburst.up
      18. Cast Void Ray
        simcvoid_ray
      19. Cast Soul Immolation if Soul Immolation isn't on any enemy and your Fury is less than void_metamorphosis_base_drain_ps
        simcsoul_immolation,if=active_dot.soul_immolation=0&fury<void_metamorphosis_base_drain_ps
      20. Cast Devour
        simcdevour
    2. switch to Voidscarred out, and nothing below is checked

      simcrun_action_list,name=voidscarred_out

      Voidscarred out15 lines

      1. Cast Pick Up Fragment if Void Metamorphosis Stack isn't at maximum stacks and the stacks of Void Metamorphosis Stack is at least the maximum stacks of Void Metamorphosis Stack minus 3At most once every 0.3 sUsed without waiting for the global cooldown
        simcpick_up_fragment,mode=nearest,type=all,use_off_gcd=1,line_cd=0.3,if=!buff.void_metamorphosis_stack.at_max_stacks&buff.void_metamorphosis_stack.stack>=buff.void_metamorphosis_stack.max_stack-3
      2. Wait 0.05 s if Void Metamorphosis Stack isn't at maximum stacks and the stacks of Void Metamorphosis Stack is at least the maximum stacks of Void Metamorphosis Stack minus 1 and ((there is a single enemy and you have 1 or more Soul Fragments) or (there is more than one enemy and the time since the fight started minus the fight time when you last used Pick Up Fragment is less than 1.5 s))
        simcwait,sec=0.05,if=!buff.void_metamorphosis_stack.at_max_stacks&buff.void_metamorphosis_stack.stack>=buff.void_metamorphosis_stack.max_stack-1&(active_enemies=1&soul_fragments>=1|active_enemies>1&time-action.pick_up_fragment.last_used<1.5)
      3. Cast Vengeful Retreat if Voidstep is activeUsed without waiting for the global cooldown
        simcvengeful_retreat,use_off_gcd=1,if=buff.voidstep.up
      4. Cast Consume if Soulburst is active and (there is a single enemy or you have Eradicate talented or Soulburst has less than one global cooldown left, or isn't active)
        simcconsume,if=buff.soulburst.up&(active_enemies=1|talent.eradicate|buff.soulburst.remains<gcd.max)
      5. Is it true that you have The Hunt talented and there is a single enemy and Void Metamorphosis Stack is at maximum stacks?Not set

        If so, go through Voidscarred hunt entry, then carry on below if nothing there fits

        simccall_action_list,name=voidscarred_hunt_entry,if=talent.the_hunt&active_enemies=1&buff.void_metamorphosis_stack.at_max_stacks
      6. Cast Voidblade if your last spell on the global cooldown was Void Ray and (there is more than one enemy or you don't have The Hunt talented or The Hunt is on cooldown)
        simcvoidblade,if=prev_gcd.1.void_ray&(active_enemies>1|!talent.the_hunt|!cooldown.the_hunt.ready)
      7. Cast Metamorphosis if Eradicate is active or you don't have Eradicate talented or there is a single enemy or the fight ends within 15 s
        simcmetamorphosis,if=buff.eradicate.up|!talent.eradicate|active_enemies=1|fight_remains<15
      8. Cast Void Ray if you have Eradicate talented and there is more than one enemy and Eradicate isn't active
        simcvoid_ray,if=talent.eradicate&active_enemies>1&!buff.eradicate.up
      9. Is it true that you have less than 100 Fury and your Fury plus (4 times the Soul Fragments Reap would consume) plus (10 if you have Scythe's Embrace talented, else 0) is at least 100 and the Soul Fragments Reap would consume is at least 1 and Soulburst isn't active?Not set

        If so, go through Reaps, then carry on below if nothing there fits

        simccall_action_list,name=reaps,if=fury<100&fury+4*action.reap.souls_consumed+10*talent.scythes_embrace>=100&action.reap.souls_consumed>=1&!buff.soulburst.up
      10. Cast Hungering Slash
        simchungering_slash
      11. Cast Soul Immolation if there is more than one enemy and Soul Immolation isn't on any enemy
        simcsoul_immolation,if=active_enemies>1&active_dot.soul_immolation=0
      12. Is it true that the Soul Fragments Reap would consume is at least 4 plus (4 if (there is more than one enemy and Eradicate is active), else 0) and Soulburst isn't active?Not set

        If so, go through Reaps, then carry on below if nothing there fits

        simccall_action_list,name=reaps,if=action.reap.souls_consumed>=4+4*(active_enemies>1&buff.eradicate.up)&!buff.soulburst.up
      13. Cast Void Ray
        simcvoid_ray
      14. Cast Soul Immolation if there is a single enemy and Soul Immolation isn't on any enemy
        simcsoul_immolation,if=active_enemies=1&active_dot.soul_immolation=0
      15. Cast Consume
        simcconsume

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