Cogspark Works · Rotation
Devastation Evoker
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
- Trinkets
- Sc (maybe)
- Es (maybe)
- Fb sc (maybe)
- Green (maybe)
- Fs (maybe)
- Fb fs (maybe)
Before the pull, done once before the fight starts (26 steps)
Before the pull26 lines
- Record your stats before the pull (sim bookkeeping)
simc
snapshot_stats - Set trinket 1 buffs to true when the following holds, otherwise falseany of these:
- trinket 1 can grant Intellect
- trinket 1 can grant Mastery
- trinket 1 can grant Versatility
- trinket 1 can grant Haste
- trinket 1 can grant Critical Strike
simc
variable,name=trinket_1_buffs,value=trinket.1.has_buff.intellect|trinket.1.has_buff.mastery|trinket.1.has_buff.versatility|trinket.1.has_buff.haste|trinket.1.has_buff.crit - Set trinket 2 buffs to true when the following holds, otherwise falseany of these:
- trinket 2 can grant Intellect
- trinket 2 can grant Mastery
- trinket 2 can grant Versatility
- trinket 2 can grant Haste
- trinket 2 can grant Critical Strike
simc
variable,name=trinket_2_buffs,value=trinket.2.has_buff.intellect|trinket.2.has_buff.mastery|trinket.2.has_buff.versatility|trinket.2.has_buff.haste|trinket.2.has_buff.crit - Set weapon buffs to 0
simc
variable,name=weapon_buffs,value=0 - Set weapon sync to 1 when the following holds, otherwise to 0.5never
simc
variable,name=weapon_sync,op=setif,value=1,value_else=0.5,condition=0 - Set weapon stat value to 0
simc
variable,name=weapon_stat_value,value=0 - Set trinket 1 sync to 1 when the following holds, otherwise to 0.5all of these:
- trinket 1 buffs is true
- any of these:
- the remainder of trinket 1's cooldown divided by Dragonrage's cooldown is 0
- the remainder of Dragonrage's cooldown divided by trinket 1's cooldown is 0
simc
variable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_1_buffs&(trinket.1.cooldown.duration%%cooldown.dragonrage.duration=0|cooldown.dragonrage.duration%%trinket.1.cooldown.duration=0) - Set trinket 2 sync to 1 when the following holds, otherwise to 0.5all of these:
- trinket 2 buffs is true
- any of these:
- the remainder of trinket 2's cooldown divided by Dragonrage's cooldown is 0
- the remainder of Dragonrage's cooldown divided by trinket 2's cooldown is 0
simc
variable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_2_buffs&(trinket.2.cooldown.duration%%cooldown.dragonrage.duration=0|cooldown.dragonrage.duration%%trinket.2.cooldown.duration=0) - Set trinket 1 manual to true when the following holds, otherwise falsetrinket 1 is Font of Venomous Rage
simc
variable,name=trinket_1_manual,value=trinket.1.is.font_of_venomous_rage - Set trinket 2 manual to true when the following holds, otherwise falsetrinket 2 is Font of Venomous Rage
simc
variable,name=trinket_2_manual,value=trinket.2.is.font_of_venomous_rage - Set trinket 1 ogcd cast to 0
simc
variable,name=trinket_1_ogcd_cast,value=0 - Set trinket 2 ogcd cast to 0
simc
variable,name=trinket_2_ogcd_cast,value=0 - Set trinket 1 exclude to true when the following holds, otherwise falseany of these:
- trinket 1 is Ruby Whelp Shell
- trinket 1 is Whispering Incarnate Icon
simc
variable,name=trinket_1_exclude,value=trinket.1.is.ruby_whelp_shell|trinket.1.is.whispering_incarnate_icon - Set trinket 2 exclude to true when the following holds, otherwise falseany of these:
- trinket 2 is Ruby Whelp Shell
- trinket 2 is Whispering Incarnate Icon
simc
variable,name=trinket_2_exclude,value=trinket.2.is.ruby_whelp_shell|trinket.2.is.whispering_incarnate_icon - 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
- all of these:
- trinket 2 buffs is true
- trinket 2's stat buff's duration times trinket 2 sync times trinket 2's stat buff's base value is more than trinket 1's stat buff's duration times trinket 1 sync times trinket 1's stat buff's base value
simc
variable,name=trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_1_buffs&variable.trinket_2_buffs|variable.trinket_2_buffs&((trinket.2.proc.any_dps.duration)*(variable.trinket_2_sync)*trinket.2.proc.any_dps.default_value)>((trinket.1.proc.any_dps.duration)*(variable.trinket_1_sync)*trinket.1.proc.any_dps.default_value) - all of these:
- Set trinket priority to 3 when the following holds, otherwise to trinket priorityany of these:Only updated when weapon buffs is true
- all of these:
- trinket 1 buffs is false
- trinket 2 buffs is false
- weapon stat value times weapon sync is more than the larger of (trinket 2's stat buff's duration times trinket 2 sync times trinket 2's stat buff's base value) and (trinket 1's stat buff's duration times trinket 1 sync times trinket 1's stat buff's base value)
simc
variable,name=trinket_priority,op=setif,if=variable.weapon_buffs,value=3,value_else=variable.trinket_priority,condition=!variable.trinket_1_buffs&!variable.trinket_2_buffs|variable.weapon_stat_value*variable.weapon_sync>(((trinket.2.proc.any_dps.duration)*(variable.trinket_2_sync)*trinket.2.proc.any_dps.default_value)<?((trinket.1.proc.any_dps.duration)*(variable.trinket_1_sync)*trinket.1.proc.any_dps.default_value)) - all of these:
- Set trinket priority to (1 if trinket 1 is Signet of the Priory, else 0) plus (2 if trinket 2 is Signet of the Priory, else 0)all of these:
- you have Signet of the Priory equipped
- trinket priority is 3
simc
variable,name=trinket_priority,op=set,value=trinket.1.is.signet_of_the_priory+2*trinket.2.is.signet_of_the_priory,if=equipped.signet_of_the_priory&variable.trinket_priority=3 - 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 r1 cast time to 1.0 times
spell_hastesimc
variable,name=r1_cast_time,value=1.0*spell_haste - Reset dr prep time to its starting valuedr prep time starts each fight at 6
simc
variable,name=dr_prep_time,default=6,op=reset - Reset dr prep time aoe to its starting valuedr prep time aoe starts each fight at 4
simc
variable,name=dr_prep_time_aoe,default=4,op=reset - Set can use empower to 1any of these:can use empower starts each fight at 1
- you don't have Animosity talented
- you don't have Dragonrage talented
simc
variable,name=can_use_empower,value=1,default=1,if=!talent.animosity|!talent.dragonrage - Cast Verdant Embrace if you have Scarlet Adaptation talented
simc
verdant_embrace,if=talent.scarlet_adaptation - Cast Hover if you have Slipstream talented
simc
hover,if=talent.slipstream - Cast Hover if you have Slipstream talented
simc
hover,if=talent.slipstream - Cast Living Flame
simc
living_flame
The main loop10 lines
- Drink a potion if you don't have Dragonrage talented or Dragonrage is active or the fight ends within 35 s
simc
potion,if=(!talent.dragonrage|buff.dragonrage.up)|fight_remains<35 - Set next dragonrage to the larger of the cooldown left on Dragonrage and (the smaller of (the cooldown left on Eternity Surge minus 8) and (the cooldown left on Fire Breath minus 8))
simc
variable,name=next_dragonrage,value=cooldown.dragonrage.remains<?((cooldown.eternity_surge.remains-8)>?(cooldown.fire_breath.remains-8)) - Get Power Infusion from an ally if Dragonrage is active or the fight ends within 35 s
simc
invoke_external_buff,name=power_infusion,if=buff.dragonrage.up|fight_remains<35 - Set can use empower to true when the following holds, otherwise falseDragonrage has at least one global cooldown times dr prep time of cooldown leftOnly updated when you have Animosity talented and you have Dragonrage talented
simc
variable,name=can_use_empower,op=set,value=cooldown.dragonrage.remains>=gcd.max*variable.dr_prep_time,if=talent.animosity&talent.dragonrage - Set use pyre fs to true when the following holds, otherwise falseall of these:
- you have Legacy of the Lifebinder talented
- any of these:
- there are 5 or more enemies
- all of these:
- there are 3 or more enemies
- any of these:
- your rank in Volatility is 2
- you have Feed the Flames talented
simc
variable,name=use_pyre_fs,op=set,value=talent.legacy_of_the_lifebinder&(active_enemies>=5|active_enemies>=3&(talent.volatility.rank=2|talent.feed_the_flames)) - Set use tts to true when the following holds, otherwise falseEternity Surge comes off cooldown within the time until Fire Breath can be usedOnly updated when you have Legacy of the Lifebinder talented
simc
variable,name=use_tts,op=set,value=(cooldown.eternity_surge.remains<=action.fire_breath.usable_in),if=talent.legacy_of_the_lifebinder - Cast Quell if the target is castingUsed without waiting for the global cooldown
simc
quell,use_off_gcd=1,if=target.debuff.casting.react go through Trinkets, then carry on below if nothing there fits
simc
call_action_list,name=trinketsTrinkets8 lines
- Use your trinket 1 if (Dragonrage is active and (Rising Fury has 4 or more stacks or you don't have Rising Fury talented or you have Legacy of the Lifebinder talented) and ((trinket 2 buffs is true and Fire Breath is on cooldown and trinket 2 is on cooldown) or (Tip the Scales is active and trinket priority is 1) or Fire Breath is on cooldown or there are 3 or more enemies) and (trinket 2 has no cooldown or trinket 2 is on cooldown or trinket priority is 1 or trinket 2 exclude is true) and trinket 1 manual is false) or trinket 1's stat buff's duration is at least the time left in the fight or (trinket 1's cooldown is at most 60 s and (next dragonrage is more than 20 or you don't have Dragonrage talented) and (Dragonrage isn't active or trinket priority is 1) and trinket 1 manual is false)Trinket Spaghetti
simc
use_item,slot=trinket1,if=(buff.dragonrage.up&(buff.rising_fury.stack>=4|!talent.rising_fury|talent.legacy_of_the_lifebinder)&((variable.trinket_2_buffs&!cooldown.fire_breath.up&trinket.2.cooldown.remains)|buff.tip_the_scales.up&variable.trinket_priority=1|(!cooldown.fire_breath.up)|active_enemies>=3)&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1|variable.trinket_2_exclude)&!variable.trinket_1_manual|trinket.1.proc.any_dps.duration>=fight_remains|trinket.1.cooldown.duration<=60&(variable.next_dragonrage>20|!talent.dragonrage)&(!buff.dragonrage.up|variable.trinket_priority=1)&!variable.trinket_1_manual) - Use your trinket 2 if (Dragonrage is active and (Rising Fury has 4 or more stacks or you don't have Rising Fury talented or you have Legacy of the Lifebinder talented) and ((trinket 1 buffs is true and Fire Breath is on cooldown and trinket 1 is on cooldown) or (Tip the Scales is active and trinket priority is 2) or Fire Breath is on cooldown or there are 3 or more enemies) and (trinket 1 has no cooldown or trinket 1 is on cooldown or trinket priority is 2 or trinket 1 exclude is true) and trinket 2 manual is false) or trinket 2's stat buff's duration is at least the time left in the fight or (trinket 2's cooldown is at most 60 s and (next dragonrage is more than 20 or you don't have Dragonrage talented) and (Dragonrage isn't active or trinket priority is 2) and trinket 2 manual is false)
simc
use_item,slot=trinket2,if=buff.dragonrage.up&(buff.rising_fury.stack>=4|!talent.rising_fury|talent.legacy_of_the_lifebinder)&((variable.trinket_1_buffs&!cooldown.fire_breath.up&trinket.1.cooldown.remains)|buff.tip_the_scales.up&variable.trinket_priority=2|(!cooldown.fire_breath.up)|active_enemies>=3)&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2|variable.trinket_1_exclude)&!variable.trinket_2_manual|trinket.2.proc.any_dps.duration>=fight_remains|trinket.2.cooldown.duration<=60&(variable.next_dragonrage>20|!talent.dragonrage)&(!buff.dragonrage.up|variable.trinket_priority=2)&!variable.trinket_2_manual - 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 is on cooldown or trinket 2 is Spymasters Web or trinket 2's cooldown is 0 s) and the time left on the global cooldown is more than 0.1 s and your last spell on the global cooldown wasn't Deep Breath and (next dragonrage is more than 20 or you don't have Dragonrage talented or trinket 2 buffs is false or (trinket 2 is Spymasters Web and (Spymaster's Report has fewer than 5 stacks or at least 130 s plus next dragonrage of the fight remain)))Used without waiting for the global cooldown
simc
use_item,use_off_gcd=1,slot=trinket1,if=!variable.trinket_1_buffs&!variable.trinket_1_manual&(variable.damage_trinket_priority=1|trinket.2.cooldown.remains|trinket.2.is.spymasters_web|trinket.2.cooldown.duration=0)&(gcd.remains>0.1&!prev_gcd.1.deep_breath)&(variable.next_dragonrage>20|!talent.dragonrage|!variable.trinket_2_buffs|trinket.2.is.spymasters_web&(buff.spymasters_report.stack<5|fight_remains>=130+variable.next_dragonrage)) - 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 is on cooldown or trinket 1 is Spymasters Web or trinket 1's cooldown is 0 s) and the time left on the global cooldown is more than 0.1 s and your last spell on the global cooldown wasn't Deep Breath and (next dragonrage is more than 20 or you don't have Dragonrage talented or trinket 1 buffs is false or (trinket 1 is Spymasters Web and (Spymaster's Report has fewer than 5 stacks or at least 130 s plus next dragonrage of the fight remain)))Used without waiting for the global cooldown
simc
use_item,use_off_gcd=1,slot=trinket2,if=!variable.trinket_2_buffs&!variable.trinket_2_manual&(variable.damage_trinket_priority=2|trinket.1.cooldown.remains|trinket.1.is.spymasters_web|trinket.1.cooldown.duration=0)&(gcd.remains>0.1&!prev_gcd.1.deep_breath)&(variable.next_dragonrage>20|!talent.dragonrage|!variable.trinket_1_buffs|trinket.1.is.spymasters_web&(buff.spymasters_report.stack<5|fight_remains>=130+variable.next_dragonrage)) - 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 is on cooldown or trinket 2 is Spymasters Web or trinket 2's cooldown is 0 s) and (next dragonrage is more than 20 or you don't have Dragonrage talented or trinket 2 buffs is false or (trinket 2 is Spymasters Web and (Spymaster's Report has fewer than 5 stacks or at least 130 s plus next dragonrage of the fight remain)))
simc
use_item,slot=trinket1,if=!variable.trinket_1_buffs&!variable.trinket_1_manual&(variable.damage_trinket_priority=1|trinket.2.cooldown.remains|trinket.2.is.spymasters_web|trinket.2.cooldown.duration=0)&(!variable.trinket_1_ogcd_cast)&(variable.next_dragonrage>20|!talent.dragonrage|!variable.trinket_2_buffs|trinket.2.is.spymasters_web&(buff.spymasters_report.stack<5|fight_remains>=130+variable.next_dragonrage)) - 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 is on cooldown or trinket 1 is Spymasters Web or trinket 1's cooldown is 0 s) and (next dragonrage is more than 20 or you don't have Dragonrage talented or trinket 1 buffs is false or (trinket 1 is Spymasters Web and (Spymaster's Report has fewer than 5 stacks or at least 130 s plus next dragonrage of the fight remain)))
simc
use_item,slot=trinket2,if=!variable.trinket_2_buffs&!variable.trinket_2_manual&(variable.damage_trinket_priority=2|trinket.1.cooldown.remains|trinket.1.is.spymasters_web|trinket.1.cooldown.duration=0)&(!variable.trinket_2_ogcd_cast)&(variable.next_dragonrage>20|!talent.dragonrage|!variable.trinket_1_buffs|trinket.1.is.spymasters_web&(buff.spymasters_report.stack<5|fight_remains>=130+variable.next_dragonrage)) - Use Font of Venomous Rage if Dragonrage isn't active
simc
use_item,name=font_of_venomous_rage,if=!buff.dragonrage.up
Is it true that you have Mass Disintegrate talented?Not set
If so, switch to Sc, and nothing below is checked
simc
run_action_list,name=sc,if=talent.mass_disintegrateSc17 lines
- Cast Deep Breath if Strafing Run has at most 2 global cooldowns left, or isn't activeCancel the channel when the global cooldown is overSC Action List. Use Deep Breath to optimise for Strafing Run
simc
deep_breath,if=buff.strafing_run.remains<=gcd.max*2,cancel_if=gcd.remains<=0 - Cast Dragonrage if (the target lives at least 30 s longer and the next add wave starts in at least 60 s (or never)) or the fight has no add waves or the time until the next add wave is 0 s
simc
dragonrage,if=target.time_to_die>=30&raid_event.adds.in>=60|!raid_event.adds.exists|raid_event.adds.in=0 - Cast Hover if (the next movement phase starts within 6 s and Hover isn't active and the time left on the global cooldown is at least 0.5 s) or (you have Slipstream talented and the time left on the global cooldown is at least 0.5 s)Used without waiting for the global cooldown
simc
hover,use_off_gcd=1,if=raid_event.movement.in<6&!buff.hover.up&gcd.remains>=0.5|talent.slipstream&gcd.remains>=0.5 - Cast Azure Sweep if (Essence Burst isn't active or Essence Burst isn't at maximum stacks) and you have the 2-piece set bonus (mid1) and Eternity Surge comes off cooldown within 6 sUse Azure Sweep if Eternity Surge is reasonably Soon. This is not a magic number, it's just simpler than writing out the expansion to account for azure sweep stacks.
simc
azure_sweep,if=(buff.essence_burst.down|!buff.essence_burst.at_max_stacks)&set_bonus.mid1_2pc&cooldown.eternity_surge.remains<=6 go through Es, then carry on below if nothing there fits
Swell Gaming with EoI is good, With EH its badsimc
call_action_list,name=esEs4 lines
- Cast Eternity Surge if (the number of enemies is 4 plus (4 if you have Eternity's Span talented, else 0) and you don't have Star Salvo talented) or (the number of enemies is at least 4 plus (4 if you have Eternity's Span talented, else 0) minus (1 if you have Star Salvo talented, else 0) and you have Star Salvo talented)target on the enemy with the highest target's healthEmpower it to rank 4Pick optimal Eternity Surge Rank
simc
eternity_surge,empower_to=4,target_if=max:target.health.pct,if=(active_enemies=4+4*talent.eternitys_span)&!talent.star_salvo|(active_enemies>=4+4*talent.eternitys_span-talent.star_salvo)&talent.star_salvo - Cast Eternity Surge if (the number of enemies is 3 plus (3 if you have Eternity's Span talented, else 0) and you don't have Star Salvo talented) or (the number of enemies is at least 3 plus (3 if you have Eternity's Span talented, else 0) minus (1 if you have Star Salvo talented, else 0) and you have Star Salvo talented)target on the enemy with the highest target's healthEmpower it to rank 3
simc
eternity_surge,empower_to=3,target_if=max:target.health.pct,if=(active_enemies=3+3*talent.eternitys_span)&!talent.star_salvo|(active_enemies>=3+3*talent.eternitys_span-talent.star_salvo)&talent.star_salvo - Cast Eternity Surge if (the number of enemies is 2 plus (2 if you have Eternity's Span talented, else 0) and you don't have Star Salvo talented) or (the number of enemies is at least 2 plus (2 if you have Eternity's Span talented, else 0) minus (1 if you have Star Salvo talented, else 0) and you have Star Salvo talented)target on the enemy with the highest target's healthEmpower it to rank 2
simc
eternity_surge,empower_to=2,target_if=max:target.health.pct,if=(active_enemies=2+2*talent.eternitys_span)&!talent.star_salvo|(active_enemies>=2+2*talent.eternitys_span-talent.star_salvo)&talent.star_salvo - Cast Eternity Surgetarget on the enemy with the highest target's healthEmpower it to rank 1
simc
eternity_surge,empower_to=1,target_if=max:target.health.pct
- Cast Tip the Scales if Fire Breath can be used nowUsed without waiting for the global cooldown
simc
tip_the_scales,use_off_gcd=1,if=action.fire_breath.ready go through Fb sc, then carry on below if nothing there fits
simc
call_action_list,name=fb_scFb sc4 lines
- Cast Fire Breath if there is a single enemy or there are more than 4 enemiestarget on the enemy with the highest target's healthEmpower it to rank 1Fire Breath Upranking
simc
fire_breath,empower_to=1,target_if=max:target.health.pct,if=active_enemies=1|active_enemies>4 - Cast Fire Breath if there are exactly 2 enemiestarget on the enemy with the highest target's healthEmpower it to rank 2
simc
fire_breath,empower_to=2,target_if=max:target.health.pct,if=active_enemies=2 - Cast Fire Breath if there are exactly 3 enemiestarget on the enemy with the highest target's healthEmpower it to rank 3
simc
fire_breath,empower_to=3,target_if=max:target.health.pct,if=active_enemies=3 - Cast Fire Breath if there are exactly 4 enemiestarget on the enemy with the highest target's healthEmpower it to rank 4
simc
fire_breath,empower_to=4,target_if=max:target.health.pct,if=active_enemies=4
- Cast Deep Breath if there are 2 or more enemiesCancel the channel when the global cooldown is overUsing DB whenever is neutral at 2T and a gain above
simc
deep_breath,if=active_enemies>=2,cancel_if=gcd.remains=0 - Cast Disintegrate if (the next movement phase starts in more than 2 s (or never) or Hover is active) and Mass Disintegrate Stacks is active and Charged Blast has fewer than 15 stacksStop channeling when you have Volatility talented and there are 8 or more enemies and something higher in the list is readyRecast it early to keep the channel going when the ticks left on Disintegrate is at most 1 and Mass Disintegrate Stacks is active
simc
disintegrate,early_chain_if=ticks_remain<=1&buff.mass_disintegrate_stacks.up,if=(raid_event.movement.in>2|buff.hover.up)&buff.mass_disintegrate_stacks.up&buff.charged_blast.stack<15,interrupt_if=talent.volatility&active_enemies>=8 - Cast Pyre if ((there are 5 or more enemies or (there are 4 or more enemies and your rank in Volatility is 2)) and Mass Disintegrate Stacks isn't active) or (there are 3 or more enemies and you have Charged Blast talented and Charged Blast has 15 or more stacks)target on the enemy with the highest target's health
simc
pyre,target_if=max:target.health.pct,if=(active_enemies>=5|active_enemies>=4&talent.volatility.rank=2)&!buff.mass_disintegrate_stacks.up|active_enemies>=3&talent.charged_blast&buff.charged_blast.stack>=15 - Cast Disintegrate if the next movement phase starts in more than 2 s (or never) or Hover is activetarget on the enemy with the highest time left on Fire Breath DamageStop channeling when the ticks left on Disintegrate is at most 1 and there are 3 or more enemies and something higher in the list is readyRecast it early to keep the channel going when the ticks left on Disintegrate is at most 1
simc
disintegrate,target_if=max:dot.fire_breath_damage.remains,if=(raid_event.movement.in>2|buff.hover.up),early_chain_if=ticks_remain<=1,interrupt_if=ticks_remain<=1&active_enemies>=3 - Cast Living Flame if Burnout is active and Leaping Flames is active and the number of enemies is at most 1 plus the stacks of Leaping Flames
simc
living_flame,if=buff.burnout.up&buff.leaping_flames.up&active_enemies<=1+buff.leaping_flames.stack - Cast Unbound Flame if Essence Burst isn't at maximum stacks
simc
unbound_flame,if=!buff.essence_burst.at_max_stacks - Cast Azure Sweep
simc
azure_sweep - Cast Living Flame if the next movement phase starts in more than Living Flame's cast time (or never) or Hover is active
simc
living_flame,if=raid_event.movement.in>execute_time|buff.hover.up Is it true that you have Ancient Flame talented and Ancient Flame isn't active and you have Scarlet Adaptation talented and Dragonrage isn't active?Not set
If so, go through Green, then carry on below if nothing there fits
simc
call_action_list,name=green,if=talent.ancient_flame&!buff.ancient_flame.up&talent.scarlet_adaptation&!buff.dragonrage.up- Cast Azure Strike
simc
azure_strike
switch to Fs, and nothing below is checked
simc
run_action_list,name=fsFs15 lines
- Cast Fire Breath if Dragonrage comes off cooldown within 2 global cooldowns and Fire Breath Damage isn't on any enemy and (the target lives at least 15 s longer or the fight has no add waves) and use pyre fs is truetarget on the enemy with the highest target's healthEmpower it to rank 1Flameshaper Action List. AoE Precast for Dragonrage Pyres
simc
fire_breath,target_if=max:target.health.pct,empower_to=1,if=cooldown.dragonrage.remains<gcd.max*2&active_dot.fire_breath_damage=0&(target.time_to_die>=15|!raid_event.adds.exists)&variable.use_pyre_fs - Cast Dragonrage if (the target lives at least 30 s longer and the next add wave starts in at least 60 s (or never)) or (the target lives at least 15 s longer and there are more than 4 enemies) or the fight has no add waves or the time until the next add wave is 0 s
simc
dragonrage,if=target.time_to_die>=30&raid_event.adds.in>=60|target.time_to_die>=15&active_enemies>4|!raid_event.adds.exists|raid_event.adds.in=0 - Cast Hover if the next movement phase starts within 6 s and Hover isn't active and the time left on the global cooldown is at least 0.5 s and use pyre fs is falseUsed without waiting for the global cooldown
simc
hover,use_off_gcd=1,if=raid_event.movement.in<6&!buff.hover.up&gcd.remains>=0.5&!variable.use_pyre_fs - Cast Tip the Scales if Dragonrage is active and use tts is trueUsed without waiting for the global cooldown
simc
tip_the_scales,use_off_gcd=1,if=buff.dragonrage.up&variable.use_tts Is it true that can use empower is true or Tip the Scales is active?Not set
If so, go through Es, then carry on below if nothing there fits
Target Match with ES (Hitting everything is priority over lower ranks)simc
call_action_list,name=es,if=variable.can_use_empower|buff.tip_the_scales.upIs it true that can use empower is true and Fire Breath Damage is missing from the target or due for a refresh and Tip the Scales isn't active?Not set
If so, go through Fb fs, then carry on below if nothing there fits
Upranking in 2-3T is back on the menu boyssimc
call_action_list,name=fb_fs,if=variable.can_use_empower&dot.fire_breath_damage.refreshable&!buff.tip_the_scales.up- Cast Pyre if use pyre fs is truetarget on the enemy with the highest target's health
simc
pyre,target_if=max:target.health.pct,if=variable.use_pyre_fs - Cast Disintegrate if the next movement phase starts in more than 2 s (or never) or Hover is activetarget on the enemy with the highest time left on Fire Breath DamageStop channeling when the ticks left on Disintegrate is at most 1 and something higher in the list is readyRecast it on its last tick to keep the channel goingRecast it early to keep the channel going when the ticks left on Disintegrate is at most 1
simc
disintegrate,target_if=max:dot.fire_breath_damage.remains,chain=1,if=(raid_event.movement.in>2|buff.hover.up),early_chain_if=ticks_remain<=1,interrupt_if=ticks_remain<=1 - Cast Deep Breath if you have Imminent Destruction talented and Fire Breath Damage isn't on any enemy and there are 4 or more enemiesStop channeling when the global cooldown is over and something higher in the list is readyCancel the channel when the global cooldown is overQueue the token deep breath condition
simc
deep_breath,if=talent.imminent_destruction&active_dot.fire_breath_damage=0&active_enemies>=4,cancel_if=gcd.remains=0,interrupt_if=gcd.remains=0 - Cast Unbound Flame if Essence Burst isn't at maximum stacks and (you don't have Scorching Embers talented or Fire Breath Damage is on at least one enemy)target on the enemy with the highest time left on Fire Breath DamageAim at the ones that are burning
simc
unbound_flame,target_if=max:dot.fire_breath_damage.remains,if=!buff.essence_burst.at_max_stacks&(!talent.scorching_embers|active_dot.fire_breath_damage>0) - Cast Living Flame if Burnout is active or (Leaping Flames is active and there are 4 or more enemies) or ((Leaping Flames is active or Ancient Flame is active) and the next movement phase starts in more than Living Flame's cast time (or never))
simc
living_flame,if=buff.burnout.up|buff.leaping_flames.up&active_enemies>=4|(buff.leaping_flames.up|buff.ancient_flame.up)&raid_event.movement.in>execute_time - Cast Azure SweepSweep is worse than LF with procs
simc
azure_sweep - Cast Living Flame if the next movement phase starts in more than Living Flame's cast time (or never)
simc
living_flame,if=raid_event.movement.in>execute_time Is it true that you have Ancient Flame talented and Ancient Flame isn't active and you have Scarlet Adaptation talented and Dragonrage isn't active and there are fewer than 4 enemies?Not set
If so, go through Green, then carry on below if nothing there fits
simc
call_action_list,name=green,if=talent.ancient_flame&!buff.ancient_flame.up&talent.scarlet_adaptation&!buff.dragonrage.up&active_enemies<4- Cast Azure Strike
simc
azure_strike
Read from ActionPriorityLists/default/evoker_devastation.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 (2 steps)
Before the pull2 lines
- Record your stats before the pull (sim bookkeeping)
simc
snapshot_stats - Cast Living Flame
simc
living_flame
The main loop2 lines
go through Cooldowns, then carry on below if nothing there fits
simc
call_action_list,name=cooldownsCooldowns5 lines
- Drink a potionSome cooldowns are not used by the Assisted Combat system. This simple default cooldown usage has been provided by simc.
simc
potion - Cast Deep Breath if you have Imminent Destruction talented or you have Melt Armor talented or you have Maneuverability talented or there is more than one enemy
simc
deep_breath,if=talent.imminent_destruction|talent.melt_armor|talent.maneuverability|active_enemies>1 - Cast Dragonrage
simc
dragonrage - Cast Tip the Scales
simc
tip_the_scales - Use your trinkets if Dragonrage is active or you don't have Dragonrage talented or Dragonrage has more than 20 s of cooldown left
simc
use_items,if=buff.dragonrage.up|!talent.dragonrage|cooldown.dragonrage.remains>20
go through Assisted Combat, then carry on below if nothing there fits
simc
call_action_list,name=assisted_combatAssisted Combat15 lines
- Cast DragonrageThis is the default action priority list from the game's Assisted Combat system.
simc
dragonrage - Cast Fire Breath if you have Consume Flame talented and Fire Breath Damage isn't on the target
simc
fire_breath,if=talent.consume_flame&!dot.fire_breath_damage.ticking,cooldown_allow_casting_success=1 - Cast Tip the Scales if Fire Breath is off cooldown
simc
tip_the_scales,if=cooldown.fire_breath.ready - Cast Fire Breath if you don't have Consume Flame talented
simc
fire_breath,if=!talent.consume_flame,cooldown_allow_casting_success=1 - Cast Eternity Surge
simc
eternity_surge,cooldown_allow_casting_success=1 - Cast Deep Breath if your distance to the target is at most 40(Overridden from 'buff.recall.down&target.distance<=40')
simc
deep_breath,if=target.distance<=40 - Cast Disintegrate if there are more than 3 enemies and Mass Disintegrate Stacks is active
simc
disintegrate,if=active_enemies>3&buff.mass_disintegrate_stacks.up - Cast Pyre if there are more than 3 enemies
simc
pyre,if=active_enemies>3 - Cast Azure Strike if Azure Sweep is active
simc
azure_strike,if=buff.azure_sweep.up - Cast Living Flame if there are more than 3 enemies and Burnout is active and Leaping Flames is active
simc
living_flame,if=active_enemies>3&buff.burnout.up&buff.leaping_flames.up - Cast Azure Strike if there are more than 3 enemies
simc
azure_strike,if=active_enemies>3 - Cast Disintegrate
simc
disintegrate - Cast Living Flame
simc
living_flame,cooldown_allow_casting_success=1 - Cast Living Flame
simc
living_flame
Read from ActionPriorityLists/assisted_combat/evoker_devastation.simc in simulationcraft/simc at 1860cd1d5763, the commit this engine build runs.