• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Hell's Portal v1.0.0 - GUI

This bundle is marked as pending. It has not been reviewed by a staff member yet.
  • Like
Reactions: Vinz and Devalut
[TD] HELL'S PORTAL [ GUI ] [/TD]

A summoning ability with chaotic style.
"Might be useful at spawning reinforcements at the battlefield and combat."


PREVIEW:
hells-portal-gif-preview-gif.349425
DESCRIPTION:
full

[TD] IMAGES: [/TD]

Start

End

Calls down a large demon sword in the target area.

full


Opening an underworld portal that unleashes demons to the ground.

full
Bursting out demons until the portal is active.

full


[TD] CHANGELOGS: [/TD][TD]
v1.0.0 - Released
[/TD]
[TD] CREDITS: [/TD][TD]
Bribe ( Unit Indexer )
PurgeandFire ( Check Walkability )
rulerofiron ( Camera Shake )
Mythic ( Sword Model )
Retera ( Portal Model )
Tarrasque ( Hero Model )
[/TD]

Hell's Portal Configuration

Hell's Portal Execution

Hell's Portal Periodic

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

Hell's Portal v1.0.0 - GUI (Map)

This looks like a volcanic version of the usually boring Dark Portal spell that Archimonde would usually cast. The disruptive energies emanating from the portal, as well as the models used for the spell, really help in selling the idea that this is truly a Portal from Hell. Well done.

ym42fnv8pns11.jpg


Archie-monde wants to know your location.
 
Level 20
Joined
Aug 13, 2013
Messages
1,696
Yes, it's also a variant dependent per level, which means it has different configurations to prove its versatility and usefulness on some cases.

You can test it out the actual demonstration implemented inside the map.
(Those variants aren't shown here)

I'm still fixing the images at the moment that's why the bundle is currently updating :)
(Some parts are showing the weird image tags)

EDIT: FIXED

I'm actually impressed to this model made by Mythic from the contest: Special Effect Contest #5 - Highway to Hell that's why I decided to give it a showcase and glad that it fits the theme more.
 
Last edited:
Level 20
Joined
Aug 13, 2013
Messages
1,696
@Daffa

At the Sword Data,
  • -------- 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
At the Portal Data,
  • -------- The duration of the portal. --------
  • Set HP_PortalDuration[1] = 0.05
  • Set HP_PortalDuration[2] = 0.05
  • Set HP_PortalDuration[3] = 10.00
Those were the only variables that are configurable for the whole spell duration. The portal duration begins to tick after the thrusting delay is done.
 

Bribe

Code Moderator
Level 50
Joined
Sep 26, 2009
Messages
9,456
Looks very cool, but to me the portal upgrade path seems to peak at level 2 and get potentially worse at level 3 (ie. if it spawned 10 felhounds over 10 seconds that is only equal to level 1, which had done it all at once).

So they are different flavors, which seems to be how you've phrased it, but in WarCraft 3 it is not standard practice to have an ability which uses levels to do evolutionary changes.
 
Level 20
Joined
Aug 13, 2013
Messages
1,696
Looks very cool, but to me the portal upgrade path seems to peak at level 2 and get potentially worse at level 3 (ie. if it spawned 10 felhounds over 10 seconds that is only equal to level 1, which had done it all at once).

So they are different flavors, which seems to be how you've phrased it, but in WarCraft 3 it is not standard practice to have an ability which uses levels to do evolutionary changes.

Yes, I agree on it. I've just came up with the variants idea to showcase the versatility in configurations and intended not to intensify the ability per level but to change most of the mechanics in any possibility. But don't worry, I still stick to the standards and this flavors idea can only be seen as a very rare trait on my future submissions. All in all, it's up to the user's way of configurations. Thanks for this matter :)
 
Top