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!
Splits into two heroes, slashing through enemies forth and back for 5x strength damage. Organic units will be bleeding for 10 seconds, taking 1x strength damage per second.
Demonic Duo Init
Events
Map initialization
Conditions
Actions
Hashtable - Create a hashtable
Set DemonicDuoHashtable = (Last created hashtable)
Hashtable - Create a hashtable
Set DemonicDuoBleedingHashtable = (Last created hashtable)
-------- ===== Configurables pt1 ===== --------
-------- Velocity --------
Set DemonicDuoVelocity = 17.00
-------- Range from clone to target --------
Set DemonicDuoDamageRange = 100.00
-------- ===== End of confugurables ===== --------
Demonic Duo Condition
Events
Unit - A unit Begins casting an ability
Conditions
(Ability being cast) Equal to Demonic Duo
Actions
Set DemonicDuoCaster = (Triggering unit)
Set DemonicDuoLoc[5] = (Target point of ability being cast)
Set DemonicDuoLoc[6] = (Position of DemonicDuoCaster)
Set DemonicDuoDistance = (Distance between DemonicDuoLoc[5] and DemonicDuoLoc[6])
Unit - Create 1 DemonicDuoCloneType for (Triggering player) at DemonicDuoLoc[1] facing DemonicDuoAngle[1] degrees
Set DemonicDuoClone[1] = (Last created unit)
Unit - Create 1 DemonicDuoCloneType for (Triggering player) at DemonicDuoLoc[3] facing DemonicDuoAngle[2] degrees
Set DemonicDuoClone[2] = (Last created unit)
Animation - Change DemonicDuoClone[1]'s animation speed to (((1650.00 x DemonicDuoVelocity) x DemonicDuoAnimationLength) / DemonicDuoDistance)% of its original speed
Animation - Change DemonicDuoClone[2]'s animation speed to (((1650.00 x DemonicDuoVelocity) x DemonicDuoAnimationLength) / DemonicDuoDistance)% of its original speed
Animation - Change DemonicDuoClone[1]'s vertex coloring to (100.00%, 75.00%, 75.00%) with 35.00% transparency
Animation - Change DemonicDuoClone[2]'s vertex coloring to (100.00%, 75.00%, 75.00%) with 35.00% transparency
Special Effect - Create a special effect at DemonicDuoLoc[3] using Abilities\Spells\Orc\FeralSpirit\feralspirittarget.mdl
Special Effect - Destroy (Last created special effect)
Special Effect - Create a special effect at DemonicDuoLoc[1] using Abilities\Spells\Orc\FeralSpirit\feralspirittarget.mdl
Special Effect - Destroy (Last created special effect)
Set DemonicDuoDamageGroup[1] = (Units within 100.00 of DemonicDuoLoc[1] matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Owner of (Matching unit)) is an enemy of (Owner of DemonicDuoCaster)) Equal to True) and ((((Matching
Set DemonicDuoDamageGroup[2] = (Units within 100.00 of DemonicDuoLoc[3] matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Owner of (Matching unit)) is an enemy of (Owner of DemonicDuoCaster)) Equal to True) and ((((Matching
Set DemonicDuoAngle[3] = ((DemonicDuoAngle[1] / 180.00) x Pi)
Set DemonicDuoAngle[4] = ((DemonicDuoAngle[2] / 180.00) x Pi)
Hashtable - Save Handle OfDemonicDuoLoc[1] as 1 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save Handle OfDemonicDuoLoc[2] as 2 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save Handle OfDemonicDuoLoc[3] as 3 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save Handle OfDemonicDuoLoc[4] as 4 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save Handle OfDemonicDuoClone[1] as 5 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save DemonicDuoAngle[1] as 6 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save DemonicDuoAngle[2] as 7 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save DemonicDuoAngle[3] as 8 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save DemonicDuoAngle[4] as 9 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save 1 as 10 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save Handle OfDemonicDuoDamageGroup[1] as 11 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save Handle OfDemonicDuoDamageGroup[2] as 12 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save DemonicDuoDamageValure[1] as 13 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save DemonicDuoDamageValure[2] as 14 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save DemonicDuoBleedingTime as 15 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save Handle OfDemonicDuoClone[2] as 16 of DemonicDuoID in DemonicDuoHashtable
Hashtable - Save DemonicDuoAnimation as 17 of DemonicDuoID in DemonicDuoHashtable
Trigger - Turn on Demonic Duo Timer <gen>
Demonic Duo Timer
Events
Time - Every 0.03 seconds of game time
Conditions
Actions
Unit Group - Pick every unit in DemonicDuoGroup and do (Actions)
Loop - Actions
Set DemonicDuoID = (Key (Picked unit))
Set DemonicDuoCaster = (Picked unit)
Set DemonicDuoState = (Load 10 of DemonicDuoID from DemonicDuoHashtable)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
DemonicDuoState Equal to 1
Then - Actions
Set DemonicDuoClone[1] = (Load 5 of DemonicDuoID in DemonicDuoHashtable)
Set DemonicDuoClone[2] = (Load 16 of DemonicDuoID in DemonicDuoHashtable)
Set DemonicDuoLoc[1] = (Position of DemonicDuoClone[1])
Set DemonicDuoLoc[2] = (Load 2 of DemonicDuoID in DemonicDuoHashtable)
Set DemonicDuoLoc[3] = (Position of DemonicDuoClone[2])
Set DemonicDuoLoc[4] = (Load 4 of DemonicDuoID in DemonicDuoHashtable)
Set DemonicDuoAngle[3] = (Load 8 of DemonicDuoID from DemonicDuoHashtable)
Set DemonicDuoAngle[4] = (Load 9 of DemonicDuoID from DemonicDuoHashtable)
Set DemonicDuoDamageGroup[1] = (Load 11 of DemonicDuoID in DemonicDuoHashtable)
Set DemonicDuoDamageGroup[2] = (Load 12 of DemonicDuoID in DemonicDuoHashtable)
Set DemonicDuoDamageValure[1] = (Load 13 of DemonicDuoID from DemonicDuoHashtable)
Set DemonicDuoDamageValure[2] = (Load 14 of DemonicDuoID from DemonicDuoHashtable)
Set DemonicDuoBleedingTime = (Load 15 of DemonicDuoID from DemonicDuoHashtable)
Set TempUnitGroup = (Units within DemonicDuoDamageRange of DemonicDuoLoc[1] matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Owner of (Matching unit)) is an enemy of (Owner of DemonicDuoCaster)) Equal to True) a
Unit Group - Pick every unit in TempUnitGroup and do (Actions)
Loop - Actions
Set DemonicDuoBleedingID = (Key (Picked unit))
Set DemonicDuoBleedingUnit = (Picked unit)
Unit - Cause DemonicDuoCaster to damage DemonicDuoBleedingUnit, dealing DemonicDuoDamageValure[1] damage of attack type Spells and damage type Normal
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(DemonicDuoBleedingUnit is Mechanical) Equal to True
Then - Actions
Special Effect - Create a special effect attached to the chest of DemonicDuoBleedingUnit using Abilities\Spells\Human\FlakCannons\FlakTarget.mdl
Else - Actions
Special Effect - Create a special effect attached to the chest of DemonicDuoBleedingUnit using Abilities\Spells\Other\Stampede\StampedeMissileDeath.mdl
Unit Group - Add DemonicDuoBleedingUnit to DemonicDuoBleedingGroup
Trigger - Turn on Demonic Duo Bleeding <gen>
Special Effect - Destroy (Last created special effect)
Unit Group - Add DemonicDuoBleedingUnit to DemonicDuoDamageGroup[1]
Hashtable - Save Handle OfDemonicDuoCaster as 1 of DemonicDuoBleedingID in DemonicDuoBleedingHashtable
Hashtable - Save DemonicDuoDamageValure[2] as 2 of DemonicDuoBleedingID in DemonicDuoBleedingHashtable
Hashtable - Save DemonicDuoBleedingTime as 3 of DemonicDuoBleedingID in DemonicDuoBleedingHashtable
Hashtable - Save Handle OfDemonicDuoDamageGroup[1] as 11 of DemonicDuoID in DemonicDuoHashtable
Set TempUnitGroup = (Units within DemonicDuoDamageRange of DemonicDuoLoc[3] matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Owner of (Matching unit)) is an enemy of (Owner of DemonicDuoCaster)) Equal to True) a
Unit Group - Pick every unit in TempUnitGroup and do (Actions)
Loop - Actions
Set DemonicDuoBleedingID = (Key (Picked unit))
Set DemonicDuoBleedingUnit = (Picked unit)
Unit - Cause DemonicDuoCaster to damage DemonicDuoBleedingUnit, dealing DemonicDuoDamageValure[1] damage of attack type Spells and damage type Normal
Unit Group - Add DemonicDuoBleedingUnit to DemonicDuoDamageGroup[2]
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(DemonicDuoBleedingUnit is Mechanical) Equal to True
Then - Actions
Special Effect - Create a special effect attached to the chest of DemonicDuoBleedingUnit using Abilities\Spells\Human\FlakCannons\FlakTarget.mdl
Else - Actions
Special Effect - Create a special effect attached to the chest of DemonicDuoBleedingUnit using Abilities\Spells\Other\Stampede\StampedeMissileDeath.mdl
Unit Group - Add DemonicDuoBleedingUnit to DemonicDuoBleedingGroup
Trigger - Turn on Demonic Duo Bleeding <gen>
Special Effect - Destroy (Last created special effect)
Hashtable - Save Handle OfDemonicDuoCaster as 1 of DemonicDuoBleedingID in DemonicDuoBleedingHashtable
Hashtable - Save DemonicDuoDamageValure[2] as 2 of DemonicDuoBleedingID in DemonicDuoBleedingHashtable
Hashtable - Save DemonicDuoBleedingTime as 3 of DemonicDuoBleedingID in DemonicDuoBleedingHashtable
Hashtable - Save Handle OfDemonicDuoDamageGroup[2] as 12 of DemonicDuoID in DemonicDuoHashtable
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
DemonicDuoState Greater than 30
Then - Actions
Set DemonicDuoClone[1] = (Load 5 of DemonicDuoID in DemonicDuoHashtable)
Set DemonicDuoClone[2] = (Load 16 of DemonicDuoID in DemonicDuoHashtable)
Set DemonicDuoLoc[1] = (Load 1 of DemonicDuoID in DemonicDuoHashtable)
Set DemonicDuoLoc[2] = (Position of DemonicDuoClone[1])
Set DemonicDuoLoc[3] = (Load 3 of DemonicDuoID in DemonicDuoHashtable)
Set DemonicDuoLoc[4] = (Position of DemonicDuoClone[2])
Set DemonicDuoAngle[3] = (Load 8 of DemonicDuoID from DemonicDuoHashtable)
Set DemonicDuoAngle[4] = (Load 9 of DemonicDuoID from DemonicDuoHashtable)
Set DemonicDuoDamageGroup[1] = (Load 11 of DemonicDuoID in DemonicDuoHashtable)
Set DemonicDuoDamageGroup[2] = (Load 12 of DemonicDuoID in DemonicDuoHashtable)
Set DemonicDuoDamageValure[1] = (Load 13 of DemonicDuoID from DemonicDuoHashtable)
Set DemonicDuoDamageValure[2] = (Load 14 of DemonicDuoID from DemonicDuoHashtable)
Set DemonicDuoBleedingTime = (Load 15 of DemonicDuoID from DemonicDuoHashtable)
Set TempUnitGroup = (Units within DemonicDuoDamageRange of DemonicDuoLoc[2] matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Owner of (Matching unit)) is an enemy of (Owner of DemonicDuoCaster)) Equal to True) a
Unit Group - Pick every unit in TempUnitGroup and do (Actions)
Loop - Actions
Set DemonicDuoBleedingID = (Key (Picked unit))
Set DemonicDuoBleedingUnit = (Picked unit)
Unit - Cause DemonicDuoCaster to damage DemonicDuoBleedingUnit, dealing DemonicDuoDamageValure[1] damage of attack type Spells and damage type Normal
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(DemonicDuoBleedingUnit is Mechanical) Equal to True
Then - Actions
Special Effect - Create a special effect attached to the chest of DemonicDuoBleedingUnit using Abilities\Spells\Human\FlakCannons\FlakTarget.mdl
Else - Actions
Special Effect - Create a special effect attached to the chest of DemonicDuoBleedingUnit using Abilities\Spells\Other\Stampede\StampedeMissileDeath.mdl
Unit Group - Add DemonicDuoBleedingUnit to DemonicDuoBleedingGroup
Trigger - Turn on Demonic Duo Bleeding <gen>
Special Effect - Destroy (Last created special effect)
Unit Group - Add DemonicDuoBleedingUnit to DemonicDuoDamageGroup[1]
Hashtable - Save Handle OfDemonicDuoCaster as 1 of DemonicDuoBleedingID in DemonicDuoBleedingHashtable
Hashtable - Save DemonicDuoDamageValure[2] as 2 of DemonicDuoBleedingID in DemonicDuoBleedingHashtable
Hashtable - Save DemonicDuoBleedingTime as 3 of DemonicDuoID in DemonicDuoBleedingHashtable
Hashtable - Save Handle OfDemonicDuoDamageGroup[1] as 11 of DemonicDuoID in DemonicDuoHashtable
Set TempUnitGroup = (Units within DemonicDuoDamageRange of DemonicDuoLoc[4] matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is Magic Immune) Equal to False) and ((((Owner of (Matching unit)) is an enemy of (Owner of DemonicDuoCaster)) Equal to True) a
Unit Group - Pick every unit in TempUnitGroup and do (Actions)
Loop - Actions
Set DemonicDuoBleedingID = (Key (Picked unit))
Set DemonicDuoBleedingUnit = (Picked unit)
Unit - Cause DemonicDuoCaster to damage DemonicDuoBleedingUnit, dealing DemonicDuoDamageValure[1] damage of attack type Spells and damage type Normal
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(DemonicDuoBleedingUnit is Mechanical) Equal to True
Then - Actions
Special Effect - Create a special effect attached to the chest of DemonicDuoBleedingUnit using Abilities\Spells\Human\FlakCannons\FlakTarget.mdl
Else - Actions
Special Effect - Create a special effect attached to the chest of DemonicDuoBleedingUnit using Abilities\Spells\Other\Stampede\StampedeMissileDeath.mdl
Unit Group - Add DemonicDuoBleedingUnit to DemonicDuoBleedingGroup
Trigger - Turn on Demonic Duo Bleeding <gen>
Special Effect - Destroy (Last created special effect)
Unit Group - Add DemonicDuoBleedingUnit to DemonicDuoDamageGroup[2]
Hashtable - Save Handle OfDemonicDuoCaster as 1 of DemonicDuoBleedingID in DemonicDuoBleedingHashtable
Hashtable - Save DemonicDuoDamageValure[2] as 2 of DemonicDuoBleedingID in DemonicDuoBleedingHashtable
Hashtable - Save DemonicDuoBleedingTime as 3 of DemonicDuoID in DemonicDuoBleedingHashtable
Hashtable - Save Handle OfDemonicDuoDamageGroup[2] as 12 of DemonicDuoID in DemonicDuoHashtable
Unit Group - Pick every unit in DemonicDuoBleedingGroup and do (Actions)
Loop - Actions
Set DemonicDuoBleedingID = (Key (Picked unit))
Set DemonicDuoBleedingUnit = (Picked unit)
Set DemonicDuoCaster = (Load 1 of DemonicDuoBleedingID in DemonicDuoBleedingHashtable)
Set DemonicDuoDamageValure[2] = (Load 2 of DemonicDuoBleedingID from DemonicDuoBleedingHashtable)
Set DemonicDuoBleedingTime = (Load 3 of DemonicDuoBleedingID from DemonicDuoBleedingHashtable)
Set DemonicDuoBleedingTime = (DemonicDuoBleedingTime - 1)
Hashtable - Save DemonicDuoBleedingTime as 3 of DemonicDuoBleedingID in DemonicDuoBleedingHashtable
Unit - Cause DemonicDuoCaster to damage DemonicDuoBleedingUnit, dealing DemonicDuoDamageValure[2] damage of attack type Spells and damage type Normal
Special Effect - Create a special effect attached to the chest of DemonicDuoBleedingUnit using Objects\Spawnmodels\Human\HumanBlood\HumanBloodMortarTeam.mdl
Special Effect - Destroy (Last created special effect)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
DemonicDuoBleedingTime Equal to 0
Then - Actions
Unit Group - Remove DemonicDuoBleedingUnit from DemonicDuoBleedingGroup
Hashtable - Clear all child hashtables of child DemonicDuoBleedingID in DemonicDuoBleedingHashtable
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in DemonicDuoBleedingGroup) Equal to 0
Then - Actions
Trigger - Turn off (This trigger)
Else - Actions
Demonic Duo Bleeding Stop
Events
Unit - A unit Dies
Conditions
((Triggering unit) is in DemonicDuoBleedingGroup) Equal to True
Actions
Set DemonicDuoBleedingID = (Key (Triggering unit))
Set DemonicDuoBleedingUnit = (Triggering unit)
Unit Group - Remove DemonicDuoBleedingUnit from DemonicDuoBleedingGroup
Hashtable - Clear all child hashtables of child DemonicDuoBleedingID in DemonicDuoBleedingHashtable
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in DemonicDuoBleedingGroup) Equal to 0
12th Dec 2015
IcemanBo: Too long as NeedsFix. Rejected.
18:56, 3rd Dec 2012
Magtheridon96:
I really wouldn't recommend storing groups or locations into hashtables. It becomes counter-intuitive when deciding whether a certain variable should...
12th Dec 2015
IcemanBo: Too long as NeedsFix. Rejected.
18:56, 3rd Dec 2012
Magtheridon96:
I really wouldn't recommend storing groups or locations into hashtables. It becomes counter-intuitive when deciding whether a certain variable should be manipulated to remove a leak or not.
I would highly recommend making the special effects and all the other constants you're using inside your spell configurable in that Init trigger so the user wouldn't have to go through all your triggers in order to change one itty-bitty thing.
In addition to that, currently, it seems that this is hard-coded to function only for a set of unit-types. I'd recommend using a hashtable to allow the user to store data for a new unit-type.
Check out the Save/Load triggers in this resource. He allows users to set system variables to whatever they want, and then they run a trigger to register their data to the system. (You wouldn't allow them to tamper with your hashtables directly because they could mess it up)
In your Demonic Duo Condition trigger, you don't need to use location arrays. You can use temporary location variables. In fact, you can make that trigger share the same temporary location variables as your other triggers because Warcraft III is Single threaded, so 2 triggers will never run at the same time. The only time a trigger is interrupted is when you call a Wait action, a TriggerSyncReady()/TriggerSyncStart() action, if you run a trigger, or if you fire an event (like, if you kill a unit, you will interrupt the current trigger, and attempt to run all triggers that have the Death event, then you would continue the execution of your first trigger).
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.