Hekili Priority Helper

Hekili Priority Helper

44M Downloads

Demonology Priority

wow1989 opened this issue · 32 comments

commented

Been looking closer at the Demonology rotation. Seems to be a few holes.

Not holding onto demonic tyrant until the explosive potential buff is up.

Not holding onto demonic tyrant until dreadstalkers are up.

Reference: icy-veins

Method:

TYRANT SETUP:
Ideally you want to have 2 or more sets of Imps for every Demonic Tyrant. To easily achieve this you should have at least 2 Demonic Core charges and a fresh Explosive Potential buff.

Any thoughts?

Thanks again :)

commented

I've gone ahead and done some research:

  1. The opener in SimulationCraft really, really depends on having an opening Bloodlust. If I disable Bloodlust in the sim, it won't cast Implosion until after the first Demonic Tyrant, almost 30 seconds into the sim.

image

This also means that dummy testing with Bloodlust is pointless, and that custom sims folks may have done without Bloodlust in the opener have been impacted.

I'm testing a change where the special opener list isn't used unless Bloodlust is up, and Implosion is used to keep EP uptime even as we approach Demonic Tyrant time.

w/ Bloodlust Disabled:
Tier 25 Demo Sim -- 84,737 Patchwerk DPS
https://www.raidbots.com/simbot/report/8yUCf6BpEjwVMGQYrkRAcX
First Summon Demonic Tyrant: 0:23:849

Modified Demo Sim -- 87,234 Patchwerk DPS
https://www.raidbots.com/simbot/report/pWfZTxkmfZPJfj3Jn3hHyC
First Summon Demonic Tyrant: 0:24:606

So, there's improvement in DPS there, with negligible delay in starting up the Tyrant. There's probably room for more optimization, but seems like a starting point.

  1. The addon had an error with logging cast history, which impacted the ability to put priority list entries on cooldown (i.e., the first HoG and Doom have line_cd=30 to prevent those entries from being reused in the opener). I've solved that and will upload a fix.
commented

I'm interested in the "fresh Explosive Potential buff" and "has imps for Demonic Tyrant" combo, but maybe you're not taking Demonic Consumption.

Regardless, there are ticket instructions for submitting priority issues, and I actually need the data that it asks for.

Additional data that helps: Sim yourself, show what's different between what your sim does and what the addon recommends. (Simming with Raidbots is easiest, since you can just link your sim there.)

But again, I need a completed ticket with your information.

commented

Awesome, thank you for looking into it.

I’ll try to be more comprehensive with my notes in the future

Cheers

commented

Hey,

I also see a problem in whole warlock rotation. After updated and changed the race to nightborn elf all my cds like tyrant, infernal, darkglave are no longer showing as well as trinkets and instability, so on. Do you know why ?

commented
commented

Starting a related-issue list here:

  1. If you start combat with fewer than 3 soul shards (i.e., you're going pack to pack in M+, the opener logic doesn't really work for you).
commented

All I can say is the changes you have made have drastically improved the feel and burst damage of demonology. I found myself having to ignore a lot of the suggestions in Hekili for the opener of Demonology, but now it matches up with the rotation / opener. Bravo and keep up the great work!

commented

That's good to hear. My Warlock is poorly geared, so trying to get 2 good HoG casts and Demonic Tyrant out while Dreadstalkers are still up has been challenging.

I'm still going to work on tweaking it a bit, as I need to be able to avoid the opener entirely when you start with fewer than 3 soul shards (i.e., M+ packs) will lead to a HoG cast that doesn't generate enough imps to Implosion and trigger Explosive Potential. Not ideal.

commented

Only odd thing I am seeing after update is in the opener.

Current Implementation:
Demonbolt -> HOG -> SS -> Shadow Bolt (Depending on Procs this could be 5 shards) -> EP -> Shadow Bolt -> Dreadstalkers -> Build to 5 Shards -> HOG -> Build to 5 Shards -> HOG -> Demonic Strength -> Demonic Tyrant

Highest Damage Opener (I Think):
Demonbolt -> HOG -> SS -> Build to 5 Shards -> EP -> Dreadstalkers -> Build to 5 Shards -> HOG -> Build to 5 Shards -> HOG -> HOG -> Demonic Tyrant -> Demonic Strength

commented

What does your sim do? Can you post a Raidbots link for comparison? Thanks.

commented

Hmm I believe I was incorrect in what I posted. Addon seems to be operating as per the Simcraft spec. I am doing manual rotation testing and think I have found a better rotation than both the ones I posted above while using World Vein Essence. For some reason when using World Vein Essence after DT, DT's first hit or 2 is unaffected by World Vein Essence. My current testing is showing it better to pop World Vein Essence before DT. Will continue to test and try to create a profile and run it through Simulation Craft.

commented

After a long night I implemented the changes the best way I knew how to the APL. Simcraft sims a tiny bit less on single target, however significantly more soon as you add minions into the mix. I found leaving Hekali on single target instead of Automatic for demonology much better as Automatic uses Tyrant at really bad times. Popping Worldvein before Tyrant definitely boosts Tyrant output through my testing vs target dummies. Please give this a shot and let me know what you think. This APL will take advantage of extra Soul Shard procs before dropping dat big phat Tyrant booooooty!

Let me know what you think. Be sure to un-comment out the "first before combat begins" and comment out the second "before combat begins" to restore current functionality within Hekali.

Here are two example runs in Simc on my Character:
Before Change: https://www.raidbots.com/simbot/report/oyr1CdUF6D2cGDPe4cBHfw
After Change: https://www.raidbots.com/simbot/report/kGPsXmSiUM4LUr8ka781kW

# # Executed before combat begins. Accepts non-harmful actions only.
# # actions.precombat=flask
# # actions.precombat+=/food
# # actions.precombat+=/augmentation
# actions.precombat+=/summon_pet
# # actions.precombat+=/inner_demons,if=talent.inner_demons.enabled
# # actions.precombat+=/snapshot_stats
# actions.precombat+=/power_siphon,if=buff.wild_imps.stack>1&buff.demonic_core.stack<=2
# actions.precombat+=/potion
# actions.precombat+=/demonbolt,if=boss|action.demonbolt.cast=0
# actions.precombat+=/shadow_bolt

# Executed before combat begins. Accepts non-harmful actions only.
actions.precombat=flask
actions.precombat+=/food
actions.precombat+=/augmentation
actions.precombat+=/summon_pet
actions.precombat+=/inner_demons,if=talent.inner_demons.enabled
actions.precombat+=/snapshot_stats
actions.precombat+=/potion
actions.precombat+=/demonbolt

