• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Frost Wrath v1.1a

  • Like
Reactions: krisserz
Current version: 1.1a
Language: GUI
Works with latest version: Yes
User friendly: Yes
Author: -BerZeKeR-

icons_10172_btn.jpg


Frost Wrath

Frost Maiden blasts the area with a wave of frost that deals damage to every enemy unit in a range of effect.
Frost explosion slightly knockbacks units effected by nova.
Cold damage slows unit's attack and movement rate for a short amount of time.

Level 1 - Deals 130 damage in Area of effect 180, knockabacks units and slows their attack and movement rate for 2 seconds.
Level 2 - Deals 170 damage in Area of effect 220, knockabacks units and slows their attack and movement rate for 3 seconds.
Level 3 - Deals 210 damage in Area of effect 260, knockabacks units and slows their attack and movement rate for 4 seconds.



  • Frost Wrath
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Frost Wrath
    • Actions
      • -------- --------------------------------------------------------- --------
      • -------- Start spell setings --------
      • -------- --------------------------------------------------------- --------
      • Set FW_Caster = (Triggering unit)
      • Set FW_Ability_Level = (Level of (Ability being cast) for FW_Caster)
      • Set FW_Location = (Target point of ability being cast)
      • Set FW_Owner = (Owner of FW_Caster)
      • Set FW_Dummy_Ability = Frost Wrath(Dummy)
      • -------- --------------------------------------------------------- --------
      • -------- Spell setings --------
      • -------- --------------------------------------------------------- --------
      • Set FW_Base_AoE = 140.00
      • Set FW_Base_Damage = 90.00
      • Set FW_Bonus_AoE = 40.00
      • Set FW_Bonus_Damage = 40.00
      • Set FW_Total_AoE = (FW_Base_AoE + (FW_Bonus_AoE x (Real(FW_Ability_Level))))
      • Set FW_Total_Damage = (FW_Base_Damage + (FW_Bonus_Damage x (Real(FW_Ability_Level))))
      • Set FW_Damage_Group = (Units within FW_Total_AoE of FW_Location matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is alive) Equal to True) and (((Owner of (Matching unit)) is an enemy of FW_Owner) Equal to True))))
      • Set FW_SFX_Base_Scale = 60.00
      • Set FW_SFX_Bonus_Scale = 20.00
      • Set FW_SFX_Total_Scale = (FW_SFX_Base_Scale + (FW_SFX_Bonus_Scale x (Real(FW_Ability_Level))))
      • -------- --------------------------------------------------------- --------
      • -------- Knockback setings --------
      • -------- --------------------------------------------------------- --------
      • Set FW_KnockBack_On = True
      • Set FW_Destroy_Trees = True
      • Set FW_Destruct_Kill_AoE = 150.00
      • Set FW_KB_Speed = 9.00
      • -------- --------------------------------------------------------- --------
      • -------- Starting the spell execution --------
      • -------- ------------------------------------------------------------------------------------------------------------------ --------
      • -------- Creating and setting dummies that serve as special effects --------
      • -------- --------------------------------------------------------- --------
      • Unit - Create 1 Dummy(NovaEffect) for FW_Owner at FW_Location facing Default building facing degrees
      • Animation - Change (Last created unit)'s size to (FW_SFX_Total_Scale%, FW_SFX_Total_Scale%, 100.00%) of its original size
      • Unit - Add a 1.50 second Generic expiration timer to (Last created unit)
      • Unit - Create 1 Dummy(NovaEffect4) for FW_Owner at FW_Location facing Default building facing degrees
      • Animation - Change (Last created unit)'s size to (FW_SFX_Total_Scale%, FW_SFX_Total_Scale%, 100.00%) of its original size
      • Unit - Add a 1.50 second Generic expiration timer to (Last created unit)
      • Unit - Create 1 Dummy(NovaEffect5) for FW_Owner at FW_Location facing Default building facing degrees
      • Animation - Change (Last created unit)'s size to (FW_SFX_Total_Scale%, FW_SFX_Total_Scale%, 100.00%) of its original size
      • Unit - Add a 1.50 second Generic expiration timer to (Last created unit)
      • For each (Integer A) from 1 to 3, do (Actions)
        • Loop - Actions
          • Unit - Create 1 Dummy(NovaEffect3) for FW_Owner at FW_Location facing Default building facing degrees
          • Animation - Change (Last created unit)'s size to (FW_SFX_Total_Scale%, FW_SFX_Total_Scale%, 100.00%) of its original size
          • Unit - Kill (Last created unit)
          • Unit - Create 1 Dummy(NovaEffect2) for FW_Owner at FW_Location facing Default building facing degrees
          • Animation - Change (Last created unit)'s size to (FW_SFX_Total_Scale%, FW_SFX_Total_Scale%, 100.00%) of its original size
          • Unit - Kill (Last created unit)
      • -------- --------------------------------------------------------- --------
      • -------- Picking up the units, damaging the units and adding them into knockback group --------
      • -------- --------------------------------------------------------- --------
      • Unit Group - Pick every unit in FW_Damage_Group and do (Actions)
        • Loop - Actions
          • Unit Group - Add (Picked unit) to FW_KB_Group
          • Unit - Cause FW_Caster to damage (Picked unit), dealing FW_Total_Damage damage of attack type Spells and damage type Unknown
          • Set FW_Picked_Location = (Position of (Picked unit))
          • Set FW_KB_Angle = (Angle from FW_Location to FW_Picked_Location)
          • -------- --------------------------------------------------------- --------
          • -------- Setting the knockback distance --------
          • -------- --------------------------------------------------------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Distance between FW_Location and FW_Picked_Location) Greater than or equal to (FW_Total_AoE / 2.00)
            • Then - Actions
              • Set FW_KB_Distance = 110.00
            • Else - Actions
              • Set FW_KB_Distance = 180.00
          • Unit - Turn collision for (Picked unit) Off
          • -------- --------------------------------------------------------- --------
          • -------- Saving values into hashtable, these valuse will be used in second trigger --------
          • -------- --------------------------------------------------------- --------
          • Hashtable - Save FW_Ability_Level as (Key level) of (Key (Picked unit)) in FW_Table
          • Hashtable - Save Handle OfFW_Owner as (Key owner) of (Key (Picked unit)) in FW_Table
          • Hashtable - Save FW_KB_Angle as (Key angle) of (Key (Picked unit)) in FW_Table
          • Hashtable - Save FW_KB_Distance as (Key distance) of (Key (Picked unit)) in FW_Table
          • Hashtable - Save FW_KB_Speed as (Key speed) of (Key (Picked unit)) in FW_Table
          • Custom script: call RemoveLocation(udg_FW_Picked_Location)
      • -------- --------------------------------------------------------- --------
      • -------- Prewenting any further action if there is no units in unit group --------
      • -------- --------------------------------------------------------- --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in FW_Damage_Group) Equal to 0
        • Then - Actions
        • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • FW_KnockBack_On Equal to True
            • Then - Actions
              • Trigger - Turn on Frost Wrath KB <gen>
            • Else - Actions
      • -------- --------------------------------------------------------- --------
      • -------- Clearing leaks --------
      • -------- --------------------------------------------------------- --------
      • Custom script: call RemoveLocation(udg_FW_Location)
      • Custom script: call DestroyGroup(udg_FW_Damage_Group)
  • Frost Wrath KB
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in FW_KB_Group and do (Actions)
        • Loop - Actions
          • -------- --------------------------------------------------------- --------
          • -------- ####################################### --------
          • -------- Leave this actions as they are --------
          • -------- Things you can change will be marked with a tripple star [ *** ] --------
          • -------- ####################################### --------
          • -------- --------------------------------------------------------- --------
          • -------- --------------------------------------------------------- --------
          • -------- Loading values needed for this trigger --------
          • -------- --------------------------------------------------------- --------
          • Set FW_Ability_Level = (Load (Key level) of (Key (Picked unit)) from FW_Table)
          • Set FW_Owner = (Load (Key owner) of (Key (Picked unit)) in FW_Table)
          • Set FW_KB_Angle = (Load (Key angle) of (Key (Picked unit)) from FW_Table)
          • Set FW_KB_Speed = (Load (Key speed) of (Key (Picked unit)) from FW_Table)
          • Set FW_KB_Distance = (Load (Key distance) of (Key (Picked unit)) from FW_Table)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • FW_KB_Distance Greater than 0.00
            • Then - Actions
              • -------- --------------------------------------------------------- --------
              • -------- Setting knockback locations --------
              • -------- --------------------------------------------------------- --------
              • Set FW_KB_LocationI = (Position of (Picked unit))
              • Set FW_KB_LocationII = (FW_KB_LocationI offset by FW_KB_Speed towards FW_KB_Angle degrees)
              • -------- --------------------------------------------------------- --------
              • -------- Destroying trees --------
              • -------- --------------------------------------------------------- --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • FW_Destroy_Trees Equal to True
                • Then - Actions
                  • Destructible - Pick every destructible within FW_Destruct_Kill_AoE of FW_KB_LocationII and do (Actions)
                    • Loop - Actions
                      • Set FW_KB_LocationIII = (Position of (Picked destructible))
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • ((Picked destructible) is alive) Equal to True
                        • Then - Actions
                          • -------- *** --------
                          • -------- --------------------------------------------------------- --------
                          • -------- Creating special effects --------
                          • -------- --------------------------------------------------------- --------
                          • Special Effect - Create a special effect at FW_KB_LocationIII using Abilities\Spells\Other\FrostArrows\NagaColdArrowMissile.mdl
                          • Special Effect - Destroy (Last created special effect)
                          • Special Effect - Create a special effect at FW_KB_LocationIII using Abilities\Weapons\AncientProtectorMissile\AncientProtectorMissile.mdl
                          • Special Effect - Destroy (Last created special effect)
                          • -------- *** --------
                        • Else - Actions
                      • Destructible - Kill (Picked destructible)
                      • -------- Clearing leaks --------
                      • Custom script: call RemoveLocation(udg_FW_KB_LocationIII)
                • Else - Actions
              • -------- --------------------------------------------------------- --------
              • -------- Starting knockback --------
              • -------- --------------------------------------------------------- --------
              • -------- If pathing is off, then unit can't be knocked anymore and hashtable can be cleared --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Terrain pathing at FW_KB_LocationII of type Walkability is off) Equal to True
                • Then - Actions
                  • Custom script: call RemoveLocation(udg_FW_KB_LocationI)
                  • Custom script: call RemoveLocation(udg_FW_KB_LocationII)
                  • Unit - Turn collision for (Picked unit) On
                  • Unit Group - Remove (Picked unit) from FW_KB_Group
                  • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in FW_Table
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Number of units in FW_KB_Group) Equal to 0
                    • Then - Actions
                      • Trigger - Turn off Frost Wrath KB <gen>
                    • Else - Actions
                • Else - Actions
                  • -------- --------------------------------------------------------- --------
                  • -------- Moving unit --------
                  • -------- --------------------------------------------------------- --------
                  • Unit - Move (Picked unit) instantly to FW_KB_LocationII
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Random real number between 1.00 and 10.00) Less than or equal to 3.33
                    • Then - Actions
                      • -------- *** --------
                      • -------- --------------------------------------------------------- --------
                      • -------- Creating a nice special effect --------
                      • -------- --------------------------------------------------------- --------
                      • Special Effect - Create a special effect attached to the origin of (Picked unit) using Abilities\Weapons\ZigguratFrostMissile\ZigguratFrostMissile.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • -------- *** --------
                    • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • ((Picked unit) has buff Slowed) Equal to True
                    • Then - Actions
                    • Else - Actions
                      • -------- --------------------------------------------------------- --------
                      • -------- Creating a dummy and ordering it to cast frost nova --------
                      • -------- --------------------------------------------------------- --------
                      • Unit - Create 1 Dummy for FW_Owner at FW_KB_LocationI facing Default building facing degrees
                      • Unit - Add a 1.50 second Generic expiration timer to (Last created unit)
                      • Unit - Add FW_Dummy_Ability to (Last created unit)
                      • Unit - Set level of FW_Dummy_Ability for (Last created unit) to FW_Ability_Level
                      • Unit - Order (Last created unit) to Undead Lich - Frost Nova (Picked unit)
                  • Hashtable - Save (FW_KB_Distance - FW_KB_Speed) as (Key distance) of (Key (Picked unit)) in FW_Table
                  • -------- --------------------------------------------------------- --------
                  • -------- Clearing leaks --------
                  • -------- --------------------------------------------------------- --------
                  • Custom script: call RemoveLocation(udg_FW_KB_LocationI)
                  • Custom script: call RemoveLocation(udg_FW_KB_LocationII)
            • Else - Actions
              • -------- --------------------------------------------------------- --------
              • -------- Ending spell --------
              • -------- --------------------------------------------------------- --------
              • Unit - Turn collision for (Picked unit) On
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in FW_Table
              • Unit Group - Remove (Picked unit) from FW_KB_Group
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Number of units in FW_KB_Group) Equal to 0
                • Then - Actions
                  • Trigger - Turn off Frost Wrath KB <gen>
                • Else - Actions
