@@ -440,6 +440,7 @@ struct hunter_t final : public player_t
440440 buff_t * deathblow;
441441
442442 // Marksmanship Tree
443+ buff_t * death_bringer;
443444 buff_t * precise_shots;
444445 buff_t * trick_shots;
445446 buff_t * lock_and_load;
@@ -757,6 +758,7 @@ struct hunter_t final : public player_t
757758 spell_data_ptr_t feathered_frenzy;
758759 spell_data_ptr_t deadeye;
759760 spell_data_ptr_t deathblow;
761+ spell_data_ptr_t death_bringer_buff;
760762
761763 spell_data_ptr_t take_aim_1;
762764 spell_data_ptr_t unmatched_precision;
@@ -4690,7 +4692,21 @@ struct black_arrow_base_t : public kill_shot_base_t
46904692 kill_shot_base_t::execute ();
46914693
46924694 if ( rng ().roll ( p ()->talents .ebon_bowstring ->effectN ( 1 ).percent () ) )
4693- p ()->trigger_deathblow ();
4695+ {
4696+ switch ( p ()->specialization () )
4697+ {
4698+ case HUNTER_BEAST_MASTERY :
4699+ p ()->trigger_deathblow ();
4700+ break ;
4701+
4702+ case HUNTER_MARKSMANSHIP :
4703+ p ()->buffs .death_bringer ->trigger ();
4704+ break ;
4705+
4706+ default :
4707+ break ;
4708+ }
4709+ }
46944710 }
46954711
46964712 void impact ( action_state_t * s ) override
@@ -5446,6 +5462,14 @@ struct aimed_shot_t : public aimed_shot_base_t
54465462 {
54475463 p ()->buffs .lock_and_load ->decrement ();
54485464 }
5465+
5466+ // 2026-07-12: This check is duplicated from aimed_shot_t but made unreactable as Hydra can munch Death Bringers from the primary shot.
5467+ // Should really be in aimed_shot_base_t but working on the assumption that this will be fixed so duplicating here for ease of cleanup.
5468+ if ( p ()->buffs .death_bringer ->up () )
5469+ {
5470+ p ()->buffs .death_bringer ->expire ();
5471+ p ()->trigger_deathblow ();
5472+ }
54495473 }
54505474 };
54515475
@@ -5540,7 +5564,13 @@ struct aimed_shot_t : public aimed_shot_base_t
55405564 p ()->buffs .precise_shots ->increment ( precise_shot_stacks );
55415565
55425566 if ( rng ().roll ( deathblow.chance ) )
5543- p ()->trigger_deathblow ();
5567+ p ()->buffs .death_bringer ->trigger ();
5568+
5569+ if ( p ()->buffs .death_bringer ->up () )
5570+ {
5571+ p ()->buffs .death_bringer ->expire ();
5572+ p ()->trigger_deathblow ( true );
5573+ }
55445574
55455575 auto tl = target_list ();
55465576
@@ -5558,8 +5588,7 @@ struct aimed_shot_t : public aimed_shot_base_t
55585588 }
55595589 lock_and_loaded = false ;
55605590
5561- if ( p ()->buffs .bulletstorm ->check () )
5562- p ()->buffs .bulletstorm ->decrement ();
5591+ p ()->buffs .bulletstorm ->decrement ();
55635592 }
55645593
55655594 double recharge_rate_multiplier ( const cooldown_t & cd ) const override
@@ -5631,6 +5660,9 @@ struct rapid_fire_t: public hunter_ranged_attack_t
56315660 double amount = state->result_amount * p ()->talents .sanctified_armaments ->effectN ( 1 ).percent ();
56325661 residual_action::trigger ( sanctified_armaments, state->target , amount );
56335662 }
5663+
5664+ if ( p ()->talents .bulletstorm .ok () )
5665+ p ()->buffs .bulletstorm ->trigger ();
56345666 }
56355667
56365668 double composite_da_multiplier ( const action_state_t * s ) const override
@@ -5802,8 +5834,6 @@ struct rapid_fire_t: public hunter_ranged_attack_t
58025834 if ( p ()->talents .no_scope .ok () )
58035835 p ()->buffs .precise_shots ->trigger ();
58045836
5805- p ()->buffs .bulletstorm ->trigger ();
5806-
58075837 execute_unload ();
58085838 }
58095839
@@ -7557,6 +7587,7 @@ void hunter_t::init_spells()
75577587 talents.feathered_frenzy = find_talent_spell ( talent_tree::SPECIALIZATION , " Feathered Frenzy" , HUNTER_MARKSMANSHIP );
75587588 talents.deadeye = find_talent_spell ( talent_tree::SPECIALIZATION , " Deadeye" , HUNTER_MARKSMANSHIP );
75597589 talents.deathblow = find_talent_spell ( talent_tree::SPECIALIZATION , " Deathblow" , HUNTER_MARKSMANSHIP );
7590+ talents.death_bringer_buff = talents.deathblow .ok () ? find_spell ( 1302277 ) : spell_data_t::not_found ();
75607591
75617592 talents.unmatched_precision = find_talent_spell ( talent_tree::SPECIALIZATION , " Unmatched Precision" , HUNTER_MARKSMANSHIP );
75627593 talents.bullseye = find_talent_spell ( talent_tree::SPECIALIZATION , " Bullseye" , HUNTER_MARKSMANSHIP );
@@ -7923,6 +7954,10 @@ void hunter_t::create_buffs()
79237954
79247955 // Marksmanship Tree
79257956
7957+ buffs.death_bringer =
7958+ make_buff ( this , " death_bringer" , talents.death_bringer_buff )
7959+ ->set_chance ( talents.deathblow .ok () );
7960+
79267961 buffs.precise_shots =
79277962 make_buff ( this , " precise_shots" , talents.precise_shots_buff )
79287963 ->set_default_value_from_effect ( 1 );
0 commit comments