# Executed every time the actor is available.
actions=potion,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)&(!talent.nether_portal.enabled|cooldown.nether_portal.remains>160)|target.time_to_die<30
actions+=/use_item,name=azsharas_font_of_power,if=cooldown.summon_demonic_tyrant.remains<=20&!talent.nether_portal.enabled
actions+=/use_items,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|target.time_to_die<=15
actions+=/berserking,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|target.time_to_die<=15
actions+=/blood_fury,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|target.time_to_die<=15
actions+=/fireblood,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|target.time_to_die<=15
actions+=/blood_of_the_enemy,if=pet.demonic_tyrant.active&pet.demonic_tyrant.remains<=15-gcd*3&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)
actions+=/ripple_in_space,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|target.time_to_die<=15
actions+=/use_item,name=pocketsized_computation_device,if=cooldown.summon_demonic_tyrant.remains>=20&cooldown.summon_demonic_tyrant.remains<=cooldown.summon_demonic_tyrant.duration-15|target.time_to_die<=30
actions+=/use_item,name=rotcrusted_voodoo_doll,if=(cooldown.summon_demonic_tyrant.remains>=25|target.time_to_die<=30)
actions+=/use_item,name=shiver_venom_relic,if=(cooldown.summon_demonic_tyrant.remains>=25|target.time_to_die<=30)
actions+=/use_item,name=aquipotent_nautilus,if=(cooldown.summon_demonic_tyrant.remains>=25|target.time_to_die<=30)
actions+=/use_item,name=tidestorm_codex,if=(cooldown.summon_demonic_tyrant.remains>=25|target.time_to_die<=30)
actions+=/use_item,name=vial_of_storms,if=(cooldown.summon_demonic_tyrant.remains>=25|target.time_to_die<=30)
actions+=/call_action_list,name=opener,if=!talent.nether_portal.enabled&time<30&!cooldown.summon_demonic_tyrant.remains
actions+=/use_item,name=azsharas_font_of_power,if=(time>30|!talent.nether_portal.enabled)&talent.grimoire_felguard.enabled&(target.time_to_die>120|target.time_to_die<cooldown.summon_demonic_tyrant.remains+15)|target.time_to_die<=35
actions+=/hand_of_guldan,if=azerite.explosive_potential.rank&time<5&soul_shard>2&buff.explosive_potential.down&buff.wild_imps.stack<3&!prev_gcd.1.hand_of_guldan&!prev_gcd.2.hand_of_guldan
actions+=/demonbolt,if=soul_shard<=3&buff.demonic_core.up&buff.demonic_core.stack=4
actions+=/implosion,if=azerite.explosive_potential.rank&buff.wild_imps.stack>2&buff.explosive_potential.remains<action.shadow_bolt.execute_time&(!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>12)
actions+=/doom,if=!ticking&time_to_die>30&spell_targets.implosion<2&!buff.nether_portal.remains
actions+=/bilescourge_bombers,if=azerite.explosive_potential.rank>0&time<10&spell_targets.implosion<2&buff.dreadstalkers.remains&talent.nether_portal.enabled
actions+=/demonic_strength,if=!(essence.vision_of_perfection.minor|essence.vision_of_perfection.major)&((buff.wild_imps.stack<6|buff.demonic_power.up)|spell_targets.implosion<2)|(essence.vision_of_perfection.minor|essence.vision_of_perfection.major)&pet.demonic_tyrant.active
actions+=/call_action_list,name=nether_portal,if=talent.nether_portal.enabled&spell_targets.implosion<=2
actions+=/call_action_list,name=implosion,if=spell_targets.implosion>1
actions+=/guardian_of_azeroth,if=cooldown.summon_demonic_tyrant.remains<=15|target.time_to_die<=30
actions+=/grimoire_felguard,if=(target.time_to_die>120|target.time_to_die<cooldown.summon_demonic_tyrant.remains+15|cooldown.summon_demonic_tyrant.remains<13)
actions+=/summon_vilefiend,if=cooldown.summon_demonic_tyrant.remains>40|cooldown.summon_demonic_tyrant.remains<12
actions+=/call_dreadstalkers,if=(cooldown.summon_demonic_tyrant.remains<9&buff.demonic_calling.remains)|(cooldown.summon_demonic_tyrant.remains<11&!buff.demonic_calling.remains)|cooldown.summon_demonic_tyrant.remains>14
actions+=/the_unbound_force,if=buff.reckless_force.react
actions+=/bilescourge_bombers
actions+=/hand_of_guldan,if=(azerite.baleful_invocation.enabled|talent.demonic_consumption.enabled)&prev_gcd.1.hand_of_guldan&cooldown.summon_demonic_tyrant.remains<2
actions+=/worldvein_resonance,if=soul_shard<3&(!talent.demonic_consumption.enabled|buff.wild_imps.stack+imps_spawned_during.2000%spell_haste>=6&time_to_imps.all.remains<cast_time)
# 2000%spell_haste is shorthand for the cast time of Demonic Tyrant. The intent is to only begin casting if a certain number of imps will be out by the end of the cast.
actions+=/summon_demonic_tyrant,if=prev_gcd.1.worldvein_resonance|(soul_shard<3&(!talent.demonic_consumption.enabled|buff.wild_imps.stack+imps_spawned_during.2000%spell_haste>=6&time_to_imps.all.remains<cast_time))
actions+=/power_siphon,if=buff.wild_imps.stack>=2&buff.demonic_core.stack<=2&buff.demonic_power.down&spell_targets.implosion<2
actions+=/doom,if=talent.doom.enabled&refreshable&time_to_die>(dot.doom.remains+30)
actions+=/hand_of_guldan,if=soul_shard>=5|(soul_shard>=3&cooldown.call_dreadstalkers.remains>4&(cooldown.summon_demonic_tyrant.remains>20|(cooldown.summon_demonic_tyrant.remains<gcd*2&talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains<gcd*4&!talent.demonic_consumption.enabled))&(!talent.summon_vilefiend.enabled|cooldown.summon_vilefiend.remains>3))
actions+=/soul_strike,if=soul_shard<5&buff.demonic_core.stack<=2
actions+=/demonbolt,if=soul_shard<=3&buff.demonic_core.up&((cooldown.summon_demonic_tyrant.remains<6|cooldown.summon_demonic_tyrant.remains>22&!azerite.shadows_bite.enabled)|buff.demonic_core.stack>=3|buff.demonic_core.remains<5|time_to_die<25|buff.shadows_bite.remains)
actions+=/focused_azerite_beam,if=!pet.demonic_tyrant.active
actions+=/purifying_blast
actions+=/blood_of_the_enemy
actions+=/concentrated_flame,if=!dot.concentrated_flame_burn.remains&!action.concentrated_flame.in_flight&!pet.demonic_tyrant.active
actions+=/reaping_flames,if=!pet.demonic_tyrant.active
actions+=/call_action_list,name=build_a_shard

actions.build_a_shard=memory_of_lucid_dreams,if=soul_shard<2
actions.build_a_shard+=/soul_strike,if=!talent.demonic_consumption.enabled|time>15|prev_gcd.1.hand_of_guldan&!buff.bloodlust.remains
actions.build_a_shard+=/shadow_bolt

