- Joined
- Jun 20, 2014
- Messages
- 552
requesting for approval
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