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

Earth's Rampage v1.1a

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
Original Idea goes to gumx
He requested it at Orthane's Spell Workshop, I did the request.
I just added some touches of my own.

Description:
The caster taps into the tectonic energy beneath the earth, summoning forth multiple waves of pure-earth-energy lines in front of him, after which he reaches for his inner power, stomping with all his might, he summons a spiral made of the earth's energy.

Triggers:

  • ER Setup
    • Events
      • Time - Elapsed game time is 0.00 seconds
    • Conditions
    • Actions
      • -------- Configurables: --------
      • -------- ---------------------------------------------------- --------
      • -------- Number of stomps per wave per level: --------
      • Set ER_StompNumber[1] = 5
      • Set ER_StompNumber[2] = 6
      • Set ER_StompNumber[3] = 7
      • Set ER_StompNumber[4] = 8
      • -------- Number of waves per level: --------
      • Set ER_StompWaveNumber[1] = 6
      • Set ER_StompWaveNumber[2] = 7
      • Set ER_StompWaveNumber[3] = 8
      • Set ER_StompWaveNumber[4] = 9
      • -------- Amount of damage each stomp inflicts per level: --------
      • Set ER_StompDamage[1] = 50.00
      • Set ER_StompDamage[2] = 100.00
      • Set ER_StompDamage[3] = 150.00
      • Set ER_StompDamage[4] = 200.00
      • -------- Range of damage the stomps reach per level: --------
      • Set ER_StompAoE[1] = 200.00
      • Set ER_StompAoE[2] = 300.00
      • Set ER_StompAoE[3] = 400.00
      • Set ER_StompAoE[4] = 450.00
      • -------- Distance from the caster in which the stomps are created: --------
      • Set ER_StompIncrementDist[1] = 200.00
      • Set ER_StompIncrementDist[2] = 250.00
      • Set ER_StompIncrementDist[3] = 300.00
      • Set ER_StompIncrementDist[4] = 350.00
      • -------- ---------------------------------------------------- --------
      • -------- Spirals: --------
      • -------- Number of elements per spire: --------
      • Set ER_SpireElementNum[1] = 7
      • Set ER_SpireElementNum[2] = 8
      • Set ER_SpireElementNum[3] = 9
      • Set ER_SpireElementNum[4] = 10
      • -------- Number of spires: --------
      • Set ER_SpireNum[1] = 4
      • Set ER_SpireNum[2] = 5
      • Set ER_SpireNum[3] = 6
      • Set ER_SpireNum[4] = 7
      • -------- How far the spiiral is created from the caster: --------
      • Set ER_SpiralDistance[1] = 200.00
      • Set ER_SpiralDistance[2] = 250.00
      • Set ER_SpiralDistance[3] = 300.00
      • Set ER_SpiralDistance[4] = 350.00
      • -------- How far each spire are apart from each other: --------
      • Set ER_SpireDistance[1] = 50.00
      • Set ER_SpireDistance[2] = 60.00
      • Set ER_SpireDistance[3] = 67.00
      • Set ER_SpireDistance[4] = 75.00
      • -------- How much the spres curve: --------
      • Set ER_SpireCurve[1] = 9.00
      • Set ER_SpireCurve[2] = 10.00
      • Set ER_SpireCurve[3] = 11.00
      • Set ER_SpireCurve[4] = 12.00
      • -------- How much damage is inflicted by each element of the spire: --------
      • Set ER_SpireDamage[1] = 50.00
      • Set ER_SpireDamage[2] = 75.00
      • Set ER_SpireDamage[3] = 100.00
      • Set ER_SpireDamage[4] = 125.00
      • -------- The range the damage reaches: --------
      • Set ER_SpiralRangeDamage[1] = 200.00
      • Set ER_SpiralRangeDamage[2] = 300.00
      • Set ER_SpiralRangeDamage[3] = 400.00
      • Set ER_SpiralRangeDamage[4] = 450.00
      • -------- ---------------------------------------------------- --------
      • -------- End Configurables: --------



  • ER Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Earth's Rampage
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • ER_MaxIndex Equal to 0
        • Then - Actions
          • Trigger - Turn on ER Loop <gen>
        • Else - Actions
      • Set ER_MaxIndex = (ER_MaxIndex + 1)
      • Unit - Make ER_Caster[ER_MaxIndex] Invulnerable
      • Set ER_Caster[ER_MaxIndex] = (Triggering unit)
      • Set ER_ControlPlayer[ER_MaxIndex] = (Owner of ER_Caster[ER_MaxIndex])
      • Set ER_FinalReal[ER_MaxIndex] = 0.00
      • Set ER_Counter[ER_MaxIndex] = 0
      • Set ER_Counter2[ER_MaxIndex] = 0
      • Set ER_Level = (Level of Earth's Rampage for ER_Caster[ER_MaxIndex])



  • ER Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer ER_CurrentIndex) from 1 to ER_MaxIndex, do (Actions)
        • Loop - Actions
          • Set ER_Counter[ER_CurrentIndex] = (ER_Counter[ER_CurrentIndex] + 1)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ER_Counter[ER_CurrentIndex] Equal to 33
            • Then - Actions
              • Set ER_Facing[ER_CurrentIndex] = (Facing of ER_Caster[ER_CurrentIndex])
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ER_Counter2[ER_CurrentIndex] Equal to ER_StompWaveNumber[ER_Level]
                • Then - Actions
                  • Set ER_SomePoint = (Position of ER_Caster[ER_CurrentIndex])
                  • For each (Integer ER_TempInt2[1]) from 1 to ER_SpireElementNum[ER_Level], do (Actions)
                    • Loop - Actions
                      • For each (Integer ER_TempInt2[2]) from 1 to ER_SpireNum[ER_Level], do (Actions)
                        • Loop - Actions
                          • Unit - Create 1 ER_Dummy for ER_ControlPlayer[ER_CurrentIndex] at (ER_SomePoint offset by (ER_SpiralDistance[ER_Level] + (ER_SpireDistance[ER_Level] x (Real(ER_TempInt2[1])))) towards (((360.00 / (Real(ER_SpireNum[ER_Level]))) x (Real(ER_TempInt2[2]))) + (ER_SpireCurve[ER_Level] x (Real(ER_TempInt2[1])))) degrees) facing Default building facing degrees
                          • Set ER_SomeUnit = (Last created unit)
                          • Set ER_DummyPoint = (Position of ER_SomeUnit)
                          • Set ER_DummyGroup = (Units within ER_SpiralRangeDamage[ER_Level] of ER_DummyPoint matching (((Matching unit) belongs to an enemy of ER_ControlPlayer[ER_CurrentIndex]) Equal to True))
                          • Unit Group - Pick every unit in ER_DummyGroup and do (Actions)
                            • Loop - Actions
                              • Unit - Cause ER_Caster[ER_CurrentIndex] to damage (Picked unit), dealing ER_SpireDamage[ER_Level] damage of attack type Normal and damage type Normal
                          • Custom script: call RemoveLocation(udg_ER_DummyPoint)
                          • Custom script: call DestroyGroup(udg_ER_DummyGroup)
                  • -------- Recycling --------
                  • Custom script: call RemoveLocation(udg_ER_SomePoint)
                  • Custom script: call DestroyGroup(udg_ER_DummyGroup)
                  • Custom script: call RemoveLocation(udg_ER_TempPoint)
                  • Set ER_Caster[ER_CurrentIndex] = ER_Caster[ER_MaxIndex]
                  • Set ER_ControlPlayer[ER_CurrentIndex] = ER_ControlPlayer[ER_MaxIndex]
                  • Set ER_Counter2[ER_CurrentIndex] = ER_Counter2[ER_MaxIndex]
                  • Set ER_Counter[ER_CurrentIndex] = ER_Counter[ER_MaxIndex]
                  • Set ER_MaxIndex = (ER_MaxIndex - 1)
                  • Set ER_CurrentIndex = (ER_CurrentIndex - 1)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • ER_MaxIndex Equal to 0
                    • Then - Actions
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
                • Else - Actions
                  • For each (Integer ER_TempInt) from 1 to ER_StompNumber[ER_Level], do (Actions)
                    • Loop - Actions
                      • Set ER_SomePoint = (Position of ER_Caster[ER_CurrentIndex])
                      • Set ER_TempReal = (ER_TempReal + ER_StompIncrementDist[ER_Level])
                      • Set ER_TempPoint = (ER_SomePoint offset by ER_TempReal towards ER_Facing[ER_CurrentIndex] degrees)
                      • Unit - Create 1 ER_Dummy for ER_ControlPlayer[ER_CurrentIndex] at ER_TempPoint facing Default building facing degrees
                      • Set ER_SomeUnit = (Last created unit)
                      • Set ER_AoE = ER_StompAoE[ER_Level]
                      • Set ER_DummyPoint = (Position of ER_SomeUnit)
                      • Set ER_DummyGroup = (Units within ER_AoE of ER_DummyPoint matching (((Matching unit) belongs to an enemy of ER_ControlPlayer[ER_CurrentIndex]) Equal to True))
                      • Unit Group - Add ER_SomeUnit to ER_DummyGroup
                      • Unit Group - Pick every unit in ER_DummyGroup and do (Actions)
                        • Loop - Actions
                          • Unit - Cause ER_Caster[ER_CurrentIndex] to damage (Picked unit), dealing ER_StompDamage[ER_Level] damage of attack type Chaos and damage type Divine
                      • Custom script: call RemoveLocation(udg_ER_TempPoint)
                      • Custom script: call RemoveLocation(udg_ER_DummyPoint)
                      • Custom script: call RemoveLocation(udg_ER_SomePoint)
                      • Custom script: call DestroyGroup(udg_ER_DummyGroup)
              • Set ER_TempReal = 0.00
              • Set ER_Counter[ER_CurrentIndex] = 0
              • Set ER_Counter2[ER_CurrentIndex] = (ER_Counter2[ER_CurrentIndex] + 1)
            • Else - Actions


