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!
The Templar raises from the ground and summons 4 Cross vortices, damaging nearby enemy units including structures.
When the spell is almost over, a growing light will come out and deals heavy damage to nearby enemy units including structures.
Level 1 - Cross damages 25 per second, Light damages 50 per second.
Level 2 - Cross damages 50 per second, Light damages 100 per second.
Level 3 - Cross damages 75 per second, Light damages 150 per second.
Level 4 - Cross damages 100 per second, Light damages 200 per second.
Level 5 - Cross damages 125 per second, Light damages 250 per second.
This Spell is inspired by Castlevania Symphony of the Night, as you can see in the Video.
Skip 0.46 to 51
Configurables
Events
Map initialization
Conditions
Actions
-------- =====THESE ARE THE DEFAULT CONFIGURES BASED ON THE DESCRIPTION===== --------
-------- IMPORTANT: You should synchronize the HC_Config_CrossFar and the AOE of the 'BUFF' ability in the object editor --------
-------- Example: if HC_Config_CrossFar is 450 (AOE of the BUFF ability is also 450) --------
-------- This will configure the gap between cross and the caster --------
Set HC_Config_CrossFar = 450.00
Set HC_Config_CrossNear = 250.00
-------- It is recommended that the HC_Config_CrossFar and HC_Config_CrossDamageAoE is the same --------
Set HC_Config_CrossDamageAoE = 450.00
-------- Configures how the light grows --------
Set HC_Config_LightSizeBase = 1.00
Set HC_Config_LightSizeMax = 5000.00
-------- Rotation Speed of the Cross --------
Set HC_Config_CrossRotationSpeed = 15.00
-------- Light Damage Reach...The higher the value, the higher the reach, this will be multiplied by the HC_LightSize --------
Set HC_Config_LightDamageAoE = 0.30
-------- Configures Caster and Cross Heights --------
Custom script: set CasterChildID = CasterChildID + 1
Custom script: exitwhen CasterChildID==24
Custom script: endloop
Unit Group - Add HC_Caster to HC_UGrp
Trigger - Turn on Holy Cross Loop <gen>
Unit - Add Storm Crow Form to HC_Caster
Animation - Change HC_Caster flying height to HC_Config_CasterHeight at 600.00
Unit - Remove Storm Crow Form from HC_Caster
Set HC_InstanceIndex = (HC_InstanceIndex + 1)
Unit - Hide HC_Light
Holy Cross Loop
Events
Time - Every 0.03 seconds of game time
Conditions
Actions
Unit Group - Pick every unit in HC_UGrp and do (Actions)
Loop - Actions
Set HC_Caster = (Picked unit)
Custom script: set udg_HC_ID = GetHandleId(udg_HC_Caster)
Set HC_CasterPt = (Load 3 of HC_ID in Hash)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(HC_Caster is alive) Equal to True
Then - Actions
Set HC_Duration = (Load 0 of HC_ID from Hash)
Set HC_Light = (Load 5 of HC_ID in Hash)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(HC_Light is alive) Equal to True
Then - Actions
-------- For Timer --------
Hashtable - Save (HC_Duration - 0.03) as 0 of HC_ID in Hash
Set HC_Level = (Load 1 of HC_ID from Hash)
Set HC_CrossDamage = (Load 2 of HC_ID from Hash)
Set HC_CheckLight = (Load 4 of HC_ID from Hash)
Set HC_Index1 = 0
For each (Integer A) from 20 to 21, do (Actions)
Loop - Actions
Set HC_CrossU = (Load (Integer A) of HC_ID in Hash)
Custom script: set udg_HC_DummyID = GetHandleId(udg_HC_CrossU)
Set HC_RotationC = (Load HC_Index1 of HC_DummyID from Hash)
Set HC_LocP = (HC_CasterPt offset by HC_Config_CrossNear towards HC_RotationC degrees)
Custom script: if udg_HC_Index1==0 then
Hashtable - Save (HC_RotationC + HC_Config_CrossRotationSpeed) as HC_Index1 of HC_DummyID in Hash
Custom script: else
Hashtable - Save (HC_RotationC - HC_Config_CrossRotationSpeed) as HC_Index1 of HC_DummyID in Hash
Custom script: endif
Unit - Move HC_CrossU instantly to HC_LocP
Set HC_Index1 = (HC_Index1 + 1)
Custom script: call RemoveLocation(udg_HC_LocP)
Set HC_Index1 = 6
For each (Integer A) from 22 to 23, do (Actions)
Loop - Actions
Set HC_CrossU = (Load (Integer A) of HC_ID in Hash)
Custom script: set udg_HC_DummyID = GetHandleId(udg_HC_CrossU)
Set HC_RotationC = (Load HC_Index1 of HC_DummyID from Hash)
Set HC_LocP = (HC_CasterPt offset by HC_Config_CrossFar towards HC_RotationC degrees)
Custom script: if udg_HC_Index1==6 then
Hashtable - Save (HC_RotationC + HC_Config_CrossRotationSpeed) as HC_Index1 of HC_DummyID in Hash
Custom script: else
Hashtable - Save (HC_RotationC - HC_Config_CrossRotationSpeed) as HC_Index1 of HC_DummyID in Hash
Custom script: endif
Unit - Move HC_CrossU instantly to HC_LocP
Set HC_Index1 = (HC_Index1 + 1)
Custom script: call RemoveLocation(udg_HC_LocP)
Custom script: set bj_wantDestroyGroup=true
Unit Group - Pick every unit in (Units within HC_Config_CrossDamageAoE of HC_CasterPt matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is Magic Immune) Equal to False) and (((Matching unit) belongs to an enemy of (Owner of HC_Caster)) Equal to True)))) and do (Actions)
Loop - Actions
Unit - Cause HC_Caster to damage (Picked unit), dealing HC_CrossDamage damage of attack type Chaos and damage type Death
-------- LIGHT APPEARS HERE --------
Set HC_CheckLight = (Load 4 of HC_ID from Hash)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
And - All (Conditions) are true
Conditions
HC_Duration Less than 0.00
HC_CheckLight Equal to False
Then - Actions
Hashtable - Save True as 4 of HC_ID in Hash
Unit - Unhide HC_Light
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
HC_CheckLight Equal to True
Then - Actions
-------- Light will grow here --------
Set HC_LightSize = (Load 6 of HC_ID from Hash)
Set HC_LightDamage = (Load 7 of HC_ID from Hash)
Hashtable - Save (HC_LightSize + 100.00) as 6 of HC_ID in Hash
Animation - Change HC_Light's size to (HC_LightSize%, HC_LightSize%, HC_LightSize%) of its original size
-------- Light will deal damage here --------
Custom script: set bj_wantDestroyGroup=true
Unit Group - Pick every unit in (Units within (HC_LightSize x HC_Config_LightDamageAoE) of HC_CasterPt matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is Magic Immune) Equal to False) and (((Matching unit) belongs to an enemy of (Owner of HC_Light)) Equal to True and do (Actions)
Loop - Actions
Unit - Cause HC_Light to damage (Picked unit), dealing HC_LightDamage damage of attack type Chaos and damage type Death
Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Spells\Orc\Purge\PurgeBuffTarget.mdl
Special Effect - Destroy (Last created special effect)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
HC_LightSize Greater than or equal to HC_Config_LightSizeMax
Then - Actions
-------- Create the last effect to end the spell --------
Unit - Create 1 HC_LightSfxUType for (Owner of HC_Caster) at HC_CasterPt facing Default building facing degrees
Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
Set HC_CrossU = (Load (Integer A) of HC_ID in Hash)
Unit - Explode HC_CrossU
Unit - Remove HC_CrossU from the game
Animation - Change (Picked unit) flying height to 0.00 at 1000.00
Unit - Unpause HC_Caster
Unit Group - Remove HC_Caster from HC_UGrp
Hashtable - Clear all child hashtables of child HC_ID in Hash
Set HC_InstanceIndex = (HC_InstanceIndex - 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
HC_InstanceIndex Equal to 0
Then - Actions
Trigger - Turn off (This trigger)
Else - Actions
HOW TO INSTALL:
- Be sure to check the 'Automatically create unknown variables...', via File>Preferences>General tab.
- In the object editor, copy all that is in the Unit/Abilities/Buff tab to youir map.
- Copy all that is written on the 'Holy Cross' folder from the trigger editor to your map.
- Be sure to input the right UnitID, AbilityID, SfxID in the 'Configurables'
======================================
Changelogs:
v1.5
- Improved triggering.
- Improved variable names and setup
- Improved documentation on how to install
v1.4
- (Triggering unit) is now stored in a variable for better performance
- HC_DummyPt variable is removed since it is identical to HC_CasterPt
- Storm Crow Form to HC_Caster is removed immediately to avoid seeing it's icon
- Custom values is replaced by Hashtables
- Loop time is now 0.03 seconds.
v1.3
- Added Configurations
- Added 1 dummy for another light effect
- Added Sfx for Cross damage
v1.2
- Triggers optimized, credits to Maker
- Objects in object editor reduced
v1.1
- Fixed Caster damages everything when casting
- Cross size increased
- Ghost ability removed from cross
You could do the first trigger like this. I made many improvements like not setting and removing the loc over and over again.
Holy Cross Copy
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Holy Cross
Actions
Set HC_Caster = (Triggering unit)
Set ID = (Key (Triggering unit))
Hashtable - Save (Level of Holy Cross for HC_Caster) as (Key hclevel) of ID in Hash
Set HC_CasterPt = (Position of (Triggering unit))
Hashtable - Save Handle OfHC_CasterPt as (Key hccasterpt) of ID in Hash
-------- Timer --------
Hashtable - Save 5.00 as (Key hctimer) of ID in Hash
For each (Integer loopA) from 1 to 4, do (Actions)
Loop - Actions
-------- Cross 1 --------
Unit - Create 1 Dummy (Cross 1) for (Owner of HC_Caster) at HC_CasterPt facing Default building facing degrees
Hashtable - Save Handle Of(Last created unit) as (Key (hcunit + (String(loopA)))) of ID in Hash
Animation - Change (Last created unit) flying height to ((Real((loopA - 1))) x 150.00) at 0.00
-------- Rotation --------
Hashtable - Save 0.00 as (Key (hcrotation + (String(loopA)))) of ID in Hash
-------- Offset --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(loopA mod 2) Not equal to 0
Then - Actions
Hashtable - Save 250.00 as (Key (hcoffset + (String(loopA)))) of ID in Hash
Else - Actions
Hashtable - Save 450.00 as (Key (hcoffset + (String(loopA)))) of ID in Hash
-------- xxxxxxxxxxxxxxxx --------
Unit Group - Add HC_Caster to HC_UGrp
Trigger - Turn on Holy Cross Loop <gen>
Unit - Add Storm Crow Form to HC_Caster
Animation - Change HC_Caster flying height to 300.00 at 600.00
You can set the fly height with triggers instead of using 4 different dummy unit types.
This block isn't needed:
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
HC_Timer Equal to 4.98
Then - Actions
Unit - Pause HC_Caster
Unit - Add Storm Crow Form to HC_Caster
Animation - Play HC_Caster's stand channel animation
Animation - Change HC_Caster flying height to 300.00 at 600.00
Else - Actions
Set the animation in object editor, give the spell about 5 second follow through time. You can set "disable other abilities" to true. Add Strom Crow and change flying height in the casting trigger.
Also save the Key(Picked unit) into a variable and use the variable. Use the unit variable instead of Picked unit throughout the trigger.
Don't load the rotations/offsets if the caster is dead.
The dummies give vision. You could create them for neutral passive.
I don't think you need Holy Cross Remove. Apply a timed life for them and make them explode on death. Don't use Kill unit.
Some of the values should me made configurable, perhaps create an initialization trigger where one can configure variables.
You could do the first trigger like this. I made many improvements like not setting and removing the loc over and over again.
Holy Cross Copy
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Holy Cross
Actions
Set HC_Caster = (Triggering unit)
Set ID = (Key (Triggering unit))
Hashtable - Save (Level of Holy Cross for HC_Caster) as (Key hclevel) of ID in Hash
Set HC_CasterPt = (Position of (Triggering unit))
Hashtable - Save Handle OfHC_CasterPt as (Key hccasterpt) of ID in Hash
-------- Timer --------
Hashtable - Save 5.00 as (Key hctimer) of ID in Hash
For each (Integer loopA) from 1 to 4, do (Actions)
Loop - Actions
-------- Cross 1 --------
Unit - Create 1 Dummy (Cross 1) for (Owner of HC_Caster) at HC_CasterPt facing Default building facing degrees
Hashtable - Save Handle Of(Last created unit) as (Key (hcunit + (String(loopA)))) of ID in Hash
Animation - Change (Last created unit) flying height to ((Real((loopA - 1))) x 150.00) at 0.00
-------- Rotation --------
Hashtable - Save 0.00 as (Key (hcrotation + (String(loopA)))) of ID in Hash
-------- Offset --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(loopA mod 2) Not equal to 0
Then - Actions
Hashtable - Save 250.00 as (Key (hcoffset + (String(loopA)))) of ID in Hash
Else - Actions
Hashtable - Save 450.00 as (Key (hcoffset + (String(loopA)))) of ID in Hash
-------- xxxxxxxxxxxxxxxx --------
Unit Group - Add HC_Caster to HC_UGrp
Trigger - Turn on Holy Cross Loop <gen>
Unit - Add Storm Crow Form to HC_Caster
Animation - Change HC_Caster flying height to 300.00 at 600.00
You can set the fly height with triggers instead of using 4 different dummy unit types.
This block isn't needed:
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
HC_Timer Equal to 4.98
Then - Actions
Unit - Pause HC_Caster
Unit - Add Storm Crow Form to HC_Caster
Animation - Play HC_Caster's stand channel animation
Animation - Change HC_Caster flying height to 300.00 at 600.00
Else - Actions
Set the animation in object editor, give the spell about 5 second follow through time. You can set "disable other abilities" to true. Add Strom Crow and change flying height in the casting trigger.
Also save the Key(Picked unit) into a variable and use the variable. Use the unit variable instead of Picked unit throughout the trigger.
Don't load the rotations/offsets if the caster is dead.
The dummies give vision. You could create them for neutral passive.
I don't think you need Holy Cross Remove. Apply a timed life for them and make them explode on death. Don't use Kill unit.
Some of the values should me made configurable, perhaps create an initialization trigger where one can configure variables.
Genius...I've done that with multiboards but Never thought it can be done with hashtables ...thanks Maker!...
but I cant disable Tri 3 coz the cross doesnt have explode/death
animation, it just stands there for 1 second, I want the cross to
'Immediately' dissapear after the spell...
EDIT
v1.2
- Triggers optimized, credits to Maker
- Objects in object editor reduced
but I cant disable Tri 3 coz the cross doesnt have explode/death
animation, it just stands there for 1 second, I want the cross to
'Immediately' dissapear after the spell...
Scale them down and set their flying heigh to some high value. I also forgot to say that the dummies don't need invlunerability abilty, they have locust. You could add some sound effects when the crosses are circling or attach some subtle effect on them.
This spell looks good. Your effects are astounding! The spell is MUI since it uses Hashtables. Just one thing about the coding:
-You can reduce the size of the triggers with integer variable loops. (Trig 2)
You leak nothing. And btw, you just taught me something about group leaks
I'd give this spell a 4.5/5 (i think im being too nice by giving everyone 5/5s )
But, since we cant give scores like that, i'm forced to give you a 5/5
well mckill, now that i reconsider my idea, it may be good for shortening the code, but i guess your right. Loops make reading the code SO confusing. So, since this spell is original and very well coded, and GUI, making it easy for most N00bs to implement it, i'm changing my score to a perfect 5/5 (I gave you a "mental" 4.5/5 from before, so... well... yeah you get )
Awesome man, It looks like Richter's soul crush from Symphony of the Night.
Please do not take offense though, I think the crosses' movement isn't as smooth enough to show that it's rotating around the caster, it looks like it randomly moves from point a to point b.
I also noticed how the farm gets damaged, is it suppose to destroy those too? How unholy lol.
You were right it is Holy Cross, Item Crush (I made a mistake lol) is the term for the sub-weapon special attacks.
Now go make the item crush where Richter throws a thousand knives.
Unit - Remove HC_CrossUnit[1] from the game
Unit - Remove HC_CrossUnit[2] from the game
Unit - Remove HC_CrossUnit[3] from the game
Unit - Remove HC_CrossUnit[4] from the game
You could remove those four lines as "explode unit" pretty much does the same thing as "remove unit" (for non-heroes).
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.