Cogspark

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.

Your situation
Enemies in range
Target health
Your talents (click: talented, not talented, not set)
More conditions (6)
the fight ends within 30 s
the target lives more than 15 s longer
holding tentacle slam is true
dots up is true
Twist of Fate is active
Twist Of Fate Can Trigger On Ally Heal is active
Checked
  1. The main loop
  2. AoE (maybe)
  3. AoE variables (maybe)
  4. Main
  5. Cooldowns (maybe)
  6. Trinkets (maybe)
  7. Heal for tof (maybe)
Before the pull, done once before the fight starts (12 steps)

Before the pull12 lines

  1. Record your stats before the pull (sim bookkeeping)
    simcsnapshot_stats
  2. Cast Shadowform if Shadowform isn't active
    simcshadowform,if=!buff.shadowform.up
  3. Set trinket 1 buffs to true when the following holds, otherwise false
    all 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
    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|trinket.1.is.signet_of_the_priory)&(trinket.1.cooldown.duration>=20)
  4. Set trinket 2 buffs to true when the following holds, otherwise false
    all 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
    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|trinket.2.is.signet_of_the_priory)&(trinket.2.cooldown.duration>=20)
  5. Reset dr force prio to its starting valuedr force prio starts each fight at 0
    simcvariable,name=dr_force_prio,default=0,op=reset
  6. Reset me force prio to its starting valueme force prio starts each fight at 0
    simcvariable,name=me_force_prio,default=0,op=reset
  7. Reset max vts to its starting valuemax vts starts each fight at 12
    simcvariable,name=max_vts,default=12,op=reset
  8. Reset is vt possible to its starting valueis vt possible starts each fight at 0
    simcvariable,name=is_vt_possible,default=0,op=reset
  9. Cast Arcane Torrent
    simcarcane_torrent
  10. Drink a potion if your potion is Liquid Luster
    simcpotion,if=potion.liquid_luster
  11. 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.
    simcmind_blast,if=set_bonus.mid2_4pc
  12. Cast Tentacle Slam
    simctentacle_slam

The main loop3 lines

  1. Set holding tentacle slam to true when the following holds, otherwise false
    the next add wave starts within 15 s
    simcvariable,name=holding_tentacle_slam,op=set,value=raid_event.adds.in<15
  2. 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

    simccall_action_list,name=aoe,if=active_enemies>2
  3. switch to Main, and nothing below is checked

    simcrun_action_list,name=main

    Main25 lines

    1. Set dots up to true when the following holds, otherwise false
      all of these:
      • 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
      Only updated when there are fewer than 3 enemies
      simcvariable,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
    2. 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

      simccall_action_list,name=cds,if=fight_remains<30|target.time_to_die>15&(!variable.holding_tentacle_slam|active_enemies>2)&variable.dots_up
    3. Cast Shadow Word: Death if (priest.force_devour_matter or 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)
      simcshadow_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
    4. 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
      simctentacle_slam,target_if=min:dot.vampiric_touch.remains,if=!dot.vampiric_touch.ticking&target.time_to_die>=10&active_dot.vampiric_touch<5
    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
      simcvampiric_touch,target_if=min:dot.vampiric_touch.remains,if=!dot.vampiric_touch.ticking&target.time_to_die>=10&active_dot.vampiric_touch<5
    6. 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)
      simcshadow_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
    7. 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
      simctentacle_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
    8. 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
      simcvoid_torrent,target_if=max:(dot.shadow_word_madness.remains*1000+target.time_to_die),if=!variable.holding_tentacle_slam&variable.dots_up
    9. 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.
      simcshadow_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)
    10. Cast Void Volley if Voidform is off cooldown
      simcvoid_volley,if=cooldown.voidform.up
    11. 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
      simcvoid_blast,target_if=max:(dot.shadow_word_madness.remains*1000+target.time_to_die)
    12. 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
      simcmind_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)
    13. Cast Mind Flay: Insanitytarget on the enemy with the highest time left on Shadow Word: Madness
      simcmind_flay_insanity,target_if=max:dot.shadow_word_madness.remains
    14. 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
      simctentacle_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)
    15. 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
      simcvampiric_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)
    16. 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.
      simccall_action_list,name=heal_for_tof,if=!buff.twist_of_fate.up&buff.twist_of_fate_can_trigger_on_ally_heal.up&talent.halo
    17. 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.
      simcvampiric_touch,target_if=max:(refreshable*10000+target.time_to_die),if=refreshable&target.time_to_die>12
    18. 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
      simcshadow_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
    19. 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
      simcshadow_word_death,target_if=min:target.health.pct,if=(target.health.pct<(20+15*talent.deathspeaker))
    20. 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
      simcvoid_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
    21. 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
      simcmind_flay,target_if=max:dot.shadow_word_madness.remains,chain=1,interrupt_immediate=1,interrupt_if=ticks>=2,interrupt_global=1
    22. 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.
      simctentacle_slam,if=raid_event.adds.in>20
    23. 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
      simcshadow_word_death,target_if=target.health.pct<20
    24. 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
      simcshadow_word_death,target_if=max:dot.shadow_word_madness.remains
    25. 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
      simcshadow_word_pain,target_if=min:remains

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