• 🏆 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 Spellpack V1.2b

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
Earth Spellpack

This Spellpack conatains 4 spells, all based around Earth.

Sunder Earth

Sunder Earth is an ability which causes the targeted point to erupt, damaging all units within range and throwing them away from the targeted point. Upon landing, all affected units take extra damage.

Ritual of Chaos

Ritual of Chaos, is an ability which calls upon the Avatar of the Earth Mother to aid the caster in a devastating riutal. The ritual lasts 3 seconds, and the caster cannot be interrupted, except through death. While the ritual is being performed, random effects will occur around the caster and the Avatar, dealing damage to units near those effects.

Ruinous Trail

Ruinous Trail is an ability which makes the caster mark his current location. After 1.5 seconds an exploding trail appears there. This trail constantly moves towards the caster. Enemy units near the trail will be damaged, knocked away from it. The trail lasts 10 seconds.


Earth Rend

Earth Rend is an ability which, when cast, makes the caster dig underground over 1 second, sending boulders flying in all directions damaging units. After getting underground, the caster will take 0.5 seconds before charging 800 units toward the targeted area damaging units hit by the cracking earth and the boulders. At 800 units, he will re-emerge, damaging nearby units and sending 4 giant boulders in random directions.


[trigger=Sunder Earth Cast]Sunder Earth Cast
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Sunder Earth
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SE_Index1 Equal to 0
Then - Actions
Trigger - Turn on Sunder Earth Loop <gen>
Else - Actions
Set SE_Index1 = (SE_Index1 + 1)
Set SE_Index2 = (SE_Index2 + 1)
Set SE_Boolean[SE_Index2] = True
Set SE_Caster[SE_Index2] = (Triggering unit)
Set SE_MaxHeight[SE_Index2] = (Random real number between 500.00 and 650.00)
Set SE_MaxDistance[SE_Index2] = (Random real number between 600.00 and 700.00)
Set SE_CurrentDistance[SE_Index2] = 0.00
Set SE_Speed[SE_Index2] = 20.00
Set SE_Damage[SE_Index2] = ((30.00 x (Real((Level of (Ability being cast) for (Triggering unit))))) + 70.00)
Set SE_TargetLoc[SE_Index2] = (Target point of ability being cast)
Special Effect - Create a special effect at SE_TargetLoc[SE_Index2] using war3mapImported\NewDirtEXNofire.mdx
Special Effect - Destroy (Last created special effect)
Set SE_Targets[SE_Index2] = (Units within 400.00 of SE_TargetLoc[SE_Index2] matching ((((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True) and ((((Matching unit) has buff Sunder Earth ) Equal to False) and (((Matching unit) is alive) Equal to True))))
Unit Group - Pick every unit in SE_Targets[SE_Index2] and do (Actions)
Loop - Actions
Unit - Turn collision for (Picked unit) Off
Unit - Pause (Picked unit)
Unit - Add Storm Crow Form to (Picked unit)
Unit - Remove Storm Crow Form from (Picked unit)
Unit - Cause SE_Caster[SE_Index2] to damage (Picked unit), dealing SE_Damage[SE_Index2] damage of attack type Spells and damage type Normal[/trigger]

[trigger=Sunder Earth Loop]Sunder Earth Loop
Events
Time - Every 0.04 seconds of game time
Conditions
Actions
For each (Integer SE_Index3) from 1 to SE_Index2, do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SE_Boolean[SE_Index3] Equal to True
Then - Actions
Set SE_CurrentDistance[SE_Index3] = (SE_CurrentDistance[SE_Index3] + 20.00)
Set SE_CurrentHeight = (((4.00 x SE_MaxHeight[SE_Index3]) / SE_MaxDistance[SE_Index3]) x ((SE_MaxDistance[SE_Index3] - SE_CurrentDistance[SE_Index3]) x (SE_CurrentDistance[SE_Index3] / SE_MaxDistance[SE_Index3])))
Unit Group - Pick every unit in SE_Targets[SE_Index3] and do (Actions)
Loop - Actions
Set A_Temp_Loc = (Position of (Picked unit))
Set SE_TempAngle = (Angle from SE_TargetLoc[SE_Index3] to A_Temp_Loc)
Set A_Temp_Loc2 = (A_Temp_Loc offset by SE_Speed[SE_Index3] towards SE_TempAngle degrees)
Custom script: call RemoveLocation(udg_A_Temp_Loc)
Destructible - Pick every destructible within 250.00 of A_Temp_Loc2 and do (Actions)
Loop - Actions
Set A_Temp_Loc = (Position of (Picked destructible))
Unit - Create 1 Anti-Tree Dummy for (Owner of SE_Caster[SE_Index3]) at A_Temp_Loc facing Default building facing degrees
Unit - Order (Last created unit) to Harvest (Picked destructible)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Current order of (Last created unit)) Equal to (Order(harvest))
Then - Actions
Destructible - Kill (Picked destructible)
Unit - Remove (Last created unit) from the game
Else - Actions
Unit - Remove (Last created unit) from the game
Custom script: call RemoveLocation(udg_A_Temp_Loc)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Terrain pathing at A_Temp_Loc2 of type Flyability is off) Equal to False
Then - Actions
Unit - Move (Picked unit) instantly to A_Temp_Loc2
Else - Actions
Custom script: call RemoveLocation(udg_A_Temp_Loc)
Custom script: call RemoveLocation(udg_A_Temp_Loc2)
Animation - Change (Picked unit) flying height to SE_CurrentHeight at 0.00
Special Effect - Create a special effect attached to the origin of (Picked unit) using Objects\Spawnmodels\Undead\ImpaleTargetDust\ImpaleTargetDust.mdl
Special Effect - Destroy (Last created special effect)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SE_CurrentDistance[SE_Index3] Greater than or equal to SE_MaxDistance[SE_Index3]
Then - Actions
Unit Group - Pick every unit in SE_Targets[SE_Index3] and do (Actions)
Loop - Actions
Unit - Turn collision for (Picked unit) On
Animation - Change (Picked unit) flying height to (Default flying height of (Picked unit)) at 0.00
Unit - Cause SE_Caster[SE_Index3] to damage (Picked unit), dealing SE_Damage[SE_Index3] damage of attack type Spells and damage type Normal
Set A_Temp_Loc = (Position of (Picked unit))
Special Effect - Create a special effect attached to the origin of (Picked unit) using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
Special Effect - Destroy (Last created special effect)
Unit - Unpause (Picked unit)
Unit - Remove Sunder Earth buff from (Picked unit)
Custom script: call RemoveLocation(udg_SE_TargetLoc[udg_SE_Index3])
Custom script: call DestroyGroup(udg_SE_Targets[udg_SE_Index3])
Set SE_Boolean[SE_Index3] = False
Set SE_Index1 = (SE_Index1 - 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SE_Index1 Equal to 0
Then - Actions
Set SE_Index2 = 0
Trigger - Turn off (This trigger)
Else - Actions
Else - Actions
Else - Actions
[/trigger]
[trigger=Ritual of Chaos Cast]Ritual of Chaos Cast
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Ritual of Chaos
Actions
Unit - Order (Triggering unit) to Stop
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
RC_Index1 Equal to 0
Then - Actions
Trigger - Turn on Ritual of Chaos Loop <gen>
Else - Actions
Set RC_Index1 = (RC_Index1 + 1)
Set RC_Index2 = (RC_Index2 + 1)
Set RC_Boolean[RC_Index2] = True
Set RC_Caster[RC_Index2] = (Triggering unit)
Set RC_CasterLoc[RC_Index2] = (Position of (Triggering unit))
Set RC_Range[RC_Index2] = 650.00
Set RC_EffectAoe[RC_Index2] = 150.00
Set RC_Duration[RC_Index2] = 3.00
Set RC_TempReal = ((Facing of (Triggering unit)) - 180.00)
Set RC_Counter[RC_Index2] = 1
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
RC_TempReal Less than 0.00
Then - Actions
Set RC_TempReal = (RC_TempReal + 360.00)
Else - Actions
Set RC_CenterPoint[RC_Index2] = (RC_CasterLoc[RC_Index2] offset by 80.00 towards RC_TempReal degrees)
Set RC_SpiritLoc[RC_Index2] = (RC_CasterLoc[RC_Index2] offset by 160.00 towards RC_TempReal degrees)
Unit - Create 1 Avatar of the Earth Mother for (Owner of (Triggering unit)) at RC_SpiritLoc[RC_Index2] facing RC_TempReal degrees
Animation - Change (Last created unit)'s vertex coloring to (58.82%, 58.82%, 39.21%) with 5.00% transparency
Animation - Play (Last created unit)'s spell slam animation
Set RC_Spirit[RC_Index2] = (Last created unit)
Unit - Pause (Last created unit)
Set RC_Damage[RC_Index2] = (((Real((Level of (Ability being cast) for (Triggering unit)))) x 5.00) + 10.00)
Countdown Timer - Start RC_Timer[RC_Index2] as a One-shot timer that will expire in 3.00 seconds[/trigger]

[trigger=Ritual of Chaos Loop]Ritual of Chaos Loop
Events
Time - Every 0.04 seconds of game time
Conditions
Actions
For each (Integer RC_Index3) from 1 to RC_Index2, do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
RC_Boolean[RC_Index3] Equal to True
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(RC_Caster[RC_Index3] is dead) Equal to False
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Or - Any (Conditions) are true
Conditions
((Elapsed time for RC_Timer[RC_Index3]) Greater than or equal to 1.16) and ((Elapsed time for RC_Timer[RC_Index3]) Less than 1.19)
((Elapsed time for RC_Timer[RC_Index3]) Greater than or equal to 2.32) and ((Elapsed time for RC_Timer[RC_Index3]) Less than 2.35)
Then - Actions
Animation - Play RC_Caster[RC_Index3]'s spell slam animation
Animation - Play RC_Spirit[RC_Index3]'s spell slam animation
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Elapsed time for RC_Timer[RC_Index3]) Greater than or equal to (0.12 x (Real(RC_Counter[RC_Index3])))) and ((Elapsed time for RC_Timer[RC_Index3]) Less than RC_Duration[RC_Index3])
Then - Actions
Set RC_Counter[RC_Index3] = (RC_Counter[RC_Index3] + 1)
Set A_Temp_Loc = (RC_CenterPoint[RC_Index3] offset by (Random real number between 0.00 and RC_Range[RC_Index3]) towards (Random angle) degrees)
Set A_Temp_Group = (Units within RC_EffectAoe[RC_Index3] of A_Temp_Loc matching (((Matching unit) belongs to an enemy of (Owner of RC_Caster[RC_Index3])) Equal to True))
Unit Group - Pick every unit in A_Temp_Group and do (Actions)
Loop - Actions
Unit - Cause RC_Caster[RC_Index3] to damage (Picked unit), dealing RC_Damage[RC_Index3] damage of attack type Spells and damage type Normal
Special Effect - Create a special effect at A_Temp_Loc using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
Special Effect - Destroy (Last created special effect)
Custom script: call DestroyGroup(udg_A_Temp_Group)
Custom script: call RemoveLocation(udg_A_Temp_Loc)
Set A_Temp_Loc = (RC_CenterPoint[RC_Index3] offset by (Random real number between 0.00 and RC_Range[RC_Index3]) towards (Random angle) degrees)
Set A_Temp_Group = (Units within RC_EffectAoe[RC_Index3] of A_Temp_Loc matching (((Matching unit) belongs to an enemy of (Owner of RC_Caster[RC_Index3])) Equal to True))
Unit Group - Pick every unit in A_Temp_Group and do (Actions)
Loop - Actions
Unit - Cause RC_Caster[RC_Index3] to damage (Picked unit), dealing RC_Damage[RC_Index3] damage of attack type Spells and damage type Normal
Special Effect - Create a special effect at A_Temp_Loc using Abilities\Spells\Undead\Impale\ImpaleHitTarget.mdl
Special Effect - Destroy (Last created special effect)
Custom script: call DestroyGroup(udg_A_Temp_Group)
Custom script: call RemoveLocation(udg_A_Temp_Loc)
Set A_Temp_Loc = (RC_CenterPoint[RC_Index3] offset by (Random real number between 0.00 and RC_Range[RC_Index3]) towards (Random angle) degrees)
Set A_Temp_Group = (Units within RC_EffectAoe[RC_Index3] of A_Temp_Loc matching (((Matching unit) belongs to an enemy of (Owner of RC_Caster[RC_Index3])) Equal to True))
Unit Group - Pick every unit in A_Temp_Group and do (Actions)
Loop - Actions
Unit - Cause RC_Caster[RC_Index3] to damage (Picked unit), dealing RC_Damage[RC_Index3] damage of attack type Spells and damage type Normal
Special Effect - Create a special effect at A_Temp_Loc using Abilities\Spells\Other\Volcano\VolcanoDeath.mdl
Special Effect - Destroy (Last created special effect)
Custom script: call RemoveLocation(udg_A_Temp_Loc)
Custom script: call DestroyGroup(udg_A_Temp_Group)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Elapsed time for RC_Timer[RC_Index3]) Greater than or equal to 3.00
Then - Actions
Special Effect - Create a special effect at RC_SpiritLoc[RC_Index3] using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
Special Effect - Destroy (Last created special effect)
Special Effect - Create a special effect at RC_SpiritLoc[RC_Index3] using Abilities\Spells\Undead\Impale\ImpaleHitTarget.mdl
Special Effect - Destroy (Last created special effect)
Special Effect - Create a special effect at RC_SpiritLoc[RC_Index3] using Abilities\Spells\Other\Volcano\VolcanoDeath.mdl
Special Effect - Destroy (Last created special effect)
Animation - Reset RC_Caster[RC_Index3]'s animation
Unit - Remove RC_Spirit[RC_Index3] from the game
Custom script: call RemoveLocation(udg_RC_CasterLoc[udg_RC_Index3])
Custom script: call RemoveLocation(udg_RC_CenterPoint[udg_RC_Index3])
Custom script: call RemoveLocation(udg_RC_SpiritLoc[udg_RC_Index3])
Unit - Unpause RC_Caster[RC_Index3]
Set RC_Boolean[RC_Index3] = False
Set RC_Index1 = (RC_Index1 - 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
RC_Index1 Equal to 0
Then - Actions
Set RC_Index2 = 0
Trigger - Turn off (This trigger)
Else - Actions
Else - Actions
Else - Actions
Unit - Remove RC_Spirit[RC_Index3] from the game
Custom script: call RemoveLocation(udg_RC_CasterLoc[udg_RC_Index3])
Custom script: call RemoveLocation(udg_RC_CenterPoint[udg_RC_Index3])
Custom script: call RemoveLocation(udg_RC_SpiritLoc[udg_RC_Index3])
Set RC_Boolean[RC_Index3] = False
Set RC_Index1 = (RC_Index1 - 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
RC_Index1 Equal to 0
Then - Actions
Set RC_Index2 = 0
Trigger - Turn off (This trigger)
Else - Actions
Else - Actions
[/trigger]
[trigger=Ruinous Trail]Ruinous Trail Cast
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Ruinous Trail
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
RT_Index1 Equal to 0
Then - Actions
Trigger - Turn on Ruinous Trail Loop <gen>
Else - Actions
Set RT_Index1 = (RT_Index1 + 1)
Set RT_Index2 = (RT_Index2 + 1)
Set RT_Boolean[RT_Index2] = True
Set RT_Caster[RT_Index2] = (Triggering unit)
Set RT_CasterLoc[RT_Index2] = (Position of (Triggering unit))
Set RT_TrailLoc[RT_Index2] = (Position of (Triggering unit))
Set RT_Delay[RT_Index2] = 1.50
Set RT_Endtime[RT_Index2] = 11.50
Set RT_Counter[RT_Index2] = 1
Set RT_Damage[RT_Index2] = 45.00
Set RT_KnockbackDistance[RT_Index2] = 70.00
Countdown Timer - Start RT_Timer[RT_Index2] as a One-shot timer that will expire in 11.50 seconds[/trigger]

[trigger=Ruinous Trail Loop]Ruinous Trail Loop
Events
Time - Every 0.04 seconds of game time
Conditions
Actions
For each (Integer RT_Index3) from 1 to RT_Index2, do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(RT_Caster[RT_Index3] is alive) Equal to True
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
RT_Boolean[RT_Index3] Equal to True
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Elapsed time for RT_Timer[RT_Index3]) Greater than or equal to RT_Delay[RT_Index3]
Then - Actions
Set RT_Boolean[RT_Index3] = False
Set RT_TrailActive[RT_Index3] = True
Set RT_Counter[RT_Index3] = 12
Else - Actions
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
RT_TrailActive[RT_Index3] Equal to True
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Elapsed time for RT_Timer[RT_Index3]) Greater than or equal to (0.12 x (Real(RT_Counter[RT_Index3])))
Then - Actions
Set RT_Counter[RT_Index3] = (RT_Counter[RT_Index3] + 1)
Custom script: call RemoveLocation(udg_RT_CasterLoc[udg_RT_Index3])
Set RT_CasterLoc[RT_Index3] = (Position of RT_Caster[RT_Index3])
Set RT_TempReal = (Angle from RT_TrailLoc[RT_Index3] to RT_CasterLoc[RT_Index3])
Set RT_TempReal2 = (((Real(RT_Counter[RT_Index3])) x 36.00) - 432.00)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
RT_TempReal2 Greater than (Distance between RT_TrailLoc[RT_Index3] and RT_CasterLoc[RT_Index3])
Then - Actions
Set RT_TempReal2 = (Distance between RT_CasterLoc[RT_Index3] and RT_TrailLoc[RT_Index3])
Else - Actions
Set A_Temp_Loc = (RT_TrailLoc[RT_Index3] offset by RT_TempReal2 towards RT_TempReal degrees)
Destructible - Pick every destructible within 250.00 of A_Temp_Loc2 and do (Actions)
Loop - Actions
Set A_Temp_Loc2 = (Position of (Picked destructible))
Unit - Create 1 Anti-Tree Dummy for (Owner of RC_Caster[RC_Index3]) at A_Temp_Loc facing Default building facing degrees
Unit - Order (Last created unit) to Attack (Picked destructible)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Current order of (Last created unit)) Equal to (Order(harvest))
Then - Actions
Destructible - Kill (Picked destructible)
Unit - Remove (Last created unit) from the game
Else - Actions
Unit - Remove (Last created unit) from the game
Custom script: call RemoveLocation(udg_A_Temp_Loc2)
Special Effect - Create a special effect at A_Temp_Loc using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
Special Effect - Destroy (Last created special effect)
Special Effect - Create a special effect at A_Temp_Loc using Abilities\Spells\Other\Volcano\VolcanoDeath.mdl
Special Effect - Destroy (Last created special effect)
Set A_Temp_Group = (Units within 200.00 of A_Temp_Loc matching (((Matching unit) belongs to an enemy of (Owner of RT_Caster[RT_Index3])) Equal to True))
For each (Integer Integer) from 1 to (Random integer number between 2 and 3), do (Actions)
Loop - Actions
Unit - Create 1 Rock Dummy for (Owner of RT_Caster[RT_Index3]) at A_Temp_Loc facing Default building facing degrees
Animation - Change (Last created unit)'s size to (20.00%, 20.00%, 20.00%) of its original size
Set Boulder = (Last created unit)
Set BoulderAngle = (Random angle)
Set BoulderDamage = (RT_Damage[RT_Index3] x 0.80)
Set BoulderDistance = (Random real number between 225.00 and 375.00)
Set BoulderHeight = (Random real number between 150.00 and 400.00)
Set BoulderSpeed = (Random real number between 6.00 and 12.00)
Set BoulderAoE = 100.00
Trigger - Run Boulder Activated <gen> (checking conditions)
Custom script: call RemoveLocation(udg_A_Temp_Loc)
Unit Group - Pick every unit in A_Temp_Group and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Picked unit) is dead) Equal to False
Then - Actions
Set A_Temp_Loc = (Position of (Picked unit))
Unit - Cause RT_Caster[RT_Index3] to damage (Picked unit), dealing RT_Damage[RT_Index3] damage of attack type Spells and damage type Normal
Set A_Temp_Loc2 = (A_Temp_Loc offset by RT_KnockbackDistance[RT_Index3] towards (Angle from RT_TrailLoc[RT_Index3] to A_Temp_Loc) degrees)
Unit - Move (Picked unit) instantly to A_Temp_Loc2
Custom script: call RemoveLocation(udg_A_Temp_Loc)
Custom script: call RemoveLocation(udg_A_Temp_Loc2)
Else - Actions
Custom script: call DestroyGroup(udg_A_Temp_Group)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Or - Any (Conditions) are true
Conditions
RT_Counter[RT_Index3] Equal to 83
(Elapsed time for RT_Timer[RT_Index3]) Greater than or equal to RT_Endtime[RT_Index3]
Then - Actions
Custom script: call RemoveLocation(udg_RT_CasterLoc[udg_RT_Index3])
Custom script: call RemoveLocation(udg_RT_TrailLoc[udg_RT_Index3])
Set RT_TrailActive[RT_Index3] = False
Set RT_Index1 = (RT_Index1 + 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
RT_Index1 Equal to 0
Then - Actions
Set RT_Index2 = 0
Trigger - Turn off (This trigger)
Else - Actions
Else - Actions
Else - Actions
Else - Actions
Else - Actions
Custom script: call RemoveLocation(udg_RT_CasterLoc[udg_RT_Index3])
Custom script: call RemoveLocation(udg_RT_TrailLoc[udg_RT_Index3])
Set RT_Boolean[RT_Index3] = False
Set RT_TrailActive[RT_Index3] = False
Set RT_Index1 = (RT_Index1 + 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
RT_Index1 Equal to 0
Then - Actions
Set RT_Index2 = 0
Trigger - Turn off (This trigger)
Else - Actions
[/trigger]
[trigger=Earth Rend]Earth Rend Cast
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Earth Rend
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
ER_Index1 Equal to 0
Then - Actions
Trigger - Turn on Earth Rend Loop <gen>
Else - Actions
Set ER_Index1 = (ER_Index1 + 1)
Set ER_Index2 = (ER_Index2 + 1)
Set ER_Boolean[ER_Index2] = True
Set ER_Caster[ER_Index2] = (Triggering unit)
Set ER_CasterLoc[ER_Index2] = (Position of (Triggering unit))
Set ER_CurrentHeight[ER_Index2] = 0.00
Set ER_Damage[ER_Index2] = (((Real((Level of (Ability being cast) for (Triggering unit)))) x 45.00) + 120.00)
Set ER_Range[ER_Index2] = 0.00
Set ER_MaxRange[ER_Index2] = 800.00
Set ER_DigTime[ER_Index2] = 1.00
Set ER_Delay[ER_Index2] = (ER_DigTime[ER_Index2] + 0.50)
Set ER_BigDamageRange[ER_Index2] = 400.00
Set ER_DamageRange[ER_Index2] = 250.00
Set ER_Speed[ER_Index2] = 30.00
Set A_Temp_Loc = (Target point of ability being cast)
Set ER_Angle[ER_Index2] = (Angle from ER_CasterLoc[ER_Index2] to A_Temp_Loc)
Unit - Order (Triggering unit) to Stop
Set ER_DamageableTargets[ER_Index2] = (Units within 1400.00 of A_Temp_Loc matching (((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True))
Unit - Turn collision for (Triggering unit) Off
Custom script: call RemoveLocation(udg_A_Temp_Loc)
Special Effect - Create a special effect at ER_CasterLoc[ER_Index2] using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
Special Effect - Destroy (Last created special effect)
Countdown Timer - Start ER_Timer[ER_Index2] as a One-shot timer that will expire in 2.50 seconds[/trigger]

[trigger=Earth Rend Loop]Earth Rend Loop
Events
Time - Every 0.04 seconds of game time
Conditions
Actions
For each (Integer ER_Index3) from 1 to ER_Index2, do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
ER_Boolean[ER_Index3] Equal to True
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Elapsed time for ER_Timer[ER_Index3]) Less than ER_DigTime[ER_Index3]
Then - Actions
Special Effect - Create a special effect at ER_CasterLoc[ER_Index3] using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
Special Effect - Destroy (Last created special effect)
Special Effect - Create a special effect at ER_CasterLoc[ER_Index3] using Abilities\Spells\Other\Volcano\VolcanoDeath.mdl
Special Effect - Destroy (Last created special effect)
Unit - Create 1 Rock Dummy for (Owner of ER_Caster[ER_Index3]) at ER_CasterLoc[ER_Index3] facing Default building facing degrees
Animation - Change (Last created unit)'s size to (20.00%, 20.00%, 20.00%) of its original size
Set Boulder = (Last created unit)
Set BoulderAngle = (Random angle)
Set BoulderDamage = (ER_Damage[ER_Index3] x 0.20)
Set BoulderDistance = (Random real number between 225.00 and 375.00)
Set BoulderHeight = (Random real number between 150.00 and 450.00)
Set BoulderSpeed = (Random real number between 6.00 and 12.00)
Set BoulderAoE = 50.00
Trigger - Run Boulder Activated <gen> (checking conditions)
Custom script: call RemoveLocation(udg_A_Temp_Loc)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Current flying height of ER_Caster[ER_Index3]) Less than 5000.00
Then - Actions
Unit - Add Storm Crow Form to ER_Caster[ER_Index3]
Unit - Remove Storm Crow Form from ER_Caster[ER_Index3]
Animation - Change ER_Caster[ER_Index3] flying height to 1000000.00 at 0.00
Set ER_Counter[ER_Index3] = 12
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Elapsed time for ER_Timer[ER_Index3]) Greater than or equal to ER_Delay[ER_Index3]
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
ER_Range[ER_Index3] Less than ER_MaxRange[ER_Index3]
Then - Actions
Set A_Temp_Loc = (Position of ER_Caster[ER_Index3])
Set A_Temp_Loc2 = (A_Temp_Loc offset by ER_Speed[ER_Index3] towards ER_Angle[ER_Index3] degrees)
Special Effect - Create a special effect at A_Temp_Loc using Abilities\Spells\Other\Volcano\VolcanoDeath.mdl
Special Effect - Destroy (Last created special effect)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Elapsed time for ER_Timer[ER_Index3]) Greater than or equal to ((Real(ER_Counter[ER_Index3])) x 0.12)
Then - Actions
Set ER_Counter[ER_Index3] = (ER_Counter[ER_Index3] + 1)
For each (Integer Integer) from 1 to 2, do (Actions)
Loop - Actions
Unit - Create 1 Rock Dummy for (Owner of ER_Caster[ER_Index3]) at A_Temp_Loc facing Default building facing degrees
Set Boulder = (Last created unit)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Integer Equal to 1
Then - Actions
Set BoulderAngle = (ER_Angle[ER_Index3] + 90.00)
Else - Actions
Set BoulderAngle = (ER_Angle[ER_Index3] - 90.00)
Set BoulderDamage = (ER_Damage[ER_Index3] / 3.00)
Set BoulderDistance = (Random real number between 200.00 and 400.00)
Set BoulderHeight = (Random real number between 100.00 and 550.00)
Set BoulderSpeed = (Random real number between 10.00 and 15.00)
Set BoulderAoE = 100.00
Trigger - Run Boulder Activated <gen> (checking conditions)
Else - Actions
Set A_Temp_Group = (Units within ER_DamageRange[ER_Index3] of A_Temp_Loc2 matching (((Matching unit) is in ER_DamageableTargets[ER_Index3]) Equal to True))
Unit Group - Pick every unit in A_Temp_Group and do (Actions)
Loop - Actions
Unit - Cause ER_Caster[ER_Index3] to damage (Picked unit), dealing ER_Damage[ER_Index3] damage of attack type Spells and damage type Normal
Unit Group - Remove (Picked unit) from ER_DamageableTargets[ER_Index3]
Custom script: call DestroyGroup(udg_A_Temp_Group)
Custom script: call RemoveLocation(udg_A_Temp_Loc)
Destructible - Pick every destructible within ER_DamageRange[ER_Index3] of A_Temp_Loc2 and do (Actions)
Loop - Actions
Set A_Temp_Loc = (Position of (Picked destructible))
Unit - Create 1 Anti-Tree Dummy for (Owner of ER_Caster[ER_Index3]) at A_Temp_Loc facing Default building facing degrees
Unit - Order (Last created unit) to Harvest (Picked destructible)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Current order of (Last created unit)) Equal to (Order(harvest))
Then - Actions
Destructible - Kill (Picked destructible)
Unit - Remove (Last created unit) from the game
Else - Actions
Unit - Remove (Last created unit) from the game
Custom script: call RemoveLocation(udg_A_Temp_Loc)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Terrain pathing at A_Temp_Loc2 of type Flyability is off) Equal to True
Then - Actions
Else - Actions
Unit - Move ER_Caster[ER_Index3] instantly to A_Temp_Loc2
Custom script: call RemoveLocation(udg_A_Temp_Loc)
Set ER_Range[ER_Index3] = (ER_Range[ER_Index3] + 24.00)
Else - Actions
Set A_Temp_Loc = (Position of ER_Caster[ER_Index3])
Set A_Temp_Group = (Units within ER_BigDamageRange[ER_Index3] of A_Temp_Loc matching (((Matching unit) belongs to an enemy of (Owner of ER_Caster[ER_Index3])) Equal to True))
Unit Group - Pick every unit in A_Temp_Group and do (Actions)
Loop - Actions
Unit - Cause ER_Caster[ER_Index3] to damage (Picked unit), dealing (ER_Damage[ER_Index3] x 2.00) damage of attack type Spells and damage type Normal
Custom script: call DestroyGroup(udg_A_Temp_Group)
Special Effect - Create a special effect at A_Temp_Loc using Abilities\Spells\Other\Volcano\VolcanoDeath.mdl
Special Effect - Destroy (Last created special effect)
For each (Integer Integer) from 1 to 4, do (Actions)
Loop - Actions
Unit - Create 1 Rock Dummy for (Owner of ER_Caster[ER_Index3]) at A_Temp_Loc facing Default building facing degrees
Animation - Change (Last created unit)'s size to (200.00%, 200.00%, 200.00%) of its original size
Set Boulder = (Last created unit)
Set BoulderAngle = (Random angle)
Set BoulderDamage = ((ER_Damage[ER_Index3] / 3.00) x 2.00)
Set BoulderDistance = (Random real number between 200.00 and 600.00)
Set BoulderSpeed = (Random real number between 15.00 and 25.00)
Set BoulderHeight = (Random real number between 100.00 and 700.00)
Set BoulderAoE = 250.00
Trigger - Run Boulder Activated <gen> (checking conditions)
Custom script: call RemoveLocation(udg_A_Temp_Loc)
Unit - Turn collision for ER_Caster[ER_Index3] On
Animation - Change ER_Caster[ER_Index3] flying height to 0.00 at 0.00
Set ER_Boolean[ER_Index3] = False
Set ER_Index1 = (ER_Index1 - 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
ER_Index1 Equal to 0
Then - Actions
Set ER_Index2 = 0
Trigger - Turn off (This trigger)
Else - Actions
Else - Actions
Else - Actions
[/trigger]
[trigger=Boulder Activated]Boulder Activated
Events
Conditions
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
B_Index1 Equal to 0
Then - Actions
Trigger - Turn on Boulder Movement <gen>
Else - Actions
Set B_Index1 = (B_Index1 + 1)
Set B_Index2 = (B_Index2 + 1)
Set B_Unit[B_Index2] = Boulder
Set B_Damage[B_Index2] = BoulderDamage
Set B_MaxDistance[B_Index2] = BoulderDistance
Set B_MaxHeight[B_Index2] = BoulderHeight
Set B_CurrentDistance[B_Index2] = 0.00
Set B_CurrentHeight[B_Index2] = 0.00
Set B_Speed[B_Index2] = BoulderSpeed
Set B_Angle[B_Index2] = BoulderAngle
Set B_AoE[B_Index2] = BoulderAoE
Unit Group - Add B_Unit[B_Index2] to B_Boulders[B_Index2][/trigger]

[trigger=Boulder Movement]Boulder Movement
Events
Time - Every 0.04 seconds of game time
Conditions
Actions
For each (Integer B_Index3) from 1 to B_Index2, do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(B_Unit[B_Index3] is in B_Boulders[B_Index3]) Equal to True
Then - Actions
Set B_CurrentDistance[B_Index3] = (B_CurrentDistance[B_Index3] + B_Speed[B_Index3])
Set B_CurrentHeight[B_Index3] = (((4.00 x B_MaxHeight[B_Index3]) / B_MaxDistance[B_Index3]) x ((B_MaxDistance[B_Index3] - B_CurrentDistance[B_Index3]) x (B_CurrentDistance[B_Index3] / B_MaxDistance[B_Index3])))
Animation - Change B_Unit[B_Index3] flying height to B_CurrentHeight[B_Index3] at 0.00
Set A_Temp_Loc = (Position of B_Unit[B_Index3])
Set A_Temp_Loc2 = (A_Temp_Loc offset by B_Speed[B_Index3] towards B_Angle[B_Index3] degrees)
Custom script: call RemoveLocation(udg_A_Temp_Loc)
Destructible - Pick every destructible within B_AoE[B_Index3] of A_Temp_Loc2 and do (Actions)
Loop - Actions
Set A_Temp_Loc = (Position of (Picked destructible))
Unit - Create 1 Anti-Tree Dummy for (Owner of B_Unit[B_Index3]) at A_Temp_Loc facing Default building facing degrees
Unit - Order (Last created unit) to Harvest (Picked destructible)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Current order of (Last created unit)) Equal to (Order(harvest))
Then - Actions
Destructible - Kill (Picked destructible)
Unit - Remove (Last created unit) from the game
Else - Actions
Unit - Remove (Last created unit) from the game
Custom script: call RemoveLocation(udg_A_Temp_Loc)
Unit - Move B_Unit[B_Index3] instantly to A_Temp_Loc2
Custom script: call RemoveLocation(udg_A_Temp_Loc2)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
B_CurrentDistance[B_Index3] Greater than or equal to B_MaxDistance[B_Index3]
Then - Actions
Set A_Temp_Loc = (Position of B_Unit[B_Index3])
Special Effect - Create a special effect at A_Temp_Loc using Abilities\Weapons\AncientProtectorMissile\AncientProtectorMissile.mdl
Special Effect - Destroy (Last created special effect)
Set A_Temp_Group = (Units within B_AoE[B_Index3] of A_Temp_Loc matching (((Matching unit) belongs to an enemy of (Owner of B_Unit[B_Index3])) Equal to True))
Unit Group - Pick every unit in A_Temp_Group and do (Unit - Cause B_Unit[B_Index3] to damage (Picked unit), dealing B_Damage[B_Index3] damage of attack type Normal and damage type Normal)
Custom script: call RemoveLocation(udg_A_Temp_Loc)
Custom script: call DestroyGroup(udg_A_Temp_Group)
Unit - Remove B_Unit[B_Index3] from the game
Unit Group - Remove B_Unit[B_Index3] from B_Boulders[B_Index3]
Set B_Index1 = (B_Index1 - 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
B_Index1 Equal to 0
Then - Actions
Set B_Index2 = 0
Trigger - Turn off (This trigger)
Else - Actions
Else - Actions
Else - Actions
[/trigger]


Changelog
Earth Spellpack V1.0 :
  • First Uploaded Spell

Earth Spellpack V1.1 :
  • Changed tree killing method.
  • Added loops to reduce script length and changed used integer to custom variable.
  • Changed base spell for Earth Rend to a channeling spell.
  • Separated variable for indexes e.g. ER_Index1, ER_Index2 etc.
  • Heavily reduced SFX on Earth Rend and reduced boulders created during charge by roughly two thirds.

Earth Spellpack V1.2 :
  • Added a more configurability to spells.
  • Changed all spells so as to have Channel as base ability.
  • Removed the level 5 damage equation - all spells now have a single equation.
  • Fixed a leak in Sunder Earth.



Credits!

To General Frank for his INCREDIBLE exploding earth model.

Keywords:
Earth spell pack, spell, pack, spell pack, Ruinous trail, trail, ruinous, Sunder, earth, sunder earth, ritual, of , chaos, ritual of, of chaos, ritual
Contents

Earth Spellpack (Map)

Reviews
12.12 IcemanBo: For long time as NeedsFix. Rejected. Bribe Set A_Temp_Loc = (Position of (Picked unit)) -> does not get removed, so there's a lot of memory leaks :O (Owner of (Triggering unit)) -> (Triggering player) (Elapsed time for...

Moderator

M

Moderator

12.12
IcemanBo: For long time as NeedsFix. Rejected.

Bribe

Set A_Temp_Loc = (Position of (Picked unit)) -> does not get removed, so there's a lot of memory leaks :O

(Owner of (Triggering unit)) -> (Triggering player)

(Elapsed time for RC_Timer[RC_Index3]) -> store this into a variable as you reference it a lot.

  • Set A_Temp_Loc = (RC_CenterPoint[RC_Index3] offset by (Random real number between 0.00 and RC_Range[RC_Index3]) towards (Random angle) degrees)
  • Set A_Temp_Group = (Units within RC_EffectAoe[RC_Index3] of A_Temp_Loc matching (((Matching unit) belongs to an enemy of (Owner of RC_Caster[RC_Index3])) Equal to true))
  • Unit Group - Pick every unit in A_Temp_Group and do (Actions)
    • Unit - Cause RC_Caster[RC_Index3] to damage (Picked unit) dealing RC_Damage[RC_Index3] damage of attack type Spells and damage type Normal
  • Special Effect - Create a special effect at A_Temp_Loc using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
  • Special Effect - Destroy (Last created special effect)
  • Custom script: call DestroyGroup(udg_A_Temp_Group)
  • Custom script: call RemoveLocation(udg_A_Temp_Loc)
  • Set A_Temp_Loc = (RC_CenterPoint[RC_Index3] offset by (Random real number between 0.00 and RC_Range[RC_Index3]) towards (Random angle) degrees)
  • Set A_Temp_Group = (Units within RC_EffectAoe[RC_Index3] of A_Temp_Loc matching (((Matching unit) belongs to an enemy of (Owner of RC_Caster[RC_Index3])) Equal to true))
  • Unit Group - Pick every unit in A_Temp_Group and do (Actions)
    • Unit - Cause RC_Caster[RC_Index3] to damage (Picked unit) dealing RC_Damage[RC_Index3] damage of attack type Spells and damage type Normal
  • Special Effect - Create a special effect at A_Temp_Loc using Abilities\Spells\Undead\Impale\ImpaleHitTarget.mdl
  • Special Effect - Destroy (Last created special effect)
  • Custom script: call DestroyGroup(udg_A_Temp_Group)
  • Custom script: call RemoveLocation(udg_A_Temp_Loc)
  • Set A_Temp_Loc = (RC_CenterPoint[RC_Index3] offset by (Random real number between 0.00 and RC_Range[RC_Index3]) towards (Random angle) degrees)
  • Set A_Temp_Group = (Units within RC_EffectAoe[RC_Index3] of A_Temp_Loc matching (((Matching unit) belongs to an enemy of (Owner of RC_Caster[RC_Index3])) Equal to true))
  • Unit Group - Pick every unit in A_Temp_Group and do (Actions)
    • Unit - Cause RC_Caster[RC_Index3] to damage (Picked unit) dealing RC_Damage[RC_Index3] damage of attack type Spells and damage type Normal
  • Special Effect - Create a special effect at A_Temp_Loc using Abilities\Spells\Other\Volcano\VolcanoDeath.mdl
  • Special Effect - Destroy (Last created special effect)
  • Custom script: call RemoveLocation(udg_A_Temp_Loc)
  • Custom script: call DestroyGroup(udg_A_Temp_Group)
^ Run this through a loop and avoid so much duplicate text.

Set RT_CasterLoc[RT_Index2] = (Position of (Triggering unit))
Set RT_TrailLoc[RT_Index2] = (Position of (Triggering unit))

^ Why duplicate the location?

  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • (Current order of (Last created unit)) Equal to (Order(harvest))
    • Then - Actions
      • Destructable - Kill (Picked destructible)
      • Unit - Remove (Last created unit) from the game
    • Else - Actions
      • Unit - Remove (Last created unit) from the game
In the above, you should move the "remove unit" line outside of the if-block, that way you only have to include it once instead of twice.
 
Is an ability....

Yes we know it's an ability, just remove this and go straight to:

"Causes the caster to"

-Earth Rend is a bit spammy in effects, maybe reduce the amount a little so it doesn't lag up slower computers, looks nice though. Same with Ruinous trail, you don't need the explosions to be so frequent - slow them down a bit.

-Ritual of Chaos is a too random to be effective imo, I used it right next to the ogres and it barely did any damage to them at max level because it missed too often.

Sunder Earth: This had to be my favorite in terms of usefulness even though it was overall the most simple
Effects: Nothing more then it needs to be - 4/5
Usefulness: This spell is great as it's multi-purpose - it can prevent a fleeing enemy, dealing massive damage to a group or even knock a unit down from a cliff to your position - 5/5

Ritual of Chaos: This spell was a bit meh as I had a hard time actually dealing damage with it, small enemies could be killed with it, but that was because it needed 1 hit to kill them - the larger Ogres prove that this spell isn't accurate enough to be useful in larger situations.
Effects: A bit spammy and random imo - 2/5
Usefulness: I explained in the overall review of this spell, it's like a step below normal AoE - 2/5

Ruinous Trail: This spell was simple in concept, but still useful. The delay for when the trail starts is a bit much, but this spell could easily be mixed with other spells to increase your damage output, and is simple to use in the right situation.
Effects: Reduce the rate at which the ground explodes, it starts to slow down the framerate a little - 2.5/5
Usefulness: It's simple and can easily be used - 4/5

Earth Rend: can tell you really wanted to make this eye-candy, from the explosions to the rocks going everywhere you went all out with this - which makes this the most laggy spell of the bunch, like I said with Ruinous Trail, reduce the rate of the explosions, you don't need so many of those per-second as you have. The delay makes it a bit of a challenge to time right, but that could be a plus to the spell as it could make a good ultimate, dealing massive damage but a challenge to time and use right.
Effects: As I said before, reduce the lag facter - 2.5/5
Usefulness: The delay makes it difficult to use, other then that it's a fancy shockwave spell - 3/5


Overall Triggering:
I looked it over pretty quickly and didn't notice any major errors or problems in it, you seem to know how to remove leaks and trigger MUI so It's fine here.

4.5/5


It lags a bit with a few of the spells, but other then that I don't any reason to reject it.
I vote approval
 
Last edited:
Level 3
Joined
Aug 11, 2010
Messages
40
Well I´ve tested the spells and i like the Earth Rend spell. But I´ve found out that if you start Ruinous Trail and then use Earth Rend you´ll get the damage from both, wich will lead to...

Massive Destruction!!!


Btw you should remove the "type reset thing". It doesn´t work. But it´s pretty cool when the new trees start to grow.

5/5 +rep
Keep up the good work! :goblin_good_job:
 
Level 19
Joined
Feb 4, 2009
Messages
1,313
really nice and unique spells

suggestions:

  • don't use an array as an index because arrays are slower
  • try to avoid selection stuff since it uses local player script and might cause desync in combination with other things
  • cut down the number of special effects (Earth Rend lags on my pc although it can run starcraft 2 on ultra)
  • instead of checking the type of an destructable you can create a hidden dummy unit with harvest ability and order it to attack a tree, then check the dummys order (if it is equal to "harvest" the destructable is a tree) and you should also check if the tree is dead already which will save lots of performance
  • you can avoid all pause unit actions and their bugs if you use channel as your base spell instead
  • instead of copy&pasting code 3-4 times you should use a loop (might even be faster since the game does not have to load that much code, also easier to modify and much more readable)
  • you don't have to change the value of your arrays to stuf flike 100, 999 or anything (this is just how many of them should be setted to the initial value (be careful with unitgroups))
  • to change a units flying height it does not have to have the storm crow form ability all the time (you can remove it directly after you added it and chaning flying height will still work)
  • why are you hiding and showing the hero in earth rend spell? to keep selection it would be enough to raise him miles up into the air
  • use a variable to check the time instead of a countdown timer
  • the avatar of earth mother dummy is selectable (add locust ability or at least change the peon icon)
  • your spells leak dummy units if spammed (see screenshots)
 

Attachments

  • bug1.jpg
    bug1.jpg
    413.8 KB · Views: 120
  • bug2.jpg
    bug2.jpg
    582.7 KB · Views: 119
Last edited:
Level 3
Joined
Jun 9, 2010
Messages
33
Thanks for the opinions all, and DarkGandalf, thanks for your list, I'll try to address each item on it.

  • don't use an array as an index because arrays are slower

So use a different variable for each index? Like ER_Index1, ER_Index2 etc.?

  • try to avoid selection stuff since it uses local player script and might cause desync in combination with other things

I was using that as I'm lazy and liked having the hero selected for me, still i'll remove it if it's better off that way.

  • cut down the number of special effects (Earth Rend lags on my pc although it can run starcraft 2 on ultra)

Yeah, I thought that I should, I'll cut Earth Rend down to 1 VolcanoDeath per loop, which should ease things up quite a bit.

  • instead of checking the type of an destructable you can create a hidden dummy unit with harvest ability and order it to attack a tree, then check the dummys order (if it is equal to "harvest" the destructable is a tree) and you should also check if the tree is dead already which will save lots of performance

I knew there was an easier way to kill trees!! Will do, thanks!

  • you can avoid all pause unit actions and their bugs if you use channel as your base spell instead

Well, Ritual of Chaos is the only one that would actually need that, and it's done on purpose, once you cast it, you HAVE to see it through till the end, death being the only way to stop it early.

  • instead of copy&pasting code 3-4 times you should use a loop (might even be faster since the game does not have to load that much code, also easier to modify and much more readable)

Done!

  • you don't have to change the value of your arrays to stuf flike 100, 999 or anything (this is just how many of them should be setted to the initial value (be careful with unitgroups))

Well that's the thing, I only realized I didn't have to AFTER I modified them, and after that I can't seem to reset them.

  • to change a units flying height it does not have to have the storm crow form ability all the time (you can remove it directly after you added it and chaning flying height will still work)

Yeah, I'm having a problem with that, as I was going to make the caster dig move underground in the first second of Earth Rend, but flying height refused to change, made it so that he kept storm crow form, and it didn't work so I forgot about it.

  • why are you hiding and showing the hero in earth rend spell? to keep selection it would be enough to raise him miles up into the air

True, I'll change that.

  • use a variable to check the time instead of a countdown timer

Why? It works fine and a variable has to be constantly updated, wouldn't a timer work better? (I know nothing of this so I'm probably wrong)

  • the avatar of earth mother dummy is selectable (add locust ability or at least change the peon icon)

