• 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.
  • 💡 We're thrilled to announce that our upcoming texturing contest is in the works, and we're eager to hear your suggestions! Please take this opportunity to share your ideas in this theme discussion thread for the Texturing Contest #34!
  • 🏆 Hive's 7th HD Modeling Contest: Icecrown Creature is now open! The frozen wastes of Icecrown are home to some of Azeroth’s most terrifying and resilient creatures. For this contest, your challenge is to design and model a HD 3D monster that embodies the cold, undead, and sinister essence of Icecrown! 📅 Submissions close on April 13, 2025. Don't miss this opportunity to let your creativity shine! Enter now and show us your frozen masterpiece! 🔗 Click here to enter!

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
349
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