1. Are you planning to upload your awesome spell or system to Hive? Please review the rules here.
    Dismiss Notice
  2. Updated Resource Submission Rules: All model & skin resource submissions must now include an in-game screenshot. This is to help speed up the moderation process and to show how the model and/or texture looks like from the in-game camera.
    Dismiss Notice
  3. DID YOU KNOW - That you can unlock new rank icons by posting on the forums or winning contests? Click here to customize your rank or read our User Rank Policy to see a list of ranks that you can unlock. Have you won a contest and still haven't received your rank award? Then please contact the administration.
    Dismiss Notice
  4. Ride into the sunset with the 32nd Modeling Contest. The contest is optionally paired. Best of luck, people!
    Dismiss Notice
  5. This adventure has come to an end. Congratulate our heroes in the 16th Mini Mapping Contest Results.
    Dismiss Notice
  6. From the gates of hell, the 5th Special Effect Contest Results have emerged.
    Dismiss Notice
  7. Race against the odds and Reforge, Don't Refund. The 14th Techtree Contest has begun!
    Dismiss Notice
  8. Check out the Staff job openings thread.
    Dismiss Notice
Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

Heaven's Justice v1.2.1 GUI

Submitted by JAKEZINC
This bundle is marked as pending. It has not been reviewed by a staff member yet.
HEAVEN'S JUSTICE [ GUI ]

PREVIEW:

[​IMG]


DESCRIPTION:
[​IMG]


IMAGES:

  • Each friendly and enemy souls are leaving their hosts.

    [​IMG]
    [​IMG]
    [​IMG]
  • Souls are returning to their hosts or body after the heaven judges them.

    [​IMG]

    After returning to their individual hosts, if they are friendly souls then the host receives heal, if they are enemy souls then the host receives half of the amount of heal as damage.

    [​IMG]


CHANGELOGS: v1.0 - Released
v1.1 - Updated, based on KILLCIDE review.
v1.2.0 - Major Update (As of 2020)
^ For quality, compatibility and improvements.
v1.2.1 - Quick Update