actions.implosion=implosion,if=(buff.wild_imps.stack>=6&(soul_shard<3|prev_gcd.1.call_dreadstalkers|buff.wild_imps.stack>=9|prev_gcd.1.bilescourge_bombers|(!prev_gcd.1.hand_of_guldan&!prev_gcd.2.hand_of_guldan))&!prev_gcd.1.hand_of_guldan&!prev_gcd.2.hand_of_guldan&buff.demonic_power.down)|(time_to_die<3&buff.wild_imps.stack>0)|(prev_gcd.2.call_dreadstalkers&buff.wild_imps.stack>2&!talent.demonic_calling.enabled)
actions.implosion+=/grimoire_felguard,if=cooldown.summon_demonic_tyrant.remains<13|!equipped.132369
actions.implosion+=/call_dreadstalkers,if=(cooldown.summon_demonic_tyrant.remains<9&buff.demonic_calling.remains)|(cooldown.summon_demonic_tyrant.remains<11&!buff.demonic_calling.remains)|cooldown.summon_demonic_tyrant.remains>14
actions.implosion+=/hand_of_guldan,if=soul_shard>=5
actions.implosion+=/hand_of_guldan,if=soul_shard>=3&(((prev_gcd.2.hand_of_guldan|buff.wild_imps.stack>=3)&buff.wild_imps.stack<9)|cooldown.summon_demonic_tyrant.remains<=gcd*2|buff.demonic_power.remains>gcd*2)
actions.implosion+=/worldvein_resonance,if=!cooldown.summon_demonic_tyrant.remains
actions.implosion+=/summon_demonic_tyrant
actions.implosion+=/demonbolt,if=prev_gcd.1.hand_of_guldan&soul_shard>=1&(buff.wild_imps.stack<=3|prev_gcd.3.hand_of_guldan)&soul_shard<4&buff.demonic_core.up
actions.implosion+=/summon_vilefiend,if=(cooldown.summon_demonic_tyrant.remains>40&spell_targets.implosion<=2)|cooldown.summon_demonic_tyrant.remains<12
actions.implosion+=/bilescourge_bombers,if=cooldown.summon_demonic_tyrant.remains>9
actions.implosion+=/focused_azerite_beam
actions.implosion+=/purifying_blast
actions.implosion+=/blood_of_the_enemy
actions.implosion+=/concentrated_flame,if=!dot.concentrated_flame_burn.remains&!action.concentrated_flame.in_flight&spell_targets.implosion<5
actions.implosion+=/soul_strike,if=soul_shard<5&buff.demonic_core.stack<=2
actions.implosion+=/demonbolt,if=soul_shard<=3&buff.demonic_core.up&(buff.demonic_core.stack>=3|buff.demonic_core.remains<=gcd*5.7)
actions.implosion+=/doom,cycle_targets=1,max_cycle_targets=7,if=refreshable
actions.implosion+=/call_action_list,name=build_a_shard

actions.nether_portal=call_action_list,name=nether_portal_building,if=cooldown.nether_portal.remains<20
actions.nether_portal+=/call_action_list,name=nether_portal_active,if=cooldown.nether_portal.remains>165

actions.nether_portal_active=bilescourge_bombers
actions.nether_portal_active+=/grimoire_felguard,if=cooldown.summon_demonic_tyrant.remains<13|!equipped.132369
actions.nether_portal_active+=/summon_vilefiend,if=cooldown.summon_demonic_tyrant.remains>40|cooldown.summon_demonic_tyrant.remains<12
actions.nether_portal_active+=/call_dreadstalkers,if=(cooldown.summon_demonic_tyrant.remains<9&buff.demonic_calling.remains)|(cooldown.summon_demonic_tyrant.remains<11&!buff.demonic_calling.remains)|cooldown.summon_demonic_tyrant.remains>14
actions.nether_portal_active+=/call_action_list,name=build_a_shard,if=soul_shard=1&(cooldown.call_dreadstalkers.remains<action.shadow_bolt.cast_time|(talent.bilescourge_bombers.enabled&cooldown.bilescourge_bombers.remains<action.shadow_bolt.cast_time))
actions.nether_portal_active+=/hand_of_guldan,if=((cooldown.call_dreadstalkers.remains>action.demonbolt.cast_time)&(cooldown.call_dreadstalkers.remains>action.shadow_bolt.cast_time))&cooldown.nether_portal.remains>(165+action.hand_of_guldan.cast_time)
actions.nether_portal_active+=/summon_demonic_tyrant,if=buff.nether_portal.remains<5&soul_shard=0
actions.nether_portal_active+=/summon_demonic_tyrant,if=buff.nether_portal.remains<action.summon_demonic_tyrant.cast_time+0.5
actions.nether_portal_active+=/demonbolt,if=buff.demonic_core.up&soul_shard<=3
actions.nether_portal_active+=/call_action_list,name=build_a_shard

actions.nether_portal_building=use_item,name=azsharas_font_of_power,if=cooldown.nether_portal.remains<=5*spell_haste
actions.nether_portal_building+=/guardian_of_azeroth,if=!cooldown.nether_portal.remains&soul_shard>=5
actions.nether_portal_building+=/nether_portal,if=soul_shard>=5
actions.nether_portal_building+=/call_dreadstalkers,if=time>=30
actions.nether_portal_building+=/hand_of_guldan,if=time>=30&cooldown.call_dreadstalkers.remains>18&soul_shard>=3
actions.nether_portal_building+=/power_siphon,if=time>=30&buff.wild_imps.stack>=2&buff.demonic_core.stack<=2&buff.demonic_power.down&soul_shard>=3
actions.nether_portal_building+=/hand_of_guldan,if=time>=30&soul_shard>=5
actions.nether_portal_building+=/call_action_list,name=build_a_shard

actions.opener=hand_of_guldan,line_cd=30,if=azerite.explosive_potential.enabled
actions.opener+=/implosion,if=azerite.explosive_potential.enabled&buff.wild_imps.stack>2&buff.explosive_potential.down
actions.opener+=/doom,line_cd=30
actions.opener+=/guardian_of_azeroth
actions.opener+=/hand_of_guldan,if=prev_gcd.1.hand_of_guldan&soul_shard>0&prev_gcd.2.soul_strike
actions.opener+=/hand_of_guldan,if=prev_gcd.1.hand_of_guldan&soul_shard>0&(buff.wild_imps.stack>1&action.hand_of_guldan.in_flight)&!cooldown.summon_demonic_tyrant.remains
actions.opener+=/bilescourge_bombers
actions.opener+=/soul_strike,line_cd=30,if=!buff.bloodlust.remains|time>5&prev_gcd.1.hand_of_guldan
actions.opener+=/summon_vilefiend,if=soul_shard=5
actions.opener+=/grimoire_felguard,if=soul_shard=5
actions.opener+=/call_dreadstalkers,if=soul_shard=5
actions.opener+=/hand_of_guldan,if=soul_shard=5
actions.opener+=/hand_of_guldan,if=soul_shard>=3&prev_gcd.2.hand_of_guldan&time>5&(prev_gcd.1.soul_strike|!talent.soul_strike.enabled&prev_gcd.1.shadow_bolt)
actions.opener+=/worldvein_resonance,if=!cooldown.summon_demonic_tyrant.remains&prev_gcd.1.hand_of_guldan&prev_gcd.2.hand_of_guldan
# 2000%spell_haste is shorthand for the cast time of Demonic Tyrant. The intent is to only begin casting if a certain number of imps will be out by the end of the cast.
actions.opener+=/summon_demonic_tyrant,if=prev_gcd.1.worldvein_resonance|(prev_gcd.1.hand_of_guldan&prev_gcd.2.hand_of_guldan|!talent.demonic_strength.enabled&buff.wild_imps.stack+imps_spawned_during.2000%spell_haste>=6)
actions.opener+=/demonbolt,if=soul_shard<=3&buff.demonic_core.remains
actions.opener+=/call_action_list,name=build_a_shard
commented

Do you want to highlight your changes for comparison? I see the Worldvein piece in the opener. Keep in mind, that's only applicable to the first Tyrant so if that's a change that pays of consistently, you probably have more edits to make.

I found leaving Hekali on single target instead of Automatic for demonology much better as Automatic uses Tyrant at really bad times.

Why do you think that is? What additional edits would you make in response to that?

commented

Also, your precombat changes don't really apply to the sim vs. the addon.

inner_demons isn't an active ability in-game, so it's commented out in the addon's priority. It's just implemented in SimC that way (this is how they kickstart their demon generation).

