Skip to content

Commit 4a69cb9

Browse files
committed
[Mage] Frostfire updates
1 parent c70e689 commit 4a69cb9

File tree

1 file changed

+24
-19
lines changed

1 file changed

+24
-19
lines changed

engine/class_modules/sc_mage.cpp

+24-19
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,7 @@ struct mage_t final : public player_t
436436
cooldown_t* comet_storm;
437437
cooldown_t* cone_of_cold;
438438
cooldown_t* dragons_breath;
439+
cooldown_t* excess_frost;
439440
cooldown_t* fire_blast;
440441
cooldown_t* flurry;
441442
cooldown_t* from_the_ashes;
@@ -2389,19 +2390,17 @@ struct mage_spell_t : public spell_t
23892390
frost->expire();
23902391
}
23912392

2392-
int fire_before = fire->check();
2393-
int frost_before = frost->check();
2394-
23952393
if ( is_fire )
23962394
fire->trigger( empowerment ? fire->max_stack() : -1 );
23972395

23982396
if ( is_frost )
23992397
frost->trigger( empowerment ? frost->max_stack() : -1 );
24002398

2401-
if ( fire_before < fire->check() && fire->at_max_stacks() )
2399+
if ( empowerment )
2400+
{
24022401
p()->buffs.excess_fire->trigger();
2403-
if ( frost_before < frost->check() && frost->at_max_stacks() )
24042402
p()->buffs.excess_frost->trigger();
2403+
}
24052404

24062405
// Frostfire spells don't seem to trigger Severe Temperatures
24072406
if ( !( is_fire && is_frost ) )
@@ -4301,6 +4300,9 @@ struct comet_storm_t final : public frost_mage_spell_t
43014300
{
43024301
frost_mage_spell_t::execute();
43034302

4303+
if ( !isothermic )
4304+
p()->buffs.excess_fire->trigger();
4305+
43044306
if ( p()->action.isothermic_meteor )
43054307
p()->action.isothermic_meteor->execute_on_target( target );
43064308
}
@@ -4523,11 +4525,7 @@ struct fireball_t final : public fire_mage_spell_t
45234525

