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

Sentry Rocks V1.00

  • Like
Reactions: Kam
I wanted to make something a bit more simple than some of my other spells

Sentry Rocks:

Learn:Creates pairs of rocks which orbit eachother and the caster, they will seek out enemies which come within a given radius of the rocks and fall on them dealing damage. Rocks last a few seconds

Level 1: Creates 4 pairs of rocks which orbit eachother and the caster, they will seek out enemies which come within a 300 radius of the rocks and fall on them dealing 200 damage each. Rocks last 7 seconds

Level 2: Creates 5 pairs of rocks which orbit eachother and the caster, they will seek out enemies which come within a 400 radius of the rocks and fall on them dealing 250 damage each. Rocks last 9 seconds

Level 3: Creates 6 pairs of rocks which orbit eachother and the caster, they will seek out enemies which come within a 400 radius of the rocks and fall on them dealing 300 damage each. Rocks last 11 seconds



- Heavily Configurable
- Eye candy (yay)
- Non-Aoe damage



  • Sentry Rocks Configuration
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- Do not touch --------
      • Hashtable - Create a hashtable
      • Set SR_Hash = (Last created hashtable)
      • -------- ----- --------
      • -------- Determines how fast the Rocks will get to their target --------
      • Set SR_MoveSpeedBase = 4.00
      • Set SR_MoveSpeedPerLevel = 1.00
      • -------- Determines how much damage the rocks will deal to their target --------
      • Set SR_RockDamageBase = 150.00
      • Set SR_RockDamagePerLevel = 50.00
      • -------- Determines the search radius of the Rocks --------
      • Set SR_RockSearchAoeBase = 200.00
      • Set SR_RockSearchAoePerLevel = 100.00
      • -------- Determines how many pairs of rocks will be created --------
      • Set SR_RocksBase = 3.00
      • Set SR_RocksPerLevel = 1.00
      • -------- Determines how long the rocks will last for --------
      • Set SR_DurationBase = 5.00
      • Set SR_DurationPerLevel = 2.00
      • -------- Constants --------
      • -------- Determines how fast the Rocks will fall --------
      • Set SR_RockFallSpeed = 20.00
      • -------- Determines how far from the caster the rocks will be created --------
      • Set SR_RockDistance = 200.00
      • -------- Determines the distance between the two revolving rocks in a pair --------
      • Set SR_RockSeperationDistance = 50.00
      • -------- Determines how fast the Cores spin around the caster --------
      • Set SR_RockSpinSpeed = 2.00
      • -------- Determines how fast the Rocks spin around their Core --------
      • Set SR_RockSpinSpeed2 = 5.00
      • -------- Determines how many rocks are in a pair --------
      • Set SR_RockPairCount = 2.00
      • -------- Determines how high the rocks are floating --------
      • Set SR_RockHeight = 300.00
      • -------- Determines how long the Summon Sfx will survive for --------
      • Set SR_SummonSFXDuration = 1.00
      • -------- Determines the spell that will be used --------
      • Set SR_Spell = Sentry Rocks
      • -------- Determines the unit that will be used as a rock --------
      • Set SR_Rock = Rock
      • -------- Determines the unit that will be used as a Core --------
      • Set SR_RockCore = RockCore
      • -------- Determines the unit that will be used as the summoning SFX --------
      • Set SR_SummonSFX = Rock Summon SFX
      • -------- Determines the explosion SFX --------
      • Set SR_CollisionSFX = Objects\Spawnmodels\NightElf\NEDeathSmall\NEDeathSmall.mdl
      • -------- Determines which lightning effect will be used to link the Rocks and their Core --------
      • Set SR_RockLinkLightning = CLPB
      • -------- ----- --------
  • Sentry Rocks Activation
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to SR_Spell
    • Actions
      • Set SR_U = (Triggering unit)
      • Set SR_TempPoint = (Position of SR_U)
      • Set SR_TempReal = (Real((Level of SR_Spell for SR_U)))
      • Set SR_Angle = 0.00
      • For each (Integer SR_I) from 1 to ((Integer(SR_RocksBase)) + ((Integer(SR_RocksPerLevel)) x (Level of SR_Spell for SR_U))), do (Actions)
        • Loop - Actions
          • Set SR_Angle = (SR_Angle + (360.00 / (SR_RocksBase + (SR_RocksPerLevel x SR_TempReal))))
          • Set SR_TempPoint2 = (SR_TempPoint offset by SR_RockDistance towards SR_Angle degrees)
          • Set SR_Angle2 = 0.00
          • Unit - Create 1 SR_RockCore for (Owner of SR_U) at SR_TempPoint2 facing Default building facing degrees
          • Set SR_TempU = (Last created unit)
          • Unit - Add a (SR_DurationBase + (SR_DurationPerLevel x SR_TempReal)) second Generic expiration timer to SR_TempU
          • Animation - Change SR_TempU flying height to SR_RockHeight at 0.00
          • For each (Integer SR_I2) from 1 to (Integer(SR_RockPairCount)), do (Actions)
            • Loop - Actions
              • Set SR_Angle2 = (SR_Angle2 + (360.00 / SR_RockPairCount))
              • Set SR_TempPoint3 = (SR_TempPoint2 offset by SR_RockSeperationDistance towards SR_Angle2 degrees)
              • Unit - Create 1 SR_Rock for Neutral Passive at SR_TempPoint3 facing Default building facing degrees
              • Set SR_TempU2 = (Last created unit)
              • Custom script: set udg_SR_UHandle = GetHandleId(udg_SR_TempU2)
              • Animation - Change SR_TempU2 flying height to SR_RockHeight at 0.00
              • Hashtable - Save Handle OfSR_U as 1 of SR_UHandle in SR_Hash
              • Hashtable - Save 4 as 2 of SR_UHandle in SR_Hash
              • Hashtable - Save Handle OfSR_TempU as 3 of SR_UHandle in SR_Hash
              • Hashtable - Save SR_Angle2 as 6 of SR_UHandle in SR_Hash
              • Hashtable - Save SR_RockSeperationDistance as 7 of SR_UHandle in SR_Hash
              • Hashtable - Save SR_RockHeight as 8 of SR_UHandle in SR_Hash
              • Unit Group - Add SR_TempU2 to SR_Rocks
              • Custom script: call RemoveLocation(udg_SR_TempPoint3)
          • Custom script: set udg_SR_UHandle = GetHandleId(udg_SR_TempU)
          • Unit - Create 1 SR_SummonSFX for Neutral Passive at SR_TempPoint2 facing Default building facing degrees
          • Animation - Change (Last created unit) flying height to SR_RockHeight at 0.00
          • Unit - Add a SR_SummonSFXDuration second Generic expiration timer to (Last created unit)
          • Hashtable - Save Handle OfSR_U as 1 of SR_UHandle in SR_Hash
          • Hashtable - Save 1 as 2 of SR_UHandle in SR_Hash
          • Hashtable - Save (SR_RockDamageBase + (SR_RockDamagePerLevel x SR_TempReal)) as 3 of SR_UHandle in SR_Hash
          • Hashtable - Save (SR_RockSearchAoeBase + (SR_RockSearchAoePerLevel x SR_TempReal)) as 4 of SR_UHandle in SR_Hash
          • Hashtable - Save (SR_MoveSpeedBase + (SR_MoveSpeedPerLevel x SR_TempReal)) as 5 of SR_UHandle in SR_Hash
          • Hashtable - Save SR_Angle as 6 of SR_UHandle in SR_Hash
          • Hashtable - Save SR_RockHeight as 8 of SR_UHandle in SR_Hash
          • Hashtable - Save Handle OfSR_U as 9 of SR_UHandle in SR_Hash
          • Unit Group - Add SR_TempU to SR_Rocks
          • Custom script: call RemoveLocation(udg_SR_TempPoint2)
      • Trigger - Turn on Sentry Rocks Loop <gen>
      • Trigger - Turn on Sentry Rocks Death <gen>
      • Custom script: call RemoveLocation(udg_SR_TempPoint)
  • Sentry Rocks Death
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to SR_RockCore
    • Actions
      • Set SR_U = (Triggering unit)
      • Custom script: set udg_SR_UHandle = GetHandleId(udg_SR_U)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Load 8 of SR_UHandle from SR_Hash) Greater than or equal to 10.00
        • Then - Actions
          • Set SR_TempPoint = (Position of SR_U)
          • Unit - Create 1 Rock Summon SFX for Neutral Passive at SR_TempPoint facing Default building facing degrees
          • Animation - Change (Last created unit) flying height to (Load 8 of SR_UHandle from SR_Hash) at 0.00
          • Unit - Add a SR_SummonSFXDuration second Generic expiration timer to (Last created unit)
          • Custom script: call RemoveLocation (udg_SR_TempPoint)
        • Else - Actions
      • Unit Group - Remove SR_U from SR_Rocks
      • Hashtable - Clear all child hashtables of child SR_UHandle in SR_Hash
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (SR_Rocks is empty) Equal to True
        • Then - Actions
          • Trigger - Turn off (This trigger)
          • Trigger - Turn off Sentry Rocks Loop <gen>
        • Else - Actions
      • Unit - Remove SR_U from the game
  • Sentry Rocks Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in SR_Rocks and do (Actions)
        • Loop - Actions
          • Set SR_U = (Picked unit)
          • Custom script: set udg_SR_UHandle = GetHandleId(udg_SR_U)
          • -------- Rock Core Spin + Search --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Load 2 of SR_UHandle from SR_Hash) Equal to 1
            • Then - Actions
              • Set SR_Angle = ((Load 6 of SR_UHandle from SR_Hash) + SR_RockSpinSpeed)
              • Hashtable - Save SR_Angle as 6 of SR_UHandle in SR_Hash
              • Set SR_TempPoint = (Position of (Load 1 of SR_UHandle in SR_Hash))
              • Custom script: set udg_SR_TempX = GetLocationX(udg_SR_TempPoint)
              • Custom script: set udg_SR_TempY = GetLocationY(udg_SR_TempPoint)
              • Custom script: call SetUnitX(udg_SR_U, udg_SR_TempX + udg_SR_RockDistance * Cos(udg_SR_Angle * bj_DEGTORAD))
              • Custom script: call SetUnitY(udg_SR_U, udg_SR_TempY + udg_SR_RockDistance * Sin(udg_SR_Angle * bj_DEGTORAD))
              • Set SR_TempGroup = (Units within (Load 4 of SR_UHandle from SR_Hash) of SR_TempPoint)
              • Unit Group - Pick every unit in SR_TempGroup and do (Actions)
                • Loop - Actions
                  • Set SR_TempU = (Picked unit)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (SR_TempU is Magic Immune) Equal to False
                      • (SR_TempU is A structure) Equal to False
                      • (SR_TempU is in SR_Rocks) Equal to False
                      • (SR_TempU is alive) Equal to True
                      • (SR_TempU is A ground unit) Equal to True
                      • (SR_TempU belongs to an enemy of (Owner of SR_U)) Equal to True
                      • (Load 9 of SR_UHandle in SR_Hash) Equal to (Load 1 of SR_UHandle in SR_Hash)
                    • Then - Actions
                      • Hashtable - Save Handle OfSR_TempU as 9 of SR_UHandle in SR_Hash
                      • Hashtable - Save 2 as 2 of SR_UHandle in SR_Hash
                      • Unit Group - Add SR_TempU to SR_Rocks
                      • Unit - Pause the expiration timer for SR_U
                    • Else - Actions
              • Custom script: call RemoveLocation(udg_SR_TempPoint)
              • Custom script: call DestroyGroup (udg_SR_TempGroup)
            • Else - Actions
          • -------- Rock Movement --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Load 2 of SR_UHandle from SR_Hash) Equal to 2
            • Then - Actions
              • -------- Lightning effects --------
              • Set SR_TempPoint = (Position of SR_U)
              • Set SR_TempU = (Load 9 of SR_UHandle in SR_Hash)
              • Set SR_TempPoint2 = (Position of SR_TempU)
              • Set SR_TempReal = (Load 5 of SR_UHandle from SR_Hash)
              • -------- ------ --------
              • -------- Magnetised movement --------
              • Set SR_Angle = (Angle from SR_TempPoint to SR_TempPoint2)
              • Set SR_TempPoint3 = (SR_TempPoint offset by SR_TempReal towards SR_Angle degrees)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ((Playable map area) contains SR_TempPoint3) Equal to True
                • Then - Actions
                  • Custom script: set udg_SR_TempX = GetUnitX(udg_SR_U)
                  • Custom script: set udg_SR_TempY = GetUnitY(udg_SR_U)
                  • Custom script: call SetUnitX(udg_SR_U, udg_SR_TempX + udg_SR_TempReal * Cos(udg_SR_Angle * bj_DEGTORAD))
                  • Custom script: call SetUnitY(udg_SR_U, udg_SR_TempY + udg_SR_TempReal * Sin(udg_SR_Angle * bj_DEGTORAD))
                • Else - Actions
                  • Unit - Kill SR_U
              • -------- ------ --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Distance between SR_TempPoint and SR_TempPoint2) Less than or equal to 50.00
                • Then - Actions
                  • Hashtable - Save 3 as 2 of SR_UHandle in SR_Hash
                • Else - Actions
              • Custom script: call RemoveLocation(udg_SR_TempPoint2)
              • Custom script: call RemoveLocation(udg_SR_TempPoint)
            • Else - Actions
          • -------- Rock Fall --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Load 2 of SR_UHandle from SR_Hash) Equal to 3
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Load 8 of SR_UHandle from SR_Hash) Less than or equal to 10.00
                • Then - Actions
                  • Set SR_TempPoint = (Position of SR_U)
                  • Unit - Cause (Load 1 of SR_UHandle in SR_Hash) to damage (Load 9 of SR_UHandle in SR_Hash), dealing (Load 3 of SR_UHandle from SR_Hash) damage of attack type Spells and damage type Normal
                  • Special Effect - Create a special effect at SR_TempPoint using SR_CollisionSFX
                  • Special Effect - Destroy (Last created special effect)
                  • Unit Group - Remove (Load 9 of SR_UHandle in SR_Hash) from SR_Rocks
                  • Unit - Kill SR_U
                  • Custom script: call RemoveLocation (udg_SR_TempPoint)
                • Else - Actions
                  • Set SR_TempReal = ((Load 8 of SR_UHandle from SR_Hash) - SR_RockFallSpeed)
                  • Hashtable - Save SR_TempReal as 8 of SR_UHandle in SR_Hash
                  • Animation - Change SR_TempU flying height to SR_TempReal at 0.00
            • Else - Actions
          • -------- Rock Spinning --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Load 2 of SR_UHandle from SR_Hash) Equal to 4
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ((Load 3 of SR_UHandle in SR_Hash) is alive) Equal to True
                • Then - Actions
                  • Lightning - Destroy (Load 9 of SR_UHandle in SR_Hash)
                  • Set SR_Angle = ((Load 6 of SR_UHandle from SR_Hash) + SR_RockSpinSpeed2)
                  • Hashtable - Save SR_Angle as 6 of SR_UHandle in SR_Hash
                  • Set SR_TempPoint = (Position of (Load 3 of SR_UHandle in SR_Hash))
                  • Set SR_TempPoint2 = (Position of SR_U)
                  • Hashtable - Save (Load 8 of (Key (Load 3 of SR_UHandle in SR_Hash)) from SR_Hash) as 8 of SR_UHandle in SR_Hash
                  • Set SR_TempReal = (Load 8 of SR_UHandle from SR_Hash)
                  • Animation - Change SR_U flying height to SR_TempReal at 0.00
                  • Custom script: set udg_SR_TempZ = GetLocationZ(udg_SR_TempPoint) + udg_SR_TempReal
                  • Custom script: set udg_SR_TempZ2 = GetLocationZ(udg_SR_TempPoint2) + udg_SR_TempReal
                  • Custom script: set udg_SR_TempLightning = AddLightningEx(udg_SR_RockLinkLightning, true, GetLocationX(udg_SR_TempPoint), GetLocationY(udg_SR_TempPoint), udg_SR_TempZ, GetLocationX(udg_SR_TempPoint2), GetLocationY(udg_SR_TempPoint2), udg_SR_TempZ2)
                  • Hashtable - Save Handle OfSR_TempLightning as 9 of SR_UHandle in SR_Hash
                  • Set SR_TempReal = (Load 7 of SR_UHandle from SR_Hash)
                  • Custom script: set udg_SR_TempX = GetLocationX(udg_SR_TempPoint)
                  • Custom script: set udg_SR_TempY = GetLocationY(udg_SR_TempPoint)
                  • Custom script: call SetUnitX(udg_SR_U, udg_SR_TempX + udg_SR_TempReal * Cos(udg_SR_Angle * bj_DEGTORAD))
                  • Custom script: call SetUnitY(udg_SR_U, udg_SR_TempY + udg_SR_TempReal * Sin(udg_SR_Angle * bj_DEGTORAD))
                  • Custom script: call RemoveLocation(udg_SR_TempPoint2)
                  • Custom script: call RemoveLocation(udg_SR_TempPoint)
                • Else - Actions
                  • Lightning - Destroy (Load 9 of SR_UHandle in SR_Hash)
                  • Hashtable - Clear all child hashtables of child SR_UHandle in SR_Hash
                  • Unit - Remove SR_U from the game
            • Else - Actions



-=V1.00=-
- Initial Upload
- Expect errors (as normal)


This is a continuation of my Self-Set one spell per day challenge (Day 6)

Give Credits if you use this spell

Enjoy


Keywords:
Sentry, Gaurd, Rocks, Crush, Fall, Squish, Spin, Gravity, Float, Defence, Summon.
Contents

Sentry Rocks (Map)

Reviews
21st Dec 2011 Bribe: Looks like a lot of fun! Leakless, can't find any bugs. The effects are great. Approved 5/5 (Highly Recommended).

Moderator

M

Moderator

21st Dec 2011
Bribe: Looks like a lot of fun! Leakless, can't find any bugs. The effects are great. Approved 5/5 (Highly Recommended).
 
Level 7
Joined
Sep 2, 2011
Messages
350
Once again. You surprised me with your spells. I can't believe how fast you make these spells. For the spell, it looks funny and cool.

Rating: 3.5/5
It is simple
Effects were meh okay
Quite funny yet cool
It could be better
 
Top