The precombat Power Siphon is a convenience to accelerate the opener.

The Demonbolt entry is designed to just avoid taking 4 seconds to start fights on non-boss enemies.

commented

Sure thing. Changes of that version are the following:

  • Assume essence.vision_of_perfection.minor && essence.worldvein_resonance.major (This is what I am working on now.
  • Ensure Worldvein is happening before Demonic Tyrant
  • Expend all Souldshards with HOG before activation of Demonic Tyrant
  • Only use Demonic Strength after Demonic Tyrant activation that way the damage increase is for the full duration of Demonic Strength. This also stops Demonic Strength with getting out of sync of Demonic Tyrant and using it while Demonic Tyrant isn't up.

I updated both the opener by replacing Demonic Strength with the following:

actions.opener+=/hand_of_guldan,if=prev_gcd.1.hand_of_guldan&soul_shard>0&(buff.wild_imps.stack>1&action.hand_of_guldan.in_flight)&!cooldown.summon_demonic_tyrant.remains
actions.opener+=/worldvein_resonance,if=!cooldown.summon_demonic_tyrant.remains&prev_gcd.1.hand_of_guldan&prev_gcd.2.hand_of_guldan

Changed Demonic Tyrant in opener to no longer check demonic strength and instead check when Worldvein has been used.

actions.opener+=/summon_demonic_tyrant,if=prev_gcd.1.worldvein_resonance|(prev_gcd.1.hand_of_guldan&prev_gcd.2.hand_of_guldan|!talent.demonic_strength.enabled&buff.wild_imps.stack+imps_spawned_during.2000%spell_haste>=6)

I then changed the main rotation (not opener):
Added Worldvein logic before Tyrant in normal rotation and adjusted Tyrant:

actions.opener+=/worldvein_resonance,if=!cooldown.summon_demonic_tyrant.remains&prev_gcd.1.hand_of_guldan&prev_gcd.2.hand_of_guldan
actions+=/summon_demonic_tyrant,if=prev_gcd.1.worldvein_resonance|(soul_shard<3&(!talent.demonic_consumption.enabled|buff.wild_imps.stack+imps_spawned_during.2000%spell_haste>=6&time_to_imps.all.remains<cast_time))

Changed Demonic Strength to only activate if Tyrant is active and you have VoP as essence in either minor or major slot:

actions+=/demonic_strength,if=!(essence.vision_of_perfection.minor|essence.vision_of_perfection.major)&((buff.wild_imps.stack<6|buff.demonic_power.up)|spell_targets.implosion<2)|(essence.vision_of_perfection.minor|essence.vision_of_perfection.major)&pet.demonic_tyrant.active

Removed original Worldvein Resonance trigger. I also removed the if target were to die within 20 seconds off the Tyrant itself. I don't like that logic as that will often trigger on junk mobs when you are fighting them. I feel this is just something for getting purely as high as possible single target sim rather than real world use.

Added Worldvein logic to Implosion action as well.

commented

How does hekali determine the AOE rotation of a build? When I use AOE within hekali, it seems to completely ignore the changes I made which is why sticking with single target seems to be better for Demo.

commented

The secret is there's no "AOE" rotation unless the priority is written that way.

spell_targets.implosion is used throughout the Demonology priority in terms of decision-making with regard to multiple targets or single target.

commented

Gotcha. Was my outlining of changes helpful or do you want me to post a diff of the two files?

commented

diffs are simpler. Need to run talent combos and everything to look for adverse impacts.

commented

I will create a diff once I get a chance.

commented

I am actually having some issues still with this. There is a bug with that essence showing up on occasion. I have literally copied the if statement of the demonic_tyrant, put it right before it and it still doesn't show up in the rotation.

commented
commented

FYI I am currently suggesting these changes to the SimC team. They are going to review them and I will get them merged if all looks good. I also ended up making a few changes and just edited those comments above. If you already pulled the APL down to test, I would re-grab it.

commented

One quick thing I noticed is that imps_spawned_during works differently in the addon than in SimC. Instead of 2000%haste (which is a 2 second cast divided by haste), you can just specify the ability name. imps_spawned_during.summon_demonic_tyrant

commented

I fixed the issue. Thank you for the suggestion using snapshots. Below is the fixed APL. Give it a shot and let me know what you think.

# Executed before combat begins. Accepts non-harmful actions only.
actions.precombat=flask
actions.precombat+=/food
actions.precombat+=/augmentation
actions.precombat+=/summon_pet
actions.precombat+=/inner_demons,if=talent.inner_demons.enabled
actions.precombat+=/snapshot_stats
actions.precombat+=/potion
actions.precombat+=/demonbolt

# Executed every time the actor is available.
actions=potion,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)&(!talent.nether_portal.enabled|cooldown.nether_portal.remains>160)|target.time_to_die<30
actions+=/use_item,name=azsharas_font_of_power,if=cooldown.summon_demonic_tyrant.remains<=20&!talent.nether_portal.enabled
actions+=/use_items,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|target.time_to_die<=15
actions+=/berserking,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|target.time_to_die<=15
actions+=/blood_fury,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|target.time_to_die<=15
actions+=/fireblood,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|target.time_to_die<=15
actions+=/blood_of_the_enemy,if=pet.demonic_tyrant.active&pet.demonic_tyrant.remains<=15-gcd*3&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)
actions+=/worldvein_resonance,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|target.time_to_die<=15
actions+=/ripple_in_space,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|target.time_to_die<=15
actions+=/use_item,name=pocketsized_computation_device,if=cooldown.summon_demonic_tyrant.remains>=20&cooldown.summon_demonic_tyrant.remains<=cooldown.summon_demonic_tyrant.duration-15|target.time_to_die<=30
actions+=/use_item,name=rotcrusted_voodoo_doll,if=(cooldown.summon_demonic_tyrant.remains>=25|target.time_to_die<=30)
actions+=/use_item,name=shiver_venom_relic,if=(cooldown.summon_demonic_tyrant.remains>=25|target.time_to_die<=30)
actions+=/use_item,name=aquipotent_nautilus,if=(cooldown.summon_demonic_tyrant.remains>=25|target.time_to_die<=30)
actions+=/use_item,name=tidestorm_codex,if=(cooldown.summon_demonic_tyrant.remains>=25|target.time_to_die<=30)
actions+=/use_item,name=vial_of_storms,if=(cooldown.summon_demonic_tyrant.remains>=25|target.time_to_die<=30)
actions+=/call_action_list,name=opener,if=!talent.nether_portal.enabled&time<30&!cooldown.summon_demonic_tyrant.remains
actions+=/use_item,name=azsharas_font_of_power,if=(time>30|!talent.nether_portal.enabled)&talent.grimoire_felguard.enabled&(target.time_to_die>120|target.time_to_die<cooldown.summon_demonic_tyrant.remains+15)|target.time_to_die<=35
actions+=/hand_of_guldan,if=azerite.explosive_potential.rank&time<5&soul_shard>2&buff.explosive_potential.down&buff.wild_imps.stack<3&!prev_gcd.1.hand_of_guldan&!prev_gcd.2.hand_of_guldan
actions+=/demonbolt,if=soul_shard<=3&buff.demonic_core.up&buff.demonic_core.stack=4
actions+=/implosion,if=azerite.explosive_potential.rank&buff.wild_imps.stack>2&buff.explosive_potential.remains<action.shadow_bolt.execute_time&(!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>12)
actions+=/doom,if=!ticking&time_to_die>30&spell_targets.implosion<2&!buff.nether_portal.remains
actions+=/bilescourge_bombers,if=azerite.explosive_potential.rank>0&time<10&spell_targets.implosion<2&buff.dreadstalkers.remains&talent.nether_portal.enabled
actions+=/demonic_strength,if=(!(essence.vision_of_perfection.major|essence.vision_of_perfection.minor)&((buff.wild_imps.stack<6|buff.demonic_power.up)|spell_targets.implosion<2))|((essence.vision_of_perfection.minor|essence.vision_of_perfection.major)&pet.demonic_tyrant.active)
actions+=/call_action_list,name=nether_portal,if=talent.nether_portal.enabled&spell_targets.implosion<=2
actions+=/call_action_list,name=implosion,if=spell_targets.implosion>1
actions+=/guardian_of_azeroth,if=cooldown.summon_demonic_tyrant.remains<=15|target.time_to_die<=30
actions+=/grimoire_felguard,if=(target.time_to_die>120|target.time_to_die<cooldown.summon_demonic_tyrant.remains+15|cooldown.summon_demonic_tyrant.remains<13)
actions+=/summon_vilefiend,if=cooldown.summon_demonic_tyrant.remains>40|cooldown.summon_demonic_tyrant.remains<12
actions+=/call_dreadstalkers,if=(cooldown.summon_demonic_tyrant.remains<9&buff.demonic_calling.remains)|(cooldown.summon_demonic_tyrant.remains<11&!buff.demonic_calling.remains)|cooldown.summon_demonic_tyrant.remains>14
actions+=/the_unbound_force,if=buff.reckless_force.react
actions+=/bilescourge_bombers
actions+=/hand_of_guldan,if=(azerite.baleful_invocation.enabled|talent.demonic_consumption.enabled)&prev_gcd.1.hand_of_guldan&cooldown.summon_demonic_tyrant.remains<2
# 2000%spell_haste is shorthand for the cast time of Demonic Tyrant. The intent is to only begin casting if a certain number of imps will be out by the end of the cast.
actions+=/worldvein_resonance,if=soul_shard<3&(!talent.demonic_consumption.enabled|buff.wild_imps.stack+imps_spawned_during.2000%spell_haste>=6&!cooldown.summon_demonic_tyrant.remains)|target.time_to_die<20
actions+=/summon_demonic_tyrant,if=prev_gcd.1.worldvein_resonance|soul_shard<3&(!talent.demonic_consumption.enabled|buff.wild_imps.stack+imps_spawned_during.2000%spell_haste>=6&time_to_imps.all.remains<cast_time)|target.time_to_die<20
actions+=/power_siphon,if=buff.wild_imps.stack>=2&buff.demonic_core.stack<=2&buff.demonic_power.down&spell_targets.implosion<2
actions+=/doom,if=talent.doom.enabled&refreshable&time_to_die>(dot.doom.remains+30)
actions+=/hand_of_guldan,if=soul_shard>=5|(soul_shard>=3&cooldown.call_dreadstalkers.remains>4&(cooldown.summon_demonic_tyrant.remains>20|(cooldown.summon_demonic_tyrant.remains<gcd*2&talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains<gcd*4&!talent.demonic_consumption.enabled))&(!talent.summon_vilefiend.enabled|cooldown.summon_vilefiend.remains>3))
actions+=/soul_strike,if=soul_shard<5&buff.demonic_core.stack<=2
actions+=/demonbolt,if=soul_shard<=3&buff.demonic_core.up&((cooldown.summon_demonic_tyrant.remains<6|cooldown.summon_demonic_tyrant.remains>22&!azerite.shadows_bite.enabled)|buff.demonic_core.stack>=3|buff.demonic_core.remains<5|time_to_die<25|buff.shadows_bite.remains)
actions+=/focused_azerite_beam,if=!pet.demonic_tyrant.active
actions+=/purifying_blast
actions+=/blood_of_the_enemy
actions+=/concentrated_flame,if=!dot.concentrated_flame_burn.remains&!action.concentrated_flame.in_flight&!pet.demonic_tyrant.active
actions+=/reaping_flames,if=!pet.demonic_tyrant.active
actions+=/call_action_list,name=build_a_shard

