Cogspark Works · Rotation
Shadow Priest
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
- AoE (maybe)
- AoE variables (maybe)
- Main
- Cooldowns (maybe)
- Trinkets (maybe)
- Heal for tof (maybe)
Before the pull, done once before the fight starts (12 steps)
Before the pull12 lines
- Record your stats before the pull (sim bookkeeping)
simc
snapshot_stats - Cast Shadowform if Shadowform isn't active
simc
shadowform,if=!buff.shadowform.up - Set trinket 1 buffs to true when the following holds, otherwise falseall of these:
- 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
- trinket 1 is Signet of the Priory
- trinket 1's cooldown is at least 20 s
simc
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) - any of these:
- Set trinket 2 buffs to true when the following holds, otherwise falseall of these:
- 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
- trinket 2 is Signet of the Priory
- trinket 2's cooldown is at least 20 s
simc
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) - any of these:
- Reset dr force prio to its starting valuedr force prio starts each fight at 0
simc
variable,name=dr_force_prio,default=0,op=reset - Reset me force prio to its starting valueme force prio starts each fight at 0
simc
variable,name=me_force_prio,default=0,op=reset - Reset max vts to its starting valuemax vts starts each fight at 12
simc
variable,name=max_vts,default=12,op=reset - Reset is vt possible to its starting valueis vt possible starts each fight at 0
simc
variable,name=is_vt_possible,default=0,op=reset - Cast Arcane Torrent
simc
arcane_torrent - Drink a potion if your potion is Liquid Luster
simc
potion,if=potion.liquid_luster - Cast Mind Blast if you have the 4-piece set bonus (mid2)Crushing Void from Tentacle Slam is reset on pull, open with Mind Blast instead.
simc
mind_blast,if=set_bonus.mid2_4pc - Cast Tentacle Slam
simc
tentacle_slam
The main loop3 lines
- Set holding tentacle slam to true when the following holds, otherwise falsethe next add wave starts within 15 s
simc
variable,name=holding_tentacle_slam,op=set,value=raid_event.adds.in<15 Is it true that there are more than 2 enemies?Not set
If so, go through AoE, then carry on below if nothing there fits
simc
call_action_list,name=aoe,if=active_enemies>2switch to Main, and nothing below is checked
simc
run_action_list,name=mainMain25 lines
- Set dots up to true when the following holds, otherwise falseall of these:Only updated when there are fewer than 3 enemies
- the number of enemies with Vampiric Touch is the number of enemies
- the number of enemies with Shadow Word: Pain is at least the number of enemies with Vampiric Touch
simc
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 Is it true that the fight ends within 30 s or (the target lives more than 15 s longer and (holding tentacle slam is false or there are more than 2 enemies) and dots up is true)?Not set
If so, go through Cooldowns, then carry on below if nothing there fits
simc
call_action_list,name=cds,if=fight_remains<30|target.time_to_die>15&(!variable.holding_tentacle_slam|active_enemies>2)&variable.dots_up- Cast Shadow Word: Death if (
priest.force_devour_matteror the target has an absorb shield) and you have Devour Matter talentedtarget on the enemy with the highest score of: (100 if the target is at or below 20% health, else 0) plus (1 if Shadow Word: Madness is on the target, else 0)High Priority Shadow Word: Death when Devour Matter is active (target shielded or forced)simc
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 - Cast Tentacle Slam if Vampiric Touch isn't on the target and the target lives at least 10 s longer and Vampiric Touch is on fewer than 5 enemiestarget on the enemy with the lowest time left on Vampiric Touch
simc
tentacle_slam,target_if=min:dot.vampiric_touch.remains,if=!dot.vampiric_touch.ticking&target.time_to_die>=10&active_dot.vampiric_touch<5 - Cast Vampiric Touch if Vampiric Touch isn't on the target and the target lives at least 10 s longer and Vampiric Touch is on fewer than 5 enemiestarget on the enemy with the lowest time left on Vampiric Touch
simc
vampiric_touch,target_if=min:dot.vampiric_touch.remains,if=!dot.vampiric_touch.ticking&target.time_to_die>=10&active_dot.vampiric_touch<5 - Cast Shadow Word: Madness if (Shadow Word: Madness is on 1 or fewer enemies and Shadow Word: Madness has at most one global cooldown left on the target, or isn't on it) or (you are 35 or less Insanity below maximum and (Voidform has more than 25 s of cooldown left or the target dies within 25 s or there is more than one enemy or you are 5 or less Insanity below maximum)) or Mind Devourer is active and you've had time to react to it or (the fight has no add waves and the target dies within 10 s) or (Entropic Rift is active and (Voidform has at least 75 s of cooldown left or you don't have Ancient Madness talented)) or Voidform is activetarget on the enemy with the highest time until the target dies times (1 if (Shadow Word: Madness has at most 2 global cooldowns left on the target, or isn't on it or dr force prio is true or (you don't have Distorted Reality talented and me force prio is true)), else 0)
simc
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 - Cast Tentacle Slam if (Vampiric Touch is missing from the target or due for a refresh and (Tentacle Slam isn't in flight or the number of enemies with Vampiric Touch plus 6 is less than the number of enemies)) or Tentacle Slam is fully recharged within 2 global cooldownstarget on the enemy with the lowest time left on Vampiric Touch
simc
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 - Cast Void Torrent if holding tentacle slam is false and dots up is truetarget on the enemy with the highest score of: (the time left on Shadow Word: Madness times 1000) plus the time until the target diesUse Void Torrent if it will get near full Mastery Value
simc
void_torrent,target_if=max:(dot.shadow_word_madness.remains*1000+target.time_to_die),if=!variable.holding_tentacle_slam&variable.dots_up - Cast Shadow Word: Pain if you have Invoked Nightmare talented and Shadow Word: Pain is missing from the target or due for a refresh and the target lives more than 12 s longer and (Vampiric Touch is on the target or Tentacle Slam is in flight)target on the enemy with the highest score of: (100000 if Shadow Word: Pain is missing from the target or due for a refresh, else 0) plus the time until the target dies plus (10000 if Vampiric Touch is on the target, else 0)Put out Shadow Word: Pain on enemies that will live at least 12s as a filler when talented into Invoked Nightmare.
simc
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) - Cast Void Volley if Voidform is off cooldown
simc
void_volley,if=cooldown.voidform.up - Cast Void Blasttarget on the enemy with the highest score of: (the time left on Shadow Word: Madness times 1000) plus the time until the target dies
simc
void_blast,target_if=max:(dot.shadow_word_madness.remains*1000+target.time_to_die) - Cast Mind Blast if (Mind Devourer isn't active, or only just appeared or you don't have Mind Devourer talented) and (you don't have Void Blast talented or you don't have Thought Harvester talented or Void Torrent has at least 2 global cooldowns of cooldown left or holding tentacle slam is true or dots up is false)target on the enemy with the highest time left on Shadow Word: Madness
simc
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) - Cast Mind Flay: Insanitytarget on the enemy with the highest time left on Shadow Word: Madness
simc
mind_flay_insanity,target_if=max:dot.shadow_word_madness.remains - Cast Tentacle Slam if (you have Void Apparitions talented or you have Maddening Tentacles talented) and (the next add wave starts in more than 30 s (or never) or (the next add wave starts in more than 5 s (or never) and Tentacle Slam is fully recharged within 2 global cooldowns))target on the enemy with the lowest time left on Vampiric TouchUse Tentacle Slam for Void Apparitions or Maddening Tentacles value, holding for adds if needed
simc
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) - Cast Vampiric Touch if Vampiric Touch is missing from the target or due for a refresh and the target lives more than 12 s longer and (Vampiric Touch is on the target or dots up is false) and (max vts is more than 0 or there is a single enemy) and (the time until Tentacle Slam can be used is at least the time left on Vampiric Touch or holding tentacle slam is true or you don't know Tentacle Slam)target on the enemy with the highest score of: ((10000 if Vampiric Touch is missing from the target or due for a refresh, else 0) plus the time until the target dies) times (1 if (Vampiric Touch is on the target or dots up is false), else 0)Put out Vampiric Touch on enemies that will live at least 12s and Tentacle Slam is not available soon
simc
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) Is it true that Twist of Fate isn't active and Twist Of Fate Can Trigger On Ally Heal is active and you have Halo talented?Not set
If so, go through Heal for tof, then carry on below if nothing there fits
Healing spell action list for proccing Twist of Fate. Set priest.twist_of_fate_heal_rppm=<rppm> to make this be used.simc
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- Cast Vampiric Touch if Vampiric Touch is missing from the target or due for a refresh and the target lives more than 12 s longertarget on the enemy with the highest score of: (10000 if Vampiric Touch is missing from the target or due for a refresh, else 0) plus the time until the target diesPut out Vampiric Touch on enemies that will live at least 12s as a filler action.
simc
vampiric_touch,target_if=max:(refreshable*10000+target.time_to_die),if=refreshable&target.time_to_die>12 - Cast Shadow Word: Death if ((your Mindbender is out or your Voidwraith is out or your Shadowfiend is out) and you have Inescapable Torment talented) or (the target is in its execute phase (below 20% health, or below 35% with Deathspeaker) and you have Shadowfiend talented and you have Idol of Y'Shaarj talented)target on the enemy with the lowest target's health
simc
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 - Cast Shadow Word: Death if the target is in its execute phase (below 20% health, or below 35% with Deathspeaker)target on the enemy with the lowest target's health
simc
shadow_word_death,target_if=min:target.health.pct,if=(target.health.pct<(20+15*talent.deathspeaker)) - Cast Void Volley if you don't have Resonant Energy talented or Voidform comes off cooldown within 60 s or Voidform is active or Resonant Energy Damage is active and you've had time to react to it or Crushing Void has 4 or more stacks or the fight ends within 45 sBank 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
simc
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 - Cast Mind Flaytarget on the enemy with the highest time left on Shadow Word: MadnessStop channeling when the ticks Mind Flay has dealt is at least 2 and something higher in the list is ready, without waiting for the global cooldownRecast it on its last tick to keep the channel going
simc
mind_flay,target_if=max:dot.shadow_word_madness.remains,chain=1,interrupt_immediate=1,interrupt_if=ticks>=2,interrupt_global=1 - Cast Tentacle Slam if the next add wave starts in more than 20 s (or never)Use Tentacle Slam while moving as a low-priority action when adds will not spawn in 20 seconds.
simc
tentacle_slam,if=raid_event.adds.in>20 - Cast Shadow Word: Deathtarget on the first enemy where the target is below 20% healthUse Shadow Word: Death while moving as a low-priority action in execute
simc
shadow_word_death,target_if=target.health.pct<20 - Cast Shadow Word: Deathtarget on the enemy with the highest time left on Shadow Word: MadnessUse Shadow Word: Death while moving as a low-priority action
simc
shadow_word_death,target_if=max:dot.shadow_word_madness.remains - Cast Shadow Word: Paintarget on the enemy with the lowest time left on Shadow Word: PainUse Shadow Word: Pain while moving as a low-priority action
simc
shadow_word_pain,target_if=min:remains
Read from ActionPriorityLists/default/priest_shadow.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 (2 steps)
Before the pull2 lines
- Record your stats before the pull (sim bookkeeping)
simc
snapshot_stats - Cast Shadowform if Shadowform isn't active
simc
shadowform,if=!buff.shadowform.up
The main loop2 lines
go through Cooldowns, then carry on below if nothing there fits
simc
call_action_list,name=cooldownsCooldowns8 lines
- Drink a potionSome cooldowns are not used by the Assisted Combat system. This simple default cooldown usage has been provided by simc.
simc
potion - Cast Blood Fury
simc
blood_fury - Cast Berserking
simc
berserking - Cast Fireblood
simc
fireblood - Cast Ancestral Call
simc
ancestral_call - Use your trinkets if Voidform is active
simc
use_items,if=buff.voidform.up - Cast Voidform if Shadow Word: Pain is on the target and Vampiric Touch is on the target
simc
voidform,if=dot.shadow_word_pain.ticking&dot.vampiric_touch.ticking - Cast Power Infusion if Voidform is active
simc
power_infusion,if=buff.voidform.up
go through Assisted Combat, then carry on below if nothing there fits
simc
call_action_list,name=assisted_combatAssisted Combat29 lines
- Cast Power Word: Fortitude if Power Word: Fortitude isn't activeThis is the default action priority list from the game's Assisted Combat system.
simc
power_word_fortitude,if=aura.power_word_fortitude.down - Cast Shadowform if Shadowform isn't active and Voidform isn't active
simc
shadowform,if=buff.shadowform.down&buff.voidform.down - Cast Tentacle Slam if Tentacle Slam has 2 or more charges
simc
tentacle_slam,if=charges>=2 - Cast Tentacle Slam if there are 2 or fewer enemies and Vampiric Touch isn't on the target and Tentacle Slam isn't in flight
simc
tentacle_slam,if=active_enemies<=2&!dot.vampiric_touch.ticking&(!action.tentacle_slam.in_flight) - Cast Tentacle Slam if there are more than 3 enemies
simc
tentacle_slam,if=active_enemies>3 - Cast Vampiric Touch if Vampiric Touch isn't on the target and Tentacle Slam isn't in flight
simc
vampiric_touch,if=!dot.vampiric_touch.ticking&(!action.tentacle_slam.in_flight) - Cast Shadow Word: Pain if Shadow Word: Pain isn't on the target and you don't have Misery talented
simc
shadow_word_pain,if=!dot.shadow_word_pain.ticking&!talent.misery - Cast Voidform if Voidform isn't active
simc
voidform,if=buff.voidform.down - Cast Void Volley if Voidform is active
simc
void_volley,if=buff.voidform.up - Cast Shadow Word: Madness if Shadow Word: Madness isn't on the target
simc
shadow_word_madness,if=!dot.shadow_word_madness.ticking - Cast Shadow Word: Madness if Shadow Word: Madness has at most 1.5 s left on the target, or isn't on it
simc
shadow_word_madness,if=dot.shadow_word_madness.remains<=1.5 - Cast Shadow Word: Madness if you have 90 or more Insanity and you don't have Voidtouched talented
simc
shadow_word_madness,if=insanity>=90&!talent.voidtouched - Cast Shadow Word: Madness if you have 140 or more Insanity and you have Voidtouched talented
simc
shadow_word_madness,if=insanity>=140&talent.voidtouched - Cast Halo
simc
halo - Cast Void Blast if Entropic Rift is active and Void Blast has 2 or more charges
simc
void_blast,if=buff.entropic_rift.up&charges>=2,cooldown_allow_casting_success=1 - Cast Void Blast if Entropic Rift is active
simc
void_blast,if=buff.entropic_rift.up - Cast Void Volley if Voidform is active
simc
void_volley,if=buff.voidform.up - Cast Voidform if Crushing Void is active
simc
voidform,if=buff.crushing_void.up - Cast Mind Blast if you don't have Void Blast talented and Mind Blast has 2 or more charges
simc
mind_blast,if=!talent.void_blast&charges>=2,cooldown_allow_casting_success=1 - Cast Mind Blast if you don't have Void Blast talented
simc
mind_blast,if=!talent.void_blast - Cast Mind Blast if you have Void Blast talented and Mind Blast has 2 or more charges and Void Torrent comes off cooldown within 5 s
simc
mind_blast,if=talent.void_blast&charges>=2&cooldown.void_torrent.remains<=5 - Cast Mind Blast if you have Void Blast talented and Void Torrent has at least 5 s of cooldown left
simc
mind_blast,if=talent.void_blast&cooldown.void_torrent.remains>=5 - Cast Void Torrent
simc
void_torrent - Cast Shadow Word: Death if you have Deathspeaker talented and the target is at or below 35% health
simc
shadow_word_death,if=talent.deathspeaker&target.health.pct<=35 - Cast Shadow Word: Death if the target is at or below 20% health
simc
shadow_word_death,if=target.health.pct<=20 - Cast Shadow Word: Madness
simc
shadow_word_madness - Cast Mind Flay: Insanity
simc
mind_flay_insanity,cooldown_allow_casting_success=1 - Cast Mind Flay
simc
mind_flay,cooldown_allow_casting_success=1 - Cast Mind Blast
simc
mind_blast
Read from ActionPriorityLists/assisted_combat/priest_shadow.simc in simulationcraft/simc at 1860cd1d5763, the commit this engine build runs.