Vengeance Demon Hunter
PvE guide, updated for Patch 12.1.5
Tank Rotation & Cooldowns
How to play Vengeance Demon Hunter in each rotation style: the full rotation SimulationCraft sims play by default, and the game’s Assisted Highlight and One Button rotations beside it.
Rotation style comparison
How Vengeance Demon Hunter’s DPS compares when using the game’s assisted modes instead of the full rotation, based on Single Target simulations.
- Full rotationBaseline
- Assisted Highlight-32.6%
- One Button-33.9%
The full rotation is the one SimulationCraft’s sims play by default. Its priority list is SimC’s own for the spec, read here for one build and one kind of fight.
Rotation
Beta15 abilities- 1Disrupt
- 2Infernal Strike
- 3Demon Spikes
- 4Soul Cleave
- 5Fiery Brand
- 6Fracture
- 7Spirit Bomb
- 8FelbladeWhen ready
- 9Immolation AuraWhen ready
- 10Soul Carver
- 11Sigil of Spite
- 12Sigil of FlameWhen ready
- 13Throw GlaiveWhen ready
- 14Metamorphosis
- 15Fel Devastation
Every step also needs the ability off cooldown and affordable. Range checks are left out. A blank Targets cell means any number of targets.
Before the pull
Things to do before entering combat.
Cooldowns
When each cooldown was used across the sample fight, so you can see how often each comes back and which ones line up.
Sample opener
One simulated fight from the start, played by this list on the profile in the Gear section with the guide’s Single target build, whichever build the list above is read for. Procs and timing change the order from fight to fight, so use it to get a feel for the start rather than as a script.
The full priority list
simc@ff0d07fEverything above is read from this SimulationCraft list, including the steps the page hides (the potion and on-use items) and the branches your build and fight leave out.
# This default action priority list is automatically created based on your character. # It is a attempt to provide you with a action list that is both simple and practicable, # while resulting in a meaningful and good simulation. It may not result in the absolutely highest possible dps. # Feel free to edit, adapt and improve it to your own needs. # SimulationCraft is always looking for updates and improvements to the default action lists. # Executed before combat begins. Accepts non-harmful actions only. actions.precombat=snapshot_stats actions.precombat+=/sigil_of_flame actions.precombat+=/sigil_of_spite,if=hero_tree.aldrachi_reaver|talent.soul_carver actions.precombat+=/immolation_aura # Executed every time the actor is available. actions=variable,name=aoe,value=spell_targets.spirit_bomb>=3 actions+=/variable,name=execute,value=fight_remains<20 actions+=/variable,name=is_dungeon,value=fight_style.dungeonroute|fight_style.dungeonslice actions+=/cycling_variable,name=dung_pull_ttd,op=reset actions+=/cycling_variable,name=dung_pull_ttd,op=max,value=target.time_to_die actions+=/variable,name=dung_next_pull,value=variable.is_dungeon&raid_event.adds.exists&raid_event.pull.remains<12&(raid_event.adds.has_boss|raid_event.adds.count>=3) actions+=/variable,name=dung_cd_ok,value=variable.execute|!variable.is_dungeon|(variable.dung_pull_ttd>12&!variable.dung_next_pull) actions+=/variable,name=dung_meta_ok,value=variable.execute|!variable.is_dungeon|(variable.dung_pull_ttd>(15-5*hero_tree.annihilator)&!variable.dung_next_pull) actions+=/variable,name=trinket_1_buffs,value=trinket.1.has_use_buff|(trinket.1.has_buff.agility|trinket.1.has_buff.mastery|trinket.1.has_buff.versatility|trinket.1.has_buff.haste|trinket.1.has_buff.crit|trinket.1.has_buff.attack_power) actions+=/variable,name=trinket_2_buffs,value=trinket.2.has_use_buff|(trinket.2.has_buff.agility|trinket.2.has_buff.mastery|trinket.2.has_buff.versatility|trinket.2.has_buff.haste|trinket.2.has_buff.crit|trinket.2.has_buff.attack_power) actions+=/variable,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) actions+=/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 actions+=/variable,name=fiery_demise_active,value=talent.fiery_demise&dot.fiery_brand.ticking actions+=/variable,name=fragment_target,op=setif,value=5+apex.2,value_else=variable.fiery_demise_active*3+!variable.fiery_demise_active*(5-buff.metamorphosis.up),condition=hero_tree.aldrachi_reaver actions+=/auto_attack actions+=/disrupt,if=target.debuff.casting.react actions+=/infernal_strike,use_off_gcd=1 actions+=/demon_spikes,use_off_gcd=1,if=!buff.demon_spikes.up&in_combat actions+=/run_action_list,name=aldrachi_reaver,if=hero_tree.aldrachi_reaver actions+=/run_action_list,name=annihilator,if=hero_tree.annihilator actions.aldrachi_reaver=sigil_of_flame actions.aldrachi_reaver+=/immolation_aura,if=in_combat actions.aldrachi_reaver+=/metamorphosis,use_off_gcd=1,if=buff.untethered_rage.up|(!buff.metamorphosis.up&variable.dung_meta_ok) actions.aldrachi_reaver+=/soul_cleave,if=!variable.aoe&soul_fragments.total>=variable.fragment_target&!(buff.glaive_flurry.up&buff.rending_strike.up&variable.prio_slashes) # Seconds left on the Reaver's Mark stacks applied by the last Fracture-second cycle actions.aldrachi_reaver+=/variable,name=anchor_rem,value=(variable.anchor_at>0)*(20-(time-variable.anchor_at)) # Slash-second only while the Mark has time to spare; otherwise go Fracture-second to refresh it actions.aldrachi_reaver+=/variable,name=prio_slashes,value=variable.aoe|variable.execute|variable.anchor_rem>11-3*(talent.soul_carver&cooldown.soul_carver.remains<6)-1.5*(talent.sigil_of_spite&cooldown.sigil_of_spite.remains<6) actions.aldrachi_reaver+=/call_action_list,name=trinkets actions.aldrachi_reaver+=/reavers_glaive,if=!buff.rending_strike.up&!buff.glaive_flurry.up&(variable.execute|variable.prio_slashes|variable.anchor_rem<=4*gcd.max|buff.art_of_the_glaive.stack+soul_fragments>=(18-buff.metamorphosis.up)) actions.aldrachi_reaver+=/call_action_list,name=ar_glaive_cycle,if=buff.rending_strike.up|buff.glaive_flurry.up actions.aldrachi_reaver+=/fiery_brand,if=charges>=2|!variable.fiery_demise_active|variable.execute actions.aldrachi_reaver+=/sigil_of_spite,if=variable.dung_cd_ok&!buff.reavers_glaive.up actions.aldrachi_reaver+=/call_action_list,name=ar_quick_consume,if=buff.art_of_the_glaive.stack+soul_fragments>=20|variable.aoe&soul_fragments>=6 actions.aldrachi_reaver+=/fel_devastation,if=variable.dung_cd_ok&fury>85&(soul_fragments.inactive>1|variable.aoe) actions.aldrachi_reaver+=/soul_carver,if=variable.dung_cd_ok&(variable.fiery_demise_active|variable.execute) actions.aldrachi_reaver+=/call_action_list,name=ar_fillers actions.anni_cooldowns=spirit_bomb,if=soul_fragments>=variable.fragment_target actions.anni_cooldowns+=/sigil_of_spite,if=soul_fragments<=2+talent.soul_sigils actions.anni_cooldowns+=/call_action_list,name=anni_generate_fury,if=cooldown.fel_devastation.up&fury<50 actions.anni_filler_no_spend=immolation_aura actions.anni_filler_no_spend+=/sigil_of_flame actions.anni_filler_no_spend+=/felblade actions.anni_filler_no_spend+=/soul_carver,if=!talent.sigil_of_spite|!action.sigil_of_spite.placed actions.anni_filler_no_spend+=/sigil_of_spite actions.anni_filler_no_spend+=/fracture actions.anni_filler_no_spend+=/throw_glaive actions.anni_generate_fury=immolation_aura actions.anni_generate_fury+=/sigil_of_flame actions.anni_generate_fury+=/felblade actions.anni_generate_fury+=/fracture actions.anni_meta_entry=metamorphosis,use_off_gcd=1,if=gcd.remains=0&buff.untethered_rage.up&!buff.voidfall_spending.up&cooldown.fracture.charges>=1 actions.anni_meta_entry+=/sigil_of_spite,if=!cooldown.sigil_of_spite.up actions.anni_meta_entry+=/spirit_bomb,if=soul_fragments>=variable.fragment_target&fury>=60 actions.anni_meta_entry+=/potion,use_off_gcd=1,if=(variable.fiery_demise_active|variable.execute)&(!variable.is_dungeon|in_boss_encounter) actions.anni_meta_entry+=/call_action_list,name=trinkets actions.anni_meta_entry+=/invoke_external_buff,name=power_infusion actions.anni_meta_entry+=/call_action_list,name=anni_pre_meta_spb,if=cooldown.spirit_bomb.remains<3*gcd.max&soul_fragments.total<variable.fragment_target actions.anni_meta_entry+=/fiery_brand,if=charges>=2|!variable.fiery_demise_active actions.anni_meta_entry+=/sigil_of_spite,if=soul_fragments.total<variable.fragment_target actions.anni_meta_entry+=/call_action_list,name=anni_generate_fury,if=fury<75&cooldown.metamorphosis.up&cooldown.spirit_bomb.remains>gcd.max*3 actions.anni_meta_entry+=/metamorphosis,use_off_gcd=1,if=variable.dung_meta_ok&gcd.remains=0&cooldown.spirit_bomb.remains>gcd.max*3&(soul_fragments.total>=variable.fragment_target|(talent.sigil_of_spite&action.sigil_of_spite.placed)) actions.anni_meta_entry+=/call_action_list,name=anni_filler_no_spend actions.anni_pre_meta_spb=fracture actions.anni_pre_meta_spb+=/immolation_aura,if=variable.aoe actions.anni_pre_meta_spb+=/fiery_brand,if=charges>=2|!variable.fiery_demise_active actions.anni_pre_meta_spb+=/soul_carver,if=(cooldown.soul_carver.up+cooldown.sigil_of_spite.up+cooldown.fel_devastation.up)>=2 actions.anni_pre_meta_spb+=/fel_devastation,if=(cooldown.soul_carver.up+cooldown.sigil_of_spite.up+cooldown.fel_devastation.up)>=2 actions.anni_pre_meta_spb+=/felblade # Soul Cleave right after the 3-stack Spirit Bomb lands inside its window for a bonus meteor actions.anni_voidfall_spending=soul_cleave,if=prev_gcd.1.spirit_bomb&buff.voidfall_spending.stack=3 actions.anni_voidfall_spending+=/fiery_brand,if=charges>=2|!variable.fiery_demise_active actions.anni_voidfall_spending+=/fracture,if=buff.voidfall_spending.stack=buff.voidfall_spending.max_stack&cooldown.spirit_bomb.ready&soul_fragments.total>=variable.fragment_target&fury>=45&fury<75 actions.anni_voidfall_spending+=/soul_cleave,if=cooldown.spirit_bomb.remains>gcd.max*4 actions.anni_voidfall_spending+=/spirit_bomb,if=(soul_fragments.total>=variable.fragment_target|buff.voidfall_spending.stack=3)&(buff.voidfall_spending.stack<3|fury>=75) actions.anni_voidfall_spending+=/felblade,if=(fury<40&cooldown.spirit_bomb.remains<=gcd.max)|(fury<25&cooldown.spirit_bomb.remains>gcd.max) actions.anni_voidfall_spending+=/immolation_aura,if=(fury<40&cooldown.spirit_bomb.remains<=gcd.max)|(fury<25&cooldown.spirit_bomb.remains>gcd.max) actions.anni_voidfall_spending+=/soul_carver,if=(cooldown.spirit_bomb.remains<=gcd.max)&soul_fragments.total<variable.fragment_target&(!talent.sigil_of_spite|!action.sigil_of_spite.placed) actions.anni_voidfall_spending+=/sigil_of_spite,if=(cooldown.spirit_bomb.remains<=gcd.max)&soul_fragments.total<variable.fragment_target actions.anni_voidfall_spending+=/call_action_list,name=anni_filler_no_spend actions.annihilator=invoke_external_buff,name=power_infusion,if=buff.voidfall_spending.stack=3|variable.execute actions.annihilator+=/call_action_list,name=anni_voidfall_spending,if=buff.voidfall_spending.up actions.annihilator+=/sigil_of_flame,if=soul_fragments<=2+talent.soul_sigils actions.annihilator+=/fracture,if=buff.voidfall_building.stack>=2&soul_fragments.total>=variable.fragment_target actions.annihilator+=/call_action_list,name=anni_generate_fury,if=buff.voidfall_building.stack>=2&cooldown.fracture.charges_fractional>=0.75 actions.annihilator+=/call_action_list,name=anni_meta_entry,if=buff.untethered_rage.up|(variable.dung_meta_ok&cooldown.metamorphosis.remains<3*gcd.max) actions.annihilator+=/call_action_list,name=anni_cooldowns,if=variable.dung_cd_ok&(!talent.fiery_demise|variable.fiery_demise_active|cooldown.fiery_brand.remains>20|variable.execute) actions.annihilator+=/fracture,if=full_recharge_time<gcd.max actions.annihilator+=/immolation_aura,if=(talent.fallout&variable.aoe)|(talent.charred_flesh&variable.fiery_demise_active) actions.annihilator+=/spirit_bomb,if=soul_fragments>=variable.fragment_target actions.annihilator+=/immolation_aura actions.annihilator+=/sigil_of_flame actions.annihilator+=/fracture,if=soul_fragments.total<=4|fury<40 actions.annihilator+=/soul_cleave,if=!(apex.3&!buff.untethered_rage.up&buff.seething_anger.stack>=10)&!cooldown.metamorphosis.up|(!talent.sigil_of_spite|!action.sigil_of_spite.placed) actions.annihilator+=/felblade actions.annihilator+=/throw_glaive actions.ar_fillers=fracture,if=buff.warblades_hunger.stack actions.ar_fillers+=/soul_cleave,if=(!variable.aoe|fury>=2*action.soul_cleave.cost|cooldown.fracture.charges>=1|cooldown.fracture.remains<=gcd.max)&!(buff.glaive_flurry.up&buff.rending_strike.up&variable.prio_slashes) actions.ar_fillers+=/fracture actions.ar_fillers+=/felblade actions.ar_fillers+=/fel_devastation actions.ar_glaive_cycle=potion,use_off_gcd=1 actions.ar_glaive_cycle+=/invoke_external_buff,name=power_infusion actions.ar_glaive_cycle+=/variable,name=anchor_at,value=time,if=buff.rending_strike.up&!buff.glaive_flurry.up actions.ar_glaive_cycle+=/fracture,if=buff.rending_strike.up&(variable.prio_slashes|!buff.glaive_flurry.up) actions.ar_glaive_cycle+=/soul_cleave,if=buff.glaive_flurry.up&(!variable.prio_slashes|!buff.rending_strike.up) actions.ar_glaive_cycle+=/felblade actions.ar_quick_consume=spirit_bomb,if=variable.aoe actions.ar_quick_consume+=/soul_cleave,if=!variable.aoe actions.trinkets=use_item,slot=trinket1,if=variable.trinket_1_buffs&variable.dung_cd_ok&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1) actions.trinkets+=/use_item,slot=trinket2,if=variable.trinket_2_buffs&variable.dung_cd_ok&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2) actions.trinkets+=/use_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 actions.trinkets+=/use_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 actions.trinkets+=/use_item,slot=trinket1,if=variable.execute actions.trinkets+=/use_item,slot=trinket2,if=variable.execute
Is this rotation built for your talents?
The rotation follows your talent build. Sim your highest-DPS build on your own gear, for the mode and rotation style you play.