Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
Raises two hurricans which are spinning around each other, moving every enemy unit around with them, the closer the faster. Additional the Twister throws up stones or water fountains from the ground up in the sky which damage enemies on impact.
-------- Here we set the chance to spawn a stone in percentage. Every loop instance there is a chance to spawn a stone here for example 10 + ( 5*lvl ) %. --------
Set TW_StoneChance[TW_TempInt] = (10 + (TW_Level x 5))
Set TW_group = (Units within TW_AoE[1] of TW_Loc[4] matching ((((Matching unit) is A ground unit) Equal to True) and ((((Matching unit) has buff Unverwundbar) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Matching unit) is A structure) Equa
Unit Group - Pick every unit in TW_group and do (Actions)
Loop - Actions
Set TW_Loc[1] = (Position of (Picked unit))
Set TW_Real[6] = ((((Distance between TW_Loc[1] and TW_Loc[4]) - (2.00 x (Distance between TW_Loc[1] and TW_Loc[4]))) + 550.00) / 35.00)
Set TW_Loc[2] = (TW_Loc[1] offset by TW_Real[6] towards (Angle from TW_Loc[1] to TW_Loc[4]) degrees)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Terrain pathing at TW_Loc[2] of type Walkability is off) Equal to False
Set TW_StoneHeight[((TW_StoneTempInt x 2) + 1)] = (((4.00 x TW_StoneHeight[(TW_StoneTempInt x 2)]) / TW_StoneDistance[((TW_StoneTempInt x 2) + 1)]) x ((TW_StoneDistance[((TW_StoneTempInt x 2) + 1)] - TW_StoneDistance[(TW_StoneTempInt x 2)]) x (TW_StoneDistance[(TW_StoneTempInt x 2)] / TW_StoneDistance[((TW_S
Animation - Change TW_Stone[TW_StoneTempInt] flying height to TW_StoneHeight[((TW_StoneTempInt x 2) + 1)] at 0.00
Set TW_StoneDistance[(TW_StoneTempInt x 2)] = (TW_StoneDistance[(TW_StoneTempInt x 2)] - TW_StoneMoveSpeed[TW_StoneTempInt])
Set TW_Loc[1] = (Position of TW_Stone[TW_StoneTempInt])
Special Effect - Destroy TW_StoneEffect[TW_StoneTempInt]
Unit - Remove TW_Stone[TW_StoneTempInt] from the game
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
WaterLandBoolean[TW_StoneTempInt] Equal to False
Then - Actions
Special Effect - Create a special effect at TW_Loc[1] using TW_effects[2]
Special Effect - Destroy (Last created special effect)
Else - Actions
Special Effect - Create a special effect at TW_Loc[1] using TW_effects[8]
Special Effect - Destroy (Last created special effect)
Set TW_group = (Units within TW_AoE[2] of TW_Loc[1] matching ((((Matching unit) is A ground unit) Equal to True) and ((((Matching unit) has buff Unverwundbar) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Matching unit) is A structure) Equa
Unit Group - Pick every unit in TW_group and do (Actions)
Loop - Actions
Unit - Cause TW_caster_Convert[TW_StoneTempInt] to damage (Picked unit), dealing TW_StoneDamage_Convert[TW_StoneTempInt] damage of attack type Chaos and damage type Normal
Custom script: call DestroyGroup (udg_TW_group)
Set TW_StoneIndex[TW_loop2_int] = TW_StoneIndex[TW_StoneIndexSize]
Set TW_StoneIndex[TW_StoneIndexSize] = TW_StoneTempInt
-------- The units which will be pulled by the twister and damaged. --------
Set TW_group = (Units within TW_AoE[1] of TW_Loc[4] matching ((((Matching unit) is A ground unit) Equal to True) and ((((Matching unit) has buff Unverwundbar) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Matching unit) is A structure) Equa
Unit Group - Pick every unit in TW_group and do (Actions)
Loop - Actions
-------- Current position of our pulled unit. --------
Set TW_Loc[1] = (Position of (Picked unit))
Set TW_Real[6] = ((((Distance between TW_Loc[1] and TW_Loc[4]) - (2.00 x (Distance between TW_Loc[1] and TW_Loc[4]))) + 550.00) / 35.00)
-------- The position the unit gets moved to. --------
Set TW_Loc[2] = (TW_Loc[1] offset by TW_Real[6] towards (Angle from TW_Loc[1] to TW_Loc[4]) degrees)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Terrain pathing at TW_Loc[2] of type Walkability is off) Equal to False
-------- Setting up his height via a parabola formula. --------
Set TW_StoneHeight[((TW_StoneTempInt x 2) + 1)] = (((4.00 x TW_StoneHeight[(TW_StoneTempInt x 2)]) / TW_StoneDistance[((TW_StoneTempInt x 2) + 1)]) x ((TW_StoneDistance[((TW_StoneTempInt x 2) + 1)] - TW_StoneDistance[(TW_StoneTempInt x 2)]) x (TW_StoneDistance[(TW_StoneTempInt x 2)] / TW_StoneDistance[((TW_S
Animation - Change TW_Stone[TW_StoneTempInt] flying height to TW_StoneHeight[((TW_StoneTempInt x 2) + 1)] at 0.00
-------- Decreasing the distance to the targeted point. --------
Set TW_StoneDistance[(TW_StoneTempInt x 2)] = (TW_StoneDistance[(TW_StoneTempInt x 2)] - TW_StoneMoveSpeed[TW_StoneTempInt])
-------- So if the stone has reached the target point we set up a variable with his current position. --------
Set TW_Loc[1] = (Position of TW_Stone[TW_StoneTempInt])
-------- Removing the handles. --------
Special Effect - Destroy TW_StoneEffect[TW_StoneTempInt]
Unit - Remove TW_Stone[TW_StoneTempInt] from the game
-------- Creating and destroying the special effect. --------
-------- Checking which type the missile has been. --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
WaterLandBoolean[TW_StoneTempInt] Equal to False
Then - Actions
Special Effect - Create a special effect at TW_Loc[1] using TW_effects[2]
Special Effect - Destroy (Last created special effect)
Else - Actions
Special Effect - Create a special effect at TW_Loc[1] using TW_effects[8]
Special Effect - Destroy (Last created special effect)
-------- Picking the units which will be damaged. --------
Set TW_group = (Units within TW_AoE[2] of TW_Loc[1] matching ((((Matching unit) is A ground unit) Equal to True) and ((((Matching unit) has buff Unverwundbar) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Matching unit) is A structure) Equa
Unit Group - Pick every unit in TW_group and do (Actions)
Loop - Actions
Unit - Cause TW_caster_Convert[TW_StoneTempInt] to damage (Picked unit), dealing TW_StoneDamage_Convert[TW_StoneTempInt] damage of attack type Chaos and damage type Normal
Custom script: call DestroyGroup (udg_TW_group)
-------- Reducing the Index. --------
Set TW_StoneIndex[TW_loop2_int] = TW_StoneIndex[TW_StoneIndexSize]
Set TW_StoneIndex[TW_StoneIndexSize] = TW_StoneTempInt
-------- If there is no twister nor a stone we turn off this trigger. --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
TW_IndexSize Equal to 0
TW_StoneIndexSize Equal to 0
Then - Actions
Trigger - Turn off (This trigger)
Else - Actions
CREDITS goes to Hanky for the Dynamic Index system, D4RK_GANDALF for the tree destroy technique and to the creator of the DUMMY.mdx model.
And finally to me BlackHawk or to my ingame account, S.O.A.D_RoXXX.
Spell should be MUI, Leakless.
Update v1.2: Used 2D-arrays to remove some variables, optimized the code for a better performance, removed the charging energy and added a water/land effect.
19:14, 1st Dec 2009
The_Reborn_Devil:
The triggering looks pretty good and there are no leaks.
It's also MUI and pretty original.
Status: Approved
Rating: Useful/Recommended
I feel that you have two different tornados and you make actions for each one of them, make small loops instead to reduce the amount of lines, havent really checked all the code but that was what I thought of first, also this will make the spell able to create infitive of tornadoes
Unfortunately i have no clue how to do it, maybe with hashtables but i am not skilled in them. But i think it is no big deal because it would just be a few lines less, and creating more tornados would probably lagg the game to hell ^^
yeah it is possible with hashtables but if you could index the tornadoes in a different index then it would have been possible I think but as said, requires two different indexes at the same time or maybe you can shadow globals in the loop
this spell is great (coding and appearance [personally I don't like the lightning effect at the end but since it is VERY EASY to change it....]) but are you aware of the fact that you are using 50!!!!!! globals?????
well....customizability is win but this seems like an overkill
I really don't want you to remake this spell since it will take a lot of clicks but for the next time:
it's possible to use something like 2d-arrays as long as you have one dimension fixed
e.g. if you want to store 2 things for every instance things would look like this:
set i = 1
set x[i*2] = 1
set x[i*2+1] = 2
set i = 2
set x[i*2] = 3
set x[i*2+1] = 4
set i = 3
set x[i*2] = 5
set x[i*2+1] = 6
...
this way you would have an array looking like this:
1 2
3 4
5 6
...
but there also is a tutorial about it (didn't read it though)
Ah allright thanks that would be exactly what i need. Will take a look at the tutorial and practising a bit with it after i got my exams done in school :/
I see your point , but you can reduce the spell very much, there are three options you can disable: 1. the stones 2. the lightning 3. the destroying of trees
Hmmm is my englisch that bad xDD. I tried to explain that you can disable a lot of functions for the spell, if it seems a little bit overfilled. For example the stones which are spawnend during the spell, or the lightning spiral which appears at the end.
So you can customize the spell for your needs, you only need to change the boolean value.
Oh wow, this spell is Sexy. I really love it man, awesome job. 5/5. In all honesty, I'm currently learning how to make advanced spells (As well as trying to make something MUI and using Hash Tables) So I'm not going to bother trying to give you tips, seeing your THAT MUCH better than me .
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.