Updates:
v1.1a:
-fixed a hotkey

Well it's a spell made for challenge between me and calex3.

Credits:
JetfangInferno for his http://www.hiveworkshop.com/forums/models-530/wispexplode-52821/?prev=search%3Dwisp%2520explode%26d%3Dlist%26r%3D20 model
icon is made by me http://www.hiveworkshop.com/forums/icons-541/btnfrostspell-154144/?prev=u%3D-BerZeKeR-

Give credits to JetFangInferno and me if you use this spell on your map.

*sorry for the imported material, but you can always cut it out

Keywords:
frost, wrath, ice, explosion, nova, slow, winter, knock, back, aoe
Contents

Frost Wrath (Map)

Reviews
11:21, 4th Jan 2010 TriggerHappy: As maker said hashtables would be way slower than reading from a global, so for your constant values just use a global. Otherwise this spell is approvable.

Moderator

M

Moderator

11:21, 4th Jan 2010
TriggerHappy:

As maker said hashtables would be way slower than reading from a global, so for your constant values just use a global. Otherwise this spell is approvable.
 
Level 17
Joined
Mar 2, 2009
Messages
332
I like it.... It is useful for my map I'm making :D .....
(I am making map where you ahve hero with 20 hp and with "lucky" spells which deal 2-5 damage....Like meat hook so i neeed small and crazy cool things like this one :D)
And eyecandy is not bad at all we all love your spell
 
