From 1a92d608508bf373b1a37bb4321403dd1fe2a687 Mon Sep 17 00:00:00 2001 From: thevinter Date: Wed, 22 Jul 2026 02:37:46 +0200 Subject: [PATCH] [Feral] Added 12.1 2p + 4p --- engine/class_modules/sc_druid.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/engine/class_modules/sc_druid.cpp b/engine/class_modules/sc_druid.cpp index bfce235a8a9..a6100b75f07 100644 --- a/engine/class_modules/sc_druid.cpp +++ b/engine/class_modules/sc_druid.cpp @@ -531,6 +531,7 @@ struct druid_t final : public parse_player_effects_t moon_stage_e moon_stage; std::vector persistent_event_delay; event_t* astral_power_decay; + int cp_spent_in_berserk = 0; // mid2 2pc struct dot_list_t { @@ -737,6 +738,7 @@ struct druid_t final : public parse_player_effects_t buff_t* coiled_to_spring; buff_t* flash_of_clarity; // mid1 2pc buff_t* frantic_momentum; + buff_t* halazzis_fury; // mid2 2pc buff_t* hunger_for_battle; buff_t* incarnation_cat; buff_t* incarnation_cat_prowl; @@ -3773,6 +3775,10 @@ struct cp_spender_t : public trigger_aggravate_wounds_tbuff.b_inc_cat->check() ) + p()->cp_spent_in_berserk += _combo_points(); + if ( background || !hit_any_target ) return; @@ -11108,6 +11114,21 @@ void druid_t::create_buffs() resource_gain( RESOURCE_COMBO_POINT, cp, gain ); } ); + if ( sets->has_set_bonus( DRUID_FERAL, MID2, B2 ) ) + { + auto b2 = sets->set( DRUID_FERAL, MID2, B2 ); + auto per_cp = timespan_t::from_millis( talent.incarnation_cat.ok() && talent.ashamanes_guidance.ok() + ? b2->effectN( 2 ).base_value() + : b2->effectN( 1 ).base_value() ); + + buff.b_inc_cat->add_stack_change_callback( [ this, per_cp ]( buff_t*, int, int new_ ) { + if ( new_ ) + cp_spent_in_berserk = 0; + else if ( cp_spent_in_berserk > 0 ) + buff.halazzis_fury->trigger( cp_spent_in_berserk * per_cp ); + } ); + } + buff.chomp_enabler = make_fallback( talent.chomp.ok(), this, "chomp_enabler", spec.chomp_controller->effectN( 1 ).trigger() ); @@ -11127,6 +11148,9 @@ void druid_t::create_buffs() ->set_chance( find_trigger( talent.frantic_momentum ).percent() ) ->set_trigger_spell( talent.frantic_momentum ); + buff.halazzis_fury = + make_fallback( sets->has_set_bonus( DRUID_FERAL, MID2, B2 ), this, "halazzis_fury", find_spell( 1301600 ) ); + buff.incarnation_cat_prowl = make_fallback( talent.incarnation_cat.ok(), this, "incarnation_avatar_of_ashamane_prowl", find_effect( talent.incarnation_cat, E_TRIGGER_SPELL ).trigger() ) ->set_name_reporting( "Prowl" ); @@ -12946,6 +12970,7 @@ void druid_t::reset() dot_lists.thrash.clear(); dot_lists.dreadful_wound.clear(); spell_queued = {}; + cp_spent_in_berserk = 0; } /* @@ -14095,6 +14120,7 @@ void druid_t::parse_action_effects( action_t* action ) _a->parse_effects( buff.apex_predators_craving ); _a->parse_effects( buff.berserk_cat ); _a->parse_effects( buff.coiled_to_spring, CONSUME_BUFF ); + _a->parse_effects( buff.halazzis_fury ); _a->parse_effects( buff.hunger_for_battle ); _a->parse_effects( buff.incarnation_cat ); _a->parse_effects( buff.predator, USE_CURRENT );