Cogspark

Cogspark Works · Rotation

Feral Druid

The priority list SimulationCraft plays this spec with · engine build 20261019-1860cd1-w8a2c73d · game data 12.1.5.70448

§1How to read this

A rotation in SimulationCraft is a priority list, not a sequence. Every time the character can act, the sim starts at the top of The main loop and does the first line whose conditions hold. Lower lines only happen when nothing above them fits.

  • The page shows the list as a decision tree: set what you know about the fight and your talents, and it lights the lists the sim checks, in order.
  • Cast lines use the ability. Hover, focus or tap an icon or a name for its tooltip.
  • Go through another list: its lines are checked in order; when none of them fits, the sim comes back and carries on with the next line here.
  • Switch to another list: the rest of this list is skipped and the choice is made from that list alone.
  • Helpers are values the list works out on the spot, such as “are we holding a cooldown”. Setting one takes no time and the list carries on. The tree works out the ones your situation settles.

The list is written to perform well in the sim, not to be the only right way to play. Every line keeps its original simc text under the simc toggle at its right, and the list author’s note where there is one.

§2Decision tree

Set what you know. The tree lights the lists the sim checks, top to bottom; in each list it presses the first ability whose conditions hold and that is ready. Readiness (cooldowns, resources) isn’t in the list, so a lit ability is the first one allowed, not a promise it is cast.

Your situation
Enemies in range
Your talents (click: talented, not talented, not set)
More conditions (5)
Bs Inc is on cooldown
your potion is on cooldown
trinket 1 is on cooldown
trinket 2 is on cooldown
you have 4 or fewer Combo Points
Checked
  1. The main loop
  2. Cooldown
  3. Cd variable (maybe)
  4. Finisher (maybe)
  5. AoE finisher (maybe)
  6. Builder (maybe)
  7. AoE builder (maybe)
Before the pull, done once before the fight starts (10 steps)

Before the pull10 lines

  1. Record your stats before the pull (sim bookkeeping)Snapshot raid buffed stats before combat begins and pre-potting is done.
    simcsnapshot_stats
  2. Reset regrowth to its starting valueoptional variable that sends regrowth casts. Turned off by default
    simcvariable,name=regrowth,op=reset
  3. Set dotc rake threshold to 99see the 2nd rake line in aoe_builders. This determines when that line can return true
    simcvariable,name=dotc_rake_threshold,op=set,value=99
  4. Set dotc rake threshold to 5
    all of these:
    • you have Wild Slashes talented
    • you have Merciless Claws talented
    simcvariable,name=dotc_rake_threshold,op=set,if=talent.wild_slashes&talent.merciless_claws,value=5
  5. Set dotc rake threshold to 8
    all of these:
    • you have Wild Slashes talented
    • you don't have Merciless Claws talented
    simcvariable,name=dotc_rake_threshold,op=set,if=talent.wild_slashes&!talent.merciless_claws,value=8
  6. Drink a potion if your potion is Liquid Luster
    simcpotion,pre_pot_time=12,if=potion.liquid_luster
  7. Set algethar puzzle box precombat cast to 3
    any of these:
    • trinket 1 is Algethar Puzzle Box
    • trinket 1 has no on-use effect that grants a stat buff
    for practicism, we give a 1s leeway (at 0% haste) from cast end until start of the fight.
    simcvariable,name=algethar_puzzle_box_precombat_cast,value=3,if=trinket.1.is.algethar_puzzle_box|!trinket.1.has_use_buff
  8. Use Algethar Puzzle Box if trinket 1 is Algethar Puzzle Box or trinket 1 has no on-use effect that grants a stat buff
    simcuse_item,name=algethar_puzzle_box,if=trinket.1.is.algethar_puzzle_box|!trinket.1.has_use_buff
  9. Cast Cat Form if Cat Form isn't active
    simccat_form,if=buff.cat_form.down
  10. Cast Prowl
    simcprowl

