Cogspark

Cogspark Works · Rotation

Affliction Warlock

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
Your talents (click: talented, not talented, not set)
Checked
  1. The main loop
  2. Helpers
  3. End of fight
  4. Ogcd
  5. Items
  6. Soul harvester (maybe)
  7. SH st (maybe)
  8. SH cleave (maybe)
  9. SH AoE (maybe)
  10. Hellcaller (maybe)
  11. HC st (maybe)
  12. HC cleave (maybe)
  13. HC AoE (maybe)
Before the pull, done once before the fight starts (8 steps)

Before the pull8 lines

  1. Cast Summon Pet
    simcsummon_pet
  2. 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)
  3. 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)
  4. Record your stats before the pull (sim bookkeeping)
    simcsnapshot_stats
  5. Cast Grimoire of Sacrifice if you have Grimoire of Sacrifice talented
    simcgrimoire_of_sacrifice,if=talent.grimoire_of_sacrifice
  6. Cast Seed of Corruption if (you use the Soul Harvester hero talents and there is more than one enemy) or there are more than 2 enemies
    simcseed_of_corruption,if=(hero_tree.soul_harvester&active_enemies>1)|active_enemies>2
  7. Cast Haunt if there are fewer than 2 enemies or (you use the Hellcaller hero talents and there are fewer than 3 enemies)
    simchaunt,if=active_enemies<2|(hero_tree.hellcaller&active_enemies<3)
  8. Drink a potion if your potion is Liquid Luster
    simcpotion,if=potion.liquid_luster

