Skip to content

Commit 6cc1cc7

Browse files
committed
[Mage] Flash Freezeburn
1 parent 4987ee7 commit 6cc1cc7

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

engine/class_modules/sc_mage.cpp

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ struct mage_t final : public player_t
157157
{
158158
action_t* arcane_assault;
159159
action_t* arcane_echo;
160+
action_t* flash_freezeburn;
160161
action_t* frostfire_empowerment;
161162
action_t* glacial_assault;
162163
action_t* hand_of_frost;
@@ -3822,6 +3823,9 @@ struct glacial_spike_t final : public frost_mage_spell_t
38223823

38233824
if ( duality_pyroblast )
38243825
duality_pyroblast->execute_on_target( target );
3826+
3827+
if ( p()->talents.flash_freezeburn.ok() )
3828+
p()->buffs.frostfire_empowerment->trigger();
38253829
}
38263830

38273831
void impact( action_state_t* s ) override
@@ -3830,6 +3834,9 @@ struct glacial_spike_t final : public frost_mage_spell_t
38303834

38313835
if ( s->result == RESULT_CRIT && p()->talents.frostbite.ok() )
38323836
p()->trigger_freezing( s->target, as<int>( p()->talents.frostbite->effectN( 1 ).base_value() ) );
3837+
3838+
if ( result_is_hit( s->result ) && p()->action.flash_freezeburn )
3839+
p()->action.flash_freezeburn->execute_on_target( s->target, p()->talents.flash_freezeburn->effectN( 2 ).percent() * s->result_total );
38333840
}
38343841

38353842
bool ready() override
@@ -4188,6 +4195,9 @@ struct meteor_t final : public fire_mage_spell_t
41884195
{
41894196
fire_mage_spell_t::execute();
41904197

4198+
if ( !background && p()->talents.flash_freezeburn.ok() )
4199+
p()->buffs.frostfire_empowerment->trigger();
4200+
41914201
if ( p()->action.isothermic_comet_storm )
41924202
p()->action.isothermic_comet_storm->execute_on_target( target );
41934203
}
@@ -4266,6 +4276,15 @@ struct duality_glacial_spike_t final : public mage_spell_t
42664276
if ( p->talents.elemental_conduit.ok() )
42674277
triggers.ignite = true;
42684278
}
4279+
4280+
void impact( action_state_t* s ) override
4281+
{
4282+
mage_spell_t::impact( s );
4283+
4284+
// TODO: This is probably a bug
4285+
if ( result_is_hit( s->result ) && p()->action.flash_freezeburn )
4286+
p()->action.flash_freezeburn->execute_on_target( s->target, p()->talents.flash_freezeburn->effectN( 2 ).percent() * s->result_total );
4287+
}
42694288
};
42704289

42714290
struct pyroblast_pyromaniac_t final : public fire_mage_spell_t
@@ -4695,6 +4714,37 @@ struct frostfire_empowerment_t final : public spell_t
46954714
}
46964715
};
46974716

4717+
struct flash_freezeburn_t final : public spell_t
4718+
{
4719+
flash_freezeburn_t( std::string_view n, mage_t* p ) :
4720+
spell_t( n, p, p->find_spell( 1278079 ) )
4721+
{
4722+
background = proc = true;
4723+
base_dd_min = base_dd_max = 1.0;
4724+
// TODO: Usually hits one fewer target
4725+
// It's possible it picks 5 random targets and if one of them happens to be
4726+
// the main target, it simply skips it. See also: Splintering Ray
4727+
aoe--;
4728+
}
4729+
4730+
size_t available_targets( std::vector<player_t*>& tl ) const override
4731+
{
4732+
spell_t::available_targets( tl );
4733+
4734+
range::erase_remove( tl, target );
4735+
4736+
return tl.size();
4737+
}
4738+
4739+
void impact( action_state_t* s ) override
4740+
{
4741+
spell_t::impact( s );
4742+
4743+
if ( result_is_hit( s->result ) )
4744+
debug_cast<mage_t*>( player )->trigger_freezing( s->target, 1 );
4745+
}
4746+
};
4747+
46984748
struct controlled_instincts_t final : public spell_t
46994749
{
47004750
controlled_instincts_t( std::string_view n, mage_t* p ) :
@@ -5288,6 +5338,9 @@ void mage_t::create_actions()
52885338
if ( talents.frostfire_empowerment.ok() )
52895339
action.frostfire_empowerment = get_action<frostfire_empowerment_t>( "frostfire_empowerment", this );
52905340

5341+
if ( talents.flash_freezeburn.ok() )
5342+
action.flash_freezeburn = get_action<flash_freezeburn_t>( "flash_freezeburn", this );
5343+
52915344
if ( talents.isothermic_core.ok() )
52925345
{
52935346
if ( specialization() == MAGE_FIRE )
@@ -5785,6 +5838,10 @@ void mage_t::init_spells()
57855838
// register_passive_effect_mask( talents.blast_radius,
57865839
// specialization() == MAGE_FIRE ? effect_mask_t( true ).disable( 1, 2 ) : effect_mask_t( true ).disable( 3, 4 ) );
57875840

5841+
// TODO: The effects aren't properly disabled in game, Fire gets extra GS damage and Frost gets extra Meteor damage
5842+
// register_passive_effect_mask( talents.flash_freezeburn,
5843+
// specialization() == MAGE_FIRE ? effect_mask_t( true ).disable( 1 ) : effect_mask_t( true ).disable( 4, 5 ) );
5844+
57885845
// TODO: Remove these when Midnight releases
57895846
register_passive_effect_mask( sets->set( HERO_FROSTFIRE, TWW3, B2 ),
57905847
specialization() == MAGE_FIRE ? effect_mask_t( true ).disable( 5, 6 ) : effect_mask_t( true ).disable( 3, 4 ) );

0 commit comments

Comments
 (0)