Fire Mage
PvE guide, updated for Patch 12.1.5
DPS Rotation & Cooldowns
How to play Fire Mage in each rotation style: the full rotation SimulationCraft sims play by default, and the game’s Assisted Highlight and One Button rotations beside it.
Rotation style comparison
How Fire Mage’s DPS compares when using the game’s assisted modes instead of the full rotation, based on Single Target simulations.
- Full rotationBaseline
- Assisted Highlight-11.4%
- One Button-23.4%
The full rotation is the one SimulationCraft’s sims play by default. Its priority list is SimC’s own for the spec, read here for one build and one kind of fight.
Rotation
BetaFire Mage’s list reads best as SimC writes it
With this build, 21 of its 41 rows would show an expression as SimC writes it, which is too many to follow as steps. The abilities it uses are below in the order the list first uses them, and the list itself under them.
Abilities the list uses
8 abilities- 1Racial ability
- 2Combustion
- 3Flamestrike
- 4Pyroblast
- 5Meteor
- 6Scorch
- 7Fireball
- 8Fire Blast
Before the pull
Things to do before entering combat.
Cooldowns
When each cooldown was used across the sample fight, so you can see how often each comes back and which ones line up.
Sample opener
One simulated fight from the start, played by this list on the profile in the Gear section with the guide’s Single target build, whichever build the list above is read for. Procs and timing change the order from fight to fight, so use it to get a feel for the start rather than as a script.
The full priority list
simc@ff0d07fEverything above is read from this SimulationCraft list, including the steps the page hides (the potion and on-use items) and the branches your build and fight leave out.
# This default action priority list is automatically created based on your character. # It is a attempt to provide you with a action list that is both simple and practicable, # while resulting in a meaningful and good simulation. It may not result in the absolutely highest possible dps. # Feel free to edit, adapt and improve it to your own needs. # SimulationCraft is always looking for updates and improvements to the default action lists. # Executed before combat begins. Accepts non-harmful actions only. actions.precombat=arcane_intellect actions.precombat+=/variable,name=cast_remains_time,value=0.2 # flamestriking is the on/off switch, overridable via apl_variable.flamestriking=0 actions.precombat+=/variable,name=flamestriking,op=reset,default=1 # Delay Combustion if playing Firestarter until the target is >=90% HP unless it means losing casts of Combustion. Do not do so if fight length is short. actions.precombat+=/variable,name=combustion_delay,value=(18*talent.firestarter)-(10*(expected_combat_length<60)+10*(expected_combat_length<30))-10*(((expected_combat_length%%60)>=25)&((expected_combat_length%%60)<=40)) actions.precombat+=/variable,name=steroid_trinket_equipped,op=set,value=equipped.freightrunners_flask|equipped.emberwing_feather|equipped.vaelgors_final_stare|equipped.galactic_gladiators_badge_of_ferocity|equipped.nevermelting_ice_crystal|equipped.ever_collapsing_void_fissure|equipped.signet_of_the_priory|equipped.sealed_chaos_urn|equipped.stormbound_emblem_of_dazar|equipped.hex_lords_dooming_idol|equipped.vile_vial_of_volatile_venom|equipped.venomous_gladiators_badge_of_ferocity actions.precombat+=/variable,name=nonsteroid_trinket_equipped,op=set,value=equipped.wraps_of_cosmic_madness|equipped.astalors_anguish_agitator|equipped.font_of_venomous_rage|equipped.vexhuls_everflowing_gland|equipped.spiritrending_poison|equipped.ophidian_bone_whistle actions.precombat+=/snapshot_stats actions.precombat+=/mirror_image actions.precombat+=/use_item,name=stormbound_emblem_of_dazar,if=!equipped.vile_vial_of_volatile_venom|active_enemies<3 actions.precombat+=/pyroblast # Executed every time the actor is available. actions=call_action_list,name=cds # Turns off flamestriking during Firestarter, but allows Flamestrike with Pyroclasm. actions+=/variable,name=flamestriking_active,op=set,value=variable.flamestriking&(time>variable.combustion_delay|talent.firestarter&buff.pyroclasm.up&buff.hot_streak.react=0) # Modifiable target count cutoffs for when to cast Flamestrike. Always turned off if missing Fuel the Fire or during Firestarter. actions+=/variable,name=ff_combustion_flamestrike,op=set,if=!talent.spellfire_spheres,value=3+(999*!talent.fuel_the_fire+999*!variable.flamestriking_active) actions+=/variable,name=ff_filler_flamestrike,op=set,if=!talent.spellfire_spheres,value=3+(999*!talent.fuel_the_fire+999*!variable.flamestriking_active) actions+=/variable,name=sf_combustion_flamestrike,op=set,if=talent.spellfire_spheres,value=3+(999*!talent.fuel_the_fire+999*!variable.flamestriking_active) actions+=/variable,name=sf_filler_flamestrike,op=set,if=talent.spellfire_spheres,value=3+(999*!talent.fuel_the_fire+999*!variable.flamestriking_active) # Combustion is delayed 18 seconds on pull for all Firestarter builds to simulate realistic timings for when a boss drops below 90% HP. actions+=/run_action_list,name=ff_combustion,if=talent.frostfire_bolt&((time>=variable.combustion_delay)&(cooldown.combustion.remains<=variable.combustion_precast_time|buff.combustion.up|cooldown.combustion.ready)) actions+=/run_action_list,name=sf_combustion,if=!talent.frostfire_bolt&((time>=variable.combustion_delay)&(cooldown.combustion.remains<=variable.combustion_precast_time+gcd.max*(talent.sunfury_execution&cooldown.meteor.remains<gcd.max)|buff.combustion.up|cooldown.combustion.ready)) actions+=/run_action_list,name=ff_filler,if=talent.frostfire_bolt actions+=/run_action_list,name=sf_filler actions.cds=variable,name=combustion_precast_time,value=(action.scorch.cast_time*!buff.pyroclasm.up*scorch_execute.active)+(action.fireball.cast_time*!buff.pyroclasm.up*!scorch_execute.active)+(action.pyroblast.cast_time*buff.pyroclasm.up)-variable.cast_remains_time # Use Potion on pull. Delay by about 8 seconds if playing with Firestarter as Sunfury. actions.cds+=/potion,if=time>=(8*(talent.firestarter&talent.spellfire_spheres))|buff.combustion.remains>6|fight_remains<35 actions.cds+=/use_item,name=vile_vial_of_volatile_venom,if=buff.combustion.remains>6|fight_remains<20 actions.cds+=/use_item,name=stormbound_emblem_of_dazar,if=time>=variable.combustion_delay&cooldown.combustion.remains<2&buff.combustion.down&(buff.bloodlust.down|gcd.max>0.76&!equipped.hex_lords_dooming_idol&(!equipped.vile_vial_of_volatile_venom|trinket.1.is.vile_vial_of_volatile_venom&trinket.1.cooldown.remains>20|trinket.2.is.vile_vial_of_volatile_venom&trinket.2.cooldown.remains>20))|fight_remains<25 actions.cds+=/use_item,name=sethraliss_defiled_relic,if=buff.combustion.remains>6|fight_remains<20 actions.cds+=/use_item,name=hex_lords_dooming_idol,if=buff.combustion.remains>6|fight_remains<30 actions.cds+=/use_item,name=vaelgors_final_stare,if=buff.combustion.remains>6|fight_remains<20 actions.cds+=/use_item,name=emberwing_feather,if=buff.combustion.remains>6|fight_remains<20 actions.cds+=/use_item,name=venomous_gladiators_badge_of_ferocity,if=buff.combustion.remains>6|fight_remains<20 actions.cds+=/use_item,name=galactic_gladiators_badge_of_ferocity,if=buff.combustion.remains>6|fight_remains<20 actions.cds+=/use_item,name=ever_collapsing_void_fissure,if=buff.combustion.remains>6|fight_remains<20 actions.cds+=/use_item,name=freightrunners_flask,if=buff.combustion.remains>6|fight_remains<20 # Non-steroid trinkets are used outside cooldowns. They can be used on pull if Combustion is delayed an ample amount of time or you don't have a steroid trinket equipped. actions.cds+=/use_items,if=variable.nonsteroid_trinket_equipped&(time>variable.combustion_delay&cooldown.combustion.remains>20|time<=variable.combustion_delay&(variable.combustion_delay>=18|!variable.steroid_trinket_equipped))&buff.combustion.down&buff.hyperthermia.down actions.cds+=/ancestral_call,if=buff.combustion.remains>6|fight_remains<20 actions.cds+=/berserking,if=buff.combustion.remains>6|fight_remains<20 actions.cds+=/blood_fury,if=buff.combustion.remains>6|fight_remains<20 actions.cds+=/fireblood,if=buff.combustion.remains>6|fight_remains<10 actions.cds+=/invoke_external_buff,name=power_infusion,if=buff.power_infusion.down&(buff.combustion.remains>6|fight_remains<25) actions.ff_combustion=combustion,use_off_gcd=1,use_while_casting=1,if=buff.combustion.down&action.fireball.executing&(action.fireball.execute_remains<variable.cast_remains_time)|action.meteor.in_flight&(action.meteor.in_flight_remains<0.3)|action.pyroblast.executing&(action.pyroblast.execute_remains<variable.cast_remains_time)|prev_gcd.1.meteor # Precast into Combustion. Prioritize Pyroclasm if available. actions.ff_combustion+=/flamestrike,if=buff.pyroclasm.up&!buff.hot_streak.react&buff.combustion.down&active_enemies>=variable.ff_combustion_flamestrike actions.ff_combustion+=/pyroblast,if=buff.pyroclasm.up&!buff.hot_streak.react&buff.combustion.down actions.ff_combustion+=/fireball,if=buff.combustion.down # Meteor is used towards the end of Combustion to maximize the Ignite bank for Burnout. If not playing Burnout, just make sure the Meteor lands during Combustion at any time. actions.ff_combustion+=/meteor,if=talent.burnout&buff.combustion.remains<8|!talent.burnout&buff.combustion.remains>2 # Spend Hot Streaks on Pyroblast in ST or Flamestrike in AoE. actions.ff_combustion+=/flamestrike,if=buff.hot_streak.react&active_enemies>=variable.ff_combustion_flamestrike actions.ff_combustion+=/pyroblast,if=buff.hot_streak.react # Make sure Pyroclasm FINISHES its cast before Combustion ends. actions.ff_combustion+=/flamestrike,if=buff.pyroclasm.up&cast_time<buff.combustion.remains&active_enemies>=(variable.ff_filler_flamestrike-1) actions.ff_combustion+=/pyroblast,if=buff.pyroclasm.up&cast_time<buff.combustion.remains actions.ff_combustion+=/scorch,if=buff.heat_shimmer.react|talent.scald&scorch_execute.active&buff.frostfire_empowerment.down actions.ff_combustion+=/fireball actions.ff_combustion+=/call_action_list,name=fireblast,if=!talent.pyroclasm|(buff.pyroclasm.stack<2|action.pyroblast.executing&action.pyroblast.execute_remains>0.2&buff.pyroclasm.stack=2|cooldown.fire_blast.charges_fractional>=2.9|buff.combustion.remains<action.pyroblast.cast_time)&(active_enemies<variable.sf_combustion_flamestrike|buff.pyroclasm.down|!action.flamestrike.executing) # Cast Meteor on CD starting from the precast of your first Combustion. actions.ff_filler=meteor,if=time>=(variable.combustion_delay-gcd.max) # Hold Hot Streak if Combustion is coming up soon. Do not hold if intentionally delaying Combustion. actions.ff_filler+=/flamestrike,if=(buff.hot_streak.react&(cooldown.combustion.remains>=5|time<variable.combustion_delay))&active_enemies>=variable.ff_filler_flamestrike actions.ff_filler+=/pyroblast,if=buff.hot_streak.react&(cooldown.combustion.remains>=(5-5*buff.pyroclasm.up)|time<variable.combustion_delay) # Spend Pyroclasm immediately if you have 2 stacks available. Otherwise, hold one stack if it lasts until Combustion comes up. actions.ff_filler+=/flamestrike,if=(buff.pyroclasm.up&cooldown.combustion.remains>12|buff.pyroclasm.stack=2)&active_enemies>=variable.ff_filler_flamestrike actions.ff_filler+=/pyroblast,if=buff.pyroclasm.up&cooldown.combustion.remains>12|buff.pyroclasm.stack=2 actions.ff_filler+=/scorch,if=buff.heat_shimmer.react actions.ff_filler+=/fireball actions.ff_filler+=/call_action_list,name=fireblast # Cast Fire Blast if close to overcapping charges. This can result in casting Fire Blast twice during one cast, if you have ample time left of your cast. actions.fireblast=fire_blast,use_off_gcd=1,use_while_casting=1,if=cooldown_react&cooldown.fire_blast.charges_fractional>=2.9&talent.firestarter # During Combustion/Hyperthermia, spend Fire Blasts with Heating Up. actions.fireblast+=/fire_blast,use_off_gcd=1,use_while_casting=1,if=cooldown_react&!buff.hot_streak.react&(buff.combustion.up|buff.hyperthermia.up)&(hot_streak_spells_in_flight+buff.heating_up.react=1)&gcd.remains<gcd.max # Cast Fire Blast during a hardcasted Pyroblast with Pyroclasm. Doing this can result in casting Fire Blast twice during one cast. actions.fireblast+=/fire_blast,use_off_gcd=1,use_while_casting=1,if=cooldown_react&!buff.hot_streak.react&action.pyroblast.executing&buff.pyroclasm.up&gcd.remains<gcd.max # During non-execute filler, use Fire Blast with Heating Up while hardcasting Fireball/Frostfire Bolt/Pyroblast/Flamestrike. actions.fireblast+=/fire_blast,use_off_gcd=1,use_while_casting=1,if=cooldown_react&!buff.hot_streak.react&(action.fireball.executing&action.fireball.execute_remains>0.1|buff.pyroclasm.react&action.pyroblast.executing&action.pyroblast.execute_remains>0.1|action.flamestrike.executing&action.flamestrike.execute_remains>0.1)&(!scorch_execute.active|!talent.scorch)&buff.heating_up.react&(hot_streak_spells_in_flight+buff.heating_up.react=1)&gcd.remains<gcd.max # During execute, spend Fire Blasts while casting Scorch, or consuming Pyroclasm with 12.1 2pc, if you don't have Heating Up. actions.fireblast+=/fire_blast,use_off_gcd=1,use_while_casting=1,if=cooldown_react&!buff.hot_streak.react&scorch_execute.active&(hot_streak_spells_in_flight+buff.heating_up.react=0)&(action.scorch.executing&buff.heat_shimmer.down|action.pyroblast.executing&buff.pyroclasm.up&set_bonus.midnight_season_2_2pc)&gcd.remains<gcd.max # While delaying Combustion on pull (Firestarter or not), spend Fire Blasts with Heating Up freely. If not playing Firestarter, only do so during hardcasts. actions.fireblast+=/fire_blast,use_off_gcd=1,use_while_casting=1,if=cooldown_react&!buff.hot_streak.react&time<variable.combustion_delay&(talent.firestarter|action.fireball.executing&action.fireball.execute_remains>0.1|buff.pyroclasm.react&action.pyroblast.executing&action.pyroblast.execute_remains>0.1)&(hot_streak_spells_in_flight+buff.heating_up.react=1)&gcd.remains<gcd.max&cooldown.combustion.ready # When talented into Spontaneous Combustion, spend all Fire Blasts during the pre-cast going into Combustion regardless of Heating Up / Hot Streak status. actions.fireblast+=/fire_blast,use_off_gcd=1,use_while_casting=1,if=cooldown_react&(time>=variable.combustion_delay&(cooldown.combustion.remains<=variable.combustion_precast_time))&buff.combustion.down&talent.spontaneous_combustion&(action.scorch.executing|action.fireball.executing|action.pyroblast.executing|action.flamestrike.executing) # Spend all available Fire Blasts if fight is ending. actions.fireblast+=/fire_blast,use_off_gcd=1,use_while_casting=1,if=fight_remains<1 actions.sf_combustion=combustion,use_off_gcd=1,use_while_casting=1,if=action.scorch.executing&(action.scorch.execute_remains<variable.cast_remains_time)|action.fireball.executing&(action.fireball.execute_remains<variable.cast_remains_time)|action.pyroblast.executing&(action.pyroblast.execute_remains<variable.cast_remains_time)&!cooldown.meteor.ready|action.flamestrike.executing&(action.flamestrike.execute_remains<variable.cast_remains_time)|action.meteor.in_flight&action.meteor.in_flight_remains<0.3&(action.pyroblast.executing|action.flamestrike.executing|buff.pyroclasm.down) # Spend Hot Streak before going into your precast. actions.sf_combustion+=/flamestrike,if=buff.combustion.down&buff.hot_streak.react&active_enemies>=variable.sf_combustion_flamestrike actions.sf_combustion+=/pyroblast,if=buff.combustion.down&buff.hot_streak.react # Precast one of these into Combustion. actions.sf_combustion+=/meteor,if=buff.combustion.down&talent.sunfury_execution actions.sf_combustion+=/flamestrike,if=active_enemies>=variable.sf_combustion_flamestrike&(buff.combustion.down&!buff.hot_streak.react&buff.pyroclasm.up) actions.sf_combustion+=/pyroblast,if=buff.combustion.down&!buff.hot_streak.react&buff.pyroclasm.up actions.sf_combustion+=/scorch,if=buff.combustion.down&(scorch_execute.active|active_enemies>=4) actions.sf_combustion+=/fireball,if=buff.combustion.down&(!prev_gcd.1.meteor|buff.bloodlust.down) # Make sure Meteor lands during Combustion. actions.sf_combustion+=/meteor,if=buff.combustion.remains>2 # Spend Hot Streaks on Pyroblast in ST or Flamestrike in AoE. The Scorch condition is simply to simulate predictable guaranteed crits during Combustion. actions.sf_combustion+=/flamestrike,if=(buff.hot_streak.react|prev_gcd.1.scorch&buff.heating_up.react&time-action.scorch.last_used<0.2)&active_enemies>=variable.sf_combustion_flamestrike actions.sf_combustion+=/pyroblast,if=buff.hot_streak.react|prev_gcd.1.scorch&buff.heating_up.react&time-action.scorch.last_used<0.2 # Make sure Pyroclasm FINISHES its cast before Combustion ends. actions.sf_combustion+=/flamestrike,if=buff.pyroclasm.react&cast_time<buff.combustion.remains&active_enemies>=variable.sf_combustion_flamestrike actions.sf_combustion+=/pyroblast,if=buff.pyroclasm.react&cast_time<buff.combustion.remains actions.sf_combustion+=/scorch # We prioritize starting to cast Pyroclasm (on 2 stacks) over Fire Blast if there's no risk of overcapping. In AoE, we also do not want to cast Fire Blast during a hardcast Flamestrike. actions.sf_combustion+=/call_action_list,name=fireblast,if=!talent.pyroclasm|(buff.pyroclasm.stack<2|action.pyroblast.executing&action.pyroblast.execute_remains>0.2&buff.pyroclasm.stack=2|cooldown.fire_blast.charges_fractional>=2.9|buff.combustion.remains<action.pyroblast.cast_time)&(active_enemies<variable.sf_combustion_flamestrike|buff.pyroclasm.down|!action.flamestrike.executing) # Meteor is used immediately when ready after the first Combustion, if you have Blast Zone. actions.sf_filler=meteor,if=talent.blast_zone&time>variable.combustion_delay # Spend Hot Streaks on Pyroblast in ST or Flamestrike in AoE. The Scorch condition is simply to simulate predictable guaranteed crits during execute. actions.sf_filler+=/flamestrike,if=(buff.hot_streak.react|prev_gcd.1.scorch&buff.heating_up.react&time-action.scorch.last_used<0.2|buff.hyperthermia.up)&active_enemies>=variable.sf_filler_flamestrike actions.sf_filler+=/pyroblast,if=buff.hot_streak.react|prev_gcd.1.scorch&buff.heating_up.react&time-action.scorch.last_used<0.2|buff.hyperthermia.up # Spend Pyroclasm immediately. actions.sf_filler+=/flamestrike,if=buff.pyroclasm.up&active_enemies>=variable.sf_filler_flamestrike actions.sf_filler+=/pyroblast,if=buff.pyroclasm.up # Cast Scorch in execute or with a Heat Shimmer proc. actions.sf_filler+=/scorch,if=talent.scald&scorch_execute.active|buff.heat_shimmer.react&(firestarter.active|prev_gcd.1.pyroblast|prev_gcd.1.flamestrike|active_enemies<variable.sf_filler_flamestrike) actions.sf_filler+=/fireball actions.sf_filler+=/call_action_list,name=fireblast
Is this rotation built for your talents?
The rotation follows your talent build. Sim your highest-DPS build on your own gear, for the mode and rotation style you play.