@@ -57,16 +57,6 @@ struct mind_flay_base_t : public priest_spell_t
5757
5858 priest ().trigger_idol_of_cthun ( d->state );
5959
60- if ( priest ().talents .shadow .mental_decay .enabled () )
61- {
62- timespan_t dot_extension =
63- timespan_t::from_seconds ( priest ().talents .shadow .mental_decay ->effectN ( 1 ).base_value () );
64- priest_td_t & td = get_td ( d->state ->target );
65-
66- td.dots .shadow_word_pain ->adjust_duration ( dot_extension );
67- td.dots .vampiric_touch ->adjust_duration ( dot_extension );
68- }
69-
7060 if ( priest ().talents .shadow .psychic_link .enabled () )
7161 {
7262 priest ().trigger_psychic_link ( d->state );
@@ -392,6 +382,16 @@ struct shadowy_apparition_base_t : public priest_spell_t
392382 priest ().generate_insanity ( insanity_gain, priest ().gains .insanity_auspicious_spirits , s->action );
393383 }
394384 }
385+
386+ if ( priest ().talents .shadow .haunting_shadows .enabled () )
387+ {
388+ timespan_t dot_extension =
389+ timespan_t::from_millis ( priest ().talents .shadow .haunting_shadows ->effectN ( 2 ).base_value () );
390+ priest_td_t & td = get_td ( s->target );
391+
392+ td.dots .shadow_word_pain ->adjust_duration ( dot_extension );
393+ td.dots .vampiric_touch ->adjust_duration ( dot_extension );
394+ }
395395 }
396396 };
397397
@@ -529,11 +529,6 @@ struct shadow_word_pain_t final : public priest_spell_t
529529 return false ;
530530 }
531531
532- if ( priest ().specialization () == PRIEST_SHADOW && priest ().talents .shadow .misery .enabled () )
533- {
534- return false ;
535- }
536-
537532 return priest_spell_t::ready ();
538533 }
539534
@@ -762,18 +757,24 @@ struct vampiric_touch_t final : public priest_spell_t
762757};
763758
764759// ==========================================================================
765- // Devouring Plague
760+ // Shadow Word: Madness
766761// ==========================================================================
767762struct shadow_word_madness_t final : public priest_spell_t
768763{
769- shadow_word_madness_t ( priest_t & p ) : priest_spell_t ( " shadow_word_madness" , p, p.dot_spells.shadow_word_madness )
764+ bool casted;
765+ bool triggered_by_maddening_tentacles;
766+
767+ shadow_word_madness_t ( priest_t & p, bool _casted = false , bool _triggered_by_maddening_tentacles = true )
768+ : priest_spell_t ( " shadow_word_madness" , p, p.dot_spells.shadow_word_madness )
770769 {
771- may_crit = true ;
772- affected_by_shadow_weaving = true ;
773- idol_of_nzoth_execute_stacks = 12 ;
770+ casted = _casted;
771+ triggered_by_maddening_tentacles = _triggered_by_maddening_tentacles;
772+ may_crit = true ;
773+ affected_by_shadow_weaving = true ;
774+ idol_of_nzoth_execute_stacks = 12 ;
774775 }
775776
776- shadow_word_madness_t ( priest_t & p, util::string_view options_str ) : shadow_word_madness_t ( p )
777+ shadow_word_madness_t ( priest_t & p, util::string_view options_str ) : shadow_word_madness_t ( p, true , false )
777778 {
778779 parse_options ( options_str );
779780 }
@@ -783,21 +784,29 @@ struct shadow_word_madness_t final : public priest_spell_t
783784 double m = priest_spell_t::composite_persistent_multiplier ( s );
784785
785786 // Dummy effect that is hard-coded to 20
786- if ( priest ().buffs .mind_devourer ->check () )
787+ if ( priest ().buffs .mind_devourer ->check () && casted && !triggered_by_maddening_tentacles )
787788 {
788789 m *= 1 + priest ().buffs .mind_devourer ->data ().effectN ( 2 ).percent ();
789790 }
790791
792+ if ( !casted && triggered_by_maddening_tentacles )
793+ {
794+ m *= priest ().talents .shadow .maddening_tentacles ->effectN ( 1 ).percent ();
795+ }
796+
791797 return m;
792798 }
793799
794800 void consume_resource () override
795801 {
796- priest_spell_t::consume_resource ();
797-
798- if ( priest ().buffs .mind_devourer ->up () )
802+ if ( casted )
799803 {
800- priest ().buffs .mind_devourer ->decrement ();
804+ priest_spell_t::consume_resource ();
805+
806+ if ( priest ().buffs .mind_devourer ->up () )
807+ {
808+ priest ().buffs .mind_devourer ->decrement ();
809+ }
801810 }
802811 }
803812
@@ -828,12 +837,13 @@ struct shadow_word_madness_t final : public priest_spell_t
828837 {
829838 priest_spell_t::execute ();
830839
840+ // TODO: check this with Maddening Tentacles
831841 if ( priest ().sets ->has_set_bonus ( HERO_ARCHON, TWW3, B4 ) && priest ().buffs .power_surge ->check () )
832842 {
833843 priest ().buffs .tww3_archon_4pc ->trigger ();
834844 }
835845
836- if ( priest ().talents .shadow .ancient_madness .enabled () && priest ().buffs .voidform ->up () )
846+ if ( priest ().talents .shadow .ancient_madness .enabled () && priest ().buffs .voidform ->up () && casted )
837847 {
838848 priest ().buffs .voidform ->extend_duration (
839849 &priest (), timespan_t::from_millis ( priest ().talents .shadow .voidform ->effectN ( 2 ).base_value () ) );
@@ -844,7 +854,7 @@ struct shadow_word_madness_t final : public priest_spell_t
844854 priest ().buffs .screams_of_the_void ->trigger ();
845855 }
846856
847- if ( priest ().talents .voidweaver .collapsing_void .enabled () )
857+ if ( priest ().talents .voidweaver .collapsing_void .enabled () && casted )
848858 {
849859 priest ().expand_entropic_rift ();
850860 }
@@ -1067,6 +1077,11 @@ struct voidform_t final : public priest_spell_t
10671077
10681078 priest ().buffs .sustained_potency ->expire ();
10691079 }
1080+
1081+ if ( priest ().talents .shared .mindbender .enabled () )
1082+ {
1083+ priest ().pets .mindbender .spawn ();
1084+ }
10701085 }
10711086
10721087 bool ready () override
@@ -1378,11 +1393,14 @@ struct shadow_weaving_t final : public priest_spell_t
13781393struct tentacle_slam_damage_t final : public priest_spell_t
13791394{
13801395 double parent_targets = 1 ;
1396+ propagate_const<shadow_word_madness_t *> child_swm;
13811397
1382- tentacle_slam_damage_t ( util::string_view n, priest_t & p, const spell_data_t * s ) : priest_spell_t ( n, p, s )
1398+ tentacle_slam_damage_t ( util::string_view n, priest_t & p, const spell_data_t * s )
1399+ : priest_spell_t ( n, p, s ), child_swm( new shadow_word_madness_t ( priest(), false , true ) )
13831400 {
13841401 background = true ;
13851402 affected_by_shadow_weaving = true ;
1403+ child_swm->background = true ;
13861404 }
13871405
13881406 // Hacked in until the base spell covers this
@@ -1416,6 +1434,12 @@ struct tentacle_slam_damage_t final : public priest_spell_t
14161434 {
14171435 priest ().trigger_random_idol ( s );
14181436 }
1437+
1438+ if ( priest ().talents .shadow .maddening_tentacles .enabled () )
1439+ {
1440+ child_swm->target = s->target ;
1441+ child_swm->execute ();
1442+ }
14191443 }
14201444};
14211445
@@ -1433,6 +1457,9 @@ struct tentacle_slam_dots_t final : public priest_spell_t
14331457 background = true ;
14341458 aoe = as<int >( s->effectN ( 3 ).base_value () );
14351459
1460+ // TODO: confirm this works
1461+ idol_of_nzoth_execute_stacks = 6 ;
1462+
14361463 child_vt->background = true ;
14371464 }
14381465
@@ -1928,10 +1955,11 @@ void priest_t::init_spells_shadow()
19281955 auto ST = [ this ]( std::string_view n ) { return find_talent_spell ( talent_tree::SPECIALIZATION, n ); };
19291956
19301957 // Row 2
1931- talents.shadow .psychic_link = ST ( " Psychic Link" );
1932- talents.shadow .misery = ST ( " Misery" );
1933- talents.shadow .intangibility = ST ( " Intangibility" );
1934- talents.shadow .mental_fortitude = ST ( " Mental Fortitude" );
1958+ talents.shadow .psychic_link = ST ( " Psychic Link" );
1959+ talents.shadow .misery = ST ( " Misery" );
1960+ talents.shadow .invoked_nightmares = ST ( " Invoked Nightmares" );
1961+ talents.shadow .intangibility = ST ( " Intangibility" );
1962+ talents.shadow .mental_fortitude = ST ( " Mental Fortitude" );
19351963 // Row 3
19361964 talents.shadow .thought_harvester = ST ( " Thought Harvester" );
19371965 talents.shadow .tentacle_slam = ST ( " Tentacle Slam" );
@@ -1949,6 +1977,7 @@ void priest_t::init_spells_shadow()
19491977 talents.shadow .void_volley = ST ( " Void Volley" );
19501978 talents.shadow .void_volley_missile = find_spell ( 1242173 );
19511979 talents.shadow .void_volley_damage = find_spell ( 1242189 );
1980+ talents.shadow .haunting_shadows = ST ( " Haunting Shadows" );
19521981 talents.shadow .mental_decay = ST ( " Mental Decay" );
19531982 // Row 6
19541983 talents.shadow .dark_thoughts = ST ( " Dark Thoughts" );
@@ -1973,12 +2002,14 @@ void priest_t::init_spells_shadow()
19732002 talents.shadow .death_and_madness_reset_buff = find_spell ( 390628 );
19742003 talents.shadow .mind_devourer = ST ( " Mind Devourer" );
19752004 talents.shadow .auspicious_spirits = ST ( " Auspicious Spirits" );
2005+ talents.shadow .maddening_tentacles = ST ( " Maddening Tentacles" );
19762006 // Row 9
19772007 talents.shadow .madness_weaving = ST ( " Madness Weaving" );
19782008 talents.shadow .deaths_torment = ST ( " Death's Torment" );
19792009 talents.shadow .screams_of_the_void = ST ( " Screams of the Void" );
19802010 talents.shadow .tormented_spirits = ST ( " Tormented Spirits" );
19812011 talents.shadow .insidious_ire = ST ( " Insidious Ire" );
2012+ talents.shadow .crushing_void = ST ( " Crushing Void" );
19822013 // Row 10
19832014 talents.shadow .idol_of_yshaarj = ST ( " Idol of Y'Shaarj" );
19842015 talents.shadow .call_of_the_void = find_spell ( 373316 ); // Idol of Y'Shaarj positive haste buff
0 commit comments