Skip to content

Commit

Permalink
[Warlock] Cloven Souls and Diabolist tweaks (simulationcraft#9078)
Browse files Browse the repository at this point in the history
* Quick fix for Hand of Guldan Demonic Art procs

* Implement Cloven Souls

* Remove energy consumption from ritual demons
  • Loading branch information
Azevara authored Jul 23, 2024
1 parent a3967ab commit b33bddf
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 2 deletions.
9 changes: 9 additions & 0 deletions engine/class_modules/warlock/sc_warlock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,9 @@ warlock_td_t::warlock_td_t( player_t* target, warlock_t& p )
range::for_each( p.havoc_spells, []( action_t* a ) { a->target_cache.is_valid = false; } );
} );

// Diabolist
debuffs_cloven_soul = make_buff( *this, "cloven_soul", p.hero.cloven_soul_debuff );

target->register_on_demise_callback( &p, [ this ]( player_t* ) { target_demise(); } );
}

Expand Down Expand Up @@ -250,6 +253,9 @@ double warlock_t::composite_player_target_multiplier( player_t* target, school_e
m *= 1.0 + td->debuffs_fel_sunder->check_stack_value();
}

if ( hero.cloven_souls.ok() && td->debuffs_cloven_soul->check() )
m *= 1.0 + hero.cloven_soul_debuff->effectN( 1 ).percent();

return m;
}

Expand Down Expand Up @@ -335,6 +341,9 @@ double warlock_t::composite_player_target_pet_damage_multiplier( player_t* targe
m *= 1.0 + td->debuffs_fel_sunder->check_stack_value();
}

if ( hero.cloven_souls.ok() && td->debuffs_cloven_soul->check() )
m *= 1.0 + hero.cloven_soul_debuff->effectN( guardian ? 3 : 2 ).percent();

return m;
}

Expand Down
4 changes: 4 additions & 0 deletions engine/class_modules/warlock/sc_warlock.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ struct warlock_td_t : public actor_target_data_t
propagate_const<buff_t*> debuffs_pyrogenics;
propagate_const<buff_t*> debuffs_conflagrate;

// Diabolist
propagate_const<buff_t*> debuffs_cloven_soul;

double soc_threshold; // Aff - Seed of Corruption counts damage from cross-spec spells such as Drain Life

warlock_t& warlock;
Expand Down Expand Up @@ -472,6 +475,7 @@ struct warlock_t : public player_t
const spell_data_t* felseeker_dmg;

player_talent_t cloven_souls;
const spell_data_t* cloven_soul_debuff;
player_talent_t touch_of_rancora;
player_talent_t secrets_of_the_coven; // TODO: Sargerei Technique, Dark Virtuosity, Nightfall, Imp. Shadow Bolt, Sacrificed Souls, Rune of Shadows, Demonic Calling?, Backdraft, Roaring Blaze, Indiscriminate Flames, Emberstorm, Fire and Brimstone?, Burn to Ashes, Diabolic Embers, Dimension Ripper

Expand Down
3 changes: 2 additions & 1 deletion engine/class_modules/warlock/sc_warlock_actions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1882,6 +1882,7 @@ using namespace helpers;
dual = true;

triggers.shadow_invocation = true;
triggers.demonic_art = true;

if ( p->talents.umbral_blaze.ok() )
{
Expand Down Expand Up @@ -1935,7 +1936,7 @@ using namespace helpers;
: warlock_spell_t( "Hand of Gul'dan", p, p->warlock_base.hand_of_guldan, options_str ),
impact_spell( new hog_impact_t( p ) )
{
triggers.diabolic_ritual = triggers.demonic_art = true;
triggers.diabolic_ritual = true;

add_child( impact_spell );
}
Expand Down
3 changes: 3 additions & 0 deletions engine/class_modules/warlock/sc_warlock_init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,9 @@ namespace warlock
hero.felseeker = find_spell( 438973 );
hero.felseeker_dmg = find_spell( 434404 );

hero.cloven_souls = find_talent_spell( talent_tree::HERO, "Cloven Souls" ); // Should be ID 428517
hero.cloven_soul_debuff = find_spell( 434424 );

warlock_pet_list.overlords.set_default_duration( hero.summon_overlord->duration() );
warlock_pet_list.mothers.set_default_duration( hero.summon_mother->duration() );
warlock_pet_list.pit_lords.set_default_duration( hero.summon_pit_lord->duration() );
Expand Down
14 changes: 13 additions & 1 deletion engine/class_modules/warlock/sc_warlock_pets.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2162,6 +2162,14 @@ namespace diabolist

debug_cast<overlord_t*>( p() )->cleaves--;
}

void impact( action_state_t* s ) override
{
warlock_pet_spell_t::impact( s );

if ( p()->o()->hero.cloven_souls.ok() )
owner_td( s->target )->debuffs_cloven_soul->trigger();
}
};

void overlord_t::arise()
Expand Down Expand Up @@ -2203,7 +2211,10 @@ namespace diabolist
{
chaos_salvo_t( warlock_pet_t* p )
: warlock_pet_spell_t( "Chaos Salvo", p, p->o()->hero.chaos_salvo )
{ tick_action = new chaos_salvo_tick_t( p ); }
{
base_costs_per_tick[ RESOURCE_ENERGY ] = 0.0;

tick_action = new chaos_salvo_tick_t( p ); }

bool ready() override
{
Expand Down Expand Up @@ -2251,6 +2262,7 @@ namespace diabolist
{
background = dual = true;
aoe = -1;
base_costs[ RESOURCE_ENERGY ] = 0.0;
}
};

Expand Down

0 comments on commit b33bddf

Please sign in to comment.