## https://github.com/simulationcraft/simc/blob/thewarwithin/ActionPriorityLists/default/deathknight_frost.simc ## Up to date with SimC: March 5 2025 - 04347cf ## 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. actions.precombat+=/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)) actions.precombat+=/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)) actions.precombat+=/variable,name=trinket_1_buffs,value=trinket.1.has_cooldown&(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)|trinket.1.is.treacherous_transmitter actions.precombat+=/variable,name=trinket_2_buffs,value=trinket.2.has_cooldown&(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)|trinket.2.is.treacherous_transmitter actions.precombat+=/variable,name=trinket_1_duration,op=setif,value=15,value_else=trinket.1.proc.any_dps.duration,condition=trinket.1.is.treacherous_transmitter actions.precombat+=/variable,name=trinket_2_duration,op=setif,value=15,value_else=trinket.2.proc.any_dps.duration,condition=trinket.2.is.treacherous_transmitter actions.precombat+=/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))) actions.precombat+=/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 actions.precombat+=/variable,name=trinket_1_manual,value=trinket.1.is.algethar_puzzle_box|trinket.1.is.treacherous_transmitter actions.precombat+=/variable,name=trinket_2_manual,value=trinket.2.is.algethar_puzzle_box|trinket.2.is.treacherous_transmitter actions.precombat+=/variable,name=rw_buffs,value=talent.gathering_storm|talent.biting_cold actions.precombat+=/variable,name=breath_rp_cost,value=17 actions.precombat+=/variable,name=static_rime_buffs,value=talent.rage_of_the_frozen_champion|talent.icebreaker|talent.bind_in_darkness # APL Variable Option: How much Runic Power to pool before casting Breath of Sindragosa actions.precombat+=/variable,name=breath_rp_threshold,default=settings.bos_rp,op=reset # APL Variable Option: Used with erw_breath_rune_trigger to determine when resources are low enough to use Empower Rune Weapon actions.precombat+=/variable,name=erw_breath_rp_trigger,default=70,op=reset # APL Variable Option: Used with erw_breath_rp_trigger to determine when resources are low enough to use Empower Rune Weapon actions.precombat+=/variable,name=erw_breath_rune_trigger,default=3,op=reset # APL Variable Option: How many Runes the APL will try to pool for Pillar of Frost with Obliteration. It is not a guarantee, just a goal. actions.precombat+=/variable,name=oblit_rune_pooling,default=4,op=reset # APL Variable Option: Amount of Runic Power pooled during Breath of Sindragosa to be able to use Rime actions.precombat+=/variable,name=breath_rime_rp_threshold,default=60,op=reset # Interrupt actions+=/mind_freeze # Variables actions+=/variable,name=st_planning,value=active_enemies=1 actions+=/variable,name=adds_remain,value=active_enemies>1 actions+=/variable,name=use_breath,value=variable.st_planning|active_enemies>=2 actions+=/variable,name=sending_cds,value=(variable.st_planning|variable.adds_remain) actions+=/variable,name=rime_buffs,value=buff.rime.up&(variable.static_rime_buffs|talent.avalanche&!talent.arctic_assault&debuff.razorice.stack<5) actions+=/variable,name=rp_buffs,value=talent.unleashed_frenzy&(buff.unleashed_frenzy.remains10|!talent.obliteration)|!talent.pillar_of_frost&buff.empower_rune_weapon.up|!talent.pillar_of_frost&!talent.empower_rune_weapon|active_enemies>=2&buff.pillar_of_frost.up) # Formulaic approach to determine the time before these abilities come off cooldown that the simulation should star to pool resources. Capped at 15s in the run_action_list call. actions+=/variable,name=true_breath_cooldown,op=setif,value=cooldown.breath_of_sindragosa.remains,value_else=cooldown.pillar_of_frost.remains,condition=cooldown.breath_of_sindragosa.remains>cooldown.pillar_of_frost.remains actions+=/variable,name=oblit_pooling_time,op=setif,value=((cooldown.pillar_of_frost.remains_expected+1)%gcd.max)%((rune+1)*((runic_power+5)))*100,value_else=3,condition=runic_power<35&rune<2&cooldown.pillar_of_frost.remains_expected<10 actions+=/variable,name=breath_pooling_time,op=setif,value=((variable.true_breath_cooldown+1)%gcd.max)%((rune+1)*(runic_power+20))*100,value_else=0,condition=runic_power.deficit>10&variable.true_breath_cooldown<10 actions+=/variable,name=pooling_runes,value=rune0)&cooldown.pillar_of_frost.remains_expected30)&runic_power<35&cooldown.pillar_of_frost.remains=4)|(!talent.shattered_frost&!talent.shattering_blade&active_enemies>=2) actions+=/variable,name=breath_dying,value=runic_powerrunic_power%variable.breath_rp_cost actions+=/variable,name=fwf_buffs,value=(buff.pillar_of_frost.remains1|debuff.razorice.stack=5|!death_knight.runeforge.razorice&(!talent.glacial_advance|!talent.avalanche|!talent.arctic_assault)|talent.shattering_blade) ## High Priority Actions Use Power Infusion while Pillar of Frost is up, as well as Breath of Sindragosa or on cooldown if Pillar of Frost and Breath of Sindragosa are not talented ## actions.high_prio+=/invoke_external_buff,name=power_infusion,if=(buff.pillar_of_frost.up|!talent.pillar_of_frost)&(talent.obliteration|talent.breath_of_sindragosa&buff.breath_of_sindragosa.up|!talent.breath_of_sindragosa&!talent.obliteration) actions+=/antimagic_shell,if=runic_power.deficit>40&death_knight.first_ams_castcooldown.antimagic_shell.duration) # Trinkets actions+=/use_item,use_off_gcd=1,name=treacherous_transmitter,if=cooldown.pillar_of_frost.remains<6&variable.sending_cds&(variable.trinket_1_buffs&variable.trinket_2_buffs|!talent.breath_of_sindragosa|cooldown.breath_of_sindragosa.remains<6)|boss&fight_remains<30 ### When to complete the Tracherous Transmitter task given. ## actions+=/do_treacherous_transmitter_task,use_off_gcd=1,if=buff.pillar_of_frost.up|fight_remains<15 # Trinkets The trinket with the highest estimated value, will be used first and paired with Pillar of Frost. actions+=/use_item,slot=trinket1,if=!trinket.1.cast_time>0&variable.trinket_1_buffs&!variable.trinket_1_manual&((!variable.trinket_2_buffs&buff.breath_of_sindragosa.up|!talent.breath_of_sindragosa|variable.trinket_2_buffs)&buff.pillar_of_frost.remains>variable.trinket_1_duration%2)&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1) actions+=/use_item,slot=trinket2,if=!trinket.2.cast_time>0&variable.trinket_2_buffs&!variable.trinket_2_manual&((!variable.trinket_1_buffs&buff.breath_of_sindragosa.up|!talent.breath_of_sindragosa|variable.trinket_2_buffs)&buff.pillar_of_frost.remains>variable.trinket_2_duration%2)&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2) # Channeled buff trinkets will be used before cooldowns actions+=/use_item,slot=trinket1,use_off_gcd=1,if=trinket.1.cast_time>0&variable.trinket_1_buffs&!variable.trinket_1_manual&!buff.pillar_of_frost.up&(!talent.breath_of_sindragosa|!buff.breath_of_sindragosa.up&runic_power>variable.breath_rp_threshold&((buff.pillar_of_frost.remains>6|cooldown.pillar_of_frost.ready)&variable.sending_cds))&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1)|variable.trinket_1_duration>=fight_remains&boss actions+=/use_item,slot=trinket2,use_off_gcd=1,if=trinket.2.cast_time>0&variable.trinket_2_buffs&!variable.trinket_2_manual&!buff.pillar_of_frost.up&(!talent.breath_of_sindragosa|!buff.breath_of_sindragosa.up&runic_power>variable.breath_rp_threshold&((buff.pillar_of_frost.remains>6|cooldown.pillar_of_frost.ready)&variable.sending_cds))&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2)|variable.trinket_2_duration>=fight_remains&boss # If only one on use trinket provides a buff, use the other on cooldown. Or if neither trinket provides a buff, use both on cooldown. actions+=/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|!variable.breath_dying)&!buff.pillar_of_frost.up|!trinket.1.cast_time>0)&(!variable.trinket_2_buffs|cooldown.pillar_of_frost.remains>20)|!talent.pillar_of_frost)|boss&fight_remains<15 actions+=/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|!variable.breath_dying)&!buff.pillar_of_frost.up|!trinket.2.cast_time>0)&(!variable.trinket_1_buffs|cooldown.pillar_of_frost.remains>20)|!talent.pillar_of_frost)|boss&fight_remains<15 actions+=/use_item,slot=main_hand,if=buff.pillar_of_frost.up|(variable.trinket_1_buffs&variable.trinket_2_buffs&(trinket.1.cooldown.remains20)|boss&fight_remains<15 # Maintain Frost Fever, Icy Talons and Unleashed Frenzy actions+=/howling_blast,if=!dot.frost_fever.ticking&active_enemies>=2&(!talent.breath_of_sindragosa|!buff.breath_of_sindragosa.up)&(!talent.obliteration|talent.wither_away|talent.obliteration&(!cooldown.pillar_of_frost.ready|buff.pillar_of_frost.up&!buff.killing_machine.up)) # Cooldowns actions+=/potion,use_off_gcd=1,if=(!talent.breath_of_sindragosa|buff.breath_of_sindragosa.up)&(talent.pillar_of_frost&buff.pillar_of_frost.up&(talent.obliteration&buff.pillar_of_frost.remains>10|!talent.obliteration)|!talent.pillar_of_frost&buff.empower_rune_weapon.up|!talent.pillar_of_frost&!talent.empower_rune_weapon|active_enemies>=2&buff.pillar_of_frost.up)|boss&fight_remains<25 actions+=/abomination_limb,if=talent.obliteration&!buff.pillar_of_frost.up&variable.sending_cds&(!hero_tree.deathbringer|cooldown.reapers_mark.remains<5)|boss&fight_remains<15 actions+=/abomination_limb,if=!talent.obliteration&variable.sending_cds actions+=/remorseless_winter,if=variable.rw_buffs&variable.sending_cds&(!talent.arctic_assault|!buff.pillar_of_frost.up)&(cooldown.pillar_of_frost.remains>20|cooldown.pillar_of_frost.remains10 actions+=/chill_streak,if=variable.sending_cds&(!talent.arctic_assault|!buff.pillar_of_frost.up) actions+=/empower_rune_weapon,if=talent.obliteration&!talent.breath_of_sindragosa&buff.pillar_of_frost.up|boss&fight_remains<20 actions+=/empower_rune_weapon,if=buff.breath_of_sindragosa.up&(runic_power<40|runic_power10|!variable.use_breath)&buff.unleashed_frenzy.up&(!hero_tree.deathbringer|rune>1) actions+=/pillar_of_frost,if=!talent.obliteration&!talent.breath_of_sindragosa&variable.sending_cds actions+=/breath_of_sindragosa,use_off_gcd=1,if=!buff.breath_of_sindragosa.up&runic_power>variable.breath_rp_threshold&(rune<2|runic_power>80)&(cooldown.pillar_of_frost.ready&variable.use_breath|fight_remains<30)|(time<10&rune<1) actions+=/reapers_mark,cycle_targets=1,if=(boss|target.time_to_die>13)&debuff.reapers_mark_debuff.down&(buff.pillar_of_frost.up|cooldown.pillar_of_frost.remains>5) actions+=/frostwyrms_fury,if=hero_tree.rider_of_the_apocalypse&talent.apocalypse_now&variable.sending_cds&(!talent.breath_of_sindragosa&buff.pillar_of_frost.up|buff.breath_of_sindragosa.up)|boss&fight_remains<20 actions+=/frostwyrms_fury,if=!talent.apocalypse_now&active_enemies=1&(talent.pillar_of_frost&buff.pillar_of_frost.up&!talent.obliteration|!talent.pillar_of_frost)&variable.fwf_buffs|boss&fight_remains<3 actions+=/frostwyrms_fury,if=!talent.apocalypse_now&active_enemies>=2&(talent.pillar_of_frost&buff.pillar_of_frost.up|raid_event.adds.exists&raid_event.adds.up)&variable.fwf_buffs actions+=/frostwyrms_fury,if=!talent.apocalypse_now&talent.obliteration&(talent.pillar_of_frost&buff.pillar_of_frost.up&!main_hand.two_hand|!buff.pillar_of_frost.up&main_hand.2h&cooldown.pillar_of_frost.remains|!talent.pillar_of_frost)&variable.fwf_buffs actions+=/raise_dead,use_off_gcd=1,if=buff.pillar_of_frost.up actions+=/frostscythe,if=!buff.killing_machine.up&!buff.pillar_of_frost.up actions+=/any_dnd,if=hero_tree.deathbringer&!buff.death_and_decay.up&variable.st_planning&cooldown.reapers_mark.remains2 actions+=/any_dnd,if=!buff.death_and_decay.up&active_enemies>1&fight_remains>5&(buff.pillar_of_frost.up&buff.killing_machine.react&(talent.enduring_strength|buff.pillar_of_frost.remains>5))&(active_enemies>5|talent.cleaving_strikes&active_enemies>=2) actions+=/any_dnd,if=!buff.death_and_decay.up&active_enemies>1&fight_remains>5&(!buff.pillar_of_frost.up&(cooldown.death_and_decay.charges=2&cooldown.pillar_of_frost.remains))&(active_enemies>5|talent.cleaving_strikes&active_enemies>=2) actions+=/any_dnd,if=!buff.death_and_decay.up&active_enemies>1&fight_remains>5&(!buff.pillar_of_frost.up&(cooldown.death_and_decay.charges=1&cooldown.pillar_of_frost.remains>(cooldown.death_and_decay.duration-(cooldown.death_and_decay.duration*(cooldown.death_and_decay.charges_fractional%%1)))))&(active_enemies>5|talent.cleaving_strikes&active_enemies>=2) actions+=/any_dnd,if=!buff.death_and_decay.up&active_enemies>1&fight_remains>5&(!buff.pillar_of_frost.up&(!talent.the_long_winter&cooldown.pillar_of_frost.remains5|talent.cleaving_strikes&active_enemies>=2) # Racial Abilities actions+=/blood_fury,use_off_gcd=1,if=variable.cooldown_check actions+=/berserking,use_off_gcd=1,if=variable.cooldown_check actions+=/arcane_pulse,if=variable.cooldown_check actions+=/lights_judgment,if=variable.cooldown_check actions+=/ancestral_call,use_off_gcd=1,if=variable.cooldown_check actions+=/fireblood,use_off_gcd=1,if=variable.cooldown_check actions+=/bag_of_tricks,if=talent.obliteration&!buff.pillar_of_frost.up&buff.unholy_strength.up actions+=/bag_of_tricks,if=!talent.obliteration&buff.pillar_of_frost.up&(buff.unholy_strength.up&buff.unholy_strength.remains0 actions+=/run_action_list,name=obliteration,strict_if=talent.obliteration&buff.pillar_of_frost.up,if=talent.obliteration&buff.pillar_of_frost.up&!buff.breath_of_sindragosa.up actions+=/call_action_list,name=aoe,strict=1,if=active_enemies>=2 actions+=/call_action_list,name=single_target,strict=1,if=active_enemies=1 # Cold Heart actions.cold_heart+=/chains_of_ice,if=fight_remains=4|main_hand.2h&buff.cold_heart.stack>8)|buff.killing_machine.up&(!main_hand.2h&buff.cold_heart.stack>8|main_hand.2h&buff.cold_heart.stack>10)) actions.cold_heart+=/chains_of_ice,if=!talent.obliteration&buff.pillar_of_frost.up&buff.cold_heart.stack>=10&(buff.pillar_of_frost.remains15&(buff.cold_heart.stack>=10&buff.unholy_strength.up|buff.cold_heart.stack>=13) actions.cold_heart+=/chains_of_ice,if=!talent.obliteration&!death_knight.runeforge.fallen_crusader&buff.cold_heart.stack>=10&!buff.pillar_of_frost.up&cooldown.pillar_of_frost.remains>20 actions.cold_heart+=/chains_of_ice,if=talent.obliteration&!buff.pillar_of_frost.up&(buff.cold_heart.stack>=14&buff.unholy_strength.up|buff.cold_heart.stack>=19|cooldown.pillar_of_frost.remains<3&buff.cold_heart.stack>=14) # Breath Active Rotation actions.breath+=/obliterate,cycle_targets=1,if=buff.killing_machine.stack=2 actions.breath+=/soul_reaper,if=fight_remains>5&target.time_to_pct_35<5&target.time_to_die>5&runic_power>50 actions.breath+=/howling_blast,if=(variable.rime_buffs|!buff.killing_machine.up&buff.pillar_of_frost.up&talent.obliteration&!buff.bonegrinder_frost.up)&runic_power>(variable.breath_rime_rp_threshold-(talent.rage_of_the_frozen_champion*6))|!dot.frost_fever.ticking actions.breath+=/horn_of_winter,if=rune<2&runic_power.deficit>30&(!buff.empower_rune_weapon.up|runic_power20 actions.breath+=/soul_reaper,if=fight_remains>5&target.time_to_pct_35<5&target.time_to_die>5&active_enemies=1&rune>2 actions.breath+=/remorseless_winter,if=variable.breath_dying actions.breath+=/any_dnd,if=!death_and_decay.ticking&(variable.st_planning&talent.unholy_ground&runic_power.deficit>=10&!talent.obliteration|variable.breath_dying) actions.breath+=/howling_blast,if=variable.breath_dying actions.breath+=/arcane_torrent,if=runic_power<60 actions.breath+=/howling_blast,if=buff.rime.up # Obliteration Active Rotation actions.obliteration+=/obliterate,cycle_targets=1,if=buff.killing_machine.up&(buff.exterminate.up|fight_remains5&target.time_to_pct_35<5&target.time_to_die>5&active_enemies=1&rune>2&!buff.killing_machine.up actions.obliteration+=/obliterate,cycle_targets=1,if=buff.killing_machine.up actions.obliteration+=/soul_reaper,if=fight_remains>5&target.time_to_pct_35<5&target.time_to_die>5&rune>2 actions.obliteration+=/howling_blast,cycle_targets=1,if=!buff.killing_machine.up&(!dot.frost_fever.ticking) actions.obliteration+=/glacial_advance,cycle_targets=1,if=(variable.ga_priority|debuff.razorice.stack<5)&(!death_knight.runeforge.razorice&(debuff.razorice.stack<5|debuff.razorice.remains1)) actions.obliteration+=/frost_strike,cycle_targets=1,if=(rune<2|variable.rp_buffs|debuff.razorice.stack=5&talent.shattering_blade)&!variable.pooling_runic_power&(!talent.glacial_advance|active_enemies=1|talent.shattered_frost) actions.obliteration+=/howling_blast,if=buff.rime.up actions.obliteration+=/frost_strike,cycle_targets=1,if=!variable.pooling_runic_power&(!talent.glacial_advance|active_enemies=1|talent.shattered_frost) actions.obliteration+=/glacial_advance,cycle_targets=1,if=!variable.pooling_runic_power&variable.ga_priority actions.obliteration+=/frost_strike,cycle_targets=1,if=!variable.pooling_runic_power actions.obliteration+=/horn_of_winter,if=rune<3 actions.obliteration+=/arcane_torrent,if=rune<1&runic_power<30 actions.obliteration+=/howling_blast,if=!buff.killing_machine.up # AoE Action List actions.aoe+=/obliterate,if=buff.killing_machine.up&talent.cleaving_strikes&buff.death_and_decay.up actions.aoe+=/frost_strike,cycle_targets=1,if=!variable.pooling_runic_power&debuff.razorice.stack=5&talent.shattering_blade&(talent.shattered_frost|active_enemies<4) actions.aoe+=/howling_blast,cycle_targets=1,if=!dot.frost_fever.ticking actions.aoe+=/howling_blast,if=buff.rime.up actions.aoe+=/obliterate,if=buff.killing_machine.stack>0 actions.aoe+=/glacial_advance,cycle_targets=1,if=!variable.pooling_runic_power&(variable.ga_priority|debuff.razorice.stack<5) actions.aoe+=/frost_strike,cycle_targets=1,if=!variable.pooling_runic_power actions.aoe+=/obliterate actions.aoe+=/horn_of_winter,if=rune<2&runic_power.deficit>25&(!talent.breath_of_sindragosa|variable.true_breath_cooldown>cooldown.horn_of_winter.duration-15) actions.aoe+=/arcane_torrent,if=runic_power.deficit>25 # Single Target Rotation actions.single_target+=/frost_strike,if=talent.a_feast_of_souls&debuff.razorice.stack=5&talent.shattering_blade&buff.a_feast_of_souls.up actions.single_target+=/obliterate,if=buff.killing_machine.stack=2|buff.exterminate.up actions.single_target+=/frost_strike,if=(debuff.razorice.stack=5&talent.shattering_blade)|(rune<2&!talent.icebreaker) actions.single_target+=/soul_reaper,if=fight_remains>5&target.time_to_pct_35<5&target.time_to_die>5&!buff.killing_machine.react actions.single_target+=/howling_blast,if=variable.rime_buffs actions.single_target+=/obliterate,if=buff.killing_machine.up&!variable.pooling_runes actions.single_target+=/soul_reaper,if=fight_remains>5&target.time_to_pct_35<5&target.time_to_die>5&rune>2 actions.single_target+=/frost_strike,if=!variable.pooling_runic_power&(variable.rp_buffs|(!talent.shattering_blade&runic_power.deficit<20)) actions.single_target+=/howling_blast,if=buff.rime.up actions.single_target+=/frost_strike,if=!variable.pooling_runic_power&!(main_hand.2h|talent.shattering_blade) actions.single_target+=/obliterate,if=!variable.pooling_runes&main_hand.2h actions.single_target+=/frost_strike,if=!variable.pooling_runic_power actions.single_target+=/obliterate,if=!variable.pooling_runes actions.single_target+=/howling_blast,if=!dot.frost_fever.ticking actions.single_target+=/horn_of_winter,if=rune<2&runic_power.deficit>25&(!talent.breath_of_sindragosa|variable.true_breath_cooldown>cooldown.horn_of_winter.duration-15) actions.single_target+=/arcane_torrent,if=!talent.breath_of_sindragosa&runic_power.deficit>20