@@ -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
42714290struct 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+
46984748struct 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