• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

Frost Orb v1.1


  • Description
    Summons a frost orb that will move towards the targeted point. Once the orb reach the distance or hit ground units or hit tree, the orb will explode and spread several small frost orbs while also dealing big damage to nearby enemy ground units. Each small orbs will land to a specific location and cause small damage to nearby enemy ground units.
  • Levels
    Level 1 - 100 main orb damage, 20 small orbs, 50 small orbs damage.
    Level 2 - 150 main orb damage, 25 small orbs, 60 small orbs damage.
    Level 3 - 200 main orb damage, 30 small orbs, 70 small orbs damage.
  • Code
    • Frost Orb Init
      • Events
        • Map initialization
      • Conditions
      • Actions
        • -------- --------------------------- --------
        • -------- Configuration --------
        • -------- --------------------------- --------
        • -------- Determines the ability --------
        • Set FO_Ability = Frost Orb
        • -------- Determines the dummy unit-type --------
        • Set FO_DummyType = Frost Orb Dummy
        • -------- Determines the main orb model --------
        • Set FO_MainOrbModel = Abilities\Spells\Undead\FreezingBreath\FreezingBreathMissile.mdl
        • -------- Determines the main orb scale --------
        • Set FO_MainOrbScale = 1.00
        • -------- Determines the main orb height --------
        • Set FO_MainOrbHeight = 30.00
        • -------- Determines the main orb spawn offset from the caster position --------
        • Set FO_MainOrbSpawnOffset = 50.00
        • -------- Determines the main orb move speed --------
        • Set FO_MainOrbSpeed[1] = 20.00
        • Set FO_MainOrbSpeed[2] = 20.00
        • Set FO_MainOrbSpeed[3] = 20.00
        • -------- Determines the main orb collision --------
        • Set FO_MainOrbCollision[1] = 75.00
        • Set FO_MainOrbCollision[2] = 75.00
        • Set FO_MainOrbCollision[3] = 75.00
        • -------- Determines the small orbs model --------
        • Set FO_OrbModel = Abilities\Weapons\ZigguratFrostMissile\ZigguratFrostMissile.mdl
        • -------- Determines the small orbs scale --------
        • Set FO_OrbScale = 1.00
        • -------- Determines the small orbs start height --------
        • Set FO_OrbHeight = 30.00
        • -------- Determines the number of small orbs spawned --------
        • Set FO_OrbNumber[1] = 20
        • Set FO_OrbNumber[2] = 25
        • Set FO_OrbNumber[3] = 30
        • -------- Determines the small orbs move speed --------
        • Set FO_OrbSpeed[1] = 30.00
        • Set FO_OrbSpeed[2] = 30.00
        • Set FO_OrbSpeed[3] = 30.00
        • -------- Determines the small orbs spread range --------
        • Set FO_OrbAoE[1] = 800.00
        • Set FO_OrbAoE[2] = 900.00
        • Set FO_OrbAoE[3] = 1000.00
        • -------- Determines the small orbs arc height --------
        • Set FO_OrbArc[1] = 0.50
        • Set FO_OrbArc[2] = 0.50
        • Set FO_OrbArc[3] = 0.50
        • -------- Determines the main orb explosion model --------
        • Set FO_MainEXModel[1] = Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl
        • Set FO_MainEXModel[2] = Abilities\Spells\Undead\FreezingBreath\FreezingBreathMissile.mdl
        • Set FO_MainEXModel[3] = Units\NightElf\Wisp\WispExplode.mdl
        • -------- Determines the number of main orb explosion will be created --------
        • Set FO_MainEXNumber = 3
        • -------- Determines the main orb explosion range --------
        • Set FO_MainEXRange[1] = 200.00
        • Set FO_MainEXRange[2] = 200.00
        • Set FO_MainEXRange[3] = 200.00
        • -------- Determines the main orb explosion damage --------
        • Set FO_MainEXDamage[1] = 100.00
        • Set FO_MainEXDamage[2] = 150.00
        • Set FO_MainEXDamage[3] = 200.00
        • -------- Determines the small orbs explosion model --------
        • Set FO_EXModel[1] = Abilities\Spells\Undead\FrostNova\FrostNovaTarget.mdl
        • Set FO_EXModel[2] = Abilities\Spells\Undead\FrostArmor\FrostArmorTarget.mdl
        • -------- Determines the number of small orbs explosion will be created --------
        • Set FO_EXNumber = 2
        • -------- Determines the small orbs explosion range --------
        • Set FO_EXRange[1] = 100.00
        • Set FO_EXRange[2] = 100.00
        • Set FO_EXRange[3] = 100.00
        • -------- Determines the small orbs explosion damage --------
        • Set FO_EXDamage[1] = 50.00
        • Set FO_EXDamage[2] = 60.00
        • Set FO_EXDamage[3] = 70.00
        • -------- Determines the effect attached on frozen units --------
        • Set FO_FreezeSFX = Abilities\Spells\Undead\FreezingBreath\FreezingBreathTargetArt.mdl
        • -------- Determines the attachment point --------
        • Set FO_FreezeSFXAttachment = origin
        • -------- Determines the effect spawn every second that indicate a unit is taking damage because of freezing --------
        • Set FO_FreezeDPSSFX = Abilities\Spells\Undead\FrostArmor\FrostArmorDamage.mdl
        • -------- Determines the attachment point --------
        • Set FO_FreezeDPSSFXAttachment = origin
        • -------- Determines the freezing duration --------
        • Set FO_FreezeDuration[1] = 4.00
        • Set FO_FreezeDuration[2] = 4.00
        • Set FO_FreezeDuration[3] = 4.00
        • -------- Determines the freezing damage per second --------
        • Set FO_FreezeDPS[1] = 20.00
        • Set FO_FreezeDPS[2] = 20.00
        • Set FO_FreezeDPS[3] = 20.00
        • -------- Determines the attack-type --------
        • Set FO_AttackType = Spells
        • -------- Determines the damage-type --------
        • Set FO_DamageType = Cold
        • -------- If "True", will enable destroying trees --------
        • Set FO_DestroyTree = True
        • -------- --------------------------- --------
        • -------- End of Configuration --------
        • -------- =========================================================================== --------
        • -------- --------------------------- --------
        • -------- Note: This spell will start working if this trigger has been executed --------
        • -------- --------------------------- --------
        • -------- This is a configurable variable too, but this one isn't recommended to be changed --------
        • -------- This is the interval of the spell, default is 0.03. Don't change this to lower value, else the game will be laggy --------
        • Set FO_Interval = 0.03
        • -------- All actions below isn't configurable. Please don't change anything below this line --------
        • -------- I don't have ability to explain it all, sorry :D --------
        • -------- --------------------------- --------
        • Trigger - Turn off Frost Orb Loop <gen>
        • Trigger - Add to Frost Orb Loop <gen> the event (Time - Every FO_Interval seconds of game time)
        • Trigger - Add to Frost Orb Cast <gen> the event (Unit - A unit Starts the effect of an ability)
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • FO_DestroyTree Equal to True
          • Then - Actions
            • Custom script: set udg_FO_HarvestOrder = String2OrderIdBJ("harvest")
            • Custom script: set udg_FO_Harvester = CreateUnit(Player(15), 'hpea', 0, 0, 0)
            • Custom script: call UnitAddAbility(udg_FO_Harvester, 'Aloc')
            • Unit - Hide FO_Harvester
          • Else - Actions
        • Set FO_FreezeDPS[0] = (1.00 / FO_Interval)
        • For each (Integer FO_Index) from 1 to 3, do (Actions)
          • Loop - Actions
            • Custom script: set udg_FO_OrbGap[udg_FO_Index] = (360 / I2R(udg_FO_OrbNumber[udg_FO_Index])) * bj_DEGTORAD
            • Set FO_FreezeDPS[FO_Index] = (FO_FreezeDPS[FO_Index] / FO_FreezeDPS[0])
        • Custom script: set udg_FO_X[101] = GetRectMinX(bj_mapInitialPlayableArea)
        • Custom script: set udg_FO_X[102] = GetRectMaxX(bj_mapInitialPlayableArea)
        • Custom script: set udg_FO_Y[101] = GetRectMinY(bj_mapInitialPlayableArea)
        • Custom script: set udg_FO_Y[102] = GetRectMaxY(bj_mapInitialPlayableArea)
    • Frost Orb Cast
      • Events
      • Conditions
        • (Ability being cast) Equal to FO_Ability
      • Actions
        • Set FO_MaxIndex = (FO_MaxIndex + 1)
        • Set FO_Caster[FO_MaxIndex] = (Triggering unit)
        • Set FO_Owner[FO_MaxIndex] = (Triggering player)
        • Set FO_Level[FO_MaxIndex] = (Level of FO_Ability for FO_Caster[FO_MaxIndex])
        • Custom script: set udg_FO_X[1] = GetUnitX(udg_FO_Caster[udg_FO_MaxIndex])
        • Custom script: set udg_FO_Y[1] = GetUnitY(udg_FO_Caster[udg_FO_MaxIndex])
        • Custom script: set udg_FO_X[2] = GetSpellTargetX() - udg_FO_X[1]
        • Custom script: set udg_FO_Y[2] = GetSpellTargetY() - udg_FO_Y[1]
        • Custom script: set udg_FO_Angle[udg_FO_MaxIndex] = Atan2(udg_FO_Y[2], udg_FO_X[2])
        • Custom script: set udg_FO_X[3] = udg_FO_X[1] + udg_FO_MainOrbSpawnOffset * Cos(udg_FO_Angle[udg_FO_MaxIndex])
        • Custom script: set udg_FO_Y[3] = udg_FO_Y[1] + udg_FO_MainOrbSpawnOffset * Sin(udg_FO_Angle[udg_FO_MaxIndex])
        • Custom script: set udg_FO_Dummy[udg_FO_MaxIndex] = CreateUnit(udg_FO_Owner[udg_FO_MaxIndex], udg_FO_DummyType, udg_FO_X[3], udg_FO_Y[3], udg_FO_Angle[udg_FO_MaxIndex] * bj_RADTODEG)
        • Special Effect - Create a special effect attached to the origin of FO_Dummy[FO_MaxIndex] using FO_MainOrbModel
        • Set FO_Model[FO_MaxIndex] = (Last created special effect)
        • Custom script: call SetUnitScale(udg_FO_Dummy[udg_FO_MaxIndex], udg_FO_MainOrbScale, 0, 0)
        • Animation - Change FO_Dummy[FO_MaxIndex] flying height to FO_MainOrbHeight at 0.00
        • Custom script: set udg_FO_Distance[udg_FO_MaxIndex] = SquareRoot(udg_FO_X[2] * udg_FO_X[2] + udg_FO_Y[2] * udg_FO_Y[2]) - udg_FO_MainOrbSpawnOffset
        • Set FO_Stage[FO_MaxIndex] = 3
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • FO_MaxIndex Equal to 1
          • Then - Actions
            • Trigger - Turn on Frost Orb Loop <gen>
          • Else - Actions
    • Frost Orb Loop
      • Events
      • Conditions
      • Actions
        • For each (Integer FO_Index) from 1 to FO_MaxIndex, do (Actions)
          • Loop - Actions
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • FO_Stage[FO_Index] Equal to 1
              • Then - Actions
                • Custom script: set udg_FO_X[1] = GetUnitX(udg_FO_Dummy[udg_FO_Index])
                • Custom script: set udg_FO_Y[1] = GetUnitY(udg_FO_Dummy[udg_FO_Index])
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • FO_CurHeight[FO_Index] Greater than 0.00
                    • FO_Distance[FO_Index] Less than FO_MaxDistance[FO_Index]
                  • Then - Actions
                    • Custom script: set udg_FO_CurHeight[udg_FO_Index] = (((4.00 * udg_FO_MaxHeight[udg_FO_Index]) / udg_FO_MaxDistance[udg_FO_Index]) * ((udg_FO_MaxDistance[udg_FO_Index] - udg_FO_Distance[udg_FO_Index]) * (udg_FO_Distance[udg_FO_Index] / udg_FO_MaxDistance[udg_FO_Index])))
                    • Animation - Change FO_Dummy[FO_Index] flying height to FO_CurHeight[FO_Index] at 0.00
                    • Custom script: set udg_FO_X[1] = udg_FO_X[1] + udg_FO_OrbSpeed[udg_FO_Level[udg_FO_Index]] * Cos(udg_FO_Angle[udg_FO_Index])
                    • Custom script: set udg_FO_Y[1] = udg_FO_Y[1] + udg_FO_OrbSpeed[udg_FO_Level[udg_FO_Index]] * Sin(udg_FO_Angle[udg_FO_Index])
                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      • If - Conditions
                        • FO_X[1] Greater than FO_X[101]
                        • FO_X[1] Less than FO_X[102]
                        • FO_Y[1] Greater than FO_Y[101]
                        • FO_Y[1] Less than FO_Y[102]
                      • Then - Actions
                        • Custom script: call SetUnitX(udg_FO_Dummy[udg_FO_Index], udg_FO_X[1])
                        • Custom script: call SetUnitY(udg_FO_Dummy[udg_FO_Index], udg_FO_Y[1])
                      • Else - Actions
                    • Set FO_Distance[FO_Index] = (FO_Distance[FO_Index] + FO_OrbSpeed[FO_Level[FO_Index]])
                  • Else - Actions
                    • For each (Integer FO_Level[0]) from 1 to FO_EXNumber, do (Actions)
                      • Loop - Actions
                        • Custom script: call DestroyEffect(AddSpecialEffect(udg_FO_EXModel[udg_FO_Level[0]], udg_FO_X[1], udg_FO_Y[1]))
                    • Custom script: set bj_wantDestroyGroup = true
                    • Set FO_TempLoc = (Point(FO_X[1], FO_Y[1]))
                    • Unit Group - Pick every unit in (Units within FO_EXRange[FO_Level[FO_Index]] of FO_TempLoc) and do (Actions)
                      • Loop - Actions
                        • Set FO_TempUnit = (Picked unit)
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • (FO_TempUnit is A flying unit) Equal to False
                            • (FO_TempUnit is dead) Equal to False
                            • (FO_TempUnit belongs to an ally of FO_Owner[FO_Index]) Equal to False
                          • Then - Actions
                            • Unit - Cause FO_Caster[FO_Index] to damage FO_TempUnit, dealing FO_EXDamage[FO_Level[FO_Index]] damage of attack type FO_AttackType and damage type FO_DamageType
                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              • If - Conditions
                                • (FO_TempUnit is dead) Equal to False
                              • Then - Actions
                                • Set FO_Stage[0] = 0
                                • For each (Integer FO_Level[0]) from 1 to FO_MaxIndex, do (Actions)
                                  • Loop - Actions
                                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                      • If - Conditions
                                        • FO_TempUnit Equal to FO_Target[FO_Level[0]]
                                      • Then - Actions
                                        • Set FO_Duration[FO_Level[0]] = FO_FreezeDuration[FO_Level[FO_Index]]
                                        • Set FO_Stage[0] = 1
                                        • Custom script: exitwhen udg_FO_Level[0] == udg_FO_Level[0]
                                      • Else - Actions
                                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                  • If - Conditions
                                    • FO_Stage[0] Equal to 0
                                  • Then - Actions
                                    • Set FO_MaxIndex = (FO_MaxIndex + 1)
                                    • Set FO_Caster[FO_MaxIndex] = FO_Caster[FO_Index]
                                    • Set FO_Target[FO_MaxIndex] = FO_TempUnit
                                    • Set FO_Level[FO_MaxIndex] = FO_Level[FO_Index]
                                    • Set FO_Duration[FO_MaxIndex] = FO_FreezeDuration[FO_Level[FO_MaxIndex]]
                                    • Set FO_FXTimer[FO_MaxIndex] = 1.00
                                    • Special Effect - Create a special effect attached to the FO_FreezeSFXAttachment of FO_Target[FO_MaxIndex] using FO_FreezeSFX
                                    • Set FO_Model[FO_MaxIndex] = (Last created special effect)
                                    • Animation - Change FO_Target[FO_MaxIndex]'s animation speed to 0.00% of its original speed
                                    • Set FO_Stage[FO_MaxIndex] = 2
                                  • Else - Actions
                              • Else - Actions
                          • Else - Actions
                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      • If - Conditions
                        • FO_DestroyTree Equal to True
                      • Then - Actions
                        • Destructible - Pick every destructible within FO_EXRange[FO_Level[FO_Index]] of FO_TempLoc and do (Actions)
                          • Loop - Actions
                            • Set FO_TempDest = (Picked destructible)
                            • Custom script: call IssueTargetOrderById(udg_FO_Harvester, udg_FO_HarvestOrder, udg_FO_TempDest)
                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              • If - Conditions
                                • (Current order of FO_Harvester) Equal to FO_HarvestOrder
                                • (FO_TempDest is dead) Equal to False
                              • Then - Actions
                                • Destructible - Kill FO_TempDest
                              • Else - Actions
                        • Unit - Order FO_Harvester to Stop
                      • Else - Actions
                    • Custom script: call RemoveLocation(udg_FO_TempLoc)
                    • Special Effect - Destroy FO_Model[FO_Index]
                    • Unit - Kill FO_Dummy[FO_Index]
                    • Set FO_Stage[FO_Index] = 4
              • Else - Actions
                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                  • If - Conditions
                    • FO_Stage[FO_Index] Equal to 2
                  • Then - Actions
                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      • If - Conditions
                        • (FO_Target[FO_Index] is dead) Equal to False
                        • FO_Duration[FO_Index] Greater than 0.00
                      • Then - Actions
                        • Unit - Order FO_Target[FO_Index] to Stop
                        • Set FO_FXTimer[FO_Index] = (FO_FXTimer[FO_Index] + FO_Interval)
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • FO_FXTimer[FO_Index] Greater than or equal to 1.00
                          • Then - Actions
                            • Set FO_FXTimer[FO_Index] = 0.00
                            • Custom script: call DestroyEffect(AddSpecialEffectTarget(udg_FO_FreezeDPSSFX, udg_FO_Target[udg_FO_Index], udg_FO_FreezeDPSSFXAttachment))
                          • Else - Actions
                        • Unit - Cause FO_Caster[FO_Index] to damage FO_Target[FO_Index], dealing FO_FreezeDPS[FO_Level[FO_Index]] damage of attack type FO_AttackType and damage type FO_DamageType
                        • Set FO_Duration[FO_Index] = (FO_Duration[FO_Index] - FO_Interval)
                      • Else - Actions
                        • Special Effect - Destroy FO_Model[FO_Index]
                        • Animation - Change FO_Target[FO_Index]'s animation speed to 100.00% of its original speed
                        • Set FO_Stage[FO_Index] = 4
                  • Else - Actions
                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                      • If - Conditions
                        • FO_Stage[FO_Index] Equal to 3
                      • Then - Actions
                        • Custom script: set udg_FO_X[1] = GetUnitX(udg_FO_Dummy[udg_FO_Index])
                        • Custom script: set udg_FO_Y[1] = GetUnitY(udg_FO_Dummy[udg_FO_Index])
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • FO_Distance[FO_Index] Greater than 0.00
                          • Then - Actions
                            • Custom script: set udg_FO_X[1] = udg_FO_X[1] + udg_FO_MainOrbSpeed[udg_FO_Level[udg_FO_Index]] * Cos(udg_FO_Angle[udg_FO_Index])
                            • Custom script: set udg_FO_Y[1] = udg_FO_Y[1] + udg_FO_MainOrbSpeed[udg_FO_Level[udg_FO_Index]] * Sin(udg_FO_Angle[udg_FO_Index])
                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              • If - Conditions
                                • FO_X[1] Greater than FO_X[101]
                                • FO_X[1] Less than FO_X[102]
                                • FO_Y[1] Greater than FO_Y[101]
                                • FO_Y[1] Less than FO_Y[102]
                              • Then - Actions
                                • Custom script: call SetUnitX(udg_FO_Dummy[udg_FO_Index], udg_FO_X[1])
                                • Custom script: call SetUnitY(udg_FO_Dummy[udg_FO_Index], udg_FO_Y[1])
                                • Set FO_TempLoc = (Point(FO_X[1], FO_Y[1]))
                                • Custom script: set bj_wantDestroyGroup = true
                                • Unit Group - Pick every unit in (Units within FO_MainOrbCollision[FO_Level[FO_Index]] of FO_TempLoc) and do (Actions)
                                  • Loop - Actions
                                    • Set FO_TempUnit = (Picked unit)
                                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                      • If - Conditions
                                        • (FO_TempUnit is A flying unit) Equal to False
                                        • (FO_TempUnit is dead) Equal to False
                                        • (FO_TempUnit belongs to an ally of FO_Owner[FO_Index]) Equal to False
                                      • Then - Actions
                                        • Set FO_Distance[FO_Index] = 0.00
                                      • Else - Actions
                                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                  • If - Conditions
                                    • FO_DestroyTree Equal to True
                                  • Then - Actions
                                    • Destructible - Pick every destructible within FO_MainOrbCollision[FO_Level[FO_Index]] of FO_TempLoc and do (Actions)
                                      • Loop - Actions
                                        • Set FO_TempDest = (Picked destructible)
                                        • Custom script: call IssueTargetOrderById(udg_FO_Harvester, udg_FO_HarvestOrder, udg_FO_TempDest)
                                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                          • If - Conditions
                                            • (Current order of FO_Harvester) Equal to FO_HarvestOrder
                                            • (FO_TempDest is dead) Equal to False
                                          • Then - Actions
                                            • Set FO_Distance[FO_Index] = 0.00
                                          • Else - Actions
                                    • Unit - Order FO_Harvester to Stop
                                  • Else - Actions
                                • Custom script: call RemoveLocation(udg_FO_TempLoc)
                                • Set FO_Distance[FO_Index] = (FO_Distance[FO_Index] - FO_MainOrbSpeed[FO_Level[FO_Index]])
                              • Else - Actions
                                • Set FO_Distance[FO_Index] = 0.00
                          • Else - Actions
                            • For each (Integer FO_Level[0]) from 1 to FO_MainEXNumber, do (Actions)
                              • Loop - Actions
                                • Custom script: call DestroyEffect(AddSpecialEffect(udg_FO_MainEXModel[udg_FO_Level[0]], udg_FO_X[1], udg_FO_Y[1]))
                            • Custom script: set bj_wantDestroyGroup = true
                            • Set FO_TempLoc = (Point(FO_X[1], FO_Y[1]))
                            • Unit Group - Pick every unit in (Units within FO_MainEXRange[FO_Level[FO_Index]] of FO_TempLoc) and do (Actions)
                              • Loop - Actions
                                • Set FO_TempUnit = (Picked unit)
                                • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                  • If - Conditions
                                    • (FO_TempUnit is A flying unit) Equal to False
                                    • (FO_TempUnit is dead) Equal to False
                                    • (FO_TempUnit belongs to an ally of FO_Owner[FO_Index]) Equal to False
                                  • Then - Actions
                                    • Unit - Cause FO_Caster[FO_Index] to damage FO_TempUnit, dealing FO_MainEXDamage[FO_Level[FO_Index]] damage of attack type FO_AttackType and damage type FO_DamageType
                                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                      • If - Conditions
                                        • (FO_TempUnit is dead) Equal to False
                                      • Then - Actions
                                        • Set FO_Stage[0] = 0
                                        • For each (Integer FO_Level[0]) from 1 to FO_MaxIndex, do (Actions)
                                          • Loop - Actions
                                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                              • If - Conditions
                                                • FO_TempUnit Equal to FO_Target[FO_Level[0]]
                                              • Then - Actions
                                                • Set FO_Duration[FO_Level[0]] = FO_FreezeDuration[FO_Level[FO_Index]]
                                                • Set FO_Stage[0] = 1
                                                • Custom script: exitwhen udg_FO_Stage[0] == 1
                                              • Else - Actions
                                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                          • If - Conditions
                                            • FO_Stage[0] Equal to 0
                                          • Then - Actions
                                            • Set FO_MaxIndex = (FO_MaxIndex + 1)
                                            • Set FO_Caster[FO_MaxIndex] = FO_Caster[FO_Index]
                                            • Set FO_Target[FO_MaxIndex] = FO_TempUnit
                                            • Set FO_Level[FO_MaxIndex] = FO_Level[FO_Index]
                                            • Set FO_Duration[FO_MaxIndex] = FO_FreezeDuration[FO_Level[FO_MaxIndex]]
                                            • Set FO_FXTimer[FO_MaxIndex] = 1.00
                                            • Special Effect - Create a special effect attached to the FO_FreezeSFXAttachment of FO_Target[FO_MaxIndex] using FO_FreezeSFX
                                            • Set FO_Model[FO_MaxIndex] = (Last created special effect)
                                            • Animation - Change FO_Target[FO_MaxIndex]'s animation speed to 0.00% of its original speed
                                            • Set FO_Stage[FO_MaxIndex] = 2
                                          • Else - Actions
                                      • Else - Actions
                                  • Else - Actions
                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              • If - Conditions
                                • FO_DestroyTree Equal to True
                              • Then - Actions
                                • Destructible - Pick every destructible within FO_MainEXRange[FO_Level[FO_Index]] of FO_TempLoc and do (Actions)
                                  • Loop - Actions
                                    • Set FO_TempDest = (Picked destructible)
                                    • Custom script: call IssueTargetOrderById(udg_FO_Harvester, udg_FO_HarvestOrder, udg_FO_TempDest)
                                    • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                      • If - Conditions
                                        • (Current order of FO_Harvester) Equal to FO_HarvestOrder
                                        • (FO_TempDest is dead) Equal to False
                                      • Then - Actions
                                        • Destructible - Kill FO_TempDest
                                      • Else - Actions
                                • Unit - Order FO_Harvester to Stop
                              • Else - Actions
                            • Custom script: call RemoveLocation(udg_FO_TempLoc)
                            • Special Effect - Destroy FO_Model[FO_Index]
                            • Unit - Kill FO_Dummy[FO_Index]
                            • Set FO_Stage[FO_Index] = 4
                            • Custom script: set udg_FO_Angle[0] = GetRandomReal(0, 360) * bj_DEGTORAD
                            • For each (Integer FO_Level[0]) from 1 to FO_OrbNumber[FO_Level[FO_Index]], do (Actions)
                              • Loop - Actions
                                • Set FO_Angle[0] = (FO_Angle[0] + FO_OrbGap[FO_Level[FO_Level[0]]])
                                • Set FO_MaxIndex = (FO_MaxIndex + 1)
                                • Custom script: set udg_FO_Dummy[udg_FO_MaxIndex] = CreateUnit(udg_FO_Owner[udg_FO_Index], udg_FO_DummyType, udg_FO_X[1], udg_FO_Y[1], udg_FO_Angle[0] * bj_RADTODEG)
                                • Special Effect - Create a special effect attached to the origin of FO_Dummy[FO_MaxIndex] using FO_OrbModel
                                • Set FO_Model[FO_MaxIndex] = (Last created special effect)
                                • Custom script: call SetUnitScale(udg_FO_Dummy[udg_FO_MaxIndex], udg_FO_OrbScale, 0, 0)
                                • Animation - Change FO_Dummy[FO_MaxIndex] flying height to FO_OrbHeight at 0.00
                                • Set FO_Angle[FO_MaxIndex] = FO_Angle[0]
                                • Set FO_Distance[FO_MaxIndex] = FO_OrbHeight
                                • Set FO_CurHeight[FO_MaxIndex] = FO_OrbHeight
                                • Set FO_MaxDistance[FO_MaxIndex] = (Random real number between FO_MainEXRange[FO_Level[FO_Index]] and FO_OrbAoE[FO_Level[FO_Index]])
                                • Set FO_MaxHeight[FO_MaxIndex] = (FO_MaxDistance[FO_MaxIndex] x FO_OrbArc[FO_Level[FO_Index]])
                                • Set FO_Caster[FO_MaxIndex] = FO_Caster[FO_Index]
                                • Set FO_Owner[FO_MaxIndex] = FO_Owner[FO_Index]
                                • Set FO_Level[FO_MaxIndex] = FO_Level[FO_Index]
                                • Set FO_Stage[FO_MaxIndex] = 1
                      • Else - Actions
                        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                          • If - Conditions
                            • FO_Stage[FO_Index] Equal to 4
                          • Then - Actions
                            • Set FO_Angle[FO_Index] = FO_Angle[FO_MaxIndex]
                            • Set FO_Caster[FO_Index] = FO_Caster[FO_MaxIndex]
                            • Set FO_CurHeight[FO_Index] = FO_CurHeight[FO_MaxIndex]
                            • Set FO_Distance[FO_Index] = FO_Distance[FO_MaxIndex]
                            • Set FO_Dummy[FO_Index] = FO_Dummy[FO_MaxIndex]
                            • Set FO_Duration[FO_Index] = FO_Duration[FO_MaxIndex]
                            • Set FO_FXTimer[FO_Index] = FO_FXTimer[FO_MaxIndex]
                            • Set FO_Level[FO_Index] = FO_Level[FO_MaxIndex]
                            • Set FO_MaxDistance[FO_Index] = FO_MaxDistance[FO_MaxIndex]
                            • Set FO_MaxHeight[FO_Index] = FO_MaxHeight[FO_MaxIndex]
                            • Set FO_Model[FO_Index] = FO_Model[FO_MaxIndex]
                            • Set FO_Owner[FO_Index] = FO_Owner[FO_MaxIndex]
                            • Set FO_Stage[FO_Index] = FO_Stage[FO_MaxIndex]
                            • Set FO_Target[FO_Index] = FO_Target[FO_MaxIndex]
                            • Set FO_Index = (FO_Index - 1)
                            • Set FO_MaxIndex = (FO_MaxIndex - 1)
                            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                              • If - Conditions
                                • FO_MaxIndex Equal to 0
                              • Then - Actions
                                • Trigger - Turn off (This trigger)
                              • Else - Actions
                          • Else - Actions
  • Credits
    - Vexorian for dummy.mdl.
  • Changelog
    - v1.0: Initial version.
    - v1.1: Added new configuration, now the spell can freeze units.