CREDITS: Bribe ( Unit Indexer )


    • Heavens Justice Configuration
      • Events
        • Map initialization
      • Conditions
      • Actions
        • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
        • -------- SPELL CONFIGURATION FIELD --------
        • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
        • -------- OBJECT EDITOR ( F6 ) --------
        • -------- The spell or ability used in the triggers. ( Strictly Import the Heaven's Justice Ability ) --------
        • Set HJ_Ability = Heaven's Justice
        • -------- --------
        • -------- The pause ability ( based on channel ) used in the triggers. --------
        • Set HJ_PauseAbility = Heaven's Justice Pause
        • -------- ^ Configure HJ_Pause boolean expression below ( SPELL DATA SECTION ). IF: True = Import the Heaven's Justice Pause Ability ( Maker ), False = Delete this ( HJ_PauseAbility ) and don't import the Pause Ability. --------
        • -------- --------
        • -------- The dummy unit used in the triggers. ( Strictly Import the Heaven's Justice Dummy Unit ) --------
        • Set HJ_DummyType = Heaven's Justice 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 shadow image of the dummy unit is enabled ( flyer ), you can disable it by setting it to 'none' in Object Editor ( F6 ). --------
        • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
        • -------- * 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 Heaven's Justice Ability. --------
        • Set HJ_AbilityMaxLevel = 3
        • -------- ^ Modify at your own risk: Must be equal to the amount of levels in Heaven's Justice Ability in OBJECT EDITOR ( F6 ). Wrong value causes error. --------
        • -------- --------
        • -------- The area of effect of the spell. ( Must be equal to Area of Effect values in the Heaven's Justice ability data. ) --------
        • Set HJ_Radius[1] = 400.00
        • Set HJ_Radius[2] = 400.00
        • Set HJ_Radius[3] = 400.00
        • -------- --------
        • -------- A primary effect occurs in the area of effect ( radius ) in circular formation. --------
        • Set HJ_Effect[1] = Abilities\Spells\Human\HolyBolt\HolyBoltSpecialArt.mdl
        • -------- A secondary effect occurs in the area of effect ( radius ) in circular formation. --------
        • Set HJ_Effect[0] = Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
        • -------- If you don't want secondary effects just make the value the same as above. --------
        • Set HJ_SpawnEffectAttach = origin
        • -------- The pitch value of the radius effects, ranges from 0 - 180. --------
        • Set HJ_Pitch = 180
        • -------- --------
        • -------- The number of total effects ( Effect[ 1 ] and [ 0 ] ) created in the area of effect ( radius ). --------
        • Set HJ_RadiusEffectCount[1] = 20
        • Set HJ_RadiusEffectCount[2] = 20
        • Set HJ_RadiusEffectCount[3] = 20
        • -------- --------
        • -------- TARGETS FILTRATION - you can filter your wanted targets here. --------
        • Set HJ_FilterFlying = True
        • Set HJ_FilterGround = True
        • Set HJ_FilterStructure = False
        • Set HJ_FilterMechanical = False
        • Set HJ_FilterMagicImmune = True
        • -------- --------
        • -------- Want the body unable to move or follow an order when the soul leaves it? --------
        • -------- Boolean Expression: True = Yes, False = No --------
        • Set HJ_Pause[1] = True
        • Set HJ_Pause[2] = False
        • Set HJ_Pause[3] = True
        • -------- --------
        • -------- Want the sleeping units to be affected by the pause? --------
        • -------- Boolean Expression: True = Yes, False = No --------
        • Set HJ_Wake = True
        • -------- --------
        • -------- The base order ID of the pause ability. ( Must be equal to Heaven's Justice Pause Ability base order ID value. ) --------
        • Set HJ_PauseOrder = defend
        • -------- ^ I'd use defend order as it is rarely used in immediate order. --------
        • -------- --------
        • -------- An effect occurs in the attachment when the units are in pause state. --------
        • -------- Pause Friendly Units: --------
        • Set HJ_Effect[2] = Abilities\Spells\Items\AIta\CrystalBallCaster.mdl
        • Set HJ_PauseFriendlyEffectAttach = overhead
        • -------- Pause Enemy Units: --------
        • Set HJ_Effect[3] = Abilities\Spells\Undead\Possession\PossessionTarget.mdl
        • Set HJ_PauseEnemyEffectAttach = overhead
        • -------- --------
        • -------- The duration when the heaven judges the soul. --------
        • Set HJ_JudgeDuration[1] = 0.75
        • Set HJ_JudgeDuration[2] = 1.50
        • Set HJ_JudgeDuration[3] = 1.25
        • -------- --------
        • -------- The attack and damage type of spell. ( Spell Damage ) --------
        • Set HJ_AttackType = Spells
        • Set HJ_DamageType = Normal
        • -------- --------
        • -------- The interval of the periodic solved by ( second / frames per second ). * Recommended Value: ( 1 / 30 ) for great spell performance. --------
        • Set HJ_PeriodicInterval = (1.00 / 60.00)
        • -------- ^ ( 1 / 60 ) value is optional for the smooth motions but it is your choice in performance. --------
        • -------- ^Modify at your own risk: Lowering this modified value can cause serious lags because of the possibility of filtering large amount of units in periodic. --------
        • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
        • -------- SOULS DATA --------
        • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
        • -------- Friendly units' soul art model and it's attachment point. --------
        • Set HJ_Effect[4] = Abilities\Weapons\FaerieDragonMissile\FaerieDragonMissile.mdl
        • Set HJ_SoulFriendlyModelAttach = origin
        • Set HJ_SoulFriendlyExitAttach = head
        • -------- Enemy units' soul art model and it's attachment point. --------
        • Set HJ_Effect[5] = Abilities\Weapons\AvengerMissile\AvengerMissile.mdl
        • Set HJ_SoulEnemyModelAttach = origin
        • Set HJ_SoulEnemyExitAttach = head
        • -------- --------
        • -------- The size of the soul. --------
        • Set HJ_SoulSize[1] = 0.80
        • Set HJ_SoulSize[2] = 0.80
        • Set HJ_SoulSize[3] = 0.80
        • -------- --------
        • -------- The initial height of the soul when leaves the body. --------
        • Set HJ_SoulInitialHeight[1] = 40.00
        • Set HJ_SoulInitialHeight[2] = 40.00
        • Set HJ_SoulInitialHeight[3] = 40.00
        • -------- --------
        • -------- The maximum height of the soul to reach the heaven. Must be greater than game camera distance field target to be realistic. --------
        • Set HJ_SoulMaxHeight[1] = 1500.00
        • Set HJ_SoulMaxHeight[2] = 1500.00
        • Set HJ_SoulMaxHeight[3] = 1500.00
        • -------- --------
        • -------- The levitate speed of the soul to reach the heaven. It is based on a time value. ( Seconds ) --------
        • Set HJ_SoulLevitateTime[1] = 0.75
        • Set HJ_SoulLevitateTime[2] = 2.30
        • Set HJ_SoulLevitateTime[3] = 4.60
        • -------- --------
        • -------- Allow the soul to travel in different direction while levitating? --------
        • -------- Boolean Expression: True = Yes, False = No --------
        • Set HJ_SoulLevitateTravel[1] = True
        • Set HJ_SoulLevitateTravel[2] = False
        • Set HJ_SoulLevitateTravel[3] = True
        • -------- --------
        • -------- An effect occurs when the soul is now in motion state. --------
        • -------- Friendly Soul: --------
        • Set HJ_Effect[6] = Abilities\Weapons\FaerieDragonMissile\FaerieDragonMissile.mdl
        • -------- Enemy Soul: --------
        • Set HJ_Effect[7] = Abilities\Weapons\AvengerMissile\AvengerMissile.mdl
        • -------- The probability of a soul motion looping effect to occur. Consider this value as a percentage ( 0%,100% ) --------
        • Set HJ_SoulMotionEffectChance = 0
        • -------- ^ If you want to disable the motion effect, set the chance value to 0. --------
        • -------- ^ Modify at your own risk; The large maximum value is 100 do not EXCEED or it will cause problems. Recommended Value: the modified value ( 15 ). --------
        • -------- --------
        • -------- The heal value to the friendly units when the soul already returned to their own host/body. --------
        • Set HJ_SoulHeal[1] = 100.00
        • Set HJ_SoulHeal[2] = 200.00
        • Set HJ_SoulHeal[3] = 400.00
        • -------- --------
        • -------- An effect occurs to the friendly units when the soul is returning to the host/body. --------
        • Set HJ_Effect[8] = Abilities\Spells\Human\HolyBolt\HolyBoltSpecialArt.mdl
        • Set HJ_SoulReturnHealAttach = origin
        • -------- --------
        • -------- The damage value to the enemy units when the soul already returned to their own host/body. --------
        • Set HJ_SoulDamage[1] = 50.00
        • Set HJ_SoulDamage[2] = 100.00
        • Set HJ_SoulDamage[3] = 200.00
        • -------- --------
        • -------- An effect occurs to the enemy units when the soul is returning to the host/body. --------
        • Set HJ_Effect[9] = Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
        • Set HJ_SoulReturnDamageAttach = origin
        • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
        • -------- An effect occurs to the caster when the ability is casted. --------
        • Set HJ_Effect[10] = Abilities\Spells\Human\Resurrect\ResurrectCaster.mdl
        • Set HJ_CasterEffectAttach = origin
        • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
        • -------- CODE DATA --------
        • -------- ( BE CAREFUL TOUCHING THE LINES BELOW IF YOU HAVE NO EXPERIENCE IN CODING DILEMMA ) --------
        • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
        • -------- PRELOAD OBJECTS --------
        • -------- Abilities And Units: --------
        • Custom script: set udg_HJ_Unit = CreateUnit( Player( 15 ), udg_HJ_DummyType, 0, 0, 0 )
        • Custom script: call UnitAddAbility( udg_HJ_Unit, udg_HJ_Ability )
        • Custom script: call UnitAddAbility( udg_HJ_Unit, udg_HJ_PauseAbility )
        • Custom script: call RemoveUnit( udg_HJ_Unit )
        • -------- Effects: --------
        • Set HJ_CustomInteger = 0
        • For each (Integer HJ_CustomInteger) from 0 to 10, do (Actions)
          • Loop - Actions
            • Custom script: call Preload( udg_HJ_Effect[ udg_HJ_CustomInteger ] )
        • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
        • -------- DON'T TOUCH THESE. ( If this line malfunctions you can touch it to correct the needed parameters or values. ) --------
        • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
        • Custom script: call TriggerRegisterTimerEventPeriodic( gg_trg_Heavens_Justice_Periodic , udg_HJ_PeriodicInterval )
        • For each (Integer HJ_CustomInteger) from 1 to 3, do (Actions)
          • Loop - Actions
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • HJ_SoulLevitateTravel[HJ_CustomInteger] Equal to True
              • Then - Actions
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • HJ_FilterFlying Equal to True
                  • Then - Actions
                    • Set HJ_CollisionRange = 25.00
                  • Else - Actions
                    • Set HJ_CollisionRange = 10.00
              • Else - Actions
                • Set HJ_CollisionRange = 50.00
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • HJ_SoulMotionEffectChance Equal to 0
          • Then - Actions
            • Set HJ_SoulMotionEffectChance = -1
          • Else - Actions
        • -------- Initialize Calculations --------
        • For each (Integer HJ_CustomInteger) from 1 to HJ_AbilityMaxLevel, do (Actions)
          • Loop - Actions
            • Set HJ_CustomReal[HJ_CustomInteger] = (360.00 / (Real(HJ_RadiusEffectCount[HJ_CustomInteger])))
            • Set HJ_CustomRealMin[HJ_CustomInteger] = (HJ_Radius[HJ_CustomInteger] / 1.50)
            • Set HJ_CustomRealMax[HJ_CustomInteger] = (HJ_Radius[HJ_CustomInteger] x 2.50)
        • Set HJ_PropWindow[0] = 0.00
        • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
        • -------- END OF SPELL CONFIGURATION FIELD --------
        • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
    • Heavens Justice Execution
      • Events
        • Unit - A unit Starts the effect of an ability
      • Conditions
        • (Ability being cast) Equal to HJ_Ability
      • Actions
        • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
        • -------- declaration of locals --------
        • Custom script: local real X = GetSpellTargetX( )
        • Custom script: local real Y = GetSpellTargetY( )
        • Custom script: local real spawnX
        • Custom script: local real spawnY
        • Custom script: local real pickedX
        • Custom script: local real pickedY
        • Custom script: local real soulX
        • Custom script: local real soulY
        • Custom script: local real destinationX
        • Custom script: local real destinationY
        • Custom script: local integer i = 0
        • -------- --------
        • -------- [ 0 ] = temporary array value before index declares. --------
        • Set HJ_Caster[0] = (Triggering unit)
        • Set HJ_Level[0] = (Level of HJ_Ability for HJ_Caster[0])
        • -------- --------
        • Custom script: call DestroyEffect( AddSpecialEffectTarget( udg_HJ_Effect[ 10 ], udg_HJ_Caster[ 0 ], udg_HJ_CasterEffectAttach ) )
        • -------- --------
        • -------- Radius Creation --------
        • -------- --------
        • For each (Integer HJ_CustomInteger) from 1 to HJ_RadiusEffectCount[HJ_Level[0]], do (Actions)
          • Loop - Actions
            • -------- --------
            • Set HJ_RadiusEffectAngle = (HJ_RadiusEffectAngle + HJ_CustomReal[HJ_Level[0]])
            • Custom script: set spawnX= X + udg_HJ_Radius[ udg_HJ_Level[ 0 ] ] * Cos( udg_HJ_RadiusEffectAngle * bj_DEGTORAD )
            • Custom script: set spawnY= Y + udg_HJ_Radius[ udg_HJ_Level[ 0 ] ] * Sin ( udg_HJ_RadiusEffectAngle * bj_DEGTORAD )
            • Custom script: set udg_HJ_Unit = CreateUnit( GetTriggerPlayer( ), udg_HJ_DummyType, spawnX, spawnY, Atan2( Y - spawnY , X - spawnX ) * bj_RADTODEG )
            • Custom script: call SetUnitAnimationByIndex( udg_HJ_Unit, udg_HJ_Pitch )
            • Custom script: if i == 0 then
            • Custom script: set i = i + 1
            • Custom script: call DestroyEffect( AddSpecialEffectTarget( udg_HJ_Effect[ 1 ], udg_HJ_Unit, udg_HJ_SpawnEffectAttach ) )
            • Custom script: elseif i == 1 then
            • Custom script: call DestroyEffect( AddSpecialEffectTarget( udg_HJ_Effect[ 0 ], udg_HJ_Unit, udg_HJ_SpawnEffectAttach ) )
            • Custom script: set i = 0
            • Custom script: endif
            • -------- --------
            • Unit - Kill HJ_Unit
        • -------- --------
        • -------- Souls Creation --------
        • -------- --------
        • Custom script: call GroupEnumUnitsInRange( bj_lastCreatedGroup, X , Y , udg_HJ_Radius[ udg_HJ_Level[ 0 ] ], null )
        • Custom script: loop
        • Custom script: set udg_HJ_PickedUnit = FirstOfGroup( bj_lastCreatedGroup )
        • Custom script: exitwhen udg_HJ_PickedUnit == null
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • (Owner of HJ_PickedUnit) Not equal to Neutral Passive
            • (HJ_PickedUnit is dead) Equal to False
            • Or - Any (Conditions) are true
              • Conditions
                • (HJ_PickedUnit is A flying unit) Equal to False
                • HJ_FilterFlying Equal to True
            • Or - Any (Conditions) are true
              • Conditions
                • (HJ_PickedUnit is A ground unit) Equal to False
                • HJ_FilterGround Equal to True
            • Or - Any (Conditions) are true
              • Conditions
                • (HJ_PickedUnit is A structure) Equal to False
                • HJ_FilterStructure Equal to True
            • Or - Any (Conditions) are true
              • Conditions
                • (HJ_PickedUnit is Mechanical) Equal to False
                • HJ_FilterMechanical Equal to True
            • Or - Any (Conditions) are true
              • Conditions
                • (HJ_PickedUnit is Magic Immune) Equal to False
                • HJ_FilterMagicImmune Equal to True
            • HJ_PickedUnit Not equal to HJ_Caster[0]
            • (HJ_PickedUnit is in HJ_Group) Equal to False
          • Then - Actions
            • -------- --------
            • Custom script: set udg_HJ_ID = GetUnitUserData( udg_HJ_PickedUnit )
            • -------- --------
            • Set HJ_Caster[HJ_ID] = HJ_Caster[0]
            • Set HJ_CasterPlayer[HJ_ID] = (Owner of HJ_Caster[HJ_ID])
            • Set HJ_Level[HJ_ID] = HJ_Level[0]
            • Set HJ_JudgeDurationCounter[HJ_ID] = 0.00
            • -------- --------
            • Custom script: set pickedX = GetWidgetX( udg_HJ_PickedUnit )
            • Custom script: set pickedY = GetWidgetY( udg_HJ_PickedUnit )
            • Custom script: set spawnX = Atan2( pickedY-Y , pickedX-X ) * bj_RADTODEG
            • -------- --------
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • (HJ_PickedUnit belongs to an enemy of HJ_CasterPlayer[HJ_ID]) Equal to False
              • Then - Actions
                • -------- --------
                • -------- Friendly Souls --------
                • -------- --------
                • Custom script: call DestroyEffect( AddSpecialEffectTarget( udg_HJ_Effect[ 4 ], udg_HJ_PickedUnit, udg_HJ_SoulFriendlyExitAttach ) )
                • Custom script: set udg_HJ_FriendlySoulUnit[ udg_HJ_ID ] = CreateUnit( udg_HJ_CasterPlayer[ udg_HJ_ID ], udg_HJ_DummyType, pickedX, pickedY, spawnX )
                • Custom script: set udg_HJ_FriendlySoulModelHandler[ udg_HJ_ID ] = AddSpecialEffectTarget( udg_HJ_Effect[ 4 ], udg_HJ_FriendlySoulUnit[ udg_HJ_ID ], udg_HJ_SoulFriendlyModelAttach )
                • Custom script: call SetUnitScale( udg_HJ_FriendlySoulUnit[ udg_HJ_ID ], udg_HJ_SoulSize[ udg_HJ_Level[ 0 ] ], 0, 0 )
                • -------- --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • (HJ_PickedUnit is A flying unit) Equal to True
                  • Then - Actions
                    • Set HJ_ReturnHeightCalculation[HJ_ID] = (HJ_SoulMaxHeight[HJ_Level[0]] + (HJ_SoulInitialHeight[HJ_Level[0]] + (Current flying height of HJ_PickedUnit)))
                    • Custom script: call SetUnitFlyHeight( udg_HJ_FriendlySoulUnit[ udg_HJ_ID ], GetUnitFlyHeight( udg_HJ_PickedUnit ) + udg_HJ_SoulInitialHeight[ udg_HJ_Level[ 0 ] ], 0 )
                  • Else - Actions
                    • Set HJ_ReturnHeightCalculation[HJ_ID] = HJ_SoulMaxHeight[HJ_Level[0]]
                    • Custom script: call SetUnitFlyHeight( udg_HJ_FriendlySoulUnit[ udg_HJ_ID ], udg_HJ_SoulInitialHeight[ udg_HJ_Level[ 0 ] ], 0 )
                • -------- --------
                • Custom script: set soulX = GetUnitX( udg_HJ_FriendlySoulUnit[ udg_HJ_ID ] )
                • Custom script: set soulY = GetUnitY( udg_HJ_FriendlySoulUnit[ udg_HJ_ID ] )
                • -------- --------
              • Else - Actions
                • -------- --------
                • -------- Enemy Souls --------
                • -------- --------
                • Custom script: call DestroyEffect( AddSpecialEffectTarget( udg_HJ_Effect[ 5 ], udg_HJ_PickedUnit, udg_HJ_SoulEnemyExitAttach ) )
                • Custom script: set udg_HJ_EnemySoulUnit[ udg_HJ_ID ] = CreateUnit( udg_HJ_CasterPlayer[ udg_HJ_ID ], udg_HJ_DummyType, pickedX, pickedY, spawnX )
                • Custom script: set udg_HJ_EnemySoulModelHandler[ udg_HJ_ID ] = AddSpecialEffectTarget( udg_HJ_Effect[ 5 ], udg_HJ_EnemySoulUnit[ udg_HJ_ID ], udg_HJ_SoulEnemyModelAttach )
                • Custom script: call SetUnitScale( udg_HJ_EnemySoulUnit[ udg_HJ_ID ], udg_HJ_SoulSize[ udg_HJ_Level[ 0 ] ], 0, 0 )
                • -------- --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • (HJ_PickedUnit is A flying unit) Equal to True
                  • Then - Actions
                    • Set HJ_ReturnHeightCalculation[HJ_ID] = (HJ_SoulMaxHeight[HJ_Level[0]] + (HJ_SoulInitialHeight[HJ_Level[0]] + (Current flying height of HJ_PickedUnit)))
                    • Custom script: call SetUnitFlyHeight( udg_HJ_EnemySoulUnit[ udg_HJ_ID ], GetUnitFlyHeight( udg_HJ_PickedUnit ) + udg_HJ_SoulInitialHeight[ udg_HJ_Level[ 0 ] ], 0 )
                  • Else - Actions
                    • Set HJ_ReturnHeightCalculation[HJ_ID] = HJ_SoulMaxHeight[HJ_Level[0]]
                    • Custom script: call SetUnitFlyHeight( udg_HJ_EnemySoulUnit[ udg_HJ_ID ], udg_HJ_SoulInitialHeight[ udg_HJ_Level[ 0 ] ], 0 )
                • -------- --------
                • Custom script: set soulX = GetUnitX( udg_HJ_EnemySoulUnit[ udg_HJ_ID ] )
                • Custom script: set soulY = GetUnitY( udg_HJ_EnemySoulUnit[ udg_HJ_ID ] )
                • -------- --------
            • -------- --------
            • Set HJ_LevitateSpeedCalculation[HJ_ID] = (HJ_ReturnHeightCalculation[HJ_ID] / (HJ_SoulLevitateTime[HJ_Level[0]] / HJ_PeriodicInterval))
            • Set HJ_LevitateReal[HJ_ID] = HJ_LevitateSpeedCalculation[HJ_ID]
            • -------- --------
            • -------- Travel Boolean --------
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • HJ_SoulLevitateTravel[HJ_Level[0]] Equal to True
              • Then - Actions
                • Set HJ_SoulLevitateTravelAngle[HJ_ID] = (Random angle)
                • Custom script: set destinationX = soulX + GetRandomReal( udg_HJ_CustomRealMin[ udg_HJ_Level[ 0 ] ], udg_HJ_CustomRealMax[ udg_HJ_Level[ 0 ] ] ) * Cos( udg_HJ_SoulLevitateTravelAngle[ udg_HJ_ID ] )
                • Custom script: set destinationY = soulY + GetRandomReal( udg_HJ_CustomRealMin[ udg_HJ_Level[ 0 ] ], udg_HJ_CustomRealMax[ udg_HJ_Level[ 0 ] ] ) * Sin( udg_HJ_SoulLevitateTravelAngle[ udg_HJ_ID ] )
                • Custom script: set udg_HJ_SoulDistance[ udg_HJ_ID ] = SquareRoot( ( soulX - destinationX ) * ( soulX - destinationX ) + ( soulY - destinationY ) * ( soulY - destinationY ) )
                • Set HJ_TravelSpeedCalculation[HJ_ID] = (HJ_SoulDistance[HJ_ID] / (HJ_SoulLevitateTime[HJ_Level[0]] / HJ_PeriodicInterval))
                • Set HJ_SoulDistanceCounter[HJ_ID] = 0.00
              • Else - Actions
            • -------- --------
            • -------- Pause Boolean --------
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • HJ_Pause[HJ_Level[0]] Equal to True
              • Then - Actions
                • -------- --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • (HJ_PickedUnit is Sleeping) Equal to True
                    • HJ_Wake Equal to True
                  • Then - Actions
                    • Unit - Wake up HJ_PickedUnit
                  • Else - Actions
                • -------- --------
                • Custom script: call SetUnitTurnSpeed( udg_HJ_PickedUnit, 0 )
                • Custom script: set udg_HJ_PropWindow[ udg_HJ_ID ] = GetUnitPropWindow( udg_HJ_PickedUnit )
                • Custom script: call SetUnitPropWindow( udg_HJ_PickedUnit, 0 )
                • Custom script: if UnitAddAbility( udg_HJ_PickedUnit, udg_HJ_PauseAbility ) and IssueImmediateOrder( udg_HJ_PickedUnit, udg_HJ_PauseOrder ) then
                • Custom script: endif
                • -------- --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • (HJ_PickedUnit belongs to an enemy of HJ_CasterPlayer[HJ_ID]) Equal to True
                  • Then - Actions
                    • Custom script: set udg_HJ_PauseEnemyEffectHandler[ udg_HJ_ID ] = AddSpecialEffectTarget( udg_HJ_Effect[ 3 ], udg_HJ_PickedUnit, udg_HJ_PauseEnemyEffectAttach )
                  • Else - Actions
                    • Custom script: set udg_HJ_PauseFriendlyEffectHandler[ udg_HJ_ID ]=AddSpecialEffectTarget( udg_HJ_Effect[ 2 ], udg_HJ_PickedUnit, udg_HJ_PauseFriendlyEffectAttach )
                • -------- --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • (HJ_PickedUnit is Polymorphed) Equal to True
                  • Then - Actions
                    • Set HJ_UnderPolymorphed[HJ_ID] = True
                  • Else - Actions
                • -------- --------
              • Else - Actions
            • -------- --------
            • Set HJ_Counter = (HJ_Counter + 1)
            • Unit Group - Add HJ_PickedUnit to HJ_Group
            • -------- --------
          • Else - Actions
        • Custom script: call GroupRemoveUnit( bj_lastCreatedGroup, udg_HJ_PickedUnit )
        • Custom script: endloop
        • -------- --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • HJ_Counter Greater than 0
          • Then - Actions
            • Custom script: call EnableTrigger( gg_trg_Heavens_Justice_Periodic )
          • Else - Actions
        • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
    • Heavens Justice Periodic
      • Events
      • Conditions
      • Actions
        • -------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
        • Unit Group - Pick every unit in HJ_Group and do (Actions)
          • Loop - Actions
            • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
            • -------- declaration of locals --------
            • Custom script: local real hostX
            • Custom script: local real hostY
            • Custom script: local real soulX
            • Custom script: local real soulY
            • Custom script: local real returnAngle
            • Custom script: local real travelMotionX
            • Custom script: local real travelMotionY
            • Custom script: local real returnMotionX
            • Custom script: local real returnMotionY
            • -------- --------
            • Set HJ_Unit = (Picked unit)
            • Custom script: set udg_HJ_ID = GetUnitUserData( udg_HJ_Unit )
            • -------- --------
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • (HJ_Unit is dead) Equal to True
              • Then - Actions
                • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • (HJ_Unit belongs to an enemy of HJ_CasterPlayer[HJ_ID]) Equal to True
                  • Then - Actions
                    • -------- --------
                    • Special Effect - Destroy HJ_EnemySoulModelHandler[HJ_ID]
                    • Unit - Kill HJ_EnemySoulUnit[HJ_ID]
                    • -------- --------
                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      • If - Conditions
                        • HJ_Pause[HJ_Level[HJ_ID]] Equal to True
                      • Then - Actions
                        • Special Effect - Destroy HJ_PauseEnemyEffectHandler[HJ_ID]
                        • Unit - Remove HJ_PauseAbility from HJ_Unit
                        • Custom script: call SetUnitTurnSpeed( udg_HJ_Unit, GetUnitDefaultTurnSpeed( udg_HJ_Unit ) )
                        • Custom script: call SetUnitPropWindow( udg_HJ_Unit, udg_HJ_PropWindow[ udg_HJ_ID ] * bj_RADTODEG )
                      • Else - Actions
                    • -------- --------
                  • Else - Actions
                    • -------- --------
                    • Special Effect - Destroy HJ_FriendlySoulModelHandler[HJ_ID]
                    • Unit - Kill HJ_FriendlySoulUnit[HJ_ID]
                    • -------- --------
                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      • If - Conditions
                        • HJ_Pause[HJ_Level[HJ_ID]] Equal to True
                      • Then - Actions
                        • Special Effect - Destroy HJ_PauseFriendlyEffectHandler[HJ_ID]
                        • Unit - Remove HJ_PauseAbility from HJ_Unit
                        • Custom script: call SetUnitTurnSpeed( udg_HJ_Unit, GetUnitDefaultTurnSpeed( udg_HJ_Unit ) )
                        • Custom script: call SetUnitPropWindow( udg_HJ_Unit, udg_HJ_PropWindow[ udg_HJ_ID ] * bj_RADTODEG )
                      • Else - Actions
                    • -------- --------
                • -------- --------
                • Set HJ_Counter = (HJ_Counter - 1)
                • Unit Group - Remove HJ_Unit from HJ_Group
                • -------- --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • HJ_Counter Equal to 0
                  • Then - Actions
                    • Custom script: call DisableTrigger( GetTriggeringTrigger( ) )
                  • Else - Actions
                • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
              • Else - Actions
                • -------- --------
                • -------- Update Pause Status --------
                • -------- --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • HJ_Pause[HJ_Level[HJ_ID]] Equal to True
                  • Then - Actions
                    • -------- --------
                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      • If - Conditions
                        • (HJ_Unit is Polymorphed) Equal to True
                        • HJ_UnderPolymorphed[HJ_ID] Equal to False
                      • Then - Actions
                        • -------- --------
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • (HJ_Unit belongs to an enemy of HJ_CasterPlayer[HJ_ID]) Equal to True
                          • Then - Actions
                            • Special Effect - Destroy HJ_PauseEnemyEffectHandler[HJ_ID]
                            • Custom script: set udg_HJ_PauseEnemyEffectHandler[ udg_HJ_ID ] = AddSpecialEffectTarget( udg_HJ_Effect[ 3 ], udg_HJ_Unit, udg_HJ_PauseEnemyEffectAttach )
                          • Else - Actions
                            • Special Effect - Destroy HJ_PauseFriendlyEffectHandler[HJ_ID]
                            • Custom script: set udg_HJ_PauseFriendlyEffectHandler[ udg_HJ_ID ] = AddSpecialEffectTarget( udg_HJ_Effect[ 2 ], udg_HJ_Unit, udg_HJ_PauseFriendlyEffectAttach )
                        • -------- --------
                        • Custom script: call SetUnitTurnSpeed( udg_HJ_Unit, 0 )
                        • Custom script: call SetUnitPropWindow( udg_HJ_Unit, 0 )
                        • Set HJ_UnderPolymorphed[HJ_ID] = True
                        • -------- --------
                      • Else - Actions
                    • -------- --------
                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      • If - Conditions
                        • (Current order of HJ_Unit) Not equal to (Order(HJ_PauseOrder))
                      • Then - Actions
                        • Unit - Add HJ_PauseAbility to HJ_Unit
                        • Custom script: call IssueImmediateOrder( udg_HJ_Unit, udg_HJ_PauseOrder )
                      • Else - Actions
                        • -------- --------
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • HJ_UnderPolymorphed[HJ_ID] Equal to True
                            • (HJ_Unit is Polymorphed) Equal to False
                          • Then - Actions
                            • -------- --------
                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              • If - Conditions
                                • (HJ_Unit belongs to an enemy of HJ_CasterPlayer[HJ_ID]) Equal to True
                              • Then - Actions
                                • Special Effect - Destroy HJ_PauseEnemyEffectHandler[HJ_ID]
                                • Custom script: set udg_HJ_PauseEnemyEffectHandler[ udg_HJ_ID ] = AddSpecialEffectTarget( udg_HJ_Effect[ 3 ], udg_HJ_Unit, udg_HJ_PauseEnemyEffectAttach )
                              • Else - Actions
                                • Special Effect - Destroy HJ_PauseFriendlyEffectHandler[HJ_ID]
                                • Custom script: set udg_HJ_PauseFriendlyEffectHandler[ udg_HJ_ID ] = AddSpecialEffectTarget( udg_HJ_Effect[ 2 ], udg_HJ_Unit, udg_HJ_PauseFriendlyEffectAttach )
                            • -------- --------
                            • Custom script: call SetUnitTurnSpeed( udg_HJ_Unit, 0 )
                            • Custom script: call SetUnitPropWindow( udg_HJ_Unit, 0 )
                            • Set HJ_UnderPolymorphed[HJ_ID] = False
                            • -------- --------
                          • Else - Actions
                    • -------- --------
                  • Else - Actions
                • -------- --------
                • -------- Soul Motions Phase --------
                • -------- --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • (HJ_Unit belongs to an enemy of HJ_CasterPlayer[HJ_ID]) Equal to False
                  • Then - Actions
                    • Set HJ_SoulUnit[HJ_ID] = HJ_FriendlySoulUnit[HJ_ID]
                    • Set HJ_SoulMotionEffect[HJ_ID] = HJ_Effect[6]
                    • Set HJ_ModelHandler[HJ_ID] = HJ_FriendlySoulModelHandler[HJ_ID]
                    • Set HJ_SoulMotionEffectAttach[HJ_ID] = HJ_SoulFriendlyModelAttach
                  • Else - Actions
                    • Set HJ_SoulUnit[HJ_ID] = HJ_EnemySoulUnit[HJ_ID]
                    • Set HJ_SoulMotionEffect[HJ_ID] = HJ_Effect[7]
                    • Set HJ_ModelHandler[HJ_ID] = HJ_EnemySoulModelHandler[HJ_ID]
                    • Set HJ_SoulMotionEffectAttach[HJ_ID] = HJ_SoulEnemyModelAttach
                • -------- --------
                • Custom script: set hostX = GetWidgetX( udg_HJ_Unit )
                • Custom script: set hostY = GetWidgetY( udg_HJ_Unit )
                • Custom script: set soulX = GetWidgetX( udg_HJ_SoulUnit[ udg_HJ_ID ] )
                • Custom script: set soulY = GetWidgetY( udg_HJ_SoulUnit[ udg_HJ_ID ] )
                • -------- --------
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • HJ_SoulDistanceCounter[HJ_ID] Less than or equal to HJ_SoulDistance[HJ_ID]
                    • HJ_LevitateSpeedCalculation[HJ_ID] Less than or equal to HJ_ReturnHeightCalculation[HJ_ID]
                  • Then - Actions
                    • -------- --------
                    • -------- Loads, Updates, Saves: LevitateSpeedCalculation --------
                    • Set HJ_LevitateSpeedCalculation[HJ_ID] = (HJ_LevitateSpeedCalculation[HJ_ID] + HJ_LevitateReal[HJ_ID])
                    • Custom script: call SetUnitFlyHeight( udg_HJ_SoulUnit[ udg_HJ_ID ], GetUnitFlyHeight( udg_HJ_Unit ) + udg_HJ_LevitateSpeedCalculation[ udg_HJ_ID ], 0 )
                    • -------- --------
                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      • If - Conditions
                        • HJ_SoulLevitateTravel[HJ_Level[HJ_ID]] Equal to True
                      • Then - Actions
                        • -------- --------
                        • -------- Travel Motion --------
                        • -------- --------
                        • Custom script: set travelMotionX = soulX + udg_HJ_TravelSpeedCalculation[ udg_HJ_ID ] * Cos( udg_HJ_SoulLevitateTravelAngle[ udg_HJ_ID ] )
                        • Custom script: set travelMotionY = soulY + udg_HJ_TravelSpeedCalculation[ udg_HJ_ID ] * Sin( udg_HJ_SoulLevitateTravelAngle[ udg_HJ_ID ] )
                        • Custom script: call SetUnitX( udg_HJ_SoulUnit[ udg_HJ_ID ], travelMotionX )
                        • Custom script: call SetUnitY( udg_HJ_SoulUnit[ udg_HJ_ID ], travelMotionY )
                        • -------- --------
                        • -------- Loads, Updates, Saves: SoulDistanceCounter --------
                        • Set HJ_SoulDistanceCounter[HJ_ID] = (HJ_SoulDistanceCounter[HJ_ID] + HJ_TravelSpeedCalculation[HJ_ID])
                        • -------- --------
                      • Else - Actions
                        • Custom script: call SetUnitX( udg_HJ_SoulUnit[ udg_HJ_ID ], soulX )
                        • Custom script: call SetUnitY( udg_HJ_SoulUnit[ udg_HJ_ID ], soulY )
                    • -------- --------
                  • Else - Actions
                    • -------- --------
                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      • If - Conditions
                        • HJ_JudgeDurationCounter[HJ_ID] Greater than or equal to HJ_JudgeDuration[HJ_Level[HJ_ID]]
                      • Then - Actions
                        • -------- --------
                        • -------- Return Motion --------
                        • -------- --------
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • HJ_SoulLevitateTravel[HJ_Level[HJ_ID]] Equal to False
                          • Then - Actions
                            • Custom script: call SetUnitX( udg_HJ_SoulUnit[ udg_HJ_ID ], hostX )
                            • Custom script: call SetUnitY( udg_HJ_SoulUnit[ udg_HJ_ID ], hostY )
                          • Else - Actions
                        • -------- --------
                        • -------- Loads, Updates, Saves: ReturnHeightCalculation --------
                        • Set HJ_ReturnHeightCalculation[HJ_ID] = (HJ_ReturnHeightCalculation[HJ_ID] - HJ_LevitateReal[HJ_ID])
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • (Current flying height of HJ_SoulUnit[HJ_ID]) Greater than or equal to ((Current flying height of HJ_Unit) + HJ_SoulInitialHeight[HJ_Level[HJ_ID]])
                          • Then - Actions
                            • Custom script: call SetUnitFlyHeight( udg_HJ_SoulUnit[ udg_HJ_ID ], GetUnitFlyHeight( udg_HJ_Unit ) + udg_HJ_ReturnHeightCalculation[ udg_HJ_ID ], 0 )
                          • Else - Actions
                        • -------- --------
                        • Custom script: if IsUnitInRangeXY( udg_HJ_SoulUnit[ udg_HJ_ID ], hostX, hostY, udg_HJ_CollisionRange ) then
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • (Current flying height of HJ_SoulUnit[HJ_ID]) Less than or equal to ((Current flying height of HJ_Unit) + HJ_SoulInitialHeight[HJ_Level[HJ_ID]])
                          • Then - Actions
                            • -------- --------
                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              • If - Conditions
                                • (HJ_Unit belongs to an enemy of HJ_CasterPlayer[HJ_ID]) Equal to True
                              • Then - Actions
                                • -------- --------
                                • Custom script: call DestroyEffect( AddSpecialEffectTarget( udg_HJ_Effect[ 9 ], udg_HJ_Unit, udg_HJ_SoulReturnDamageAttach ) )
                                • Unit - Cause HJ_Caster[HJ_ID] to damage HJ_Unit, dealing HJ_SoulDamage[HJ_Level[HJ_ID]] damage of attack type HJ_AttackType and damage type HJ_DamageType
                                • -------- --------
                                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                  • If - Conditions
                                    • HJ_Pause[HJ_Level[HJ_ID]] Equal to True
                                  • Then - Actions
                                    • Special Effect - Destroy HJ_PauseEnemyEffectHandler[HJ_ID]
                                    • Unit - Remove HJ_PauseAbility from HJ_Unit
                                    • Custom script: call SetUnitTurnSpeed( udg_HJ_Unit, GetUnitDefaultTurnSpeed( udg_HJ_Unit ) )
                                    • Custom script: call SetUnitPropWindow( udg_HJ_Unit, udg_HJ_PropWindow[ udg_HJ_ID ] * bj_RADTODEG )
                                  • Else - Actions
                              • Else - Actions
                                • -------- --------
                                • Custom script: call DestroyEffect( AddSpecialEffectTarget( udg_HJ_Effect[ 8 ], udg_HJ_Unit, udg_HJ_SoulReturnHealAttach ) )
                                • Unit - Set life of HJ_Unit to ((Life of HJ_Unit) + HJ_SoulHeal[HJ_Level[HJ_ID]])
                                • -------- --------
                                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                  • If - Conditions
                                    • HJ_Pause[HJ_Level[HJ_ID]] Equal to True
                                  • Then - Actions
                                    • Special Effect - Destroy HJ_PauseFriendlyEffectHandler[HJ_ID]
                                    • Unit - Remove HJ_PauseAbility from HJ_Unit
                                    • Custom script: call SetUnitTurnSpeed( udg_HJ_Unit, GetUnitDefaultTurnSpeed( udg_HJ_Unit ) )
                                    • Custom script: call SetUnitPropWindow( udg_HJ_Unit, udg_HJ_PropWindow[ udg_HJ_ID ] * bj_RADTODEG )
                                  • Else - Actions
                            • -------- --------
                            • Special Effect - Destroy HJ_ModelHandler[HJ_ID]
                            • Unit - Kill HJ_SoulUnit[HJ_ID]
                            • -------- --------
                            • Set HJ_Counter = (HJ_Counter - 1)
                            • Unit Group - Remove HJ_Unit from HJ_Group
                            • -------- --------
                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              • If - Conditions
                                • HJ_Counter Equal to 0
                              • Then - Actions
                                • Custom script: call DisableTrigger( GetTriggeringTrigger( ) )
                              • Else - Actions
                            • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
                          • Else - Actions
                        • -------- --------
                        • Custom script: elseif ( udg_HJ_SoulLevitateTravel[udg_HJ_Level[udg_HJ_ID]] == true ) then
                        • -------- --------
                        • -------- the values are strictly constant --------
                        • Custom script: set returnAngle = Atan2 ( hostY - soulY , hostX - soulX )
                        • -------- --------
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • HJ_Pause[HJ_Level[HJ_ID]] Equal to False
                            • (Current flying height of HJ_SoulUnit[HJ_ID]) Less than or equal to (HJ_SoulInitialHeight[HJ_Level[HJ_ID]] + (2.00 x (Current flying height of HJ_Unit)))
                            • HJ_ReturnHeightCalculation[HJ_ID] Less than or equal to (Current flying height of HJ_SoulUnit[HJ_ID])
                          • Then - Actions
                            • -------- --------
                            • Custom script: if not IsUnitInRangeXY( udg_HJ_SoulUnit[ udg_HJ_ID ], hostX, hostY, udg_HJ_CollisionRange ) then
                            • Custom script: set returnMotionX = soulX + (udg_HJ_TravelSpeedCalculation[ udg_HJ_ID ]+(udg_HJ_CollisionRange/2.5)) * Cos( returnAngle )
                            • Custom script: set returnMotionY = soulY + (udg_HJ_TravelSpeedCalculation[ udg_HJ_ID ]+(udg_HJ_CollisionRange/2.5)) * Sin ( returnAngle )
                            • Custom script: else
                            • Custom script: set returnMotionX = soulX + (udg_HJ_TravelSpeedCalculation[ udg_HJ_ID ]/0.25) * Cos( returnAngle )
                            • Custom script: set returnMotionY = soulY + (udg_HJ_TravelSpeedCalculation[ udg_HJ_ID ]/0.25) * Sin ( returnAngle )
                            • Custom script: endif
                            • -------- --------
                          • Else - Actions
                            • Custom script: set returnMotionX = soulX + (udg_HJ_TravelSpeedCalculation[ udg_HJ_ID ]) * Cos( returnAngle )
                            • Custom script: set returnMotionY = soulY + (udg_HJ_TravelSpeedCalculation[ udg_HJ_ID ]) * Sin ( returnAngle )
                        • -------- --------
                        • Custom script: call SetUnitX( udg_HJ_SoulUnit[ udg_HJ_ID ], returnMotionX )
                        • Custom script: call SetUnitY( udg_HJ_SoulUnit[ udg_HJ_ID ], returnMotionY )
                        • Custom script: endif
                        • -------- ---------------------------------------------------------------------------------------------------------------------------------------- --------
                      • Else - Actions
                        • -------- --------
                        • -------- Loads, Updates, Saves: JudgeDurationCounter --------
                        • Set HJ_JudgeDurationCounter[HJ_ID] = (HJ_JudgeDurationCounter[HJ_ID] + HJ_PeriodicInterval)
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • HJ_SoulLevitateTravel[HJ_Level[HJ_ID]] Equal to False
                          • Then - Actions
                            • Custom script: call SetUnitX( udg_HJ_SoulUnit[ udg_HJ_ID ], hostX )
                            • Custom script: call SetUnitY( udg_HJ_SoulUnit[ udg_HJ_ID ], hostY )
                          • Else - Actions
                        • -------- --------
                • -------- --------
                • Custom script: if udg_HJ_SoulMotionEffectChance >= GetRandomReal( 0 , 100 ) then
                • Custom script: call DestroyEffect( AddSpecialEffectTarget( udg_HJ_SoulMotionEffect[ udg_HJ_ID ], udg_HJ_SoulUnit[ udg_HJ_ID ], udg_HJ_SoulMotionEffectAttach[ udg_HJ_ID ] ) )
                • Custom script: endif
                • -------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
Contents

Heaven's Justice v1.2.1 - GUI (Map)

Reviews
KILLCIDE
An awesome spell concept accompanied with great spell effects. The configuration trigger is extremely extensive and neatly organized. The triggers also look good (excluding the overuse of Jass in GUI Custom script). I also personally think you only...
  1. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,505
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    Another awesome spell you have here, jakeZinc! However, it does have two similar problems from your previous submission:
    • Please keep map demo stuff in their own folder (TreeRevival)
    • TreeRevival was not letting me launch the map because of an "unexpected: elseif"
    • Since you are not using Bribe's other systems that require his Unit Indexer, the user is free to use any other unit indexer. However, since your configurable runs off Bribe's UnitIndexEvent, you make it a requirement. I would change it to Map Initilization just to get rid of that "requirement" :) Also, why run off the onIndex event in the first place? You don't create any units off of it
    • When you are preloading, why have users input the strings manually when you can just directly refer to their variables?
    • Insetad of having to recalculate
      360. / HJ_RadiusEffectCount[HJ_AbilityLevel]
      onCast per loop iteration, you can just calculate it on map init like I explained here
    • HJ_LevitateSpeedCalculation can also be applied to ^
    • Special Effects that are applied on the target directly should always have their attachment point as a configurable. Some effects look weird when applied to chest, but look great on origin. Some effects look werid when applied to origin, but look great on overhead. Please make them all configurable (ex: HJ_FriendlySoulModelHandler &
      call DestroyEffect( AddSpecialEffectTarget( udg_HJ_SoulFriendlyModel, udg_HJ_PickedUnit, "chest" ) )
      )
    • Woow the SoulLevitateTravel actions look like black magic. Do you mind explaining what's going on here o:
    • It's not necessary to null global unit variables
    • soulX and Y will never change since the affected units are paused. You can store them onCast as well as Cos and Sin
    • This spell creates a lot of dummy units! I recommend you take a look at DummyRecycler to help with performance
    Like I said for your previous submission, this spell uses way more Jass than GUI. The lack of indentation and colored syntax makes this a real pain to read :( please spare me. Set to Awaiting Update!
     
  2. JAKEZINC

    JAKEZINC

    Joined:
    Aug 13, 2013
    Messages:
    1,463
    Resources:
    20
    Spells:
    20
    Resources:
    20
    you mean hostX and hostY right?, pausing the affected units is configurable so in case the user wants to disable the pause then the hostX and hostY will change.

    your right, I will change that.

    it is about the souls will travel at different places inside the calculated radius, GetRandomReal( minimumdistance, maximum distance ). ( Yeah right I'll gonna calculate them onInit in the next version. )


    Gonna update this spell as soon as I have time ^^.
     
  3. JAKEZINC

    JAKEZINC

    Joined:
    Aug 13, 2013
    Messages:
    1,463
    Resources:
    20
    Spells:
    20
    Resources:
    20
    Updated to v1.1.

    - Deleted unused systems inside the demo map.
    - Users are now free to choose any unit indexer. ( Changed UnitIndexEvent to Map Initialization event onInit )
    - Preloads now effect string variables instead of manually writing it.
    - 9 effect variables converted into 1 effect array variable. ( reduced string effect variables )
    - Now initializes some calculations onInit. ( prevents recalculating issues. )
    - Added ability's max level configuration. ( for calculating purposes and etc. )
    - Attachment points on dummy unit is now configurable.
    - UnitXY native changed to WidgetXY. ( faster )
     
  4. KILLCIDE

    KILLCIDE

    Administrator

    Joined:
    Jul 22, 2015
    Messages:
    3,505
    Resources:
    20
    Models:
    2
    Icons:
    10
    Spells:
    7
    Tutorials:
    1
    Resources:
    20
    An awesome spell concept accompanied with great spell effects. The configuration trigger is extremely extensive and neatly organized. The triggers also look good (excluding the overuse of Jass in GUI Custom script). I also personally think you only need to check if "(Number of units in HJ_Group) Greater than 0" to turn on the loop instead of both that and "(Heavens Justice Loop <gen> is on) Equal to False." I'd also prefer it if you used an integer variable to keep track the number of units instead of having to call the function to count it for you :)

    Approved with a 5/5 rating.
     
  5. thegodfather9

    thegodfather9

    Joined:
    Jul 20, 2016
    Messages:
    11
    Resources:
    0
    Resources:
    0
    Love this spell! The effects are so cool especially the soul leaving the body idea! 1 problem I found is that when used on enemies who are asleep, the units are not paused. They don't wake up or anything but if I use the ability on them then attack them they wake up and are able to move. It still does its damage but it just doesn't pause them! Other than that i gave it a 5/5!
     
  6. Dr Super Good

    Dr Super Good

    Spell Reviewer

    Joined:
    Jan 18, 2005
    Messages:
    25,930
    Resources:
    3
    Maps:
    1
    Spells:
    2
    Resources:
    3
    Moved to awaiting update. The spell is heavily bugged when cast against Neutral Hostile units. The Neutral Hostile units are paused permanently and never take any damage, with visually their souls not flying away and returning.

    It works correctly against other player units as shown in the test map. The problem seems to be with Neutral Hostile, possibly because Neutral Hostile units do not like taking orders due to their strange AI and mechanics. I would also suggest making sure it works when targeting all other neutral slots as well. In worst case there needs to be special logic to prevent the units from becoming permanently paused, for example a fail safe timeout that unpauses them at the expected time even if their soul did not visually fly around as intended.
     
    Last edited: Nov 16, 2018
  7. JAKEZINC

    JAKEZINC

    Joined:
    Aug 13, 2013
    Messages:
    1,463
    Resources:
    20
    Spells:
    20
    Resources:
    20
    That's kinda strange... Guess I'll check it out and find a solution for this one.
     
  8. JAKEZINC

    JAKEZINC

    Joined:
    Aug 13, 2013
    Messages:
    1,463
    Resources:
    20
    Spells:
    20
    Resources:
    20
    Found out that the indexer system is the culprit and not from the neutral hostiles and code itself. It's just minor as the newest patches implemented this 24 player thing and made the system excludes those. Therefore, the system can only index 12 players. I maybe using the outdated version of the system and gonna update it soon as possible.

    Regarding to those sleeping units unable to pause is because it requires to wake them first before they can follow my artificial pausing order. Fortunately, it can be easily fixed as there's a native for it.

    Thanks for your considerations,
    I may update this resource concerning those soon.
     
  9. Devalut

    Devalut

    Joined:
    Feb 9, 2009
    Messages:
    1,161
    Resources:
    2
    Spells:
    2
    Resources:
    2
    Dang, I missed out on seeing this one.
    Nice!
     
  10. JAKEZINC

    JAKEZINC

    Joined:
    Aug 13, 2013
    Messages:
    1,463
    Resources:
    20
    Spells:
    20
    Resources:
    20
    *UPDATE v1.2.0*

    Changelogs:
    - Extended compatibility to versions 1.26 up and 1.30.4 below. 1.31+ not supported (I think)
    - Fixed not pausing the sleeping neutral hostiles.
    - Fixed not pausing the units that have their command slot removed.
    - Added different variants of spell each level. (Instant Justice, Heaven's Support, Heaven's Justice)
    - Added target filtration in configuration. (Can now target flying, structures, mechanicals, immunes)
    - Reworked the demo map for more classification of units.
    - Reworked combination of special effects.
    - Fixed some special effects destroyed improperly.
    - Removed some irrelevant variables in the map.
    - Removed some unnecessary variables in the code.
    - Added array to some boolean configurations; (HJ_SoulLevitateTravel, HJ_Pause)
    - Added caster effect in configuration.
    - Added a counter to provide integer checking than unit group checking.
    - Reduced a lot of function calls and duplicated conditions.
    - Added the pause ability in preloading, minimized the lag caused by first time cast.
    - Fixed disabled functions inside the execution and periodic triggers when importing.
    - Initialized HJ_CustomInteger to recognize its type when importing.
    - Optimized the script codes a lot.

    *QUICK UPDATE v1.2.1*

    Changelogs:

    - Updated the GIF preview.
    - Now includes the pitch configuration for radius effects. (Forgot this)

    @Devalut
    Thanks, it's just 1 of my 2 resources that's remain hidden. I'll proceed reworking on the other one too.