Cogspark

Cogspark Works · Rotation

Unholy Death Knight

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
Target health
Your talents (click: talented, not talented, not set)
More conditions (3)
st planning is true
adds remain is true
the fight ends within 30 s
Checked
  1. The main loop
  2. Helpers
  3. Racials (maybe)
  4. High priority
  5. Trinkets (maybe)
  6. Cooldowns
  7. AoE (maybe)
  8. Single target (maybe)
Before the pull, done once before the fight starts (12 steps)

Before the pull12 lines

  1. Record your stats before the pull (sim bookkeeping)
    simcsnapshot_stats
  2. Cast Raise Dead
    simcraise_dead
  3. Set trinket 1 buffs to true when the following holds, otherwise false
    trinket 1 has an on-use effect that grants a stat buff
    simcvariable,name=trinket_1_buffs,value=trinket.1.has_use_buff
  4. Set trinket 2 buffs to true when the following holds, otherwise false
    trinket 2 has an on-use effect that grants a stat buff
    simcvariable,name=trinket_2_buffs,value=trinket.2.has_use_buff
  5. Set trinket 1 duration to 0 when the following holds, otherwise to trinket 1's stat buff's duration
    never
    simcvariable,name=trinket_1_duration,op=setif,value=0,value_else=trinket.1.proc.any_dps.duration,condition=0
  6. Set trinket 2 duration to 0 when the following holds, otherwise to trinket 2's stat buff's duration
    never
    simcvariable,name=trinket_2_duration,op=setif,value=0,value_else=trinket.2.proc.any_dps.duration,condition=0
  7. Set trinket 1 high value to 2 when the following holds, otherwise to 1
    trinket 1 is Treacherous Transmitter
    simcvariable,name=trinket_1_high_value,op=setif,value=2,value_else=1,condition=trinket.1.is.treacherous_transmitter
  8. Set trinket 2 high value to 2 when the following holds, otherwise to 1
    trinket 2 is Treacherous Transmitter
    simcvariable,name=trinket_2_high_value,op=setif,value=2,value_else=1,condition=trinket.2.is.treacherous_transmitter
  9. Set trinket 1 sync to 1 when the following holds, otherwise to 0.5
    all of these:
    • trinket 1 buffs is true
    • you have Dark Transformation talented
    • the remainder of trinket 1's cooldown divided by Dark Transformation's cooldown is 0
    simcvariable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_1_buffs&talent.dark_transformation&trinket.1.cooldown.duration%%cooldown.dark_transformation.duration=0
  10. Set trinket 2 sync to 1 when the following holds, otherwise to 0.5
    all of these:
    • trinket 2 buffs is true
    • you have Dark Transformation talented
    • the remainder of trinket 2's cooldown divided by Dark Transformation's cooldown is 0
    simcvariable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_2_buffs&talent.dark_transformation&trinket.2.cooldown.duration%%cooldown.dark_transformation.duration=0
  11. Set trinket priority to 2 when the following holds, otherwise to 1
    any of these:
    • all of these:
      • trinket 1 buffs is false
      • trinket 2 buffs is true
      • any of these:
        • trinket 2 has a cooldown
        • trinket 1 has no cooldown
    • all of these:
      • trinket 2 buffs is true
      • trinket 2's cooldown divided by trinket 2 duration times (1.5 plus (1 if trinket 2 can grant Strength, else 0)) times trinket 2 sync times trinket 2 high value times (1 plus ((trinket 2's item level minus trinket 1's item level) divided by 100)) is more than trinket 1's cooldown divided by trinket 1 duration times (1.5 plus (1 if trinket 1 can grant Strength, else 0)) times trinket 1 sync times trinket 1 high value times (1 plus ((trinket 1's item level minus trinket 2's item level) divided by 100))
    simcvariable,name=trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_1_buffs&variable.trinket_2_buffs&(trinket.2.has_cooldown|!trinket.1.has_cooldown)|variable.trinket_2_buffs&((trinket.2.cooldown.duration%variable.trinket_2_duration)*(1.5+trinket.2.has_buff.strength)*(variable.trinket_2_sync)*(variable.trinket_2_high_value)*(1+((trinket.2.ilvl-trinket.1.ilvl)%100)))>((trinket.1.cooldown.duration%variable.trinket_1_duration)*(1.5+trinket.1.has_buff.strength)*(variable.trinket_1_sync)*(variable.trinket_1_high_value)*(1+((trinket.1.ilvl-trinket.2.ilvl)%100)))
  12. Set damage trinket priority to 2 when the following holds, otherwise to 1
    all of these:
    • trinket 1 buffs is false
    • trinket 2 buffs is false
    • trinket 2's item level is at least trinket 1's item level
    simcvariable,name=damage_trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_1_buffs&!variable.trinket_2_buffs&trinket.2.ilvl>=trinket.1.ilvl

