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!
This spell is relatively far-fetched (as I knew in it's creation) about 80% of it was made as a challenge and was made intentionally to not make much sense, but I liked how it turned out and thought I might as well share it with you guys
The spell functions by randomly throwing eggs into the target area which hatch into small scorpions which will chase down (via burrowing and unburrowing) enemies within their searching radius and when getting close enough will lay a curse on them which briefly after adminitered will freeze them in place leaving them helpless to defend themselves. Furthermore the Scorpions will then find additional targets near their new location if any more do present themselves.
This spell is a continuation of my little obsession with summoning-spells, I hope you appreciate that /everything/ about this spell is triggered, including the movement/attacking of Scorpions, the damage, the curse, the egg flying arc, their dispersing blah blah etc. There's minimal object data
Learn:
Throws a volley of spiritual Scorpion eggs randomly onto the target area, the scorpions then hatch and chase down nearby enemies and lay a curse upon them which will deal damage as well as freeze them temporarily.
Level 1 - 8 Eggs, 75 damage, 6 second stun, 1 hit, 250 search range
Level 2 - 10 Eggs, 100 damage, 8 second stun, 2 hits, 300 search range
Level 3 - 12 Eggs, 125 damage, 10 second stun, 3 hits, 350 search range
- Heavily Configurable
- Original
- MUI
- Is cursed (yay)
- Annoying for enemies
- Maybe a little op
- Documentation
- Importing instructions
Spirit Scorpions Configuration
Events
Map initialization
Conditions
Actions
-------- Do not touch --------
Hashtable - Create a hashtable
Set SS_Hash = (Last created hashtable)
-------- -------- --------
-------- Determines the area the eggs will be scattered on --------
Set SS_AoeBase = 150.00
Set SS_AoePerLevel = 50.00
-------- Determines the damage dealt by the curse being inflicted on the unit --------
Set SS_DamageBase = 50.00
Set SS_DamagePerLevel = 25.00
-------- Determines how long the curse will last for --------
Set SS_CurseDurationBase = 4.00
Set SS_CurseDurationPerLevel = 2.00
-------- Determines how many Eggs will be thrown --------
Set SS_EggCountBase = 6
Set SS_EggCountPerLevel = 2
-------- Determines how many attacks each Scorpion can make before disappearing --------
Set SS_AttackCountsBase = 0
Set SS_AttackCountsBasePerLevel = 1
-------- Determines how fast the eggs fly through the sky --------
Set SS_EggFlySpeed = 20.00
-------- Determines how long it takes for the eggs to hatch --------
Set SS_EggHatchTime = 1.00
-------- Determines the height of the arc in relevence to the distance the eggs being thrown will be --------
Set SS_HeightMultiplyer = 0.45
-------- Determines how close the spell must be casted at minimum --------
Set SS_MinRange = 200.00
-------- Determines the speed of the Scorpions chasing --------
Set SS_ScorpionRunSpeed = 4.00
-------- Determines the AOE in which the Scorpions will actively search for a target --------
Set SS_ScorpionSearchAoeBase = 200.00
Set SS_ScorpionSearchAoePerLevel = 50.00
-------- Determines the unit type used as the egg --------
Set SS_ScorpionEgg = Spirit Scorpion Egg
-------- Determines the unit type used as the Scorpion --------
Set SS_SpiritScorpion = Spirit Scorpion
-------- Determines the spell used to act as the activation spell --------
Set SS_Spell = Spirit Scorpions
-------- Determines the SFX used upon the Scorpions hatching --------
Set SS_HatchSFX = Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
-------- Determines the SFX used upon the Scorpions disappearing --------
Set SS_RemovalSFX = Abilities\Spells\Human\DispelMagic\DispelMagicTarget.mdl
-------- Determines the SFX used as the curse --------
Set SS_CurseSFX = Abilities\Spells\Undead\Curse\CurseTarget.mdl
Spirit Scorpions Activation
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to SS_Spell
Actions
-------- Target location setup --------
Set SS_U = (Triggering unit)
Set SS_TempPoint = (Position of SS_U)
Set SS_TempPoint2 = (Target point of ability being cast)
Set SS_TempReal = (Real((Level of SS_Spell for SS_U)))
Set SS_Angle = (Angle from SS_TempPoint to SS_TempPoint2)
-------- Minimum range check --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Distance between SS_TempPoint and SS_TempPoint2) Less than SS_MinRange
Set SS_TempPoint2 = (SS_TempPoint offset by SS_MinRange towards SS_Angle degrees)
Else - Actions
-------- Egg creation --------
Set SS_EggCalc = (SS_EggCountBase + ((Integer(SS_TempReal)) x SS_EggCountPerLevel))
For each (Integer SS_i) from 1 to SS_EggCalc, do (Actions)
Loop - Actions
-------- Target selection --------
Set SS_TempPoint3 = (SS_TempPoint2 offset by (Random real number between 0.00 and (SS_AoeBase + (SS_TempReal x SS_AoePerLevel))) towards (Random angle) degrees)
Set SS_Angle = (Angle from SS_TempPoint to SS_TempPoint3)
-------- Creating Egg --------
Unit - Create 1 SS_ScorpionEgg for (Owner of SS_U) at SS_TempPoint facing SS_Angle degrees
-------- ------ --------
Set SS_TempU = (Last created unit)
Custom script: set udg_SS_UHandle = GetHandleId(udg_SS_TempU)
-------- Casting Unit ID --------
Hashtable - Save Handle OfSS_U as 1 of SS_UHandle in SS_Hash
-------- ------ --------
-------- Passing Parameters --------
-------- Saving the distance the egg will travel --------
Hashtable - Save (Distance between SS_TempPoint and SS_TempPoint3) as 2 of SS_UHandle in SS_Hash
-------- Saving the height the egg will reach in the arc --------
Hashtable - Save ((Distance between SS_TempPoint and SS_TempPoint3) x SS_HeightMultiplyer) as 3 of SS_UHandle in SS_Hash
-------- Saving the current distance travelled by the egg --------
Hashtable - Save 0.00 as 4 of SS_UHandle in SS_Hash
-------- Saving the damage of the curse --------
Hashtable - Save (SS_DamageBase + (SS_TempReal x SS_DamagePerLevel)) as 5 of SS_UHandle in SS_Hash
-------- Saving the duration of the Scorpion's curse --------
Hashtable - Save (SS_CurseDurationBase + (SS_TempReal x SS_CurseDurationPerLevel)) as 6 of SS_UHandle in SS_Hash
-------- Saving the search radius of the Scorpion --------
Hashtable - Save (SS_ScorpionSearchAoeBase + (SS_TempReal x SS_ScorpionSearchAoePerLevel)) as 7 of SS_UHandle in SS_Hash
-------- ------ --------
-------- Saving the amount of attacks possible by the Scorpion --------
Hashtable - Save (SS_AttackCountsBase + ((Integer(SS_TempReal)) x SS_AttackCountsBasePerLevel)) as 12 of SS_UHandle in SS_Hash
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(SS_U is dead) Equal to True
Or - Any (Conditions) are true
Conditions
SS_TempInteger Equal to 5
SS_TempInteger Equal to 6
Then - Actions
-------- Death cleanup --------
Animation - Change SS_U's animation speed to 100.00% of its original speed
Unit Group - Remove SS_U from SS_Targets
Special Effect - Destroy (Load 14 of SS_UHandle in SS_Hash)
Hashtable - Clear all child hashtables of child SS_UHandle in SS_Hash
-------- Trigger check --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in SS_Scorpions) Equal to 0
Then - Actions
Trigger - Turn off (This trigger)
Else - Actions
Else - Actions
-------- Stage 5 --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Load 8 of SS_UHandle from SS_Hash) Equal to 5
Then - Actions
-------- Current freeze Countdown setting --------
Set SS_RealCache[6] = ((Load 15 of SS_UHandle from SS_Hash) - 1.00)
-------- Animation slowing --------
Animation - Change SS_U's animation speed to SS_RealCache[6]% of its original speed
-------- Sacing current countdown --------
Hashtable - Save SS_RealCache[6] as 15 of SS_UHandle in SS_Hash
-------- Countdown complete --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SS_RealCache[6] Equal to 0.00
Then - Actions
-------- Freezing unit --------
Unit - Pause SS_U
-------- Stage ID --------
Hashtable - Save 6 as 8 of SS_UHandle in SS_Hash
-------- ------ --------
Else - Actions
Else - Actions
-------- ------ --------
-------- Stage 6 --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Load 8 of SS_UHandle from SS_Hash) Equal to 6
Then - Actions
-------- Unfreeze timer --------
Set SS_TempInteger2 = (Load 16 of SS_UHandle from SS_Hash)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SS_TempInteger2 Equal to 20
Then - Actions
-------- Delayer reset --------
Hashtable - Save 0 as 16 of SS_UHandle in SS_Hash
-------- Current Curse duration expired increase --------
Set SS_TempReal = ((Load 17 of SS_UHandle from SS_Hash) + 1.00)
Hashtable - Save SS_TempReal as 17 of SS_UHandle in SS_Hash
-------- Curse end check --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SS_TempReal Greater than or equal to (Load 6 of SS_UHandle from SS_Hash)
Then - Actions
-------- Spell cleanup --------
Unit - Unpause SS_U
Animation - Change SS_U's animation speed to 100.00% of its original speed
Special Effect - Destroy (Load 14 of SS_UHandle in SS_Hash)
Unit Group - Remove SS_U from SS_Targets
Unit Group - Remove SS_U from SS_Scorpions
Hashtable - Clear all child hashtables of child SS_UHandle in SS_Hash
-------- Trigger check --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in SS_Scorpions) Equal to 0
Then - Actions
Trigger - Turn off (This trigger)
Else - Actions
Else - Actions
Else - Actions
-------- Delayer Increase --------
Hashtable - Save (SS_TempInteger2 + 1) as 16 of SS_UHandle in SS_Hash
Else - Actions
-------- ------ --------
-------- ------ --------
-=V1.00=-
- Initial upload
- Expect errors
-=V1.01=-
- Modified the Animation control as per Pharaoh, still needing a bit of clarificaiton on the second part
-=V1.05=-
- Used a variable for the Egg creation counter (as per Pharaoh)
- Used variables for repetative loads (as per Pharaoh)
-=V1.06=-
- Completed using variables for reperative loads
- Modified the standard configuration slightly
-=V1.10=-
- Tried uploading this this morning but apparently that failed
- Removed leaks
- Hopefully finihed x_x
Moderator: Pharaoh_
Date: 25th Feb 2012, 9:15
Several changes have been made.
The spell looks nice.
You could add each stage's if/then/else under the else of the main one, since it would save some engine's searches.
Recommended
Several changes have been made.
The spell looks nice.
You could add each stage's if/then/else under the else of the main one, since it would save some engine's searches.
Edit: I do make use of the "greater than 30" however it's on a double-edged sword (considering it's to save doing two checks when below 30, but meaning three checks are done when it's above) I'll just make the modification in a second, as for the repetitive loads (i.e. load 8 and 10) I feel it'd take an uneccessarily long time to make the modifications required to do that, considering wouldn't that require setting up an entire indexing system just to index those? or am I thinking of the wrong idea?
Edit2: Configurability issues? Clarify please, I'm really not sure /what/ the configurability issue would be
Use Integer variables or whatever the values of those loads are and set Var1 = (Load 10 of X from Y_Table). This is what I mean.
Configurability means that you have certain calculations or paths that are not friendly to a user who wants to alter the way the spells looks. You may want to create a variable for that specific calculation of the loop and use that exact variable to loop through. It won't make an efficiency difference, but it will improve readability along with configurability, just like I mentioned.
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.