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

Call of the Damned v1.0

Call of the Damned v1.0

Creates a summoning circle which allows the caster to conjure demons from another realm. Acolytes may help the caster during the summoning to reduce the summoning time and summon additional units.
Triggers


  • Call of the Damned Init
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- --------
      • -------- Main Ability --------
      • Set CD_Ability = Call of the Damned
      • -------- --------
      • -------- Orderstring of the Main ability --------
      • Set CD_AbilityOrder = starfall
      • -------- --------
      • -------- Ability that switches the Main Ability with the Fake Ability --------
      • -------- Note: This is necessary to avoid double casting the ability by the same unit --------
      • Set CD_SwitchAbility = Switch Call of the Damned
      • -------- --------
      • -------- Unit-type of the summoned unit which will appear on the center --------
      • -------- Note: Its usually the strongest unit in the batch --------
      • Set CD_SummonedUnitType[1] = Doom Guard - level 1
      • Set CD_SummonedUnitType[2] = Doom Guard - level 2
      • Set CD_SummonedUnitType[3] = Doom Guard - level 3
      • Set CD_SummonedUnitType[4] = Doom Guard - level 4
      • -------- --------
      • -------- The number of summoned units which will appear in the center of the circle --------
      • Set CD_SummonedUnitCount[1] = 1
      • Set CD_SummonedUnitCount[2] = 1
      • Set CD_SummonedUnitCount[3] = 1
      • Set CD_SummonedUnitCount[4] = 1
      • -------- --------
      • -------- Unit-type of the bonus unit that comes with the summoned unit once the summoning is complete --------
      • Set CD_BonusUnitType[1] = Fel Beast - level 1
      • Set CD_BonusUnitType[2] = Fel Beast - level 2
      • Set CD_BonusUnitType[3] = Fel Beast - level 3
      • Set CD_BonusUnitType[4] = Fel Beast - level 4
      • -------- --------
      • -------- The number of additional units that are summoned with each apprentice --------
      • -------- Note: When i mentioned apprentice im referring to acolytes --------
      • Set CD_BonusUnitCount[1] = 1
      • Set CD_BonusUnitCount[2] = 1
      • Set CD_BonusUnitCount[3] = 1
      • Set CD_BonusUnitCount[4] = 1
      • -------- --------
      • -------- How long will the summoned units last in our realm --------
      • -------- Note: If you want the summoned units to be permanent then make the value equal to zero (0) --------
      • Set CD_SummonedUnitDuration[1] = 120.00
      • Set CD_SummonedUnitDuration[2] = 120.00
      • Set CD_SummonedUnitDuration[3] = 120.00
      • Set CD_SummonedUnitDuration[4] = 120.00
      • -------- --------
      • -------- How long will it take to finish summoning --------
      • -------- Note: It should be less than the casting time of the main ability --------
      • Set CD_CastingTime[1] = 30.00
      • Set CD_CastingTime[2] = 30.00
      • Set CD_CastingTime[3] = 30.00
      • Set CD_CastingTime[4] = 30.00
      • -------- --------
      • -------- How many apprentice are allowed to help the caster --------
      • Set CD_ApprenticeUnitAllowed[1] = 2
      • Set CD_ApprenticeUnitAllowed[2] = 3
      • Set CD_ApprenticeUnitAllowed[3] = 4
      • Set CD_ApprenticeUnitAllowed[4] = 5
      • -------- --------
      • -------- The amount of casting time reduced when an apprentice helps the caster --------
      • Set CD_CastingTimeReduction[1] = 2.00
      • Set CD_CastingTimeReduction[2] = 2.00
      • Set CD_CastingTimeReduction[3] = 2.00
      • Set CD_CastingTimeReduction[4] = 2.00
      • -------- --------
      • -------- How large is the detection radius of each formation circle dedicated for the apprentice --------
      • Set CD_ApprenticeAoE[1] = 100.00
      • Set CD_ApprenticeAoE[2] = 100.00
      • Set CD_ApprenticeAoE[3] = 100.00
      • Set CD_ApprenticeAoE[4] = 100.00
      • -------- --------
      • -------- The actual size of the summoning circle --------
      • -------- Note: this is not the actual model circle but it determines how far are the apprentices from the center --------
      • Set CD_SummoningCircleAoE[1] = 500.00
      • Set CD_SummoningCircleAoE[2] = 500.00
      • Set CD_SummoningCircleAoE[3] = 500.00
      • Set CD_SummoningCircleAoE[4] = 500.00
      • -------- --------
      • -------- How far from the center of the summoning circle will the bonus units appear --------
      • Set CD_BonusUnitOffset[1] = 250.00
      • Set CD_BonusUnitOffset[2] = 250.00
      • Set CD_BonusUnitOffset[3] = 250.00
      • Set CD_BonusUnitOffset[4] = 250.00
      • -------- --------
      • -------- How large is the summoning circle model --------
      • -------- Note: the value comes in %. meaning 200 = 2x the size of the actual model --------
      • Set CD_SummoningCircleSize[1] = 300.00
      • Set CD_SummoningCircleSize[2] = 300.00
      • Set CD_SummoningCircleSize[3] = 300.00
      • Set CD_SummoningCircleSize[4] = 300.00
      • -------- --------
      • -------- Model used as the summoning circle --------
      • Set CD_SummoningCircleSFX = SharedModels\UBirth.mdl
      • -------- --------
      • -------- Transparency of the summoning circle --------
      • -------- Note:for this model i need a transparency to remove the creepy claw in it --------
      • Set CD_SummoningCircleTransparency = 1.00
      • -------- --------
      • -------- Model used once the summoning is complete/cancelled --------
      • Set CD_CleanSFX = Objects\Spawnmodels\Undead\UDeathMedium\UDeath.mdl
      • -------- --------
      • -------- The amount of time before the summoning circle vanishes when the summoning is complete/cancelled --------
      • -------- Note: the value is 2.10 to fit the spell visuals --------
      • Set CD_SummoningCircleDelay = 2.10
      • -------- --------
      • -------- Special effects found at the center of the summoning circle while summoning for added visuals --------
      • Set CD_SummoningGroundSFX1 = Abilities\Spells\Undead\Unsummon\UnsummonTarget.mdl
      • Set CD_SummoningGroundSFX2 = Abilities\Spells\Undead\Darksummoning\DarkSummonTarget.mdl
      • -------- --------
      • -------- The model used as indicator on where the caster stands and where the acolytes must stand --------
      • Set CD_FormationSFX = Abilities\Spells\Undead\Darksummoning\DarkSummonTarget.mdl
      • -------- --------
      • -------- The model used to indicate that the acolytes are helping the caster summon --------
      • Set CD_NotifySFX = Abilities\Spells\Items\TomeOfRetraining\TomeOfRetrainingCaster.mdl
      • -------- --------
      • -------- The model used as an indicator that the summoning has been successful --------
      • -------- Note: It appears at the center of the circle --------
      • Set CD_SpawnSFX = Doodads\Cinematic\ShimmeringPortal\ShimmeringPortal.mdl
      • -------- --------
      • -------- The animation of the substitute units --------
      • -------- Note: Substitute unit looks like the helping unit the only difference is they cannot be selected --------
      • -------- and are only there for the visuals --------
      • Set CD_SubstituteAnimation = work
      • -------- --------
      • -------- The interval on which the animation of the substitute units are called while summoning --------
      • -------- Note: Substitute unit looks like the helping unit the only difference is they cannot be selected --------
      • -------- and are only there for the visuals --------
      • Set CD_SubstituteInterval = 2.26
      • -------- --------
      • -------- The model used for the flying souls during the summoning ritual --------
      • Set CD_SoulSFX = Abilities\Weapons\ZigguratMissile\ZigguratMissile.mdl
      • -------- --------
      • -------- The maximum height of the souls --------
      • Set CD_SoulMaxHeight = 500.00
      • -------- --------
      • -------- The rotation of the souls --------
      • -------- Note: True of clockwise and False if counter-clockwise --------
      • Set CD_IsClockwise = True
      • -------- --------
      • -------- The speed of the rotation of the souls around the center of the circle --------
      • Set CD_SoulTurnRate = 3.00
      • -------- --------
      • -------- The amount of time before the soul reaches the center from the outside of the circle --------
      • Set CD_SoulDelay = 1.00
      • -------- --------
      • -------- The rate on which the souls are ascending or descending --------
      • Set CD_SoulHeightSpeed = 5.00
      • -------- --------
      • -------- The Unit-Type of the unit that can help with the summoning --------
      • Set CD_ApprenticeUnitType = Acolyte
      • -------- --------
      • -------- The Unit-Type of the substitute unit --------
      • -------- Note: Substitute unit looks like the helping unit the only difference is they cannot be selected --------
      • -------- and are only there for the visuals --------
      • Set CD_SubstituteUnitType = Apprentice
      • -------- --------
      • -------- The Unit-Type of the multipurpose dummy --------
      • Set CD_DummyUnitType = Dummy
      • -------- --------
      • -------- NECESSARRY ACTIONS --------
      • -------- Note: Do NOT tamper unless you know what you are doing --------
      • -------- --------
      • -------- Disable the switch ability to all players --------
      • For each (Integer CD_TempInt) from 1 to 12, do (Actions)
        • Loop - Actions
          • Player - Disable Switch Call of the Damned for (Player(CD_TempInt))
      • -------- --------
      • -------- Preload --------
      • Set CD_Point1 = (Random point in (Playable map area))
      • Unit - Create 1 CD_DummyUnitType for Neutral Passive at CD_Point1 facing Default building facing degrees
      • Set CD_Harvester = (Last created unit)
      • -------- --------
      • Unit - Add CD_Ability to CD_Harvester
      • Unit - Remove CD_Ability from CD_Harvester
      • -------- --------
      • Unit - Add Harvest (Gold and Lumber) to CD_Harvester
      • -------- --------
      • Custom script: call RemoveLocation(udg_CD_Point1)



  • Call of the Damned Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to CD_Ability
    • Actions
      • -------- --------
      • -------- Set current index --------
      • Set CD_Index1 = (CD_Index1 + 1)
      • -------- --------
      • -------- Store necessary values --------
      • Set CD_CasterUnit[CD_Index1] = (Triggering unit)
      • Set CD_Player[CD_Index1] = (Triggering player)
      • Set CD_Level[CD_Index1] = (Level of CD_Ability for CD_CasterUnit[CD_Index1])
      • -------- --------
      • -------- Set necessary points --------
      • Set CD_Point1 = (Position of CD_CasterUnit[CD_Index1])
      • Set CD_Point2 = (CD_Point1 offset by CD_SummoningCircleAoE[CD_Level[CD_Index1]] towards (Facing of CD_CasterUnit[CD_Index1]) degrees)
      • -------- --------
      • -------- clearing the path --------
      • Destructible - Pick every destructible within (CD_SummoningCircleAoE[CD_Level[CD_Index1]] + CD_ApprenticeAoE[CD_Level[CD_Index1]]) of CD_Point2 and do (Actions)
        • Loop - Actions
          • Set CD_Destructible = (Picked destructible)
          • Unit - Order CD_Harvester to Harvest CD_Destructible
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Current order of CD_Harvester) Equal to (Order(harvest))
            • Then - Actions
              • Destructible - Kill CD_Destructible
              • Unit - Order CD_Harvester to Stop
            • Else - Actions
      • -------- --------
      • -------- Calculate angles 360 (full circle) divided by the number of allowed helper + 1 --------
      • -------- to create the perfect gap between the caster and the summoners --------
      • Set CD_TempAngle = (Angle from CD_Point2 to CD_Point1)
      • Set CD_AngleAdjustment = (360.00 / ((Real(CD_ApprenticeUnitAllowed[CD_Level[CD_Index1]])) + 1.00))
      • -------- --------
      • -------- Create the dummy for the summoning circle on where the other models will be attached --------
      • Unit - Create 1 CD_DummyUnitType for Neutral Passive at CD_Point2 facing CD_TempAngle degrees
      • Set CD_SummoningCircleUnit[CD_Index1] = (Last created unit)
      • -------- --------
      • -------- Change the size and transparency of the summoning circle --------
      • Animation - Change CD_SummoningCircleUnit[CD_Index1]'s size to (CD_SummoningCircleSize[CD_Level[CD_Index1]]%, 100.00%, 100.00%) of its original size
      • Animation - Change CD_SummoningCircleUnit[CD_Index1]'s vertex coloring to (100.00%, 100.00%, 100.00%) with CD_SummoningCircleTransparency% transparency
      • -------- --------
      • -------- Apply the summoning circle model --------
      • Special Effect - Create a special effect attached to the origin of CD_SummoningCircleUnit[CD_Index1] using CD_SummoningCircleSFX
      • Set CD_SummoningCircleEffect[CD_Index1] = (Last created special effect)
      • -------- --------
      • -------- Apply the models found at the center of the summoning circle --------
      • Special Effect - Create a special effect at CD_Point2 using CD_SummoningGroundSFX1
      • Set CD_SummoningGroundEffect1[CD_Index1] = (Last created special effect)
      • Special Effect - Create a special effect at CD_Point2 using CD_SummoningGroundSFX2
      • Set CD_SummoningGroundEffect2[CD_Index1] = (Last created special effect)
      • -------- --------
      • -------- LOGIC --------
      • -------- add the anti double cast --------
      • Unit - Add Switch Call of the Damned to CD_CasterUnit[CD_Index1]
      • -------- --------
      • -------- time left before the summoning is complete --------
      • Set CD_CastingTimeLeft[CD_Index1] = CD_CastingTime[CD_Level[CD_Index1]]
      • -------- --------
      • -------- flag to indicate that the summoning is not done yet --------
      • Set CD_IsComplete[CD_Index1] = False
      • -------- --------
      • -------- flag to indicate that the slot is for the caster --------
      • Set CD_DefaultState = True
      • -------- --------
      • -------- dispose unneeded point --------
      • Custom script: call RemoveLocation(udg_CD_Point1)
      • -------- --------
      • -------- FORMATION CIRCLE --------
      • -------- loops to number of allowed helpers + the caster --------
      • For each (Integer CD_Looper2) from 1 to (CD_ApprenticeUnitAllowed[CD_Level[CD_Index1]] + 1), do (Actions)
        • Loop - Actions
          • -------- --------
          • -------- set current index --------
          • Set CD_Index2 = (CD_Index2 + 1)
          • -------- --------
          • -------- make a reference to the caster --------
          • Set CD_CasterId[CD_Index2] = CD_CasterUnit[CD_Index1]
          • -------- --------
          • -------- recycle the point variable and make a point towards the angle that we calculated earlier --------
          • Set CD_Point1 = (CD_Point2 offset by CD_SummoningCircleAoE[CD_Level[CD_Index1]] towards CD_TempAngle degrees)
          • -------- --------
          • -------- recycle the point variable and make a point towards the angle that we calculated earlier --------
          • -------- creates an indicator where helpers must stand --------
          • Unit - Create 1 CD_DummyUnitType for Neutral Passive at CD_Point1 facing CD_Angle[CD_Index2] degrees
          • Set CD_FormationUnit[CD_Index2] = (Last created unit)
          • -------- --------
          • -------- applies the model for the indicator --------
          • Special Effect - Create a special effect attached to the origin of CD_FormationUnit[CD_Index2] using CD_FormationSFX
          • Set CD_FormationEffect[CD_Index2] = (Last created special effect)
          • -------- --------
          • -------- indicates whether the spot has been occupied --------
          • -------- the default state is true for the caster so that no helper may occupy it --------
          • Set CD_IsOccupied[CD_Index2] = CD_DefaultState
          • -------- --------
          • -------- defaultstate is true if its the main caster --------
          • -------- it is also true if the spot has been occupied by a helper --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • CD_DefaultState Equal to True
            • Then - Actions
              • -------- --------
              • -------- animation time default --------
              • Set CD_SubstituteTimeLeft[CD_Index2] = 0.00
              • -------- --------
              • -------- all about the soul --------
              • Set CD_SoulAngle[CD_Index2] = CD_TempAngle
              • Set CD_SoulDistance[CD_Index2] = CD_SummoningCircleAoE[CD_Level[CD_Index1]]
              • Set CD_SoulSpeed[CD_Index2] = (CD_SummoningCircleAoE[CD_Level[CD_Index1]] / (CD_SoulDelay / 0.03))
              • Set CD_SoulCurrentHeight[CD_Index2] = 0.00
              • -------- --------
              • Set CD_IsInward[CD_Index2] = True
              • Set CD_IsUpward[CD_Index2] = True
              • -------- --------
              • Unit - Create 1 CD_DummyUnitType for Neutral Passive at CD_Point1 facing CD_Angle[CD_Index2] degrees
              • Set CD_SoulUnit[CD_Index2] = (Last created unit)
              • -------- --------
              • Unit - Add Storm Crow Form to CD_SoulUnit[CD_Index2]
              • Unit - Remove Storm Crow Form from CD_SoulUnit[CD_Index2]
              • -------- --------
              • Special Effect - Create a special effect attached to the origin of CD_SoulUnit[CD_Index2] using CD_SoulSFX
              • Set CD_SoulEffect[CD_Index2] = (Last created special effect)
              • -------- --------
              • -------- change the value of default state to create vacant spots --------
              • Set CD_DefaultState = False
            • Else - Actions
          • -------- --------
          • -------- clean up --------
          • Custom script: call RemoveLocation(udg_CD_Point1)
          • -------- --------
          • -------- adjust and store angles for later use --------
          • Set CD_Angle[CD_Index2] = CD_TempAngle
          • Set CD_TempAngle = (CD_TempAngle + CD_AngleAdjustment)
          • -------- --------
      • -------- --------
      • -------- dispose point --------
      • Custom script: call RemoveLocation(udg_CD_Point2)
      • -------- --------
      • -------- start summoning --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • CD_Index1 Equal to 1
        • Then - Actions
          • Trigger - Turn on Call of the Damned Effect <gen>
        • Else - Actions



  • Call of the Damned Effect
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • -------- --------
      • -------- enumerates through all the casters --------
      • For each (Integer CD_Looper1) from 1 to CD_Index1, do (Actions)
        • Loop - Actions
          • -------- --------
          • -------- checks if the caster is still casting --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Current order of CD_CasterUnit[CD_Looper1]) Equal to (Order(CD_AbilityOrder))
            • Then - Actions
              • -------- --------
              • -------- checks if the casting is complete --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • CD_CastingTimeLeft[CD_Looper1] Greater than 0.00
                • Then - Actions
                  • Set CD_CastingTimeLeft[CD_Looper1] = (CD_CastingTimeLeft[CD_Looper1] - 0.03)
                • Else - Actions
                  • Set CD_IsComplete[CD_Looper1] = True
                  • Unit - Order CD_CasterUnit[CD_Looper1] to Stop
              • -------- --------
              • -------- enumerates all the available spots and souls --------
              • For each (Integer CD_Looper2) from 1 to CD_Index2, do (Actions)
                • Loop - Actions
                  • -------- --------
                  • -------- checks if its for the right caster --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • CD_CasterId[CD_Looper2] Equal to CD_CasterUnit[CD_Looper1]
                    • Then - Actions
                      • -------- --------
                      • -------- checks if the spot is already occupied --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • CD_IsOccupied[CD_Looper2] Equal to True
                        • Then - Actions
                          • -------- --------
                          • -------- checks if its time to animate --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • CD_SubstituteTimeLeft[CD_Looper2] Greater than 0.00
                            • Then - Actions
                              • Set CD_SubstituteTimeLeft[CD_Looper2] = (CD_SubstituteTimeLeft[CD_Looper2] - 0.03)
                            • Else - Actions
                              • -------- --------
                              • -------- animate substitute unit and create notify special effect --------
                              • Set CD_Point1 = (Position of CD_FormationUnit[CD_Looper2])
                              • -------- --------
                              • Set CD_SubstituteTimeLeft[CD_Looper2] = CD_SubstituteInterval
                              • -------- --------
                              • Animation - Play CD_SubstituteUnit[CD_Looper2]'s CD_SubstituteAnimation animation
                              • -------- --------
                              • Special Effect - Create a special effect at CD_Point1 using CD_NotifySFX
                              • Special Effect - Destroy (Last created special effect)
                              • -------- --------
                              • Custom script: call RemoveLocation(udg_CD_Point1)
                          • -------- --------
                          • -------- SOUL ANIMATION --------
                          • -------- --------
                          • -------- soul rotation --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • CD_IsClockwise Equal to True
                            • Then - Actions
                              • Set CD_SoulAngle[CD_Looper2] = (CD_SoulAngle[CD_Looper2] - CD_SoulTurnRate)
                            • Else - Actions
                              • Set CD_SoulAngle[CD_Looper2] = (CD_SoulAngle[CD_Looper2] + CD_SoulTurnRate)
                          • -------- --------
                          • -------- soul distance --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • CD_IsInward[CD_Looper2] Equal to True
                            • Then - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • CD_SoulDistance[CD_Looper2] Greater than 0.00
                                • Then - Actions
                                  • Set CD_SoulDistance[CD_Looper2] = (CD_SoulDistance[CD_Looper2] - CD_SoulSpeed[CD_Looper2])
                                • Else - Actions
                                  • Set CD_IsInward[CD_Looper2] = False
                            • Else - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • CD_SoulDistance[CD_Looper2] Less than CD_SummoningCircleAoE[CD_Level[CD_Looper1]]
                                • Then - Actions
                                  • Set CD_SoulDistance[CD_Looper2] = (CD_SoulDistance[CD_Looper2] + CD_SoulSpeed[CD_Looper2])
                                • Else - Actions
                                  • Set CD_IsInward[CD_Looper2] = True
                          • -------- --------
                          • -------- soul height --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • CD_IsUpward[CD_Looper2] Equal to True
                            • Then - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • CD_SoulCurrentHeight[CD_Looper2] Less than CD_SoulMaxHeight
                                • Then - Actions
                                  • Set CD_SoulCurrentHeight[CD_Looper2] = (CD_SoulCurrentHeight[CD_Looper2] + CD_SoulHeightSpeed)
                                • Else - Actions
                                  • Set CD_IsUpward[CD_Looper2] = False
                            • Else - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • CD_SoulCurrentHeight[CD_Looper2] Greater than 0.00
                                • Then - Actions
                                  • Set CD_SoulCurrentHeight[CD_Looper2] = (CD_SoulCurrentHeight[CD_Looper2] - CD_SoulHeightSpeed)
                                • Else - Actions
                                  • Set CD_IsUpward[CD_Looper2] = True
                          • -------- --------
                          • -------- move soul to correct position --------
                          • Set CD_Point1 = (Position of CD_SummoningCircleUnit[CD_Looper1])
                          • Set CD_Point2 = (CD_Point1 offset by CD_SoulDistance[CD_Looper2] towards CD_SoulAngle[CD_Looper2] degrees)
                          • -------- --------
                          • Animation - Change CD_SoulUnit[CD_Looper2] flying height to CD_SoulCurrentHeight[CD_Looper2] at 0.00
                          • -------- --------
                          • Custom script: call SetUnitY(udg_CD_SoulUnit[udg_CD_Looper2], GetLocationY(udg_CD_Point2))
                          • Custom script: call SetUnitX(udg_CD_SoulUnit[udg_CD_Looper2], GetLocationX(udg_CD_Point2))
                          • -------- --------
                          • Custom script: call RemoveLocation(udg_CD_Point1)
                          • Custom script: call RemoveLocation(udg_CD_Point2)
                        • Else - Actions
                          • -------- --------
                          • -------- checks if nearby helper unit-type is nearby --------
                          • Set CD_Point1 = (Position of CD_FormationUnit[CD_Looper2])
                          • Set CD_TempGroup = (Units within CD_ApprenticeAoE[CD_Level[CD_Looper1]] of CD_Point1)
                          • -------- --------
                          • Unit Group - Pick every unit in CD_TempGroup and do (Actions)
                            • Loop - Actions
                              • -------- --------
                              • Set CD_TempUnit = (Picked unit)
                              • -------- --------
                              • -------- checks if nearby units are valid helpers --------
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • (Unit-type of CD_TempUnit) Equal to CD_ApprenticeUnitType
                                  • (CD_TempUnit is alive) Equal to True
                                  • (Owner of CD_TempUnit) Equal to CD_Player[CD_Looper1]
                                • Then - Actions
                                  • -------- --------
                                  • -------- necessarry check if the spot has been occupied in case there are more than one nearby helper --------
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • CD_IsOccupied[CD_Looper2] Equal to False
                                    • Then - Actions
                                      • -------- --------
                                      • -------- spot is not occupied --------
                                      • Set CD_IsOccupied[CD_Looper2] = True
                                      • -------- --------
                                      • -------- hide the helper unit --------
                                      • Set CD_HiddenUnit[CD_Looper2] = CD_TempUnit
                                      • Unit - Make CD_HiddenUnit[CD_Looper2] Invulnerable
                                      • Unit - Hide CD_HiddenUnit[CD_Looper2]
                                      • -------- --------
                                      • -------- souls --------
                                      • Set CD_SoulAngle[CD_Looper2] = CD_Angle[CD_Looper2]
                                      • Set CD_SoulDistance[CD_Looper2] = CD_SummoningCircleAoE[CD_Level[CD_Looper1]]
                                      • Set CD_SoulSpeed[CD_Looper2] = (CD_SummoningCircleAoE[CD_Level[CD_Looper1]] / (CD_SoulDelay / 0.03))
                                      • Set CD_SoulCurrentHeight[CD_Looper2] = 0.00
                                      • -------- --------
                                      • Set CD_IsInward[CD_Looper2] = True
                                      • Set CD_IsUpward[CD_Looper2] = True
                                      • -------- --------
                                      • Unit - Create 1 CD_DummyUnitType for Neutral Passive at CD_Point1 facing CD_Angle[CD_Looper2] degrees
                                      • Set CD_SoulUnit[CD_Looper2] = (Last created unit)
                                      • -------- --------
                                      • Unit - Add Storm Crow Form to CD_SoulUnit[CD_Looper2]
                                      • Unit - Remove Storm Crow Form from CD_SoulUnit[CD_Looper2]
                                      • -------- --------
                                      • Special Effect - Create a special effect attached to the origin of CD_SoulUnit[CD_Looper2] using CD_SoulSFX
                                      • Set CD_SoulEffect[CD_Looper2] = (Last created special effect)
                                      • -------- --------
                                      • Unit - Create 1 CD_SubstituteUnitType for Neutral Passive at CD_Point1 facing (CD_Angle[CD_Looper2] + 180.00) degrees
                                      • Set CD_SubstituteUnit[CD_Looper2] = (Last created unit)
                                      • -------- --------
                                      • -------- animation time left --------
                                      • Set CD_SubstituteTimeLeft[CD_Looper2] = 0.00
                                      • -------- --------
                                      • -------- casting time reduction --------
                                      • Set CD_CastingTimeLeft[CD_Looper1] = (CD_CastingTimeLeft[CD_Looper1] - CD_CastingTimeReduction[CD_Level[CD_Looper1]])
                                    • Else - Actions
                                • Else - Actions
                                  • -------- --------
                                  • Set CD_TempUnit = No unit
                          • -------- --------
                          • Custom script: call DestroyGroup(udg_CD_TempGroup)
                          • -------- --------
                          • Custom script: call RemoveLocation(udg_CD_Point1)
                    • Else - Actions
            • Else - Actions
              • -------- --------
              • -------- checks if the summoning is complete --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • CD_IsComplete[CD_Looper1] Equal to True
                • Then - Actions
                  • -------- --------
                  • Set CD_Point1 = (Position of CD_SummoningCircleUnit[CD_Looper1])
                  • -------- --------
                  • Special Effect - Create a special effect at CD_Point1 using CD_SpawnSFX
                  • Special Effect - Destroy (Last created special effect)
                  • -------- --------
                  • -------- create summoned units --------
                  • -------- it will loop as many summoned units are needed --------
                  • For each (Integer CD_TempInt) from 1 to CD_SummonedUnitCount[CD_Level[CD_Looper1]], do (Actions)
                    • Loop - Actions
                      • -------- --------
                      • Unit - Create 1 CD_SummonedUnitType[CD_Level[CD_Looper1]] for CD_Player[CD_Looper1] at CD_Point1 facing (Facing of CD_SummoningCircleUnit[CD_Looper1]) degrees
                      • Set CD_TempUnit = (Last created unit)
                      • -------- --------
                      • Unit - Add a CD_SummonedUnitDuration[CD_Level[CD_Looper1]] second Generic expiration timer to CD_TempUnit
                      • Unit - Add classification of Summoned to CD_TempUnit
                  • -------- --------
                  • For each (Integer CD_Looper2) from 1 to CD_Index2, do (Actions)
                    • Loop - Actions
                      • -------- --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • CD_CasterId[CD_Looper2] Equal to CD_CasterUnit[CD_Looper1]
                          • CD_IsOccupied[CD_Looper2] Equal to True
                        • Then - Actions
                          • -------- --------
                          • Set CD_Point2 = (CD_Point1 offset by CD_BonusUnitOffset[CD_Level[CD_Looper1]] towards CD_Angle[CD_Looper2] degrees)
                          • -------- create summoned units --------
                          • -------- it will loop as many summoned units are needed --------
                          • For each (Integer CD_TempInt) from 1 to CD_BonusUnitCount[CD_Level[CD_Looper1]], do (Actions)
                            • Loop - Actions
                              • -------- --------
                              • Unit - Create 1 CD_BonusUnitType[CD_Level[CD_Looper1]] for CD_Player[CD_Looper1] at CD_Point2 facing CD_Angle[CD_Looper2] degrees
                              • Set CD_TempUnit = (Last created unit)
                              • -------- --------
                              • Unit - Add a CD_SummonedUnitDuration[CD_Level[CD_Looper1]] second Generic expiration timer to CD_TempUnit
                              • Unit - Add classification of Summoned to CD_TempUnit
                          • -------- --------
                          • Custom script: call RemoveLocation(udg_CD_Point2)
                        • Else - Actions
                  • -------- --------
                  • Custom script: call RemoveLocation(udg_CD_Point1)
                • Else - Actions
              • -------- --------
              • -------- DEINDEXING --------
              • For each (Integer CD_Looper2) from 1 to CD_Index2, do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • CD_CasterId[CD_Looper2] Equal to CD_CasterUnit[CD_Looper1]
                    • Then - Actions
                      • -------- --------
                      • Special Effect - Destroy CD_SoulEffect[CD_Looper2]
                      • Special Effect - Destroy CD_FormationEffect[CD_Looper2]
                      • -------- --------
                      • Unit - Add a 0.01 second Generic expiration timer to CD_FormationUnit[CD_Looper2]
                      • Unit - Add a 0.01 second Generic expiration timer to CD_SubstituteUnit[CD_Looper2]
                      • Unit - Add a 0.01 second Generic expiration timer to CD_SoulUnit[CD_Looper2]
                      • -------- --------
                      • Unit - Unhide CD_HiddenUnit[CD_Looper2]
                      • Unit - Make CD_HiddenUnit[CD_Looper2] Vulnerable
                      • -------- --------
                      • Set CD_CasterId[CD_Looper2] = CD_CasterId[CD_Index2]
                      • -------- --------
                      • Set CD_HiddenUnit[CD_Looper2] = CD_HiddenUnit[CD_Index2]
                      • -------- --------
                      • Set CD_Angle[CD_Looper2] = CD_Angle[CD_Index2]
                      • -------- --------
                      • Set CD_FormationUnit[CD_Looper2] = CD_FormationUnit[CD_Index2]
                      • Set CD_FormationEffect[CD_Looper2] = CD_FormationEffect[CD_Index2]
                      • -------- --------
                      • Set CD_IsOccupied[CD_Looper2] = CD_IsOccupied[CD_Index2]
                      • -------- --------
                      • Set CD_SoulUnit[CD_Looper2] = CD_SoulUnit[CD_Index2]
                      • -------- --------
                      • Set CD_IsUpward[CD_Looper2] = CD_IsUpward[CD_Index2]
                      • Set CD_IsInward[CD_Looper2] = CD_IsInward[CD_Index2]
                      • -------- --------
                      • Set CD_SoulAngle[CD_Looper2] = CD_SoulAngle[CD_Index2]
                      • Set CD_SoulCurrentHeight[CD_Looper2] = CD_SoulCurrentHeight[CD_Index2]
                      • Set CD_SoulDistance[CD_Looper2] = CD_SoulDistance[CD_Index2]
                      • Set CD_SoulSpeed[CD_Looper2] = CD_SoulSpeed[CD_Index2]
                      • -------- --------
                      • Set CD_SubstituteTimeLeft[CD_Looper2] = CD_SubstituteTimeLeft[CD_Index2]
                      • Set CD_SubstituteUnit[CD_Looper2] = CD_SubstituteUnit[CD_Index2]
                      • -------- --------
                      • Set CD_Looper2 = (CD_Looper2 - 1)
                      • Set CD_Index2 = (CD_Index2 - 1)
                    • Else - Actions
              • -------- --------
              • Special Effect - Create a special effect attached to the origin of CD_SummoningCircleUnit[CD_Looper1] using CD_CleanSFX
              • Special Effect - Destroy (Last created special effect)
              • -------- --------
              • Special Effect - Destroy CD_SummoningCircleEffect[CD_Looper1]
              • Special Effect - Destroy CD_SummoningGroundEffect1[CD_Looper1]
              • Special Effect - Destroy CD_SummoningGroundEffect2[CD_Looper1]
              • -------- --------
              • Unit - Add a CD_SummoningCircleDelay second Generic expiration timer to CD_SummoningCircleUnit[CD_Looper1]
              • -------- --------
              • Unit - Remove CD_SwitchAbility from CD_CasterUnit[CD_Looper1]
              • -------- --------
              • Set CD_CasterUnit[CD_Looper1] = CD_CasterUnit[CD_Index1]
              • Set CD_Level[CD_Looper1] = CD_Level[CD_Index1]
              • Set CD_Player[CD_Looper1] = CD_Player[CD_Index1]
              • -------- --------
              • Set CD_CastingTimeLeft[CD_Looper1] = CD_CastingTimeLeft[CD_Index1]
              • -------- --------
              • Set CD_SummoningCircleUnit[CD_Looper1] = CD_SummoningCircleUnit[CD_Index1]
              • Set CD_SummoningCircleEffect[CD_Looper1] = CD_SummoningCircleEffect[CD_Index1]
              • Set CD_SummoningGroundEffect1[CD_Looper1] = CD_SummoningGroundEffect1[CD_Index1]
              • Set CD_SummoningGroundEffect2[CD_Looper1] = CD_SummoningGroundEffect2[CD_Index1]
              • -------- --------
              • Set CD_Looper1 = (CD_Looper1 - 1)
              • Set CD_Index1 = (CD_Index1 - 1)
              • -------- --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • CD_Index1 Equal to 0
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions

Credits

Vexorian's dummy.mdx
Some Words

No changes has been made since submitted to the Zephyr Contest #14.
Previews
Contents

Call of the Damned (Map)

Spell looks good! Descriptive config trigger and nothing game breaking in the code. I would appreciate it if you can add "How to Install" instructions in your description + map.

Needs Fixed

  • Nothing

Suggestions

  • CD is too generic for a variable prefix. This can cause issues if the user happens to have the same prefix in their map
  • Add configurables for the attachment points of the special effects that attach to the unit
  • Even though you only change the helper units vertex colors to (100%, 100%, 100%), I would add configurables for this as well
  • When you create the summoned units, you make them face the same angle as the helpers. Given that they can't move, I would store their facing angle when they first come out
  • Periodic timer should be configurable. If a user decided to change the loop to something else without changing everything else that is dependant to it, the spell will bug out
  • (Units within range) has a reference leak

Status

Approved
 
Top