The main loop9 lines

  1. go through Helpers, then carry on below if nothing there fits

    simccall_action_list,name=variables

    Helpers5 lines

    1. Set cds active to true when the following holds, otherwise false
      any of these:
      • you don't have Summon Darkglare talented
      • your Darkglare is out
      simcvariable,name=cds_active,op=set,value=!talent.summon_darkglare|pet.darkglare.remains
    2. Set darkglare active to true when the following holds, otherwise false
      any of these:
      • your Darkglare is out
      • Summon Darkglare's cooldown minus the cooldown left on Summon Darkglare is less than 20 s
      simcvariable,name=darkglare_active,op=set,value=pet.darkglare.active|(cooldown.summon_darkglare.duration-cooldown.summon_darkglare.remains)<20
    3. Set min agony to the smaller of itself and the time left on Agony plus (99 if Agony isn't on the target, else 0)Worked out across every enemy
      simccycling_variable,name=min_agony,op=min,value=dot.agony.remains+(99*!dot.agony.remains)
    4. Set malevolence from cast to 0
      1 if Malevolence is active, else 0 is 0
      simcvariable,name=malevolence_from_cast,value=0,op=set,if=buff.malevolence.up=0
    5. Set malevolence from cast to 1
      your last spell on the global cooldown was Malevolence
      simcvariable,name=malevolence_from_cast,value=1,op=set,if=prev_gcd.1.malevolence
  2. go through End of fight, then carry on below if nothing there fits

    simccall_action_list,name=end_of_fight

    End of fight4 lines

    1. Cast Unstable Affliction if you have at least one Soul Shard and the fight ends within 8 s and there are fewer than 3 enemies
      simcunstable_affliction,if=soul_shard&fight_remains<8&active_enemies<3
    2. Cast Seed of Corruption if you have at least one Soul Shard and the fight ends within 8 s and there are more than 2 enemies
      simcseed_of_corruption,if=soul_shard&fight_remains<8&active_enemies>2
    3. Cast Drain Soul if Nightfall is active and you've had time to react to it and the fight ends within 5 s
      simcdrain_soul,if=buff.nightfall.react&fight_remains<5
    4. Cast Shadow Bolt if Nightfall is active and you've had time to react to it and the fight ends within 5 s
      simcshadow_bolt,if=buff.nightfall.react&fight_remains<5
  3. go through Ogcd, then carry on below if nothing there fits

    simccall_action_list,name=ogcd

    Ogcd6 lines

    1. Drink a potion if cds active is true or the fight ends within 32 sUsed without waiting for the global cooldown
      simcpotion,use_off_gcd=1,if=variable.cds_active|fight_remains<32
    2. Get Power Infusion from an ally if cds active is true or the fight ends within 16 s
      simcinvoke_external_buff,name=power_infusion,if=variable.cds_active|fight_remains<16
    3. Cast Berserking if cds active is true or the fight ends within 14 sUsed without waiting for the global cooldown
      simcberserking,use_off_gcd=1,if=variable.cds_active|fight_remains<14
    4. Cast Blood Fury if cds active is true or the fight ends within 17 sUsed without waiting for the global cooldown
      simcblood_fury,use_off_gcd=1,if=variable.cds_active|fight_remains<17
    5. Cast Fireblood if cds active is true or the fight ends within 10 sUsed without waiting for the global cooldown
      simcfireblood,use_off_gcd=1,if=variable.cds_active|fight_remains<10
    6. Cast Ancestral Call if cds active is true or the fight ends within 17 sUsed without waiting for the global cooldown
      simcancestral_call,use_off_gcd=1,if=variable.cds_active|fight_remains<17
  4. go through Items, then carry on below if nothing there fits

    simccall_action_list,name=items

    Items5 lines

    1. Use Stormbound Emblem of Dazar if Summon Darkglare comes off cooldown within 4 s and Agony is on the target and (Corruption is on the target or Wither is on the target) and Dark Harvest has more than 1 s of cooldown left
      simcuse_item,name=stormbound_emblem_of_dazar,if=cooldown.summon_darkglare.remains<=4&dot.agony.remains&(dot.corruption.remains|dot.wither.remains)&cooldown.dark_harvest.remains>1
    2. Use Galactic Gladiators Badge of Ferocity if Malevolence is active or your Darkglare is out or the fight ends within 20 s
      simcuse_item,name=galactic_gladiators_badge_of_ferocity,if=(buff.malevolence.up|pet.darkglare.active)|fight_remains<20
    3. Use Hex Lords Dooming Idol if your Darkglare is out or Hex Lord's Doom has more than 19 stacks or the fight ends within 30 s
      simcuse_item,name=hex_lords_dooming_idol,if=pet.darkglare.active|buff.hex_lords_doom.stack>19|fight_remains<=30
    4. Use your trinkets if Malevolence is active or your Darkglare is out or the fight ends within 20 s
      simcuse_items,if=(buff.malevolence.up|pet.darkglare.active)|fight_remains<20
    5. Use the item in your main hand slotUsed without waiting for the global cooldown
      simcuse_item,use_off_gcd=1,slot=main_hand
  5. Is it true that you use the Soul Harvester hero talents?Not set

    If so, go through Soul harvester, then carry on below if nothing there fits

    simccall_action_list,name=soul_harvester,if=hero_tree.soul_harvester
  6. Is it true that you use the Hellcaller hero talents?Not set

    If so, go through Hellcaller, then carry on below if nothing there fits

    simccall_action_list,name=hellcaller,if=hero_tree.hellcaller
  7. Cast Malefic Grasp if your Darkglare is outRecast it on its last tick to keep the channel goingRecast it early to keep the channel going when Nightfall is active and you've had time to react to it
    simcmalefic_grasp,chain=1,early_chain_if=buff.nightfall.react,if=pet.darkglare.active
  8. Cast Drain SoulStop channeling when the time between Drain Soul's ticks is more than 0.5 s and something higher in the list is readyRecast it on its last tick to keep the channel goingRecast it early to keep the channel going when Nightfall is active and you've had time to react to it
    simcdrain_soul,chain=1,early_chain_if=buff.nightfall.react,interrupt_if=tick_time>0.5
  9. Cast Shadow Bolt
    simcshadow_bolt

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