From 076cb9c0e615016e8348641c14e242fde8ec23f5 Mon Sep 17 00:00:00 2001 From: criller7070 Date: Sun, 26 Jul 2026 14:03:47 +0200 Subject: [PATCH 1/2] [Gear] Trinket - Knot of Writhing Serpents --- engine/player/unique_gear_midnight.cpp | 41 ++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/engine/player/unique_gear_midnight.cpp b/engine/player/unique_gear_midnight.cpp index b752258f021..80bca21e5e1 100644 --- a/engine/player/unique_gear_midnight.cpp +++ b/engine/player/unique_gear_midnight.cpp @@ -3636,6 +3636,46 @@ void vashniks_sanguine_rancor( special_effect_t& effect ) new dbc_proc_callback_t( effect.player, effect ); } + +// Knot of Writhing Serpents +// 1293304 Driver +// e1: aoe damage +// e2: dot damage +// 1295690 Missile +// 1295676 Writhing Venom (aoe dmg) +// 1295679 Writhing Venom (st dot) +void knot_of_writhing_serpents( special_effect_t& effect ) +{ + struct writhing_venom_t : public generic_aoe_proc_t + { + action_t* dot; + + writhing_venom_t( const special_effect_t& e ) : generic_aoe_proc_t( e, "writhing_venom", 1295676 ) + { + base_dd_min = base_dd_max = e.driver()->effectN( 1 ).average( e ); + base_multiplier *= role_mult( e ); + travel_speed = e.player->find_spell( 1295690 )->missile_speed(); + + dot = create_proc_action( "writhing_venom_dot", e, 1295679 ); + dot->base_td = e.driver()->effectN( 2 ).average( e ) * dot->base_tick_time / dot->dot_duration; + dot->base_td_multiplier *= role_mult( e ); + + add_child( dot ); + } + + void impact( action_state_t* s ) override + { + generic_aoe_proc_t::impact( s ); + + if ( s->chain_target == 0 ) + dot->execute_on_target( s->target ); + } + }; + + effect.execute_action = create_proc_action( "writhing_venom", effect ); + + new dbc_proc_callback_t( effect.player, effect ); +} } // namespace trinkets namespace weapons @@ -4854,6 +4894,7 @@ void register_special_effects() register_special_effect( 1295884, DISABLED_EFFECT ); // Hex Lord's Dooming Idol equip driver register_special_effect( 1295553, trinkets::vashniks_sanguine_rancor ); register_special_effect( 1291728, bite_of_zuljan::zuljins_guillotine_technique ); + register_special_effect( 1293304, trinkets::knot_of_writhing_serpents ); reset_version_check(); // Weapons register_special_effect( { 1253357, 1253359 }, weapons::torments_duality ); // umbral sabre & radiant foil From 265ff4760474e15b9c974e08f3c18b05f2358efd Mon Sep 17 00:00:00 2001 From: criller7070 Date: Tue, 28 Jul 2026 22:32:16 +0200 Subject: [PATCH 2/2] model the missile as its own action --- engine/player/unique_gear_midnight.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/engine/player/unique_gear_midnight.cpp b/engine/player/unique_gear_midnight.cpp index 80bca21e5e1..721058f43c1 100644 --- a/engine/player/unique_gear_midnight.cpp +++ b/engine/player/unique_gear_midnight.cpp @@ -3654,7 +3654,6 @@ void knot_of_writhing_serpents( special_effect_t& effect ) { base_dd_min = base_dd_max = e.driver()->effectN( 1 ).average( e ); base_multiplier *= role_mult( e ); - travel_speed = e.player->find_spell( 1295690 )->missile_speed(); dot = create_proc_action( "writhing_venom_dot", e, 1295679 ); dot->base_td = e.driver()->effectN( 2 ).average( e ) * dot->base_tick_time / dot->dot_duration; @@ -3672,7 +3671,13 @@ void knot_of_writhing_serpents( special_effect_t& effect ) } }; - effect.execute_action = create_proc_action( "writhing_venom", effect ); + auto missile = create_proc_action( "writhing_venom_missile", effect, 1295690 ); + auto damage = create_proc_action( "writhing_venom", effect ); + + missile->add_child( damage ); + missile->impact_action = damage; + + effect.execute_action = missile; new dbc_proc_callback_t( effect.player, effect ); }