actions.build_a_shard=memory_of_lucid_dreams,if=soul_shard<2
actions.build_a_shard+=/soul_strike,if=!talent.demonic_consumption.enabled|time>15|prev_gcd.1.hand_of_guldan&!buff.bloodlust.remains
actions.build_a_shard+=/shadow_bolt

actions.implosion=implosion,if=(buff.wild_imps.stack>=6&(soul_shard<3|prev_gcd.1.call_dreadstalkers|buff.wild_imps.stack>=9|prev_gcd.1.bilescourge_bombers|(!prev_gcd.1.hand_of_guldan&!prev_gcd.2.hand_of_guldan))&!prev_gcd.1.hand_of_guldan&!prev_gcd.2.hand_of_guldan&buff.demonic_power.down)|(time_to_die<3&buff.wild_imps.stack>0)|(prev_gcd.2.call_dreadstalkers&buff.wild_imps.stack>2&!talent.demonic_calling.enabled)
actions.implosion+=/grimoire_felguard,if=cooldown.summon_demonic_tyrant.remains<13|!equipped.132369
actions.implosion+=/call_dreadstalkers,if=(cooldown.summon_demonic_tyrant.remains<9&buff.demonic_calling.remains)|(cooldown.summon_demonic_tyrant.remains<11&!buff.demonic_calling.remains)|cooldown.summon_demonic_tyrant.remains>14
actions.implosion+=/worldvein_resonance,if=!cooldown.summon_demonic_tyrant.remains
actions.implosion+=/summon_demonic_tyrant
actions.implosion+=/hand_of_guldan,if=soul_shard>=5
actions.implosion+=/hand_of_guldan,if=soul_shard>=3&(((prev_gcd.2.hand_of_guldan|buff.wild_imps.stack>=3)&buff.wild_imps.stack<9)|cooldown.summon_demonic_tyrant.remains<=gcd*2|buff.demonic_power.remains>gcd*2)
actions.implosion+=/demonbolt,if=prev_gcd.1.hand_of_guldan&soul_shard>=1&(buff.wild_imps.stack<=3|prev_gcd.3.hand_of_guldan)&soul_shard<4&buff.demonic_core.up
actions.implosion+=/summon_vilefiend,if=(cooldown.summon_demonic_tyrant.remains>40&spell_targets.implosion<=2)|cooldown.summon_demonic_tyrant.remains<12
actions.implosion+=/bilescourge_bombers,if=cooldown.summon_demonic_tyrant.remains>9
actions.implosion+=/focused_azerite_beam
actions.implosion+=/purifying_blast
actions.implosion+=/blood_of_the_enemy
actions.implosion+=/concentrated_flame,if=!dot.concentrated_flame_burn.remains&!action.concentrated_flame.in_flight&spell_targets.implosion<5
actions.implosion+=/soul_strike,if=soul_shard<5&buff.demonic_core.stack<=2
actions.implosion+=/demonbolt,if=soul_shard<=3&buff.demonic_core.up&(buff.demonic_core.stack>=3|buff.demonic_core.remains<=gcd*5.7)
actions.implosion+=/doom,cycle_targets=1,max_cycle_targets=7,if=refreshable
actions.implosion+=/call_action_list,name=build_a_shard

actions.nether_portal=call_action_list,name=nether_portal_building,if=cooldown.nether_portal.remains<20
actions.nether_portal+=/call_action_list,name=nether_portal_active,if=cooldown.nether_portal.remains>165

