Pritty good for a first spell, a bit long though. Heres some tips:
Try and compress your triggers, you have way to many, for loops save lots of space VS triggers. Your GiantRune Trigger, could have simply been apart of another trigger. Why do you want to compress triggers? Because triggers take large chunks of map space, 1 trigger is about 3kb empty, thats a good bit of space when you have tons of spells. Also, to many tirggers tends to get messy.
Leaks:
Not sure if you know, but every variable type (Leaving exception to reals and integers) leak. -This means that even though the variable isint used, its taking valuable space. How do you fix them? Well it depends on the variable type, use custom script to nullify things. (Timers, groups, and special effects are the largest leaks). If you nullify them, you good.
So say you wanted to stop your special effects leaking, you find your line:
For each (Integer A) from 1 to 22, do (Special Effect - Destroy HFSFX[(Integer A)])
And replace it with
For each (Integer A) from 1 to 22, do (Special Effect - Destroy HFSFX[(Integer A)])
That would probably reduce lag by about 20%. If a variable is not nullified, and you use the tirgger say twice, you have double the integers you need. (Except integers and reals).
Nullification bites down on lag, and usualy is the cause for about 90% of lag.
To nullify things just use custom script and:
set VARNAME = null
replacing varname with a variable (Except for reals or integers).
Also, watch out! If you nullify something BEFORE you destroy it, you will get HUGE lag. Much larger than if you just did nothing. Make SURE that the variable does not have any data when you destroy it.
IE Destroy the timer before you nullify it.
Btw, jass is very nice. It has local variables(So you dont need all thoes pestilential global variables) and you can multi-instance things with ease. Check out the tutorial section, Daelin has a great tutorial on jass.
"Dont be an ass, learn jass!"
-Kattana
Well i hope this helped,

.