I'd of sworn I'd given that dummy locust. Fixed.

  • your spells leak dummy units if spammed (see screenshots)

Oh god... Look, remember I defined the arrays for the variables (Ye I know, that was stupid)? Well, Earth rend makes a minimum of 63 Boulder dummies, and they are looped together, and Ruinous Trail makes a minimum of 167, and average of 250 boulder dummies. Now each dummy takes up 1 array slot so let's say you cast Ruinous trail 5 times, you will almost definetly exceed 999, which will then cause those problems.

To Greedforce: You have to type reset, not -reset, in case that's what you were typing.

Will update the pack after having made all the changes.
 
Last edited:
really nice and unique spells
you can avoid all pause unit actions and their bugs if you use channel as

so you're not using channel as a base... I suggest using channel as base spell for all since it will be easier to use it since you can have multiple channels in one hero... because some user might have hero spell he made and then puts it into a hero that has one of the skills in this pack that has the same base ability which will cause a bug...

ayway, AWESOME!
 
Level 3
Joined
Jun 9, 2010
Messages
33
So I should make all the spells have a channel ability as base? Will do!

Edit: I tried with Blizzard as base for Ritual of Chaos, but I think I'll need a non-targeting channel ability, and still have to pause him as i don't want the caster to be able to move when casting the spell.
 