Level 37
Joined
Mar 6, 2006
Messages
9,240
I'd separate these from the casting trigger, and create an initilization trigger for the constant values. Though the performance gain is very small, it's still there :)

You save/load FW_KB_Speed to hashtable though it's a global constant, it does not get modified. It would be slightly faster to just use the variable instead of loading it from hashtable.

The hotkey is wrong.

I like the spell overall, well done.
 
Level 37
Joined
Mar 5, 2008
Messages
3,887
Fixed the hothey (learn was actually correct :p)
Well I wont stick those values to init trigger since someone could get confused when importing. Speed is saved/loaded because if someone would desire to increase/decrease KB speed per level (so it would no longer be a constant).

Thanks for your comment, and for a few pointers ;)
 
Last edited:
Level 3
Joined
Jan 2, 2010
Messages
34
Hi BerZ
I have a problem...
First trigger is saving FW_KB_Distance as 110/180 but second load it as 0
and when it's 0 then knockback and slow don't work
can u help me with that?
 
Level 3
Joined
Jan 2, 2010
Messages
34
I know what you mean but... it's saves KB_Distance for enemies at AoE and turn on second trigger... when second trigger starts it's do nothing because at first KB_Distance = 0 but it should be 180 or 110
i can't explain it :p
 
Level 3
Joined
Jan 2, 2010
Messages
34
nooo... it's automaticly setting to 0 ;/ maybe save and load hashtables don't work corectly... it's saves as 180/110 and load as 0... it's must by hashtables bug
 