The main loop8 lines

  1. Start auto-attacking
    simcauto_attack
  2. go through Helpers, then carry on below if nothing there fits

    Choose Action list to run
    simccall_action_list,name=variables

    Helpers4 lines

    1. Set st planning to 1 when the following holds, otherwise to 0
      all of these:
      • there is a single enemy
      • any of these:
        • the fight has no add waves
        • the time until the next add wave is 0
        • the next add wave starts in more than 15 s (or never)
        • the fight has no pulls
        • all of these:
          • the fight has pulls
          • the next pull starts in more than 15 s (or never)
      Variables
      simcvariable,name=st_planning,op=setif,value=1,value_else=0,condition=active_enemies=1&(!raid_event.adds.exists|!raid_event.adds.in|raid_event.adds.in>15|!raid_event.pull.exists|raid_event.pull.exists&raid_event.pull.in>15)
    2. Set adds remain to true when the following holds, otherwise false
      all of these:
      • there are 2 or more enemies
      • any of these:
        • the fight has no add waves
        • the fight has no pulls
        • the time left in the current add wave is more than 5 s
        • the time left in the current pull is more than 5 s
      simcvariable,name=adds_remain,value=active_enemies>=2&((!raid_event.adds.exists|!raid_event.pull.exists)|raid_event.adds.remains>5|raid_event.pull.remains>5)
    3. Set cds active to true when the following holds, otherwise false
      any of these:
      • your Army Ghoul is out
      • Forbidden Knowledge is active
      • all of these:
        • Dark Transformation is active
        • Dark Transformation has more than 5 s left
      simcvariable,name=cds_active,value=pet.army_ghoul.active|buff.forbidden_knowledge.up|buff.dark_transformation.up&buff.dark_transformation.remains>5
    4. Set epidemic prio to true when the following holds, otherwise false
      any of these:
      • all of these:
        • there are 3 or more enemies
        • Forbidden Knowledge isn't active
      • all of these:
        • there are 4 or more enemies
        • Forbidden Knowledge is active
      simcvariable,name=epidemic_prio,value=active_enemies>=3&!buff.forbidden_knowledge.up|active_enemies>=4&buff.forbidden_knowledge.up
  3. Is it true that st planning is true or adds remain is true or the fight ends within 30 s?Not set

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

    simccall_action_list,name=racials,if=variable.st_planning|variable.adds_remain|fight_remains<30
  4. go through High priority, then carry on below if nothing there fits

    simccall_action_list,name=high_priority

    High priority3 lines

    1. Drink a potion if (st planning is true or adds remain is true) and cds active is true
      simcpotion,if=(variable.st_planning|variable.adds_remain)&variable.cds_active
    2. Get Power Infusion from an ally if your Army Ghoul is out or Forbidden Knowledge is active or Dark Transformation is activeUse<a href = 'https://www.wowhead.com/spell=10060/power-infusion'> Power Infusion</ a> while<a href = 'https://www.wowhead.com/spell=1233448/dark-transformation'> Dark Transformation</ a> is up
      simcinvoke_external_buff,name=power_infusion,if=pet.army_ghoul.active|buff.forbidden_knowledge.up|buff.dark_transformation.up
    3. Cast Scourge Strike if Vampiric Strike is active and Essence of the Blood Queen is active and Essence of the Blood Queen has less than 3 global cooldowns left, or isn't active
      simcscourge_strike,if=buff.vampiric_strike.up&buff.essence_of_the_blood_queen.up&buff.essence_of_the_blood_queen.remains<gcd*3
  5. Is it true that st planning is true or adds remain is true or the fight ends within 30 s?Not set

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

    simccall_action_list,name=trinkets,if=variable.st_planning|variable.adds_remain|fight_remains<30
  6. go through Cooldowns, then carry on below if nothing there fits

    simccall_action_list,name=cooldowns

    Cooldowns4 lines

    1. Cast Outbreak if (you don't have Blightburst talented or (you have Blightburst talented and (Putrefy has more than 2 global cooldowns of cooldown left or less than 5 s into the fight))) and Dread Plague isn't on any enemy and ((more than 2 global cooldowns of the fight remain and the fight has no add waves) or (the fight has add waves and the time left in the current add wave is more than 2 global cooldowns))Cooldowns
      simcoutbreak,if=(!talent.blightburst|talent.blightburst&(cooldown.putrefy.remains>gcd.max*2|time<5))&dot.dread_plague.active_dots=0&(fight_remains>gcd.max*2&!raid_event.adds.exists|raid_event.adds.exists&raid_event.adds.remains>gcd.max*2)
    2. Cast Death and Decay if there are 3 or more enemies and you have Cycle of Death talented and (Festering Scythe Tt is active or you don't have Festering Scythe talented) and the charges of Putrefy is less than the maximum charges of Putrefy and ((the fight has add waves and the time left in the current add wave is at least Death and Decay's duration times 0.75) or (the fight has no add waves and at least Death and Decay's duration times 0.75 of the fight remain)) and ((the fight has add waves and the number of adds in the next add wave is less than the number of enemies) or the fight has no add waves or the charges of Death and Decay is the maximum charges of Death and Decay)
      simcdeath_and_decay,if=active_enemies>=3&talent.cycle_of_death&(buff.festering_scythe_tt.up|!talent.festering_scythe)&(cooldown.putrefy.charges<cooldown.putrefy.max_charges&(raid_event.adds.exists&raid_event.adds.remains>=duration*0.75|!raid_event.adds.exists&fight_remains>=duration*0.75)&(raid_event.adds.exists&raid_event.adds.count<active_enemies|!raid_event.adds.exists|charges=max_charges))
    3. Cast Army of the Dead if (st planning is true or adds remain is true) and (Festering Scythe Tt is active or you don't have Festering Scythe talented)
      simcarmy_of_the_dead,if=(variable.st_planning|variable.adds_remain)&(buff.festering_scythe_tt.up|!talent.festering_scythe)
    4. Cast Dark Transformation if ((st planning is true or adds remain is true) and Blightfall isn't active and (your Army Ghoul is out or Army of the Dead has more than 30 s of cooldown left or you don't have Army of the Dead talented)) or (Blightfall is active and (((there are 3 or fewer enemies or the next pull includes a boss) and you have Reaping talented and you have Soul Reaper talented and Soul Reaper Debuff is active on the target and Soul Reaper Debuff has less than 2 global cooldowns left on the target, or isn't active) or the fight ends within 3 s or (the fight has add waves and the time left in the current add wave is less than 3 s) or (Dark Transformation is active and Dark Transformation has less than 2 global cooldowns left, or isn't active) or (trinket 1's stat buff is active and trinket 1's stat buff has less than 2 global cooldowns left, or isn't active) or (trinket 2's stat buff is active and trinket 2's stat buff has less than 2 global cooldowns left, or isn't active) or Dark Transformation comes off cooldown within 3 s))
      simcdark_transformation,if=(variable.st_planning|variable.adds_remain)&!buff.blightfall.up&(pet.army_ghoul.active|cooldown.army_of_the_dead.remains>30|!talent.army_of_the_dead)|buff.blightfall.up&((active_enemies<=3|raid_event.pull.has_boss)&(talent.reaping&talent.soul_reaper&debuff.soul_reaper_debuff.up&debuff.soul_reaper_debuff.remains<gcd*2)|fight_remains<3|raid_event.adds.exists&raid_event.adds.remains<3|buff.dark_transformation.up&buff.dark_transformation.remains<gcd*2|trinket.1.proc.any_dps.up&trinket.1.proc.any_dps.remains<gcd*2|trinket.2.proc.any_dps.up&trinket.2.proc.any_dps.remains<gcd*2|cooldown.dark_transformation.remains<3)
  7. Is it true that there are 3 or more enemies?Not set

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

    simccall_action_list,name=aoe,if=active_enemies>=3
  8. Is it true that there are fewer than 3 enemies?Not set

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

    simccall_action_list,name=single_target,if=active_enemies<3

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