• 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!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

Weeds V1.10

Another Plant-Orientated spell, I couldn't help but make it when I had the idea

Weeds:

Learn: Creates seeds which will absorb enemy's hitpoints to grow bigger, upon reaching full size the plant will start attacking a specfic enemy dealing heavy damage to that particular targets.
Level 1: 4 Seeds, 7 Seconds duration, 120 drain damage per second, 300 AOE.
Level 2: 5 Seeds, 9 Seconds duration, 150 drain damage per second, 400 AOE.
Level 3: 6 Seeds, 11 Seconds duration, 180 drain damage per second, 500 AOE.

Level 1: Creates seeds which will absorb enemy's hitpoints to grow bigger, upon reaching full size the plant will start attacking a specfic enemy dealing heavy damage to that particular targets.
Level 1: 4 Seeds, 7 Seconds duration, 120 drain damage per second, 300 AOE.

Level 2: Creates seeds which will absorb enemy's hitpoints to grow bigger, upon reaching full size the plant will start attacking a specfic enemy dealing heavy damage to that particular targets.
Level 2: 5 Seeds, 9 Seconds duration, 150 drain damage per second, 400 AOE.

Level 3: Creates seeds which will absorb enemy's hitpoints to grow bigger, upon reaching full size the plant will start attacking a specfic enemy dealing heavy damage to that particular targets.
Level 3: 6 Seeds, 11 Seconds duration, 180 drain damage per second, 500 AOE.



