Skip to content

Commit 9bc540c

Browse files
committed
[Priest] start work on 64507 beta changes
1 parent b214eca commit 9bc540c

File tree

4 files changed

+80
-49
lines changed

4 files changed

+80
-49
lines changed

engine/class_modules/priest/sc_priest.cpp

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,7 +1051,7 @@ struct summon_fiend_t final : public priest_spell_t
10511051

10521052
const spell_data_t* pet_summon_spell( priest_t& p )
10531053
{
1054-
if ( p.talents.voidweaver.voidwraith.enabled() && p.talents.shared.shadowfiend.enabled() )
1054+
if ( p.talents.voidweaver.voidwraith.enabled() )
10551055
return p.talents.voidweaver.voidwraith_spell;
10561056

10571057
return p.talents.shared.mindbender.enabled() ? p.talents.shared.mindbender : p.talents.shared.shadowfiend;
@@ -1199,8 +1199,8 @@ struct shadow_word_death_t final : public priest_spell_t
11991199
execute_modifier( data().effectN( 4 ).percent() ),
12001200
shadow_word_death_self_damage( new shadow_word_death_self_damage_t( p ) ),
12011201
depth_of_shadows_duration(
1202-
timespan_t::from_seconds( p.talents.voidweaver.depth_of_shadows->effectN( 1 ).base_value() ) ),
1203-
depth_of_shadows_threshold( p.talents.voidweaver.depth_of_shadows->effectN( 2 ).base_value() ),
1202+
timespan_t::from_seconds( p.talents.shared.depth_of_shadows->effectN( 1 ).base_value() ) ),
1203+
depth_of_shadows_threshold( p.talents.shared.depth_of_shadows->effectN( 2 ).base_value() ),
12041204
child_expiation( nullptr ),
12051205
child_searing_light( priest().background_actions.searing_light ),
12061206
execute_override( execute_override )
@@ -1331,7 +1331,7 @@ struct shadow_word_death_t final : public priest_spell_t
13311331
{
13321332
double save_health_percentage = s->target->health_percentage();
13331333

1334-
if ( priest().talents.voidweaver.depth_of_shadows.enabled() )
1334+
if ( priest().talents.shared.depth_of_shadows.enabled() )
13351335
{
13361336
double chance = 0.9;
13371337
// TODO: Find out the actual chance, this is a guess
@@ -2730,10 +2730,6 @@ action_t* priest_t::create_action( util::string_view name, util::string_view opt
27302730
{
27312731
return new power_word_fortitude_t( *this, options_str );
27322732
}
2733-
if ( ( name == "shadowfiend" ) || ( name == "mindbender" ) || ( name == "fiend" ) || ( name == "voidwraith" ) )
2734-
{
2735-
return new summon_fiend_t( *this, options_str );
2736-
}
27372733
if ( name == "mind_blast" )
27382734
{
27392735
return new mind_blast_t( *this, options_str );
@@ -2968,7 +2964,8 @@ void priest_t::init_spells()
29682964
// Shared Spells
29692965
talents.shared.mindbender = ST( "Mindbender" );
29702966
talents.shared.inescapable_torment = ST( "Inescapable Torment" );
2971-
talents.shared.shadowfiend = ST( "Shadowfiend" );
2967+
talents.shared.shadowfiend = find_spell( 34433 );
2968+
talents.shared.depth_of_shadows = ST( "Depth of Shadows" );
29722969

29732970
// Generic Spells
29742971
specs.levitate_buff = find_spell( 111759 );
@@ -3131,7 +3128,6 @@ void priest_t::init_spells()
31313128
talents.voidweaver.void_empowerment = HT( "Void Empowerment" );
31323129
talents.voidweaver.void_empowerment_buff = find_spell( 450140 );
31333130
talents.voidweaver.darkening_horizon = HT( "Darkening Horizon" );
3134-
talents.voidweaver.depth_of_shadows = HT( "Depth of Shadows" );
31353131
talents.voidweaver.voidwraith = HT( "Voidwraith" );
31363132
talents.voidweaver.voidwraith_spell = find_spell( 451235 );
31373133
talents.voidweaver.touch_of_the_void = HT( "Touch of the Void" );
@@ -3144,8 +3140,8 @@ void priest_t::init_spells()
31443140
talents.voidweaver.collapsing_void_damage = find_spell( 448405 );
31453141

31463142
tww3_spells.voidweaver_4pc = sets->set( HERO_VOIDWEAVER, TWW3, B4 );
3147-
3148-
if ( specialization() == PRIEST_SHADOW)
3143+
3144+
if ( specialization() == PRIEST_SHADOW )
31493145
deregister_passive_effect( talents.voidweaver.overwhelming_shadows->effectN( 2 ) );
31503146

31513147
// Register passives

engine/class_modules/priest/sc_priest.hpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,9 +311,10 @@ struct priest_t final : public player_t
311311

312312
struct
313313
{
314-
player_talent_t shadowfiend;
314+
const spell_data_t* shadowfiend;
315315
player_talent_t mindbender;
316316
player_talent_t inescapable_torment;
317+
player_talent_t depth_of_shadows;
317318
} shared;
318319

319320
struct
@@ -322,6 +323,7 @@ struct priest_t final : public player_t
322323
// Row 2
323324
player_talent_t psychic_link;
324325
player_talent_t misery;
326+
player_talent_t invoked_nightmares;
325327
player_talent_t intangibility;
326328
player_talent_t mental_fortitude;
327329
// Row 3
@@ -342,6 +344,7 @@ struct priest_t final : public player_t
342344
const spell_data_t* void_volley_buff;
343345
const spell_data_t* void_volley_missile;
344346
const spell_data_t* void_volley_damage;
347+
player_talent_t haunting_shadows;
345348
player_talent_t mental_decay;
346349
// Row 6
347350
player_talent_t dark_thoughts;
@@ -366,12 +369,14 @@ struct priest_t final : public player_t
366369
const spell_data_t* death_and_madness_reset_buff;
367370
player_talent_t mind_devourer;
368371
player_talent_t auspicious_spirits;
372+
player_talent_t maddening_tentacles;
369373
// Row 9
370374
player_talent_t madness_weaving;
371375
player_talent_t deaths_torment;
372376
player_talent_t screams_of_the_void;
373377
player_talent_t tormented_spirits;
374378
player_talent_t insidious_ire;
379+
player_talent_t crushing_void;
375380
// Row 10
376381
player_talent_t idol_of_yshaarj;
377382
const spell_data_t* call_of_the_void;
@@ -590,7 +595,6 @@ struct priest_t final : public player_t
590595
player_talent_t void_empowerment;
591596
const spell_data_t* void_empowerment_buff;
592597
player_talent_t darkening_horizon;
593-
player_talent_t depth_of_shadows;
594598
player_talent_t voidwraith;
595599
const spell_data_t* voidwraith_spell;
596600
player_talent_t touch_of_the_void;

engine/class_modules/priest/sc_priest_pets.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -596,7 +596,7 @@ struct shadowfiend_pet_t final : public base_fiend_pet_t
596596
}
597597
double insanity_gain() const override
598598
{
599-
if ( o().talents.shared.shadowfiend.enabled() )
599+
if ( o().talents.shared.depth_of_shadows.enabled() )
600600
{
601601
return power_leech_insanity;
602602
}
@@ -737,7 +737,7 @@ struct fiend_melee_t : public priest_pet_melee_t
737737

738738
p().o().trigger_atonement( s, composite_atonement_multiplier( s ) );
739739

740-
if ( p().o().talents.shared.shadowfiend.enabled() || p().o().talents.shared.mindbender.enabled() )
740+
if ( p().o().talents.shared.depth_of_shadows.enabled() || p().o().talents.shared.mindbender.enabled() )
741741
{
742742
if ( p().o().specialization() == PRIEST_SHADOW )
743743
{

engine/class_modules/priest/sc_priest_shadow.cpp

Lines changed: 64 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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
// ==========================================================================
767762
struct 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
13781393
struct 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

Comments
 (0)