• 🏆 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!

Planetary Devastation v0.3

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
Update.
Launch a sphere (1000 units infront of Earth) with high gravitational force that increase its size when it absorbs earth. When the sphere gets enough size the Earth slams it to the groud dealing massive damage. Earth can charge the sphere for the cost of 16 mana.

Level 1 - Charge 45 damage and 130 AoE per sec.
Level 2 - Charge 55 damage and 130 AoE per sec.
Level 3 - Charge 65 damage and 130 AoE per sec.
Level 4 - Charge 75 damage and 130 AoE per sec.
Lasts up to 12 seconds
Interruptible
Channeling


Post comment if you see bugs, have an idea, or what you just want.
Also pls rate.

  • Planetary Devastation
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Planetary Devastation (N E W)
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • EX_Chib_Index_size Equal to 0
        • Then - Actions
          • Trigger - Turn on Planetary Devastation Loop <gen>
        • Else - Actions
      • -------- Increase the index size --------
      • Set EX_Chib_Index_size = (EX_Chib_Index_size + 1)
      • -------- Dynamic Index --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • EX_Chib_Index_size Greater than EX_Chib_Max_size
        • Then - Actions
          • Set EX_Chib_index[EX_Chib_Index_size] = EX_Chib_Index_size
          • Set EX_Chib_Max_size = EX_Chib_Index_size
        • Else - Actions
      • -------- Dynamic Index End --------
      • Set EX_Chib_Temp_Int = EX_Chib_index[EX_Chib_Index_size]
      • -------- F I X T H I N G S Y O U W A N T H E R E --------
      • -------- Changable values are found below --------
      • Set EX_Chib_RegionLength[EX_Chib_Temp_Int] = 3000.00
      • Set EX_Chib_MaxCoreSize[EX_Chib_Temp_Int] = 2500.00
      • Set EX_Chib_CoreSpeed[EX_Chib_Temp_Int] = 5.00
      • Set EX_Chib_MaxRange[EX_Chib_Temp_Int] = 1000.00
      • Set EX_Chib_MaxCoreHeight[EX_Chib_Temp_Int] = 600.00
      • Set EX_Chib_MaxDamage[EX_Chib_Temp_Int] = (275.00 + (75.00 x (Real((Level of (Ability being cast) for EX_Chib_Unit[EX_Chib_Temp_Int])))))
      • Set EX_Chib_RocksDummyType[EX_Chib_Temp_Int] = DUMMY rocks
      • Set EX_Chib_CoreDummyType[EX_Chib_Temp_Int] = DUMMY core
      • Set EX_Chib_DummyAoE[EX_Chib_Temp_Int] = DUMMY AoE
      • Set EX_Chib_UnitEffect1[EX_Chib_Temp_Int] = Objects\Spawnmodels\Undead\ImpaleTargetDust\ImpaleTargetDust.mdl
      • -------- Dont touch values here --------
      • Set EX_Chib_RegionWidth[EX_Chib_Temp_Int] = EX_Chib_RegionLength[EX_Chib_Temp_Int]
      • Set EX_Chib_Timer[EX_Chib_Temp_Int] = 0.00
      • Set EX_Chib_CoreSize[EX_Chib_Temp_Int] = 10.00
      • Set EX_Chib_Unit[EX_Chib_Temp_Int] = (Triggering unit)
      • Set EX_Chib_UnitPos[EX_Chib_Temp_Int] = (Position of EX_Chib_Unit[EX_Chib_Temp_Int])
      • Set EX_Chib_TargetPoint[EX_Chib_Temp_Int] = (EX_Chib_UnitPos[EX_Chib_Temp_Int] offset by 1000.00 towards (Facing of (Triggering unit)) degrees)
      • Set EX_Chib_CoreRise[EX_Chib_Temp_Int] = True
      • Set EX_Chib_ChargeRange[EX_Chib_Temp_Int] = 50.00
      • Set EX_Chib_Check[EX_Chib_Temp_Int] = True
      • Set EX_Chi_DamageCalculator[EX_Chib_Temp_Int] = False
      • Set EX_Chib_SingleCheck[EX_Chib_Temp_Int] = True
      • Set EX_Chib_Order[EX_Chib_Temp_Int] = (Current order of (Triggering unit))
      • Set EX_Chib_ChargeDamage[EX_Chib_Temp_Int] = 0.00
      • Set EX_Chib_CoreCurrentHeight[EX_Chib_Temp_Int] = 100.00
      • Custom script: set udg_EX_Chib_RocksGroup[udg_EX_Chib_Temp_Int] = CreateGroup()
      • Custom script: set udg_EX_Chib_RocksGroupEyeCandy[udg_EX_Chib_Temp_Int] = CreateGroup()
      • Custom script: set udg_EX_Chib_TargetGroup[udg_EX_Chib_Temp_Int] = CreateGroup()
  • Planetary Devastation Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer EX_Chib_Loop) from 1 to EX_Chib_Index_size, do (Actions)
        • Loop - Actions
          • Set EX_Chib_Temp_Int = EX_Chib_index[EX_Chib_Loop]
          • -------- If the caster has mana and is still casting then perform the actions --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Mana of EX_Chib_Unit[EX_Chib_Temp_Int]) Greater than or equal to 1.00
              • (Current order of EX_Chib_Unit[EX_Chib_Temp_Int]) Equal to EX_Chib_Order[EX_Chib_Temp_Int]
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • EX_Chib_Timer[EX_Chib_Temp_Int] Less than or equal to 0.00
                • Then - Actions
                  • -------- If the timer is 0 or has only started create the sphere and order it to move towards the point target --------
                  • Unit - Create 1 EX_Chib_CoreDummyType[EX_Chib_Temp_Int] for (Owner of EX_Chib_Unit[EX_Chib_Temp_Int]) at EX_Chib_UnitPos[EX_Chib_Temp_Int] facing Default building facing degrees
                  • Animation - Change (Last created unit)'s animation speed to 0.00% of its original speed
                  • Set EX_Chib_Core[EX_Chib_Temp_Int] = (Last created unit)
                  • Unit - Order EX_Chib_Core[EX_Chib_Temp_Int] to Move To EX_Chib_TargetPoint[EX_Chib_Temp_Int]
                  • Animation - Change EX_Chib_Core[EX_Chib_Temp_Int] flying height to EX_Chib_CoreCurrentHeight[EX_Chib_Temp_Int] at 0.00
                  • Set EX_Chib_RocksSpawn[EX_Chib_Temp_Int] = (Region centered at EX_Chib_TargetPoint[EX_Chib_Temp_Int] with size (EX_Chib_RegionWidth[EX_Chib_Temp_Int], EX_Chib_RegionLength[EX_Chib_Temp_Int]))
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • EX_Chib_CoreRise[EX_Chib_Temp_Int] Equal to True
                    • Then - Actions
                      • -------- if the sphere still hasnt aquired the max height the sphere would continue to fly higher --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Current flying height of EX_Chib_Core[EX_Chib_Temp_Int]) Greater than or equal to EX_Chib_MaxCoreHeight[EX_Chib_Temp_Int]
                        • Then - Actions
                          • -------- the sphere now has aquired max height. --------
                          • -------- now turn on damage charging --------
                          • Set EX_Chi_DamageCalculator[EX_Chib_Temp_Int] = True
                          • -------- now increase the sphere's size --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • EX_Chib_CoreSize[EX_Chib_Temp_Int] Less than EX_Chib_MaxCoreSize[EX_Chib_Temp_Int]
                            • Then - Actions
                              • -------- if the sphere is smaller than the indicated max size, the sphere would increase its size --------
                              • -------- create a small effect indicating the AoE of the spell --------
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • EX_Chib_SingleCheck[EX_Chib_Temp_Int] Equal to True
                                • Then - Actions
                                  • Unit - Create 1 EX_Chib_DummyAoE[EX_Chib_Temp_Int] for (Owner of EX_Chib_Unit[EX_Chib_Temp_Int]) at EX_Chib_TargetPoint[EX_Chib_Temp_Int] facing Default building facing degrees
                                  • Animation - Change (Last created unit)'s size to (EX_Chib_ChargeRange[EX_Chib_Temp_Int]%, EX_Chib_ChargeRange[EX_Chib_Temp_Int]%, EX_Chib_ChargeRange[EX_Chib_Temp_Int]%) of its original size
                                  • Set EX_Chib_DummyAoeEffect[EX_Chib_Temp_Int] = (Last created unit)
                                  • Set EX_Chib_SingleCheck[EX_Chib_Temp_Int] = False
                                  • -------- shake the camera off all the players --------
                                  • Player Group - Pick every player in (All players) and do (Actions)
                                    • Loop - Actions
                                      • Camera - Shake the camera for (Picked player) with magnitude 10.00
                                • Else - Actions
                              • Set EX_Chib_TempPoint = (Random point in EX_Chib_RocksSpawn[EX_Chib_Temp_Int])
                              • -------- now spawn effects (rocks) around the sphere --------
                              • Unit - Create 1 DUMMY rocks for (Owner of EX_Chib_Unit[EX_Chib_Temp_Int]) at EX_Chib_TempPoint facing (Random angle) degrees
                              • Special Effect - Create a special effect at EX_Chib_TempPoint using EX_Chib_UnitEffect1[EX_Chib_Temp_Int]
                              • Special Effect - Destroy (Last created special effect)
                              • Set EX_Chib_RandomRocksSize = (Random real number between 50.00 and 300.00)
                              • Animation - Change (Last created unit)'s size to (EX_Chib_RandomRocksSize%, EX_Chib_RandomRocksSize%, EX_Chib_RandomRocksSize%) of its original size
                              • Animation - Change (Last created unit)'s animation speed to 10.00% of its original speed
                              • Set EX_Chib_RandomRocksHeight = (Random real number between 50.00 and 500.00)
                              • Animation - Change (Last created unit) flying height to EX_Chib_RandomRocksHeight at 500.00
                              • Unit Group - Add (Last created unit) to EX_Chib_RocksGroupEyeCandy[EX_Chib_Temp_Int]
                              • Custom script: call RemoveLocation(udg_EX_Chib_TempPoint)
                              • -------- and the effect (rocks) that travels to toward the sphere --------
                              • Set EX_Chib_TempPoint = (Random point in EX_Chib_RocksSpawn[EX_Chib_Temp_Int])
                              • Unit - Create 1 DUMMY rocks for (Owner of EX_Chib_Unit[EX_Chib_Temp_Int]) at EX_Chib_TempPoint facing (Random angle) degrees
                              • Special Effect - Create a special effect at EX_Chib_TempPoint using EX_Chib_UnitEffect1[EX_Chib_Temp_Int]
                              • Special Effect - Destroy (Last created special effect)
                              • Set EX_Chib_RandomRocksSize = (Random real number between 20.00 and 300.00)
                              • Animation - Change (Last created unit)'s size to (EX_Chib_RandomRocksSize%, EX_Chib_RandomRocksSize%, EX_Chib_RandomRocksSize%) of its original size
                              • Animation - Change (Last created unit)'s animation speed to 10.00% of its original speed
                              • Animation - Change (Last created unit) flying height to EX_Chib_MaxCoreHeight[EX_Chib_Temp_Int] at 500.00
                              • Unit Group - Add (Last created unit) to EX_Chib_RocksGroup[EX_Chib_Temp_Int]
                              • Unit - Order (Last created unit) to Move To EX_Chib_TargetPoint[EX_Chib_Temp_Int]
                              • -------- Increase the size of the sphere --------
                              • Animation - Change EX_Chib_Core[EX_Chib_Temp_Int]'s size to (EX_Chib_CoreSize[EX_Chib_Temp_Int]%, EX_Chib_CoreSize[EX_Chib_Temp_Int]%, EX_Chib_CoreSize[EX_Chib_Temp_Int]%) of its original size
                              • -------- Increase the size of the AoE indicating effect --------
                              • Animation - Change EX_Chib_DummyAoeEffect[EX_Chib_Temp_Int]'s size to (EX_Chib_ChargeRange[EX_Chib_Temp_Int]%, EX_Chib_ChargeRange[EX_Chib_Temp_Int]%, EX_Chib_ChargeRange[EX_Chib_Temp_Int]%) of its original size
                              • Set EX_Chib_CoreSize[EX_Chib_Temp_Int] = (EX_Chib_CoreSize[EX_Chib_Temp_Int] + 20.00)
                              • Custom script: call RemoveLocation(udg_EX_Chib_TempPoint)
                            • Else - Actions
                              • -------- now the sphere is big enough. set core rise to false to prevent the trigger to go in here again... --------
                              • Set EX_Chib_CoreRise[EX_Chib_Temp_Int] = False
                              • -------- set the timer to 1 for the next event --------
                              • Set EX_Chib_Timer[EX_Chib_Temp_Int] = 1.00
                        • Else - Actions
                          • Set EX_Chib_CoreCurrentHeight[EX_Chib_Temp_Int] = (EX_Chib_CoreCurrentHeight[EX_Chib_Temp_Int] + EX_Chib_CoreSpeed[EX_Chib_Temp_Int])
                          • Animation - Change EX_Chib_Core[EX_Chib_Temp_Int] flying height to EX_Chib_CoreCurrentHeight[EX_Chib_Temp_Int] at 0.00
                    • Else - Actions
                      • -------- now the sphere is big enough and we created all the effects. --------
                      • -------- we setted the timer to 1 now we have to wait until the timer is greater than or equal 5 --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • EX_Chib_Timer[EX_Chib_Temp_Int] Greater than or equal to 5.00
                        • Then - Actions
                          • -------- we are ready to release the sphere to the ground --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • EX_Chib_CoreCurrentHeight[EX_Chib_Temp_Int] Greater than 0.00
                            • Then - Actions
                              • -------- while the sphere is in the air, clean the rocks that went to the sphere --------
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • EX_Chib_Check[EX_Chib_Temp_Int] Equal to True
                                • Then - Actions
                                  • Unit Group - Pick every unit in EX_Chib_RocksGroup[EX_Chib_Temp_Int] and do (Actions)
                                    • Loop - Actions
                                      • Unit Group - Remove (Picked unit) from EX_Chib_RocksGroup[EX_Chib_Temp_Int]
                                      • Unit - Remove (Picked unit) from the game
                                  • Set EX_Chib_Check[EX_Chib_Temp_Int] = False
                                  • Custom script: call DestroyGroup(udg_EX_Chib_RocksGroup[udg_EX_Chib_Temp_Int])
                                • Else - Actions
                              • Set EX_Chib_CoreCurrentHeight[EX_Chib_Temp_Int] = (EX_Chib_CoreCurrentHeight[EX_Chib_Temp_Int] - (EX_Chib_CoreSpeed[EX_Chib_Temp_Int] x 15.00))
                              • Animation - Change EX_Chib_Core[EX_Chib_Temp_Int] flying height to EX_Chib_CoreCurrentHeight[EX_Chib_Temp_Int] at 0.00
                            • Else - Actions
                              • -------- now the sphere has landed --------
                              • -------- turn off damage charging --------
                              • Set EX_Chi_DamageCalculator[EX_Chib_Temp_Int] = False
                              • Set EX_Chib_TargetGroup[EX_Chib_Temp_Int] = (Units within EX_Chib_ChargeRange[EX_Chib_Temp_Int] of EX_Chib_TargetPoint[EX_Chib_Temp_Int] matching (((((Matching unit) is A structure) Equal to False) and (((Matching unit) is Magic Immune) Equal to False)) and ((((Matching unit) is alive) Equal to True) a
                              • Environment - Create a 4.00 second Depression ripple deformation at EX_Chib_TargetPoint[EX_Chib_Temp_Int] with starting radius EX_Chib_ChargeRange[EX_Chib_Temp_Int], ending radius EX_Chib_ChargeRange[EX_Chib_Temp_Int], and depth 100.00, using 1.00 second ripples spaced 512.00 apart
                              • Animation - Play EX_Chib_Unit[EX_Chib_Temp_Int]'s attack slam animation
                              • -------- deal damage --------
                              • Unit Group - Pick every unit in EX_Chib_TargetGroup[EX_Chib_Temp_Int] and do (Actions)
                                • Loop - Actions
                                  • Set EX_Chib_TempPoint = (Position of (Picked unit))
                                  • Unit - Cause EX_Chib_Unit[EX_Chib_Temp_Int] to damage (Picked unit), dealing EX_Chib_ChargeDamage[EX_Chib_Temp_Int] damage of attack type Spells and damage type Unknown
                                  • Special Effect - Create a special effect at EX_Chib_TempPoint using EX_Chib_UnitEffect1[EX_Chib_Temp_Int]
                                  • Special Effect - Destroy (Last created special effect)
                                  • Custom script: call RemoveLocation(udg_EX_Chib_TempPoint)
                              • Custom script: call DestroyGroup(udg_EX_Chib_TargetGroup[udg_EX_Chib_Temp_Int])
                              • Unit Group - Pick every unit in EX_Chib_RocksGroupEyeCandy[EX_Chib_Temp_Int] and do (Actions)
                                • Loop - Actions
                                  • Set EX_Chib_TempPoint = (Position of (Picked unit))
                                  • Unit Group - Remove (Picked unit) from EX_Chib_RocksGroupEyeCandy[EX_Chib_Temp_Int]
                                  • Unit - Add a (Random real number between 1.00 and 10.00) second Generic expiration timer to (Picked unit)
                                  • Animation - Change (Picked unit) flying height to 0.00 at 500.00
                                  • Animation - Change (Picked unit)'s animation speed to 0.00% of its original speed
                                  • Special Effect - Create a special effect at EX_Chib_TempPoint using EX_Chib_UnitEffect1[EX_Chib_Temp_Int]
                                  • Special Effect - Destroy (Last created special effect)
                                  • Custom script: call RemoveLocation(udg_EX_Chib_TempPoint)
                              • Custom script: call DestroyGroup(udg_EX_Chib_RocksGroupEyeCandy[udg_EX_Chib_Temp_Int])
                              • -------- T U R N O F F / L A S T F I X B E F O R E C L O S E L O O P --------
                              • Unit - Remove EX_Chib_Core[EX_Chib_Temp_Int] from the game
                              • Unit - Remove EX_Chib_DummyAoeEffect[EX_Chib_Temp_Int] from the game
                              • Special Effect - Create a special effect at EX_Chib_TargetPoint[EX_Chib_Temp_Int] using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
                              • Special Effect - Destroy (Last created special effect)
                              • -------- M U I M A K E R --------
                              • Set EX_Chib_Timer[EX_Chib_Temp_Int] = 0.00
                              • Custom script: call RemoveLocation(udg_EX_Chib_TargetPoint[udg_EX_Chib_Temp_Int])
                              • Custom script: call RemoveLocation(udg_EX_Chib_UnitPos[udg_EX_Chib_Temp_Int])
                              • -------- RecycleIndex --------
                              • Set EX_Chib_index[EX_Chib_Loop] = EX_Chib_index[EX_Chib_Index_size]
                              • Set EX_Chib_index[EX_Chib_Index_size] = EX_Chib_Temp_Int
                              • Set EX_Chib_Index_size = (EX_Chib_Index_size - 1)
                              • Set EX_Chib_Loop = (EX_Chib_Loop - 1)
                              • -------- Turn the loop off --------
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • EX_Chib_Index_size Equal to 0
                                • Then - Actions
                                  • Player Group - Pick every player in (All players) and do (Actions)
                                    • Loop - Actions
                                      • Camera - Stop swaying/shaking the camera for (Picked player)
                                  • Trigger - Turn off (This trigger)
                                • Else - Actions
                        • Else - Actions
                  • -------- Here is where we charge the damage range and deduct mana from the caster --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • EX_Chi_DamageCalculator[EX_Chib_Temp_Int] Equal to True
                    • Then - Actions
                      • -------- we need to limit the damage to prevent other bugs in the spell --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • EX_Chib_ChargeDamage[EX_Chib_Temp_Int] Less than or equal to EX_Chib_MaxDamage[EX_Chib_Temp_Int]
                        • Then - Actions
                          • Set EX_Chib_ChargeDamage[EX_Chib_Temp_Int] = (EX_Chib_ChargeDamage[EX_Chib_Temp_Int] + (EX_Chib_MaxDamage[EX_Chib_Temp_Int] / 260.00))
                          • Set EX_Chib_ChargeRange[EX_Chib_Temp_Int] = (EX_Chib_ChargeRange[EX_Chib_Temp_Int] + ((EX_Chib_MaxRange[EX_Chib_Temp_Int] - 50.00) / 260.00))
                          • Unit - Set mana of EX_Chib_Unit[EX_Chib_Temp_Int] to ((Mana of EX_Chib_Unit[EX_Chib_Temp_Int]) - 2.00)
                        • Else - Actions
                    • Else - Actions
            • Else - Actions
              • -------- The caster may have cancelled the spell or ran out of mana... now do actions --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • EX_Chib_ChargeDamage[EX_Chib_Temp_Int] Greater than or equal to (EX_Chib_MaxDamage[EX_Chib_Temp_Int] x 0.10)
                • Then - Actions
                  • -------- If the caster managed to charge up to 10% of the max damage he can release the sphere prematurely --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • EX_Chib_Timer[EX_Chib_Temp_Int] Greater than or equal to 5.00
                    • Then - Actions
                      • -------- run the same steps, but only deals damage with the amout of damage it has charged --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • EX_Chib_CoreCurrentHeight[EX_Chib_Temp_Int] Greater than 0.00
                        • Then - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • EX_Chib_Check[EX_Chib_Temp_Int] Equal to True
                            • Then - Actions
                              • Unit Group - Pick every unit in EX_Chib_RocksGroup[EX_Chib_Temp_Int] and do (Actions)
                                • Loop - Actions
                                  • Unit Group - Remove (Picked unit) from EX_Chib_RocksGroup[EX_Chib_Temp_Int]
                                  • Unit - Remove (Picked unit) from the game
                              • Set EX_Chib_Check[EX_Chib_Temp_Int] = False
                              • Custom script: call DestroyGroup(udg_EX_Chib_RocksGroup[udg_EX_Chib_Temp_Int])
                              • Set EX_Chi_DamageCalculator[EX_Chib_Temp_Int] = False
                            • Else - Actions
                          • Set EX_Chib_CoreCurrentHeight[EX_Chib_Temp_Int] = (EX_Chib_CoreCurrentHeight[EX_Chib_Temp_Int] - (EX_Chib_CoreSpeed[EX_Chib_Temp_Int] x 15.00))
                          • Animation - Change EX_Chib_Core[EX_Chib_Temp_Int] flying height to EX_Chib_CoreCurrentHeight[EX_Chib_Temp_Int] at 0.00
                        • Else - Actions
                          • Set EX_Chib_TargetGroup[EX_Chib_Temp_Int] = (Units within EX_Chib_ChargeRange[EX_Chib_Temp_Int] of EX_Chib_TargetPoint[EX_Chib_Temp_Int] matching (((((Matching unit) is A structure) Equal to False) and (((Matching unit) is Magic Immune) Equal to False)) and ((((Matching unit) is alive) Equal to True) a
                          • Environment - Create a 4.00 second Depression ripple deformation at EX_Chib_TargetPoint[EX_Chib_Temp_Int] with starting radius EX_Chib_ChargeRange[EX_Chib_Temp_Int], ending radius EX_Chib_ChargeRange[EX_Chib_Temp_Int], and depth 100.00, using 1.00 second ripples spaced 512.00 apart
                          • Animation - Play EX_Chib_Unit[EX_Chib_Temp_Int]'s attack slam animation
                          • Unit Group - Pick every unit in EX_Chib_TargetGroup[EX_Chib_Temp_Int] and do (Actions)
                            • Loop - Actions
                              • Set EX_Chib_TempPoint = (Position of (Picked unit))
                              • Unit - Cause EX_Chib_Unit[EX_Chib_Temp_Int] to damage (Picked unit), dealing EX_Chib_ChargeDamage[EX_Chib_Temp_Int] damage of attack type Spells and damage type Unknown
                              • Special Effect - Create a special effect at EX_Chib_TempPoint using EX_Chib_UnitEffect1[EX_Chib_Temp_Int]
                              • Special Effect - Destroy (Last created special effect)
                              • Custom script: call RemoveLocation(udg_EX_Chib_TempPoint)
                          • Custom script: call DestroyGroup(udg_EX_Chib_TargetGroup[udg_EX_Chib_Temp_Int])
                          • Unit Group - Pick every unit in EX_Chib_RocksGroupEyeCandy[EX_Chib_Temp_Int] and do (Actions)
                            • Loop - Actions
                              • Set EX_Chib_TempPoint = (Position of (Picked unit))
                              • Unit Group - Remove (Picked unit) from EX_Chib_RocksGroupEyeCandy[EX_Chib_Temp_Int]
                              • Unit - Add a (Random real number between 1.00 and 10.00) second Generic expiration timer to (Picked unit)
                              • Animation - Change (Picked unit) flying height to 0.00 at 500.00
                              • Animation - Change (Picked unit)'s animation speed to 0.00% of its original speed
                              • Special Effect - Create a special effect at EX_Chib_TempPoint using EX_Chib_UnitEffect1[EX_Chib_Temp_Int]
                              • Special Effect - Destroy (Last created special effect)
                              • Custom script: call RemoveLocation(udg_EX_Chib_TempPoint)
                          • Custom script: call DestroyGroup(udg_EX_Chib_RocksGroupEyeCandy[udg_EX_Chib_Temp_Int])
                          • -------- T U R N O F F / L A S T F I X B E F O R E C L O S E L O O P --------
                          • Unit - Remove EX_Chib_Core[EX_Chib_Temp_Int] from the game
                          • Unit - Remove EX_Chib_DummyAoeEffect[EX_Chib_Temp_Int] from the game
                          • Special Effect - Create a special effect at EX_Chib_TargetPoint[EX_Chib_Temp_Int] using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
                          • Special Effect - Destroy (Last created special effect)
                          • -------- M U I M A K E R --------
                          • Set EX_Chib_Timer[EX_Chib_Temp_Int] = 0.00
                          • Custom script: call RemoveLocation(udg_EX_Chib_TargetPoint[udg_EX_Chib_Temp_Int])
                          • Custom script: call RemoveLocation(udg_EX_Chib_UnitPos[udg_EX_Chib_Temp_Int])
                          • -------- RecycleIndex --------
                          • Set EX_Chib_index[EX_Chib_Loop] = EX_Chib_index[EX_Chib_Index_size]
                          • Set EX_Chib_index[EX_Chib_Index_size] = EX_Chib_Temp_Int
                          • Set EX_Chib_Index_size = (EX_Chib_Index_size - 1)
                          • Set EX_Chib_Loop = (EX_Chib_Loop - 1)
                          • -------- Turn the loop off --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • EX_Chib_Index_size Equal to 0
                            • Then - Actions
                              • Player Group - Pick every player in (All players) and do (Actions)
                                • Loop - Actions
                                  • Camera - Stop swaying/shaking the camera for (Picked player)
                              • Trigger - Turn off (This trigger)
                            • Else - Actions
                    • Else - Actions
                • Else - Actions
                  • -------- Here is when the caster hasn't been able to charge the sphere up to 10%. netherless the sphere is useless it does not deal any damage --------
                  • Unit Group - Pick every unit in EX_Chib_RocksGroup[EX_Chib_Temp_Int] and do (Actions)
                    • Loop - Actions
                      • Unit Group - Remove (Picked unit) from EX_Chib_RocksGroup[EX_Chib_Temp_Int]
                      • Unit - Remove (Picked unit) from the game
                  • Custom script: call DestroyGroup(udg_EX_Chib_RocksGroup[udg_EX_Chib_Temp_Int])
                  • Unit Group - Pick every unit in EX_Chib_RocksGroupEyeCandy[EX_Chib_Temp_Int] and do (Actions)
                    • Loop - Actions
                      • Set EX_Chib_TempPoint = (Position of (Picked unit))
                      • Unit Group - Remove (Picked unit) from EX_Chib_RocksGroupEyeCandy[EX_Chib_Temp_Int]
                      • Unit - Add a (Random real number between 1.00 and 10.00) second Generic expiration timer to (Picked unit)
                      • Animation - Change (Picked unit) flying height to 0.00 at 500.00
                      • Animation - Change (Picked unit)'s animation speed to 0.00% of its original speed
                      • Special Effect - Create a special effect at EX_Chib_TempPoint using EX_Chib_UnitEffect1[EX_Chib_Temp_Int]
                      • Special Effect - Destroy (Last created special effect)
                      • Custom script: call RemoveLocation(udg_EX_Chib_TempPoint)
                  • Custom script: call DestroyGroup(udg_EX_Chib_RocksGroupEyeCandy[udg_EX_Chib_Temp_Int])
                  • -------- T U R N O F F / L A S T F I X B E F O R E C L O S E L O O P --------
                  • Unit - Remove EX_Chib_Core[EX_Chib_Temp_Int] from the game
                  • Unit - Remove EX_Chib_DummyAoeEffect[EX_Chib_Temp_Int] from the game
                  • -------- M U I M A K E R --------
                  • Set EX_Chib_Timer[EX_Chib_Temp_Int] = 0.00
                  • Custom script: call RemoveLocation(udg_EX_Chib_TargetPoint[udg_EX_Chib_Temp_Int])
                  • Custom script: call RemoveLocation(udg_EX_Chib_UnitPos[udg_EX_Chib_Temp_Int])
                  • -------- RecycleIndex --------
                  • Set EX_Chib_index[EX_Chib_Loop] = EX_Chib_index[EX_Chib_Index_size]
                  • Set EX_Chib_index[EX_Chib_Index_size] = EX_Chib_Temp_Int
                  • Set EX_Chib_Index_size = (EX_Chib_Index_size - 1)
                  • Set EX_Chib_Loop = (EX_Chib_Loop - 1)
                  • -------- Turn the loop off --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • EX_Chib_Index_size Equal to 0
                    • Then - Actions
                      • Player Group - Pick every player in (All players) and do (Actions)
                        • Loop - Actions
                          • Camera - Stop swaying/shaking the camera for (Picked player)
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
          • -------- The timer of the spell, increment it with the looping time (I used 0.03) --------
          • Set EX_Chib_Timer[EX_Chib_Temp_Int] = (EX_Chib_Timer[EX_Chib_Temp_Int] + 0.03)
  • Planetary Devastation Clean
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Dying unit)) Equal to DUMMY rocks
    • Actions
      • -------- To avoid the dummy from playing its death animation remove it quickly when it dies --------
      • Unit - Remove (Dying unit) from the game





v0.03
  • Removed unnecessary functions
  • Added comments
  • Fixed a bug (when the caster runs out of mana order the caster to stop)
v0.02

  • Fixed some leaks.
  • Increased charge damage.
    • level 1 - charge 35 damage per sec --> charge 45 damage per sec
    • level 2 - charge 42 damage per sec --> charge 55 damage per sec
    • level 3 - charge 48 damage per sec --> charge 65 damage per sec
    • level 4 - charge 55 damage per sec --> charge 75 damage per sec
v0.01
  • release




Keywords:
earth, panda, planetary, devastation, sand, rocks, core, channeling, interruptible, stone, MUI, GUI
Contents

Planetary Devastation Spell (Map)

Reviews
12th Dec 2015 IcemanBo: Too long as NeedsFix. Rejected. 22:27, 22nd Aug 2012 Magtheridon96: Review

Moderator

M

Moderator

12th Dec 2015
IcemanBo: Too long as NeedsFix. Rejected.

22:27, 22nd Aug 2012
Magtheridon96: Review
 
Level 12
Joined
Nov 20, 2007
Messages
660
I think it leaks on "Planetary Devastation Loop".
  • Set EX_Chib_TempPoint = (Random point in EX_Chib_RocksSpawn[EX_Chib_Temp_Int])
  • Unit - Create 1 DUMMY rocks for (Owner of EX_Chib_Unit[EX_Chib_Temp_Int]) at EX_Chib_TempPoint facing (Random angle) degrees
  • ..........................................................
  • Set EX_Chib_TempPoint = (Random point in EX_Chib_RocksSpawn[EX_Chib_Temp_Int])
  • Unit - Create 1 DUMMY rocks for (Owner of EX_Chib_Unit[EX_Chib_Temp_Int]) at EX_Chib_TempPoint facing (Random angle) degrees
  • Custom script: call RemoveLocation(udg_EX_Chib_TempPoint)
Shouldn't there be a remove location before the 2nd unit creation ?

Over these, good spell (event it's hard to hit with it and draining mana from caster it's pointless)
4/5
 
It's usually prefered to use GetTriggerUnit() whenever possible.
It's a cleaner call, it's a bit faster, and... well, that's all I got.


Also, I'd recommend having a configuration trigger that allows the user to configure spell constants rather than having those constants inside the actual spell cast trigger.

It's easier for the user to configure the spell that way similarly to how it's easier to manage a C++ application by having a "Constants.h" header file to keep things like DEFAULT_SCREEN_WIDTH, DEFAULT_SCREEN_HEIGHT, TILE_SIZE, etc...

Also, I'd recommend making the camera effect optional, as most users wouldn't want that.

- Cache the owning player of the triggering unit into an array variable instead of repeating the call over and over again inside the loop.

- When you set the size of a unit, there are 3 values expected. The last 2 can be 0 and you would still get the same results, so do that. Use your wanted scaling value for the first parameter, and use 0 for the other 2.

- Whenever you create a unit, don't keep referencing "(Last created unit)", store it into a variable, and reference that. (Last created unit) is a function call that returns a variable, but it doesn't inline, so calling it multiple times is inefficient.

- You can apply the above to pretty much anything in between parenthesis like (Picked unit).

Finally, the imports are totally unneeded ;/
You could link to them in the description as recommendations, but we like to have small test maps when showcasing spells/systems.

edit
Make the loop interval configurable because if a user changes it, the spell wouldn't function well if he forgets to change the 0.03 inside the loop code. Using a constant would save users from that fate :3
 
Top