The main loop14 lines

  1. Cast Prowl if Bs Inc isn't active and Prowl isn't active and Shadowmeld isn't active
    simcprowl,if=buff.bs_inc.down&!buff.prowl.up&!buff.shadowmeld.up
  2. Cast Cat Form if Cat Form isn't active and you don't have Fluid Form talented
    simccat_form,if=!buff.cat_form.up&!talent.fluid_form
  3. Get Power Infusion from an ally if Bs Inc is active or you don't have Berserk: Heart of the Lion talentedLine up <a href='https://www.wowhead.com/spell=10060/power-infusion'>Power Infusion</a> with <a href='https://www.wowhead.com/spell=106951/berserk'>Berserk</a> every 2 minutes.
    simcinvoke_external_buff,name=power_infusion,if=buff.bs_inc.up|!talent.berserk_heart_of_the_lion
  4. Start auto-attacking if Prowl isn't active and Shadowmeld isn't active
    simcauto_attack,if=!buff.prowl.up&!buff.shadowmeld.up
  5. Cast Tiger's Fury if (Bs Inc comes off cooldown within 1 s or Bs Inc has more than 10 s of cooldown left or holdBerserk is true) and (Frantic Frenzy comes off cooldown within Tiger's Fury's duration minus 1.5 s or Frantic Frenzy has more than 22 s of cooldown left or you don't have Frantic Frenzy talented or Tiger's Fury would hit exactly 1 enemy or the sim's fight style is DungeonRoute or the sim's fight style is DungeonSlice)tigers fury on cooldown, in aoe patchwerk we can hold ~2s for frantic frenzy as needed. Like frantic frenzy, holding can sometimes be a gain in dr/ds, but the conditions are unclear. Addendum: Seems't've been related to holding Berserk, attempt to check holding tigers fury at your own risk.
    simctigers_fury,if=(cooldown.bs_inc.remains<=1|cooldown.bs_inc.remains>10|variable.holdBerserk)&(cooldown.frantic_frenzy.remains<buff.tigers_fury.duration-1.5|cooldown.frantic_frenzy.remains>22|!talent.frantic_frenzy|spell_targets=1|fight_style.dungeonroute|fight_style.dungeonslice)
  6. Cast Rake if Prowl is active or Shadowmeld is activerake out of stealth
    simcrake,if=buff.prowl.up|buff.shadowmeld.up
  7. Cast Chomp if Chomp Enabler is activechomp if its possible. Check this in aoe
    simcchomp,if=buff.chomp_enabler.up
  8. go through Cooldown, then carry on below if nothing there fits

    simccall_action_list,name=cooldown

    Cooldown14 lines

    1. Is it true that Bs Inc is off cooldown or your potion is off cooldown or trinket 1 is off cooldown or trinket 2 is off cooldown?Not set

      If so, go through Cd variable, then carry on below if nothing there fits

      this line is here to reduce the amount of variable calls in the APL by only checking variables when they are potentially relevant.
      simccall_action_list,name=cd_variable,if=!cooldown.bs_inc.remains|!cooldown.potion.remains|!trinket.1.cooldown.remains|!trinket.2.cooldown.remains
    2. Use your trinket 1 if trinket 1 has an on-use effect that deals damage and (trinket 2 has more than 20 s of cooldown left or trinket 2 has no on-use effect that grants a stat buff or (Tiger's Fury comes off cooldown within 25 s and Tiger's Fury has more than 20 s of cooldown left)) and (trinket 1 isn't Font of Venomous Rage or Bs Inc isn't active)non-stat on use trinkets get used on cooldown, so long as it wont interfere with a stat on-use trinket
      simcuse_item,slot=trinket1,if=trinket.1.has_use_damage&(trinket.2.cooldown.remains>20|!trinket.2.has_use_buff|(cooldown.tigers_fury.remains<25&cooldown.tigers_fury.remains>20))&(!trinket.1.is.font_of_venomous_rage|!buff.bs_inc.up)
    3. Use your trinket 2 if trinket 2 has an on-use effect that deals damage and (trinket 1 has more than 20 s of cooldown left or trinket 1 has no on-use effect that grants a stat buff or (Tiger's Fury comes off cooldown within 25 s and Tiger's Fury has more than 20 s of cooldown left)) and (trinket 2 isn't Font of Venomous Rage or Bs Inc isn't active)
      simcuse_item,slot=trinket2,if=trinket.2.has_use_damage&(trinket.1.cooldown.remains>20|!trinket.1.has_use_buff|(cooldown.tigers_fury.remains<25&cooldown.tigers_fury.remains>20))&(!trinket.2.is.font_of_venomous_rage|!buff.bs_inc.up)
    4. Cast Berserking
      simcberserking
    5. Drink a potion if Bs Inc is active or the fight ends within 32 s or (Tiger's Fury is active and holdPot is false)potion during berserk, fallback pot if the fight is going to end within its duration. Expedite use if you would lose a pot use by holding it.
      simcpotion,if=buff.bs_inc.up|fight_remains<32|buff.tigers_fury.up&!variable.holdPot
    6. Use your trinketsnon trinket gear-on-uses have variable rules on whether or not they trigger the trinket shared CD. For the cases they do we will need specific APL entries. For now just use on cooldown.
      simcuse_items
    7. Use your trinket 1 if trinket 1 has an on-use effect that grants a stat buff and (Tiger's Fury has at least 25 s of cooldown left or (trinket 1 is Algethar Puzzle Box and (no adds are up or the time left in the current add wave is more than 13 s) and Tiger's Fury comes off cooldown within 2 s)) and (((Bs Inc comes off cooldown within 5 s or Bs Inc has at least 14 s left) and holdBerserk is false) or (Convoke the Spirits comes off cooldown within 10 s and you have Ashamane's Guidance talented and you have Convoke the Spirits talented) or lowestCDremaining is more than trinket 1's cooldown or (zerkCountRemaining is 1 and (you don't have Convoke the Spirits talented or convokeCountRemaining is 1) and potCountRemaining is 1 and highestCDremaining plus 3 is more than trinket 1's cooldown) or (zerkCountRemaining is convokeCountRemaining and you have Convoke the Spirits talented and zerkCountRemaining isn't potCountRemaining and the larger of the cooldown left on Bs Inc and the cooldown left on Convoke the Spirits is more than trinket 1's cooldown) or (slot1CountRemaining is potCountRemaining plus 1 and your potion is active) or (trinket 2 has an on-use effect that grants a stat buff and ((secondLowestCDremaining is more than trinket 1's cooldown and lowestCDremaining is more than the cooldown left on trinket 2) or (zerkCountRemaining is 1 and (you don't have Convoke the Spirits talented or convokeCountRemaining is 1) and potCountRemaining is 1 and highestCDremaining is more than the cooldown left on trinket 2) or (zerkCountRemaining is convokeCountRemaining and you have Convoke the Spirits talented and zerkCountRemaining isn't potCountRemaining and the larger of the cooldown left on Convoke the Spirits and the cooldown left on Bs Inc is more than the cooldown left on trinket 2) or (convokeCountRemaining is false and zerkCountRemaining is false and potCountRemaining is false))))Used without waiting for the global cooldownstat on-use trinkets, essentially this compares the number of trinket uses to the number of other cooldown uses remaining in the fight to determine whether or not to send the trinket.
      simcuse_item,slot=trinket1,use_off_gcd=1,if=trinket.1.has_use_buff&(cooldown.tigers_fury.remains>=25|trinket.1.is.algethar_puzzle_box&(!raid_event.adds.up|raid_event.adds.remains>13)&cooldown.tigers_fury.remains<2)&((cooldown.bs_inc.remains<5|buff.bs_inc.remains>=14)&!variable.holdBerserk|cooldown.convoke_the_spirits.remains<10&talent.ashamanes_guidance&talent.convoke_the_spirits|variable.lowestCDremaining>trinket.1.cooldown.duration|variable.zerkCountRemaining=1&(!talent.convoke_the_spirits|variable.convokeCountRemaining=1)&variable.potCountRemaining=1&(variable.highestCDremaining+3)>trinket.1.cooldown.duration|variable.zerkCountRemaining=variable.convokeCountRemaining&talent.convoke_the_spirits&variable.zerkCountRemaining!=variable.potCountRemaining&(cooldown.bs_inc.remains<?cooldown.convoke_the_spirits.remains)>trinket.1.cooldown.duration|variable.slot1CountRemaining=variable.potCountRemaining+1&buff.potion.up|trinket.2.has_use_buff&(variable.secondLowestCDremaining>trinket.1.cooldown.duration&variable.lowestCDremaining>trinket.2.cooldown.remains|variable.zerkCountRemaining=1&(!talent.convoke_the_spirits|variable.convokeCountRemaining=1)&variable.potCountRemaining=1&variable.highestCDremaining>trinket.2.cooldown.remains|variable.zerkCountRemaining=variable.convokeCountRemaining&talent.convoke_the_spirits&variable.zerkCountRemaining!=variable.potCountRemaining&(cooldown.convoke_the_spirits.remains<?cooldown.bs_inc.remains)>trinket.2.cooldown.remains|variable.convokeCountRemaining=0&variable.zerkCountRemaining=0&variable.potCountRemaining=0))
    8. Use your trinket 2 if trinket 2 has an on-use effect that grants a stat buff and (trinket 1 has no on-use effect that grants a stat buff or trinket 1 has more than 20 s of cooldown left) and (Tiger's Fury has at least 25 s of cooldown left or (trinket 2 is Algethar Puzzle Box and (no adds are up or the time left in the current add wave is more than 13 s) and (Tiger's Fury comes off cooldown within 2 s or Tiger's Fury is active))) and (your potion is active or slot2CountRemaining isn't potCountRemaining) and (((Bs Inc comes off cooldown within 5 s or Bs Inc has at least 14 s left) and holdBerserk is false) or (Convoke the Spirits comes off cooldown within 10 s and you have Ashamane's Guidance talented and you have Convoke the Spirits talented) or lowestCDremaining is more than trinket 2's cooldown or (zerkCountRemaining is 1 and (you don't have Convoke the Spirits talented or convokeCountRemaining is 1) and potCountRemaining is 1 and highestCDremaining plus 3 is more than trinket 2's cooldown) or (zerkCountRemaining is convokeCountRemaining and you have Convoke the Spirits talented and zerkCountRemaining isn't potCountRemaining and the larger of the cooldown left on Bs Inc and the cooldown left on Convoke the Spirits is more than trinket 2's cooldown) or (slot1CountRemaining is potCountRemaining minus 1 and your potion is active) or (trinket 1 has an on-use effect that grants a stat buff and ((secondLowestCDremaining is more than trinket 2's cooldown and lowestCDremaining is more than the cooldown left on trinket 1) or (zerkCountRemaining is 1 and (you don't have Convoke the Spirits talented or convokeCountRemaining is 1) and potCountRemaining is 1 and highestCDremaining is more than the cooldown left on trinket 1) or (zerkCountRemaining is convokeCountRemaining and you have Convoke the Spirits talented and zerkCountRemaining isn't potCountRemaining and the larger of the cooldown left on Convoke the Spirits and the cooldown left on Bs Inc is more than the cooldown left on trinket 1) or (convokeCountRemaining is false and zerkCountRemaining is false and potCountRemaining is false))))Used without waiting for the global cooldown
      simcuse_item,slot=trinket2,use_off_gcd=1,if=trinket.2.has_use_buff&(!trinket.1.has_use_buff|trinket.1.cooldown.remains>20)&(cooldown.tigers_fury.remains>=25|trinket.2.is.algethar_puzzle_box&(!raid_event.adds.up|raid_event.adds.remains>13)&(cooldown.tigers_fury.remains<2|buff.tigers_fury.up))&(buff.potion.up|variable.slot2CountRemaining!=variable.potCountRemaining)&((cooldown.bs_inc.remains<5|buff.bs_inc.remains>=14)&!variable.holdBerserk|cooldown.convoke_the_spirits.remains<10&talent.ashamanes_guidance&talent.convoke_the_spirits|variable.lowestCDremaining>trinket.2.cooldown.duration|variable.zerkCountRemaining=1&(!talent.convoke_the_spirits|variable.convokeCountRemaining=1)&variable.potCountRemaining=1&(variable.highestCDremaining+3)>trinket.2.cooldown.duration|variable.zerkCountRemaining=variable.convokeCountRemaining&talent.convoke_the_spirits&variable.zerkCountRemaining!=variable.potCountRemaining&(cooldown.bs_inc.remains<?cooldown.convoke_the_spirits.remains)>trinket.2.cooldown.duration|variable.slot1CountRemaining=variable.potCountRemaining-1&buff.potion.up|trinket.1.has_use_buff&(variable.secondLowestCDremaining>trinket.2.cooldown.duration&variable.lowestCDremaining>trinket.1.cooldown.remains|variable.zerkCountRemaining=1&(!talent.convoke_the_spirits|variable.convokeCountRemaining=1)&variable.potCountRemaining=1&variable.highestCDremaining>trinket.1.cooldown.remains|variable.zerkCountRemaining=variable.convokeCountRemaining&talent.convoke_the_spirits&variable.zerkCountRemaining!=variable.potCountRemaining&(cooldown.convoke_the_spirits.remains<?cooldown.bs_inc.remains)>trinket.1.cooldown.remains|variable.convokeCountRemaining=0&variable.zerkCountRemaining=0&variable.potCountRemaining=0))
    9. Use your trinket 1 if the fight ends within the larger of 21 s and trinket 1's stat buff's durationfallback use if fight is ending soon
      simcuse_item,slot=trinket1,if=fight_remains<=(21<?trinket.1.proc.any_dps.duration)
    10. Use your trinket 2 if the fight ends within the larger of 21 s and trinket 2's stat buff's duration
      simcuse_item,slot=trinket2,if=fight_remains<=(21<?trinket.2.proc.any_dps.duration)
    11. Cast Berserk if Tiger's Fury is active and holdBerserk is false
      simcberserk,if=buff.tigers_fury.up&!variable.holdBerserk
    12. Cast Feral Frenzy if you don't have Frantic Frenzy talented and your Combo Points is at most 2 plus (2 if Bs Inc is active, else 0)0-2 combo points outside zerk, 0-4 combo points inside zerk
      simcferal_frenzy,if=!talent.frantic_frenzy&combo_points<=2+(2*buff.bs_inc.up)
    13. Cast Frantic Frenzy if ((the sim's fight style isn't DungeonRoute and the sim's fight style isn't DungeonSlice) or the time left in the current add wave is more than 5 s) and ((Tiger's Fury is active and Frantic Frenzy would hit 2 or more enemies) or your Combo Points is at most 2 plus (2 if Bs Inc is active, else 0))we can find some gains in dslice by holding frantic frenzy for larger target counts occasionally, but its not by a lot, whereas holding tends to devolve pretty quickly in droute. I suspect this is due to how reliant on single target droute ends up being. Further investigations should be looked into.
      simcfrantic_frenzy,if=(!fight_style.dungeonroute&!fight_style.dungeonslice|raid_event.adds.remains>5)&(buff.tigers_fury.up&spell_targets>=2|combo_points<=2+(2*buff.bs_inc.up))
    14. Cast Convoke the Spirits if ((Bs Inc is active or (you have Ashamane's Guidance talented and (Bs Inc has more than 45 s of cooldown left or holdBerserk is true))) and Tiger's Fury is active and (your last spell on the global cooldown was Rip or your last spell on the global cooldown was Ferocious Bite or your last spell on the global cooldown was Primal Wrath or Tiger's Fury has at most 1 s plus Convoke the Spirits's cast time left, or isn't active)) or the fight ends within 5 sline up convoke with berserk
      simcconvoke_the_spirits,if=(buff.bs_inc.up|talent.ashamanes_guidance&(cooldown.bs_inc.remains>45|variable.holdBerserk))&buff.tigers_fury.up&(prev_gcd.1.rip|prev_gcd.1.ferocious_bite|prev_gcd.1.primal_wrath|buff.tigers_fury.remains<=1+action.convoke_the_spirits.execute_time)|fight_remains<5
  9. Cast Ferocious Bite if Apex Predator's Craving is activecast bite with apex procs asap
    simcferocious_bite,if=buff.apex_predators_craving.up
  10. Is it true that there is a single enemy?Not set

    If so, go through Finisher, then carry on below if nothing there fits

    simccall_action_list,name=finisher,if=spell_targets=1
  11. Is it true that there are 2 or more enemies?Not set

    If so, go through AoE finisher, then carry on below if nothing there fits

    simccall_action_list,name=aoe_finisher,if=spell_targets>=2
  12. Is it true that there is a single enemy and you have 4 or fewer Combo Points?Not set

    If so, go through Builder, then carry on below if nothing there fits

    simccall_action_list,name=builder,if=spell_targets=1&combo_points<=4
  13. Is it true that there is more than one enemy and you have 4 or fewer Combo Points?Not set

    If so, go through AoE builder, then carry on below if nothing there fits

    simccall_action_list,name=aoe_builder,if=spell_targets>1&combo_points<=4
  14. Cast Regrowth if Predatory Swiftness is active and regrowth is true
    simcregrowth,if=buff.predatory_swiftness.up&variable.regrowth

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