- Joined
- Jan 30, 2013
- Messages
- 12,893
This is epic!
| PREVIEW: |
| DESCRIPTION: |
Hells Portal Configuration

Events


Map initialization

Conditions

Actions


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- UNDECLARED VARIABLES FIELD --------


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


Set HP_Map[0] = HP_Map[0]


Set HP_StartHeight[0] = HP_StartHeight[0]


Set HP_Angle[0] = HP_Angle[0]


Set HP_EndHeight[0] = HP_EndHeight[0]


-------- ^ DELETE AFTER IMPORTING ^ --------


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- The interval of the periodic is solved by ( second / frames per second ). * Recommended Value: ( 1 / 30 ) for default performance. --------


Set HP_Periodic = Hells Portal Periodic <gen>


-------- ^ Set this to: Hells Portal Periodic <gen> --------


Set HP_PeriodicInterval = (1.00 / 30.00)


-------- ^Modify at your own risk: Changing the frames per second can impact performance. --------


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- SPELL CONFIGURATION FIELD --------


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- OBJECT EDITOR --------


-------- The spell or ability used in the codes. ( Strictly Import the Hell's Portal Ability ) --------


Set HP_Ability = Hell's Portal


-------- --------


-------- The dummy unit used in the codes. ( Strictly Import the Hell's Portal Dummy Unit ) --------


Set HP_DummyType = Hell's Portal Dummy


-------- ^ Tip: You can also select one of the dummies already existed or created in your map. ( Make sure dummy.mdx is the model used in that dummy unit and the unit's data value must be similar to it. ) --------


-------- ^ This tip is useful for sharing dummy type units. ( Saves you 1 Unit Type in your object editor ) ( As long as they have similar object data values. ) --------


-------- --------


-------- The portal unit used in the codes. ( Strictly Import the Hell's Portal Unit ) --------


Set HP_PortalType = Hell's Portal Unit


-------- ^ Note: This unit type is required to manipulate portal's animations. --------


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- * DATA ARRAY VALUES: [ 1 ] = Level 1, [ 2 ] = Level 2, [ 3 ] = Level 3 ..., You can increase the array value if you want to add the levels of the ability in an integer consecutive order. --------


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- SPELL DATA --------


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- The maximum level of the ability or the number of levels in Hell's Portal Ability. --------


Set HP_MaxLevel = 3


-------- ^ Modify at your own risk: Must be equal to the amount of levels in Hell's Portal Ability in OBJECT EDITOR. --------


-------- --------


-------- The radius of the ability. --------


Set HP_Radius[1] = 300.00


Set HP_Radius[2] = 400.00


Set HP_Radius[3] = 500.00


-------- --------


-------- The initial damage of the ability. --------


Set HP_ImpactDamage[1] = 50.00


Set HP_ImpactDamage[2] = 75.00


Set HP_ImpactDamage[3] = 100.00


-------- --------


-------- The model that spawns on damage inflicted by the impact. --------


Set HP_Model[0] = Abilities\Weapons\RedDragonBreath\RedDragonMissile.mdl


Set HP_ModelString[0] = origin


-------- --------


-------- TARGETS FILTRATION - you can filter your wanted targets here. --------


Set HP_FilterFlying = True


Set HP_FilterGround = True


Set HP_FilterStructure = True


Set HP_FilterMechanical = True


Set HP_FilterMagicImmune = True


-------- ^ Note: Flying and Structure can only be filtered on impact damage, not on thrust damages, pulls, and knockbacks. --------


-------- ^ This is intentional --------


-------- --------


-------- The ability can destroy trees? --------


Set HP_Destroy = True


-------- --------


-------- The ability can shake cameras? --------


Set HP_Shake = True


-------- ^ Note: Enabling this requires you to import the Camera Shake System into your map. --------


-------- ^ Set this to False if you don't want this feature so you can exclude importing the system. --------


-------- --------


-------- The magnitude of the camera shake. --------


Set HP_ShakeMagnitude = 50.00


-------- --------


-------- The maximum range of the camera shake. --------


Set HP_ShakeRange = 1000.00


-------- --------


-------- The attack and damage type of the ability. --------


Set HP_AttackType = Spells


Set HP_DamageType = Normal


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- SWORD DATA --------


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- The model that spawns in the target location. --------


Set HP_Model[1] = war3mapImported\Kingdom Come.mdx


Set HP_ModelString[1] = origin


-------- --------


-------- The size of the model. --------


Set HP_SwordSize[1] = 0.50


Set HP_SwordSize[2] = 0.65


Set HP_SwordSize[3] = 0.80


-------- --------


-------- The delay of opening a portal, this is the duration of the thrusting event; where damaging and pulling happens. --------


Set HP_ThrustingDelay[1] = 2.00


Set HP_ThrustingDelay[2] = 2.00


Set HP_ThrustingDelay[3] = 2.00


-------- --------


-------- The damage per interval of the thrusting event. --------


Set HP_ThrustingDamage[1] = 5.00


Set HP_ThrustingDamage[2] = 7.50


Set HP_ThrustingDamage[3] = 10.00


-------- The infliction rate of the thrusting damage. --------


Set HP_ThrustingRate = 20


-------- ^ Tip: can be set to 0 if you want to disable the thrusting damage. --------


-------- --------


-------- The thrusting event can pull units? --------


Set HP_ThrustingPull[1] = True


Set HP_ThrustingPull[2] = True


Set HP_ThrustingPull[3] = True


-------- --------


-------- The model that spawns on every damage inflicted by the thrusting event. --------


Set HP_Model[2] = Abilities\Weapons\FireBallMissile\FireBallMissile.mdl


Set HP_ModelString[2] = origin


-------- --------


-------- The center gap where units shouldn't be pulled in thrusting event. --------


Set HP_ThrustingGap = 100.00


-------- The speed of the pulling in thrusting event. --------


Set HP_ThrustingSpeed[1] = 15.00


Set HP_ThrustingSpeed[2] = 15.00


Set HP_ThrustingSpeed[3] = 15.00


-------- The decaying speed of the pulling in thrusting event. --------


Set HP_ThrustingDecay[1] = 0.50


Set HP_ThrustingDecay[2] = 0.50


Set HP_ThrustingDecay[3] = 0.50


-------- --------


-------- The radius of destroying trees when the sword impacts. --------


Set HP_SwordDestroyRadius[1] = 150.00


Set HP_SwordDestroyRadius[2] = 250.00


Set HP_SwordDestroyRadius[3] = 350.00


-------- ^ Note: only works if HP_Destroy is enabled. --------


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- PORTAL DATA --------


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- The animation of the portal. --------


Set HP_PortalAnimation = stand


-------- --------


-------- The animation time scale of the portal. --------


Set HP_PortalAnimationTime[1] = 30.00


Set HP_PortalAnimationTime[2] = 150.00


Set HP_PortalAnimationTime[3] = 300.00


-------- --------


-------- The starting size of the portal. --------


Set HP_PortalStartingSize[1] = 0.35


Set HP_PortalStartingSize[2] = 0.60


Set HP_PortalStartingSize[3] = 0.15


-------- The ending size of the portal. --------


Set HP_PortalEndingSize[1] = 0.70


Set HP_PortalEndingSize[2] = 1.15


Set HP_PortalEndingSize[3] = 1.50


-------- --------


-------- The color of the portal. --------


-------- ( RGB values here ranges from: 0 - 100 ) --------


-------- Red --------


Set HP_PortalColor[1] = 60.00


-------- Green --------


Set HP_PortalColor[2] = 10.00


-------- Blue --------


Set HP_PortalColor[3] = 5.00


-------- --------


-------- The transparency of the portal where 100% is invisible and 0% is visible. --------


-------- Starting Transparency --------


Set HP_PortalStartingAlpha = 100.00


-------- Ending Transparency --------


Set HP_PortalEndingAlpha = 15.00


-------- --------


-------- The duration of the portal. --------


Set HP_PortalDuration[1] = 0.05


Set HP_PortalDuration[2] = 0.05


Set HP_PortalDuration[3] = 10.00


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- SPAWNING + SUMMONING DATA --------


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- The interval of spawning projectiles, tick starts at 0. --------


Set HP_SpawningInterval[1] = 0.00


Set HP_SpawningInterval[2] = 0.00


Set HP_SpawningInterval[3] = 0.95


-------- --------


-------- The time delay of the spawned projectiles to land on ground. --------


Set HP_SpawningLandTime[1] = 1.75


Set HP_SpawningLandTime[2] = 2.00


Set HP_SpawningLandTime[3] = 1.50


-------- --------


-------- The spawning should be instant? ( means the interval is one and only once ) --------


Set HP_SpawnInstantly[1] = True


Set HP_SpawnInstantly[2] = True


Set HP_SpawnInstantly[3] = False


Set HP_SpawnOn = 0.25


-------- ^ Note: this feature disables spawning interval entirely ( regardless of portal duration ) and --------


-------- replaces with an instant creation of projectiles instead. ( starts at HP_SpawnOn ) --------


-------- ^ I didn't want to merge instant by interval creations to not complicate the main mechanics of the ability. --------


-------- --------


-------- The number of the spawning projectiles produced per spawning interval or instantly. --------


Set HP_SpawningCount[1] = 10


Set HP_SpawningCount[2] = 5


Set HP_SpawningCount[3] = 3


-------- --------


-------- The spawning should be; --------


-------- True = circular and fixed on radius. --------


-------- False = random inside the radius. --------


Set HP_SpawningCircular[1] = True


Set HP_SpawningCircular[2] = False


Set HP_SpawningCircular[3] = False


-------- --------


-------- THE SPAWNING PROJECTILES AND SUMMONED UNIT'S PROPERTIES --------


-------- ^ Each is unique based on array number and not depending on level anymore. --------


-------- ( meaning you can create more unit types here, just make sure the array numbers are specified and unique ) --------


-------- --------


-------- Properties that should be set to make a complete summoned unit type; --------


-------- HP_SpawningModel[number] = this is the projectile model for summoning unit. --------


-------- HP_SpawningSize[number] = this is the size for the projectile model. --------


-------- HP_SpawningMaxHeight[number] = this is the maximum height for the projectile model. --------


-------- HP_SummonType[number] = this is the unit type to be summoned. --------


-------- HP_SummonCreatedModel[number] = this is the model that spawns on summoned unit when created. ( or destroyed when it's not permanent ) --------


-------- HP_SummonCreatedRadius[number] = this is the radius of the damage ( and/or knockback ) on the unit's creation. --------


-------- HP_SummonCreatedDamage[number] = this is the damage within the radius of the unit's creation --------


-------- HP_SummonKnockback[number] = knockback units within the radius of the unit's creation? --------


-------- HP_SummonDestroyRadius[number] = the radius of destroying trees when the projectile lands. --------


-------- ^ Note: only works if HP_Destroy is enabled. --------


-------- --------


-------- Fel Stalker --------


Set HP_SpawningModel[1] = Abilities\Weapons\PhoenixMissile\Phoenix_Missile_mini.mdl


Set HP_SpawningModelString[1] = origin


Set HP_SpawningSize[1] = 1.00


Set HP_SpawningMaxHeight[1] = 150.00


Set HP_SummonType[1] = Fel Stalker


Set HP_SummonCreatedModel[1] = Abilities\Spells\Orc\FeralSpirit\feralspirittarget.mdl


Set HP_SummonCreatedModelString[1] = origin


Set HP_SummonCreatedRadius[1] = 0.00


Set HP_SummonCreatedDamage[1] = 0.00


Set HP_SummonKnockback[1] = False


Set HP_SummonDestroyRadius[1] = 100.00


-------- --------


-------- Doomguard --------


Set HP_SpawningModel[2] = Abilities\Weapons\PhoenixMissile\Phoenix_Missile.mdl


Set HP_SpawningModelString[2] = origin


Set HP_SpawningSize[2] = 1.20


Set HP_SpawningMaxHeight[2] = 350.00


Set HP_SummonType[2] = Doom Guard


Set HP_SummonCreatedModel[2] = Abilities\Spells\Other\Doom\DoomDeath.mdl


Set HP_SummonCreatedModelString[2] = origin


Set HP_SummonCreatedRadius[2] = 200.00


Set HP_SummonCreatedDamage[2] = 50.00


Set HP_SummonKnockback[2] = True


Set HP_SummonDestroyRadius[2] = 150.00


-------- --------


-------- Felguard --------


Set HP_SpawningModel[3] = Abilities\Weapons\RedDragonBreath\RedDragonMissile.mdl


Set HP_SpawningModelString[3] = origin


Set HP_SpawningSize[3] = 1.10


Set HP_SpawningMaxHeight[3] = 250.00


Set HP_SummonType[3] = Felguard


Set HP_SummonCreatedModel[3] = Abilities\Spells\Demon\DarkPortal\DarkPortalTarget.mdl


Set HP_SummonCreatedModelString[3] = origin


Set HP_SummonCreatedRadius[3] = 0.00


Set HP_SummonCreatedDamage[3] = 0.00


Set HP_SummonKnockback[3] = False


Set HP_SummonDestroyRadius[3] = 125.00


-------- --------


-------- This is the minimum and maximum number of summoned unit types per level. --------


Set HP_SummonTypeCountMin[1] = 1


Set HP_SummonTypeCountMax[1] = 1


Set HP_SummonTypeCountMin[2] = 2


Set HP_SummonTypeCountMax[2] = 2


Set HP_SummonTypeCountMin[3] = 1


Set HP_SummonTypeCountMax[3] = 3


-------- --------


-------- The number of unit types set here. --------


Set HP_SummonTypeMax = 3


-------- --------


-------- The summoned unit is permanent or not? --------


Set HP_SummonPermanent = False


-------- --------


-------- If the summoned unit is not permanent then this is the duration that it can last. --------


Set HP_SummonExpirationTime = 10.00


-------- --------


-------- The models that spawn in the portal when it's bursting out projectiles. ( not created on instant ) --------


Set HP_Model[3] = Abilities\Weapons\FireBallMissile\FireBallMissile.mdl


Set HP_ModelString[3] = chest


Set HP_Model[4] = Objects\Spawnmodels\Undead\ImpaleTargetDust\ImpaleTargetDust.mdl


Set HP_ModelString[4] = origin


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- KNOCKBACK DATA --------


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- The model that spawns when the unit is being knockbacked. --------


Set HP_Model[5] = Abilities\Weapons\AncientProtectorMissile\AncientProtectorMissile.mdl


Set HP_ModelString[5] = origin


-------- --------


-------- The creation rate of the model spawning on the unit when being knockbacked. --------


Set HP_KnockbackRate = 15


-------- --------


-------- The range of the knockback. --------


Set HP_KnockbackRange = 200.00


-------- --------


-------- The speed of the knockback. --------


Set HP_KnockbackSpeed = 15.00


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- CODE DATA --------


-------- ( BE CAREFUL TOUCHING THE LINES BELOW IF YOU HAVE NO EXPERIENCE IN ITS CODING DEFINITION ) --------


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- MAP BOUNDARIES --------


Set HP_CustomLocation = (Point(0.00, 0.00))


Custom script: set udg_HP_Map[1] = GetRectMinX (bj_mapInitialPlayableArea)


Custom script: set udg_HP_Map[3] = GetRectMinY (bj_mapInitialPlayableArea)


Custom script: set udg_HP_Map[2] = GetRectMaxX(bj_mapInitialPlayableArea)


Custom script: set udg_HP_Map[4] = GetRectMaxY(bj_mapInitialPlayableArea)


-------- PRELOAD OBJECTS --------


Custom script: set udg_HP_Unit = CreateUnit(Player(15), udg_HP_DummyType, 0, 0, 0)


Custom script: call SetUnitY(udg_HP_Unit, udg_HP_Map[4]+1000)


Custom script: if UnitAddAbility(udg_HP_Unit, udg_HP_Ability) and UnitRemoveAbility(udg_HP_Unit, udg_HP_Ability) then


Custom script: endif


Set HP_CustomInteger = 0


For each (Integer HP_CustomInteger) from 0 to 5, do (Actions)



Loop - Actions




Custom script: call DestroyEffect(AddSpecialEffect(udg_HP_Model[udg_HP_CustomInteger], GetUnitX(udg_HP_Unit), GetUnitY(udg_HP_Unit)))


Custom script: call RemoveUnit(CreateUnit(Player(15), udg_HP_PortalType, 0, 0, 0))


Custom script: call RemoveUnit(udg_HP_Unit)


For each (Integer HP_CustomInteger) from 1 to HP_SummonTypeMax, do (Actions)



Loop - Actions




Custom script: set udg_HP_Unit = CreateUnit(Player(15), udg_HP_SummonType[udg_HP_CustomInteger], 0, 0, 0)




Custom script: call SetUnitY(udg_HP_Unit, udg_HP_Map[4]+1000)




Custom script: call DestroyEffect(AddSpecialEffect(udg_HP_SpawningModel[udg_HP_CustomInteger], GetUnitX(udg_HP_Unit), GetUnitY(udg_HP_Unit)))




Custom script: call DestroyEffect(AddSpecialEffect(udg_HP_SummonCreatedModel[udg_HP_CustomInteger], GetUnitX(udg_HP_Unit), GetUnitY(udg_HP_Unit)))




Custom script: call RemoveUnit(udg_HP_Unit)


If (All Conditions are True) then do (Then Actions) else do (Else Actions)



If - Conditions




HP_Destroy Equal to True



Then - Actions




Custom script: set udg_HP_DestructibleChecker = CreateUnit(Player(15), udg_HP_DummyType, 0, 0, 0)




Custom script: call UnitAddAbility( udg_HP_DestructibleChecker,'Ahar' )



Else - Actions


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- DON'T TOUCH THESE. ( If this line malfunctions you can touch it to correct the needed parameters or values. ) --------


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


Custom script: call TriggerRegisterTimerEventPeriodic(udg_HP_Periodic, udg_HP_PeriodicInterval)


-------- CALCULATIONS --------


Set HP_MaxPitch = 180


Set HP_HeightCheck = 50.00


For each (Integer HP_CustomInteger) from 1 to HP_MaxLevel, do (Actions)



Loop - Actions




Set HP_PortalReal[HP_CustomInteger] = (HP_ThrustingDelay[HP_CustomInteger] / HP_PeriodicInterval)




Set HP_PortalAlphaCalculation[HP_CustomInteger] = ((HP_PortalStartingAlpha - HP_PortalEndingAlpha) / HP_PortalReal[HP_CustomInteger])




Set HP_PortalSizeCalculation[HP_CustomInteger] = ((HP_PortalStartingSize[HP_CustomInteger] - HP_PortalEndingSize[HP_CustomInteger]) / HP_PortalReal[HP_CustomInteger])




Set HP_SpawningReal[HP_CustomInteger] = (360.00 / (Real(HP_SpawningCount[HP_CustomInteger])))




Set HP_SpawningRealMin[HP_CustomInteger] = (HP_Radius[HP_CustomInteger] / 2.00)




Set HP_SpawningLandReal[HP_CustomInteger] = (HP_SpawningLandTime[HP_CustomInteger] / HP_PeriodicInterval)




Set HP_PitchReal[HP_CustomInteger] = ((Real(HP_MaxPitch)) / HP_SpawningLandReal[HP_CustomInteger])


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- END OF SPELL CONFIGURATION FIELD --------


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


Custom script: endfunction


Custom script: function HP_OnMap takes real x, real y returns boolean


Custom script: return (x < udg_HP_Map[2] and x > udg_HP_Map[1]) and (y < udg_HP_Map[4] and y > udg_HP_Map[3])


Custom script: endfunction


Custom script: function HP_Move takes unit o, real x, real y, boolean path, boolean map returns nothing


Custom script: set udg_CP_Point = Location(x, y)


Custom script: call TriggerExecute( gg_trg_Check_Walkability )


-------- *Checking Paths* --------


Custom script: if ( udg_CP_PointIsWalkable and path ) then


Custom script: call SetUnitX(o, x)


Custom script: call SetUnitY(o, y)


Custom script: elseif ( not path ) then


Custom script: if HP_OnMap(x, y) then


Custom script: call SetUnitX(o, x)


Custom script: call SetUnitY(o, y)


Custom script: elseif ( not map ) then


Custom script: call SetUnitX(o, x)


Custom script: call SetUnitY(o, y)


Custom script: endif


Custom script: endif


Custom script: call RemoveLocation(udg_CP_Point)


Custom script: endfunction


Custom script: function HP_GetZ takes real x, real y returns real


Custom script: call MoveLocation(udg_HP_CustomLocation, x, y)


Custom script: return GetLocationZ(udg_HP_CustomLocation)


Custom script: endfunction


Custom script: function HP_Parabola takes real y, real x, real x2, real y2, real y3, real y4 returns real


Custom script: return ( 4. * y * x2 * ( x - x2 ) / ( x * x ) + x2 * ( y3 - y2 ) / x ) + ( y2 - y4 )
Hells Portal Execution

Events


Unit - A unit Starts the effect of an ability

Conditions


(Ability being cast) Equal to HP_Ability

Actions


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------


-------- declaration of locals --------


Custom script: local real x = GetSpellTargetX( )


Custom script: local real y = GetSpellTargetY( )


-------- - --------


Set HP_Caster[0] = (Triggering unit)


Set HP_CasterPlayer[0] = (Owner of HP_Caster[0])


Set HP_Level[0] = (Level of HP_Ability for HP_Caster[0])


-------- - --------


Custom script: set udg_HP_Unit = CreateUnit(udg_HP_CasterPlayer[0], udg_HP_DummyType, x, y, Atan2(y - GetUnitY(udg_HP_Caster[0]), x - GetUnitX(udg_HP_Caster[0])) * bj_RADTODEG)


Custom script: set udg_HP_CustomID = GetUnitUserData(udg_HP_Unit)


Custom script: call HP_Move(udg_HP_Unit, x, y, false, true)


Custom script: call SetUnitScale(udg_HP_Unit, udg_HP_SwordSize[udg_HP_Level[0]], 0, 0)


Custom script: call DestroyEffect(AddSpecialEffectTarget(udg_HP_Model[1], udg_HP_Unit, udg_HP_ModelString[1]))


-------- - --------


Custom script: set udg_HP_Portal[udg_HP_CustomID] = CreateUnit(udg_HP_CasterPlayer[0], udg_HP_PortalType, x, y, Atan2(y - GetUnitY(udg_HP_Caster[0]), x - GetUnitX(udg_HP_Caster[0])) * bj_RADTODEG)


Custom script: call HP_Move(udg_HP_Portal[udg_HP_CustomID], x, y, false, true)


Animation - Change HP_Portal[HP_CustomID]'s vertex coloring to (HP_PortalColor[1]%, HP_PortalColor[2]%, HP_PortalColor[3]%) with HP_PortalStartingAlpha% transparency


Custom script: call SetUnitScale(udg_HP_Portal[udg_HP_CustomID], udg_HP_PortalStartingSize[udg_HP_Level[0]], 0, 0)


Animation - Play HP_Portal[HP_CustomID]'s HP_PortalAnimation animation


Animation - Change HP_Portal[HP_CustomID]'s animation speed to HP_PortalAnimationTime[HP_Level[0]]% of its original speed


-------- - --------


If (All Conditions are True) then do (Then Actions) else do (Else Actions)



If - Conditions




HP_Destroy Equal to True



Then - Actions




Custom script: call MoveLocation(udg_HP_CustomLocation, GetUnitX(udg_HP_Unit), GetUnitY(udg_HP_Unit))




Destructible - Pick every destructible within HP_SwordDestroyRadius[HP_Level[0]] of HP_CustomLocation and do (Actions)





Loop - Actions






Set HP_Destructible = (Picked destructible)






Unit - Order HP_DestructibleChecker to Harvest HP_Destructible






If (All Conditions are True) then do (Then Actions) else do (Else Actions)







If - Conditions








(Current order of HP_DestructibleChecker) Equal to (Order(harvest))







Then - Actions








Destructible - Kill HP_Destructible







Else - Actions






Unit - Order HP_DestructibleChecker to Stop



Else - Actions


-------- - --------


If (All Conditions are True) then do (Then Actions) else do (Else Actions)



If - Conditions




HP_Shake Equal to True



Then - Actions




Set RCSS_EventMagnitude = HP_ShakeMagnitude




Set RCSS_EventMaxRange = HP_ShakeRange




Custom script: set udg_RCSS_EventLocation = Location(x, y)




-------- ^ The system removes this location leak. --------




Custom script: call TriggerExecute( gg_trg_CSS_New_Event )



Else - Actions


-------- - --------


Custom script: call GroupEnumUnitsInRange(bj_lastCreatedGroup, x, y, udg_HP_Radius[udg_HP_Level[0]], null)


Custom script: loop


Custom script: set udg_HP_PickedUnit = FirstOfGroup(bj_lastCreatedGroup)


Custom script: exitwhen udg_HP_PickedUnit == null


If (All Conditions are True) then do (Then Actions) else do (Else Actions)



If - Conditions




(HP_PickedUnit is dead) Equal to False




Or - Any (Conditions) are true





Conditions






(HP_PickedUnit is A flying unit) Equal to False






HP_FilterFlying Equal to True




Or - Any (Conditions) are true





Conditions






(HP_PickedUnit is A ground unit) Equal to False






HP_FilterGround Equal to True




Or - Any (Conditions) are true





Conditions






(HP_PickedUnit is A structure) Equal to False






HP_FilterStructure Equal to True




Or - Any (Conditions) are true





Conditions






(HP_PickedUnit is Mechanical) Equal to False






HP_FilterMechanical Equal to True




Or - Any (Conditions) are true





Conditions






(HP_PickedUnit is Magic Immune) Equal to False






HP_FilterMagicImmune Equal to True




(HP_PickedUnit belongs to an enemy of HP_CasterPlayer[0]) Equal to True



Then - Actions




Custom script: call DestroyEffect(AddSpecialEffectTarget(udg_HP_Model[0], udg_HP_PickedUnit, udg_HP_ModelString[0]))




Unit - Cause HP_Caster[0] to damage HP_PickedUnit, dealing HP_ImpactDamage[HP_Level[0]] damage of attack type HP_AttackType and damage type HP_DamageType



Else - Actions


Custom script: call GroupRemoveUnit(bj_lastCreatedGroup, udg_HP_PickedUnit)


Custom script: endloop


-------- - --------


If (All Conditions are True) then do (Then Actions) else do (Else Actions)



If - Conditions




HP_SpawnInstantly[HP_Level[0]] Equal to True



Then - Actions




Set HP_SpawningInstantlyFlag[HP_CustomID] = True




Set HP_SpawningInstantlyCounter[HP_CustomID] = HP_SpawnOn



Else - Actions


Set HP_Stage[HP_CustomID] = 1


Set HP_Caster[HP_CustomID] = HP_Caster[0]


Set HP_CasterPlayer[HP_CustomID] = HP_CasterPlayer[0]


Set HP_Level[HP_CustomID] = HP_Level[0]


Set HP_ActivationCounter[HP_CustomID] = 0.00


Set HP_PortalAlphaHandler[HP_CustomID] = HP_PortalStartingAlpha


Set HP_PortalSizeHandler[HP_CustomID] = HP_PortalStartingSize[HP_Level[0]]


Set HP_PullSpeed[HP_CustomID] = HP_ThrustingSpeed[HP_Level[0]]


-------- - --------


Set HP_Instance = (HP_Instance + 1)


Unit Group - Add HP_Unit to HP_Group


-------- - --------


If (All Conditions are True) then do (Then Actions) else do (Else Actions)



If - Conditions




HP_Instance Equal to 1



Then - Actions




Trigger - Turn on HP_Periodic



Else - Actions


-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
Hells Portal Periodic

Events

Conditions

Actions


Unit Group - Pick every unit in HP_Group and do (Actions)



Loop - Actions




-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------




-------- declaration of locals --------




Custom script: local real x




Custom script: local real x2




Custom script: local real dis




Custom script: local real y




Custom script: local real y2




Custom script: local real ang




Set HP_Unit = (Picked unit)




Custom script: set udg_HP_ID = GetUnitUserData(udg_HP_Unit)




Custom script: set x = GetUnitX(udg_HP_Unit)




Custom script: set y = GetUnitY(udg_HP_Unit)




-------- - --------




If (All Conditions are True) then do (Then Actions) else do (Else Actions)





If - Conditions






HP_SpawnInstantly[HP_Level[HP_ID]] Equal to True





Then - Actions






If (All Conditions are True) then do (Then Actions) else do (Else Actions)







If - Conditions








HP_SpawningInstantlyFlag[HP_ID] Equal to True








HP_SpawningInstantlyCounter[HP_ID] Less than or equal to 0.00







Then - Actions








-------- - --------








For each (Integer HP_CustomInteger) from 1 to HP_SpawningCount[HP_Level[HP_ID]], do (Actions)









Loop - Actions










-------- - --------










Set HP_SpawningReal[0] = (HP_SpawningReal[0] + HP_SpawningReal[HP_Level[HP_ID]])










-------- - --------










If (All Conditions are True) then do (Then Actions) else do (Else Actions)











If - Conditions












HP_SpawningCircular[HP_Level[HP_ID]] Equal to True











Then - Actions












Custom script: set dis = udg_HP_Radius[udg_HP_Level[udg_HP_ID]]












Custom script: set ang = udg_HP_SpawningReal[0] * bj_DEGTORAD












Custom script: set x2 = x + dis * Cos(ang)












Custom script: set y2 = y + dis * Sin (ang)











Else - Actions












Custom script: set dis = GetRandomReal(udg_HP_SpawningRealMin[udg_HP_Level[udg_HP_ID]], udg_HP_Radius[udg_HP_Level[udg_HP_ID]])












Custom script: set ang = GetRandomReal(-bj_PI, bj_PI)












Custom script: set x2 = x + dis * Cos(ang)












Custom script: set y2 = y + dis * Sin (ang)










-------- - --------










Custom script: set ang = Atan2( y2 - y , x2 - x )










Custom script: set udg_HP_Portal[0] = CreateUnit(udg_HP_CasterPlayer[udg_HP_ID], udg_HP_DummyType, x, y, ang * bj_RADTODEG)










Custom script: call HP_Move(udg_HP_Portal[0], x, y, false, true)










Custom script: call SetUnitAnimationByIndex(udg_HP_Portal[0], udg_HP_MaxPitch)










Custom script: set udg_HP_CustomID = GetUnitUserData(udg_HP_Portal[0])










-------- - --------










Set HP_Random[HP_CustomID] = (Random integer number between HP_SummonTypeCountMin[HP_Level[HP_ID]] and HP_SummonTypeCountMax[HP_Level[HP_ID]])










Custom script: call SetUnitScale(udg_HP_Portal[0], udg_HP_SpawningSize[udg_HP_Random[udg_HP_CustomID]], 0, 0)










Custom script: set udg_HP_SpawningModelHandler[udg_HP_CustomID] = AddSpecialEffectTarget(udg_HP_SpawningModel[udg_HP_Random[udg_HP_CustomID]], udg_HP_Portal[0], udg_HP_SpawningModelString[udg_HP_Random[udg_HP_CustomID]])










Custom script: set udg_HP_MaxDistance[udg_HP_CustomID] = SquareRoot( ( x2 - x )*( x2 - x ) + ( y2 - y )*( y2 - y ) )










Custom script: set udg_HP_StartHeight[udg_HP_CustomID] = GetUnitFlyHeight(udg_HP_Portal[0]) + HP_GetZ( x , y )










Set HP_CurrentHeight[HP_CustomID] = HP_SpawningMaxHeight[HP_Random[HP_CustomID]]










Custom script: set udg_HP_EndHeight[udg_HP_CustomID] = HP_GetZ( x2 , y2 )










Custom script: if UnitAddAbility(udg_HP_Portal[0], 'Amrf') and UnitRemoveAbility(udg_HP_Portal [0], 'Amrf') then










Custom script: endif










Custom script: set udg_HP_Angle[udg_HP_CustomID] = ang










-------- - --------










Set HP_Pitch[HP_CustomID] = (Real(HP_MaxPitch))










Set HP_CurrentDistance[HP_CustomID] = 0.00










Set HP_LandTimeCalculation[HP_CustomID] = (HP_MaxDistance[HP_CustomID] / HP_SpawningLandReal[HP_Level[HP_ID]])










Set HP_Caster[HP_CustomID] = HP_Caster[HP_ID]










Set HP_CasterPlayer[HP_CustomID] = HP_CasterPlayer[HP_ID]










Set HP_Level[HP_CustomID] = HP_Level[HP_ID]










Set HP_Stage[HP_CustomID] = 3










Set HP_Instance = (HP_Instance + 1)










Unit Group - Add HP_Portal[0] to HP_Group








-------- - --------








Set HP_SpawningInstantlyFlag[HP_ID] = False







Else - Actions








Set HP_SpawningInstantlyCounter[HP_ID] = (HP_SpawningInstantlyCounter[HP_ID] - HP_PeriodicInterval)





Else - Actions




-------- - --------




If (All Conditions are True) then do (Then Actions) else do (Else Actions)





If - Conditions






HP_Stage[HP_ID] Equal to 1





Then - Actions






-------- - --------






If (All Conditions are True) then do (Then Actions) else do (Else Actions)







If - Conditions








HP_ActivationCounter[HP_ID] Less than or equal to HP_ThrustingDelay[HP_Level[HP_ID]]







Then - Actions








-------- - --------








Set HP_PortalAlphaHandler[HP_ID] = (HP_PortalAlphaHandler[HP_ID] - HP_PortalAlphaCalculation[HP_Level[HP_ID]])








Animation - Change HP_Portal[HP_ID]'s vertex coloring to (HP_PortalColor[1]%, HP_PortalColor[2]%, HP_PortalColor[3]%) with HP_PortalAlphaHandler[HP_ID]% transparency








Set HP_PortalSizeHandler[HP_ID] = (HP_PortalSizeHandler[HP_ID] - HP_PortalSizeCalculation[HP_Level[HP_ID]])








Custom script: call SetUnitScale(udg_HP_Portal[udg_HP_ID], udg_HP_PortalSizeHandler[udg_HP_ID], 0, 0)








-------- - --------








If (All Conditions are True) then do (Then Actions) else do (Else Actions)









If - Conditions










HP_ThrustingPull[HP_Level[HP_ID]] Equal to True









Then - Actions










If (All Conditions are True) then do (Then Actions) else do (Else Actions)











If - Conditions












HP_PullSpeed[HP_ID] Greater than 0.00











Then - Actions












Set HP_PullSpeed[HP_ID] = (HP_PullSpeed[HP_ID] - HP_ThrustingDecay[HP_Level[HP_ID]])











Else - Actions












Set HP_PullSpeed[HP_ID] = 0.00









Else - Actions








-------- - --------








Custom script: call GroupEnumUnitsInRange(bj_lastCreatedGroup, x, y, udg_HP_Radius[udg_HP_Level[udg_HP_ID]], null)








Custom script: loop








Custom script: set udg_HP_PickedUnit = FirstOfGroup(bj_lastCreatedGroup)








Custom script: exitwhen udg_HP_PickedUnit == null








If (All Conditions are True) then do (Then Actions) else do (Else Actions)









If - Conditions










(HP_PickedUnit is dead) Equal to False










(HP_PickedUnit is A flying unit) Equal to False










Or - Any (Conditions) are true











Conditions












(HP_PickedUnit is A ground unit) Equal to False












HP_FilterGround Equal to True










(HP_PickedUnit is A structure) Equal to False










Or - Any (Conditions) are true











Conditions












(HP_PickedUnit is Mechanical) Equal to False












HP_FilterMechanical Equal to True










Or - Any (Conditions) are true











Conditions












(HP_PickedUnit is Magic Immune) Equal to False












HP_FilterMagicImmune Equal to True










(HP_PickedUnit belongs to an enemy of HP_CasterPlayer[HP_ID]) Equal to True









Then - Actions










-------- - --------










If (All Conditions are True) then do (Then Actions) else do (Else Actions)











If - Conditions












HP_ThrustingPull[HP_Level[HP_ID]] Equal to True











Then - Actions












Custom script: set dis = udg_HP_PullSpeed[udg_HP_ID]












Custom script: set x2 = GetUnitX(udg_HP_PickedUnit)












Custom script: set y2 = GetUnitY(udg_HP_PickedUnit)












Custom script: set ang = Atan2( y - y2 , x - x2 )












Custom script: if not IsUnitInRangeXY(udg_HP_PickedUnit, x, y, udg_HP_ThrustingGap) then












Custom script: call HP_Move(udg_HP_PickedUnit, x2 + dis * Cos(ang), y2 + dis * Sin(ang), true, true)












Custom script: endif











Else - Actions










-------- - --------










If (All Conditions are True) then do (Then Actions) else do (Else Actions)











If - Conditions












HP_ThrustingRate Greater than or equal to (Random integer number between 1 and 100)











Then - Actions












Custom script: call DestroyEffect(AddSpecialEffectTarget(udg_HP_Model[2], udg_HP_PickedUnit, udg_HP_ModelString[2]))












Unit - Cause HP_Caster[HP_ID] to damage HP_PickedUnit, dealing HP_ThrustingDamage[HP_Level[HP_ID]] damage of attack type HP_AttackType and damage type HP_DamageType











Else - Actions










-------- - --------









Else - Actions








Custom script: call GroupRemoveUnit(bj_lastCreatedGroup, udg_HP_PickedUnit)








Custom script: endloop








Set HP_ActivationCounter[HP_ID] = (HP_ActivationCounter[HP_ID] + HP_PeriodicInterval)







Else - Actions








Custom script: set udg_HP_CustomID = GetUnitUserData(udg_HP_Portal[udg_HP_ID])








Set HP_Caster[HP_CustomID] = HP_Caster[HP_ID]








Set HP_CasterPlayer[HP_CustomID] = HP_CasterPlayer[HP_ID]








Set HP_Level[HP_CustomID] = HP_Level[HP_ID]








Set HP_ActivationCounter[HP_CustomID] = 0.00








Set HP_SpawningCounter[HP_CustomID] = 0.00








Set HP_Stage[HP_CustomID] = 2








Set HP_Instance = (HP_Instance + 1)








Unit Group - Add HP_Portal[HP_ID] to HP_Group








Unit - Kill HP_Unit








Set HP_Instance = (HP_Instance - 1)








Unit Group - Remove HP_Unit from HP_Group








If (All Conditions are True) then do (Then Actions) else do (Else Actions)









If - Conditions










HP_Instance Equal to 0









Then - Actions










Custom script: call DisableTrigger(udg_HP_Periodic)









Else - Actions






-------- - --------





Else - Actions






If (All Conditions are True) then do (Then Actions) else do (Else Actions)







If - Conditions








HP_Stage[HP_ID] Equal to 2







Then - Actions








-------- - --------








If (All Conditions are True) then do (Then Actions) else do (Else Actions)









If - Conditions










HP_ActivationCounter[HP_ID] Less than or equal to HP_PortalDuration[HP_Level[HP_ID]]









Then - Actions










If (All Conditions are True) then do (Then Actions) else do (Else Actions)











If - Conditions












HP_SpawnInstantly[HP_Level[HP_ID]] Equal to False











Then - Actions












Set HP_SpawningCounter[HP_ID] = (HP_SpawningCounter[HP_ID] + HP_PeriodicInterval)












If (All Conditions are True) then do (Then Actions) else do (Else Actions)













If - Conditions














HP_SpawningCounter[HP_ID] Greater than or equal to HP_SpawningInterval[HP_Level[HP_ID]]













Then - Actions














-------- - --------














Custom script: set udg_HP_PickedUnit = CreateUnit(udg_HP_CasterPlayer[udg_HP_ID], udg_HP_DummyType, x, y, GetRandomReal(0,360))














Custom script: call HP_Move(udg_HP_PickedUnit, x, y, false, true)














Custom script: call SetUnitScale(udg_HP_PickedUnit, udg_HP_PortalEndingSize[udg_HP_Level[udg_HP_ID]], 0, 0)














Custom script: call DestroyEffect(AddSpecialEffectTarget(udg_HP_Model[3], udg_HP_PickedUnit, udg_HP_ModelString[3]))














-------- - --------














For each (Integer HP_CustomInteger) from 1 to HP_SpawningCount[HP_Level[HP_ID]], do (Actions)















Loop - Actions
















-------- - --------
















Set HP_SpawningReal[0] = (HP_SpawningReal[0] + HP_SpawningReal[HP_Level[HP_ID]])
















-------- - --------
















If (All Conditions are True) then do (Then Actions) else do (Else Actions)

















If - Conditions


















HP_SpawningCircular[HP_Level[HP_ID]] Equal to True

















Then - Actions


















Custom script: set dis = udg_HP_Radius[udg_HP_Level[udg_HP_ID]]


















Custom script: set ang = udg_HP_SpawningReal[0] * bj_DEGTORAD


















Custom script: set x2 = x + dis * Cos(ang)


















Custom script: set y2 = y + dis * Sin (ang)

















Else - Actions


















Custom script: set dis = GetRandomReal(udg_HP_SpawningRealMin[udg_HP_Level[udg_HP_ID]], udg_HP_Radius[udg_HP_Level[udg_HP_ID]])


















Custom script: set ang = GetRandomReal(-bj_PI, bj_PI)


















Custom script: set x2 = x + dis * Cos(ang)


















Custom script: set y2 = y + dis * Sin (ang)
















-------- - --------
















Custom script: set ang = Atan2( y2 - y , x2 - x )
















Custom script: set udg_HP_Portal[0] = CreateUnit(udg_HP_CasterPlayer[udg_HP_ID], udg_HP_DummyType, x, y, ang * bj_RADTODEG)
















Custom script: call HP_Move(udg_HP_Portal[0], x, y, false, true)
















Custom script: call SetUnitAnimationByIndex(udg_HP_Portal[0], udg_HP_MaxPitch)
















Custom script: set udg_HP_CustomID = GetUnitUserData(udg_HP_Portal[0])
















-------- - --------
















Set HP_Random[HP_CustomID] = (Random integer number between HP_SummonTypeCountMin[HP_Level[HP_ID]] and HP_SummonTypeCountMax[HP_Level[HP_ID]])
















Custom script: call SetUnitScale(udg_HP_Portal[0], udg_HP_SpawningSize[udg_HP_Random[udg_HP_CustomID]], 0, 0)
















Custom script: set udg_HP_SpawningModelHandler[udg_HP_CustomID] = AddSpecialEffectTarget(udg_HP_SpawningModel[udg_HP_Random[udg_HP_CustomID]], udg_HP_Portal[0], udg_HP_SpawningModelString[udg_HP_Random[udg_HP_CustomID]])
















Custom script: set udg_HP_MaxDistance[udg_HP_CustomID] = SquareRoot( ( x2 - x )*( x2 - x ) + ( y2 - y )*( y2 - y ) )
















Custom script: set udg_HP_StartHeight[udg_HP_CustomID] = GetUnitFlyHeight(udg_HP_Portal[0]) + HP_GetZ( x , y )
















Set HP_CurrentHeight[HP_CustomID] = HP_SpawningMaxHeight[HP_Random[HP_CustomID]]
















Custom script: set udg_HP_EndHeight[udg_HP_CustomID] = HP_GetZ( x2 , y2 )
















Custom script: if UnitAddAbility(udg_HP_Portal[0], 'Amrf') and UnitRemoveAbility(udg_HP_Portal [0], 'Amrf') then
















Custom script: endif
















Custom script: set udg_HP_Angle[udg_HP_CustomID] = ang
















-------- - --------
















Set HP_Pitch[HP_CustomID] = (Real(HP_MaxPitch))
















Set HP_CurrentDistance[HP_CustomID] = 0.00
















Set HP_LandTimeCalculation[HP_CustomID] = (HP_MaxDistance[HP_CustomID] / HP_SpawningLandReal[HP_Level[HP_ID]])
















Set HP_Caster[HP_CustomID] = HP_Caster[HP_ID]
















Set HP_CasterPlayer[HP_CustomID] = HP_CasterPlayer[HP_ID]
















Set HP_Level[HP_CustomID] = HP_Level[HP_ID]
















Set HP_Stage[HP_CustomID] = 3
















Set HP_Instance = (HP_Instance + 1)
















Unit Group - Add HP_Portal[0] to HP_Group














-------- - --------














Custom script: call DestroyEffect(AddSpecialEffectTarget(udg_HP_Model[4], udg_HP_PickedUnit, udg_HP_ModelString[4]))














Unit - Kill HP_PickedUnit














Set HP_SpawningCounter[HP_ID] = 0.00














-------- - --------













Else - Actions











Else - Actions










Set HP_ActivationCounter[HP_ID] = (HP_ActivationCounter[HP_ID] + HP_PeriodicInterval)









Else - Actions










Unit - Kill HP_Unit










Set HP_Instance = (HP_Instance - 1)










Unit Group - Remove HP_Unit from HP_Group










If (All Conditions are True) then do (Then Actions) else do (Else Actions)











If - Conditions












HP_Instance Equal to 0











Then - Actions












Custom script: call DisableTrigger(udg_HP_Periodic)











Else - Actions








-------- - --------







Else - Actions








If (All Conditions are True) then do (Then Actions) else do (Else Actions)









If - Conditions










HP_Stage[HP_ID] Equal to 3









Then - Actions










-------- - --------










If (All Conditions are True) then do (Then Actions) else do (Else Actions)











If - Conditions












HP_CurrentDistance[HP_ID] Less than or equal to HP_MaxDistance[HP_ID]











Then - Actions












-------- - --------












Set HP_CurrentDistance[HP_ID] = (HP_CurrentDistance[HP_ID] + HP_LandTimeCalculation[HP_ID])












Custom script: set dis = udg_HP_LandTimeCalculation[udg_HP_ID] + udg_HP_HeightCheck












Custom script: set x2 = x + dis * Cos(udg_HP_Angle[udg_HP_ID])












Custom script: set y2 = y + dis * Sin (udg_HP_Angle[udg_HP_ID])












Custom script: if ( HP_GetZ( x2 , y2 ) >= HP_GetZ( x , y ) + GetUnitFlyHeight(udg_HP_Unit) ) or not HP_OnMap( x2 , y2 ) then












Custom script: set udg_HP_Angle[udg_HP_ID] = udg_HP_Angle[udg_HP_ID]+((GetRandomReal(-15,15)+180)*bj_DEGTORAD)












Custom script: call SetUnitFacing (udg_HP_Unit, udg_HP_Angle[udg_HP_ID] * bj_RADTODEG)












Custom script: set x2 = x + (udg_HP_MaxDistance[udg_HP_ID] - udg_HP_CurrentDistance[udg_HP_ID]) * Cos(udg_HP_Angle[udg_HP_ID])












Custom script: set y2 = y + (udg_HP_MaxDistance[udg_HP_ID] - udg_HP_CurrentDistance[udg_HP_ID]) * Sin (udg_HP_Angle[udg_HP_ID])












Custom script: set udg_HP_StartHeight[udg_HP_ID] = GetUnitFlyHeight(udg_HP_Unit) + HP_GetZ( x , y )












Custom script: set udg_HP_EndHeight[udg_HP_ID] = HP_GetZ( x2 , y2 )












Custom script: set udg_HP_CurrentHeight[udg_HP_ID] = udg_HP_CurrentHeight[udg_HP_ID]/2












-------- - --------












Custom script: else












Custom script: call HP_Move(udg_HP_Unit, x + udg_HP_LandTimeCalculation[udg_HP_ID] * Cos(udg_HP_Angle[udg_HP_ID]), y + udg_HP_LandTimeCalculation[udg_HP_ID] * Sin (udg_HP_Angle[udg_HP_ID]), false, true)












Set HP_Pitch[HP_ID] = (HP_Pitch[HP_ID] - HP_PitchReal[HP_Level[HP_ID]])












Custom script: call SetUnitAnimationByIndex(udg_HP_Unit, R2I(udg_HP_Pitch[udg_HP_ID]))












Custom script: call SetUnitFlyHeight(udg_HP_Unit,HP_Parabola(udg_HP_CurrentHeight[udg_HP_ID],udg_HP_MaxDistance[udg_HP_ID],udg_HP_CurrentDistance[udg_HP_ID],udg_HP_StartHeight[udg_HP_ID],udg_HP_EndHeight[udg_HP_ID],HP_GetZ( x , y )),0)












Custom script: endif












-------- - --------











Else - Actions












Special Effect - Destroy HP_SpawningModelHandler[HP_ID]












-------- - --------












If (All Conditions are True) then do (Then Actions) else do (Else Actions)













If - Conditions














HP_Destroy Equal to True













Then - Actions














Custom script: call MoveLocation(udg_HP_CustomLocation, x, y)














Destructible - Pick every destructible within HP_SummonDestroyRadius[HP_Random[HP_ID]] of HP_CustomLocation and do (Actions)















Loop - Actions
















Set HP_Destructible = (Picked destructible)
















Unit - Order HP_DestructibleChecker to Harvest HP_Destructible
















If (All Conditions are True) then do (Then Actions) else do (Else Actions)

















If - Conditions


















(Current order of HP_DestructibleChecker) Equal to (Order(harvest))

















Then - Actions


















Destructible - Kill HP_Destructible

















Else - Actions
















Unit - Order HP_DestructibleChecker to Stop













Else - Actions












-------- - --------












Custom script: set udg_HP_PickedUnit = CreateUnit(udg_HP_CasterPlayer[udg_HP_ID], udg_HP_SummonType[udg_HP_Random[udg_HP_ID]], x, y, GetUnitFacing(udg_HP_Unit)-180)












Custom script: call DestroyEffect(AddSpecialEffectTarget(udg_HP_SummonCreatedModel[udg_HP_Random[udg_HP_ID]], udg_HP_PickedUnit, udg_HP_SummonCreatedModelString[udg_HP_Random[udg_HP_ID]]))












-------- - --------












If (All Conditions are True) then do (Then Actions) else do (Else Actions)













If - Conditions














HP_SummonPermanent Equal to False













Then - Actions














Unit - Add a HP_SummonExpirationTime second Generic expiration timer to HP_PickedUnit














Custom script: set udg_HP_CustomID = GetUnitUserData(udg_HP_PickedUnit)














Set HP_Random[HP_CustomID] = HP_Random[HP_ID]














Set HP_Stage[HP_CustomID] = 4














Set HP_Instance = (HP_Instance + 1)














Unit Group - Add HP_PickedUnit to HP_Group













Else - Actions












-------- - --------












Custom script: call GroupEnumUnitsInRange(bj_lastCreatedGroup, x, y, udg_HP_SummonCreatedRadius[udg_HP_Random[udg_HP_ID]], null)












Custom script: loop












Custom script: set udg_HP_PickedUnit = FirstOfGroup(bj_lastCreatedGroup)












Custom script: exitwhen udg_HP_PickedUnit == null












If (All Conditions are True) then do (Then Actions) else do (Else Actions)













If - Conditions














(HP_PickedUnit is dead) Equal to False














(HP_PickedUnit is A flying unit) Equal to False














Or - Any (Conditions) are true















Conditions
















(HP_PickedUnit is A ground unit) Equal to False
















HP_FilterGround Equal to True














Or - Any (Conditions) are true















Conditions
















(HP_PickedUnit is A structure) Equal to False
















HP_FilterStructure Equal to True














Or - Any (Conditions) are true















Conditions
















(HP_PickedUnit is Mechanical) Equal to False
















HP_FilterMechanical Equal to True














Or - Any (Conditions) are true















Conditions
















(HP_PickedUnit is Magic Immune) Equal to False
















HP_FilterMagicImmune Equal to True














(HP_PickedUnit belongs to an enemy of HP_CasterPlayer[HP_ID]) Equal to True













Then - Actions














-------- - --------














Unit - Cause HP_Caster[HP_ID] to damage HP_PickedUnit, dealing HP_SummonCreatedDamage[HP_Random[HP_ID]] damage of attack type HP_AttackType and damage type HP_DamageType














-------- - --------














If (All Conditions are True) then do (Then Actions) else do (Else Actions)















If - Conditions
















HP_SummonKnockback[HP_Random[HP_ID]] Equal to True
















(HP_PickedUnit is A structure) Equal to False















Then - Actions
















Custom script: set udg_HP_CustomID = GetUnitUserData(udg_HP_PickedUnit)
















Set HP_KnockbackCounter[HP_CustomID] = 0.00
















Custom script: set udg_HP_Angle[udg_HP_CustomID] = Atan2(GetUnitY(udg_HP_PickedUnit) - y, GetUnitX(udg_HP_PickedUnit) - x)
















Set HP_Stage[HP_CustomID] = 5
















Unit Group - Add HP_PickedUnit to HP_Group















Else - Actions














-------- - --------













Else - Actions












Custom script: call GroupRemoveUnit(bj_lastCreatedGroup, udg_HP_PickedUnit)












Custom script: endloop












Unit - Kill HP_Unit












Set HP_Instance = (HP_Instance - 1)












Unit Group - Remove HP_Unit from HP_Group












If (All Conditions are True) then do (Then Actions) else do (Else Actions)













If - Conditions














HP_Instance Equal to 0













Then - Actions














Custom script: call DisableTrigger(udg_HP_Periodic)













Else - Actions










-------- - --------









Else - Actions










If (All Conditions are True) then do (Then Actions) else do (Else Actions)











If - Conditions












HP_Stage[HP_ID] Equal to 4











Then - Actions












-------- - --------












If (All Conditions are True) then do (Then Actions) else do (Else Actions)













If - Conditions














(HP_Unit is dead) Equal to True













Then - Actions














Custom script: call DestroyEffect( AddSpecialEffect(udg_HP_SummonCreatedModel[udg_HP_Random[udg_HP_ID]], x, y) )














Unit - Hide HP_Unit














Set HP_Instance = (HP_Instance - 1)














Unit Group - Remove HP_Unit from HP_Group














If (All Conditions are True) then do (Then Actions) else do (Else Actions)















If - Conditions
















HP_Instance Equal to 0















Then - Actions
















Custom script: call DisableTrigger(udg_HP_Periodic)















Else - Actions













Else - Actions












-------- - --------











Else - Actions












If (All Conditions are True) then do (Then Actions) else do (Else Actions)













If - Conditions














HP_Stage[HP_ID] Equal to 5













Then - Actions














-------- - --------














If (All Conditions are True) then do (Then Actions) else do (Else Actions)















If - Conditions
















HP_KnockbackCounter[HP_ID] Greater than or equal to HP_KnockbackRange















Then - Actions
















Unit Group - Remove HP_Unit from HP_Group
















If (All Conditions are True) then do (Then Actions) else do (Else Actions)

















If - Conditions


















(Number of units in HP_Group) Equal to 0

















Then - Actions


















Custom script: call DisableTrigger(udg_HP_Periodic)

















Else - Actions















Else - Actions
















Custom script: call HP_Move(udg_HP_Unit, x + udg_HP_KnockbackSpeed * Cos(udg_HP_Angle[udg_HP_ID]), y + udg_HP_KnockbackSpeed * Sin(udg_HP_Angle[udg_HP_ID]), true, true)
















If (All Conditions are True) then do (Then Actions) else do (Else Actions)

















If - Conditions


















HP_KnockbackRate Greater than or equal to (Random integer number between 1 and 100)

















Then - Actions


















Custom script: call DestroyEffect(AddSpecialEffectTarget(udg_HP_Model[5], udg_HP_Unit, udg_HP_ModelString[5]))

















Else - Actions
















Set HP_KnockbackCounter[HP_ID] = (HP_KnockbackCounter[HP_ID] + HP_KnockbackSpeed)














-------- - --------













Else - Actions




-------- ---------------------------------------------------------------------------------------------------------------------------------------- --------