actions.precombat+=/mark_of_the_wild,if=buff.prowl.down actions.precombat+=/use_item,name=algethar_puzzle_box actions.precombat+=/heart_of_the_wild,if=buff.any_form.up&buff.cat_form.down actions.precombat+=/prowl actions.precombat+=/cat_form actions+=/skull_bash actions+=/soothe # Executed every time the actor is available. actions+=/prowl,if=(buff.bs_inc.down|time=0)&!buff.prowl.up actions+=/cat_form,if=!buff.cat_form.up ## Power Infusion does not line up very well with Berserk nor Incarnation and Convoke doesn't benefit much from haste. ## actions+=/invoke_external_buff,name=power_infusion actions+=/variable,name=need_bt,value=talent.bloodtalons.enabled&buff.bloodtalons.stack<=1 actions+=/variable,name=align_3minutes,value=spell_targets.swipe_cat=1 actions+=/variable,name=lastconvoke,value=fight_remains>cooldown.convoke_the_spirits.remains+3&((talent.ashamanes_guidance.enabled&fight_remains<(cooldown.convoke_the_spirits.remains+60))|(!talent.ashamanes_guidance.enabled&fight_remains<(cooldown.convoke_the_spirits.remains+120))) actions+=/variable,name=lastzerk,value=fight_remains>(30+(cooldown.bs_inc.remains%1.6))&((talent.berserk_heart_of_the_lion.enabled&fight_remains<(90+(cooldown.bs_inc.remains%1.6)))|(!talent.berserk_heart_of_the_lion.enabled&fight_remains<(180+cooldown.bs_inc.remains))) ## These are handled in Feral spec options instead. ## actions+=/variable,name=zerk_biteweave,op=reset ## actions+=/variable,name=lazy_swipe,op=reset ## actions+=/variable,name=regrowth,op=reset actions+=/tigers_fury,if=talent.convoke_the_spirits.enabled|!talent.convoke_the_spirits.enabled&(!buff.tigers_fury.up|energy.deficit>65)|(target.time_to_die<15&talent.predator.enabled) actions+=/rake,cycle_targets=1,if=persistent_multiplier>dot.rake.pmultiplier&(buff.prowl.up|buff.shadowmeld.up) actions+=/natures_vigil,if=time>0 actions+=/renewal,if=filler_regrowth&health.pct<60 actions+=/adaptive_swarm,caption=@player,if=talent.unbridled_swarm&spell_targets.swipe_cat<=1&dot.adaptive_swarm_heal.stack<4&dot.adaptive_swarm_heal.remains>4 actions+=/adaptive_swarm,cycle_targets=1,if=((!dot.adaptive_swarm_damage.ticking|dot.adaptive_swarm_damage.remains<2)&(dot.adaptive_swarm_damage.stack<3)&!action.adaptive_swarm_damage.in_flight&!action.adaptive_swarm.in_flight)&target.time_to_die>5&!(variable.need_bt&active_bt_triggers=2)&(!talent.unbridled_swarm.enabled|spell_targets.swipe_cat=1) # in reality, with unbridled talented adaptive swarm should be targeting allies out of combat, and often in single target too. This isn't supported by simc at time of writing though, so will have to settle with just this actions+=/adaptive_swarm,cycle_targets=1,if=dot.adaptive_swarm_damage.stack<3&talent.unbridled_swarm.enabled&spell_targets.swipe_cat>1&!(variable.need_bt&active_bt_triggers=2) actions+=/call_action_list,name=cooldown actions+=/feral_frenzy,cycle_targets=1,if=((talent.dire_fixation.enabled&debuff.dire_fixation.up)|!talent.dire_fixation.enabled|spell_targets.swipe_cat>1)&(combo_points<2|combo_points<3&buff.bs_inc.up|time<10) actions+=/ferocious_bite,cycle_targets=1,if=buff.apex_predators_craving.up&(spell_targets.swipe_cat=1|!talent.primal_wrath.enabled|!buff.sabertooth.up)&!(variable.need_bt&active_bt_triggers=2) actions+=/call_action_list,name=berserk,strict=1,if=buff.bs_inc.remains>gcd.remains actions+=/wait,sec=combo_points.time_to_max,if=combo_points=4&buff.predator_revealed.react&energy.deficit>40&spell_targets.swipe_cat=1&combo_points.time_to_max1&talent.primal_wrath.enabled actions+=/call_action_list,name=builder,if=!buff.bs_inc.up&combo_points<5 actions+=/regrowth,if=energy<25&buff.predatory_swiftness.up&!buff.clearcasting.up&filler_regrowth # avoid capping brs charges, and in the event of adds, offload charges within reason actions.aoe_builder+=/brutal_slash,cycle_targets=1,if=cooldown.brutal_slash.full_recharge_time<4|target.time_to_die<5 actions.aoe_builder+=/thrash_cat,if=refreshable&(buff.clearcasting.react|(spell_targets.thrash_cat>10|(spell_targets.thrash_cat>5&!talent.double_clawed_rake.enabled))&!talent.thrashing_claws) actions.aoe_builder+=/shadowmeld,if=action.rake.ready&!buff.sudden_ambush.up&(dot.rake.refreshable|dot.rake.pmultiplier<1.4)&!buff.prowl.up&!buff.apex_predators_craving.up # this line checks if theres an upgradeable rake actions.aoe_builder+=/shadowmeld,if=action.rake.ready&!buff.sudden_ambush.up&dot.rake.pmultiplier<1.4&!buff.prowl.up&!buff.apex_predators_craving.up # not a perfect solution, but it checks lowest dot for pandemic/stealth snapshot first actions.aoe_builder+=/rake,cycle_targets=1,if=buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier # and if lowest dot is fine, it checks the remaining dots and targets a mob without stealth snapshot (not necessarily 2nd lowest) actions.aoe_builder+=/rake,cycle_targets=1,if=buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier|refreshable actions.aoe_builder+=/thrash_cat,if=refreshable actions.aoe_builder+=/brutal_slash # prio targets with swarm debuff for moonfire actions.aoe_builder+=/moonfire_cat,cycle_targets=1,if=refreshable&spell_targets.swipe_cat<5 actions.aoe_builder+=/swipe_cat actions.aoe_builder+=/moonfire_cat,cycle_targets=1,if=dot.moonfire.refreshable # if we have brs and nothing better to cast, refresh thrash early at 4+ targets unless dire fixation is talented actions.aoe_builder+=/shred,cycle_targets=1,if=(spell_targets.swipe_cat<4|talent.dire_fixation.enabled)&!buff.sudden_ambush.up&!(variable.lazy_swipe&talent.wild_slashes) actions.aoe_builder+=/thrash_cat actions.berserk+=/ferocious_bite,cycle_targets=1,if=combo_points=5&dot.rip.remains>8&variable.zerk_biteweave&spell_targets.swipe_cat>1 # proc bt if 0/1 stack if 5/6 combo points actions.berserk+=/call_action_list,name=finisher,if=combo_points=5&!(buff.overflowing_power.stack<=1&active_bt_triggers=2&buff.bloodtalons.stack<=1) # its currently a gain to just contiuously try to proc bt in aoe actions.berserk+=/call_action_list,name=bloodtalons,strict=1,if=spell_targets.swipe_cat>1 # go into stealth to buff rake snapshot-- feral frenzy line is to eliminate an edge case involving ff being casted instead due to higher prio actions.berserk+=/prowl,if=!(buff.bt_rake.up&active_bt_triggers=2)&(action.rake.ready&!buff.sudden_ambush.up&(dot.rake.refreshable|dot.rake.pmultiplier<1.4)&!buff.shadowmeld.up&cooldown.feral_frenzy.remains<44&!buff.apex_predators_craving.up) actions.berserk+=/shadowmeld,if=!(buff.bt_rake.up&active_bt_triggers=2)&action.rake.ready&!buff.sudden_ambush.up&(dot.rake.refreshable|dot.rake.pmultiplier<1.4)&!buff.prowl.up&!buff.apex_predators_craving.up actions.berserk+=/rake,if=!(buff.bt_rake.up&active_bt_triggers=2)&(refreshable|(buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier)) # in single target, you just proc bt when an opportunity arises actions.berserk+=/shred,if=(active_bt_triggers=2|(talent.dire_fixation.enabled&!debuff.dire_fixation.up))&buff.bt_shred.down actions.berserk+=/brutal_slash,if=active_bt_triggers=2&buff.bt_brutal_slash.down actions.berserk+=/moonfire_cat,if=active_bt_triggers=2&buff.bt_moonfire.down actions.berserk+=/thrash_cat,if=active_bt_triggers=2&buff.bt_thrash.down&!talent.thrashing_claws&variable.need_bt&(refreshable|talent.brutal_slash.enabled) actions.berserk+=/moonfire_cat,if=refreshable # don't overcap brs charges, but keep it available for bt actions.berserk+=/brutal_slash,if=cooldown.brutal_slash.charges>1 actions.berserk+=/shred actions.berserk_builders+=/rake,cycle_targets=1,if=refreshable actions.berserk_builders+=/swipe_cat,if=spell_targets.swipe_cat>1 actions.berserk_builders+=/brutal_slash,if=active_bt_triggers=2&buff.bt_brutal_slash.down actions.berserk_builders+=/shred actions.bloodtalons+=/brutal_slash,if=(cooldown.brutal_slash.full_recharge_time<4|target.time_to_die<5)&(buff.bt_brutal_slash.down&(buff.bs_inc.up|variable.need_bt)) actions.bloodtalons+=/prowl,if=action.rake.ready&!buff.sudden_ambush.up&(dot.rake.refreshable|dot.rake.pmultiplier<1.4)&!buff.shadowmeld.up&buff.bt_rake.down&!buff.prowl.up&!buff.apex_predators_craving.up actions.bloodtalons+=/shadowmeld,if=action.rake.ready&!buff.sudden_ambush.up&(dot.rake.refreshable|dot.rake.pmultiplier<1.4)&!buff.prowl.up&buff.bt_rake.down&cooldown.feral_frenzy.remains<44&!buff.apex_predators_craving.up actions.bloodtalons+=/rake,cycle_targets=1,if=(refreshable|buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier)&buff.bt_rake.down actions.bloodtalons+=/rake,cycle_targets=1,if=buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier&buff.bt_rake.down actions.bloodtalons+=/shred,if=buff.bt_shred.down&buff.clearcasting.react&spell_targets.swipe_cat=1 actions.bloodtalons+=/thrash_cat,cycle_targets=1,if=refreshable&buff.bt_thrash.down&buff.clearcasting.react&spell_targets.swipe_cat=1&!talent.thrashing_claws.enabled actions.bloodtalons+=/brutal_slash,if=buff.bt_brutal_slash.down actions.bloodtalons+=/moonfire_cat,if=refreshable&buff.bt_moonfire.down&spell_targets.swipe_cat=1 actions.bloodtalons+=/thrash_cat,cycle_targets=1,if=refreshable&buff.bt_thrash.down&!talent.thrashing_claws.enabled actions.bloodtalons+=/shred,if=buff.bt_shred.down&spell_targets.swipe_cat=1&(!talent.wild_slashes.enabled|(!debuff.dire_fixation.up&talent.dire_fixation.enabled)) actions.bloodtalons+=/swipe_cat,if=buff.bt_swipe.down&talent.wild_slashes.enabled actions.bloodtalons+=/moonfire_cat,cycle_targets=1,max_cycle_targets=3,if=buff.bt_moonfire.down&spell_targets.swipe_cat<5 actions.bloodtalons+=/swipe_cat,if=buff.bt_swipe.down actions.bloodtalons+=/moonfire_cat,cycle_targets=1,if=buff.bt_moonfire.down # If we have BrS and nothing better to cast, thrash at 5+ targets unless dire fixation is talented. actions.bloodtalons+=/shred,cycle_targets=1,if=(spell_targets>5|talent.dire_fixation.enabled)&buff.bt_shred.down&!buff.sudden_ambush.up&!(variable.lazy_swipe&talent.wild_slashes) actions.bloodtalons+=/thrash_cat,if=buff.bt_thrash.down # This just finds the best reapplication if you really need 3rd builder for bt actions.bloodtalons+=/rake,cycle_targets=1,if=buff.bt_rake.down&(spell_targets.swipe_cat>4&!talent.dire_fixation|talent.wild_slashes&variable.lazy_swipe) actions.builder+=/run_action_list,name=clearcasting,strict=1,if=buff.clearcasting.react actions.builder+=/brutal_slash,if=cooldown.brutal_slash.full_recharge_time<4 ## TODO: edit this to use wait instead; stop pooling if we can use a clearcasting proc ## actions.builder+=/pool_resource,if=!action.rake.ready&(dot.rake.refreshable|(buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier&dot.rake.remains>6))&!buff.clearcasting.react actions.builder+=/shadowmeld,if=action.rake.ready&!buff.sudden_ambush.up&(dot.rake.refreshable|dot.rake.pmultiplier<1.4)&!buff.prowl.up&!buff.apex_predators_craving.up actions.builder+=/rake,if=refreshable|(buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier) ## repeating here is necessary, otherwise moonfire will occassionally be casted instead ## actions.builder+=/run_action_list,name=clearcasting,strict=1,if=buff.clearcasting.react actions.builder+=/moonfire_cat,cycle_targets=1,if=refreshable actions.builder+=/thrash_cat,cycle_targets=1,if=refreshable&!talent.thrashing_claws.enabled actions.builder+=/brutal_slash actions.builder+=/swipe_cat,if=spell_targets.swipe_cat>1|(talent.wild_slashes.enabled&(debuff.dire_fixation.up|!talent.dire_fixation.enabled)) actions.builder+=/shred actions.clearcasting+=/thrash_cat,if=refreshable&!talent.thrashing_claws.enabled actions.clearcasting+=/swipe_cat,if=spell_targets.swipe_cat>1 actions.clearcasting+=/brutal_slash,if=spell_targets.brutal_slash>2 actions.clearcasting+=/shred actions.cooldown+=/use_item,name=algethar_puzzle_box,if=boss&fight_remains<35|(!variable.align_3minutes) actions.cooldown+=/use_item,name=algethar_puzzle_box,if=variable.align_3minutes&(cooldown.bs_inc.remains<3&(!variable.lastzerk|!variable.lastconvoke|(variable.lastconvoke&cooldown.convoke_the_spirits.remains<13))) actions.cooldown+=/incarnation,if=boss|fight_remains>25 # its a gain to hold your last berserk cast to line it up with convoke (but not vice versa) actions.cooldown+=/berserk,if=fight_remains>18|boss&(!variable.lastzerk|fight_remains<23|variable.lastzerk&!variable.lastconvoke|variable.lastconvoke&cooldown.convoke_the_spirits.remains<10) actions.cooldown+=/berserking,if=!variable.align_3minutes|buff.bs_inc.up actions.cooldown+=/use_item,name=mirror_of_fractured_tomorrows|irideus_fragment,if=!variable.align_3minutes|buff.bs_inc.up|(variable.lastconvoke&!variable.lastzerk&cooldown.convoke_the_spirits.remains=0) actions.cooldown+=/potion,if=buff.bs_inc.up|boss&fight_remains<32|(!variable.lastzerk&variable.lastconvoke&cooldown.convoke_the_spirits.remains<10) # checks to make sure you can actually fit convoke into the pull. this portion->(time+fight_remains+10)%%3005-talent.ashamanes_guidance.enabled)|target.time_to_die>=fight_remains)&(boss&fight_remains<5|(dot.rip.remains>5&buff.tigers_fury.up&(combo_points<2|(buff.bs_inc.up&combo_points<=3))))&(!variable.lastconvoke|buff.potion.up|(time+fight_remains+10)%%300>time%%300)&(talent.dire_fixation.enabled&debuff.dire_fixation.up|!talent.dire_fixation.enabled|spell_targets.swipe_cat>1) actions.cooldown+=/use_item,name=manic_grieftorch,cycle_targets=1,if=energy.deficit>40 actions.cooldown+=/use_items actions.finisher+=/primal_wrath,if=(!funneling&(dot.primal_wrath.refreshable&!talent.circle_of_life_and_death.enabled)|dot.primal_wrath.remains<6|(talent.tear_open_wounds.enabled|(spell_targets.swipe_cat>4&!talent.rampant_ferocity.enabled)))&spell_targets.primal_wrath>1&talent.primal_wrath.enabled actions.finisher+=/rip,cycle_targets=1,if=refreshable&(!talent.primal_wrath.enabled|spell_targets.swipe_cat=1)&target.time_to_die>settings.rip_duration actions.finisher+=/pool_resource,for_next=1,if=!action.tigers_fury.ready&buff.apex_predators_craving.down actions.finisher+=/ferocious_bite,max_energy=1,cycle_targets=1,if=buff.apex_predators_craving.down&(!buff.bs_inc.up|(buff.bs_inc.up&!talent.soul_of_the_forest.enabled)) actions.finisher+=/ferocious_bite,cycle_targets=1,if=(buff.bs_inc.up&talent.soul_of_the_forest.enabled)|buff.apex_predators_craving.up actions.owlweaving+=/sunfire,line_cd=4*gcd