actions.nether_portal_active=bilescourge_bombers
actions.nether_portal_active+=/grimoire_felguard,if=cooldown.summon_demonic_tyrant.remains<13|!equipped.132369
actions.nether_portal_active+=/summon_vilefiend,if=cooldown.summon_demonic_tyrant.remains>40|cooldown.summon_demonic_tyrant.remains<12
actions.nether_portal_active+=/call_dreadstalkers,if=(cooldown.summon_demonic_tyrant.remains<9&buff.demonic_calling.remains)|(cooldown.summon_demonic_tyrant.remains<11&!buff.demonic_calling.remains)|cooldown.summon_demonic_tyrant.remains>14
actions.nether_portal_active+=/call_action_list,name=build_a_shard,if=soul_shard=1&(cooldown.call_dreadstalkers.remains<action.shadow_bolt.cast_time|(talent.bilescourge_bombers.enabled&cooldown.bilescourge_bombers.remains<action.shadow_bolt.cast_time))
actions.nether_portal_active+=/hand_of_guldan,if=((cooldown.call_dreadstalkers.remains>action.demonbolt.cast_time)&(cooldown.call_dreadstalkers.remains>action.shadow_bolt.cast_time))&cooldown.nether_portal.remains>(165+action.hand_of_guldan.cast_time)
actions.nether_portal_active+=/summon_demonic_tyrant,if=buff.nether_portal.remains<5&soul_shard=0
actions.nether_portal_active+=/summon_demonic_tyrant,if=buff.nether_portal.remains<action.summon_demonic_tyrant.cast_time+0.5
actions.nether_portal_active+=/demonbolt,if=buff.demonic_core.up&soul_shard<=3
actions.nether_portal_active+=/call_action_list,name=build_a_shard

actions.nether_portal_building=use_item,name=azsharas_font_of_power,if=cooldown.nether_portal.remains<=5*spell_haste
actions.nether_portal_building+=/guardian_of_azeroth,if=!cooldown.nether_portal.remains&soul_shard>=5
actions.nether_portal_building+=/nether_portal,if=soul_shard>=5
actions.nether_portal_building+=/call_dreadstalkers,if=time>=30
actions.nether_portal_building+=/hand_of_guldan,if=time>=30&cooldown.call_dreadstalkers.remains>18&soul_shard>=3
actions.nether_portal_building+=/power_siphon,if=time>=30&buff.wild_imps.stack>=2&buff.demonic_core.stack<=2&buff.demonic_power.down&soul_shard>=3
actions.nether_portal_building+=/hand_of_guldan,if=time>=30&soul_shard>=5
actions.nether_portal_building+=/call_action_list,name=build_a_shard

actions.opener=hand_of_guldan,line_cd=30,if=azerite.explosive_potential.enabled
actions.opener+=/implosion,if=azerite.explosive_potential.enabled&buff.wild_imps.stack>2&buff.explosive_potential.down
actions.opener+=/doom,line_cd=30
actions.opener+=/guardian_of_azeroth
actions.opener+=/hand_of_guldan,if=prev_gcd.1.hand_of_guldan&soul_shard>0&prev_gcd.2.soul_strike
actions.opener+=/hand_of_guldan,if=prev_gcd.1.hand_of_guldan&!prev_gcd.2.hand_of_guldan&(buff.wild_imps.stack>1&action.hand_of_guldan.in_flight)
actions.opener+=/bilescourge_bombers
actions.opener+=/soul_strike,line_cd=30,if=!buff.bloodlust.remains|time>5&prev_gcd.1.hand_of_guldan
actions.opener+=/summon_vilefiend,if=soul_shard=5
actions.opener+=/grimoire_felguard,if=soul_shard=5
actions.opener+=/call_dreadstalkers,if=soul_shard=5
actions.opener+=/hand_of_guldan,if=soul_shard=5
actions.opener+=/hand_of_guldan,if=soul_shard>=3&prev_gcd.2.hand_of_guldan&time>5&(prev_gcd.1.soul_strike|!talent.soul_strike.enabled&prev_gcd.1.shadow_bolt)
# 2000%spell_haste is shorthand for the cast time of Demonic Tyrant. The intent is to only begin casting if a certain number of imps will be out by the end of the cast.
actions.opener+=/worldvein_resonance,if=prev_gcd.1.hand_of_guldan&prev_gcd.2.hand_of_guldan|!talent.demonic_strength.enabled&buff.wild_imps.stack+imps_spawned_during.2000%spell_haste>=6
actions.opener+=/summon_demonic_tyrant,if=prev_gcd.1.worldvein_resonance|prev_gcd.1.hand_of_guldan&prev_gcd.2.hand_of_guldan|!talent.demonic_strength.enabled&buff.wild_imps.stack+imps_spawned_during.2000%spell_haste>=6
actions.opener+=/demonbolt,if=soul_shard<=3&buff.demonic_core.remains
actions.opener+=/call_action_list,name=build_a_shard
commented

ohhh! didn't know that! I will make adjustments. do you want me to repost a finalized version when cleanup is complete?

commented

All cleaned up! Since I am not merging, I don't have a good way to create a diff. Let me know what you think! I feel it plays butter smooth and drops Humongous Booty Tyrants!

# Replace "imps_spawned_during.summon_demonic_tyrant" with "imps_spawned_during.2000%spell_haste" to make it a valid APL usable within SimulationCraft
# Use the following precombat actions if using within SimulationCraft

# # Executed before combat begins. Accepts non-harmful actions only.
# actions.precombat=flask
# actions.precombat+=/food
# actions.precombat+=/augmentation
# actions.precombat+=/summon_pet
# actions.precombat+=/inner_demons,if=talent.inner_demons.enabled
# actions.precombat+=/snapshot_stats
# actions.precombat+=/potion
# actions.precombat+=/demonbolt

# Hekali optimized precombat actions

# Executed before combat begins. Accepts non-harmful actions only.
# actions.precombat=flask
# actions.precombat+=/food
# actions.precombat+=/augmentation
actions.precombat+=/summon_pet
# actions.precombat+=/inner_demons,if=talent.inner_demons.enabled
# actions.precombat+=/snapshot_stats
actions.precombat+=/power_siphon,if=buff.wild_imps.stack>1&buff.demonic_core.stack<=2
actions.precombat+=/potion
actions.precombat+=/demonbolt,if=boss|action.demonbolt.cast=0
actions.precombat+=/shadow_bolt

