• 🏆 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!

Spells in Hashtables v0.01

Spells in Hashtables v0.01
Made by G00dG4m3

These are spells created by me. All spells can be found released seperately in THW, just search spell by its name in THW.
I was thinking to collect all my spells into one spellpack long ago, but decided to do it just now, because I had better jobs to do.

This spell pack will be updated once another spell is realeased seperately by me.

I hope you will enjoy this. Give me credits if you use anything.

Currently contains Ball Lightning, Double Tide, Eternal Winter, Glass Cannon, Incinerate, Mprohing Ray, Sinister Blast, Shockwave, Heroic Leap, Heroic Leap vAoE.



  • Ball Lightning Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Ball Lightning
    • Actions
      • -------- Stores Caster and Target into variables --------
      • -------- NOTE 1: From now on, I will call 'Caster and Target' Duo. --------
      • Set Caster = (Triggering unit)
      • Set Target = (Target unit of ability being cast)
      • -------- Finds the Locations of the Duo --------
      • Set Points[1] = (Position of Caster)
      • Set Points[2] = (Position of (Target unit of ability being cast))
      • -------- Stores total bounces into variable --------
      • -------- NOTE 2: This is a number of total targets to hit. Set your max targets here --------
      • Set Integer[1] = 6
      • -------- Stores the base speed of the Caster --------
      • -------- NOTE 3: Change your base speed here --------
      • -------- My base speed is 15/0.03=500 units per second --------
      • Set Real[1] = 15.00
      • -------- Counts up the damage dealt to the first target --------
      • -------- NOTE 4: Count and set your damage here --------
      • Set Real[2] = (30.00 + (40.00 x (Real((Level of Ball Lightning for Caster)))))
      • -------- Finds X, Y and Z of the caster's position for lightning effect purposes --------
      • Set Real[3] = (X of Points[1])
      • Set Real[4] = (Y of Points[1])
      • Custom script: set udg_Real[5] = GetLocationZ(udg_Points[1])
      • -------- Hides caster, as we will replace it with ROFLing dummy unit --------
      • Unit - Hide Caster
      • -------- Plays SFX to mark that the spell is succesfuly cast --------
      • -------- It is also instantly destroyed to fix the leak --------
      • Special Effect - Create a special effect at Points[1] using Abilities\Weapons\Bolt\BoltImpact.mdl
      • Special Effect - Destroy (Last created special effect)
      • -------- Creates a ROFLing dummy unit to replace the caster --------
      • -------- NOTE 5: Change your replacement's model in the Object editor, unit ROFLing dummy --------
      • Unit - Create 1 Dummy ROFLer for (Owner of Caster) at Points[1] facing (Angle from Points[1] to Points[2]) degrees
      • -------- Stores all the information needed into hashtable --------
      • -------- NOTE 6: All the information is attached to the ROFLing dummy unit --------
      • Hashtable - Save Handle OfTarget as 0 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Handle OfCaster as 1 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[1] as 2 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[2] as 3 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[3] as 4 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[4] as 5 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[5] as 6 of (Key (Last created unit)) in Hashtable
      • -------- NOTE 7: I create lightning effect here, so change it here --------
      • -------- NOTE 8: It isn't really important where do I create the Lightning effect, until it is created between Points[1] finding and saving it into hashtable --------
      • Lightning - Create a Forked Lightning lightning effect from source Points[1] to target Points[1]
      • Hashtable - Save Handle Of(Last created lightning effect) as 7 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Integer[1] as 8 of (Key (Last created unit)) in Hashtable
      • -------- Checks if there is any instance of spell already in game --------
      • -------- If not, then turns the Sliding trigger on --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Lightnings is empty) Equal to True
        • Then - Actions
          • Trigger - Turn on Ball Lightning Slide <gen>
        • Else - Actions
      • -------- Adds ROFLing dummy unit to the Dummies' group --------
      • Unit Group - Add (Last created unit) to Lightnings
      • -------- Clears the Leaks --------
      • Custom script: call RemoveLocation(udg_Points[1])
      • Custom script: call RemoveLocation(udg_Points[2])
  • Ball Lightning Slide
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Lightnings and do (Actions)
        • Loop - Actions
          • -------- Stores the Duo into their variables --------
          • Set Target = (Load 0 of (Key (Picked unit)) in Hashtable)
          • Set Caster = (Load 1 of (Key (Picked unit)) in Hashtable)
          • -------- Finds locations of the Duo and the point to which the ROFLing dummy will be moved --------
          • Set Points[1] = (Position of (Picked unit))
          • Set Points[2] = (Position of Target)
          • Set Points[3] = (Points[1] offset by Real[1] towards (Angle from Points[1] to Points[2]) degrees)
          • -------- Loads movement speed, damage and the start location of the Lightning --------
          • Set Real[1] = (Load 2 of (Key (Picked unit)) from Hashtable)
          • Set Real[2] = (Load 3 of (Key (Picked unit)) from Hashtable)
          • Set Real[3] = (Load 4 of (Key (Picked unit)) from Hashtable)
          • Set Real[4] = (Load 5 of (Key (Picked unit)) from Hashtable)
          • Set Real[5] = (Load 6 of (Key (Picked unit)) from Hashtable)
          • -------- Counts the height at which the Lightning effect's 'head' will be risen --------
          • Custom script: set udg_Real[6] = GetLocationZ(udg_Points[1]) + 40.00
          • -------- Loads the Lightning effect --------
          • Set Lightning = (Load 7 of (Key (Picked unit)) in Hashtable)
          • -------- Checks if it isn't time to hit the current target --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Distance between Points[1] and Points[2]) Greater than or equal to 100.00
            • Then - Actions
              • -------- If it isn't, then... --------
              • -------- Moves ROFLing dummy unit to the Third Point --------
              • Unit - Move (Picked unit) instantly to Points[3], facing (Angle from Points[1] to Points[2]) degrees
              • -------- Moves lightning --------
              • Custom script: call MoveLightningEx(udg_Lightning, true, udg_Real[3], udg_Real[4], udg_Real[5], GetLocationX(udg_Points[1]), GetLocationY(udg_Points[1]), udg_Real[6])
            • Else - Actions
              • -------- If it is, then... --------
              • -------- Creates a floating text to show the damage dealt by this bounce --------
              • Floating Text - Create floating text that reads (String((Integer(Real[2])))) at Points[1] with Z offset 0.00, using font size 10.00, color (100.00%, 100.00%, 100.00%), and 0.00% transparency
              • Floating Text - Change (Last created floating text): Disable permanence
              • Floating Text - Change the lifespan of (Last created floating text) to 2.00 seconds
              • Floating Text - Set the velocity of (Last created floating text) to 64.00 towards 90.00 degrees
              • -------- Causes Caster to damage Current Target --------
              • Unit - Cause Caster to damage Target, dealing Real[2] damage of attack type Spells and damage type Normal
              • -------- Creates the Impact SFX on target --------
              • -------- NOTE 1: Change your impact SFX here --------
              • Special Effect - Create a special effect attached to the origin of Target using Abilities\Weapons\Bolt\BoltImpact.mdl
              • Special Effect - Destroy (Last created special effect)
              • -------- Loads and reduces by 1 bounces-to-do --------
              • Set Integer[1] = (Load 8 of (Key (Picked unit)) from Hashtable)
              • Set Integer[1] = (Integer[1] - 1)
              • -------- Checks if it was bounce --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Integer[1] Greater than 0
                • Then - Actions
                  • -------- If not, then... --------
                  • -------- Enumerates all possible targets --------
                  • -------- NOTE 2: Enumerates organic, not magic immune live units, that belong to enemies of Caster and are visible to the owner of Caster --------
                  • Set Enemies = (Units within 500.00 of Points[1] matching (((((Matching unit) is A structure) Not equal to True) and ((Matching unit) Not equal to Target)) and ((((Matching unit) is Mechanical) Not equal to True) and ((((Matching unit) is Magic Immune) Not equal to True) an
                  • -------- Checks if there is at least one possible target --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Enemies is empty) Not equal to True
                    • Then - Actions
                      • -------- If there is, then... --------
                      • -------- Increases the speed of the ROFLing dummy unit --------
                      • -------- NOTE 3: Change your speed increasement here --------
                      • -------- My speed boost is 6/0.03=200 units per second of speed --------
                      • Set Real[1] = (Real[1] + 6.00)
                      • -------- Boosts the damage that will be dealt to the next target --------
                      • -------- NOTE 4: Change your damage boost here --------
                      • Set Real[2] = (Real[2] + (Real[2] x 0.22))
                      • -------- Finds the X, Y and Z of the Points[1], for Lightning effect purposes --------
                      • Set Real[3] = (X of Points[1])
                      • Set Real[4] = (Y of Points[1])
                      • Custom script: set udg_Real[5] = GetLocationZ(udg_Points[1])
                      • -------- Destroys current lightning effect --------
                      • Lightning - Destroy Lightning
                      • -------- Creates a new lightning effect --------
                      • -------- NOTE 5: This effect must of equal type as was your lightning in the cast trigger --------
                      • Lightning - Create a Forked Lightning lightning effect from source Points[1] to target Points[1]
                      • -------- Chooses a random unit from enemies' group --------
                      • Unit Group - Pick every unit in (Random 1 units from Enemies) and do (Set Target = (Picked unit))
                      • -------- Updates the next target, lightning's speed, damage, the 'tail' point and bounces-to-do --------
                      • Hashtable - Save Handle OfTarget as 0 of (Key (Picked unit)) in Hashtable
                      • Hashtable - Save Real[1] as 2 of (Key (Picked unit)) in Hashtable
                      • Hashtable - Save Real[2] as 3 of (Key (Picked unit)) in Hashtable
                      • Hashtable - Save Real[3] as 4 of (Key (Picked unit)) in Hashtable
                      • Hashtable - Save Real[4] as 5 of (Key (Picked unit)) in Hashtable
                      • Hashtable - Save Real[5] as 6 of (Key (Picked unit)) in Hashtable
                      • Hashtable - Save Handle Of(Last created lightning effect) as 7 of (Key (Picked unit)) in Hashtable
                      • Hashtable - Save Integer[1] as 8 of (Key (Picked unit)) in Hashtable
                    • Else - Actions
                      • -------- If there isn't then... --------
                      • -------- Destroys lightning effect --------
                      • Lightning - Destroy Lightning
                      • -------- Moves caster to the Current position of the ROFLing dummy --------
                      • Unit - Move Caster instantly to Points[1], facing (Angle from Points[1] to Points[2]) degrees
                      • -------- Unhides the Caster, as we will replace the ROFLing dummy with the Caster --------
                      • Unit - Unhide Caster
                      • -------- Adds Caster to its owner's selection --------
                      • Selection - Add Caster to selection for (Owner of Caster)
                      • -------- Makes Caster invulnerable, solely for Spawn guarding purposes --------
                      • Hero - Create Invulnerability and give it to Caster
                      • -------- Clears the Hashtable --------
                      • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
                      • -------- Removes the ROFLing dummy unit form ROFLers' group --------
                      • Unit Group - Remove (Picked unit) from Lightnings
                      • -------- Removes ROFLing dummy unit from game, finishing the replacement --------
                      • Unit - Remove (Picked unit) from the game
                  • -------- Clears the group leak --------
                  • Custom script: call DestroyGroup(udg_Enemies)
                • Else - Actions
                  • -------- If it was, then... --------
                  • -------- Destroys lightning effect --------
                  • Lightning - Destroy Lightning
                  • -------- Moves caster to the Current position of the ROFLing dummy --------
                  • Unit - Move Caster instantly to Points[1], facing (Angle from Points[1] to Points[2]) degrees
                  • -------- Unhides the Caster, as we will replace the ROFLing dummy with the Caster --------
                  • Unit - Unhide Caster
                  • -------- Adds Caster to its owner's selection --------
                  • Selection - Add Caster to selection for (Owner of Caster)
                  • -------- Makes Caster invulnerable, solely for Spawn guarding purposes --------
                  • Hero - Create Invulnerability and give it to Caster
                  • -------- Clears the Hashtable --------
                  • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
                  • -------- Removes the ROFLing dummy unit form ROFLers' group --------
                  • Unit Group - Remove (Picked unit) from Lightnings
                  • -------- Removes ROFLing dummy unit from game, finishing the replacement --------
                  • Unit - Remove (Picked unit) from the game
          • -------- Clears the Leaks --------
          • Custom script: call RemoveLocation(udg_Points[1])
          • Custom script: call RemoveLocation(udg_Points[2])
          • Custom script: call RemoveLocation(udg_Points[3])
      • -------- Checks if there is any instance of spell left after this loop --------
      • -------- If not, then turns this trigger off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Lightnings is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions


  • Double Tide Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Double Tide
    • Actions
      • -------- Stores Caster into Variable --------
      • Set Caster = (Triggering unit)
      • -------- Finds the Locations of the Caster --------
      • Set Points[1] = (Position of Caster)
      • -------- Finds an available target point, which would be not out side the map --------
      • Set Points[2] = (Target point of ability being cast)
      • -------- Stores the Range between Caster's location and target point --------
      • -------- Note 1: You will move to the position of last created item to avoid the pathing problem --------
      • Set Real[1] = (Distance between Points[1] and Points[2])
      • -------- Saves the range of the arcing wave into variable --------
      • -------- Note 2: It will be used in Slide trigger, boosting or increasing it to make an Arcing wave --------
      • Set Real[2] = 100.00
      • -------- Saves the Angle in which generally waves will move --------
      • Set Real[3] = (Angle from Points[1] to Points[2])
      • -------- Stores Damage to deal with waves --------
      • Set Real[4] = (100.00 + (50.00 x (Real((Level of Double Tide for Caster)))))
      • -------- 'Hides' the Caster to make an illiusion it has splitted --------
      • Animation - Change Caster's vertex coloring to (0.00%, 0.00%, 0.00%) with 100.00% transparency
      • Animation - Change Caster's size to (1.00%, 1.00%, 1.00%) of its original size
      • -------- Turns collision off for Caster --------
      • Unit - Turn collision for Caster Off
      • -------- Stores the range to slide --------
      • Hashtable - Save Real[1] as 0 of (Key (Triggering unit)) in Hashtable
      • -------- Stores the Arcing range --------
      • Hashtable - Save Real[2] as 1 of (Key (Triggering unit)) in Hashtable
      • -------- Stores the Angle to slide to --------
      • Hashtable - Save Real[3] as 2 of (Key (Triggering unit)) in Hashtable
      • -------- Stores damage to deal --------
      • Hashtable - Save Real[4] as 3 of (Key (Triggering unit)) in Hashtable
      • -------- Stores the range at which waves would start going towards each other --------
      • Hashtable - Save (Real[1] / 2.00) as 4 of (Key (Triggering unit)) in Hashtable
      • -------- Note 3: Notice that all the information was attached to the Caster --------
      • -------- Checks if there is any instance of spell already in effect --------
      • -------- If not, turns the sliding trigger on --------
      • If ((Tides is empty) Equal to True) then do (Trigger - Turn on Double Tide Slide <gen>) else do (Do nothing)
      • -------- Adds the Caster into the Casters' group --------
      • Unit Group - Add Caster to Tides
      • -------- Clears the leaks --------
      • Custom script: call RemoveLocation(udg_Points[1])
      • Custom script: call RemoveLocation(udg_Points[2])
  • Double Tide Slide
    • Events
      • Time - Every 0.04 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Tides and do (Actions)
        • Loop - Actions
          • -------- Stores the Caster into a variable --------
          • Set Caster = (Picked unit)
          • -------- Loads the range to slide and reduces it by Speed --------
          • -------- Note 1: this reducement number has to be equal with the one in the setting Points[4] in the If/then/else part --------
          • Set Real[1] = (Load 0 of (Key (Picked unit)) from Hashtable)
          • Set Real[1] = (Real[1] - 56.00)
          • -------- Loads the range of turning-point --------
          • Set Real[2] = (Load 4 of (Key (Picked unit)) from Hashtable)
          • -------- Loads the range at which the SFX will be played --------
          • Set Real[3] = (Load 1 of (Key (Picked unit)) from Hashtable)
          • -------- If range-to-slide left is greater than the one of the turning-point, then increases the the Arcing range --------
          • -------- Else reduces it by equal amount --------
          • If (Real[1] Greater than or equal to Real[2]) then do (Set Real[3] = (Real[3] + 16.00)) else do (Set Real[3] = (Real[3] - 16.00))
          • -------- Loads the angle to slide to --------
          • Set Real[4] = (Load 2 of (Key (Picked unit)) from Hashtable)
          • -------- Loads the damage to deal if waves collide any enemy --------
          • Set Real[5] = (Load 3 of (Key (Picked unit)) from Hashtable)
          • -------- Finds the location of the Caster --------
          • Set Points[1] = (Position of Caster)
          • -------- Counts up the locations at which the SFX will be played and which will be the center of enemies checking --------
          • Set Points[2] = (Points[1] offset by Real[3] towards (Real[4] - 90.00) degrees)
          • Set Points[3] = (Points[1] offset by Real[3] towards (Real[4] + 90.00) degrees)
          • -------- Prepares the Integer variable for first wave --------
          • Set Integer[1] = 2
          • For each (Integer A) from 1 to 2, do (Actions)
            • Loop - Actions
              • -------- Plays the SFX and instantly destroys it --------
              • Special Effect - Create a special effect at Points[Integer[1]] using Objects\Spawnmodels\Naga\NagaDeath\NagaDeath.mdl
              • Special Effect - Destroy (Last created special effect)
              • -------- Finds all enemies which would be 'colliding' the wave (of Points[Integer]) --------
              • -------- Note 2: it enumerates all enemy ground units, which are not structures, nor mechanicals, neither magic immune, which are alive and visible to the caster --------
              • -------- Note 3: Doesn't enumerate ones who already have the Slow buff --------
              • Set Enemies = (Units within 100.00 of Points[Integer[1]] matching (((((Matching unit) is A structure) Not equal to True) and (((Matching unit) has buff Double Tide ) Not equal to True)) and ((((Matching unit) is Mechanical) Not equal to True) and ((((Matching unit) is
              • -------- Does the slowing and damaging --------
              • Unit Group - Pick every unit in Enemies and do (Actions)
                • Loop - Actions
                  • Unit - Create 1 Dummy Caster for (Owner of Caster) at Points[2] facing Default building facing degrees
                  • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
                  • Unit - Add Double Tide Slow to (Last created unit)
                  • Unit - Order (Last created unit) to Human Sorceress - Slow (Picked unit)
                  • Unit - Cause Caster to damage (Picked unit), dealing Real[5] damage of attack type Spells and damage type Normal
                  • Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Spells\Other\CrushingWave\CrushingWaveDamage.mdl
                  • Special Effect - Destroy (Last created special effect)
              • -------- Destroys the Enemies' group --------
              • Custom script: call DestroyGroup(udg_Enemies)
              • -------- Increases the Integer for Next wave --------
              • Set Integer[1] = (Integer[1] + 1)
          • -------- The If/Then/Else part --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Real[1] Greater than or equal to 0.00
            • Then - Actions
              • -------- If the range-to-slide is not 0 or less, then... --------
              • -------- Finds the Location to which the Caster will be moved --------
              • Set Points[4] = (Points[1] offset by 56.00 towards Real[4] degrees)
              • -------- Moves Caster into Points[4], if that point is walkable --------
              • If ((Terrain pathing at Points[4] of type Walkability is off) Equal to True) then do (Unit - Move Caster instantly to Points[1]) else do (Unit - Move Caster instantly to Points[4])
              • -------- Updates the range-to-slide left and the Arcing range --------
              • Hashtable - Save Real[1] as 0 of (Key (Picked unit)) in Hashtable
              • Hashtable - Save Real[3] as 1 of (Key (Picked unit)) in Hashtable
              • -------- Clears the leak of last created point --------
              • Custom script: call RemoveLocation(udg_Points[4])
            • Else - Actions
              • -------- Clears the Hashtable --------
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
              • -------- 'Unhides' the Caster --------
              • Animation - Change Caster's vertex coloring to (100.00%, 100.00%, 100.00%) with 0.00% transparency
              • Animation - Change Caster's size to (100.00%, 100.00%, 100.00%) of its original size
              • -------- Turns collision on for Caster --------
              • Unit - Turn collision for Caster On
              • -------- Removes the Caster from the Casters' group --------
              • Unit Group - Remove (Picked unit) from Tides
          • -------- Clears the leaks --------
          • Custom script: call RemoveLocation(udg_Points[1])
          • Custom script: call RemoveLocation(udg_Points[2])
          • Custom script: call RemoveLocation(udg_Points[3])
      • -------- Checks if there is any instance of spell in effect after loop --------
      • -------- If not, turns this trigger of --------
      • If ((Tides is empty) Equal to True) then do (Trigger - Turn off (This trigger)) else do (Do nothing)


  • Eternal Winter Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Eternal Winter
    • Actions
      • -------- Stores Caster and Target into variables --------
      • -------- NOTE 1: From now on, 'Caster and Target' will be changed into 'The Duo' --------
      • Set Caster = (Triggering unit)
      • Set Target = (Target unit of ability being cast)
      • -------- Finds locations of the Duo --------
      • Set Points[1] = (Position of Caster)
      • Set Points[2] = (Position of Target)
      • -------- Counts the Spawn point of the Sphere --------
      • Set Points[3] = (Points[1] offset by 70.00 towards (Angle from Points[1] to Points[2]) degrees)
      • -------- Counts the Blast damage --------
      • -------- NOTE 2: Set your blast damage here. This will be equally split among the bolts that will be spawned after impact --------
      • Set Real[1] = (300.00 + (100.00 x (Real((Level of Eternal Winter for Caster)))))
      • -------- Counts impact damage --------
      • -------- NOTE 3: Change your Impact damage here --------
      • Set Real[2] = (100.00 + (100.00 x (Real((Level of Eternal Winter for Caster)))))
      • -------- Here be your number of bolts --------
      • Set Integer[1] = 5
      • -------- Splits the damage to the Impact Bolts, making this spell not to one-shot everyone --------
      • Set Real[1] = (Real[1] / (Real(Integer[1])))
      • -------- Creates a Sphere projectile unit --------
      • -------- NOTE 4: From now on, by saying 'Sphere unit', I'll mean the Sphere Projectile unit --------
      • Unit - Create 1 Sphere for (Owner of Caster) at Points[3] facing (Angle from Points[1] to Points[2]) degrees
      • -------- Stores all information into variable --------
      • -------- NOTE 5: All information is attached to the Sphere unit --------
      • Hashtable - Save Handle OfCaster as 0 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Handle OfTarget as 1 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[1] as 2 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[2] as 3 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Integer[1] as 4 of (Key (Last created unit)) in Hashtable
      • -------- Checks if there is any instance of spell already in effect of the Sphere sliding trigger --------
      • -------- If not, then turns the Sphere sliding trigger on --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Spheres is empty) Equal to True
        • Then - Actions
          • Trigger - Turn on Eternal Winter Sphere <gen>
        • Else - Actions
      • -------- Adds Sphere unit to Spheres' group --------
      • Unit Group - Add (Last created unit) to Spheres
      • -------- Clears the leaks --------
      • Custom script: call RemoveLocation(udg_Points[1])
      • Custom script: call RemoveLocation(udg_Points[2])
      • Custom script: call RemoveLocation(udg_Points[3])
  • Eternal Winter Sphere
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Spheres and do (Actions)
        • Loop - Actions
          • -------- Loads the Duo --------
          • Set Caster = (Load 0 of (Key (Picked unit)) in Hashtable)
          • Set Target = (Load 1 of (Key (Picked unit)) in Hashtable)
          • -------- Finds locations of Target and Sphere unit --------
          • Set Points[1] = (Position of (Picked unit))
          • Set Points[2] = (Position of Target)
          • -------- Counts the Point to which the Sphere unit will be moved if possible --------
          • -------- NOTE 1: Here change your projectile unit's speed. My speed is 8/0.03=267 units per second --------
          • Set Points[3] = (Points[1] offset by 8.00 towards (Angle from Points[1] to Points[2]) degrees)
          • -------- Loads Impact damage and bolts-to-split-to --------
          • Set Real[1] = (Load 3 of (Key (Picked unit)) from Hashtable)
          • Set Integer[1] = (Load 4 of (Key (Picked unit)) from Hashtable)
          • -------- Checks if it is time for Sphere unit to 'hit' Target --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Distance between Points[1] and Points[2]) Greater than or equal to 100.00
            • Then - Actions
              • -------- If not, then... --------
              • -------- Moves Sphere unit to the Counted point --------
              • Unit - Move (Picked unit) instantly to Points[3], facing (Angle from Points[1] to Points[2]) degrees
            • Else - Actions
              • -------- If it is, then... --------
              • -------- Freezes the Target --------
              • -------- NOTE 2: Set the duration of the Freeze in Object Editor, spell Freeze --------
              • -------- NOTE 3: I was quite lazy, so I used same duration for both impact and blast freezes --------
              • Unit - Create 1 Dummy Caster for (Owner of Caster) at Points[3] facing Default building facing degrees
              • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
              • Unit - Add Freeze to (Last created unit)
              • Unit - Order (Last created unit) to Orc Raider - Ensnare Target
              • -------- Causes caster to damage target, dealing impact damage --------
              • Unit - Cause Caster to damage Target, dealing Real[1] damage of attack type Spells and damage type Normal
              • -------- Counts the difference angle between the Bolt units --------
              • Set Real[1] = (360.00 / (Real(Integer[1])))
              • -------- Sets the base angle of the Bolt's spawn --------
              • Set Real[2] = 0.00
              • -------- Loads the Blast damage, as it will be attached to Bolts --------
              • Set Real[3] = (Load 2 of (Key (Picked unit)) from Hashtable)
              • -------- A loop, which creates bolts. Loops the times, you set the Bolts-to-split-to --------
              • For each (Integer A) from 1 to Integer[1], do (Actions)
                • Loop - Actions
                  • -------- Counts the Bolt Spawn point --------
                  • Set Points[4] = (Points[2] offset by 100.00 towards Real[2] degrees)
                  • -------- Creates a Spawn SFX at the counted point and instantly destroys it, fixing the leak --------
                  • -------- NOTE 4: Change your spawn SFX here. You don't want a fire spell with Icy explosions, do you? --------
                  • Special Effect - Create a special effect at Points[4] using Abilities\Spells\Undead\FrostNova\FrostNovaTarget.mdl
                  • Special Effect - Destroy (Last created special effect)
                  • -------- Creates a bolt unit --------
                  • -------- NOTE 5: From now on, by saying 'Bolt unit' I'll refer to this bolt unit individually --------
                  • -------- NOTE 6: Change your bolt unit's model in Object Editor, unit named Bolt --------
                  • Unit - Create 1 Winter Bolt for (Owner of Caster) at Points[1] facing Default building facing degrees
                  • -------- Adds to and instantly removes from Bolt unit Storm Crow Form spell, allowing us to manipulate the Flying height of it --------
                  • Unit - Add Storm Crow Form to (Last created unit)
                  • Unit - Remove Storm Crow Form from (Last created unit)
                  • -------- Stores the information to the Hashtable --------
                  • -------- NOTE 5: All information is attached to the Bolt unit --------
                  • Hashtable - Save Handle OfCaster as 0 of (Key (Last created unit)) in Hashtable
                  • Hashtable - Save Handle OfTarget as 1 of (Key (Last created unit)) in Hashtable
                  • Hashtable - Save Real[3] as 2 of (Key (Last created unit)) in Hashtable
                  • Hashtable - Save Real[2] as 3 of (Key (Last created unit)) in Hashtable
                  • -------- NOTE 6: This 0.00 stored into hashtable is the Base distance from Target to bolt. It is used to see if it is time to land the bolt or start returning --------
                  • Hashtable - Save 0.00 as 4 of (Key (Last created unit)) in Hashtable
                  • -------- Checks if there is any bolt unit already in game --------
                  • -------- If not, then Turns the Bolt Fleeing trigger on --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (FleeingBolts is empty) Equal to True
                    • Then - Actions
                      • Trigger - Turn on Eternal Bolt Flee <gen>
                    • Else - Actions
                  • -------- Adds Bolt unit to Fleeing Bolts' group --------
                  • Unit Group - Add (Last created unit) to FleeingBolts
                  • -------- Updates the Angle at which next bolt will be spawned --------
                  • Set Real[2] = (Real[2] + Real[1])
                  • -------- Clears a leak created at the beggining of the loop --------
                  • Custom script: call RemoveLocation(udg_Points[4])
              • -------- Rids hashtable off of information attached to the Sphere unit --------
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
              • -------- Removes Sphere unit from the Spheres' group --------
              • Unit Group - Remove (Picked unit) from FleeingBolts
              • -------- Removes Sphere unit from game --------
              • Unit - Remove (Picked unit) from the game
          • -------- Clears the leaks --------
          • Custom script: call RemoveLocation(udg_Points[1])
          • Custom script: call RemoveLocation(udg_Points[2])
          • Custom script: call RemoveLocation(udg_Points[3])
      • -------- Checks if there is any sphere left after this loop --------
      • -------- If not, then turns this trigger off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Spheres is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
  • Eternal Bolt Flee
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in FleeingBolts and do (Actions)
        • Loop - Actions
          • -------- Loads the Target --------
          • -------- NOTE 1: It will be used to determine the center of the Fleeing/Returning bolts' circle. Where moves he, there moves the center --------
          • Set Target = (Load 1 of (Key (Last created unit)) in Hashtable)
          • -------- Loads the angle from Target to Bolt and increases it, making Bolt unit spin --------
          • -------- NOTE 2: If you want your bolt spin Clockwise, substract instead of adding --------
          • Set Real[1] = (Load 3 of (Key (Picked unit)) from Hashtable)
          • Set Real[1] = (Real[1] + 2.50)
          • -------- Loads the Distance from Target to Bolt, making bolt 'Flee' from it --------
          • Set Real[2] = (Load 4 of (Key (Picked unit)) from Hashtable)
          • -------- NOTE 3: The number added to the Distance is speed of the Fleeing Bolt. My speed is 6/0.03=200 units per second --------
          • Set Real[2] = (Real[2] + 6.00)
          • -------- Finds location of Target --------
          • Set Points[1] = (Position of Target)
          • -------- Counts the point to which Bolt unit will be moved --------
          • Set Points[2] = (Points[1] offset by Real[2] towards Real[1] degrees)
          • -------- Moves Bolt unit to the Counted point --------
          • Unit - Move (Picked unit) instantly to Points[2], facing Real[1] degrees
          • -------- Checks if the Bolt unit has already passed the half of the fleeing distance (300 for me) --------
          • -------- If it hasn't, sets the Flying Height boost to positive real number, if it has - to equal negative one --------
          • -------- NOTE 4: The real number compared to the Real[2] should be half of the Distance-to-flee below, unless you want the Bolt to bounce in trajectory like this /\ | --------
          • If (Real[2] Less than or equal to 300.00) then do (Set Real[3] = 7.00) else do (Set Real[3] = -7.00)
          • -------- Modifies flying height of Bolt unit, making it bounce --------
          • Animation - Change (Picked unit) flying height to ((Current flying height of (Picked unit)) + Real[3]) at 0.00
          • -------- Updates the Angle and Distance from Target to Bolt unit --------
          • Hashtable - Save Real[1] as 3 of (Key (Picked unit)) in Hashtable
          • Hashtable - Save Real[2] as 4 of (Key (Picked unit)) in Hashtable
          • -------- Checks if it time for Bolt unit to start to return to the Target --------
          • -------- NOTE 5: In condition, set the Distance at which bolt shall start to return --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Real[2] Greater than or equal to 600.00
            • Then - Actions
              • -------- Restores the Flying height of the Bolt unit to it's default --------
              • Animation - Change (Picked unit) flying height to (Default flying height of (Picked unit)) at 0.00
              • -------- Creates a SFX, marking that Bolt unit shall start returning to the Target --------
              • -------- NOTE 6: Change your SFX here, you don't want a Fire spell with Icy explosions, do you? --------
              • Special Effect - Create a special effect at Points[2] using Abilities\Spells\Undead\FrostNova\FrostNovaTarget.mdl
              • Special Effect - Destroy (Last created special effect)
              • -------- Removes Bolt unit from Fleeing Bolts' Group --------
              • Unit Group - Remove (Picked unit) from FleeingBolts
              • -------- Checks if there is any Returning Bolt in game --------
              • -------- If not, then turns Returning Trigger on --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (ReturningBolts is empty) Equal to True
                • Then - Actions
                  • Trigger - Turn on Eternal Bolt Return <gen>
                • Else - Actions
              • -------- Adds Bolt unit to Returning Bolts' group, making it return --------
              • Unit Group - Add (Picked unit) to ReturningBolts
            • Else - Actions
          • -------- Clears the Leaks --------
          • Custom script: call RemoveLocation(udg_Points[1])
          • Custom script: call RemoveLocation(udg_Points[2])
      • -------- Checks if there is any Fleeing Bolt left after this loop --------
      • -------- If not, then turns this trigger off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (FleeingBolts is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
  • Eternal Bolt Return
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in ReturningBolts and do (Actions)
        • Loop - Actions
          • -------- Loads the Duo --------
          • Set Caster = (Load 0 of (Key (Picked unit)) in Hashtable)
          • Set Target = (Load 1 of (Key (Picked unit)) in Hashtable)
          • -------- Loads Angle from Target to Bolt and increases it, making Bolt unit spin --------
          • Set Real[1] = (Load 3 of (Key (Picked unit)) from Hashtable)
          • -------- NOTE 1: If you want your bolt spin Clockwise, substract instead of adding --------
          • Set Real[1] = (Real[1] + 5.00)
          • -------- Loads Distance from Target to Bolt, making bolt unit return to Target --------
          • Set Real[2] = (Load 4 of (Key (Picked unit)) from Hashtable)
          • -------- NOTE 2: Don't change this one --------
          • Set Real[2] = (Real[2] - 7.00)
          • -------- Finds position of Target --------
          • Set Points[1] = (Position of Target)
          • -------- Counts the Point to which bolt unit would be moved --------
          • Set Points[2] = (Points[1] offset by Real[2] towards Real[1] degrees)
          • -------- Checks if it is time for Bolt unit to 'hit' Target --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Real[2] Greater than or equal to 0.00
            • Then - Actions
              • -------- If it isn't, then... --------
              • -------- Moves bolt unit to the Counted point --------
              • Unit - Move (Picked unit) instantly to Points[2], facing Real[1] degrees
              • -------- Updates angle and distance from Target to bolt --------
              • Hashtable - Save Real[1] as 3 of (Key (Picked unit)) in Hashtable
              • Hashtable - Save Real[2] as 4 of (Key (Picked unit)) in Hashtable
            • Else - Actions
              • -------- If it is, then... --------
              • -------- Creates a Blast SFX and instantly Destroys it, fixing the leak --------
              • -------- NOTE 3: Change your Blast SFX here --------
              • -------- NOTE 4: Thanks for this awesome Blast SFX to JetFangInferno. --------
              • -------- NOTE 5: I used his, because the Original Frost Nova's SFX is not enough for my eye-candy --------
              • Special Effect - Create a special effect at Points[1] using war3mapImported\FrostBlast.mdx
              • Special Effect - Destroy (Last created special effect)
              • -------- Loads the Blast damage --------
              • Set Real[1] = (Load 2 of (Key (Picked unit)) from Hashtable)
              • -------- Enumerates enemies-to-hit/freeze --------
              • -------- NOTE 6: Hits all live organic enemy units that are near the Target and are not magic immune, so if you die before the Blast and lose the Sight of the Target, blast still will damage Enemies --------
              • Set Enemies = (Units within 600.00 of Points[1] matching ((((Matching unit) is A structure) Not equal to True) and ((((Matching unit) is Mechanical) Not equal to True) and ((((Matching unit) is Magic Immune) Not equal to True) and ((((Matching unit) is dead) Not equal to T
              • -------- Does the Blasting Effect --------
              • Unit Group - Pick every unit in Enemies and do (Actions)
                • Loop - Actions
                  • -------- Freezes Enemies --------
                  • Unit - Create 1 Dummy Caster for (Owner of Caster) at Points[1] facing Default building facing degrees
                  • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
                  • Unit - Add Freeze to (Last created unit)
                  • Unit - Order (Last created unit) to Orc Raider - Ensnare (Picked unit)
                  • -------- Causes caster to damage enemies, dealing Blast damage --------
                  • Unit - Cause Caster to damage (Picked unit), dealing Real[1] damage of attack type Spells and damage type Normal
                  • -------- Creates a blast impact SFX and instantly destroys it, fixing leak --------
                  • -------- NOTE 7: Change your blast impact SFX here. You don't want Fire spell with Icy blasts, do you? --------
                  • Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Weapons\FrostWyrmMissile\FrostWyrmMissile.mdl
                  • Special Effect - Destroy (Last created special effect)
              • -------- Rids hashtable off of Information attached to Bolt unit --------
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
              • -------- Removes Bolt unit from Returning Bolts' Group --------
              • Unit Group - Remove (Picked unit) from ReturningBolts
              • -------- Removes Bolt unit from game --------
              • Unit - Remove (Picked unit) from the game
              • -------- Fixes Group leak --------
              • Custom script: call DestroyGroup(udg_Enemies)
          • -------- Clears the Leaks --------
          • Custom script: call RemoveLocation(udg_Points[1])
          • Custom script: call RemoveLocation(udg_Points[2])
      • -------- Checks if there is any bolt unit left after this loop --------
      • -------- If not, turns this trigger off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (ReturningBolts is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions


  • Glass Cannon Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Glass Cannon
    • Actions
      • -------- Stores Caster and Target into variables --------
      • Set Caster = (Triggering unit)
      • Set Target = (Target unit of ability being cast)
      • -------- Sets the amount of time between it will shoot --------
      • -------- NOTE 1: Change your shooting interval here --------
      • Set Real[1] = 1.00
      • -------- Stores shooting AoE into variable --------
      • -------- NOTE 2: Change your shooting AoE here --------
      • -------- NOTE 3: To make the AoE infinite, just make this number to 9999999999 --------
      • Set Real[2] = 850.00
      • -------- Stores the damage dealt per shot into variable --------
      • -------- NOTE 4: Change your damage per shot here --------
      • Set Real[3] = 75.00
      • -------- Stores maximum shots into variable --------
      • -------- NOTE 5: Change your maximum shots here --------
      • Set Integer[1] = (1 + (Level of Glass Cannon for Caster))
      • -------- Stores all the information into hashtable --------
      • -------- NOTE 6: All the information is attached to Caster --------
      • -------- NOTE 7: Stores the shooting interval twice to make it possible to reset the timer when shot is made --------
      • Hashtable - Save Handle OfTarget as 0 of (Key (Triggering unit)) in Hashtable
      • Hashtable - Save Real[1] as 1 of (Key (Triggering unit)) in Hashtable
      • Hashtable - Save Real[1] as 2 of (Key (Triggering unit)) in Hashtable
      • Hashtable - Save Real[2] as 3 of (Key (Triggering unit)) in Hashtable
      • Hashtable - Save Real[3] as 4 of (Key (Triggering unit)) in Hashtable
      • Hashtable - Save Integer[1] as 5 of (Key (Triggering unit)) in Hashtable
      • -------- Checks if there is any instance of spell already running --------
      • -------- If not, turns the shooting trigger on --------
      • If ((GlassCannons is empty) Equal to True) then do (Trigger - Turn on Glass Cannon Shoot <gen>) else do (Do nothing)
      • -------- Adds caster to Casters' group --------
      • Unit Group - Add Caster to GlassCannons
  • Glass Cannon Shoot
    • Events
      • Time - Every 0.05 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in GlassCannons and do (Actions)
        • Loop - Actions
          • -------- Stores Caster and Target into variables --------
          • Set Caster = (Picked unit)
          • Set Target = (Load 0 of (Key (Picked unit)) in Hashtable)
          • -------- Finds locations of Caster and Target --------
          • Set Points[1] = (Position of Caster)
          • Set Points[2] = (Position of Target)
          • -------- Loads time left until next shot and reduces it by 0.05 (the loop interval of this trigger) --------
          • Set Real[1] = (Load 1 of (Key (Picked unit)) from Hashtable)
          • Set Real[1] = (Real[1] - 0.05)
          • -------- Counts the Distance between Caster and Target --------
          • Set Real[2] = (Distance between Points[1] and Points[2])
          • -------- Loads the shooting AoE to check if Caster and Target are close enough to shoot --------
          • Set Real[3] = (Load 3 of (Key (Picked unit)) from Hashtable)
          • -------- Loads shots left to make --------
          • Set Integer[1] = (Load 5 of (Key (Picked unit)) from Hashtable)
          • -------- If Caster and Target are alive and they are in the shooting range... --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Real[2] Less than or equal to Real[3]
              • (Caster is alive) Equal to True
              • (Target is alive) Equal to True
            • Then - Actions
              • -------- Checks if it is time to shoot --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Real[1] Equal to 0.00
                • Then - Actions
                  • -------- If it is, then... --------
                  • -------- Finds a location where will the bolt will be created --------
                  • Set Points[3] = (Points[1] offset by 70.00 towards (Angle from Points[1] to Points[2]) degrees)
                  • -------- Loads the damage to deal --------
                  • Set Real[4] = (Load 4 of (Key (Picked unit)) from Hashtable)
                  • -------- Creates the Bolt --------
                  • -------- NOTE 1: To change the model of the Bolt, change the model file of the Dummy Bolt unit in Object Editor --------
                  • Unit - Create 1 Cannon Bolt for (Owner of Caster) at Points[3] facing (Angle from Points[1] to Points[2]) degrees
                  • -------- Turns collision off for bolt --------
                  • Unit - Turn collision for (Last created unit) Off
                  • -------- Stores all the information needed into Hashtable --------
                  • -------- NOTE 2: All information is attached to the Dummy Bolt unit --------
                  • Hashtable - Save Handle OfTarget as 0 of (Key (Last created unit)) in Hashtable
                  • Hashtable - Save Handle OfCaster as 1 of (Key (Last created unit)) in Hashtable
                  • Hashtable - Save Real[4] as 2 of (Key (Last created unit)) in Hashtable
                  • -------- Checks if there is any bolt already in effect of the Sliding trigger --------
                  • -------- If not, then turns the Sliding trigger on --------
                  • If ((CannonBolts is empty) Equal to True) then do (Trigger - Turn on Glass Cannon Slide <gen>) else do (Do nothing)
                  • -------- Adds dummy bolt to the Missiles' group --------
                  • Unit Group - Add (Last created unit) to CannonBolts
                  • -------- Reduces shots-to-do by 1 --------
                  • Set Integer[1] = (Integer[1] - 1)
                  • -------- Removes leak made here --------
                  • Custom script: call RemoveLocation(udg_Points[3])
                  • -------- Checks if there is any shot-to-make left --------
                  • -------- If not... --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Integer[1] Equal to 0
                    • Then - Actions
                      • -------- Clears the Hashtable --------
                      • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
                      • -------- Removes Caster from Casters' group --------
                      • Unit Group - Remove (Picked unit) from GlassCannons
                    • Else - Actions
                      • Hashtable - Save Integer[1] as 5 of (Key (Picked unit)) in Hashtable
                      • -------- Loads the full interval of shooting --------
                      • Set Real[1] = (Load 2 of (Key (Picked unit)) from Hashtable)
                      • Hashtable - Save Real[1] as 1 of (Key (Picked unit)) in Hashtable
                • Else - Actions
                  • -------- Else saves time left for next shot --------
                  • Hashtable - Save Real[1] as 1 of (Key (Picked unit)) in Hashtable
            • Else - Actions
              • -------- If any caster or target is dead, or they are too far to shoot, then... --------
              • -------- Clears the Hashtable --------
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
              • -------- Removes Caster from Casters' group --------
              • Unit Group - Remove (Picked unit) from GlassCannons
              • -------- Issues Caster to Hold Position (if it isn't dead already) --------
              • Unit - Order Caster to Hold Position
          • -------- Removes Leaks --------
          • Custom script: call RemoveLocation(udg_Points[1])
          • Custom script: call RemoveLocation(udg_Points[2])
      • -------- Checks if there is any instance of spell left after this loop --------
      • -------- If not, turns this trigger off --------
      • If ((GlassCannons is empty) Equal to True) then do (Trigger - Turn off (This trigger)) else do (Do nothing)
  • Glass Cannon Slide
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in CannonBolts and do (Actions)
        • Loop - Actions
          • -------- Loads Caster and Target --------
          • Set Target = (Load 0 of (Key (Picked unit)) in Hashtable)
          • Set Caster = (Load 1 of (Key (Picked unit)) in Hashtable)
          • -------- Finds locations of Dummy Bolt unit and Target --------
          • Set Points[1] = (Position of (Picked unit))
          • Set Points[2] = (Position of Target)
          • -------- Finds location at which Dummy Bolt unit would be moved --------
          • Set Points[3] = (Points[1] offset by 32.00 towards (Angle from Points[1] to Points[2]) degrees)
          • -------- If the Distance between dummy bolt unit and Target is 100 or greater, then... --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Distance between Points[1] and Points[2]) Greater than or equal to 100.00
            • Then - Actions
              • -------- Moves Dummy bolt unit to Points[3] --------
              • Unit - Move (Picked unit) instantly to Points[3], facing (Angle from Points[1] to Points[2]) degrees
            • Else - Actions
              • -------- Else... --------
              • -------- Loads the Damage-to-deal --------
              • Set Real[1] = (Load 2 of (Key (Picked unit)) from Hashtable)
              • -------- Causes Caster to Damage target --------
              • Unit - Cause Caster to damage Target, dealing Real[1] damage of attack type Spells and damage type Normal
              • -------- Plays the Impact animation and instantly destroys it, fixing the leak --------
              • -------- NOTE 1: Change this to fit your Dummy Missile's model. You don't want that fire would impact in blue slat, do you? --------
              • Special Effect - Create a special effect attached to the chest of Target using Abilities\Weapons\LichMissile\LichMissile.mdl
              • Special Effect - Destroy (Last created special effect)
              • -------- Clears the Hashtable --------
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
              • -------- Remvoes Dummy Bolt unit from Missiles' group --------
              • Unit Group - Remove (Picked unit) from CannonBolts
              • -------- Removes Dummy Bolt unit from game --------
              • Unit - Remove (Picked unit) from the game
          • -------- Clears the Leaks --------
          • Custom script: call RemoveLocation(udg_Points[1])
          • Custom script: call RemoveLocation(udg_Points[2])
          • Custom script: call RemoveLocation(udg_Points[3])
      • -------- Checks if there is any bolt left after loop --------
      • -------- If not, then turns this trigger off --------
      • If ((CannonBolts is empty) Equal to True) then do (Trigger - Turn off (This trigger)) else do (Do nothing)
  • Glass Cannon Cancel
    • Events
      • Unit - A unit Stops casting an ability
    • Conditions
      • (Ability being cast) Equal to Glass Cannon
    • Actions
      • -------- This trigger is only for making Caster available to move --------
      • -------- It only works, if unit is ordered to do anything else after starting channeling the spell --------
      • -------- It simply cuts the effect of Spell, if Caster is issued an order during Channeling --------
      • -------- ------------------------------------------------------------------------------------------------------------------------------------------- --------
      • -------- Clears the Hashtable --------
      • Hashtable - Clear all child hashtables of child (Key (Triggering unit)) in Hashtable
      • -------- Removes Caster from Casters' group --------
      • Unit Group - Remove (Triggering unit) from GlassCannons


  • Incinerate Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Incinerate
    • Actions
      • -------- Stores Caster and Target into variables --------
      • Set Caster = (Triggering unit)
      • Set Target = (Target unit of ability being cast)
      • -------- Finds the Point of ignition --------
      • Set Points[1] = (Position of Target)
      • -------- Sets the duration of the spell --------
      • -------- NOTE 1: Set your duration here. --------
      • Set Real[1] = 1.50
      • -------- Counts X and Y coordinates of the Point of Ignition to make it easier to transport through Hashtable --------
      • Set Real[2] = (X of Points[1])
      • Set Real[3] = (Y of Points[1])
      • -------- Counts the Escape Range --------
      • -------- NOTE 2: Modify your range of Escape here --------
      • Set Real[4] = (150.00 + (50.00 x (Real((Level of Incinerate for Caster)))))
      • -------- Here counts the TOTAL DoT --------
      • -------- NOTE 3: Modify your total DoT here --------
      • Set Real[5] = (20.00 + (20.00 x (Real((Level of Incinerate for Caster)))))
      • -------- Counts the Explosion damage --------
      • -------- NOTE 4: Change your explosion damage here --------
      • Set Real[6] = (Real[5] x 3.00)
      • -------- Counts how much damage will the DoT deal once per loop --------
      • -------- NOTE 5: DON'T touch these countings! --------
      • Set Real[5] = (Real[5] / Real[1])
      • Set Real[5] = (Real[5] x 0.05)
      • -------- Plays the SFX of impact ignition and instantly destroys it, fixing the SFX leak --------
      • -------- NOTE 6: Change your Impact Ignition SFX here. You don't want an Icy spell with Fiery SFXes, do you? --------
      • Special Effect - Create a special effect attached to the chest of Target using Abilities\Weapons\RedDragonBreath\RedDragonMissile.mdl
      • Special Effect - Destroy (Last created special effect)
      • -------- Creates a dummy unit --------
      • Unit - Create 1 Dummy Caster for (Owner of Caster) at Points[1] facing Default building facing degrees
      • -------- Stores all the information needed to the Hashtable --------
      • -------- NOTE 7: All the information is attached to the Dummy unit, making it infinitely Multi-Target per Unit instancable --------
      • Hashtable - Save Handle OfTarget as 0 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Handle OfCaster as 1 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[1] as 2 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[2] as 3 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[3] as 4 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[4] as 5 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[5] as 6 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[6] as 7 of (Key (Last created unit)) in Hashtable
      • -------- Creates a SFX to mark the Point of Ignition and stores it in the Hashtable --------
      • -------- NOTE 8: Change your Marking SFX here. As I already said, you don't want an Icy spell with Fiery SFXes, do you? --------
      • Special Effect - Create a special effect at Points[1] using Doodads\Cinematic\FirePillarMedium\FirePillarMedium.mdl
      • Hashtable - Save Handle Of(Last created special effect) as 8 of (Key (Last created unit)) in Hashtable
      • -------- Creates a SFX of the Ignition Buff and stores it in the Hashtable --------
      • -------- NOTE 8: Change your Buff SFX here. As I already said, you don't want an Icy spell with Fiery SFXes, do you? --------
      • Special Effect - Create a special effect attached to the origin of Target using Environment\NightElfBuildingFire\ElfLargeBuildingFire1.mdl
      • Hashtable - Save Handle Of(Last created special effect) as 9 of (Key (Last created unit)) in Hashtable
      • -------- Checks if there is any instance of spell already in effect --------
      • -------- If not, then turns the Timer trigger on --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Incinerateds is empty) Equal to True
        • Then - Actions
          • Trigger - Turn on Incinerate Timer <gen>
        • Else - Actions
      • -------- Adds the Dummy unit to the Dummies' group --------
      • Unit Group - Add (Last created unit) to Incinerateds
      • -------- Clears the Leak --------
      • Custom script: call RemoveLocation(udg_Points[1])
  • Incinerate Timer
    • Events
      • Time - Every 0.05 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Incinerateds and do (Actions)
        • Loop - Actions
          • -------- Loads Caster and Target --------
          • Set Target = (Load 0 of (Key (Picked unit)) in Hashtable)
          • Set Caster = (Load 1 of (Key (Picked unit)) in Hashtable)
          • -------- Loads the Coordinates of the Point of Ignition --------
          • Set Real[1] = (Load 3 of (Key (Picked unit)) from Hashtable)
          • Set Real[2] = (Load 4 of (Key (Picked unit)) from Hashtable)
          • -------- Finds the Location of Target and Point of Ignition --------
          • Set Points[1] = (Position of Target)
          • Set Points[2] = (Point(Real[1], Real[2]))
          • -------- Loads the Time left and reduces it by the loop interval of this trigger --------
          • Set Real[1] = (Load 2 of (Key (Picked unit)) from Hashtable)
          • Set Real[1] = (Real[1] - 0.05)
          • -------- Loads the escaping range --------
          • Set Real[2] = (Load 5 of (Key (Picked unit)) from Hashtable)
          • -------- Loads the part of DoT to deal --------
          • Set Real[3] = (Load 6 of (Key (Picked unit)) from Hashtable)
          • -------- Causes Caster do Damage Target, dealing Part of DoT --------
          • Unit - Cause Caster to damage Target, dealing Real[3] damage of attack type Spells and damage type Normal
          • -------- The Greater ITE part --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Or - Any (Conditions) are true
                • Conditions
                  • (Distance between Points[1] and Points[2]) Greater than Real[2]
                  • (Target is dead) Equal to True
            • Then - Actions
              • -------- If range between the Target and Point of Ignition is greater than Escape range or Target is dead, then.. --------
              • -------- Destroys SFXes made before --------
              • Special Effect - Destroy (Load 8 of (Key (Picked unit)) in Hashtable)
              • Special Effect - Destroy (Load 9 of (Key (Picked unit)) in Hashtable)
              • -------- Clears the Hashtable --------
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
              • -------- Removes Dummy unit from Dummies' group and then removes it from game --------
              • Unit Group - Remove (Picked unit) from Incinerateds
              • Unit - Remove (Picked unit) from the game
            • Else - Actions
              • -------- If target is alive and the distance between the Target and Point of Ignition is smaller than range of Escaping, then... --------
              • -------- Checks if it is time to do the Explosing --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Real[1] Greater than 0.00
                • Then - Actions
                  • -------- If timer is not expired yet, then updates time left --------
                  • Hashtable - Save Real[1] as 2 of (Key (Picked unit)) in Hashtable
                • Else - Actions
                  • -------- If timer is expired, then... --------
                  • -------- Creates the Explosion SFX --------
                  • -------- NOTE 1: Change your Explosion SFX here. As I already said, you don't want an Icy spell with Fiery SFXes, do you? --------
                  • Special Effect - Create a special effect attached to the origin of Target using Abilities\Spells\Other\Incinerate\FireLordDeathExplode.mdl
                  • -------- Destroys Explosion, Marking and Buff SFXes --------
                  • Special Effect - Destroy (Last created special effect)
                  • Special Effect - Destroy (Load 8 of (Key (Picked unit)) in Hashtable)
                  • Special Effect - Destroy (Load 9 of (Key (Picked unit)) in Hashtable)
                  • -------- Enumerates nearby enemies of Caster to damage them --------
                  • -------- NOTE 2: Change your explosion AoE here --------
                  • Set Enemies = (Units within 250.00 of Points[1] matching ((((Matching unit) is A structure) Not equal to True) and ((((Matching unit) is Mechanical) Not equal to True) and ((((Matching unit) is Magic Immune) Not equal to True) and ((((Matching unit) is dead) Not equal to T
                  • -------- Loads the Explosion damage --------
                  • Set Real[1] = (Load 7 of (Key (Picked unit)) from Hashtable)
                  • -------- Does the Damaging --------
                  • Unit Group - Pick every unit in Enemies and do (Actions)
                    • Loop - Actions
                      • -------- Plays a Damage SFX --------
                      • -------- NOTE 3: Change your Damage SFX here. As I already said, you don't want an Icy spell with Fiery SFXes, do you? --------
                      • Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Weapons\RedDragonBreath\RedDragonMissile.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • -------- Causes Caster to damage enemies, dealing Explosion damage counted in Cast trigger --------
                      • Unit - Cause Caster to damage (Picked unit), dealing Real[1] damage of attack type Spells and damage type Normal
                  • -------- Destroys the Group of the Explosion damage targets --------
                  • Custom script: call DestroyGroup(udg_Enemies)
                  • -------- Clears the Hashtable --------
                  • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
                  • -------- Removes dummy unit from Dummies' group and then removes it from Game --------
                  • Unit Group - Remove (Picked unit) from Incinerateds
                  • Unit - Remove (Picked unit) from the game
          • -------- Clears the Leaks --------
          • Custom script: call RemoveLocation(udg_Points[1])
          • Custom script: call RemoveLocation(udg_Points[2])
      • -------- Checks if there is any instance of spell left after this loop --------
      • -------- If not, then turns this trigger off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Incinerateds is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions


  • Morphing Ray Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Morphing Ray
    • Actions
      • -------- Stores caster and target into variables --------
      • -------- NOTE 1: Caster is stored only because it's easier to write the script, not searching for Triggering Unit --------
      • Set Caster = (Triggering unit)
      • Set Target = (Target unit of ability being cast)
      • -------- Finds the Caster's location --------
      • -------- NOTE 2: Will be used later for start-end points of the lightning we will create --------
      • Set Points[1] = (Position of Caster)
      • -------- Counts the damage dealt to target per second --------
      • -------- NOTE 3: Make your countings here --------
      • Set Real[1] = (0.25 x (Real((Level of Morphing Ray for Caster))))
      • Set Real[1] = ((Real((Intelligence of Caster (Include bonuses)))) x Real[1])
      • -------- Finishes damage countings --------
      • -------- NOTE 4: All the counted damage MUST be multiplied by 0.03 (or divided into 33.3) --------
      • -------- It is a MUST, because all ticks of damage will be dealt at interval of 0.03 --------
      • -------- We don't want to deal 800 damage per second or 24 damage per 0.03, do we? --------
      • Set Real[1] = (Real[1] x 0.03)
      • -------- Checks if target is ally. If yes, then turns damage into a negative value, making it heal --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Target belongs to an ally of (Owner of Caster)) Equal to True
        • Then - Actions
          • Set Real[1] = (Real[1] x -1.00)
        • Else - Actions
      • -------- Counts the duration of the Spell --------
      • -------- NOTE 5: Count your duration here --------
      • -------- NOTE 6: This must be equal to follow through time for each level --------
      • Set Real[2] = (1.00 + (Real((Level of Morphing Ray for Caster))))
      • -------- Counts the duration of the Spell --------
      • -------- NOTE 5: Count your duration here --------
      • -------- NOTE 6: This must be equal to follow through time for each level --------
      • -------- Stores all information to the Hashtable --------
      • -------- NOTE 7: It is made to be easier to interupt the channeled effect through effect --------
      • -------- NOTE 8: Never, EVER, make spells w/ hashtables which is casted by CASTER and all information is attached to TARGET, cause it can get bugged! A LOT! --------
      • Hashtable - Save Handle OfTarget as 0 of (Key (Triggering unit)) in Hashtable
      • Hashtable - Save Real[1] as 1 of (Key (Triggering unit)) in Hashtable
      • Hashtable - Save Real[2] as 2 of (Key (Triggering unit)) in Hashtable
      • -------- NOTE 9: Lightning is created here, as I didn't want to waste an action for storing da lightning to da variable --------
      • -------- NOTE 10: Change your lighting type here --------
      • Lightning - Create a Drain Mana lightning effect from source Points[1] to target Points[1]
      • Hashtable - Save Handle Of(Last created lightning effect) as 3 of (Key (Triggering unit)) in Hashtable
      • -------- Checks if there is any instance of spell already in on --------
      • -------- If not, turns the Channeled effect trigger on --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (RayCasters is empty) Equal to True
        • Then - Actions
          • Trigger - Turn on Morphing Ray Channel <gen>
        • Else - Actions
      • -------- Adds the Caster/Target SFX abilities to the Caster/Target. Obvious, isn't it? --------
      • Unit - Add SFX Caster to Caster
      • Unit - Add SFX Target to Target
      • -------- 'Sheeps' target --------
      • Unit - Create 1 Dummy Caster for (Owner of Caster) at Points[1] facing Default building facing degrees
      • Unit - Add Polymorph to (Last created unit)
      • Unit - Add a 0.50 second Generic expiration timer to (Last created unit)
      • Unit - Order (Last created unit) to Human Sorceress - Polymorph Target
      • -------- Adds caster to the Channelers' group --------
      • Unit Group - Add Caster to RayCasters
      • -------- Fixes the Leak --------
      • Custom script: call RemoveLocation(udg_Points[1])
  • Morphing Ray Channel
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in RayCasters and do (Actions)
        • Loop - Actions
          • -------- Stores Caster/Target into variables --------
          • Set Caster = (Picked unit)
          • Set Target = (Load 0 of (Key (Picked unit)) in Hashtable)
          • -------- Finds locations of Caster/Target --------
          • -------- These locations will be used to check the distance between the Duo and move lighting if possible --------
          • Set Points[1] = (Position of Caster)
          • Set Points[2] = (Position of Target)
          • -------- Loads the Tick's damage --------
          • Set Real[1] = (Load 1 of (Key (Picked unit)) from Hashtable)
          • -------- Loads the duration left and reduces it by Tick interval --------
          • -------- NOTE 1: It MUST be equal to the interval of this Trigger, as stated above --------
          • Set Real[2] = (Load 2 of (Key (Picked unit)) from Hashtable)
          • Set Real[2] = (Real[2] - 0.03)
          • -------- Loads the Lighting effect --------
          • Set Lightning = (Load 3 of (Key (Picked unit)) in Hashtable)
          • -------- Finds the Heights into which our lightning's start-end will be rised --------
          • Custom script: set udg_Real[3] = GetLocationZ(udg_Points[1])
          • Custom script: set udg_Real[4] = GetLocationZ(udg_Points[2])
          • Set Real[3] = (Real[3] + ((Current flying height of Caster) + 55.00))
          • Set Real[4] = (Real[4] + ((Current flying height of Target) + 20.00))
          • -------- If everyone in the Duo is alive, timer hasn't expired and range between the Duo isn't too big... --------
          • -------- NOTE 2: Change your max channel range in the conditions --------
          • -------- NOTE 3: if you want it be infinite, write a huge number --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Distance between Points[1] and Points[2]) Less than or equal to 800.00
              • Real[2] Greater than 0.00
              • (Caster is alive) Equal to True
              • (Target is alive) Equal to True
            • Then - Actions
              • -------- Then... --------
              • -------- Moves lightning --------
              • Custom script: call MoveLightningEx(udg_Lightning, true, GetLocationX(udg_Points[2]), GetLocationY(udg_Points[2]), udg_Real[4], GetLocationX(udg_Points[1]), GetLocationY(udg_Points[1]), udg_Real[3])
              • -------- Causes caster to damage target --------
              • Unit - Cause Caster to damage Target, dealing Real[1] damage of attack type Spells and damage type Normal
              • -------- Updates the time left in the timer --------
              • Hashtable - Save Real[2] as 2 of (Key (Picked unit)) in Hashtable
            • Else - Actions
              • -------- Else... --------
              • -------- Removes SFX abilities from the Duo --------
              • Unit - Remove SFX Caster from Caster
              • Unit - Remove SFX Target from Target
              • -------- Removes the Transformation buff from Target. Well, if it is not dead yet --------
              • Unit - Remove Morphing Ray buff from Target
              • -------- Destroys the lightning --------
              • Lightning - Destroy Lightning
              • -------- Clears the Hashtable --------
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
              • -------- Removes Caster from the Channelers' group --------
              • Unit Group - Remove Caster from RayCasters
              • -------- Orders the Caster to hold position. Well, if it is not dead yet --------
              • Unit - Order Caster to Hold Position
          • -------- Clears the leaks --------
          • Custom script: call RemoveLocation(udg_Points[1])
          • Custom script: call RemoveLocation(udg_Points[2])
      • -------- Checks if there is any instance of spell left after loop --------
      • -------- If not, turns this trigger off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (RayCasters is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
  • Morphing Ray Interupt
    • Events
      • Unit - A unit Stops casting an ability
    • Conditions
      • (Ability being cast) Equal to Morphing Ray
    • Actions
      • -------- Stores our Duo into variables --------
      • Set Caster = (Triggering unit)
      • Set Target = (Load 0 of (Key (Triggering unit)) in Hashtable)
      • -------- Stores the Lightning into variable --------
      • Set Lightning = (Load 3 of (Key (Triggering unit)) in Hashtable)
      • -------- Clears the Hashtable, as we won't need anything anymore --------
      • Hashtable - Clear all child hashtables of child (Key (Triggering unit)) in Hashtable
      • -------- Removes caster from channelers' group --------
      • Unit Group - Remove (Triggering unit) from RayCasters
      • -------- Removes SFX abilities from the Duo --------
      • Unit - Remove SFX Caster from Caster
      • Unit - Remove SFX Target from Target
      • -------- Removes the Transformation buff from the Target --------
      • Unit - Remove Morphing Ray buff from Target
      • -------- Destroys the Lightning --------
      • Lightning - Destroy Lightning


  • Repel Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Repel
    • Actions
      • -------- Sets the Caster --------
      • Set Caster = (Triggering unit)
      • -------- Creates a location for Dummy Unit spawning --------
      • Set Points[1] = (Position of Caster)
      • -------- Saves the AoE at which enemies are detected to knockback --------
      • Set Real[1] = (100.00 + (100.00 x (Real((Level of Repel for Caster)))))
      • -------- Creates a dummy unit and Stores caster and Detection Range --------
      • Unit - Create 1 Dummy Caster for (Owner of Caster) at Points[1] facing Default building facing degrees
      • Hashtable - Save Real[1] as 0 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Handle OfCaster as 1 of (Key (Last created unit)) in Hashtable
      • -------- Checks if there is any instance of this spell in effect --------
      • -------- If not, turns the Effect trigger on --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Repeleds is empty) Equal to True
        • Then - Actions
          • Trigger - Turn on Repel Effect <gen>
        • Else - Actions
      • -------- Adds dummy unit to Dummy Units' group --------
      • Unit Group - Add (Last created unit) to Repeleds
      • Custom script: call RemoveLocation(udg_Points[1])
  • Repel Effect
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • -------- Every 0.03 seconds of the game --------
      • Unit Group - Pick every unit in Repeleds and do (Actions)
        • Loop - Actions
          • -------- Loads the Knockback detection range and Caster --------
          • Set Real[1] = (Load 0 of (Key (Picked unit)) from Hashtable)
          • Set Caster = (Load 1 of (Key (Picked unit)) in Hashtable)
          • -------- Creates a location for knockbacking offset --------
          • Set Points[1] = (Position of Caster)
          • -------- Finds all enemies to knockback --------
          • -------- NOTE 1 : Finds all visible organic enemies that are not magic immune --------
          • Set Enemies = (Units within Real[1] of Points[1] matching ((((Matching unit) is A structure) Not equal to True) and ((((Matching unit) is Mechanical) Not equal to True) and ((((Matching unit) is Magic Immune) Not equal to True) and ((((Matching unit) is dead) Not equal to
          • -------- Does knockbacking --------
          • Unit Group - Pick every unit in Enemies and do (Actions)
            • Loop - Actions
              • -------- Finds Enemy's location and a place at which it will be knockbacked --------
              • Set Points[2] = (Position of (Picked unit))
              • Set Points[3] = (Points[2] offset by 45.00 towards (Angle from Points[1] to Points[2]) degrees)
              • -------- Moves (Knockbacks) the enemy --------
              • Unit - Move (Picked unit) instantly to Points[3]
              • -------- Creates an Rocky explosion on target --------
              • Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Weapons\AncientProtectorMissile\AncientProtectorMissile.mdl
              • -------- Clears leaks --------
              • Special Effect - Destroy (Last created special effect)
              • Custom script: call RemoveLocation(udg_Points[2])
              • Custom script: call RemoveLocation(udg_Points[3])
          • -------- NOTE 2 : This spell is based on Windwalk, so it won't interupt current action and you can't reactivate it --------
          • -------- NOTE 3 : You don't get invisible because the transition time is much longer than duration --------
          • -------- NOTE 4 : Repel IS dispellable --------
          • -------- If the caster isn't alive or the Buff of the Repel is gone... --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Caster is alive) Equal to True
              • (Caster has buff Repel ) Equal to True
            • Then - Actions
            • Else - Actions
              • -------- Rids the Hashtable of the unnecessary information stored inside the dummy unit --------
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
              • -------- Removes Dummy unit for Dummy Group --------
              • Unit Group - Remove (Picked unit) from Repeleds
              • -------- Removes Dummy unit from Game --------
              • Unit - Remove (Picked unit) from the game
          • -------- Clears the Leaks --------
          • Custom script: call RemoveLocation(udg_Points[1])
          • Custom script: call DestroyGroup(udg_Enemies)
      • -------- Checks if there is any instance of this spell left after loop --------
      • -------- If not, turns this trigger off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Repeleds is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions


  • Sinister Blast Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Sinister Blast
    • Actions
      • -------- Stores Caster and Target into variables --------
      • Set Caster = (Triggering unit)
      • Set Target = (Target unit of ability being cast)
      • -------- Finds location of Target --------
      • Set Points[1] = (Position of Target)
      • -------- Counts the Sins to release --------
      • -------- NOTE 1: Set your Sins here --------
      • Set Integer[1] = (2 + (Level of Sinister Blast for Caster))
      • -------- Prepares variable for angle determination which will be the starting angle to spin for Sin --------
      • Set Real[1] = 0.00
      • -------- Counts up the Angle by which the angle-to-spin will be increased with every Sin risen --------
      • Set Real[2] = (360.00 / (Real(Integer[1])))
      • -------- Stores damage into Variable --------
      • -------- NOTE 2: Change your damage here --------
      • Set Real[3] = 100.00
      • -------- Creates sins --------
      • For each (Integer A) from 1 to Integer[1], do (Actions)
        • Loop - Actions
          • -------- Creates the Sin it self --------
          • -------- NOTE 3: Change model of your 'sin' unit at the object editor at the dummy unit --------
          • Unit - Create 1 Dark Bolt for (Owner of Caster) at Points[1] facing Default building facing degrees
          • -------- Adds and removes Storm Crow spell to/from target, allowing us to manipulate the flying height of Sin --------
          • Unit - Add Storm Crow Form to (Last created unit)
          • Unit - Remove Storm Crow Form from (Last created unit)
          • -------- Instantly changes the Flying height of Sin to be equal of the Target's one --------
          • Animation - Change (Last created unit) flying height to (Current flying height of Target) at 0.00
          • -------- Makes the Sin rise over half second to the higher point at which it will spin for next second and half --------
          • Animation - Change (Last created unit) flying height to ((Current flying height of (Last created unit)) + 300.00) at 600.00
          • -------- Stores information needed into hashtable --------
          • -------- NOTE 4: All information is attached to the Sin unit --------
          • -------- These two store caster and target --------
          • Hashtable - Save Handle OfTarget as 0 of (Key (Last created unit)) in Hashtable
          • Hashtable - Save Handle OfCaster as 1 of (Key (Last created unit)) in Hashtable
          • -------- This one stores range from Target --------
          • Hashtable - Save 0.00 as 2 of (Key (Last created unit)) in Hashtable
          • -------- This stores Angle at which this unit will start spinning --------
          • Hashtable - Save Real[1] as 3 of (Key (Last created unit)) in Hashtable
          • -------- This stores Damage --------
          • Hashtable - Save Real[3] as 4 of (Key (Last created unit)) in Hashtable
          • -------- Checks if there is any Sin in effect of the Rising Trigger --------
          • -------- If not, turns Rising Trigger on --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (SinsLanding is empty) Equal to True
            • Then - Actions
              • Trigger - Turn on Sinister Blast Rise <gen>
            • Else - Actions
          • -------- Adds the Sin unit to Rising Sins' group --------
          • Unit Group - Add (Last created unit) to SinsLanding
          • -------- Increases the Starting Spin angle by the amount counted above --------
          • Set Real[1] = (Real[1] + Real[2])
      • -------- Clears the Leaks --------
      • Custom script: call RemoveLocation(udg_Points[1])
  • Sinister Blast Rise
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in SinsLanding and do (Actions)
        • Loop - Actions
          • -------- Loads Target only, as we don't need the Caster for this phase of the spell --------
          • Set Target = (Load 0 of (Key (Picked unit)) in Hashtable)
          • -------- Loads the Range from target and increases it, allowing us to get further --------
          • -------- NOTE 1: Increases the range at the speed of 3.84/0.03=128 units per second --------
          • Set Real[1] = (Load 2 of (Key (Picked unit)) from Hashtable)
          • Set Real[1] = (Real[1] + 3.84)
          • -------- Loads the angle and increases it, so counting the angle at which the Sin unit will be moved from Target --------
          • -------- NOTE 2: Spins at the speed of 5.5/0.03=183 degrees per second --------
          • -------- NOTE 3: Spins counter-clockwise. If the angle would be decreased instead of increasing, the sin would spin Clockwise --------
          • Set Real[2] = (Load 3 of (Key (Picked unit)) from Hashtable)
          • Set Real[2] = (Real[2] + 5.50)
          • -------- Finds the Location of Target and the Location at which the Sin unit will be moved --------
          • Set Points[1] = (Position of Target)
          • Set Points[2] = (Points[1] offset by Real[1] towards Real[2] degrees)
          • -------- Moves sin unit to the Points[2], making it slide --------
          • Unit - Move (Picked unit) instantly to Points[2]
          • -------- Updates the Range-from-Target and Angle-from-Target --------
          • Hashtable - Save Real[1] as 2 of (Key (Picked unit)) in Hashtable
          • Hashtable - Save Real[2] as 3 of (Key (Picked unit)) in Hashtable
          • -------- Checks if it is time to 'return' to the Target --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Real[1] Greater than or equal to 256.00
            • Then - Actions
              • -------- If it is, then decreases the flying height of Sin to the one of the Target --------
              • Animation - Change (Picked unit) flying height to (Current flying height of Target) at 300.00
              • -------- Removes the Sin from the Rising Sins' group --------
              • Unit Group - Remove (Picked unit) from SinsLanding
              • -------- Checks if there is any sin landing already --------
              • -------- If not, then turns the Landing trigger on --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (SinsRising is empty) Equal to True
                • Then - Actions
                  • Trigger - Turn on Sinister Blast Land <gen>
                • Else - Actions
              • -------- Adds the Sin unit to the Landing Sins' group --------
              • Unit Group - Add (Picked unit) to SinsRising
            • Else - Actions
          • -------- Clears leaks --------
          • Custom script: call RemoveLocation(udg_Points[1])
          • Custom script: call RemoveLocation(udg_Points[2])
      • -------- Checks if there is any Rising Sin left after this loop --------
      • -------- If not, turns this trigger off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (SinsLanding is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
  • Sinister Blast Land
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in SinsRising and do (Actions)
        • Loop - Actions
          • -------- Loads both Caster and Target as we will need Caster too for damaging the Target. --------
          • Set Target = (Load 0 of (Key (Picked unit)) in Hashtable)
          • Set Caster = (Load 1 of (Key (Picked unit)) in Hashtable)
          • -------- Loads the Range-from-Target and decreases it, making sin return to the Target --------
          • -------- NOTE 1: Sin returns at the speed of 7.68/0.03=256 units per second --------
          • Set Real[1] = (Load 2 of (Key (Picked unit)) from Hashtable)
          • Set Real[1] = (Real[1] - 7.68)
          • -------- Loads the Angle-from-Target and increases it, making it spin --------
          • -------- NOTE 2: My sin spins at the speed of 8/0.03=267 degrees per second --------
          • -------- NOTE 3: My sin spins Counter-Clockwise. If the angle-from-target was reduced instead of increasing, it would spin Clockwise --------
          • Set Real[2] = (Load 3 of (Key (Picked unit)) from Hashtable)
          • Set Real[2] = (Real[2] + 8.00)
          • -------- Finds the location of target and location at which the sin unit will be moved --------
          • Set Points[1] = (Position of Target)
          • Set Points[2] = (Points[1] offset by Real[1] towards Real[2] degrees)
          • -------- Moves Sin to the Points[2], making it return to target --------
          • Unit - Move (Picked unit) instantly to Points[2]
          • -------- Checks if it is time to deal damge for target --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Real[1] Less than or equal to 0.00
            • Then - Actions
              • -------- If it is, then it... --------
              • -------- Loasd the damage-to-deal --------
              • Set Real[1] = (Load 4 of (Key (Picked unit)) from Hashtable)
              • -------- Causes Caster do deal damage to Target --------
              • Unit - Cause Caster to damage Target, dealing Real[1] damage of attack type Spells and damage type Normal
              • -------- Plays the SFX on target and instantly destroys it, fixing the SFX leak --------
              • Special Effect - Create a special effect attached to the origin of Target using Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
              • Special Effect - Destroy (Last created special effect)
              • -------- Clears the Hashtable --------
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
              • -------- Removes Sin unit for Returning Sins' group --------
              • Unit Group - Remove (Picked unit) from SinsLanding
              • -------- Removes Sin from game --------
              • Unit - Remove (Picked unit) from the game
            • Else - Actions
              • -------- If not, then it... --------
              • -------- Updates the Range- and Angle-from-target --------
              • Hashtable - Save Real[1] as 2 of (Key (Picked unit)) in Hashtable
              • Hashtable - Save Real[2] as 3 of (Key (Picked unit)) in Hashtable
          • -------- Clears the leaks --------
          • Custom script: call RemoveLocation(udg_Points[1])
          • Custom script: call RemoveLocation(udg_Points[2])
      • -------- Checks if there is any Returning Sin left after this loop --------
      • -------- If not, then turns this trigger off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (SinsRising is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions


  • Shockwave Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Shockwave
    • Actions
      • -------- Stores Caster into a variable --------
      • Set Caster = (Triggering unit)
      • -------- Finds the locations of Caster, target point and Wave spawn point --------
      • Set Points[1] = (Position of Caster)
      • Set Points[2] = (Target point of ability being cast)
      • Set Points[3] = (Points[1] offset by 70.00 towards (Angle from Points[1] to Points[2]) degrees)
      • -------- Distance which the wave will travel --------
      • -------- NOTE 1: Change your MAX wave distance here --------
      • Set Real[1] = 950.00
      • -------- Here put your 'stun' duration --------
      • -------- NOTE 3: If you put a higher amount, then the 'stun' will last longer --------
      • Set Real[2] = (2.00 + (Real((Level of Shockwave for Caster))))
      • -------- Counts the damage dealt by wave --------
      • -------- NOTE 3: Calculate your damage here --------
      • Set Real[3] = (20.00 + (70.00 x (Real((Level of Shockwave for Caster)))))
      • -------- Creates a wave unit --------
      • -------- NOTE 4: Change your wave model in the Object editor, unit The Shockwave --------
      • Unit - Create 1 The Shockwave for (Owner of Caster) at Points[3] facing (Angle from Points[1] to Points[2]) degrees
      • -------- Stores the information required into hashtable --------
      • -------- NOTE 5: All infromation is attached to the wave unit --------
      • Hashtable - Save Handle OfCaster as 0 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[1] as 1 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[1] as 2 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[2] as 3 of (Key (Last created unit)) in Hashtable
      • Hashtable - Save Real[3] as 4 of (Key (Last created unit)) in Hashtable
      • -------- Checks if there is any instance of spell already running --------
      • -------- If not, then turns the sliding trigger on --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Shockwaves is empty) Equal to True
        • Then - Actions
          • Trigger - Turn on Shockwave Slide <gen>
        • Else - Actions
      • -------- Adds wave unit to the Waves' group --------
      • Unit Group - Add (Last created unit) to Shockwaves
      • -------- Clears the Leaks --------
      • Custom script: call RemoveLocation(udg_Points[1])
      • Custom script: call RemoveLocation(udg_Points[2])
      • Custom script: call RemoveLocation(udg_Points[3])
  • Shockwave Slide
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Shockwaves and do (Actions)
        • Loop - Actions
          • -------- Loads the Caster --------
          • Set Caster = (Load 0 of (Key (Picked unit)) in Hashtable)
          • -------- Loads the Distance-to-Travel and reduces it by 'speed' --------
          • Set Real[1] = (Load 1 of (Key (Picked unit)) from Hashtable)
          • -------- NOTE 1: The real number substracted must be equal to the one below (I'll remind it to you) --------
          • Set Real[1] = (Real[1] - 27.00)
          • -------- Loads the total Distance-to-Travel and counts the % of the way left --------
          • -------- This will be used to shorten the duration of 'stun' --------
          • -------- NOTE 3: This doesn't allow you to have the max duration of 'stun', but the difference is not too noticable --------
          • Set Real[2] = (Load 2 of (Key (Picked unit)) from Hashtable)
          • Set Real[3] = (Real[1] / Real[2])
          • -------- Loads the total Duration of 'stun' --------
          • Set Real[4] = (Load 3 of (Key (Picked unit)) from Hashtable)
          • -------- Counts how long will 'stun' last on enemies enumerated during this loop --------
          • Set Real[4] = (Real[3] x Real[4])
          • -------- Loads the damage-to-deal --------
          • Set Real[5] = (Load 4 of (Key (Picked unit)) from Hashtable)
          • -------- Finds the location of wave unit and calculates the point to which will it will move --------
          • Set Points[1] = (Position of (Picked unit))
          • Set Points[2] = (Points[1] offset by 27.00 towards (Facing of (Picked unit)) degrees)
          • -------- Enumerates enemies for damaging and 'stunning' --------
          • -------- NOTE 4: Enumerates visible enemy ground units which are still alive and are not mechanical nor magic immune --------
          • Set Enemies = (Units within 200.00 of Points[2] matching (((((Matching unit) is A structure) Not equal to True) and (((Matching unit) has buff Stun ) Not equal to True)) and ((((Matching unit) is Mechanical) Not equal to True) and ((((Matching unit) is Magic Imm
          • -------- Moves the wave unit to the further it's location --------
          • Unit - Move (Picked unit) instantly to Points[2]
          • -------- Does the damaging and 'stunning' --------
          • Unit Group - Pick every unit in Enemies and do (Actions)
            • Loop - Actions
              • Unit - Create 1 Dummy Caster for (Owner of Caster) at Points[2] facing Default building facing degrees
              • Unit - Add Dummy Stun to (Last created unit)
              • Unit - Set level of Dummy Stun for (Last created unit) to (Level of Shockwave for Caster)
              • Unit - Order (Last created unit) to Human Dragonhawk Rider - Aerial Shackles (Picked unit)
              • Unit - Add a Real[4] second Generic expiration timer to (Last created unit)
              • Unit - Cause Caster to damage (Picked unit), dealing Real[5] damage of attack type Spells and damage type Normal
          • -------- Checks if the distance-to-travel left isn't over --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Real[1] Less than or equal to 0.00
            • Then - Actions
              • -------- If it is, then... --------
              • -------- Rids the hashtable of all information attached to the Wave unit --------
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
              • -------- Removes wave unit from Waves' group --------
              • Unit Group - Remove (Picked unit) from Shockwaves
              • -------- Removes Wave unit from game --------
              • Unit - Remove (Picked unit) from the game
            • Else - Actions
              • -------- If it isn't, then... --------
              • -------- Updates the Distance-to-Travel left --------
              • Hashtable - Save Real[1] as 1 of (Key (Picked unit)) in Hashtable
          • -------- Clears the leaks --------
          • Custom script: call DestroyGroup(udg_Enemies)
          • Custom script: call RemoveLocation(udg_Points[1])
          • Custom script: call RemoveLocation(udg_Points[2])
      • -------- Checks if there is any Instance of spell still runing --------
      • -------- If there isn't any, then turns this trigger off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Shockwaves is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions


  • Heroic Leap Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Heroic Leap
    • Actions
      • -------- Stores into variables Caster and Target --------
      • Set Caster = (Triggering unit)
      • Set Target = (Target unit of ability being cast)
      • -------- Finds the Distance between the Caster and Target --------
      • Set Points[1] = (Position of Caster)
      • Set Points[2] = (Position of Target)
      • Set Real[1] = (Distance between Points[1] and Points[2])
      • -------- Counts up the range at which the Caster shall start landing --------
      • -------- NOTE 1: It is bigger than the real middle of the overall range-to-jump as Caster has to land near the Target, not on it. --------
      • Set Real[2] = (Real[1] / 2.00)
      • Set Real[2] = (Real[2] + 80.00)
      • -------- Adds-Removes Storm crow ability, allowing us to manipulate the Flying height of Caster --------
      • Unit - Add Storm Crow Form to Caster
      • Unit - Remove Storm Crow Form from Caster
      • -------- Makes Caster invurnerable and turns it's Collision off --------
      • Unit - Make Caster Invulnerable
      • Unit - Turn collision for Caster Off
      • -------- Creates a trail SFX and instantly destroys it, removing leak --------
      • Special Effect - Create a special effect attached to the chest of Caster using Abilities\Spells\Human\Invisibility\InvisibilityTarget.mdl
      • Special Effect - Destroy (Last created special effect)
      • -------- Stores target into Hashtable --------
      • Hashtable - Save Handle OfTarget as 0 of (Key (Triggering unit)) in Hashtable
      • -------- Stores the Distance-to-jump and distance at which the Caster shall start landing --------
      • Hashtable - Save Real[1] as 1 of (Key (Triggering unit)) in Hashtable
      • Hashtable - Save Real[2] as 2 of (Key (Triggering unit)) in Hashtable
      • -------- NOTE 1: All required information is attached to caster. That's why it was made Invulnerable --------
      • -------- Checks if there is any instance of spell already in effect --------
      • -------- If not, turns the Loop trigger on --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Leapers is empty) Equal to True
        • Then - Actions
          • Trigger - Turn on Heroic Leap Loop <gen>
        • Else - Actions
      • -------- Adds the Caster into Leapers' group --------
      • Unit Group - Add Caster to Leapers
      • -------- Removes leaks --------
      • Custom script: call RemoveLocation(udg_Points[1])
      • Custom script: call RemoveLocation(udg_Points[2])
  • Heroic Leap Loop
    • Events
      • Time - Every 0.04 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Leapers and do (Actions)
        • Loop - Actions
          • -------- Stores Target and Caster into variables --------
          • Set Target = (Load 0 of (Key (Picked unit)) in Hashtable)
          • Set Caster = (Picked unit)
          • -------- Finds the locations of Caster and Target --------
          • Set Points[1] = (Position of Caster)
          • Set Points[2] = (Position of Target)
          • -------- Finds a location to which the Caster would be moved --------
          • -------- NOTE 1: Here change your speed --------
          • -------- NOTE 2: Speed is counted by dividing your real number into trigger's loop interval --------
          • -------- NOTE 3: My speed is 40/0.04=1000 units per second --------
          • Set Points[3] = (Points[1] offset by 40.00 towards (Angle from Points[1] to Points[2]) degrees)
          • -------- Loads the Distance at which caster would start landing --------
          • Set Real[1] = (Load 2 of (Key (Picked unit)) from Hashtable)
          • -------- Counts the Distance between caster and target --------
          • Set Real[2] = (Distance between Points[1] and Points[2])
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Real[2] Greater than or equal to 120.00
            • Then - Actions
              • -------- If distance between caster and target is greater than 120, then... --------
              • -------- Moves caster to Points[3] --------
              • Unit - Move Caster instantly to Points[3], facing Points[2]
              • -------- Increases/decreases the flying heigh of Caster --------
              • -------- NOTE 4: Here it checks if the Distance between Caster and Target is greater than Distance at which Caster should start landing --------
              • -------- If yes, then it increases the flying height of the caster, else reduces it by equal amount --------
              • If (Real[2] Greater than or equal to Real[1]) then do (Set Real[1] = 16.00) else do (Set Real[1] = -16.00)
              • Animation - Change Caster flying height to ((Current flying height of Caster) + Real[1]) at 0.00
            • Else - Actions
              • -------- Else... --------
              • -------- Resets the Flying height of Caster --------
              • Animation - Change Caster flying height to (Default flying height of Caster) at 0.00
              • -------- Makes it vurnerable again and turns it's collisiong on --------
              • Unit - Make Caster Vulnerable
              • Unit - Turn collision for Caster On
              • -------- Orders caster to attack target --------
              • Unit - Order Caster to Attack Target
              • -------- Creates the Thunderclap --------
              • -------- NOTE 5: Change damage at dummy ability in Object Editor --------
              • Unit - Create 1 Dummy Caster for (Owner of Caster) at Points[1] facing Default building facing degrees
              • Unit - Add a 0.50 second Generic expiration timer to (Last created unit)
              • Unit - Add Dummy Thunder Clap to (Last created unit)
              • Unit - Set level of Dummy Thunder Clap for (Last created unit) to (Level of Heroic Leap for Caster)
              • Unit - Order (Last created unit) to Human Mountain King - Thunder Clap
              • -------- Clears the Hashtable and Removes caster from Leapers' group --------
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
              • Unit Group - Remove (Picked unit) from Leapers
          • -------- Clears leaks --------
          • Custom script: call RemoveLocation(udg_Points[1])
          • Custom script: call RemoveLocation(udg_Points[2])
          • Custom script: call RemoveLocation(udg_Points[3])
      • -------- Checks if there is any instance left after loop --------
      • -------- If not, turns this trigger off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Leapers is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions


  • Heroic Leap vAoE Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Heroic Leap (vAoE)
    • Actions
      • -------- Stores caster into variable --------
      • Set Caster = (Triggering unit)
      • -------- Finds caster's location and center of target AoE --------
      • Set Points[1] = (Position of Caster)
      • Set Points[2] = (Target point of ability being cast)
      • -------- Fixes the Out-of-Boundary bugg --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Terrain pathing at Points[2] of type Walkability is off) Equal to True
        • Then - Actions
          • Item - Create Tome of Experience at Points[2]
          • Custom script: call RemoveLocation(udg_Points[2])
          • Set Points[2] = (Position of (Last created item))
          • Item - Remove (Last created item)
        • Else - Actions
      • -------- Stores distance-to-jump into variable --------
      • Set Real[1] = (Distance between Points[1] and Points[2])
      • -------- Counts up the Distance at which Caster shall start landing --------
      • Set Real[2] = (Real[1] / 2.00)
      • -------- Counts angle at which caster shall 'jump' --------
      • Set Real[3] = (Angle from Points[1] to Points[2])
      • -------- Turns Caster's collision off, as we want it jump above (go through) any obstacle --------
      • Unit - Turn collision for Caster Off
      • -------- Makes Caster invulnerable --------
      • Unit - Make Caster Invulnerable
      • -------- Adds to and removes from Caster Storm Crow Form spell , allowing us to manipulate the Flying height of Caster --------
      • Unit - Add Storm Crow Form to Caster
      • Unit - Remove Storm Crow Form from Caster
      • -------- Creates a trail SFX and instantly destroys it, fixing the leak --------
      • Special Effect - Create a special effect attached to the origin of Caster using Abilities\Spells\Human\Invisibility\InvisibilityTarget.mdl
      • Special Effect - Destroy (Last created special effect)
      • -------- Stores all Information needed to the Hashtable --------
      • -------- NOTE 1: All information is attached to caster --------
      • -------- Never, EVER, make hashtable-based MUI spells, that are cast by Caster and Information is attached to the Target, as it will cause huge bugg --------
      • Hashtable - Save Real[1] as 0 of (Key (Triggering unit)) in Hashtable
      • Hashtable - Save Real[2] as 1 of (Key (Triggering unit)) in Hashtable
      • Hashtable - Save Real[3] as 2 of (Key (Triggering unit)) in Hashtable
      • -------- Checks if there is any instance of spell already in game --------
      • -------- If not, then turns sliding trigger on --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (AoELeapers is empty) Equal to True
        • Then - Actions
          • Trigger - Turn on Heroic Leap vAoE Slide <gen>
        • Else - Actions
      • -------- Adds caster to leapers' group --------
      • Unit Group - Add (Triggering unit) to AoELeapers
      • -------- Clears the leaks --------
      • Custom script: call RemoveLocation(udg_Points[1])
      • Custom script: call RemoveLocation(udg_Points[2])
      • -------- NOTE 2: AoE, damage and stun duration are all works in Object Editor, spells Heroic Leap and Dummy Stomp --------
  • Heroic Leap vAoE Slide
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in AoELeapers and do (Actions)
        • Loop - Actions
          • -------- Stores Caster into variable, solely for faster code writing --------
          • Set Caster = (Picked unit)
          • -------- Loads distance-to-jump and reduces it by SPEED --------
          • -------- NOTE 1: This reducement MUST be equal to the offset by real number in the countings of Points[2] --------
          • Set Real[1] = (Load 0 of (Key (Picked unit)) from Hashtable)
          • Set Real[1] = (Real[1] - 33.00)
          • -------- Loads distance-to-rise --------
          • Set Real[2] = (Load 1 of (Key (Picked unit)) from Hashtable)
          • -------- Loads jump angle --------
          • Set Real[3] = (Load 2 of (Key (Picked unit)) from Hashtable)
          • -------- Finds current position of Caster and Counts the next Point-to-move --------
          • Set Points[1] = (Position of Caster)
          • Set Points[2] = (Points[1] offset by 33.00 towards Real[3] degrees)
          • -------- Checks if it is time to finish landing --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Real[1] Greater than or equal to 0.00
            • Then - Actions
              • -------- If not, then... --------
              • -------- Moves Caster to the Points[2], making it slide --------
              • Unit - Move Caster instantly to Points[2]
              • -------- Checks if the distance-to-jump is greater than distance-to-rise --------
              • -------- If it is, then sets bonus jump height into positive real number, else, to negative, but equal one --------
              • If (Real[1] Greater than Real[2]) then do (Set Real[3] = 20.00) else do (Set Real[3] = -20.00)
              • -------- Increases/decreases flying height of caster, making it 'jump' --------
              • Animation - Change Caster flying height to ((Current flying height of Caster) + Real[3]) at 0.00
              • -------- Updates reduced distance-to-jump --------
              • Hashtable - Save Real[1] as 0 of (Key (Picked unit)) in Hashtable
            • Else - Actions
              • -------- If it is, then... --------
              • -------- Fixes Caster's collision, vulnerability and flying height --------
              • Unit - Turn collision for Caster On
              • Unit - Make Caster Vulnerable
              • Animation - Change Caster flying height to (Default flying height of Caster) at 0.00
              • -------- Plays caster's slam animation --------
              • Animation - Play Caster's slam animation
              • -------- Does the AoE-stunning --------
              • Unit - Create 1 Dummy Caster for (Owner of Caster) at Points[2] facing Default building facing degrees
              • Unit - Add a 0.50 second Generic expiration timer to (Last created unit)
              • Unit - Add Dummy Stomp to (Last created unit)
              • Unit - Set level of Dummy Stomp for (Last created unit) to (Level of Heroic Leap (vAoE) for Caster)
              • Unit - Order (Last created unit) to Orc Tauren Chieftain - War Stomp
              • -------- Clears the Hashtable --------
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in Hashtable
              • -------- Removes Caster from leapers' group --------
              • Unit Group - Remove Caster from AoELeapers
          • -------- Clears the Leaks --------
          • Custom script: call RemoveLocation(udg_Points[1])
          • Custom script: call RemoveLocation(udg_Points[2])
      • -------- Checks if there is any instance of spell left after this loop --------
      • -------- If not, then turns this trigger off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (AoELeapers is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions



v0.01 - 2010-09-19 - First Release


Keywords:
Spell, pack
Contents

Spells in Hashtables v0.01 (Map)

Reviews
Bribe: Ball Lightning - Would have been nice to have this an immediate-order based spell because it doesn't quite fit to have to click on an enemy unit to activate it (perhaps use SimError to cancel the spell if no enemies are nearby). I...

Moderator

M

Moderator

Bribe:

Ball Lightning -


Would have been nice to have this an immediate-order based spell because it doesn't quite fit to have to click on an enemy unit to activate it (perhaps use SimError to cancel the spell if no enemies are nearby).

I really like the pinball-machine idea and this is very fun when executed properly.

Double Tide -


Great idea and the spell is very fluid. It doubles as a cool escape spell as well.

Eternal Winter -


It lags for me at the end slightly but everything prior is a work of art.

Glass Cannon -


The effect is very hard to see, especiall when the unit is right next to the caster. For something with the name "Glass Cannon" I was expecting perhaps the sound of ice shattering. It's a bit lacking.

Incinerate -


The in-game possiblities are good but the effects are a bit soft. If you made the incinerate attachment a little bigger and made the ending explosion a lot bigger this would stand out more.

Morphing Ray -


Didn't really stand out next to your bigger spells.

Repel -


The rock-effect is spammed quite a lot. If the "repel" happened in waves it would produce a better effect.

Sinister blast -


Extremely cool effects. The ending could be a bit more dramatic, perhaps accompanied by a good sound effect or a bigger special effect.

The Shockwave -


It's pretty overpowered but it's nice to see a shockwave that doesn't deform the ground.

Heroic leap


Anti-climactic ending because it has such a great start. The simple thunderclap at the end just doesn't do it justice.
 
I see you've taken your tutorials, which is great!
Last time I checked your spells.. I don't think they were Leakless or if they even were MUI.
However now I will test how they look ingame, as I believe Bribe has checked the triggers already.

EDIT: Hmm, either I am mistaken of who you are, or you have stolen the spells.
I've seen these spells way before 2010, but maybe that is just me.

EDIT 2: Hmm, hell what do I know.
However I'll rate this 3/5.
 

Bribe

Code Moderator
Level 50
Joined
Sep 26, 2009
Messages
9,464
To let you know, for reference, version tracking has nothing to do with percentage but, believe it or not, based on version. A version indexed "0.01" usually indicates the first version of a beta draft.

I don't know how he's indexing or why he chose 0.01, but the spells are what they need to be and meet the standards of approved resources.
 
Level 1
Joined
Jan 1, 2013
Messages
3
hi..i just downloaded your spell into my map & i tried eternal winter spell

but when i cast it, the sphere always go to the center of the map wherever i cast it....
 
Top