- Heavily Configurable
- 2 effects on ememies
| - Aoe drain
| - Specific targetting attack
- Slightly random in effect
- Growing plants



  • Weeds Config
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- Do not touch --------
      • Hashtable - Create a hashtable
      • Set WD_Hash = (Last created hashtable)
      • -------- ------ --------
      • -------- Determines how far the seeds can be "thrown" --------
      • Set WD_AoeBase = 300.00
      • Set WD_AoePerLevel = 100.00
      • -------- Determines the attack damage of a fully grown plant --------
      • Set WD_AttackDamageBase = 25.00
      • Set WD_AttackDamagePerLevel = 15.00
      • -------- Determines the area the plant can drain from while growing --------
      • Set WD_DrainAoeBase = 200.00
      • Set WD_DrainAoePerLevel = 100.00
      • -------- Determines the damage of the draining ( / 0.03 to get dps) --------
      • Set WD_DrainDamageBase = 0.25
      • Set WD_DrainDamagePerLevel = 0.25
      • -------- Determines how long each plant lasts for --------
      • Set WD_DurationBase = 5.00
      • Set WD_DurationPerLevel = 2.00
      • -------- Determines how fast each plant will grow --------
      • Set WD_GrowthSpeedBase = 0.15
      • Set WD_GrowthSpeedPerLevel = 0.00
      • -------- Determines how many seeds will be thrown --------
      • Set WD_SeedsBase = 3.00
      • Set WD_SeedsPerLevel = 1.00
      • -------- Determines how fast the seeds fly through the air --------
      • Set WD_FlyingSpeed = 5.00
      • -------- Determines how high the seeds travel --------
      • Set WD_HeightMultiplyer = 1.00
      • -------- Determines how large the plants start off at (%) --------
      • Set WD_StartSize = 10.00
      • -------- Determines how large the plant will eventually become (%) --------
      • Set WD_MaxGrowth = 50.00
      • -------- Determines how many targets a plant can drain from at a time --------
      • Set WD_MaxDrainTargets = 5
      • -------- Determines the unit used as the seed --------
      • Set WD_Seed = Seed
      • -------- Determines the unit used as the weed --------
      • Set WD_Weed = Weed
      • -------- Determines the spell used the activate the triggers --------
      • Set WD_Spell = Weeds
      • -------- Determines the Sfx created when a plant hits its target --------
      • Set WD_AttackSfx = Abilities\Weapons\ChimaeraAcidMissile\ChimaeraAcidMissile.mdl
      • -------- Determines the Lightning used as the "drain" effect --------
      • Set WD_Lightning = DRAL
      • -------- Determines how high the lightning effect is --------
      • Set WD_LightningHeight = 10.00
  • Weeds Activation
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to WD_Spell
    • Actions
      • Set WD_U = (Triggering unit)
      • Set WD_TempReal = (Real((Level of WD_Spell for WD_U)))
      • Set WD_Angle = 0.00
      • Set WD_TempPoint = (Position of WD_U)
      • For each (Integer WD_I) from 1 to ((Integer(WD_SeedsBase)) + ((Integer(WD_SeedsPerLevel)) x (Level of WD_Spell for WD_U))), do (Actions)
        • Loop - Actions
          • Set WD_Angle = (WD_Angle + (360.00 / (WD_SeedsBase + (WD_SeedsPerLevel x WD_TempReal))))
          • Set WD_TempPoint2 = (WD_TempPoint offset by (Random real number between 50.00 and (WD_AoeBase + (WD_AoePerLevel x WD_TempReal))) towards 0.00 degrees)
          • Unit - Create 1 WD_Seed for (Owner of WD_U) at WD_TempPoint facing WD_Angle degrees
          • Set WD_TempU = (Last created unit)
          • Custom script: set udg_WD_UHandle = GetHandleId(udg_WD_TempU)
          • -------- Saving duration of the Weeds --------
          • Hashtable - Save (WD_DurationBase + (WD_DurationPerLevel x WD_TempReal)) as 0 of WD_UHandle in WD_Hash
          • -------- Saving the caster ID --------
          • Hashtable - Save Handle OfWD_U as 1 of WD_UHandle in WD_Hash
          • -------- Saving the attack damage of the Weeds --------
          • Hashtable - Save (WD_AttackDamageBase + (WD_AttackDamagePerLevel x WD_TempReal)) as 2 of WD_UHandle in WD_Hash
          • -------- Saving the Draining AOE --------
          • Hashtable - Save (WD_DrainAoeBase + (WD_DrainAoePerLevel x WD_TempReal)) as 3 of WD_UHandle in WD_Hash
          • -------- Saving the Draining Damage --------
          • Hashtable - Save (WD_DrainDamageBase + (WD_DrainDamagePerLevel x WD_TempReal)) as 4 of WD_UHandle in WD_Hash
          • -------- Saving the Speed of the Weeds Growing --------
          • Hashtable - Save (WD_GrowthSpeedBase + (WD_GrowthSpeedPerLevel x WD_TempReal)) as 5 of WD_UHandle in WD_Hash
          • -------- Saving the Stage ID --------
          • Hashtable - Save 1 as 6 of WD_UHandle in WD_Hash
          • -------- Saving the Distance to the landing point --------
          • Hashtable - Save (Distance between WD_TempPoint and WD_TempPoint2) as 7 of WD_UHandle in WD_Hash
          • Unit Group - Add WD_TempU to WD_WeedsGroup
          • Custom script: call RemoveLocation (udg_WD_TempPoint2)
      • Custom script: call RemoveLocation (udg_WD_TempPoint)
      • Trigger - Turn on Weeds Loop <gen>
  • Weeds Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in WD_WeedsGroup and do (Actions)
        • Loop - Actions
          • Set WD_U = (Picked unit)
          • Custom script: set udg_WD_UHandle = GetHandleId(udg_WD_U)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Load 6 of WD_UHandle from WD_Hash) Equal to 1
            • Then - Actions
              • Custom script: set udg_WD_TempX = GetUnitX(udg_WD_U)
              • Custom script: set udg_WD_TempY = GetUnitY(udg_WD_U)
              • Set WD_Angle = (Facing of WD_U)
              • Custom script: call SetUnitX(udg_WD_U, udg_WD_TempX + udg_WD_FlyingSpeed * Cos(udg_WD_Angle * bj_DEGTORAD))
              • Custom script: call SetUnitY(udg_WD_U, udg_WD_TempY + udg_WD_FlyingSpeed * Sin(udg_WD_Angle * bj_DEGTORAD))
              • -------- Loading Distance to landing point --------
              • Set WD_RealCache[1] = (Load 7 of WD_UHandle from WD_Hash)
              • -------- Loading Maximum height achieved in the arc --------
              • Set WD_RealCache[2] = (WD_RealCache[1] x WD_HeightMultiplyer)
              • -------- Loading the current distance travelled --------
              • Set WD_RealCache[3] = ((Load 9 of WD_UHandle from WD_Hash) + WD_FlyingSpeed)
              • -------- Saving the current distance travelled --------
              • Hashtable - Save WD_RealCache[3] as 9 of WD_UHandle in WD_Hash
              • Set WD_RealCache[4] = (((4.00 x WD_RealCache[2]) / WD_RealCache[1]) x ((WD_RealCache[3] / WD_RealCache[1]) x (WD_RealCache[1] - WD_RealCache[3])))
              • Animation - Change WD_U flying height to WD_RealCache[4] at 0.00
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • WD_RealCache[4] Less than 0.00
                • Then - Actions
                  • Unit - Kill WD_U
                  • Set WD_TempPoint = (Position of WD_U)
                  • Unit - Create 1 Weed for (Owner of WD_U) at WD_TempPoint facing WD_Angle degrees
                  • Set WD_TempU = (Last created unit)
                  • Custom script: set udg_WD_UHandleC = GetHandleId(udg_WD_TempU)
                  • Animation - Change WD_TempU's size to (WD_StartSize%, WD_StartSize%, WD_StartSize%) of its original size
                  • -------- Loading Duration of the Weeds --------
                  • Set WD_RealCache[5] = (Load 0 of WD_UHandle from WD_Hash)
                  • Unit - Add a WD_RealCache[5] second Generic expiration timer to WD_TempU
                  • Set WD_TempU2 = (Load 1 of WD_UHandle in WD_Hash)
                  • -------- Saving the caster ID --------
                  • Hashtable - Save Handle OfWD_TempU2 as 1 of WD_UHandleC in WD_Hash
                  • -------- Saving the caster ID --------
                  • Hashtable - Save Handle OfWD_TempU2 as 8 of WD_UHandleC in WD_Hash
                  • -------- Saving the attack damage of the Weeds --------
                  • Hashtable - Save (Load 2 of WD_UHandle from WD_Hash) as 2 of WD_UHandleC in WD_Hash
                  • -------- Saving the Draining AOE --------
                  • Hashtable - Save (Load 3 of WD_UHandle from WD_Hash) as 3 of WD_UHandleC in WD_Hash
                  • -------- Saving the Draining Damage --------
                  • Hashtable - Save (Load 4 of WD_UHandle from WD_Hash) as 4 of WD_UHandleC in WD_Hash
                  • -------- Saving the Speed of the Weeds Growing --------
                  • Hashtable - Save (Load 5 of WD_UHandle from WD_Hash) as 5 of WD_UHandleC in WD_Hash
                  • -------- Saving the Stage ID --------
                  • Hashtable - Save 2 as 6 of WD_UHandleC in WD_Hash
                  • Unit Group - Add WD_TempU to WD_WeedsGroup
                  • Hashtable - Clear all child hashtables of child WD_UHandle in WD_Hash
                  • Custom script: call RemoveLocation (udg_WD_TempPoint)
                • Else - Actions
            • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Or - Any (Conditions) are true
                • Conditions
                  • (Load 6 of WD_UHandle from WD_Hash) Equal to 2
                  • (Load 6 of WD_UHandle from WD_Hash) Equal to 3
                  • (Load 6 of WD_UHandle from WD_Hash) Equal to 4
              • Or - Any (Conditions) are true
                • Conditions
                  • (WD_U is dead) Equal to True
                  • ((Load 8 of WD_UHandle in WD_Hash) is dead) Equal to True
            • Then - Actions
              • For each (Integer WD_I) from 11 to ((Load 16 of WD_UHandle from WD_Hash) + 10), do (Actions)
                • Loop - Actions
                  • -------- Loading Lightning Draining effect and destroying it --------
                  • Lightning - Destroy (Load WD_I of WD_UHandle in WD_Hash)
              • Unit Group - Remove (Load 8 of WD_UHandle in WD_Hash) from WD_CurrentTargets
              • Unit - Kill WD_U
              • Unit Group - Remove WD_U from WD_WeedsGroup
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (WD_WeedsGroup is empty) Equal to True
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Load 7 of WD_UHandle from WD_Hash) Equal to 0.00
                • Then - Actions
                  • Unit - Hide WD_U
                • Else - Actions
              • Hashtable - Clear all child hashtables of child WD_UHandle in WD_Hash
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Load 6 of WD_UHandle from WD_Hash) Equal to 2
                • Then - Actions
                  • -------- Loading Current Target Count --------
                  • For each (Integer WD_I) from 11 to ((Load 16 of WD_UHandle from WD_Hash) + 10), do (Actions)
                    • Loop - Actions
                      • -------- Loading Lightning Draining effect and destroying it --------
                      • Lightning - Destroy (Load WD_I of WD_UHandle in WD_Hash)
                  • -------- Saving Current Target Count --------
                  • Hashtable - Save 0 as 16 of WD_UHandle in WD_Hash
                  • Set WD_TempPoint = (Position of WD_U)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Load 7 of WD_UHandle from WD_Hash) Greater than or equal to 50.00
                    • Then - Actions
                      • -------- Loading draining AOE --------
                      • Set WD_TempGroup = (Units within (Load 3 of WD_UHandle from WD_Hash) of WD_TempPoint)
                      • Unit Group - Pick every unit in WD_TempGroup and do (Actions)
                        • Loop - Actions
                          • Set WD_TempU = (Picked unit)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (WD_TempU is Magic Immune) Equal to False
                              • ((Unit-type of WD_TempU) is A structure) Equal to False
                              • (WD_TempU is A ground unit) Equal to True
                              • (WD_TempU is alive) Equal to True
                              • (WD_TempU belongs to an enemy of (Owner of WD_U)) Equal to True
                              • (Load 8 of WD_UHandle in WD_Hash) Equal to (Load 1 of WD_UHandle in WD_Hash)
                              • (WD_TempU is in WD_CurrentTargets) Equal to False
                            • Then - Actions
                              • -------- Saving Target ID --------
                              • Hashtable - Save Handle OfWD_TempU as 8 of WD_UHandle in WD_Hash
                              • -------- Saving Stage ID --------
                              • Hashtable - Save 3 as 6 of WD_UHandle in WD_Hash
                              • Unit Group - Add WD_TempU to WD_CurrentTargets
                            • Else - Actions
                      • Custom script: call DestroyGroup(udg_WD_TempGroup)
                    • Else - Actions
                      • Custom script: set udg_WD_TempZ = GetLocationZ(udg_WD_TempPoint) + udg_WD_LightningHeight
                      • Set WD_LightningCounter = 10
                      • -------- Loading draining AOE --------
                      • Set WD_TempGroup = (Units within (Load 3 of WD_UHandle from WD_Hash) of WD_TempPoint)
                      • Unit Group - Pick every unit in WD_TempGroup and do (Actions)
                        • Loop - Actions
                          • Set WD_TempU = (Picked unit)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (WD_TempU is Magic Immune) Equal to False
                              • ((Unit-type of WD_TempU) is A structure) Equal to False
                              • (WD_TempU is A ground unit) Equal to True
                              • (WD_TempU is alive) Equal to True
                              • (WD_TempU belongs to an enemy of (Owner of WD_U)) Equal to True
                              • WD_LightningCounter Less than (WD_MaxDrainTargets + 10)
                            • Then - Actions
                              • Set WD_LightningCounter = (WD_LightningCounter + 1)
                              • Set WD_TempPoint2 = (Position of WD_TempU)
                              • Custom script: set udg_WD_TempZ2 = GetLocationZ(udg_WD_TempPoint2) + udg_WD_LightningHeight
                              • Custom script: set udg_WD_TempLightning = AddLightningEx(udg_WD_Lightning, true, GetLocationX(udg_WD_TempPoint), GetLocationY(udg_WD_TempPoint), udg_WD_TempZ, GetLocationX(udg_WD_TempPoint2), GetLocationY(udg_WD_TempPoint2), udg_WD_TempZ2)
                              • -------- Saving Lightning ID --------
                              • Hashtable - Save Handle OfWD_TempLightning as WD_LightningCounter of WD_UHandle in WD_Hash
                              • -------- Saving Current Target Count --------
                              • Hashtable - Save ((Load 16 of WD_UHandle from WD_Hash) + 1) as 16 of WD_UHandle in WD_Hash
                              • Custom script: call RemoveLocation (udg_WD_TempPoint2)
                              • Unit - Cause (Load 1 of WD_UHandle in WD_Hash) to damage WD_TempU, dealing (Load 4 of WD_UHandle from WD_Hash) damage of attack type Spells and damage type Normal
                              • -------- Loading Current Growth --------
                              • Set WD_RealCache[5] = ((Load 7 of WD_UHandle from WD_Hash) + (Load 5 of WD_UHandle from WD_Hash))
                              • -------- Saving Current Growth --------
                              • Hashtable - Save WD_RealCache[5] as 7 of WD_UHandle in WD_Hash
                              • Animation - Change WD_U's size to (WD_RealCache[5]%, WD_RealCache[5]%, WD_RealCache[5]%) of its original size
                            • Else - Actions
                      • Custom script: call DestroyGroup(udg_WD_TempGroup)
                      • Custom script: call RemoveLocation (udg_WD_TempPoint)
                  • Custom script: call RemoveLocation (udg_WD_TempPoint)
                • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Load 6 of WD_UHandle from WD_Hash) Equal to 3
                • Then - Actions
                  • Set WD_TempPoint = (Position of WD_U)
                  • Set WD_TempPoint2 = (Position of (Load 8 of WD_UHandle in WD_Hash))
                  • Unit - Order WD_U to Move To WD_TempPoint2
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Distance between WD_TempPoint and WD_TempPoint2) Less than or equal to 50.00
                    • Then - Actions
                      • -------- Saving Animation Control --------
                      • Hashtable - Save 30 as 9 of WD_UHandle in WD_Hash
                      • -------- Saving Stage ID --------
                      • Hashtable - Save 4 as 6 of WD_UHandle in WD_Hash
                    • Else - Actions
                  • Custom script: call RemoveLocation(udg_WD_TempPoint2)
                  • Custom script: call RemoveLocation(udg_WD_TempPoint)
                • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Load 6 of WD_UHandle from WD_Hash) Equal to 4
                • Then - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Load 9 of WD_UHandle from WD_Hash) Greater than or equal to 30
                    • Then - Actions
                      • -------- Saving Animation Control --------
                      • Hashtable - Save 0 as 9 of WD_UHandle in WD_Hash
                      • Animation - Play WD_U's attack animation
                      • Set WD_TempU = (Load 8 of WD_UHandle in WD_Hash)
                      • -------- Loading Caster ID --------
                      • Set WD_TempU2 = (Load 1 of WD_UHandle in WD_Hash)
                      • -------- Loading Attack Damage --------
                      • Set WD_RealCache[6] = (Load 2 of WD_UHandle from WD_Hash)
                      • Unit - Cause WD_TempU2 to damage WD_TempU, dealing WD_RealCache[6] damage of attack type Spells and damage type Normal
                      • Special Effect - Create a special effect attached to the overhead of WD_TempU using WD_AttackSfx
                      • Special Effect - Destroy (Last created special effect)
                      • Set WD_TempPoint = (Position of WD_U)
                      • Set WD_TempPoint2 = (Position of (Load 8 of WD_UHandle in WD_Hash))
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Distance between WD_TempPoint and WD_TempPoint2) Greater than 50.00
                        • Then - Actions
                          • -------- Saving Stage ID --------
                          • Hashtable - Save 3 as 6 of WD_UHandle in WD_Hash
                        • Else - Actions
                      • Custom script: call RemoveLocation(udg_WD_TempPoint2)
                      • Custom script: call RemoveLocation(udg_WD_TempPoint)
                    • Else - Actions
                      • -------- Saving Animation Control --------
                      • Hashtable - Save ((Load 9 of WD_UHandle from WD_Hash) + 1) as 9 of WD_UHandle in WD_Hash
                • Else - Actions