Level 37
Joined
Mar 6, 2006
Messages
9,240
Sunder Earth:


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Level of (Ability being cast) for (Triggering unit)) Not equal to 5
Then - Actions
Set SE_Damage[SE_Index[2]] = ((30.00 x (Real((Level of (Ability being cast) for (Triggering unit))))) + 70.00)
Else - Actions
Set SE_Damage[SE_Index[2]] = 245.00


It results in: 100, 130, 160, 190, 245, 250, 280...maybe consider changing that. The damage equation is done having only 5 levels in mind. That goes for all spells.

Leak:
  • Unit Group - Pick every unit in SE_Targets[SE_Index[3]] and do (Actions)
    • Loop - Actions
      • Unit - Turn collision for (Picked unit) On
      • Animation - Change (Picked unit) flying height to (Default flying height of (Picked unit)) at 0.00
      • Unit - Cause SE_Caster[SE_Index[3]] to damage (Picked unit), dealing SE_Damage[SE_Index[3]] damage of attack type Spells and damage type Normal
      • [B]Set A_Temp_Loc = (Position of (Picked unit))[/B]
      • Special Effect - Create a special effect attached to the origin of (Picked unit) using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
      • Special Effect - Destroy (Last created special effect)
      • Unit - Unpause (Picked unit)
      • Unit - Remove Sunder Earth buff from (Picked unit)