Level 3
Joined
Jan 2, 2010
Messages
34
I did like you said but that still didn't work so i tried a lot of things and nothing ;/
I'm bored :(
Is there a simple way to do knockback without hashtables?
A simple without cuting tree
For example: every 0.03s move unit to point, change point
 
Level 3
Joined
Jan 23, 2008
Messages
37
I guess non has seen what happens if the spell is cast on unwalkable terrain. If one casts that spell on terrain where units can not pass then the effect appears somewhere else, but near. I guess it is not such a problematic bug, since the units in initial AoE are affected and not those where effect spawns. It is just to mention, not to criticize :)
 
Level 37
Joined
Mar 6, 2006
Messages
9,240
  • You should separate the hashtable creation from the Initialization trigger. Create own initialization trigger for the spell
  • You should set constants in this init trigger, not during every cast
  • You only need 3 location variables for the ability, not 5
  • You could use this block in the cast trigger
    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
      • If - Conditions
        • FW_KnockBack_On Equal to True
        • (Number of units in FW_Damage_Group) Greater than 0
      • Then - Actions
        • Trigger - Turn on Frost Wrath KB <gen>
      • Else - Actions
  • Use proper tree detection method -> link
    ^There might be some ability that destroys only trees...
  • In the beginning of the looping trigger you load values that you might not need, if the flow goes to the else
  • You have RemoveLocations twice in the looping trigger, only have them once
  • Remove invulnerability ability from the dummies, the have Locust which makes them invulnerable
  • You could set the dummy's Art - Animation - Cast point to 0 so it casts abilities instantly, and not with a 0.3 second delay
  • Art - Death Time could be lowered from 3.04 seconds so the dummies are removed earlier
 
Top