-=V1.00=-
- Initial Upload
- Expect errors (yay)
-=V1.05=-
- Fixed Bug upon Weeds dying before they're fully grown (while growing)
-=V1.10=-
- Added documentation to hashtable loads
- No longer stores arc max height in a hashtable
- Prevented death animation on a plant that hasn't grown
- Saved Load X's in variables as appropriate


Give credits if you use this spell

Enjoy

Keywords:
Plant, Weed, Leech, Drain, Botanist, Growing, Flower, Night elf, Tree.
Contents

Weeds (Map)

Reviews
Good triggering and a unique spell. Approved. You might have one extra call RemoveLocation (udg_WD_TempPoint) in the looping trigger, check it. The tooltip could be improved a bit. 07:39, 24th Dec 2011 Pharaoh_: Hashtable - Save...

Moderator

M

Moderator

Reviewed by Maker, Weeds v1.1, 11th Jan 2012

Good triggering and a unique spell. Approved.

You might have one extra call RemoveLocation (udg_WD_TempPoint) in the looping trigger, check it. The tooltip could be improved a bit.

07:39, 24th Dec 2011
Pharaoh_:

  • Hashtable - Save (Distance between WD_TempPoint and WD_TempPoint2) as 7 of WD_UHandle in WD_Hash
  • Hashtable - Save ((Distance between WD_TempPoint and WD_TempPoint2) x WD_HeightMultiplyer) as 8 of WD_UHandle in WD_Hash
You don't have to save them individually, just load 7 of WD_UHandle and multiply it yourself in the looping trigger with WD_HeightMultiplier.

Prevent the death animation of the weeds when they find no target, because they are hardly visible themselves and their death effect is too abrupt (just hide them before killing them).

Save your load X in a variable and add documentation as to what you are loading plus it will make it more efficient, since some of them are used more than once.

Interesting spell.
 
Level 7
Joined
Oct 16, 2010
Messages
194
There is something wrong with it.
bla.jpg

The lightning is still there after a while. This happened when i casted it then the trees started growing. After the 2 trees near the units finished growing and exploded the two more half grown units will still be there. After a while the 2 units which havent finished growing exploded and the lightning effect is still there.
 
Level 7
Joined
Sep 2, 2011
Messages
349
This is a nice spell you have. I had fun casting the spell over and over again. I'm surprised that you make spells hella fast. I guess you're pretty inspired right now.

Rating: 4/5
It looks cool
Nice effect
Unique idea
Very creative
It still has errors
 
Top