## Demonology Warlock ## https://github.com/simulationcraft/simc/ ## July 8, 2021 ## Changes: ## - Spell Lock. ## - Only recommend Demonbolt pre-combat if it is instant (or hardcast for bosses). ## - Power Siphon allowed pre-combat to proc instant Demonbolt. ## - PvP talent interrupt. ## - Avoid SB->HoG spam when you're not about to summon a Tyrant. ## - Fleshcraft/Volatile Solvent cancel_if changed to interrupt_if. # Executed before combat begins. Accepts non-harmful actions only. actions.precombat+=/fel_domination,if=time>0&!pet.alive actions.precombat+=/summon_pet actions.precombat+=/use_item,name=tome_of_monstrous_constructions actions.precombat+=/use_item,name=soleahs_secret_technique actions.precombat+=/fleshcraft actions.precombat+=/power_siphon,if=buff.wild_imps.stack>1&buff.demonic_core.stack<=2 actions.precombat+=/demonbolt,if=(boss|action.demonbolt.cast=0)&soul_shards<4 actions.precombat+=/shadow_bolt,if=!(boss|action.demonbolt.cast=0)|soul_shards>3 actions.precombat+=/variable,name=first_tyrant_time,op=set,value=12 # Executed every time the actor is available. actions=spell_lock actions+=/call_felhunter actions+=/axe_toss actions+=/devour_magic actions+=/call_action_list,name=trinkets actions+=/doom,if=refreshable actions+=/call_action_list,name=covenant_ability,strict=1,if=soulbind.grove_invigoration|soulbind.field_of_blossoms|soulbind.combat_meditation|covenant.necrolord actions+=/call_action_list,name=tyrant_setup actions+=/potion,if=(cooldown.summon_demonic_tyrant.remains_expected<10&time>variable.first_tyrant_time-10|soulbind.refined_palate&cooldown.summon_demonic_tyrant.remains_expected<38) actions+=/call_action_list,name=ogcd,strict=1,if=pet.demonic_tyrant.active actions+=/demonic_strength,if=(!runeforge.wilfreds_sigil_of_superior_summoning&cooldown.summon_demonic_tyrant.remains_expected>9)|(pet.demonic_tyrant.active&pet.demonic_tyrant.remains<6*gcd.max) actions+=/call_dreadstalkers,if=cooldown.summon_demonic_tyrant.remains_expected>20-5*!runeforge.wilfreds_sigil_of_superior_summoning actions+=/power_siphon,if=buff.wild_imps.stack>1&buff.demonic_core.stack<3 actions+=/bilescourge_bombers,if=buff.tyrant.down&cooldown.summon_demonic_tyrant.remains_expected>5 actions+=/implosion,if=active_enemies>1+(1*talent.sacrificed_souls.enabled)&buff.wild_imps.stack>=6&buff.tyrant.down&cooldown.summon_demonic_tyrant.remains_expected>5 actions+=/implosion,if=active_enemies>2&buff.wild_imps.stack>=6&buff.tyrant.down&cooldown.summon_demonic_tyrant.remains_expected>5&!runeforge.implosive_potential&(!talent.from_the_shadows.enabled|buff.from_the_shadows.up) actions+=/implosion,if=active_enemies>2&buff.wild_imps.stack>=6&buff.implosive_potential.remains<2&runeforge.implosive_potential actions+=/implosion,if=buff.wild_imps.stack>=12&talent.soul_conduit.enabled&talent.from_the_shadows.enabled&runeforge.implosive_potential&buff.tyrant.down&cooldown.summon_demonic_tyrant.remains_expected>5 actions+=/grimoire_felguard,if=boss&time_to_die<30 actions+=/summon_vilefiend,if=boss&time_to_die<28 actions+=/summon_demonic_tyrant,if=boss&time_to_die<15 actions+=/hand_of_guldan,if=soul_shard=5 # If Dreadstalkers are already active, no need to save shards actions+=/hand_of_guldan,if=soul_shard>=3&(pet.dreadstalker.active|pet.demonic_tyrant.active) actions+=/hand_of_guldan,if=soul_shard>=1&buff.nether_portal.up&cooldown.call_dreadstalkers.remains>2*gcd.max actions+=/hand_of_guldan,if=soul_shard>=1&cooldown.summon_demonic_tyrant.remains_expected12-gcd.max&(buff.dreadstalkers.up&buff.dreadstalkers.remains>action.hand_of_guldan.execute_time+action.summon_demonic_tyrant.execute_time)&(!talent.summon_vilefiend.enabled|buff.vilefiend.up) actions+=/call_action_list,name=covenant_ability,strict=1,if=!covenant.venthyr # Without Sacrificed Souls, Soul Strike is stronger than Demonbolt, so it has a higher priority actions+=/soul_strike,if=!talent.sacrificed_souls.enabled # Spend Demonic Cores for Soul Shards until Tyrant cooldown is close to ready actions+=/demonbolt,if=buff.demonic_core.react&soul_shard<4&cooldown.summon_demonic_tyrant.remains_expected>20 # During Tyrant setup, spend Demonic Cores for Soul Shards actions+=/demonbolt,if=buff.demonic_core.react&soul_shard<4&cooldown.summon_demonic_tyrant.remains_expected<12 actions+=/demonbolt,if=buff.demonic_core.react&soul_shard<4&(buff.demonic_core.stack>2|talent.sacrificed_souls.enabled) actions+=/demonbolt,if=buff.demonic_core.react&soul_shard<4&active_enemies>1 actions+=/soul_strike actions+=/call_action_list,name=covenant_ability # If you can get back to 5 Soul Shards before Dreadstalkers cooldown is ready, it's okay to spend them now actions+=/hand_of_guldan,if=soul_shard>=3&cooldown.summon_demonic_tyrant.remains_expected>25&(talent.demonic_calling.enabled|cooldown.call_dreadstalkers.remains>((5-soul_shard)*action.shadow_bolt.execute_time)+action.hand_of_guldan.execute_time) actions+=/doom,cycle_targets=1,if=refreshable&time>variable.first_tyrant_time actions+=/shadow_bolt actions.slow_trinkets=use_item,name=soulletting_ruby,if=cooldown.summon_demonic_tyrant.remains_expectedvariable.first_tyrant_time-(target.distance%5) actions.slow_trinkets+=/use_item,name=sunblood_amethyst,if=cooldown.summon_demonic_tyrant.remains_expectedvariable.first_tyrant_time-(target.distance%5) # Ordnance has a 12 second delay and is therefore skipped for first Tyrant to line up with the rest actions.slow_trinkets+=/use_item,name=empyreal_ordnance,if=cooldown.summon_demonic_tyrant.remains_expected<(target.distance%5)+12&cooldown.summon_demonic_tyrant.remains_expected>(((target.distance%5)+12)-15)&time>variable.first_tyrant_time-((target.distance%5)+12) actions.covenant_ability=soul_rot,if=soulbind.grove_invigoration&(cooldown.summon_demonic_tyrant.remains_expected<20|cooldown.summon_demonic_tyrant.remains_expected>30) actions.covenant_ability+=/soul_rot,if=soulbind.field_of_blossoms&pet.demonic_tyrant.active actions.covenant_ability+=/soul_rot,if=soulbind.wild_hunt_tactics actions.covenant_ability+=/decimating_bolt,if=(soulbind.lead_by_example|soulbind.kevins_oozeling)&(pet.demonic_tyrant.active&soul_shard<2|cooldown.summon_demonic_tyrant.remains_expected>40) actions.covenant_ability+=/decimating_bolt,if=(soulbind.forgeborne_reveries|(soulbind.volatile_solvent&!soulbind.kevins_oozeling))&!pet.demonic_tyrant.active actions.covenant_ability+=/fleshcraft,if=soulbind.volatile_solvent,interrupt_if=buff.volatile_solvent.up actions.covenant_ability+=/scouring_tithe,if=soulbind.combat_meditation&pet.demonic_tyrant.active actions.covenant_ability+=/scouring_tithe,if=!soulbind.combat_meditation actions.covenant_ability+=/impending_catastrophe,if=pet.demonic_tyrant.active&soul_shard=0 actions.hp_trinks=use_item,name=sinful_gladiators_emblem actions.hp_trinks+=/use_item,name=sinful_aspirants_emblem actions.ogcd=berserking actions.ogcd+=/blood_fury actions.ogcd+=/fireblood actions.ogcd+=/use_items actions.pure_damage_trinks=use_item,name=dreadfire_vessel actions.pure_damage_trinks+=/use_item,name=soul_igniter actions.pure_damage_trinks+=/use_item,name=glyph_of_assimilation,if=active_enemies=1 actions.pure_damage_trinks+=/use_item,name=darkmoon_deck_putrescence actions.pure_damage_trinks+=/use_item,name=ebonsoul_vise actions.pure_damage_trinks+=/use_item,name=unchained_gladiators_shackles actions.trinkets=use_item,name=shadowed_orb_of_torment,if=cooldown.summon_demonic_tyrant.remains_expected<15 actions.trinkets+=/call_action_list,name=hp_trinks,if=talent.demonic_consumption.enabled&cooldown.summon_demonic_tyrant.remains_expected<20 # Effects that travel slowly to target require additional, separate handling actions.trinkets+=/call_action_list,name=slow_trinkets actions.trinkets+=/use_item,name=overflowing_anima_cage,if=pet.demonic_tyrant.active actions.trinkets+=/trinket1,if=trinket.1.has_use_buff&pet.demonic_tyrant.active actions.trinkets+=/trinket2,if=trinket.2.has_use_buff&pet.demonic_tyrant.active actions.trinkets+=/call_action_list,name=pure_damage_trinks,if=time>variable.first_tyrant_time&cooldown.summon_demonic_tyrant.remains_expected>20 actions.tyrant_setup=nether_portal,if=cooldown.summon_demonic_tyrant.remains_expected<15 actions.tyrant_setup+=/grimoire_felguard,if=cooldown.summon_demonic_tyrant.remains_expected<17-(action.summon_demonic_tyrant.execute_time+action.shadow_bolt.execute_time)&(cooldown.call_dreadstalkers.remains<17-(action.summon_demonic_tyrant.execute_time+action.summon_vilefiend.execute_time+action.shadow_bolt.execute_time)|pet.dreadstalker.remains>cooldown.summon_demonic_tyrant.remains_expected+action.summon_demonic_tyrant.execute_time) actions.tyrant_setup+=/summon_vilefiend,if=(cooldown.summon_demonic_tyrant.remains_expected<15-(action.summon_demonic_tyrant.execute_time)&(cooldown.call_dreadstalkers.remains<15-(action.summon_demonic_tyrant.execute_time+action.summon_vilefiend.execute_time)|pet.dreadstalker.remains>cooldown.summon_demonic_tyrant.remains_expected+action.summon_demonic_tyrant.execute_time))|(!runeforge.wilfreds_sigil_of_superior_summoning&cooldown.summon_demonic_tyrant.remains_expected>40) actions.tyrant_setup+=/call_dreadstalkers,if=cooldown.summon_demonic_tyrant.remains_expected<12-(action.summon_demonic_tyrant.execute_time+action.shadow_bolt.execute_time)&time>variable.first_tyrant_time-12-action.call_dreadstalkers.execute_time+action.summon_demonic_tyrant.execute_time+action.shadow_bolt.execute_time actions.tyrant_setup+=/summon_demonic_tyrant,if=time>variable.first_tyrant_time&(pet.dreadstalker.active&pet.dreadstalker.remains>action.summon_demonic_tyrant.execute_time)&(!talent.summon_vilefiend.enabled|pet.vilefiend.active)&(soul_shard=0|(pet.dreadstalker.active&pet.dreadstalker.remains