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

[GUI] Demonic Duo 1.0

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
Idea by Hollification, made by me.

Description

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])
      • Custom script: call RemoveLocation(udg_DemonicDuoLoc[5])
      • Custom script: call RemoveLocation(udg_DemonicDuoLoc[6])
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DemonicDuoDistance Less than 150.00
        • Then - Actions
          • Unit - Order DemonicDuoCaster to Stop
          • Game - Display to (Player group((Triggering player))) the text: Too close to cast s...
        • Else - Actions
  • Demonic Duo Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Demonic Duo
    • Actions
      • Set DemonicDuoID = (Key (Triggering unit))
      • Set DemonicDuoCaster = (Triggering unit)
      • -------- ===== Configurables pt2 ===== --------
      • -------- Slash damage --------
      • Set DemonicDuoDamageValure[1] = (5.00 x (Real((Strength of DemonicDuoCaster (Include bonuses)))))
      • -------- Bleeding damage (per sec) --------
      • Set DemonicDuoDamageValure[2] = (Real((Strength of DemonicDuoCaster (Include bonuses))))
      • -------- Bleeding time --------
      • Set DemonicDuoBleedingTime = 10
      • -------- Animation ID --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Unit-type of DemonicDuoCaster) Equal to Tauren Chieftain
        • Then - Actions
          • Set DemonicDuoAnimation = 2
        • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Unit-type of DemonicDuoCaster) Equal to Blademaster of Blackrock Clan
            • Then - Actions
              • Set DemonicDuoAnimation = 8
            • Else - Actions
      • -------- Animation length --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Unit-type of DemonicDuoCaster) Equal to Tauren Chieftain
        • Then - Actions
          • Set DemonicDuoAnimationLength = 1.00
        • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Unit-type of DemonicDuoCaster) Equal to Blademaster of Blackrock Clan
            • Then - Actions
              • Set DemonicDuoAnimationLength = 1.16
            • Else - Actions
      • -------- Clone Type --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Unit-type of DemonicDuoCaster) Equal to Tauren Chieftain
        • Then - Actions
          • Set DemonicDuoCloneType = Fel Clone
        • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Unit-type of DemonicDuoCaster) Equal to Blademaster of Blackrock Clan
            • Then - Actions
              • Set DemonicDuoCloneType = Orc Clone
            • Else - Actions
      • -------- ===== End of confugurables ===== --------
      • Unit Group - Add DemonicDuoCaster to DemonicDuoGroup
      • Set DemonicDuoLoc[0] = (Target point of ability being cast)
      • Set DemonicDuoLoc[1] = (Position of DemonicDuoCaster)
      • Set DemonicDuoAngle[1] = (Angle from DemonicDuoLoc[1] to DemonicDuoLoc[0])
      • Set DemonicDuoDistance = (Distance between DemonicDuoLoc[0] and DemonicDuoLoc[1])
      • Set DemonicDuoLoc[2] = (DemonicDuoLoc[1] offset by (2.00 x DemonicDuoDistance) towards DemonicDuoAngle[1] degrees)
      • Set DemonicDuoAngle[2] = (DemonicDuoAngle[1] + 70.53)
      • Set DemonicDuoLoc[3] = (DemonicDuoLoc[1] offset by (0.66 x DemonicDuoDistance) towards DemonicDuoAngle[2] degrees)
      • Set DemonicDuoAngle[2] = (Angle from DemonicDuoLoc[3] to DemonicDuoLoc[0])
      • Set DemonicDuoLoc[4] = (DemonicDuoLoc[3] offset by (2.00 x DemonicDuoDistance) towards DemonicDuoAngle[2] degrees)
      • Unit - Order DemonicDuoCaster to Stop
      • Unit - Pause DemonicDuoCaster
      • Unit - Hide DemonicDuoCaster
      • Custom script: call RemoveLocation(udg_DemonicDuoLoc[0])
      • 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
      • Custom script: call SetUnitAnimationByIndex(udg_DemonicDuoClone[1], udg_DemonicDuoAnimation)
      • Custom script: call SetUnitAnimationByIndex(udg_DemonicDuoClone[2], udg_DemonicDuoAnimation)
      • 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
              • Custom script: call DestroyGroup( udg_TempUnitGroup)
              • 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
              • Custom script: call DestroyGroup( udg_TempUnitGroup)
              • Custom script: call SetUnitX(udg_DemonicDuoClone[1], GetUnitX(udg_DemonicDuoClone[1]) + udg_DemonicDuoVelocity * Cos(udg_DemonicDuoAngle[3]))
              • Custom script: call SetUnitY(udg_DemonicDuoClone[1], GetUnitY(udg_DemonicDuoClone[1]) + udg_DemonicDuoVelocity * Sin(udg_DemonicDuoAngle[3]))
              • Custom script: call SetUnitX(udg_DemonicDuoClone[2], GetUnitX(udg_DemonicDuoClone[2]) + udg_DemonicDuoVelocity * Cos(udg_DemonicDuoAngle[4]))
              • Custom script: call SetUnitY(udg_DemonicDuoClone[2], GetUnitY(udg_DemonicDuoClone[2]) + udg_DemonicDuoVelocity * Sin(udg_DemonicDuoAngle[4]))
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Distance between DemonicDuoLoc[1] and DemonicDuoLoc[2]) Less than or equal to DemonicDuoVelocity
                • Then - Actions
                  • Unit Group - Remove all units from DemonicDuoDamageGroup[1]
                  • Unit Group - Remove all units from DemonicDuoDamageGroup[2]
                  • Hashtable - Save Handle OfDemonicDuoDamageGroup[1] as 11 of DemonicDuoID in DemonicDuoHashtable
                  • Hashtable - Save Handle OfDemonicDuoDamageGroup[2] as 12 of DemonicDuoID in DemonicDuoHashtable
                  • Set DemonicDuoAngle[1] = (Load 6 of DemonicDuoID from DemonicDuoHashtable)
                  • Set DemonicDuoAngle[2] = (Load 7 of DemonicDuoID from DemonicDuoHashtable)
                  • Set DemonicDuoAngle[1] = (DemonicDuoAngle[1] - 180.00)
                  • Set DemonicDuoAngle[2] = (DemonicDuoAngle[2] - 180.00)
                  • Set DemonicDuoAngle[3] = ((DemonicDuoAngle[1] / 180.00) x Pi)
                  • Set DemonicDuoAngle[4] = ((DemonicDuoAngle[2] / 180.00) x Pi)
                  • Hashtable - Save DemonicDuoAngle[3] as 8 of DemonicDuoID in DemonicDuoHashtable
                  • Hashtable - Save DemonicDuoAngle[4] as 9 of DemonicDuoID in DemonicDuoHashtable
                  • Hashtable - Save 2 as 10 of DemonicDuoID in DemonicDuoHashtable
                  • Unit - Make DemonicDuoCaster face DemonicDuoLoc[1] over 0.00 seconds
                  • Unit - Make DemonicDuoClone[1] face DemonicDuoLoc[1] over 0.00 seconds
                  • Unit - Make DemonicDuoClone[2] face DemonicDuoLoc[3] over 0.00 seconds
                  • Custom script: call SetUnitX(udg_DemonicDuoClone[1], GetLocationX(udg_DemonicDuoLoc[2]))
                  • Custom script: call SetUnitY(udg_DemonicDuoClone[1], GetLocationY(udg_DemonicDuoLoc[2]))
                  • Custom script: call SetUnitX(udg_DemonicDuoClone[2], GetLocationX(udg_DemonicDuoLoc[4]))
                  • Custom script: call SetUnitY(udg_DemonicDuoClone[2], GetLocationY(udg_DemonicDuoLoc[4]))
                  • Custom script: call RemoveLocation(udg_DemonicDuoLoc[2])
                  • Custom script: call RemoveLocation(udg_DemonicDuoLoc[4])
                • Else - Actions
              • Custom script: call RemoveLocation(udg_DemonicDuoLoc[1])
              • Custom script: call RemoveLocation(udg_DemonicDuoLoc[3])
            • Else - Actions
              • 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
                  • Custom script: call DestroyGroup( udg_TempUnitGroup)
                  • 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
                  • Custom script: call DestroyGroup( udg_TempUnitGroup)
                  • Custom script: call SetUnitX(udg_DemonicDuoClone[1], GetUnitX(udg_DemonicDuoClone[1]) + udg_DemonicDuoVelocity * Cos(udg_DemonicDuoAngle[3]))
                  • Custom script: call SetUnitY(udg_DemonicDuoClone[1], GetUnitY(udg_DemonicDuoClone[1]) + udg_DemonicDuoVelocity * Sin(udg_DemonicDuoAngle[3]))
                  • Custom script: call SetUnitX(udg_DemonicDuoClone[2], GetUnitX(udg_DemonicDuoClone[2]) + udg_DemonicDuoVelocity * Cos(udg_DemonicDuoAngle[4]))
                  • Custom script: call SetUnitY(udg_DemonicDuoClone[2], GetUnitY(udg_DemonicDuoClone[2]) + udg_DemonicDuoVelocity * Sin(udg_DemonicDuoAngle[4]))
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Distance between DemonicDuoLoc[1] and DemonicDuoLoc[2]) Less than or equal to DemonicDuoVelocity
                    • Then - Actions
                      • Unit Group - Remove all units from DemonicDuoDamageGroup[1]
                      • Unit Group - Remove all units from DemonicDuoDamageGroup[2]
                      • 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)
                      • Custom script: call SetUnitX(udg_DemonicDuoClone[1], GetLocationX(udg_DemonicDuoLoc[1]))
                      • Custom script: call SetUnitY(udg_DemonicDuoClone[1], GetLocationY(udg_DemonicDuoLoc[1]))
                      • Custom script: call SetUnitX(udg_DemonicDuoClone[2], GetLocationX(udg_DemonicDuoLoc[3]))
                      • Custom script: call SetUnitY(udg_DemonicDuoClone[2], GetLocationY(udg_DemonicDuoLoc[3]))
                      • Custom script: call RemoveLocation(udg_DemonicDuoLoc[1])
                      • Custom script: call RemoveLocation(udg_DemonicDuoLoc[3])
                      • Unit - Remove DemonicDuoClone[1] from the game
                      • Unit - Remove DemonicDuoClone[2] from the game
                      • Unit Group - Remove DemonicDuoCaster from DemonicDuoGroup
                      • Unit - Unhide DemonicDuoCaster
                      • Unit - Unpause DemonicDuoCaster
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Number of units in DemonicDuoGroup) Equal to 0
                        • Then - Actions
                          • Trigger - Turn off (This trigger)
                        • Else - Actions
                    • Else - Actions
                  • Custom script: call RemoveLocation(udg_DemonicDuoLoc[2])
                  • Custom script: call RemoveLocation(udg_DemonicDuoLoc[4])
                • Else - Actions
                  • Set DemonicDuoState = (DemonicDuoState + 1)
                  • Hashtable - Save DemonicDuoState as 10 of DemonicDuoID in DemonicDuoHashtable
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • DemonicDuoState Equal to 31
                    • Then - Actions
                      • Set DemonicDuoAnimation = (Load 17 of DemonicDuoID from DemonicDuoHashtable)
                      • Custom script: call SetUnitAnimationByIndex(udg_DemonicDuoClone[1], udg_DemonicDuoAnimation)
                      • Custom script: call SetUnitAnimationByIndex(udg_DemonicDuoClone[2], udg_DemonicDuoAnimation)
                    • Else - Actions
  • Demonic Duo Bleeding
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • 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
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
Keywords:
Demon, Demonic, Duo, Clone, Slash, X, Pattern.
Contents

Demonic Duo (Map)

Reviews
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...

Moderator

M

Moderator

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).
 
Top