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<2 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&(!buff.tigers_fury.up|energy.deficit>65) actions+=/tigers_fury,if=talent.convoke_the_spirits.enabled&(!variable.lastconvoke|(variable.lastconvoke&!buff.tigers_fury.up)) actions+=/rake,cycle_targets=1,if=1.4*persistent_multiplier>dot.rake.pmultiplier&(buff.prowl.up|buff.shadowmeld.up) actions+=/natures_vigil,if=time>0 actions+=/adaptive_swarm,cycle_targets=1,if=((!dot.adaptive_swarm_damage.ticking|dot.adaptive_swarm_damage.remains<2)&(dot.adaptive_swarm_damage.stack<3|!dot.adaptive_swarm_heal.stack>1)&!action.adaptive_swarm_heal.in_flight&!action.adaptive_swarm_damage.in_flight&!action.adaptive_swarm.in_flight)&target.time_to_die>5|active_enemies>2&!dot.adaptive_swarm_damage.ticking&energy<35&target.time_to_die>5&!(variable.need_bt&active_bt_triggers=2) 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=combo_points<2|combo_points<3&buff.bs_inc.up 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<20&buff.predatory_swiftness.up&!buff.clearcasting.up&variable.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 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=refreshable # if we have brs and nothing better to cast, check if thrash DD beats shred (or if SA is up) actions.aoe_builder+=/shred,cycle_targets=1,if=action.shred.damage>action.thrash_cat.damage&!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&!dot.rake.refreshable)) # in single target, you just proc bt when an opportunity arises actions.berserk+=/shred,if=active_bt_triggers=2&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, check if shred beats thrash DD (or if SA is up) actions.bloodtalons+=/shred,cycle_targets=1,if=action.shred.damage>action.thrash_cat.damage&buff.bt_shred.down&!buff.sudden_ambush.up&!(variable.lazy_swipe&talent.wild_slashes) actions.bloodtalons+=/thrash_cat,if=buff.bt_thrash.down # this line is for the lazy-swipe build only, basically the idea is to only use swipe thrash and rake in aoe. 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&variable.lazy_swipe&talent.wild_slashes 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&dot.rake.remains>6) ## 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 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|(boss&fight_remains5|boss&(fight_remains<5|dot.rip.remains>5&buff.tigers_fury.up&(combo_points<2|buff.bs_inc.up&combo_points=2)&(!variable.lastconvoke|!variable.lastzerk|buff.bs_inc.up)) 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&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