Cogspark

Cogspark Works · Rotation

Frost 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
  • frostscythe priority: yes · when always
Your talents (click: talented, not talented, not set)
Checked
  1. The main loop
  2. Helpers
  3. Trinkets
  4. High prio actions
  5. Cooldowns
  6. Racials
  7. AoE (maybe)
  8. Single target (maybe)
Before the pull, done once before the fight starts (11 steps)

Before the pull11 lines

  1. Record your stats before the pull (sim bookkeeping)Snapshot raid buffed stats before combat begins and pre-potting is done.
    simcsnapshot_stats
  2. Set trinket 1 sync to 1 when the following holds, otherwise to 0.5
    all of these:
    • trinket 1 has an on-use effect that grants a stat buff
    • any of these:
      • all of these:
        • you have Pillar of Frost talented
        • you don't have Breath of Sindragosa talented
        • the remainder of trinket 1's cooldown divided by Pillar of Frost's cooldown is 0
      • all of these:
        • you have Breath of Sindragosa talented
        • the remainder of Breath of Sindragosa's cooldown divided by trinket 1's cooldown is 0
    Evaluates a trinkets cooldown, divided by pillar of frost, empower rune weapon, or breath of sindragosa's cooldown. If it's value has no remainder return 1, else return 0.5.
    simcvariable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=trinket.1.has_use_buff&(talent.pillar_of_frost&!talent.breath_of_sindragosa&(trinket.1.cooldown.duration%%cooldown.pillar_of_frost.duration=0)|talent.breath_of_sindragosa&(cooldown.breath_of_sindragosa.duration%%trinket.1.cooldown.duration=0))
  3. Set trinket 2 sync to 1 when the following holds, otherwise to 0.5
    all of these:
    • trinket 2 has an on-use effect that grants a stat buff
    • any of these:
      • all of these:
        • you have Pillar of Frost talented
        • you don't have Breath of Sindragosa talented
        • the remainder of trinket 2's cooldown divided by Pillar of Frost's cooldown is 0
      • all of these:
        • you have Breath of Sindragosa talented
        • the remainder of Breath of Sindragosa's cooldown divided by trinket 2's cooldown is 0
    simcvariable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=trinket.2.has_use_buff&(talent.pillar_of_frost&!talent.breath_of_sindragosa&(trinket.2.cooldown.duration%%cooldown.pillar_of_frost.duration=0)|talent.breath_of_sindragosa&(cooldown.breath_of_sindragosa.duration%%trinket.2.cooldown.duration=0))
  4. Set trinket 1 buffs to true when the following holds, otherwise false
    all of these:
    • trinket 1 has a cooldown
    • trinket 1 isn't Improvised Seaforium Pacemaker
    • any of these:
      • trinket 1 has an on-use effect that grants a stat buff
      • trinket 1 can grant Strength
      • trinket 1 can grant Mastery
      • trinket 1 can grant Versatility
      • trinket 1 can grant Haste
      • trinket 1 can grant Critical Strike
    simcvariable,name=trinket_1_buffs,value=trinket.1.has_cooldown&!trinket.1.is.improvised_seaforium_pacemaker&(trinket.1.has_use_buff|trinket.1.has_buff.strength|trinket.1.has_buff.mastery|trinket.1.has_buff.versatility|trinket.1.has_buff.haste|trinket.1.has_buff.crit)
  5. Set trinket 2 buffs to true when the following holds, otherwise false
    all of these:
    • trinket 2 has a cooldown
    • trinket 2 isn't Improvised Seaforium Pacemaker
    • any of these:
      • trinket 2 has an on-use effect that grants a stat buff
      • trinket 2 can grant Strength
      • trinket 2 can grant Mastery
      • trinket 2 can grant Versatility
      • trinket 2 can grant Haste
      • trinket 2 can grant Critical Strike
    simcvariable,name=trinket_2_buffs,value=trinket.2.has_cooldown&!trinket.2.is.improvised_seaforium_pacemaker&(trinket.2.has_use_buff|trinket.2.has_buff.strength|trinket.2.has_buff.mastery|trinket.2.has_buff.versatility|trinket.2.has_buff.haste|trinket.2.has_buff.crit)
  6. Set trinket 1 duration to trinket 1's stat buff's duration
    simcvariable,name=trinket_1_duration,value=trinket.1.proc.any_dps.duration
  7. Set trinket 2 duration to trinket 2's stat buff's duration
    simcvariable,name=trinket_2_duration,value=trinket.2.proc.any_dps.duration,
  8. 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 (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 (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)*(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)*(1+((trinket.1.ilvl-trinket.2.ilvl)%100)))
  9. 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
  10. Set trinket 1 manual to true when the following holds, otherwise false
    trinket 1 is Unyielding Netherprism
    simcvariable,name=trinket_1_manual,value=trinket.1.is.unyielding_netherprism
  11. Set trinket 2 manual to true when the following holds, otherwise false
    trinket 2 is Unyielding Netherprism
    simcvariable,name=trinket_2_manual,value=trinket.2.is.unyielding_netherprism

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

    Helpers9 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)
      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)
    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
        • all of these:
          • the fight has no pulls
          • the time left in the current add wave is more than 5 s
        • all of these:
          • the fight has pulls
          • the next add wave starts in more than 20 s (or never)
      simcvariable,name=adds_remain,value=active_enemies>=2&(!raid_event.adds.exists|!raid_event.pull.exists&raid_event.adds.remains>5|raid_event.pull.exists&raid_event.adds.in>20)
    3. Set sending cds to true when the following holds, otherwise false
      any of these:
      • st planning is true
      • adds remain is true
      simcvariable,name=sending_cds,value=(variable.st_planning|variable.adds_remain)
    4. Set cooldown check to true when the following holds, otherwise false
      any of these:
      • all of these:
        • you have Pillar of Frost talented
        • Pillar of Frost is active
      • you don't have Pillar of Frost talented
      • the fight ends within 20 s
      simcvariable,name=cooldown_check,value=(talent.pillar_of_frost&buff.pillar_of_frost.up)|!talent.pillar_of_frost|fight_remains<20
    5. Set fwf buffs to true when the following holds, otherwise false
      all of these:
      • any of these:
        • Pillar of Frost has less than one global cooldown left, or isn't active
        • all of these:
          • Unholy Strength is active
          • Unholy Strength has less than one global cooldown left, or isn't active
        • all of these:
          • your rank in Bonegrinder is 2
          • Bonegrinder Frost is active
          • Bonegrinder Frost has less than one global cooldown left, or isn't active
      • any of these:
        • there is more than one enemy
        • Razorice has exactly 5 stacks on the target
        • you have Shattering Blade talented
      simcvariable,name=fwf_buffs,value=(buff.pillar_of_frost.remains<gcd.max|(buff.unholy_strength.up&buff.unholy_strength.remains<gcd.max)|(talent.bonegrinder.rank=2&buff.bonegrinder_frost.up&buff.bonegrinder_frost.remains<gcd.max))&(active_enemies>1|debuff.razorice.stack=5|talent.shattering_blade)
    6. Set rune pooling to true when the following holds, otherwise false
      all of these:
      • you use the Deathbringer hero talents
      • Reaper's Mark comes off cooldown within 6 s
      • you have fewer than 3 Runes
      • sending cds is true
      simcvariable,name=rune_pooling,value=hero_tree.deathbringer&cooldown.reapers_mark.remains<6&rune<3&variable.sending_cds
    7. Set rp pooling to true when the following holds, otherwise false
      all of these:
      • you have Breath of Sindragosa talented
      • Breath of Sindragosa comes off cooldown within 4 global cooldowns
      • your Runic Power is less than 60 plus 35 plus (5 if Icy Onslaught is active, else 0) minus (10 times your Runes)
      • sending cds is true
      simcvariable,name=rp_pooling,value=talent.breath_of_sindragosa&cooldown.breath_of_sindragosa.remains<4*gcd.max&runic_power<60+(35+5*buff.icy_onslaught.up)-(10*rune)&variable.sending_cds
    8. Set frostscythe priority to 3Frostscythe is better at 3 targets
      simcvariable,name=frostscythe_priority,value=3
    9. Set breath of sindragosa check to true when the following holds, otherwise false
      any of these:
      • you don't have Breath of Sindragosa talented
      • Breath of Sindragosa has more than 20 s of cooldown left
      • all of these:
        • Breath of Sindragosa comes off cooldown within one global cooldown
        • your Runic Power is at least 60 minus (20 if you use the Deathbringer hero talents, else 0)
      simcvariable,name=breath_of_sindragosa_check,value=!talent.breath_of_sindragosa|(cooldown.breath_of_sindragosa.remains>20|(cooldown.breath_of_sindragosa.remains<1*gcd.max&runic_power>=(60-20*hero_tree.deathbringer)))
  3. go through Trinkets, then carry on below if nothing there fits

    simccall_action_list,name=trinkets

    Trinkets8 lines

    1. Drink a potion if cooldown check is true or the fight ends within 25 sUsed without waiting for the global cooldownTrinkets Trinkets The trinket with the highest estimated value, will be used first and paired with Pillar of Frost.
      simcpotion,use_off_gcd=1,if=variable.cooldown_check|fight_remains<25
    2. Use your trinket 1 if 1 if trinket 1's on-use cast time is 0, else 0 is more than 0 and trinket 1 buffs is true and trinket 1 manual is false and Pillar of Frost is active and (trinket 2 has no cooldown or trinket 2 is on cooldown or trinket priority is 1)
      simcuse_item,slot=trinket1,if=!trinket.1.cast_time>0&variable.trinket_1_buffs&!variable.trinket_1_manual&buff.pillar_of_frost.remains&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1)
    3. Use your trinket 2 if 1 if trinket 2's on-use cast time is 0, else 0 is more than 0 and trinket 2 buffs is true and trinket 2 manual is false and Pillar of Frost is active and (trinket 1 has no cooldown or trinket 1 is on cooldown or trinket priority is 2)
      simcuse_item,slot=trinket2,if=!trinket.2.cast_time>0&variable.trinket_2_buffs&!variable.trinket_2_manual&buff.pillar_of_frost.remains&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2)
    4. Use your trinket 1 if (trinket 1's on-use cast time is more than 0 s and (you don't use the Rider of the Apocalypse hero talents or Frostwyrm's Fury is on cooldown) and trinket 1 buffs is true and trinket 1 manual is false and Pillar of Frost comes off cooldown within trinket 1's on-use cast time and (you don't have Breath of Sindragosa talented or breath of sindragosa check is true) and sending cds is true and (trinket 2 has no cooldown or trinket 2 is on cooldown or trinket priority is 1)) or trinket 1 duration is at least the time left in the fightChanneled buff trinkets will be used before cooldowns
      simcuse_item,slot=trinket1,if=trinket.1.cast_time>0&(!hero_tree.rider_of_the_apocalypse|cooldown.frostwyrms_fury.remains)&variable.trinket_1_buffs&!variable.trinket_1_manual&cooldown.pillar_of_frost.remains<trinket.1.cast_time&(!talent.breath_of_sindragosa|variable.breath_of_sindragosa_check)&variable.sending_cds&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1)|variable.trinket_1_duration>=fight_remains
    5. Use your trinket 2 if (trinket 2's on-use cast time is more than 0 s and (you don't use the Rider of the Apocalypse hero talents or Frostwyrm's Fury is on cooldown) and trinket 2 buffs is true and trinket 2 manual is false and Pillar of Frost comes off cooldown within trinket 2's on-use cast time and (you don't have Breath of Sindragosa talented or breath of sindragosa check is true) and sending cds is true and (trinket 1 has no cooldown or trinket 1 is on cooldown or trinket priority is 2)) or trinket 2 duration is at least the time left in the fight
      simcuse_item,slot=trinket2,if=trinket.2.cast_time>0&(!hero_tree.rider_of_the_apocalypse|cooldown.frostwyrms_fury.remains)&variable.trinket_2_buffs&!variable.trinket_2_manual&cooldown.pillar_of_frost.remains<trinket.2.cast_time&(!talent.breath_of_sindragosa|variable.breath_of_sindragosa_check)&variable.sending_cds&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2)|variable.trinket_2_duration>=fight_remains
    6. Use your trinket 1 if (trinket 1 buffs is false and trinket 1 manual is false and (damage trinket priority is 1 or trinket 2 has no cooldown or trinket 2 is on cooldown) and ((((trinket 1's on-use cast time is more than 0 s and (you don't have Breath of Sindragosa talented or Breath of Sindragosa isn't active) and Pillar of Frost isn't active) or 1 if trinket 1's on-use cast time is 0, else 0 is more than 0) and (trinket 2 buffs is false or Pillar of Frost comes off cooldown within the cooldown left on trinket 1)) or you don't have Pillar of Frost talented)) or the fight ends within 15 sIf only one on use trinket provides a buff, use the other on cooldown. Or if neither trinket provides a buff, use both on cooldown.
      simcuse_item,slot=trinket1,if=!variable.trinket_1_buffs&!variable.trinket_1_manual&(variable.damage_trinket_priority=1|(!trinket.2.has_cooldown|trinket.2.cooldown.remains))&((trinket.1.cast_time>0&(!talent.breath_of_sindragosa|!buff.breath_of_sindragosa.up)&!buff.pillar_of_frost.up|!trinket.1.cast_time>0)&(!variable.trinket_2_buffs|(cooldown.pillar_of_frost.remains<trinket.1.cooldown.remains))|!talent.pillar_of_frost)|fight_remains<15
    7. Use your trinket 2 if (trinket 2 buffs is false and trinket 2 manual is false and (damage trinket priority is 2 or trinket 1 has no cooldown or trinket 1 is on cooldown) and ((((trinket 2's on-use cast time is more than 0 s and (you don't have Breath of Sindragosa talented or Breath of Sindragosa isn't active) and Pillar of Frost isn't active) or 1 if trinket 2's on-use cast time is 0, else 0 is more than 0) and (trinket 1 buffs is false or Pillar of Frost comes off cooldown within the cooldown left on trinket 1)) or you don't have Pillar of Frost talented)) or the fight ends within 15 s
      simcuse_item,slot=trinket2,if=!variable.trinket_2_buffs&!variable.trinket_2_manual&(variable.damage_trinket_priority=2|(!trinket.1.has_cooldown|trinket.1.cooldown.remains))&(((trinket.2.cast_time>0&(!talent.breath_of_sindragosa|!buff.breath_of_sindragosa.up)&!buff.pillar_of_frost.up)|!trinket.2.cast_time>0)&(!variable.trinket_1_buffs|(cooldown.pillar_of_frost.remains<trinket.1.cooldown.remains))|!talent.pillar_of_frost)|fight_remains<15
    8. Use the item in your main hand slot if Pillar of Frost is active or (Breath of Sindragosa is active and Pillar of Frost is on cooldown) or (trinket 1 buffs is true and trinket 2 buffs is true and (trinket 1 comes off cooldown within the cooldown left on Pillar of Frost or trinket 2 comes off cooldown within the cooldown left on Pillar of Frost) and Pillar of Frost has more than 20 s of cooldown left) or the fight ends within 15 s
      simcuse_item,slot=main_hand,if=buff.pillar_of_frost.up|(buff.breath_of_sindragosa.up&cooldown.pillar_of_frost.remains)|(variable.trinket_1_buffs&variable.trinket_2_buffs&(trinket.1.cooldown.remains<cooldown.pillar_of_frost.remains|trinket.2.cooldown.remains<cooldown.pillar_of_frost.remains)&cooldown.pillar_of_frost.remains>20)|fight_remains<15
  4. go through High prio actions, then carry on below if nothing there fits

    simccall_action_list,name=high_prio_actions

    High prio actions3 lines

    1. Cast Mind Freeze if the target is castingHigh Priority Actions
      simcmind_freeze,if=target.debuff.casting.react
    2. Get Power Infusion from an ally if cooldown check is trueUse <a href='https://www.wowhead.com/spell=10060/power-infusion'>Power Infusion</a> while <a href='https://www.wowhead.com/spell=51271/pillar-of-frost'>Pillar of Frost</a> is up
      simcinvoke_external_buff,name=power_infusion,if=variable.cooldown_check
    3. Cast Anti-Magic Shell if you are more than 40 Runic Power below maximum and death_knight.first_ams_cast is less than the time since the fight started
      simcantimagic_shell,if=runic_power.deficit>40&death_knight.first_ams_cast<time
  5. go through Cooldowns, then carry on below if nothing there fits

    simccall_action_list,name=cooldowns

    Cooldowns15 lines

    1. Cast Remorseless Winter if (sending cds is true and (there is more than one enemy or you have Gathering Storm talented)) or (Gathering Storm has exactly 10 stacks and Remorseless Winter has less than one global cooldown left, or isn't active and more than 10 s of the fight remain)Cooldowns
      simcremorseless_winter,if=variable.sending_cds&(active_enemies>1|talent.gathering_storm)|(buff.gathering_storm.stack=10&buff.remorseless_winter.remains<gcd.max)&fight_remains>10
    2. Cast Pillar of Frost if (you don't have Breath of Sindragosa talented and sending cds is true and (you don't use the Deathbringer hero talents or you have 2 or more Runes)) or the fight ends within 20 s
      simcpillar_of_frost,if=!talent.breath_of_sindragosa&variable.sending_cds&(!hero_tree.deathbringer|rune>=2)|fight_remains<20
    3. Cast Pillar of Frost if you have Breath of Sindragosa talented and sending cds is true and breath of sindragosa check is true and (you don't use the Deathbringer hero talents or you have 2 or more Runes)
      simcpillar_of_frost,if=talent.breath_of_sindragosa&variable.sending_cds&variable.breath_of_sindragosa_check&(!hero_tree.deathbringer|rune>=2)
    4. Cast Breath of Sindragosa if Breath of Sindragosa isn't active and (Pillar of Frost is active or the fight ends within 20 s)Used without waiting for the global cooldown
      simcbreath_of_sindragosa,use_off_gcd=1,if=!buff.breath_of_sindragosa.up&(buff.pillar_of_frost.up|fight_remains<20)
    5. Cast Reaper's Mark if Pillar of Frost is active or Pillar of Frost has more than 5 s of cooldown left or the fight ends within 20 starget on the first enemy where Reapers Mark Debuff isn't active on the target
      simcreapers_mark,target_if=first:debuff.reapers_mark_debuff.down,if=buff.pillar_of_frost.up|cooldown.pillar_of_frost.remains>5|fight_remains<20
    6. Cast Frostwyrm's Fury if ((you have Apocalypse Now talented or you have Chosen of Frostbrood talented) and Chosen Of Frostbrood Fwf isn't active and sending cds is true and Pillar of Frost is active and Bonegrinder Frost is active) or (the fight ends within 20 s and Chosen Of Frostbrood Haste isn't active)
      simcfrostwyrms_fury,if=((talent.apocalypse_now|talent.chosen_of_frostbrood)&!buff.chosen_of_frostbrood_fwf.up)&variable.sending_cds&buff.pillar_of_frost.up&buff.bonegrinder_frost.up|(fight_remains<20&!buff.chosen_of_frostbrood_haste.up)
    7. Cast Frostwyrm's Fury if Chosen Of Frostbrood Fwf is active and fwf buffs is true
      simcfrostwyrms_fury,if=buff.chosen_of_frostbrood_fwf.up&variable.fwf_buffs
    8. Cast Frostwyrm's Fury if (you don't have Apocalypse Now talented and you don't have Chosen of Frostbrood talented and there is a single enemy and ((you have Pillar of Frost talented and Pillar of Frost is active and you don't have Obliteration talented) or you don't have Pillar of Frost talented) and (the fight has no add waves or the next add wave starts in more than Frostwyrm's Fury's cooldown plus the next add wave's duration (or never)) and fwf buffs is true) or the fight ends within 3 s
      simcfrostwyrms_fury,if=!(talent.apocalypse_now|talent.chosen_of_frostbrood)&active_enemies=1&(talent.pillar_of_frost&buff.pillar_of_frost.up&!talent.obliteration|!talent.pillar_of_frost)&(!raid_event.adds.exists|raid_event.adds.in>cooldown.frostwyrms_fury.duration+raid_event.adds.duration)&variable.fwf_buffs|fight_remains<3
    9. Cast Frostwyrm's Fury if you don't have Apocalypse Now talented and you don't have Chosen of Frostbrood talented and there are 2 or more enemies and ((you have Pillar of Frost talented and Pillar of Frost is active) or (the fight has add waves and adds are up and the next add wave starts within the cooldown left on Pillar of Frost minus the time until the next add wave minus the next add wave's duration)) and fwf buffs is true
      simcfrostwyrms_fury,if=!(talent.apocalypse_now|talent.chosen_of_frostbrood)&active_enemies>=2&(talent.pillar_of_frost&buff.pillar_of_frost.up|raid_event.adds.exists&raid_event.adds.up&raid_event.adds.in<cooldown.pillar_of_frost.remains-raid_event.adds.in-raid_event.adds.duration)&variable.fwf_buffs
    10. Cast Frostwyrm's Fury if you don't have Apocalypse Now talented and you don't have Chosen of Frostbrood talented and you have Obliteration talented and ((you have Pillar of Frost talented and Pillar of Frost is active and your main-hand weapon isn't two-handed) or (Pillar of Frost isn't active and your main-hand weapon is two-handed and Pillar of Frost is on cooldown) or you don't have Pillar of Frost talented) and fwf buffs is true and (the fight has no add waves or the next add wave starts in more than Frostwyrm's Fury's cooldown plus the next add wave's duration (or never))
      simcfrostwyrms_fury,if=!(talent.apocalypse_now|talent.chosen_of_frostbrood)&talent.obliteration&(talent.pillar_of_frost&buff.pillar_of_frost.up&!main_hand.2h|!buff.pillar_of_frost.up&main_hand.2h&cooldown.pillar_of_frost.remains|!talent.pillar_of_frost)&variable.fwf_buffs&(!raid_event.adds.exists|raid_event.adds.in>cooldown.frostwyrms_fury.duration+raid_event.adds.duration)
    11. Cast Raise DeadUsed without waiting for the global cooldown
      simcraise_dead,use_off_gcd=1
    12. Cast Empower Rune Weapon if (you have fewer than 2 Runes or Killing Machine isn't active, or only just appeared) and your Runic Power is less than 35 plus (((1 if you have Icy Onslaught talented, else 0) times the stacks of Icy Onslaught) times 5)
      simcempower_rune_weapon,if=(rune<2|!buff.killing_machine.react)&runic_power<35+(talent.icy_onslaught*buff.icy_onslaught.stack*5)
    13. Cast Empower Rune Weapon if Empower Rune Weapon is fully recharged within 6 s and the stacks of Killing Machine (counting only what you've had time to react to) is less than 2 minus (1 if you have Killing Streak talented, else 0)
      simcempower_rune_weapon,if=cooldown.empower_rune_weapon.full_recharge_time<=6&buff.killing_machine.react<2-(talent.killing_streak)
    14. Cast Empower Rune Weapon if you have Breath of Sindragosa talented and the time until Empower Rune Weapon is fully recharged minus 30 is at most the cooldown left on Breath of Sindragosa plus 6 s and Breath of Sindragosa comes off cooldown within 6 s and the stacks of Killing Machine (counting only what you've had time to react to) is less than 2 minus (1 if you have Killing Streak talented, else 0)
      simcempower_rune_weapon,if=talent.breath_of_sindragosa&(cooldown.empower_rune_weapon.full_recharge_time-30<=cooldown.breath_of_sindragosa.remains+6)&(cooldown.breath_of_sindragosa.remains<=6)&(buff.killing_machine.react<2-(talent.killing_streak))
    15. Cast Empower Rune Weapon if you have Obliteration talented and Pillar of Frost has more than 4 global cooldowns left and you have 2 or fewer Runes and Killing Machine has exactly 1 stack (counting only what you've had time to react to)
      simcempower_rune_weapon,if=talent.obliteration&buff.pillar_of_frost.remains>4*gcd.max&rune<=2&buff.killing_machine.react=1
  6. go through Racials, then carry on below if nothing there fits

    simccall_action_list,name=racials

    Racials8 lines

    1. Cast Blood Fury if cooldown check is trueUsed without waiting for the global cooldownObliteration Active Rotation Racial Abilities
      simcblood_fury,use_off_gcd=1,if=variable.cooldown_check
    2. Cast Berserking if cooldown check is trueUsed without waiting for the global cooldown
      simcberserking,use_off_gcd=1,if=variable.cooldown_check
    3. Cast Arcane Pulse if cooldown check is true
      simcarcane_pulse,if=variable.cooldown_check
    4. Cast Light's Judgment if cooldown check is true
      simclights_judgment,if=variable.cooldown_check
    5. Cast Ancestral Call if cooldown check is trueUsed without waiting for the global cooldown
      simcancestral_call,use_off_gcd=1,if=variable.cooldown_check
    6. Cast Fireblood if cooldown check is trueUsed without waiting for the global cooldown
      simcfireblood,use_off_gcd=1,if=variable.cooldown_check
    7. Cast Bag of Tricks if you have Obliteration talented and Pillar of Frost isn't active and Unholy Strength is active
      simcbag_of_tricks,if=talent.obliteration&!buff.pillar_of_frost.up&buff.unholy_strength.up
    8. Cast Bag of Tricks if you don't have Obliteration talented and Pillar of Frost is active and ((Unholy Strength is active and Unholy Strength has less than 3 global cooldowns left, or isn't active) or Pillar of Frost has less than 3 global cooldowns left, or isn't active)
      simcbag_of_tricks,if=!talent.obliteration&buff.pillar_of_frost.up&(buff.unholy_strength.up&buff.unholy_strength.remains<gcd*3|buff.pillar_of_frost.remains<gcd*3)
  7. Is it true that there are 2 or more enemies?Not set

    If so, switch to AoE, and nothing below is checked

    simcrun_action_list,name=aoe,if=active_enemies>=2

    AoE14 lines

    1. Cast Frostscythe if Killing Machine has exactly 2 stacks (counting only what you've had time to react to) and the number of enemies is at least frostscythe priorityAoe Rotation
      simcfrostscythe,if=buff.killing_machine.react=2&active_enemies>=variable.frostscythe_priority
    2. Cast Frost Strike if Razorice has exactly 5 stacks on the target (counting only what you've had time to react to) and Frostbane is active and you've had time to react to ittarget preferring an enemy where you have Shattering Blade talented and Razorice has exactly 5 stacks on the target (counting only what you've had time to react to); otherwise any enemy
      simcfrost_strike,target_if=max:(talent.shattering_blade&debuff.razorice.react=5),if=debuff.razorice.react=5&buff.frostbane.react
    3. Cast Frostscythe if Killing Machine is active and you've had time to react to it and you have 3 or more Runes and the number of enemies is at least frostscythe priority
      simcfrostscythe,if=buff.killing_machine.react&rune>=3&active_enemies>=variable.frostscythe_priority
    4. Cast Obliterate if Killing Machine has exactly 2 stacks (counting only what you've had time to react to) or (Killing Machine is active and you've had time to react to it and you have 3 or more Runes)target preferring an enemy where you use the Rider of the Apocalypse hero talents and Chains Of Ice Trollbane Slow is active on the target and you've had time to react to it; otherwise any enemy
      simcobliterate,target_if=max:(hero_tree.rider_of_the_apocalypse&debuff.chains_of_ice_trollbane_slow.react),if=buff.killing_machine.react=2|(buff.killing_machine.react&rune>=3)
    5. Cast Howling Blast if (Rime is active and you've had time to react to it and you have Frostbound Will talented) or Frost Fever isn't on the target
      simchowling_blast,if=buff.rime.react&talent.frostbound_will|!dot.frost_fever.ticking
    6. Cast Frost Strike if Razorice has exactly 5 stacks on the target (counting only what you've had time to react to) and you have Shattering Blade talented and there are fewer than 5 enemies and rp pooling is false and you don't have Frostbane talentedtarget preferring an enemy where you have Shattering Blade talented and Razorice has exactly 5 stacks on the target (counting only what you've had time to react to); otherwise any enemy
      simcfrost_strike,target_if=max:(talent.shattering_blade&debuff.razorice.react=5),if=debuff.razorice.react=5&talent.shattering_blade&active_enemies<5&!variable.rp_pooling&!talent.frostbane
    7. Cast Frostscythe if Killing Machine is active and you've had time to react to it and rune pooling is false and the number of enemies is at least frostscythe priority
      simcfrostscythe,if=buff.killing_machine.react&!variable.rune_pooling&active_enemies>=variable.frostscythe_priority
    8. Cast Obliterate if Killing Machine is active and you've had time to react to it and rune pooling is falsetarget preferring an enemy where you use the Rider of the Apocalypse hero talents and Chains Of Ice Trollbane Slow is active on the target and you've had time to react to it; otherwise any enemy
      simcobliterate,target_if=max:(hero_tree.rider_of_the_apocalypse&debuff.chains_of_ice_trollbane_slow.react),if=buff.killing_machine.react&!variable.rune_pooling
    9. Cast Howling Blast if Rime is active and you've had time to react to it
      simchowling_blast,if=buff.rime.react
    10. Cast Glacial Advance if rp pooling is false and the number of enemies is at least 3 plus (1 if you have Deathly Blows talented, else 0)
      simcglacial_advance,if=!variable.rp_pooling&active_enemies>=3+(1*talent.deathly_blows)
    11. Cast Frost Strike if rp pooling is false
      simcfrost_strike,if=!variable.rp_pooling
    12. Cast Frostscythe if rune pooling is false and (you don't have Obliteration talented or Pillar of Frost isn't active) and the number of enemies is at least frostscythe priority
      simcfrostscythe,if=!variable.rune_pooling&!(talent.obliteration&buff.pillar_of_frost.up)&active_enemies>=variable.frostscythe_priority
    13. Cast Obliterate if rune pooling is false and (you don't have Obliteration talented or Pillar of Frost isn't active)target preferring an enemy where you use the Rider of the Apocalypse hero talents and Chains Of Ice Trollbane Slow is active on the target and you've had time to react to it; otherwise any enemy
      simcobliterate,target_if=max:(hero_tree.rider_of_the_apocalypse&debuff.chains_of_ice_trollbane_slow.react),if=!variable.rune_pooling&!(talent.obliteration&buff.pillar_of_frost.up)
    14. Cast Howling Blast if Killing Machine isn't active, or only just appeared and you have Obliteration talented and Pillar of Frost is active
      simchowling_blast,if=!buff.killing_machine.react&(talent.obliteration&buff.pillar_of_frost.up)
  8. switch to Single target, and nothing below is checked

    simcrun_action_list,name=single_target

    Single target9 lines

    1. Cast Obliterate if Killing Machine has exactly 2 stacks (counting only what you've had time to react to) or (Killing Machine is active and you've had time to react to it and you have 3 or more Runes)Single Target Rotation
      simcobliterate,if=buff.killing_machine.react=2|(buff.killing_machine.react&rune>=3)
    2. Cast Howling Blast if Rime is active and you've had time to react to it and you have Frostbound Will talented
      simchowling_blast,if=buff.rime.react&talent.frostbound_will
    3. Cast Frost Strike if Razorice has exactly 5 stacks on the target (counting only what you've had time to react to) and you have Shattering Blade talented and rp pooling is falsetarget preferring an enemy where you have Shattering Blade talented and Razorice has exactly 5 stacks on the target (counting only what you've had time to react to); otherwise any enemy
      simcfrost_strike,target_if=max:(talent.shattering_blade&debuff.razorice.react=5),if=debuff.razorice.react=5&talent.shattering_blade&!variable.rp_pooling
    4. Cast Howling Blast if Rime is active and you've had time to react to it
      simchowling_blast,if=buff.rime.react
    5. Cast Frost Strike if you don't have Shattering Blade talented and rp pooling is false and you are less than 30 Runic Power below maximum
      simcfrost_strike,if=!talent.shattering_blade&!variable.rp_pooling&runic_power.deficit<30
    6. Cast Obliterate if Killing Machine is active and you've had time to react to it and rune pooling is false
      simcobliterate,if=buff.killing_machine.react&!variable.rune_pooling
    7. Cast Frost Strike if rp pooling is false
      simcfrost_strike,if=!variable.rp_pooling
    8. Cast Obliterate if rune pooling is false and (you don't have Obliteration talented or Pillar of Frost isn't active)
      simcobliterate,if=!variable.rune_pooling&!(talent.obliteration&buff.pillar_of_frost.up)
    9. Cast Howling Blast if Killing Machine isn't active, or only just appeared and you have Obliteration talented and Pillar of Frost is active
      simchowling_blast,if=!buff.killing_machine.react&(talent.obliteration&buff.pillar_of_frost.up)

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