I'd like to se the loop period set to 0.03 because 0.04 looks jerky to me. 0.04 period is only 25 fps. Same for all spells that involve moving objects.

Avoid using Integer A and Integer B in loops, they can bug. Use custom variable instead.

You could make the spells more easily configurable, use variables instead of hard-coded values in damage equations, distances, speeds, timers and so on.
 
Level 3
Joined
Jun 9, 2010
Messages
33
@ Maker: I did that If/Then/Else because I always have the last level of the spell do a little extra damage, and in this case that level is 5. As for the 0.04 periodic, I use it as it goes perfectly into 1 second, unlike 0.03, but that's personal preference, if it's generally better though, I will change it.

Updated the pack and added changelog.
 
Last edited:
Level 3
Joined
Jun 9, 2010
Messages
33
Yes we know it's an ability, just remove this and go straight to:

"Causes the caster to"

-Earth Rend is a bit spammy in effects, maybe reduce the amount a little so it doesn't lag up slower computers, looks nice though. Same with Ruinous trail, you don't need the explosions to be so frequent - slow them down a bit.

-Ritual of Chaos is a too random to be effective imo, I used it right next to the ogres and it barely did any damage to them at max level because it missed too often.

Sunder Earth: This had to be my favorite in terms of usefulness even though it was overall the most simple
Effects: Nothing more then it needs to be - 4/5
Usefulness: This spell is great as it's multi-purpose - it can prevent a fleeing enemy, dealing massive damage to a group or even knock a unit down from a cliff to your position - 5/5

