@@ -2920,6 +2920,71 @@ void tangle_of_vibrant_vines( special_effect_t& effect )
29202920
29212921 new dbc_proc_callback_t ( effect.player , effect );
29222922}
2923+
2924+ // 1260633 driver
2925+ // 1260627 damage
2926+ // 1263141 absorb
2927+ void gloomspattered_dreadscale ( special_effect_t & effect )
2928+ {
2929+ struct fractional_absorb_t : public absorb_buff_t
2930+ {
2931+ double absorb_fraction;
2932+
2933+ fractional_absorb_t ( player_t * player, std::string_view name, const spell_data_t * spell,
2934+ const item_t * item = nullptr )
2935+ : absorb_buff_t ( player, name, spell, item ), absorb_fraction( 1.0 )
2936+ {
2937+ }
2938+
2939+ double consume ( double amount, action_state_t * state = nullptr ) override
2940+ {
2941+ return absorb_buff_t::consume ( amount * absorb_fraction, state );
2942+ }
2943+
2944+ absorb_buff_t * set_absorb_fraction ( double fraction )
2945+ {
2946+ absorb_fraction = fraction;
2947+ return this ;
2948+ }
2949+ };
2950+
2951+ struct gloomspattered_dreadscale_t : public generic_aoe_proc_t
2952+ {
2953+ buff_t * absorb;
2954+ double shield_amount;
2955+
2956+ gloomspattered_dreadscale_t ( const special_effect_t & effect )
2957+ : generic_aoe_proc_t ( effect, " gloomspattered_dreadscale" , effect.driver(), true ), shield_amount( 0 )
2958+ {
2959+ auto equip = find_special_effect ( effect.player , 1260627 );
2960+ assert ( equip && " Gloom-Spattered Dreadscale missing equip effect" );
2961+
2962+ base_dd_min = base_dd_max = equip->driver ()->effectN ( 1 ).average ( effect );
2963+
2964+ auto absorb_spell = effect.player ->find_spell ( 1263141 );
2965+ absorb = create_buff<fractional_absorb_t >( effect.player , name (), absorb_spell )
2966+ ->set_absorb_fraction ( absorb_spell->effectN ( 2 ).percent () )
2967+ ->set_absorb_source ( effect.player ->get_stats ( " gloomspattered_dreadscale_absorb" , this ) );
2968+ }
2969+
2970+ void execute () override
2971+ {
2972+ generic_aoe_proc_t::execute ();
2973+
2974+ absorb->trigger ( -1 , shield_amount );
2975+ shield_amount = 0 ;
2976+ }
2977+
2978+ void impact ( action_state_t * state ) override
2979+ {
2980+ generic_aoe_proc_t::impact ( state );
2981+
2982+ shield_amount += state->result_amount ;
2983+ }
2984+ };
2985+
2986+ effect.execute_action = create_proc_action<gloomspattered_dreadscale_t >( " gloomspattered_dreadscale" , effect );
2987+ }
29232988} // namespace trinkets
29242989
29252990namespace weapons
@@ -3552,6 +3617,8 @@ void register_special_effects()
35523617 register_special_effect ( 1247311 , DISABLED_EFFECT ); // Drum of Renewed Bonds on use
35533618 register_special_effect ( 1253120 , trinkets::glorious_crusaders_keepsake );
35543619 register_special_effect ( 1253112 , trinkets::sylvan_wakrapuku );
3620+ register_special_effect ( 1260633 , trinkets::gloomspattered_dreadscale );
3621+ register_special_effect ( 1260627 , DISABLED_EFFECT ); // Gloom-Spattered Dreadscale Passive Driver
35553622 // Weapons
35563623 register_special_effect ( { 1253357 , 1253359 }, weapons::torments_duality ); // umbral sabre & radiant foil
35573624 register_special_effect ( 1266257 , weapons::lightless_lament );
0 commit comments