actions.precombat+=/fleshcraft,if=soulbind.pustule_eruption|soulbind.volatile_solvent actions.precombat+=/shadowform,if=!buff.shadowform.up actions.precombat+=/arcane_torrent actions.precombat+=/use_item,name=shadowed_orb_of_torment actions.precombat+=/variable,name=mind_sear_cutoff,op=set,value=2 actions.precombat+=/shadow_crash,if=talent.shadow_crash.enabled actions.precombat+=/mind_blast,if=talent.damnation.enabled&!talent.shadow_crash.enabled actions.precombat+=/vampiric_touch,if=!talent.damnation.enabled&!talent.shadow_crash.enabled # Potions actions+=/potion,if=buff.voidform.up|buff.power_infusion.up|buff.dark_ascension.up actions+=/variable,name=dots_up,op=set,value=target.time_to_die<6|(dot.shadow_word_pain.ticking&dot.vampiric_touch.ticking) actions+=/variable,name=all_dots_up,op=set,value=(target.time_to_die<6|(dot.shadow_word_pain.ticking&dot.vampiric_touch.ticking))&dot.devouring_plague.ticking actions+=/variable,name=max_vts,op=set,default=1,value=spell_targets.vampiric_touch actions+=/variable,name=max_vts,op=set,value=(spell_targets.mind_sear<=5)*spell_targets.mind_sear,if=buff.voidform.up actions+=/variable,name=is_vt_possible,op=set,value=0,default=1 actions+=/variable,name=is_vt_possible,op=set,value=1,if=active_dot.vampiric_touch=18 actions+=/variable,name=vts_applied,op=set,value=active_dot.vampiric_touch>=variable.max_vts|!variable.is_vt_possible actions+=/variable,name=sfp,op=set,value=runeforge.shadowflame_prism.equipped|talent.inescapable_torment 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) # Racials actions+=/fireblood,if=buff.power_infusion.up actions+=/berserking,if=buff.power_infusion.up actions+=/blood_fury,if=buff.power_infusion.up actions+=/ancestral_call,if=buff.power_infusion.up actions+=/variable,name=pool_amount,op=set,value=60 actions+=/lights_judgment,if=spell_targets.lights_judgment>=2|(!raid_event.adds.exists|raid_event.adds.in>75) actions+=/call_action_list,name=main # Trinkets actions.trinkets+=/use_item,name=scars_of_fraternal_strife,if=(!buff.scars_of_fraternal_strife_4.up&time>1)|(buff.voidform.up|buff.power_infusion.up|buff.dark_ascension.up|cooldown.void_eruption.remains>10) actions.trinkets+=/use_item,name=macabre_sheet_music,if=cooldown.void_eruption.remains>10|cooldown.dark_ascension.remains>10 actions.trinkets+=/use_item,name=soulletting_ruby,if=buff.voidform.up|buff.power_infusion.up|buff.dark_ascension.up|cooldown.void_eruption.remains>10,cycle_targets=1 # Use this on CD for max CDR actions.trinkets+=/use_item,name=architects_ingenuity_core # Default fallback for usable items: Use on cooldown in order by trinket slot. actions.trinkets+=/use_items,if=buff.voidform.up|buff.power_infusion.up|buff.dark_ascension.up|cooldown.void_eruption.remains>10 ## CDs actions.cds+=/power_infusion,if=(buff.voidform.up|buff.dark_ascension.up) actions.cds+=/void_eruption,if=!cooldown.fiend.up&(pet.fiend.active|!talent.mindbender|action.fae_guardians.known)&(cooldown.mind_blast.charges=0|time>15|buff.shadowy_insight.up&cooldown.mind_blast.charges=buff.shadowy_insight.stack) actions.cds+=/dark_ascension,if=pet.fiend.active&cooldown.mind_blast.charges<2|!talent.mindbender&!cooldown.fiend.up|action.fae_guardians.known&cooldown.fiend.remains>=15&cooldown.fae_guardians.remains>=4*gcd.max actions.cds+=/call_action_list,name=trinkets actions.cds+=/unholy_nova,if=dot.shadow_word_pain.ticking&variable.vts_applied|action.shadow_crash.in_flight actions.cds+=/fae_guardians,if=(dot.shadow_word_pain.ticking&variable.vts_applied|action.shadow_crash.in_flight)&(!talent.void_eruption|buff.voidform.up&!cooldown.void_bolt.up&cooldown.mind_blast.full_recharge_time>gcd.max|!cooldown.void_eruption.up) actions.cds+=/boon_of_the_ascended actions.cds+=/ascended_blast,if=spell_targets.mind_sear<=3 actions.cds+=/ascended_nova,if=spell_targets.ascended_nova>1&spell_targets.mind_sear>1 actions.cds+=/mindbender,if=(dot.shadow_word_pain.ticking&variable.vts_applied|action.shadow_crash.in_flight) actions.cds+=/desperate_prayer,if=health.pct<=75 ## Main APL, should cover all ranges of targets and scenarios actions.main+=/call_action_list,name=cds actions.main+=/shadow_word_death,if=pet.fiend.active&variable.sfp&(pet.fiend.remains<=gcd|target.health.pct<20)&spell_targets.mind_sear<=7 actions.main+=/mind_blast,if=(cooldown.mind_blast.full_recharge_time<=gcd.max|pet.fiend.remains<=cast_time+gcd.max)&pet.fiend.active&variable.sfp&pet.fiend.remains>cast_time&spell_targets.mind_sear<=7 actions.main+=/damnation,cycle_targets=1,if=dot.vampiric_touch.refreshable&variable.is_vt_possible|dot.shadow_word_pain.refreshable actions.main+=/void_bolt,if=variable.dots_up&insanity<=85 actions.main+=/devouring_plague,if=(refreshable&!variable.pool_for_cds|insanity>75|talent.void_torrent&cooldown.void_torrent.remains<=3*gcd|buff.mind_devourer.up&cooldown.mind_blast.full_recharge_time<=2*gcd.max&!cooldown.void_eruption.up&talent.void_eruption) actions.main+=/shadow_word_death,cycle_targets=1,if=(target.health.pct<20&spell_targets.mind_sear<4)&(!variable.sfp|cooldown.fiend.remains>=10)|(pet.fiend.active&variable.sfp&spell_targets.mind_sear<=7)|buff.deathspeaker.up&(cooldown.fiend.remains+gcd.max)>buff.deathspeaker.remains actions.main+=/vampiric_touch,cycle_targets=1,if=(refreshable&target.time_to_die>=18&(dot.vampiric_touch.ticking|!variable.vts_applied)&variable.max_vts>0|(talent.misery.enabled&dot.shadow_word_pain.refreshable))&cooldown.shadow_crash.remains>=dot.vampiric_touch.remains&!action.shadow_crash.in_flight actions.main+=/shadow_word_pain,cycle_targets=1,if=refreshable&target.time_to_die>=18&!talent.misery.enabled actions.main+=/mind_blast,if=variable.vts_applied&(!buff.mind_devourer.up|cooldown.void_eruption.up&talent.void_eruption) actions.main+=/mindgames,if=spell_targets.mind_sear<5&variable.all_dots_up actions.main+=/shadow_crash,if=raid_event.adds.in>10 actions.main+=/dark_void,if=raid_event.adds.in>20 actions.main+=/devouring_plague,if=buff.voidform.up&variable.dots_up actions.main+=/void_torrent,if=insanity<=35,cycle_targets=1,if=variable.dots_up actions.main+=/mind_blast,if=raid_event.movement.in>cast_time+0.5&(!variable.sfp|!cooldown.fiend.up&variable.sfp|variable.vts_applied) actions.main+=/vampiric_touch,if=buff.unfurling_darkness.up actions.main+=/mind_flay,if=buff.mind_flay_insanity.up&variable.dots_up&(!buff.surge_of_darkness.up|talent.screams_of_the_void) actions.main+=/halo,if=raid_event.adds.in>20&(spell_targets.halo>1|variable.all_dots_up) actions.main+=/divine_star,if=spell_targets.divine_star>1 actions.main+=/mind_spike,if=buff.surge_of_darkness.up|!conduit.dissonant_echoes&(!talent.mental_decay|dot.vampiric_touch.remains>=(cooldown.shadow_crash.remains+action.shadow_crash.travel_time))&(talent.mind_melt|!talent.idol_of_cthun) actions.main+=/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 30 seconds. actions.main+=/shadow_crash,if=raid_event.adds.in>30 # Use Shadow Word: Death while moving as a low-priority action in execute actions.main+=/shadow_word_death,cycle_targets=1,if=target.health.pct<20 # Use Divine Star while moving as a low-priority action actions.main+=/divine_star # Use Shadow Word: Death while moving as a low-priority action actions.main+=/shadow_word_death # Use Shadow Word: Pain while moving as a low-priority action actions.main+=/shadow_word_pain