# Executed every time the actor is available.
actions=potion,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)&(!talent.nether_portal.enabled|cooldown.nether_portal.remains>160)|time_to_die<30
actions+=/use_item,name=azsharas_font_of_power,if=cooldown.summon_demonic_tyrant.remains<=20&!talent.nether_portal.enabled
actions+=/use_items,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|time_to_die<=15
actions+=/berserking,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|time_to_die<=15
actions+=/blood_fury,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|time_to_die<=15
actions+=/fireblood,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|time_to_die<=15
actions+=/blood_of_the_enemy,if=pet.demonic_tyrant.active&pet.demonic_tyrant.remains<=15-gcd*3&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)
actions+=/worldvein_resonance,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)
actions+=/ripple_in_space,if=pet.demonic_tyrant.active&(!essence.vision_of_perfection.major|!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>=cooldown.summon_demonic_tyrant.duration-5)|time_to_die<=15
actions+=/use_item,name=pocketsized_computation_device,if=(cooldown.summon_demonic_tyrant.remains>=20&cooldown.summon_demonic_tyrant.remains<=cooldown.summon_demonic_tyrant.duration-15)|time_to_die<=30
actions+=/use_item,name=rotcrusted_voodoo_doll,if=cooldown.summon_demonic_tyrant.remains>=25|time_to_die<=30
actions+=/use_item,name=shiver_venom_relic,if=cooldown.summon_demonic_tyrant.remains>=25|time_to_die<=30
actions+=/use_item,name=aquipotent_nautilus,if=cooldown.summon_demonic_tyrant.remains>=25|time_to_die<=30
actions+=/use_item,name=tidestorm_codex,if=cooldown.summon_demonic_tyrant.remains>=25|time_to_die<=30
actions+=/use_item,name=vial_of_storms,if=cooldown.summon_demonic_tyrant.remains>=25|time_to_die<=30
actions+=/call_action_list,name=opener,if=!talent.nether_portal.enabled&time<30&!cooldown.summon_demonic_tyrant.remains
actions+=/use_item,name=azsharas_font_of_power,if=(time>30|!talent.nether_portal.enabled)&talent.grimoire_felguard.enabled&(time_to_die>120|time_to_die<cooldown.summon_demonic_tyrant.remains+15)|time_to_die<=35
actions+=/hand_of_guldan,if=azerite.explosive_potential.rank&time<5&soul_shard>2&buff.explosive_potential.down&buff.wild_imps.stack<3&!prev_gcd.1.hand_of_guldan&!prev_gcd.2.hand_of_guldan
actions+=/demonbolt,if=soul_shard<=3&buff.demonic_core.up&buff.demonic_core.stack=4
actions+=/implosion,if=azerite.explosive_potential.rank&buff.wild_imps.stack>2&buff.explosive_potential.remains<action.shadow_bolt.execute_time&(!talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains>12)
actions+=/doom,if=!ticking&time_to_die>30&spell_targets.implosion<2&!buff.nether_portal.remains
actions+=/bilescourge_bombers,if=azerite.explosive_potential.rank>0&time<10&spell_targets.implosion<2&buff.dreadstalkers.remains&talent.nether_portal.enabled
actions+=/demonic_strength,if=(essence.vision_of_perfection.major&cooldown.summon_demonic_tyrant.remains>=60)|(!essence.vision_of_perfection.major&(pet.demonic_tyrant.active|(cooldown.summon_demonic_tyrant.remains>=60&(buff.wild_imps.stack<6|spell_targets.implosion<2))))
actions+=/call_action_list,name=nether_portal,if=talent.nether_portal.enabled&spell_targets.implosion<=2
actions+=/call_action_list,name=implosion,if=spell_targets.implosion>1
actions+=/guardian_of_azeroth,if=cooldown.summon_demonic_tyrant.remains<=15|time_to_die<=30
actions+=/grimoire_felguard,if=(time_to_die>120|time_to_die<cooldown.summon_demonic_tyrant.remains+15|cooldown.summon_demonic_tyrant.remains<13)
actions+=/summon_vilefiend,if=cooldown.summon_demonic_tyrant.remains>40|cooldown.summon_demonic_tyrant.remains<12
actions+=/call_dreadstalkers,if=(cooldown.summon_demonic_tyrant.remains<9&buff.demonic_calling.remains)|(cooldown.summon_demonic_tyrant.remains<11&!buff.demonic_calling.remains)|cooldown.summon_demonic_tyrant.remains>14
actions+=/the_unbound_force,if=buff.reckless_force.react
actions+=/bilescourge_bombers
actions+=/hand_of_guldan,if=prev_gcd.1.hand_of_guldan&cooldown.summon_demonic_tyrant.remains<2&(azerite.baleful_invocation.enabled|talent.demonic_consumption.enabled)
actions+=/worldvein_resonance,if=!cooldown.summon_demonic_tyrant.remains&soul_shard<3&(!talent.demonic_consumption.enabled|buff.wild_imps.stack+imps_spawned_during.summon_demonic_tyrant>=6)
actions+=/summon_demonic_tyrant,if=prev_gcd.1.worldvein_resonance|(soul_shard<3&(!talent.demonic_consumption.enabled|(buff.wild_imps.stack+imps_spawned_during.summon_demonic_tyrant>=6&time_to_imps.all.remains<cast_time)))
actions+=/power_siphon,if=buff.wild_imps.stack>=2&buff.demonic_core.stack<=2&buff.demonic_power.down&spell_targets.implosion<2
actions+=/doom,if=talent.doom.enabled&refreshable&time_to_die>(dot.doom.remains+30)
actions+=/hand_of_guldan,if=soul_shard>=5|(soul_shard>=3&cooldown.call_dreadstalkers.remains>4&(cooldown.summon_demonic_tyrant.remains>20|(cooldown.summon_demonic_tyrant.remains<gcd*2&talent.demonic_consumption.enabled|cooldown.summon_demonic_tyrant.remains<gcd*4&!talent.demonic_consumption.enabled))&(!talent.summon_vilefiend.enabled|cooldown.summon_vilefiend.remains>3))
actions+=/soul_strike,if=soul_shard<5&buff.demonic_core.stack<=2
actions+=/demonbolt,if=soul_shard<=3&buff.demonic_core.up&((cooldown.summon_demonic_tyrant.remains<6|(cooldown.summon_demonic_tyrant.remains>22&!azerite.shadows_bite.enabled))|buff.demonic_core.stack>=3|buff.demonic_core.remains<5|time_to_die<25|buff.shadows_bite.remains)
actions+=/focused_azerite_beam,if=!pet.demonic_tyrant.active
actions+=/purifying_blast
actions+=/blood_of_the_enemy
actions+=/concentrated_flame,if=!dot.concentrated_flame_burn.remains&!action.concentrated_flame.in_flight&!pet.demonic_tyrant.active
actions+=/reaping_flames,if=!pet.demonic_tyrant.active
actions+=/call_action_list,name=build_a_shard

actions.build_a_shard=memory_of_lucid_dreams,if=soul_shard<2
actions.build_a_shard+=/soul_strike,if=!talent.demonic_consumption.enabled|time>15|(prev_gcd.1.hand_of_guldan&!buff.bloodlust.remains)
actions.build_a_shard+=/shadow_bolt