CREDITS:
Tank-Commander : Initial Helping with the Triggers
gumx : idea and concept



Changelog

Version 1.1a
-Caster is no longer de-selected upon casting

Version 1.1
-Made ER_ControlPlayer arrays, so now both are support MUI
-Spell now stores the facing of the caster in a variable
-Removed the timed life of the dummy unit
-No longer destroys non-existent groups
-cleaned other stuff

Version 1.0e
-Removed leaks after every iteration
-Made caster vulnerable while still unselectable, since he is on some kind of rampage.

Version 1.0d
-Removed the dummy-creation-offset leak.
-Removed the ER_Dummy and ER_StartPoint arrays, I turned them into the ER_SomeUnit and ER_SomePoint variable respectively.
-Removed the visibility of the dummy unit.
-Loaded the value of the ability's level into the Cast trigger instead of the loop.
-Deleted the extra actions of removing the caster from selection.
-Removed the action that removes the dummy from the group.

Version 1.0c
-Removed some leaks

Version 1.0b
Tweaked the triggers a little bit

Version 1.0a
-Uploaded the Spell


Keywords:
Earth, earth, Earth's Rampage, War Stomp spell, line war stomp, linear effects, spiral, MasterTrainer, spelll
Contents

Earth's Rampage (Map)

Reviews
12th Dec 2015 IcemanBo: Too long as NeedsFix. Rejected. Purgeandfire; 29th Aug 2014 Latest review (short): http://www.hiveworkshop.com/forums/2579640-post60.html BPower 16.03.2014...
Level 13
Joined
Jul 16, 2012
Messages
679
Do this in your other UNIT GROUP