Ritual of Chaos: This spell was a bit meh as I had a hard time actually dealing damage with it, small enemies could be killed with it, but that was because it needed 1 hit to kill them - the larger Ogres prove that this spell isn't accurate enough to be useful in larger situations.
Effects: A bit spammy and random imo - 2/5
Usefulness: I explained in the overall review of this spell, it's like a step below normal AoE - 2/5

Ruinous Trail: This spell was simple in concept, but still useful. The delay for when the trail starts is a bit much, but this spell could easily be mixed with other spells to increase your damage output, and is simple to use in the right situation.
Effects: Reduce the rate at which the ground explodes, it starts to slow down the framerate a little - 2.5/5
Usefulness: It's simple and can easily be used - 4/5

Earth Rend: can tell you really wanted to make this eye-candy, from the explosions to the rocks going everywhere you went all out with this - which makes this the most laggy spell of the bunch, like I said with Ruinous Trail, reduce the rate of the explosions, you don't need so many of those per-second as you have. The delay makes it a bit of a challenge to time right, but that could be a plus to the spell as it could make a good ultimate, dealing massive damage but a challenge to time and use right.
Effects: As I said before, reduce the lag facter - 2.5/5
Usefulness: The delay makes it difficult to use, other then that it's a fancy shockwave spell - 3/5


Overall Triggering:
I looked it over pretty quickly and didn't notice any major errors or problems in it, you seem to know how to remove leaks and trigger MUI so It's fine here.

4.5/5


It lags a bit with a few of the spells, but other then that I don't any reason to reject it.
I vote approval

Ritual of Chaos was meant more for waves of little enemies, not for 3-5 strong ones.

Have you downloaded the updated version? In that one Earth Rend is much lighter in terms of effects, and it's a bit more than fancy shockwave.

But thanks for the review, the 4/5 and the vote of approval.
 
So I should make all the spells have a channel ability as base? Will do!

Edit: I tried with Blizzard as base for Ritual of Chaos, but I think I'll need a non-targeting channel ability, and still have to pause him as i don't want the caster to be able to move when casting the spell.

I did not mean that you use a channeling ability as a base... I said use the Channel Ability, its a hero ability named Channel...

and please make a damage equation that supports any level of the ability...
 
Top