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.
- The main loop
- Helpers
- Trinkets
- High prio actions
- Cooldowns
- Racials
- AoE (maybe)
- Single target (maybe)
Before the pull, done once before the fight starts (11 steps)
Before the pull11 lines
- Record your stats before the pull (sim bookkeeping)Snapshot raid buffed stats before combat begins and pre-potting is done.
simc
snapshot_stats - Set trinket 1 sync to 1 when the following holds, otherwise to 0.5all of these: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.
- 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
- all of these:
simc
variable,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)) - Set trinket 2 sync to 1 when the following holds, otherwise to 0.5all 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
- all of these:
simc
variable,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)) - Set trinket 1 buffs to true when the following holds, otherwise falseall 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
simc
variable,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) - Set trinket 2 buffs to true when the following holds, otherwise falseall 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
simc
variable,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) - Set trinket 1 duration to trinket 1's stat buff's duration
simc
variable,name=trinket_1_duration,value=trinket.1.proc.any_dps.duration - Set trinket 2 duration to trinket 2's stat buff's duration
simc
variable,name=trinket_2_duration,value=trinket.2.proc.any_dps.duration, - Set trinket priority to 2 when the following holds, otherwise to 1any 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))
simc
variable,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))) - all of these:
- Set damage trinket priority to 2 when the following holds, otherwise to 1all 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
simc
variable,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 - Set trinket 1 manual to true when the following holds, otherwise falsetrinket 1 is Unyielding Netherprism
simc
variable,name=trinket_1_manual,value=trinket.1.is.unyielding_netherprism - Set trinket 2 manual to true when the following holds, otherwise falsetrinket 2 is Unyielding Netherprism
simc
variable,name=trinket_2_manual,value=trinket.2.is.unyielding_netherprism
The main loop8 lines
- Start auto-attacking
simc
auto_attack go through Helpers, then carry on below if nothing there fits
Choose Action list to runsimc
call_action_list,name=variablesHelpers9 lines
- Set st planning to 1 when the following holds, otherwise to 0all of these:Variables
- 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)
simc
variable,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) - Set adds remain to true when the following holds, otherwise falseall 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)
simc
variable,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) - Set sending cds to true when the following holds, otherwise falseany of these:
- st planning is true
- adds remain is true
simc
variable,name=sending_cds,value=(variable.st_planning|variable.adds_remain) - Set cooldown check to true when the following holds, otherwise falseany 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
simc
variable,name=cooldown_check,value=(talent.pillar_of_frost&buff.pillar_of_frost.up)|!talent.pillar_of_frost|fight_remains<20 - all of these:
- Set fwf buffs to true when the following holds, otherwise falseall 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
simc
variable,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) - any of these:
- Set rune pooling to true when the following holds, otherwise falseall 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
simc
variable,name=rune_pooling,value=hero_tree.deathbringer&cooldown.reapers_mark.remains<6&rune<3&variable.sending_cds - Set rp pooling to true when the following holds, otherwise falseall 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
simc
variable,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 - Set frostscythe priority to 3Frostscythe is better at 3 targets
simc
variable,name=frostscythe_priority,value=3 - Set breath of sindragosa check to true when the following holds, otherwise falseany 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)
simc
variable,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)))
go through Trinkets, then carry on below if nothing there fits
simc
call_action_list,name=trinketsTrinkets8 lines
- 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.
simc
potion,use_off_gcd=1,if=variable.cooldown_check|fight_remains<25 - 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)
simc
use_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) - 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)
simc
use_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) - 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
simc
use_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 - 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
simc
use_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 - 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.
simc
use_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 - 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
simc
use_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 - 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
simc
use_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
go through High prio actions, then carry on below if nothing there fits
simc
call_action_list,name=high_prio_actionsHigh prio actions3 lines
- Cast Mind Freeze if the target is castingHigh Priority Actions
simc
mind_freeze,if=target.debuff.casting.react - 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
simc
invoke_external_buff,name=power_infusion,if=variable.cooldown_check - Cast Anti-Magic Shell if you are more than 40 Runic Power below maximum and
death_knight.first_ams_castis less than the time since the fight startedsimc
antimagic_shell,if=runic_power.deficit>40&death_knight.first_ams_cast<time
go through Cooldowns, then carry on below if nothing there fits
simc
call_action_list,name=cooldownsCooldowns15 lines
- 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
simc
remorseless_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 - 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
simc
pillar_of_frost,if=!talent.breath_of_sindragosa&variable.sending_cds&(!hero_tree.deathbringer|rune>=2)|fight_remains<20 - 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)
simc
pillar_of_frost,if=talent.breath_of_sindragosa&variable.sending_cds&variable.breath_of_sindragosa_check&(!hero_tree.deathbringer|rune>=2) - 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
simc
breath_of_sindragosa,use_off_gcd=1,if=!buff.breath_of_sindragosa.up&(buff.pillar_of_frost.up|fight_remains<20) - 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
simc
reapers_mark,target_if=first:debuff.reapers_mark_debuff.down,if=buff.pillar_of_frost.up|cooldown.pillar_of_frost.remains>5|fight_remains<20 - 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)
simc
frostwyrms_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) - Cast Frostwyrm's Fury if Chosen Of Frostbrood Fwf is active and fwf buffs is true
simc
frostwyrms_fury,if=buff.chosen_of_frostbrood_fwf.up&variable.fwf_buffs - 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
simc
frostwyrms_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 - 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
simc
frostwyrms_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 - 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))
simc
frostwyrms_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) - Cast Raise DeadUsed without waiting for the global cooldown
simc
raise_dead,use_off_gcd=1 - 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)
simc
empower_rune_weapon,if=(rune<2|!buff.killing_machine.react)&runic_power<35+(talent.icy_onslaught*buff.icy_onslaught.stack*5) - 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)
simc
empower_rune_weapon,if=cooldown.empower_rune_weapon.full_recharge_time<=6&buff.killing_machine.react<2-(talent.killing_streak) - 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)
simc
empower_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)) - 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)
simc
empower_rune_weapon,if=talent.obliteration&buff.pillar_of_frost.remains>4*gcd.max&rune<=2&buff.killing_machine.react=1
go through Racials, then carry on below if nothing there fits
simc
call_action_list,name=racialsRacials8 lines
- Cast Blood Fury if cooldown check is trueUsed without waiting for the global cooldownObliteration Active Rotation Racial Abilities
simc
blood_fury,use_off_gcd=1,if=variable.cooldown_check - Cast Berserking if cooldown check is trueUsed without waiting for the global cooldown
simc
berserking,use_off_gcd=1,if=variable.cooldown_check - Cast Arcane Pulse if cooldown check is true
simc
arcane_pulse,if=variable.cooldown_check - Cast Light's Judgment if cooldown check is true
simc
lights_judgment,if=variable.cooldown_check - Cast Ancestral Call if cooldown check is trueUsed without waiting for the global cooldown
simc
ancestral_call,use_off_gcd=1,if=variable.cooldown_check - Cast Fireblood if cooldown check is trueUsed without waiting for the global cooldown
simc
fireblood,use_off_gcd=1,if=variable.cooldown_check - Cast Bag of Tricks if you have Obliteration talented and Pillar of Frost isn't active and Unholy Strength is active
simc
bag_of_tricks,if=talent.obliteration&!buff.pillar_of_frost.up&buff.unholy_strength.up - 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)
simc
bag_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)
Is it true that there are 2 or more enemies?Not set
If so, switch to AoE, and nothing below is checked
simc
run_action_list,name=aoe,if=active_enemies>=2AoE14 lines
- 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
simc
frostscythe,if=buff.killing_machine.react=2&active_enemies>=variable.frostscythe_priority - 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
simc
frost_strike,target_if=max:(talent.shattering_blade&debuff.razorice.react=5),if=debuff.razorice.react=5&buff.frostbane.react - 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
simc
frostscythe,if=buff.killing_machine.react&rune>=3&active_enemies>=variable.frostscythe_priority - 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
simc
obliterate,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) - 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
simc
howling_blast,if=buff.rime.react&talent.frostbound_will|!dot.frost_fever.ticking - 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
simc
frost_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 - 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
simc
frostscythe,if=buff.killing_machine.react&!variable.rune_pooling&active_enemies>=variable.frostscythe_priority - 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
simc
obliterate,target_if=max:(hero_tree.rider_of_the_apocalypse&debuff.chains_of_ice_trollbane_slow.react),if=buff.killing_machine.react&!variable.rune_pooling - Cast Howling Blast if Rime is active and you've had time to react to it
simc
howling_blast,if=buff.rime.react - 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)
simc
glacial_advance,if=!variable.rp_pooling&active_enemies>=3+(1*talent.deathly_blows) - Cast Frost Strike if rp pooling is false
simc
frost_strike,if=!variable.rp_pooling - 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
simc
frostscythe,if=!variable.rune_pooling&!(talent.obliteration&buff.pillar_of_frost.up)&active_enemies>=variable.frostscythe_priority - 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
simc
obliterate,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) - Cast Howling Blast if Killing Machine isn't active, or only just appeared and you have Obliteration talented and Pillar of Frost is active
simc
howling_blast,if=!buff.killing_machine.react&(talent.obliteration&buff.pillar_of_frost.up)
switch to Single target, and nothing below is checked
simc
run_action_list,name=single_targetSingle target9 lines
- 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
simc
obliterate,if=buff.killing_machine.react=2|(buff.killing_machine.react&rune>=3) - Cast Howling Blast if Rime is active and you've had time to react to it and you have Frostbound Will talented
simc
howling_blast,if=buff.rime.react&talent.frostbound_will - 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
simc
frost_strike,target_if=max:(talent.shattering_blade&debuff.razorice.react=5),if=debuff.razorice.react=5&talent.shattering_blade&!variable.rp_pooling - Cast Howling Blast if Rime is active and you've had time to react to it
simc
howling_blast,if=buff.rime.react - 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
simc
frost_strike,if=!talent.shattering_blade&!variable.rp_pooling&runic_power.deficit<30 - Cast Obliterate if Killing Machine is active and you've had time to react to it and rune pooling is false
simc
obliterate,if=buff.killing_machine.react&!variable.rune_pooling - Cast Frost Strike if rp pooling is false
simc
frost_strike,if=!variable.rp_pooling - Cast Obliterate if rune pooling is false and (you don't have Obliteration talented or Pillar of Frost isn't active)
simc
obliterate,if=!variable.rune_pooling&!(talent.obliteration&buff.pillar_of_frost.up) - Cast Howling Blast if Killing Machine isn't active, or only just appeared and you have Obliteration talented and Pillar of Frost is active
simc
howling_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.
Blizzard’s own suggestion system (the one-button rotation), as simc carries it. It is simpler than SimulationCraft’s list and is not what Cogspark simulates.
§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.
- The main loop
- Cooldowns
- Assisted Combat
Before the pull, done once before the fight starts (1 steps)
Before the pull1 line
- Record your stats before the pull (sim bookkeeping)
simc
snapshot_stats
The main loop3 lines
- Start auto-attacking
simc
auto_attack go through Cooldowns, then carry on below if nothing there fits
simc
call_action_list,name=cooldownsCooldowns8 lines
- Use your trinketsSome cooldowns are not used by the Assisted Combat system. This simple default cooldown usage has been provided by simc.
simc
use_items - Drink a potion
simc
potion - Cast Blood Fury
simc
blood_fury - Cast Berserking
simc
berserking - Cast Fireblood
simc
fireblood - Cast Ancestral Call
simc
ancestral_call - Cast Breath of Sindragosa
simc
breath_of_sindragosa - Cast Raise Dead
simc
raise_dead
go through Assisted Combat, then carry on below if nothing there fits
simc
call_action_list,name=assisted_combatAssisted Combat21 lines
- Cast Pillar of Frost if Frost Strike is off cooldown and your distance to the target is at most 8This is the default action priority list from the game's Assisted Combat system.
simc
pillar_of_frost,if=cooldown.frost_strike.ready&target.distance<=8 - Cast Frostwyrm's Fury if your distance to the target is at most 30 and Pillar of Frost is active
simc
frostwyrms_fury,if=target.distance<=30&buff.pillar_of_frost.up - Cast Breath of SindragosaThis is for Blizzard automation and is not included in the game's Assisted Combat system.
simc
breath_of_sindragosa - Cast Empower Rune Weapon if you have 80 or less Runic Power and Killing Machine has 1 or fewer stacks
simc
empower_rune_weapon,if=runic_power<=80&buff.killing_machine.stack<=1 - Cast Empower Rune Weapon if you have 8 or less Runic Power and Killing Machine isn't active
simc
empower_rune_weapon,if=runic_power<=8&buff.killing_machine.down - Cast Frostwyrm's Fury if your distance to the target is at most 30
simc
frostwyrms_fury,if=target.distance<=30 - Cast Reaper's Mark
simc
reapers_mark - Cast Frostscythe if your distance to the target is at most 8 and there are more than 3 enemies and Killing Machine is active
simc
frostscythe,if=target.distance<=8&active_enemies>3&buff.killing_machine.up - Cast Obliterate if Killing Machine is active
simc
obliterate,if=buff.killing_machine.up - Cast Remorseless Winter if your distance to the target is at most 10 and you don't have Frozen Dominion talented
simc
remorseless_winter,if=target.distance<=10&!talent.frozen_dominion - Cast Frost Strike if your distance to the target is at most 8 and Frostbane is active
simc
frost_strike,if=target.distance<=8&buff.frostbane.up - Cast Howling Blast if Rime is active
simc
howling_blast,if=buff.rime.up - Cast Soul Reaper if the target is at or below 35% health and there are 2 or fewer enemies
simc
soul_reaper,if=target.health.pct<=35&active_enemies<=2 - Cast Glacial Advance if your distance to the target is at most 10 and there are more than 3 enemies and you have 8 or more Runic Power
simc
glacial_advance,if=target.distance<=10&active_enemies>3&runic_power>=8 - Cast Frost Strike if you have 8 or more Runic Power
simc
frost_strike,if=runic_power>=8 - Cast Frostscythe if your distance to the target is at most 8 and there are more than 3 enemies
simc
frostscythe,if=target.distance<=8&active_enemies>3 - Cast Obliterate
simc
obliterate - Cast Glacial Advance if your distance to the target is at most 10 and there are more than 3 enemies
simc
glacial_advance,if=target.distance<=10&active_enemies>3 - Cast Frost Strike
simc
frost_strike - Cast Howling Blast if your distance to the target is more than 15
simc
howling_blast,if=target.distance>15
Read from ActionPriorityLists/assisted_combat/deathknight_frost.simc in simulationcraft/simc at 1860cd1d5763, the commit this engine build runs.