You must save the Picked unit in a variable

so just like this
  • Unit Group - Pick every unit in ER_DummyGroup and do (Actions)
    • Loop - Actions
      • Set Temp_Unit = Picked unit
      • Unit - Cause ER_Caster[ER_CurrentIndex] to damage Temp_Unit, dealing ER_SpireDamage[ER_Level] damage of attack type Normal and damage type Normal
EDIT:

You forgot this on your loop

  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  • If - Conditions
    • ER_MaxIndex Equal to 0
  • Then - Actions
    • Trigger - Turn off this trigger
  • Else - Actions
 
Level 29
Joined
Oct 24, 2012
Messages
6,543
@deathismyfriend how do I remove the leak then? I need suggestions...

Same as any other location / point.

Do this.

  • Set tempPointOffset = (ER_SomePoint offset by (ER_SpiralDistance[ER_Level] + (ER_SpireDistance[ER_Level] x (Real(ER_TempInt2[1]))))
  • Custom script: // Then use the point in your action.
  • Custom script: //Then remove.
  • Custom script: call RemoveLocation( udg_tempPointOffset)
 
Level 20
Joined
Apr 14, 2012
Messages
2,901
Same as any other location / point.

Do this.

  • Set tempPointOffset = (ER_SomePoint offset by (ER_SpiralDistance[ER_Level] + (ER_SpireDistance[ER_Level] x (Real(ER_TempInt2[1]))))
  • Custom script: // Then use the point in your action.
  • Custom script: //Then remove.
  • Custom script: call RemoveLocation( udg_tempPointOffset)

Thanks man, will do.

Do this in your other UNIT GROUP

You must save the Picked unit in a variable

so just like this
  • Unit Group - Pick every unit in ER_DummyGroup and do (Actions)
    • Loop - Actions
      • Set Temp_Unit = Picked unit
      • Unit - Cause ER_Caster[ER_CurrentIndex] to damage Temp_Unit, dealing ER_SpireDamage[ER_Level] damage of attack type Normal and damage type Normal
EDIT:

You forgot this on your loop

  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  • If - Conditions
    • ER_MaxIndex Equal to 0
  • Then - Actions
    • Trigger - Turn off this trigger
  • Else - Actions

I can put the Temp_Unit, but the turning off trigger is already part of the code. Now either you meant this loop:
For each (Integer ER_TempInt2[1]) from 1 to ER_SpireElementNum[ER_Level], do (Actions)
Loop - Actions
For each (Integer ER_TempInt2[2]) from 1 to ER_SpireNum[ER_Level], do (Actions)
Loop - Actions
Unit - Create 1 ER_Dummy for ER_ControlPlayer[ER_CurrentIndex] at (ER_SomePoint offset by (ER_SpiralDistance[ER_Level] + (ER_SpireDistance[ER_Level] x (Real(ER_TempInt2[1])))) towards (((360.00 / (Real(ER_SpireNum[ER_Level]))) x (Real(ER_TempInt2[2]))) + (ER_SpireCurve[ER_Level] x (Real(ER_TempInt2[1])))) degrees) facing Default building facing degrees
Set ER_SomeUnit = (Last created unit)
Set ER_DummyPoint = (Position of ER_SomeUnit)
Set ER_DummyGroup = (Units within ER_SpiralRangeDamage[ER_Level] of ER_DummyPoint matching (((Matching unit) belongs to an enemy of ER_ControlPlayer[ER_CurrentIndex]) Equal to True))
Unit Group - Pick every unit in ER_DummyGroup and do (Actions)
Loop - Actions
Unit - Cause ER_Caster[ER_CurrentIndex] to damage (Picked unit), dealing ER_SpireDamage[ER_Level] damage of attack type Normal and damage type Normal
Custom script: call RemoveLocation(udg_ER_DummyPoint)
Custom script: call DestroyGroup(udg_ER_DummyGroup)
or this one:
  • For each (Integer ER_CurrentIndex) from 1 to ER_MaxIndex, do (Actions)
    • Loop - Actions
      • Set ER_Counter[ER_CurrentIndex] = (ER_Counter[ER_CurrentIndex] + 1

Which is it? :)
 

Kazeon

Hosted Project: EC
Level 33
Joined
Oct 12, 2011
Messages
3,449
Execution looks horrible. As far as I see, the caster takes damage too. And the stomp is not stopped after the caster has died. Channeling would be better though.

  • Set ER_SomeUnit = (Last created unit)
If that unit is used to avoid location beyond map bounds, then you should manually check the map bound instead, not by creating a unit:
  • ((Playable map area) contains (Center of (Playable map area))) Equal to (==) True
I think that condition is good enough for GUI.
So you can remove that dummy unit from your spell.

Also improve the tooltip a bit. Currently, I don't have idea what does the spell do?

Also triggers in your description is different from your trigger in map. Please fix, so people wont make a wrong review.

EDIT:
After further understanding, I know what are you doing with those dummy unit. :ogre_icwydt:
Actually, dummy unit is totally unneeded for your spell sir, you could use:
  • Special Effect - Create a special effect at (Center of (Playable map area)) using Abilities\Spells\Human\ThunderClap\ThunderClapCaster.mdl
for the special effect

And
  • Set ER_DummyPoint = (Position of ER_SomeUnit)
could be replaced with
  • Set ER_TempPoint = (ER_SomePoint offset by ER_TempReal towards ER_Facing[ER_CurrentIndex] degrees)
since they are totally a same. ANd again, you don't need that dummy unit.
 
Level 20
Joined
Apr 14, 2012
Messages
2,901
Execution looks horrible. As far as I see, the caster takes damage too. And the stomp is not stopped after the caster has died. Channeling would be better though.

  • Set ER_SomeUnit = (Last created unit)
If that unit is used to avoid location beyond map bounds, then you should manually check the map bound instead, not by creating a unit:
  • ((Playable map area) contains (Center of (Playable map area))) Equal to (==) True
I think that condition is good enough for GUI.
So you can remove that dummy unit from your spell.

Also improve the tooltip a bit. Currently, I don't have idea what does the spell do?

Also triggers in your description is different from your trigger in map. Please fix, so people wont make a wrong review.

EDIT:
After further understanding, I know what are you doing with those dummy unit. :ogre_icwydt:
Actually, dummy unit is totally unneeded for your spell sir, you could use:
  • Special Effect - Create a special effect at (Center of (Playable map area)) using Abilities\Spells\Human\ThunderClap\ThunderClapCaster.mdl
for the special effect

And
  • Set ER_DummyPoint = (Position of ER_SomeUnit)
could be replaced with
  • Set ER_TempPoint = (ER_SomePoint offset by ER_TempReal towards ER_Facing[ER_CurrentIndex] degrees)
since they are totally a same. ANd again, you don't need that dummy unit.

Thanks for the corrections :)
Damn there are a lot of things I need to learn about spells. Guess I'm too excited.
 
Review

  • This spell is almost on its way to approval!
  • Still need to fix the leak in this line:
    • Unit - Create 1 ER_Dummy for ER_ControlPlayer[ER_CurrentIndex] at (ER_SomePoint offset by (ER_SpiralDistance[ER_Level] + (ER_SpireDistance[ER_Level] x (Real(ER_TempInt2[1])))) towards (((360.00 / (Real(ER_SpireNum[ER_Level]))) x (Real(ER_TempInt2[2]))) + (ER_SpireCurve[ER_Level] x (Real(ER_TempInt2[1])))) degrees) facing Default building facing degrees
    If you fix it, make sure you update the triggers in the main post.
  • Dalvengyr mentioned some good points.

Otherwise, it looks pretty good.
 
Top