Shadow Priest
PvE guide, updated for Patch 12.1.5
DPS Rotation & Cooldowns
How to play Shadow Priest 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 Shadow Priest’s DPS compares when using the game’s assisted modes instead of the full rotation, based on Single Target simulations.
- Full rotationBaseline
- Assisted Highlight-28.8%
- One Button-33.6%
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
BetaShadow Priest’s list reads best as SimC writes it
With this build, 11 of its 29 rows would show an expression as SimC writes it, which is too many to follow as steps. The abilities it uses are below in the order the list first uses them, and the list itself under them.
Abilities the list uses
16 abilitiesBefore the pull
Things to do before entering combat.
- 1ShadowformShadowform not active
- 2Racial abilityWhen ready
- 3Mind BlastWith the 4-piece set bonus
- 4Tentacle SlamWhen ready
Cooldowns
When each cooldown was used across the sample fight, so you can see how often each comes back and which ones line up.
- Shadow Word: Pain5
- Halo6
- Voidform3
- Light's Potential2
- Power Infusion3
- On-use items4
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@de11f57Everything 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+=/shadowform,if=!buff.shadowform.up actions.precombat+=/variable,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|trinket.1.is.signet_of_the_priory)&(trinket.1.cooldown.duration>=20) actions.precombat+=/variable,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|trinket.2.is.signet_of_the_priory)&(trinket.2.cooldown.duration>=20) actions.precombat+=/variable,name=dr_force_prio,default=0,op=reset actions.precombat+=/variable,name=me_force_prio,default=0,op=reset actions.precombat+=/variable,name=max_vts,default=12,op=reset actions.precombat+=/variable,name=is_vt_possible,default=0,op=reset actions.precombat+=/arcane_torrent actions.precombat+=/potion,if=potion.liquid_luster # Crushing Void from Tentacle Slam is reset on pull, open with Mind Blast instead. actions.precombat+=/mind_blast,if=set_bonus.mid2_4pc actions.precombat+=/tentacle_slam # Executed every time the actor is available. actions=variable,name=holding_tentacle_slam,op=set,value=raid_event.adds.in<15 actions+=/call_action_list,name=aoe,if=active_enemies>2 actions+=/run_action_list,name=main actions.aoe=call_action_list,name=aoe_variables actions.aoe_variables=variable,name=max_vts,op=set,default=12,value=spell_targets.vampiric_touch>?12 actions.aoe_variables+=/variable,name=is_vt_possible,op=set,value=0,default=1 actions.aoe_variables+=/variable,name=is_vt_possible,op=set,value=1,target_if=max:(target.time_to_die*dot.vampiric_touch.refreshable),if=target.time_to_die>=18 # TODO: Revamp to fix undesired behavior with unstacked fights actions.aoe_variables+=/variable,name=dots_up,op=set,value=(active_dot.vampiric_touch>=variable.max_vts|!variable.is_vt_possible)&(active_dot.shadow_word_pain>=active_dot.vampiric_touch) actions.aoe_variables+=/variable,name=holding_tentacle_slam,op=set,value=(variable.max_vts-active_dot.vampiric_touch)<4&raid_event.adds.in>15|raid_event.adds.in<10&raid_event.adds.count>(variable.max_vts-active_dot.vampiric_touch),if=variable.holding_tentacle_slam&action.tentacle_slam.enabled&raid_event.adds.exists actions.aoe_variables+=/variable,name=manual_vts_applied,op=set,value=(active_dot.vampiric_touch+6*!variable.holding_tentacle_slam)>=variable.max_vts|!variable.is_vt_possible # TODO: Add holding condition for weird fight times to potion with execute actions.cds=potion,if=(((buff.voidform.up|!talent.voidform)&buff.power_infusion.up)&(fight_remains>=320|time_to_bloodlust>=320|buff.bloodlust.react)|fight_remains<=30) actions.cds+=/fireblood,if=((buff.voidform.up|!talent.voidform)&buff.power_infusion.up)|fight_remains<=8 actions.cds+=/berserking,if=((buff.voidform.up|!talent.voidform)&buff.power_infusion.up)|fight_remains<=12 actions.cds+=/blood_fury,if=((buff.voidform.up|!talent.voidform)&buff.power_infusion.up)|fight_remains<=15 actions.cds+=/ancestral_call,if=((buff.voidform.up|!talent.voidform)&buff.power_infusion.up)|fight_remains<=15 actions.cds+=/invoke_external_buff,name=power_infusion,if=(buff.voidform.up|!talent.voidform)&!buff.power_infusion.up actions.cds+=/invoke_external_buff,name=bloodlust,if=buff.power_infusion.up&fight_remains<120|fight_remains<=40 # Sync Power Infusion with Voidform actions.cds+=/power_infusion,if=(buff.voidform.up|!talent.voidform)&!buff.power_infusion.up actions.cds+=/halo actions.cds+=/use_item,name=stormbound_emblem_of_dazar,if=cooldown.voidform.remains<=2&active_dot.shadow_word_pain>=active_dot.vampiric_touch&!buff.crushing_void.up actions.cds+=/voidform,if=active_dot.shadow_word_pain>=active_dot.vampiric_touch actions.cds+=/call_action_list,name=trinkets # Use Desperate Prayer to heal up should Shadow Word: Death or other damage bring you below 75% actions.cds+=/desperate_prayer,if=health.pct<=75 # Use Holy Nova during Halo to acquire Twist of Fate when Lightburst can heal an ally and Twist of Fate is not active. actions.heal_for_tof=holy_nova,if=talent.lightburst actions.main=variable,name=dots_up,op=set,value=active_dot.vampiric_touch=active_enemies&active_dot.shadow_word_pain>=active_dot.vampiric_touch,if=active_enemies<3 actions.main+=/call_action_list,name=cds,if=fight_remains<30|target.time_to_die>15&(!variable.holding_tentacle_slam|active_enemies>2)&variable.dots_up # High Priority Shadow Word: Death when Devour Matter is active (target shielded or forced) actions.main+=/shadow_word_death,target_if=max:(target.health.pct<=20)*100+dot.shadow_word_madness.ticking,if=(priest.force_devour_matter|target.has_absorb)&talent.devour_matter actions.main+=/tentacle_slam,target_if=min:dot.vampiric_touch.remains,if=!dot.vampiric_touch.ticking&target.time_to_die>=10&active_dot.vampiric_touch<5 actions.main+=/vampiric_touch,target_if=min:dot.vampiric_touch.remains,if=!dot.vampiric_touch.ticking&target.time_to_die>=10&active_dot.vampiric_touch<5 actions.main+=/shadow_word_madness,target_if=max:target.time_to_die*(dot.shadow_word_madness.remains<=gcd.max*2|variable.dr_force_prio|!talent.distorted_reality&variable.me_force_prio),if=active_dot.shadow_word_madness<=1&dot.shadow_word_madness.remains<=gcd.max|insanity.deficit<=35&(cooldown.voidform.remains>25|target.time_to_die<25|active_enemies>1|insanity.deficit<=5)|buff.mind_devourer.react|!raid_event.adds.exists&target.time_to_die<=10|buff.entropic_rift.up&(cooldown.voidform.remains>=75|!talent.ancient_madness)|buff.voidform.up actions.main+=/tentacle_slam,target_if=min:dot.vampiric_touch.remains,if=dot.vampiric_touch.refreshable&(!in_flight|active_dot.vampiric_touch+6<active_enemies)|cooldown.tentacle_slam.full_recharge_time<=gcd.max*2 # Use Void Torrent if it will get near full Mastery Value actions.main+=/void_torrent,target_if=max:(dot.shadow_word_madness.remains*1000+target.time_to_die),if=!variable.holding_tentacle_slam&variable.dots_up # Put out Shadow Word: Pain on enemies that will live at least 12s as a filler when talented into Invoked Nightmare. actions.main+=/shadow_word_pain,target_if=max:(refreshable*100000+target.time_to_die+dot.vampiric_touch.ticking*10000),if=talent.invoked_nightmare&refreshable&target.time_to_die>12&(dot.vampiric_touch.ticking|action.tentacle_slam.in_flight) actions.main+=/void_volley,if=cooldown.voidform.up actions.main+=/void_blast,target_if=max:(dot.shadow_word_madness.remains*1000+target.time_to_die) actions.main+=/mind_blast,target_if=max:dot.shadow_word_madness.remains,if=(!buff.mind_devourer.react|!talent.mind_devourer)&(!talent.void_blast|!talent.thought_harvester|cooldown.void_torrent.remains>=gcd.max*2|variable.holding_tentacle_slam|!variable.dots_up) actions.main+=/mind_flay_insanity,target_if=max:dot.shadow_word_madness.remains # Use Tentacle Slam for Void Apparitions or Maddening Tentacles value, holding for adds if needed actions.main+=/tentacle_slam,target_if=min:dot.vampiric_touch.remains,if=(talent.void_apparitions|talent.maddening_tentacles)&(raid_event.adds.in>30|raid_event.adds.in>5&cooldown.tentacle_slam.full_recharge_time<=gcd.max*2) # Put out Vampiric Touch on enemies that will live at least 12s and Tentacle Slam is not available soon actions.main+=/vampiric_touch,target_if=max:(refreshable*10000+target.time_to_die)*(dot.vampiric_touch.ticking|!variable.dots_up),if=refreshable&target.time_to_die>12&(dot.vampiric_touch.ticking|!variable.dots_up)&(variable.max_vts>0|active_enemies=1)&(action.tentacle_slam.usable_in>=dot.vampiric_touch.remains|variable.holding_tentacle_slam|!action.tentacle_slam.enabled) # Healing spell action list for proccing Twist of Fate. Set priest.twist_of_fate_heal_rppm=<rppm> to make this be used. actions.main+=/call_action_list,name=heal_for_tof,if=!buff.twist_of_fate.up&buff.twist_of_fate_can_trigger_on_ally_heal.up&talent.halo # Put out Vampiric Touch on enemies that will live at least 12s as a filler action. actions.main+=/vampiric_touch,target_if=max:(refreshable*10000+target.time_to_die),if=refreshable&target.time_to_die>12 actions.main+=/shadow_word_death,target_if=min:target.health.pct,if=(pet.mindbender.active|pet.voidwraith.active|pet.shadowfiend.active)&talent.inescapable_torment|target.health.pct<(20+15*talent.deathspeaker)&talent.shadowfiend&talent.idol_of_yshaarj actions.main+=/shadow_word_death,target_if=min:target.health.pct,if=(target.health.pct<(20+15*talent.deathspeaker)) # Bank Void Volley charges for Resonant Energy, spending them after the proc is reaction-ready, during Voidform, near the next Voidform, at four Crushing Void stacks, or near fight end actions.main+=/void_volley,if=!talent.resonant_energy|cooldown.voidform.remains<60|buff.voidform.up|buff.resonant_energy_damage.react|buff.crushing_void.stack>=4|fight_remains<45 actions.main+=/mind_flay,target_if=max:dot.shadow_word_madness.remains,chain=1,interrupt_immediate=1,interrupt_if=ticks>=2,interrupt_global=1 # Use Tentacle Slam while moving as a low-priority action when adds will not spawn in 20 seconds. actions.main+=/tentacle_slam,if=raid_event.adds.in>20 # Use Shadow Word: Death while moving as a low-priority action in execute actions.main+=/shadow_word_death,target_if=target.health.pct<20 # Use Shadow Word: Death while moving as a low-priority action actions.main+=/shadow_word_death,target_if=max:dot.shadow_word_madness.remains # Use Shadow Word: Pain while moving as a low-priority action actions.main+=/shadow_word_pain,target_if=min:remains actions.trinkets=use_item,name=galactic_gladiators_badge_of_ferocity,if=(buff.voidform.up|buff.power_infusion.remains>=10|(talent.voidform&cooldown.voidform.remains>10))|fight_remains<20 actions.trinkets+=/use_item,name=hex_lords_dooming_idol,if=buff.power_infusion.up&buff.hex_lords_doom.stack>5|fight_remains<=30 actions.trinkets+=/use_item,name=font_of_venomous_rage actions.trinkets+=/use_item,name=vexhuls_everflowing_gland actions.trinkets+=/use_items,if=(buff.voidform.up|buff.power_infusion.remains>=10|equipped.neural_synapse_enhancer&buff.entropic_rift.up)|fight_remains<20
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.