Keywords:
Ice, Frost, Orb, Spread, Small, MUI, GUI
Contents

Test Map (Map)

Reviews
Frost Orb v1.1 | Reviewed by Maker | 29th Sep 2013 APPROVED Leakless and MUI, good tooltip [tr] The spell damages neutral units The main projectile could fly a bit higher The frost effects disappear abruptly The...

Moderator

M

Moderator


Frost Orb v1.1 | Reviewed by Maker | 29th Sep 2013
APPROVED


126248-albums6177-picture66521.png


  • Leakless and MUI, good tooltip
126248-albums6177-picture66523.png


  • The spell damages neutral units
  • The main projectile could fly a bit higher
  • The frost effects disappear abruptly
  • The launch time of the main projectile does not match the
    casting animation (Follow through time)
[tr]
 
Level 13
Joined
Mar 29, 2012
Messages
542
I put the import instruction on the spell...

Here's for quick :
1. Open Preferences and enable "Automatically create unknown variables while pasting trigger data"
2. Copy Frost Orb ability
3. Copy Frost Orb dummy
4. Copy Frost Orb triggers (include Variable Creator)

Then you can delete the Variable Creator after you followed all of the steps above...
PM me if you still having problem on importing this spell...
 
Level 3
Joined
Sep 7, 2013
Messages
40
I put the import instruction on the spell...

Here's for quick :
1. Open Preferences and enable "Automatically create unknown variables while pasting trigger data"
2. Copy Frost Orb ability
3. Copy Frost Orb dummy
4. Copy Frost Orb triggers (include Variable Creator)

Then you can delete the Variable Creator after you followed all of the steps above...
PM me if you still having problem on importing this spell...

Ok, thanks. 5/5, even though I can't actually rate yet :p
 
Top