45244526
void impact( action_state_t* s ) override
45254527
{
4526-
// TODO: FFB is missing the "not a proc" attribute that other impact snapshot spells have
4527-
bool old_proc = frostfire ? true : proc;
4528-
std::swap( proc, old_proc );
45294528
fire_mage_spell_t::impact( s );
4530-
std::swap( proc, old_proc );
45314529

45324530
if ( result_is_hit( s->result ) )
45334531
{
@@ -4823,10 +4821,11 @@ struct flurry_bolt_t final : public frost_mage_spell_t
48234821
if ( !result_is_hit( s->result ) )
48244822
return;
48254823

4826-
if ( s->chain_target == 0 && p()->buffs.excess_frost->check() )
4824+
if ( s->chain_target == 0 && p()->buffs.excess_frost->check() && p()->cooldowns.excess_frost->up() )
48274825
{
48284826
p()->action.excess_ice_nova->execute_on_target( s->target );
48294827
p()->buffs.excess_frost->decrement();
4828+
p()->cooldowns.excess_frost->start( p()->buffs.excess_frost->data().internal_cooldown() );
48304829
}
48314830

48324831
trigger_winters_chill( s );
@@ -5056,11 +5055,7 @@ struct frostbolt_t final : public frost_mage_spell_t
50565055

50575056
void impact( action_state_t* s ) override
50585057
{
5059-
// TODO: FFB is missing the "not a proc" attribute that other impact snapshot spells have
5060-
bool old_proc = frostfire ? true : proc;
5061-
std::swap( proc, old_proc );
50625058
frost_mage_spell_t::impact( s );
5063-
std::swap( proc, old_proc );
50645059

50655060
if ( result_is_hit( s->result ) )
50665061
{
@@ -5536,6 +5531,7 @@ struct ice_lance_t final : public custom_state_spell_t<frost_mage_spell_t, ice_l
55365531
{
55375532
p()->action.frostfire_burst->execute_on_target( s->target );
55385533
p()->buffs.excess_fire->decrement();
5534+
p()->buffs.excess_frost->trigger();
55395535
}
55405536

55415537
if ( frozen & FF_FINGERS_OF_FROST && frigid_pulse )
@@ -5724,10 +5720,12 @@ struct fire_blast_t final : public fire_mage_spell_t
57245720

57255721
if ( result_is_hit( s->result ) && s->chain_target == 0 )
57265722
{
5727-
if ( p()->buffs.excess_fire->check() )
5723+
// As of 11.1, only triggers from Fire Blasts cast by Fire Mages.
5724+
if ( p()->specialization() == MAGE_FIRE && p()->buffs.excess_fire->check() )
57285725
{
57295726
p()->action.frostfire_burst->execute_on_target( s->target );
57305727
p()->buffs.excess_fire->decrement();
5728+
p()->buffs.excess_frost->trigger();
57315729
}
57325730

57335731
trigger_glorious_incandescence( s->target );
@@ -5943,10 +5941,12 @@ struct meteor_impact_t final : public fire_mage_spell_t
59435941
struct meteor_t final : public fire_mage_spell_t
59445942
{
59455943
timespan_t meteor_delay;
5944+
const meteor_type type;
59465945

5947-
meteor_t( std::string_view n, mage_t* p, std::string_view options_str, meteor_type type = meteor_type::NORMAL ) :
5948-
fire_mage_spell_t( n, p, type == meteor_type::NORMAL ? p->talents.meteor : p->find_spell( 153561 ) ),
5949-
meteor_delay( p->find_spell( 177345 )->duration() )
5946+
meteor_t( std::string_view n, mage_t* p, std::string_view options_str, meteor_type type_ = meteor_type::NORMAL ) :
5947+
fire_mage_spell_t( n, p, type_ == meteor_type::NORMAL ? p->talents.meteor : p->find_spell( 153561 ) ),
5948+
meteor_delay( p->find_spell( 177345 )->duration() ),
5949+
type( type_ )
59505950
{
59515951
parse_options( options_str );
59525952

@@ -6001,6 +6001,9 @@ struct meteor_t final : public fire_mage_spell_t
60016001
{
60026002
fire_mage_spell_t::execute();
60036003

6004+
if ( type != meteor_type::ISOTHERMIC )
6005+
p()->buffs.excess_fire->trigger();
6006+
60046007
if ( p()->action.isothermic_comet_storm )
60056008
p()->action.isothermic_comet_storm->execute_on_target( target );
60066009
}
@@ -6088,10 +6091,11 @@ struct phoenix_flames_splash_t final : public fire_mage_spell_t
60886091

60896092
if ( result_is_hit( s->result ) )
60906093
{
6091-
if ( s->chain_target == 0 && p()->buffs.excess_frost->check() )
6094+
if ( s->chain_target == 0 && p()->buffs.excess_frost->check() && p()->cooldowns.excess_frost->up() )
60926095
{
60936096
p()->action.excess_ice_nova->execute_on_target( s->target );
60946097
p()->buffs.excess_frost->decrement();
6098+
p()->cooldowns.excess_frost->start( p()->buffs.excess_frost->data().internal_cooldown() );
60956099
}
60966100
}
60976101
}
@@ -7565,6 +7569,7 @@ mage_t::mage_t( sim_t* sim, std::string_view name, race_e r ) :
75657569
cooldowns.combustion = get_cooldown( "combustion" );
75667570
cooldowns.comet_storm = get_cooldown( "comet_storm" );
75677571
cooldowns.cone_of_cold = get_cooldown( "cone_of_cold" );
7572+
cooldowns.excess_frost = get_cooldown( "excess_frost_icd" );
75687573
cooldowns.dragons_breath = get_cooldown( "dragons_breath" );
75697574
cooldowns.fire_blast = get_cooldown( "fire_blast" );
75707575
cooldowns.flurry = get_cooldown( "flurry" );

0 commit comments

Comments
 (0)