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
Some Words