actions.precombat+=/shadowform,if=!buff.shadowform.up actions.precombat+=/arcane_torrent actions.precombat+=/variable,name=mind_sear_cutoff,op=set,value=2 actions.precombat+=/variable,name=pool_amount,op=set,value=60 actions.precombat+=/shadow_crash,if=raid_event.adds.in>=25&spell_targets.shadow_crash<=8&boss&(spell_targets.shadow_crash>1|talent.mental_decay) actions.precombat+=/vampiric_touch,if=refreshable&(!talent.shadow_crash.enabled|spell_targets.shadow_crash>8|spell_targets.shadow_crash=1&!talent.mental_decay|!boss) actions+=/silence actions+=/variable,name=holding_crash,op=set,value=talent.shadow_crash&!action.shadow_crash.disabled&raid_event.adds.in<15 actions+=/variable,name=dots_up,op=set,value=(dot.shadow_word_pain.ticking&dot.vampiric_touch.ticking)|action.shadow_crash.in_flight&talent.whispering_shadows actions+=/variable,name=all_dots_up,op=set,value=target.time_to_die<8|(dot.shadow_word_pain.ticking&dot.vampiric_touch.ticking|action.shadow_crash.in_flight)&dot.devouring_plague.ticking actions+=/variable,name=pool_for_cds,op=set,value=(cooldown.void_eruption.remains<=gcd.max*3&talent.void_eruption|cooldown.dark_ascension.up&talent.dark_ascension)|talent.void_torrent&talent.psychic_link&cooldown.void_torrent.remains<=4&(!raid_event.adds.exists&spell_targets.vampiric_touch>1|raid_event.adds.in<=5|raid_event.adds.remains>=6&!variable.holding_crash)&!buff.voidform.up # Set vts_applied for single-target to support Mindbender entry in cds action list. actions+=/variable,name=vts_applied,op=set,value=dot.vampiric_touch.ticking actions+=/run_action_list,name=aoe,strict=1,if=active_enemies>2|spell_targets.vampiric_touch>3 actions+=/run_action_list,name=main actions.aoe+=/variable,name=max_vts,op=set,default=12,value=spell_targets.vampiric_touch>?12 actions.aoe+=/variable,name=is_vt_possible,op=set,value=true,value_else=false,condition=dot.vampiric_touch.refreshable|active_dot.vampiric_touch8 ## 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 behaviour with unstacked fights actions.aoe+=/variable,name=vts_applied,op=set,value=(active_dot.vampiric_touch+8*action.shadow_crash.in_flight&talent.whispering_shadows)>=variable.max_vts|!variable.is_vt_possible actions.aoe+=/variable,name=holding_crash,op=set,value=(variable.max_vts-active_dot.vampiric_touch)<4|raid_event.adds.in<10&raid_event.adds.count>(variable.max_vts-active_dot.vampiric_touch),if=variable.holding_crash&talent.whispering_shadows actions.aoe+=/variable,name=manual_vts_applied,op=set,value=(active_dot.vampiric_touch+8*!variable.holding_crash)>=variable.max_vts|!variable.is_vt_possible # High Priority action to put out Vampiric Touch on enemies that will live at least 18 seconds, up to 12 targets manually while prepping AoE actions.aoe+=/vampiric_touch,cycle_targets=1,if=refreshable&target.time_to_die>=18&(dot.vampiric_touch.ticking|!variable.vts_applied)&(variable.max_vts>0&!variable.manual_vts_applied&!action.shadow_crash.in_flight|!talent.whispering_shadows) # Use Shadow Crash to apply Vampiric Touch to as many adds as possible while being efficient with Vampiric Touch refresh windows actions.aoe+=/shadow_crash,cycle_targets=1,if=!variable.holding_crash&(dot.vampiric_touch.refreshable|dot.vampiric_touch.remains<=target.time_to_die&!buff.voidform.up&(raid_event.adds.in-dot.vampiric_touch.remains)<15) actions.aoe+=/call_action_list,name=cds,if=fight_remains<30|time_to_die>15&(!variable.holding_crash|active_enemies>2) # Use Shadowfiend or Mindbender on cooldown if DoTs are active and sync with Dark Ascension actions.aoe+=/mindbender,if=(dot.shadow_word_pain.ticking&variable.vts_applied|action.shadow_crash.in_flight&talent.whispering_shadows)&(fight_remains<30|time_to_die>15)&(!talent.dark_ascension|cooldown.dark_ascension.remainscast_time&active_enemies<=7&!buff.mind_devourer.up # High Priority Shadow Word: Death is Mindbender is expiring in less than 2 seconds actions.aoe+=/shadow_word_death,if=pet.fiend.remains<=2&pet.fiend.active&talent.inescapable_torment&active_enemies<=7 actions.aoe+=/void_bolt # Use Devouring Plague to maximize uptime. Short circuit if you are capping on Insanity within 20 or to get out an extra Void Bolt by extending Voidform. With Distorted Reality can maintain more than one at a time in multi-target. actions.aoe+=/devouring_plague,cycle_targets=1,if=(remains<=gcd.max|!talent.distorted_reality)&(remains<=gcd.max&!variable.pool_for_cds|insanity.deficit<=20|buff.voidform.up&cooldown.void_bolt.remains>buff.voidform.remains&cooldown.void_bolt.remains<=buff.voidform.remains+2) actions.aoe+=/vampiric_touch,cycle_targets=1,if=refreshable&target.time_to_die>=18&(dot.vampiric_touch.ticking|!variable.vts_applied)&(variable.max_vts>0&(cooldown.shadow_crash.remains>=dot.vampiric_touch.remains|variable.holding_crash)&!action.shadow_crash.in_flight|!talent.whispering_shadows) # Use Shadow Word: Death with Inescapable Torment and Mindbender active and not talented into Insidious Ire and Yogg or Deathspeaker is active actions.aoe+=/shadow_word_death,if=variable.vts_applied&talent.inescapable_torment&pet.fiend.active&((!talent.insidious_ire&!talent.idol_of_yoggsaron)|buff.deathspeaker.up) # High Priority Mind Spike: Insanity to fish for C'Thun procs when Mind Blast is not capped and Void Torrent is not available and Mindbender is not active actions.aoe+=/mind_spike_insanity,if=variable.dots_up&cooldown.mind_blast.full_recharge_time>=gcd*3&talent.idol_of_cthun&(!cooldown.void_torrent.up|!talent.void_torrent) # High Priority Mind Flay: Insanity to fish for C'Thun procs when Mind Blast is not capped and Void Torrent is not available and Mindbender is not active actions.aoe+=/mind_flay,if=buff.mind_flay_insanity.up&variable.dots_up&cooldown.mind_blast.full_recharge_time>=gcd*3&talent.idol_of_cthun&(!cooldown.void_torrent.up|!talent.void_torrent) # # Use all charges of Mind Blast if Vampiric Touch and Shadow Word: Pain are active and Mind Devourer is not active or you are prepping Void Eruption actions.aoe+=/mind_blast,if=variable.vts_applied&(!buff.mind_devourer.up|cooldown.void_eruption.up&talent.void_eruption) # Void Torrent action list for AoE actions.aoe+=/call_action_list,name=pl_torrent,if=talent.void_torrent&talent.psychic_link&cooldown.void_torrent.remains<=3&(!variable.holding_crash|raid_event.adds.count%(active_dot.vampiric_touch+raid_event.adds.count)<1.5)&((insanity>=50|dot.devouring_plague.ticking|buff.dark_reveries.up)|buff.voidform.up|buff.dark_ascension.up) actions.aoe+=/mindgames,if=active_enemies<5&dot.devouring_plague.ticking|talent.psychic_link actions.aoe+=/void_torrent,cycle_targets=1,if=!talent.psychic_link&variable.dots_up # High priority action for Mind Flay: Insanity to fish for Idol of C'Thun procs, cancel as soon as something else is more important and most of the channel has completed actions.aoe+=/mind_flay,if=buff.mind_flay_insanity.up&talent.idol_of_cthun,interrupt_if=ticks>=2,interrupt_immediate=1 actions.aoe+=/call_action_list,name=filler # TODO: Check VE/DA enter conditions based on dots actions.cds+=/potion,if=buff.voidform.up|buff.power_infusion.up|buff.dark_ascension.up&(fight_remains<=cooldown.power_infusion.remains+15)|boss&fight_remains<=30 actions.cds+=/fireblood,if=buff.power_infusion.up|boss&fight_remains<=8 actions.cds+=/berserking,if=buff.power_infusion.up|boss&fight_remains<=12 actions.cds+=/blood_fury,if=buff.power_infusion.up|boss&fight_remains<=15 actions.cds+=/ancestral_call,if=buff.power_infusion.up|boss&fight_remains<=15 # Sync Power Infusion with Voidform or Dark Ascension actions.cds+=/power_infusion,if=(buff.voidform.up|buff.dark_ascension.up) # Make sure Mindbender is active before popping Void Eruption and dump charges of Mind Blast before casting actions.cds+=/void_eruption,if=!cooldown.fiend.up&(pet.fiend.active&cooldown.fiend.remains>=4|!talent.mindbender|active_enemies>2&!talent.inescapable_torment.rank)&(cooldown.mind_blast.charges=0|time>15) # Make sure Mindbender is active before popping Dark Ascension unless you have insignificant talent points or too many targets actions.cds+=/dark_ascension,if=pet.fiend.active&cooldown.fiend.remains>=4|!talent.mindbender&!cooldown.fiend.up|active_enemies>2&!talent.inescapable_torment actions.cds+=/call_action_list,name=trinkets actions.cds+=/mindbender,if=(dot.shadow_word_pain.ticking&variable.vts_applied|action.shadow_crash.in_flight) # 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 # Cast Vampiric Touch to consume Unfurling Darkness, prefering the target with the lowest DoT duration active actions.filler+=/vampiric_touch,cycle_targets=1,if=buff.unfurling_darkness.up actions.filler+=/shadow_word_death,cycle_targets=1,if=target.health.pct<20|buff.deathspeaker.up actions.filler+=/mind_spike_insanity actions.filler+=/mind_flay,if=buff.mind_flay_insanity.up # Save up to 20s if adds are coming soon. actions.filler+=/halo,if=raid_event.adds.in>20 actions.filler+=/shadow_word_death,cycle_targets=1,if=talent.inescapable_torment&pet.fiend.active # Save up to 10s if adds are coming soon. actions.filler+=/divine_star,if=raid_event.adds.in>10 actions.filler+=/devouring_plague,if=buff.voidform.up actions.filler+=/mind_spike actions.filler+=/mind_flay,chain=1,interrupt_immediate=1,interrupt_if=ticks>=2 # Use Shadow Crash while moving as a low-priority action when adds will not come in 20 seconds. actions.filler+=/shadow_crash,if=raid_event.adds.in>20 # Use Shadow Word: Death while moving as a low-priority action in execute actions.filler+=/shadow_word_death,cycle_targets=1,if=target.health.pct<20 # Use Divine Star while moving as a low-priority action actions.filler+=/divine_star # Use Shadow Word: Death while moving as a low-priority action actions.filler+=/shadow_word_death # Use Shadow Word: Pain while moving as a low-priority action actions.filler+=/shadow_word_pain,cycle_targets=1 actions.main+=/call_action_list,name=cds,if=fight_remains<30|time_to_die>15&(!variable.holding_crash|active_enemies>2) # Use Shadowfiend and Mindbender on cooldown as long as Vampiric Touch and Shadow Word: Pain are active and sync with Dark Ascension actions.main+=/mindbender,if=variable.dots_up&(fight_remains<30|time_to_die>15)&(!talent.dark_ascension|cooldown.dark_ascension.remainscast_time&active_enemies<=7 # High Priority Shadow Word: Death is Mindbender is expiring in less than 2 seconds actions.main+=/shadow_word_death,cycle_targets=1,if=dot.devouring_plague.ticking&pet.fiend.remains<=2&pet.fiend.active&talent.inescapable_torment&active_enemies<=7 actions.main+=/void_bolt,if=variable.dots_up # Spend your Insanity on Devouring Plague at will if the fight will end in less than 10s actions.main+=/devouring_plague,if=fight_remains<=duration+4 # Use Devouring Plague to maximize uptime. Short circuit if you are capping on Insanity within 20 or to get out an extra Void Bolt by extending Voidform. With Distorted Reality can maintain more than one at a time in multi-target. actions.main+=/devouring_plague,cycle_targets=1,if=(!talent.distorted_reality|active_enemies=1|remains<=gcd.max)&((remains<=gcd.max|remains<3&cooldown.void_torrent.up)|insanity.deficit<=20|buff.voidform.up&cooldown.void_bolt.remains>buff.voidform.remains&cooldown.void_bolt.remains<=buff.voidform.remains+2) # Use Shadow Crash as long as you are not holding for adds and Vampiric Touch is within pandemic range actions.main+=/shadow_crash,if=!variable.holding_crash&dot.vampiric_touch.refreshable # Use Shadow Word: Death with Inescapable Torment and Mindbender active and not talented into Insidious Ire and Yogg or Deathspeaker is active actions.main+=/shadow_word_death,if=variable.dots_up&talent.inescapable_torment&pet.fiend.active&((!talent.insidious_ire&!talent.idol_of_yoggsaron)|buff.deathspeaker.up) # Put out Vampiric Touch on enemies that will live at least 12s and Shadow Crash is not available soon actions.main+=/vampiric_touch,cycle_targets=1,if=refreshable&target.time_to_die>=12&(cooldown.shadow_crash.remains>=dot.vampiric_touch.remains&!action.shadow_crash.in_flight|variable.holding_crash|!talent.whispering_shadows) # High Priority Mind Spike: Insanity to fish for C'Thun procs when Mind Blast is not capped and Void Torrent is not available actions.main+=/mind_spike_insanity,if=variable.dots_up&cooldown.mind_blast.full_recharge_time>=gcd*3&talent.idol_of_cthun&(!cooldown.void_torrent.up|!talent.void_torrent) # High Priority Mind Flay: Insanity to fish for C'Thun procs when Mind Blast is not capped and Void Torrent is not available actions.main+=/mind_flay,if=buff.mind_flay_insanity.up&variable.dots_up&cooldown.mind_blast.full_recharge_time>=gcd*3&talent.idol_of_cthun&(!cooldown.void_torrent.up|!talent.void_torrent) # Use all charges of Mind Blast if Vampiric Touch and Shadow Word: Pain are active and Mind Devourer is not active or you are prepping Void Eruption actions.main+=/mind_blast,if=variable.dots_up&(!buff.mind_devourer.up|cooldown.void_eruption.up&talent.void_eruption) # Void Torrent if you are not holding Shadow Crash for an add pack coming, prefer the target with the most DoTs active. Only cast if Devouring Plague is on that target and will last at least 2 seconds actions.main+=/void_torrent,cycle_targets=1,if=!variable.holding_crash&variable.all_dots_up&dot.devouring_plague.remains>=2.5 # Cast Mindgames if all DoTs will be active by the time the cast finishes actions.main+=/mindgames,cycle_targets=1,if=variable.all_dots_up&dot.devouring_plague.remains>=cast_time actions.main+=/call_action_list,name=filler actions.pl_torrent+=/void_bolt actions.pl_torrent+=/vampiric_touch,if=remains<=6&cooldown.void_torrent.remains=3&!prev_gcd.1.mind_blast actions.pl_torrent+=/void_torrent,if=dot.vampiric_touch.ticking&dot.shadow_word_pain.ticking|buff.voidform.up actions.pl_torrent+=/mindgames,if=dot.vampiric_touch.ticking&dot.shadow_word_pain.ticking&dot.devouring_plague.ticking|buff.voidform.up actions.trinkets+=/use_item,name=voidmenders_shadowgem,if=buff.power_infusion.up|boss&fight_remains<20 actions.trinkets+=/use_item,name=darkmoon_deck_box_inferno actions.trinkets+=/use_item,name=darkmoon_deck_box_rime actions.trinkets+=/use_item,name=darkmoon_deck_box_dance # Use Erupting Spear Fragment with cooldowns, adds are currently active, or the fight will end in less than 20 seconds actions.trinkets+=/use_item,name=erupting_spear_fragment,if=buff.power_infusion.up|raid_event.adds.up|boss&fight_remains<20 # Use Beacon to the Beyond on cooldown except to hold for incoming adds or if already facing 5 or more targets actions.trinkets+=/use_item,name=beacon_to_the_beyond,if=!raid_event.adds.exists|raid_event.adds.up|spell_targets.beacon_to_the_beyond>=5|boss&fight_remains<20 actions.trinkets+=/use_items,if=buff.voidform.up|buff.power_infusion.up|buff.dark_ascension.up|(cooldown.void_eruption.remains>10&trinket.cooldown.duration<=60)|boss&fight_remains<20 actions.trinkets+=/use_item,name=desperate_invokers_codex