actions.implosion=implosion,if=(buff.wild_imps.stack>=6&(soul_shard<3|prev_gcd.1.call_dreadstalkers|buff.wild_imps.stack>=9|prev_gcd.1.bilescourge_bombers|(!prev_gcd.1.hand_of_guldan&!prev_gcd.2.hand_of_guldan))&!prev_gcd.1.hand_of_guldan&!prev_gcd.2.hand_of_guldan&buff.demonic_power.down)|(time_to_die<3&buff.wild_imps.stack>0)|(prev_gcd.2.call_dreadstalkers&buff.wild_imps.stack>2&!talent.demonic_calling.enabled)
actions.implosion+=/grimoire_felguard,if=cooldown.summon_demonic_tyrant.remains<13|!equipped.132369
actions.implosion+=/call_dreadstalkers,if=(cooldown.summon_demonic_tyrant.remains<9&buff.demonic_calling.remains)|(cooldown.summon_demonic_tyrant.remains<11&!buff.demonic_calling.remains)|cooldown.summon_demonic_tyrant.remains>14
actions.implosion+=/worldvein_resonance,if=!cooldown.summon_demonic_tyrant.remains
actions.implosion+=/summon_demonic_tyrant
actions.implosion+=/hand_of_guldan,if=soul_shard>=5
actions.implosion+=/hand_of_guldan,if=soul_shard>=3&(((prev_gcd.2.hand_of_guldan|buff.wild_imps.stack>=3)&buff.wild_imps.stack<9)|cooldown.summon_demonic_tyrant.remains<=gcd*2|buff.demonic_power.remains>gcd*2)
actions.implosion+=/demonbolt,if=prev_gcd.1.hand_of_guldan&soul_shard>=1&(buff.wild_imps.stack<=3|prev_gcd.3.hand_of_guldan)&soul_shard<4&buff.demonic_core.up
actions.implosion+=/summon_vilefiend,if=(cooldown.summon_demonic_tyrant.remains>40&spell_targets.implosion<=2)|cooldown.summon_demonic_tyrant.remains<12
actions.implosion+=/bilescourge_bombers,if=cooldown.summon_demonic_tyrant.remains>9
actions.implosion+=/focused_azerite_beam
actions.implosion+=/purifying_blast
actions.implosion+=/blood_of_the_enemy
actions.implosion+=/concentrated_flame,if=!dot.concentrated_flame_burn.remains&!action.concentrated_flame.in_flight&spell_targets.implosion<5
actions.implosion+=/soul_strike,if=soul_shard<5&buff.demonic_core.stack<=2
actions.implosion+=/demonbolt,if=soul_shard<=3&buff.demonic_core.up&(buff.demonic_core.stack>=3|buff.demonic_core.remains<=gcd*5.7)
actions.implosion+=/doom,cycle_targets=1,max_cycle_targets=7,if=refreshable
actions.implosion+=/call_action_list,name=build_a_shard

actions.nether_portal=call_action_list,name=nether_portal_building,if=cooldown.nether_portal.remains<20
actions.nether_portal+=/call_action_list,name=nether_portal_active,if=cooldown.nether_portal.remains>165

actions.nether_portal_active=bilescourge_bombers
actions.nether_portal_active+=/grimoire_felguard,if=cooldown.summon_demonic_tyrant.remains<13|!equipped.132369
actions.nether_portal_active+=/summon_vilefiend,if=cooldown.summon_demonic_tyrant.remains>40|cooldown.summon_demonic_tyrant.remains<12
actions.nether_portal_active+=/call_dreadstalkers,if=(cooldown.summon_demonic_tyrant.remains<9&buff.demonic_calling.remains)|(cooldown.summon_demonic_tyrant.remains<11&!buff.demonic_calling.remains)|cooldown.summon_demonic_tyrant.remains>14
actions.nether_portal_active+=/call_action_list,name=build_a_shard,if=soul_shard=1&(cooldown.call_dreadstalkers.remains<action.shadow_bolt.cast_time|(talent.bilescourge_bombers.enabled&cooldown.bilescourge_bombers.remains<action.shadow_bolt.cast_time))
actions.nether_portal_active+=/hand_of_guldan,if=((cooldown.call_dreadstalkers.remains>action.demonbolt.cast_time)&(cooldown.call_dreadstalkers.remains>action.shadow_bolt.cast_time))&cooldown.nether_portal.remains>(165+action.hand_of_guldan.cast_time)
actions.nether_portal_active+=/summon_demonic_tyrant,if=buff.nether_portal.remains<5&soul_shard=0
actions.nether_portal_active+=/summon_demonic_tyrant,if=buff.nether_portal.remains<action.summon_demonic_tyrant.cast_time+0.5
actions.nether_portal_active+=/demonbolt,if=buff.demonic_core.up&soul_shard<=3
actions.nether_portal_active+=/call_action_list,name=build_a_shard

actions.nether_portal_building=use_item,name=azsharas_font_of_power,if=cooldown.nether_portal.remains<=5*spell_haste
actions.nether_portal_building+=/guardian_of_azeroth,if=!cooldown.nether_portal.remains&soul_shard>=5
actions.nether_portal_building+=/nether_portal,if=soul_shard>=5
actions.nether_portal_building+=/call_dreadstalkers,if=time>=30
actions.nether_portal_building+=/hand_of_guldan,if=time>=30&cooldown.call_dreadstalkers.remains>18&soul_shard>=3
actions.nether_portal_building+=/power_siphon,if=time>=30&buff.wild_imps.stack>=2&buff.demonic_core.stack<=2&buff.demonic_power.down&soul_shard>=3
actions.nether_portal_building+=/hand_of_guldan,if=time>=30&soul_shard>=5
actions.nether_portal_building+=/call_action_list,name=build_a_shard

actions.opener=hand_of_guldan,line_cd=30,if=azerite.explosive_potential.enabled
actions.opener+=/implosion,if=azerite.explosive_potential.enabled&buff.wild_imps.stack>2&buff.explosive_potential.down
actions.opener+=/doom,line_cd=30
actions.opener+=/guardian_of_azeroth
actions.opener+=/hand_of_guldan,if=prev_gcd.1.hand_of_guldan&soul_shard>0&prev_gcd.2.soul_strike
actions.opener+=/hand_of_guldan,if=prev_gcd.1.hand_of_guldan&soul_shard>0&buff.wild_imps.stack>1&action.hand_of_guldan.in_flight
actions.opener+=/bilescourge_bombers
actions.opener+=/soul_strike,line_cd=30,if=!buff.bloodlust.remains|(time>5&prev_gcd.1.hand_of_guldan)
actions.opener+=/summon_vilefiend,if=soul_shard=5
actions.opener+=/grimoire_felguard,if=soul_shard=5
actions.opener+=/call_dreadstalkers,if=soul_shard=5
actions.opener+=/hand_of_guldan,if=soul_shard=5
actions.opener+=/hand_of_guldan,if=soul_shard>=3&prev_gcd.2.hand_of_guldan&time>5&(prev_gcd.1.soul_strike|(!talent.soul_strike.enabled&prev_gcd.1.shadow_bolt))
actions.opener+=/worldvein_resonance,if=(prev_gcd.1.hand_of_guldan&prev_gcd.2.hand_of_guldan)|!talent.demonic_consumption.enabled|buff.wild_imps.stack+imps_spawned_during.summon_demonic_tyrant>=6
actions.opener+=/summon_demonic_tyrant,if=prev_gcd.1.worldvein_resonance|(prev_gcd.1.hand_of_guldan&prev_gcd.2.hand_of_guldan)|!talent.demonic_consumption.enabled|buff.wild_imps.stack+imps_spawned_during.summon_demonic_tyrant>=6
actions.opener+=/demonbolt,if=soul_shard<=3&buff.demonic_core.remains
actions.opener+=/call_action_list,name=build_a_shard
commented

So scratch the APL's I have posted here. I am working with team at simc to get a merge in of a better version. So far it's looking good and will let you know if and when it gets merged. That way this can just use the latest / official simc APL for consistency.

commented

Thanks for the update. Glad you're helping out right at the source. One of the big challenges I've seen over time is that APL openers in SimC can be a bit of a challenge because they're built with certain assumptions that might not even hold up in SimC. Examples: opener bloodlust, enough haste in general that every action can happen fast enough -- like getting Dreadstalkers out and then enough Wild Imps to consume before they vanish.

I'll keep an eye out for changes.

commented

Have these changes been implemented?

commented

No, I don't see any recent changes to the simc demo priority.

commented

Closing this since there has been no change on the simc front.