Cogspark Works · Rotation
Havoc 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.
- The main loop
- Items
Before the pull, done once before the fight starts (10 steps)
Before the pull10 lines
- Record your stats before the pull (sim bookkeeping)
simc
snapshot_stats - Reset tab target burning wound to its starting valuetab target burning wound starts each fight at 1
simc
variable,name=tab_target_burning_wound,op=reset,default=1 - Reset rg ds to its starting valuerg ds starts each fight at 0
simc
variable,name=rg_ds,default=0,op=reset - Set trinket1 special to 0
simc
variable,name=trinket1_special,value=0 - Set trinket2 special to 0
simc
variable,name=trinket2_special,value=0 - Set trinket1 crit to true when the following holds, otherwise falseall of these:
- trinket1 special is false
- trinket 1 has a cooldown
- trinket 1 has an on-use effect that deals damage
- trinket 1 isn't Font of Venomous Rage
simc
variable,name=trinket1_crit,value=!variable.trinket1_special&trinket.1.has_cooldown&trinket.1.has_use_damage&!trinket.1.is.font_of_venomous_rage - Set trinket2 crit to true when the following holds, otherwise falseall of these:
- trinket2 special is false
- trinket 2 has a cooldown
- trinket 2 has an on-use effect that deals damage
- trinket 1 isn't Font of Venomous Rage
simc
variable,name=trinket2_crit,value=!variable.trinket2_special&trinket.2.has_cooldown&trinket.2.has_use_damage&!trinket.1.is.font_of_venomous_rage - Set trinket1 steroids to true when the following holds, otherwise falseall of these:
- trinket1 special is false
- trinket 1 has a cooldown
- trinket 1 has an on-use effect that grants a stat buff
simc
variable,name=trinket1_steroids,value=!variable.trinket1_special&trinket.1.has_cooldown&trinket.1.has_use_buff - Set trinket2 steroids to true when the following holds, otherwise falseall of these:
- trinket2 special is false
- trinket 2 has a cooldown
- trinket 2 has an on-use effect that grants a stat buff
simc
variable,name=trinket2_steroids,value=!variable.trinket2_special&trinket.2.has_cooldown&trinket.2.has_use_buff - Cast Immolation Aura
simc
immolation_aura
The main loop30 lines
- Start auto-attacking
simc
auto_attack - Switch your auto-attacks to this target if you have Burning Wound talented and the number of enemies with Burning Wound is less than the smaller of the number of enemies and 3 and tab target burning wound is truetarget on the enemy with the lowest time left on Burning Wound on the targetAt most once every 1 sDefault auto attack to spread Burning Wound, use tab_target_burning_wound=0 to spread with Throw Glaive instead
simc
retarget_auto_attack,line_cd=1,target_if=min:debuff.burning_wound.remains,if=talent.burning_wound&active_dot.burning_wound<(spell_targets>?3)&variable.tab_target_burning_wound - Switch your auto-attacks to this target if you have Burning Wound talented and the number of enemies with Burning Wound is the smaller of the number of enemies and 3 and tab target burning wound is truetarget preferring an enemy where this doesn't hold: the target isn't a boss; otherwise any enemyAt most once every 1 s
simc
retarget_auto_attack,line_cd=1,target_if=min:!target.is_boss,if=talent.burning_wound&active_dot.burning_wound=(spell_targets>?3)&variable.tab_target_burning_wound - Cast Immolation Aura if you have Violent Transformation talented and you have A Fire Inside talented and Metamorphosis comes off cooldown within 3 global cooldowns
simc
immolation_aura,if=talent.violent_transformation&talent.a_fire_inside&cooldown.metamorphosis.remains<gcd.max*3 - Cast Metamorphosis if (you don't have Chaotic Transformation talented or (Blade Dance is on cooldown and Eye Beam has more than 8 s of cooldown left)) and Death Sweep can't trigger Demonsurge and Annihilation can't trigger Demonsurge
simc
metamorphosis,if=(!talent.chaotic_transformation|!cooldown.blade_dance.up&cooldown.eye_beam.remains>8)&!action.death_sweep.demonsurge_available&!action.annihilation.demonsurge_available - Cast The Hunt if (you don't have Eternal Hunt talented or (Eye Beam comes off cooldown within 10 s and Metamorphosis has more than 15 s of cooldown left) or (Eye Beam is on cooldown and Metamorphosis is off cooldown) or you don't use the Felscarred hero talents) and Reaver's Glaive isn't activeactions+=/metamorphosis,if=!talent.chaotic_transformation|!cooldown.blade_dance.up&!cooldown.eye_beam.up
simc
the_hunt,if=(!talent.eternal_hunt|cooldown.eye_beam.remains<10&cooldown.metamorphosis.remains>15|!cooldown.eye_beam.up&cooldown.metamorphosis.up|!hero_tree.felscarred)&!buff.reavers_glaive.up - Cast Vengeful Retreat if (the global cooldown ends within 0.3 s and Metamorphosis is on cooldown and Eye Beam comes off cooldown within 0.3 global cooldowns and Initiative isn't active) or (Metamorphosis is off cooldown and Eye Beam is on cooldown and Blade Dance is on cooldown and Eternal Hunt isn't active)Used without waiting for the global cooldown
simc
vengeful_retreat,use_off_gcd=1,if=gcd.remains<0.3&cooldown.metamorphosis.remains&cooldown.eye_beam.remains<gcd.max*0.3&!buff.initiative.up|cooldown.metamorphosis.up&cooldown.eye_beam.remains&cooldown.blade_dance.remains&!buff.eternal_hunt.up go through Items, then carry on below if nothing there fits
simc
call_action_list,name=itemsItems6 lines
- Drink a potion if (Metamorphosis is off cooldown and (Eye Beam is off cooldown or you don't have Chaotic Transformation talented)) or the fight ends within 30 sUsed without waiting for the global cooldown
simc
potion,use_off_gcd=1,if=cooldown.metamorphosis.up&(cooldown.eye_beam.up|!talent.chaotic_transformation)|fight_remains<=30 - Use your trinket 1 if trinket1 steroids is true or the fight ends within 15 sUsed without waiting for the global cooldown
simc
use_item,slot=trinket1,use_off_gcd=1,if=variable.trinket1_steroids&(!variable.trinket2_special|trinket.2.cooldown.remains>20)|fight_remains<15 - Use your trinket 1 if (trinket1 crit is true and (Initiative is active or you don't have Initiative talented)) or the fight ends within 15 sUsed without waiting for the global cooldown
simc
use_item,slot=trinket1,use_off_gcd=1,if=variable.trinket1_crit&(buff.initiative.up|!talent.initiative)&(!variable.trinket2_special|trinket.2.cooldown.remains>20)|fight_remains<15 - Use Font of Venomous Rage if (Initiative is active and Initiative has more than 2 s left and (Metamorphosis isn't active or the fight ends within the time left on Metamorphosis) and Essence Break isn't active on the target) or the fight ends within 19 s
simc
use_item,name=font_of_venomous_rage,if=buff.initiative.up&buff.initiative.remains>2&(!buff.metamorphosis.up|fight_remains<buff.metamorphosis.remains)&!debuff.essence_break.up|fight_remains<19 - Use your trinket 2 if trinket2 steroids is true or the fight ends within 15 sUsed without waiting for the global cooldown
simc
use_item,slot=trinket2,use_off_gcd=1,if=variable.trinket2_steroids&(!variable.trinket1_special|trinket.1.cooldown.remains>20)|fight_remains<15 - Use your trinket 2 if (trinket2 crit is true and (Initiative is active or you don't have Initiative talented)) or the fight ends within 15 sUsed without waiting for the global cooldown
simc
use_item,slot=trinket2,use_off_gcd=1,if=variable.trinket2_crit&(buff.initiative.up|!talent.initiative)&(!variable.trinket1_special|trinket.1.cooldown.remains>20)|fight_remains<15
- Cast Pick Up Fragment if you have 40 or less FuryUsed without waiting for the global cooldown
simc
pick_up_fragment,type=all,use_off_gcd=1,if=fury<=40 - Cast Reaver's Glaive if Rending Strike isn't active and Glaive Flurry isn't active
simc
reavers_glaive,if=buff.rending_strike.down&buff.glaive_flurry.down - Cast Annihilation if (Rending Strike is active and Glaive Flurry isn't active and Reaver's Mark has fewer than 2 stacks on the target) or (Rending Strike is active and there are 2 or more enemies)
simc
annihilation,if=buff.rending_strike.up&buff.glaive_flurry.down&debuff.reavers_mark.stack<2|buff.rending_strike.up&active_enemies>=2 - Cast Essence Break if Death Sweep can trigger Demonsurge or Annihilation can trigger Demonsurge
simc
essence_break,if=action.death_sweep.demonsurge_available|action.annihilation.demonsurge_available - Cast Death Sweep if Essence Break is active on the target or Death Sweep can trigger Demonsurge
simc
death_sweep,if=debuff.essence_break.up|action.death_sweep.demonsurge_available - Cast Annihilation if Essence Break is active on the target or Annihilation can trigger Demonsurge
simc
annihilation,if=debuff.essence_break.up|action.annihilation.demonsurge_available - Cast Throw Glaive if there is more than one enemy and you have Burning Wound talented and you don't have Screaming Brutality talented and the number of enemies with Burning Wound is less than the smaller of the number of enemies Throw Glaive would hit and 3 and tab target burning wound is false
simc
throw_glaive,if=active_enemies>1&talent.burning_wound&!talent.screaming_brutality&active_dot.burning_wound<(spell_targets>?3)&!variable.tab_target_burning_wound - Cast Immolation Aura if you have A Fire Inside talented and you have Burning Wound talented and (Immolation Aura has exactly 2 charges or Immolation Aura is fully recharged within 2 global cooldowns)
simc
immolation_aura,if=talent.a_fire_inside&talent.burning_wound&(charges=2|full_recharge_time<gcd.max*2) - Cast Abyssal Gaze if Death Sweep can't trigger Demonsurge and Annihilation can't trigger Demonsurge
simc
abyssal_gaze,if=!action.death_sweep.demonsurge_available&!action.annihilation.demonsurge_available - Cast Eye Beam
simc
eye_beam - Cast Immolation Aura if Immolation Aura can trigger Demonsurge and Demonsurge has less than one global cooldown left, or isn't active
simc
immolation_aura,,if=action.immolation_aura.demonsurge_available&buff.demonsurge.remains<gcd.max - Cast Felblade if Inertia Trigger is active
simc
felblade,if=buff.inertia_trigger.up - Cast Essence Break if Eye Beam has more than 4 s of cooldown left
simc
essence_break,if=cooldown.eye_beam.remains>4 - Cast Death Sweep
simc
death_sweep - Cast Blade Dance
simc
blade_dance - Cast Immolation Aura if there is more than one enemy and (you have A Fire Inside talented or you have Burning Wound talented)
simc
immolation_aura,if=active_enemies>1&(talent.a_fire_inside|talent.burning_wound) - Cast Annihilation
simc
annihilation - Cast Felblade if you use the Felscarred hero talents and you have 100 or less Fury
simc
felblade,if=hero_tree.felscarred&fury<=100 - Cast Chaos Strike
simc
chaos_strike - Cast Felblade
simc
felblade - Cast Immolation Aura
simc
immolation_aura - Cast Arcane Torrent
simc
arcane_torrent
Read from ActionPriorityLists/default/demonhunter_havoc.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 (1 steps)
Before the pull1 line
- Record your stats before the pull (sim bookkeeping)
simc
snapshot_stats
The main loop3 lines
- Start auto-attacking
simc
auto_attack go through Cooldowns, then carry on below if nothing there fits
simc
call_action_list,name=cooldownsCooldowns7 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 Metamorphosis
simc
metamorphosis
go through Assisted Combat, then carry on below if nothing there fits
simc
call_action_list,name=assisted_combatAssisted Combat19 lines
- Cast MetamorphosisThis is the default action priority list from the game's Assisted Combat system. This is for Blizzard automation and is not included in the game's Assisted Combat system.
simc
metamorphosis - Cast Blade Dance if Metamorphosis is active and Essence Break is active on the target and your distance to the target is at most 5
simc
blade_dance,if=buff.metamorphosis.up&debuff.essence_break.up&target.distance<=5 - Cast Chaos Strike if Metamorphosis is active and Essence Break is active on the target
simc
chaos_strike,if=buff.metamorphosis.up&debuff.essence_break.up - Cast Throw Glaive if Reaver's Glaive is active
simc
throw_glaive,if=buff.reavers_glaive.up - Cast Immolation Aura if there are more than 3 enemies
simc
immolation_aura,if=active_enemies>3 - Cast Essence Break if your distance to the target is at most 8 and Metamorphosis is active and Blade Dance is off cooldown
simc
essence_break,if=target.distance<=8&buff.metamorphosis.up&cooldown.blade_dance.ready - Cast Blade Dance if Metamorphosis is active and your distance to the target is at most 5
simc
blade_dance,if=buff.metamorphosis.up&target.distance<=5 - Cast The HuntThis is for Blizzard automation and is not included in the game's Assisted Combat system.
simc
the_hunt - Cast Eye Beam if your distance to the target is at most 8
simc
eye_beam,if=target.distance<=8 - Cast Blade Dance if your distance to the target is at most 5
simc
blade_dance,if=target.distance<=5 - Cast Chaos Strike if Metamorphosis is active
simc
chaos_strike,if=buff.metamorphosis.up - Cast Vengeful Retreat if you have Inertia talentedThis is for Blizzard automation and is not included in the game's Assisted Combat system.
simc
vengeful_retreat,if=talent.inertia - Cast Vengeful Retreat if you have Exergy talentedThis is for Blizzard automation and is not included in the game's Assisted Combat system.
simc
vengeful_retreat,if=talent.exergy - Cast FelbladeThis is for Blizzard automation and is not included in the game's Assisted Combat system.
simc
felblade - Cast Fel Rush if Inertia Trigger is activeThis is for Blizzard automation and is not included in the game's Assisted Combat system.
simc
fel_rush,if=buff.inertia_trigger.up - Cast Chaos Strike
simc
chaos_strike - Cast Immolation Aura if there is more than one enemy
simc
immolation_aura,if=active_enemies>1 - Cast Throw Glaive
simc
throw_glaive
Read from ActionPriorityLists/assisted_combat/demonhunter_havoc.simc in simulationcraft/simc at 1860cd1d5763, the commit this engine build runs.