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

Annihilator v1.1

Annihilator

Description
Whenever this unit casts a spell that targets an enemy unit or targets a location, causes bolts of freezing magic to be conjured to damage the target area.

Effect
Level 1
- 2 bolts, deals 25 + (100% Intelligence) damage
Level 2 - 3 bolts, deals 25 + (100% Intelligence) damage
Level 3 - 4 bolts, deals 25 + (100% Intelligence) damage
Level 4 - 5 bolts, deals 25 + (100% Intelligence) damage

Others
Cooldown: 3 seconds
Activation Chance: 100%
Area of Effect: 200
Scatter Radius: 175
Attack Speed Slow: 25%
Movement Speed Slow: 60%
Maximum Cast Range: 1000


JASS:
function QuadraticBezier takes real t, real p1, real p2, real p3 returns real
    return Pow((1-t),2)*p1 + 2*(1-t)*t*p2 + Pow(t,2)*p3
endfunction


  • Annihilator Init
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- --------
      • -------- OBJECT EDITOR CONFIGURABLES --------
      • -------- --------
      • -------- ANH_Ability is the ability displayed on the unit's command panel --------
      • Set VariableSet ANH_Ability = Annihilator
      • -------- --------
      • -------- ANH_AnnihilatorCooldown causes the ANH_Ability to visually go on cooldown --------
      • Set VariableSet ANH_AnnihilatorCooldown = Annihilator Cooldown
      • -------- --------
      • -------- Dummy caster type --------
      • Set VariableSet ANH_DummyType = Dummy (Annihilator)
      • -------- --------
      • -------- Annihilator Slow ability --------
      • -------- Ability given to the dummy caster to slow enemies affected by the spell --------
      • Set VariableSet ANH_AnnihilatorSlow = Annihilator Slow
      • -------- --------
      • -------- COMBAT RELATED CONFIGURABLES --------
      • -------- --------
      • -------- Damage Types and Attack Types --------
      • Set VariableSet ANH_AttackType = Magic
      • Set VariableSet ANH_DamageType = Normal
      • -------- --------
      • -------- Base Damage per bolt --------
      • Set VariableSet ANH_DamageAbsolute[1] = 25.00
      • Set VariableSet ANH_DamageAbsolute[2] = 25.00
      • Set VariableSet ANH_DamageAbsolute[3] = 25.00
      • Set VariableSet ANH_DamageAbsolute[4] = 25.00
      • -------- --------
      • -------- Bonus damage from strength (1.00 = 100%) --------
      • Set VariableSet ANH_DamageStrength[1] = 0.00
      • Set VariableSet ANH_DamageStrength[2] = 0.00
      • Set VariableSet ANH_DamageStrength[3] = 0.00
      • Set VariableSet ANH_DamageStrength[4] = 0.00
      • -------- --------
      • -------- Bonus damage from agility (1.00 = 100%) --------
      • Set VariableSet ANH_DamageAgility[1] = 0.00
      • Set VariableSet ANH_DamageAgility[2] = 0.00
      • Set VariableSet ANH_DamageAgility[3] = 0.00
      • Set VariableSet ANH_DamageAgility[4] = 0.00
      • -------- --------
      • -------- Bonus damage from intelligence (1.00 = 100%) --------
      • Set VariableSet ANH_DamageIntelligence[1] = 1.00
      • Set VariableSet ANH_DamageIntelligence[2] = 1.00
      • Set VariableSet ANH_DamageIntelligence[3] = 1.00
      • Set VariableSet ANH_DamageIntelligence[4] = 1.00
      • -------- --------
      • -------- Activation chance of the spell --------
      • Set VariableSet ANH_ActivationChance[1] = 100.00
      • Set VariableSet ANH_ActivationChance[2] = 100.00
      • Set VariableSet ANH_ActivationChance[3] = 100.00
      • Set VariableSet ANH_ActivationChance[4] = 100.00
      • -------- --------
      • -------- Number of Annihilator bolts --------
      • Set VariableSet ANH_ProjectileCount[1] = 2
      • Set VariableSet ANH_ProjectileCount[2] = 3
      • Set VariableSet ANH_ProjectileCount[3] = 4
      • Set VariableSet ANH_ProjectileCount[4] = 5
      • -------- --------
      • -------- Annihilator bolts area of effect upon landing --------
      • Set VariableSet ANH_AoE[1] = 200.00
      • Set VariableSet ANH_AoE[2] = 200.00
      • Set VariableSet ANH_AoE[3] = 200.00
      • Set VariableSet ANH_AoE[4] = 200.00
      • -------- --------
      • -------- Scatter radius of the Annihilator bolts. (setting this to 0 means it will hit the same spot for all bolts) --------
      • Set VariableSet ANH_ScatterRadius[1] = 175.00
      • Set VariableSet ANH_ScatterRadius[2] = 175.00
      • Set VariableSet ANH_ScatterRadius[3] = 175.00
      • Set VariableSet ANH_ScatterRadius[4] = 175.00
      • -------- --------
      • -------- Max cast range of spells that can activate the passive --------
      • Set VariableSet ANH_MaxCastRange[1] = 1000.00
      • Set VariableSet ANH_MaxCastRange[2] = 1000.00
      • Set VariableSet ANH_MaxCastRange[3] = 1000.00
      • Set VariableSet ANH_MaxCastRange[4] = 1000.00
      • -------- --------
      • -------- PROJECTILE MOVEMENT --------
      • -------- --------
      • -------- Angle between bolts --------
      • Set VariableSet ANH_Spread[1] = 30.00
      • Set VariableSet ANH_Spread[2] = 30.00
      • Set VariableSet ANH_Spread[3] = 30.00
      • Set VariableSet ANH_Spread[4] = 30.00
      • -------- --------
      • -------- The delay before each Annihilator bolts hits --------
      • Set VariableSet ANH_Duration[1] = 1.00
      • Set VariableSet ANH_Duration[2] = 1.00
      • Set VariableSet ANH_Duration[3] = 1.00
      • Set VariableSet ANH_Duration[4] = 1.00
      • -------- --------
      • -------- Delay between Annihilator bolts to hit --------
      • Set VariableSet ANH_CastDelay[1] = 0.30
      • Set VariableSet ANH_CastDelay[2] = 0.30
      • Set VariableSet ANH_CastDelay[3] = 0.30
      • Set VariableSet ANH_CastDelay[4] = 0.30
      • -------- --------
      • -------- Maximum distance of how far back the Annihilator bolts will move before it moves towards the target point --------
      • Set VariableSet ANH_ProjectileOffset[1] = 1000.00
      • Set VariableSet ANH_ProjectileOffset[2] = 1000.00
      • Set VariableSet ANH_ProjectileOffset[3] = 1000.00
      • Set VariableSet ANH_ProjectileOffset[4] = 1000.00
      • -------- --------
      • -------- Starting height of the Annihilator bolt before it starts moving --------
      • Set VariableSet ANH_ProjectileStartHeight[1] = 50.00
      • Set VariableSet ANH_ProjectileStartHeight[2] = 50.00
      • Set VariableSet ANH_ProjectileStartHeight[3] = 50.00
      • Set VariableSet ANH_ProjectileStartHeight[4] = 50.00
      • -------- --------
      • -------- Maximum height of the Annihilator bolt before moving towards the target point --------
      • Set VariableSet ANH_ProjectileMaxHeight[1] = 500.00
      • Set VariableSet ANH_ProjectileMaxHeight[2] = 500.00
      • Set VariableSet ANH_ProjectileMaxHeight[3] = 500.00
      • Set VariableSet ANH_ProjectileMaxHeight[4] = 500.00
      • -------- --------
      • -------- End height of the Annihilator bolt before exploding. (if you want it to explode higher than the ground for some reason) --------
      • Set VariableSet ANH_ProjectileEndHeight[1] = 0.00
      • Set VariableSet ANH_ProjectileEndHeight[2] = 0.00
      • Set VariableSet ANH_ProjectileEndHeight[3] = 0.00
      • Set VariableSet ANH_ProjectileEndHeight[4] = 0.00
      • -------- --------
      • -------- SPECIAL EFFECTS --------
      • -------- --------
      • -------- Annihilator bolt model --------
      • Set VariableSet ANH_ProjectileModel = Abilities\Weapons\FrostWyrmMissile\FrostWyrmMissile.mdl
      • -------- --------
      • -------- Annihilator bolt model size --------
      • Set VariableSet ANH_ProjectileModelSize[1] = 1.00
      • Set VariableSet ANH_ProjectileModelSize[2] = 1.00
      • Set VariableSet ANH_ProjectileModelSize[3] = 1.00
      • Set VariableSet ANH_ProjectileModelSize[4] = 1.00
      • -------- --------
      • -------- Annihilator bolt explosion model --------
      • Set VariableSet ANH_ExplosionModel = Abilities\Spells\Undead\FrostNova\FrostNovaTarget.mdl
      • -------- --------
      • -------- Annihilator bolt explosion size --------
      • Set VariableSet ANH_ExplosionModelSize[1] = 1.00
      • Set VariableSet ANH_ExplosionModelSize[2] = 1.00
      • Set VariableSet ANH_ExplosionModelSize[3] = 1.00
      • Set VariableSet ANH_ExplosionModelSize[4] = 1.00
      • -------- --------
      • -------- Annihilator bolt hit model --------
      • Set VariableSet ANH_HitModel = Abilities\Spells\Other\FrostBolt\FrostBoltMissile.mdl
      • -------- --------
      • -------- Annihilator bolt hit attachment --------
      • Set VariableSet ANH_HitAttachment = overhead
      • -------- --------
      • -------- Annihilator bolt hit model size --------
      • Set VariableSet ANH_HitModelSize[1] = 1.00
      • Set VariableSet ANH_HitModelSize[2] = 1.00
      • Set VariableSet ANH_HitModelSize[3] = 1.00
      • Set VariableSet ANH_HitModelSize[4] = 1.00
      • -------- --------
      • -------- --------
      • -------- MISCELLANEOUS --------
      • -------- --------
      • -------- Does it apply slow to affected units? --------
      • Set VariableSet ANH_Slows = True
      • -------- --------
      • -------- Can it destroy trees? --------
      • Set VariableSet ANH_DestroyTrees = True
      • -------- --------
      • -------- Spell timer interval --------
      • Set VariableSet ANH_Interval = 0.03
      • -------- --------
      • -------- Preload? --------
      • -------- Set it to false if you are implementing your own preload. Otherwise, leave it as it is --------
      • Set VariableSet ANH_Preload = True
      • -------- --------
      • -------- Effect Trigger --------
      • Set VariableSet ANH_EffectTrigger = Annihilator Effect <gen>
      • -------- --------
      • -------- Dont touch the lines below --------
      • Trigger - Add to ANH_EffectTrigger the event (Time - Every ANH_Interval seconds of game time)
      • Trigger - Run Annihilator Miscellaneous <gen> (ignoring conditions)
      • Custom script: endfunction
      • -------- Dont touch the lines above --------
      • -------- --------
      • -------- DAMAGE FILTER --------
      • -------- --------
      • -------- ANH_TempUnit is the unit within the spell explosion radius --------
      • -------- ANH_TempPlayer is the owner of the spell --------
      • Custom script: function IsAnnihilable takes unit udg_ANH_TempUnit, player udg_ANH_TempPlayer returns boolean
      • -------- --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (ANH_TempUnit is A structure) Equal to False
          • (ANH_TempUnit is Mechanical) Equal to False
          • (ANH_TempUnit is Magic Immune) Equal to False
          • (ANH_TempUnit is alive) Equal to True
          • (ANH_TempUnit belongs to an enemy of ANH_TempPlayer.) Equal to True
        • Then - Actions
          • Custom script: return true
        • Else - Actions
      • Custom script: return false
      • Custom script: endfunction
      • -------- --------
      • -------- DAMAGE EVENT --------
      • -------- --------
      • -------- ANH_TempCaster is the caster (unit) of the spell --------
      • -------- ANH_TempUnit is the affected enemy (unit) of the spell --------
      • -------- ANH_TempDamageTotal is the damage that will be dealt by ANH_TempCaster to ANH_TempUnit --------
      • Custom script: function AnnihilateUnit takes unit udg_ANH_TempCaster, unit udg_ANH_TempUnit, real udg_TempDamageTotal returns nothing
      • -------- --------
      • -------- If you wish to modify the damage before it gets dealt, this is the best place to do it --------
      • Unit - Cause ANH_TempCaster to damage ANH_TempUnit, dealing ANH_TempDamageTotal damage of attack type ANH_AttackType and damage type ANH_DamageType
      • -------- --------
      • Custom script: endfunction
      • -------- --------
      • -------- ANNIHILATOR SLOW EVENT --------
      • -------- --------
      • -------- ANH_TempCaster is the caster (unit) of the spell --------
      • -------- ANH_TempUnit is the affected enemy (unit) of the spell --------
      • Custom script: function SlowAnnihilatedUnit takes unit udg_ANH_TempCaster, unit udg_ANH_TempUnit returns nothing
      • -------- --------
      • -------- If you wish to modify the dummy caster order, this is the best place to do it --------
      • Unit - Order ANH_DummyCaster to Undead Necromancer - Cripple ANH_TempUnit
      • -------- --------


  • Annihilator Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Level of ANH_Ability for (Triggering unit)) Greater than 0
      • (Ability Cooldown Remaining of (Triggering unit) for ability ANH_Ability..) Equal to 0.00
      • ((Target unit of ability being cast) belongs to an enemy of (Triggering player).) Equal to True
    • Actions
      • -------- --------
      • -------- Point1 = Position of the caster --------
      • -------- Point2 = Max height of the projectile --------
      • -------- Point3 = Target position --------
      • Set VariableSet ANH_Point3 = (Target point of ability being cast)
      • -------- --------
      • -------- Point(0,0) entails that its a no target ability --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (X of ANH_Point3) Not equal to 0.00
          • (Y of ANH_Point3) Not equal to 0.00
        • Then - Actions
          • -------- --------
          • Set VariableSet ANH_TempCaster = (Triggering unit)
          • Set VariableSet ANH_TempPlayer = (Triggering player)
          • Set VariableSet ANH_TempLevel = (Level of ANH_Ability for ANH_TempCaster)
          • -------- --------
          • Set VariableSet ANH_Point1 = (Position of ANH_TempCaster)
          • -------- --------
          • Set VariableSet ANH_TempDistance = ((Distance between ANH_Point1 and ANH_Point3) + 0.01)
          • -------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ANH_TempDistance Less than or equal to (ANH_MaxCastRange[ANH_TempLevel] + 0.01)
            • Then - Actions
              • -------- Chance check --------
              • Set VariableSet ANH_ActivationRoll = (Random real number between 0.00 and 100.00)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ANH_ActivationRoll Less than or equal to ANH_ActivationChance[ANH_TempLevel]
                • Then - Actions
                  • -------- --------
                  • -------- Start the cooldown of the passive spell --------
                  • Unit - Add ANH_AnnihilatorCooldown to ANH_TempCaster
                  • -------- --------
                  • Set VariableSet ANH_TargetAngle = (Angle from ANH_Point1 to ANH_Point3)
                  • -------- --------
                  • -------- Calculate damage --------
                  • Set VariableSet ANH_TempStrengthDamage = (ANH_DamageStrength[ANH_TempLevel] x (Real((Strength of ANH_TempCaster (Include bonuses)))))
                  • Set VariableSet ANH_TempAgilityDamage = (ANH_DamageAgility[ANH_TempLevel] x (Real((Agility of ANH_TempCaster (Include bonuses)))))
                  • Set VariableSet ANH_TempIntelligenceDamage = (ANH_DamageIntelligence[ANH_TempLevel] x (Real((Intelligence of ANH_TempCaster (Include bonuses)))))
                  • Set VariableSet ANH_TempDamageTotal = ((ANH_DamageAbsolute[ANH_TempLevel] + ANH_TempStrengthDamage) + (ANH_TempAgilityDamage + ANH_TempIntelligenceDamage))
                  • -------- --------
                  • For each (Integer ANH_Looper) from 0 to (ANH_ProjectileCount[ANH_TempLevel] - 1), do (Actions)
                    • Loop - Actions
                      • -------- --------
                      • Set VariableSet ANH_Index = (ANH_Index + 1)
                      • -------- --------
                      • Set VariableSet ANH_Caster[ANH_Index] = ANH_TempCaster
                      • Set VariableSet ANH_Player[ANH_Index] = ANH_TempPlayer
                      • Set VariableSet ANH_Level[ANH_Index] = ANH_TempLevel
                      • Set VariableSet ANH_MaxDistance[ANH_Index] = ANH_TempDistance
                      • Set VariableSet ANH_CurrentDistance[ANH_Index] = 0.00
                      • Set VariableSet ANH_Speed[ANH_Index] = (ANH_TempDistance / ((ANH_Duration[ANH_TempLevel] + (ANH_CastDelay[ANH_TempLevel] x (Real(ANH_Looper)))) / ANH_Interval))
                      • Set VariableSet ANH_DamageTotal[ANH_Index] = ANH_TempDamageTotal
                      • -------- --------
                      • -------- Store starting point --------
                      • Set VariableSet ANH_Point1X[ANH_Index] = (X of ANH_Point1)
                      • Set VariableSet ANH_Point1Y[ANH_Index] = (Y of ANH_Point1)
                      • Custom script: set udg_ANH_Point1Z[udg_ANH_Index] = GetLocationZ(udg_ANH_Point1)
                      • -------- Adjust starting Z using projectile start height --------
                      • Set VariableSet ANH_Point1Z[ANH_Index] = (ANH_Point1Z[ANH_Index] + ANH_ProjectileStartHeight[ANH_TempLevel])
                      • -------- --------
                      • -------- Calculate random radius --------
                      • Set VariableSet ANH_TempPoint = (ANH_Point3 offset by (Random real number between (-1.00 x ANH_ScatterRadius[ANH_TempLevel]) and ANH_ScatterRadius[ANH_TempLevel]) towards (Random angle) degrees.)
                      • -------- Store target point --------
                      • Set VariableSet ANH_Point3X[ANH_Index] = (X of ANH_TempPoint)
                      • Set VariableSet ANH_Point3Y[ANH_Index] = (Y of ANH_TempPoint)
                      • Custom script: set udg_ANH_Point3Z[udg_ANH_Index] = GetLocationZ(udg_ANH_Point3)
                      • -------- Adjust end Z using projectile end height --------
                      • Set VariableSet ANH_Point3Z[ANH_Index] = (ANH_Point3Z[ANH_Index] + ANH_ProjectileEndHeight[ANH_TempLevel])
                      • -------- --------
                      • -------- distribute angles evenly towards target direction --------
                      • Custom script: set udg_ANH_TempAngle = (udg_ANH_TargetAngle - (udg_ANH_ProjectileCount[udg_ANH_TempLevel] - 1) * (udg_ANH_Spread[udg_ANH_TempLevel] / 2.00)) + (udg_ANH_Looper * udg_ANH_Spread[udg_ANH_TempLevel])
                      • -------- --------
                      • -------- Reverse the angle and apply the offset before storing --------
                      • Set VariableSet ANH_Point2 = (ANH_Point1 offset by ANH_ProjectileOffset[ANH_TempLevel] towards (ANH_TempAngle + 180.00) degrees.)
                      • -------- --------
                      • -------- Store maximum height of the projectile --------
                      • Set VariableSet ANH_Point2X[ANH_Index] = (X of ANH_Point2)
                      • Set VariableSet ANH_Point2Y[ANH_Index] = (Y of ANH_Point2)
                      • Set VariableSet ANH_Point2Z[ANH_Index] = ANH_ProjectileMaxHeight[ANH_TempLevel]
                      • -------- --------
                      • -------- Create projectile --------
                      • Special Effect - Create a special effect at ANH_Point1 using ANH_ProjectileModel
                      • Set VariableSet ANH_ProjectileSFX[ANH_Index] = (Last created special effect)
                      • Special Effect - Set Scale of ANH_ProjectileSFX[ANH_Index] to ANH_ProjectileModelSize[ANH_TempLevel]
                      • -------- --------
                      • Custom script: call RemoveLocation(udg_ANH_Point2)
                      • Custom script: call RemoveLocation(udg_ANH_TempPoint)
                      • -------- --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • ANH_Index Equal to 1
                        • Then - Actions
                          • Trigger - Turn on ANH_EffectTrigger
                        • Else - Actions
                  • -------- --------
                • Else - Actions
            • Else - Actions
          • Custom script: call RemoveLocation(udg_ANH_Point1)
        • Else - Actions
      • -------- --------
      • Custom script: call RemoveLocation(udg_ANH_Point3)


  • Annihilator Effect
    • Events
    • Conditions
    • Actions
      • For each (Integer ANH_Looper) from 1 to ANH_Index, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ANH_CurrentDistance[ANH_Looper] Less than ANH_MaxDistance[ANH_Looper]
            • Then - Actions
              • -------- Calculate t --------
              • Set VariableSet ANH_TempTime = (ANH_CurrentDistance[ANH_Looper] / ANH_MaxDistance[ANH_Looper])
              • -------- --------
              • -------- Apply QuadraticBezier to all points --------
              • Custom script: set udg_ANH_TempPosX = QuadraticBezier(udg_ANH_TempTime, udg_ANH_Point1X[udg_ANH_Looper], udg_ANH_Point2X[udg_ANH_Looper], udg_ANH_Point3X[udg_ANH_Looper])
              • Custom script: set udg_ANH_TempPosY = QuadraticBezier(udg_ANH_TempTime, udg_ANH_Point1Y[udg_ANH_Looper], udg_ANH_Point2Y[udg_ANH_Looper], udg_ANH_Point3Y[udg_ANH_Looper])
              • Custom script: set udg_ANH_TempPosZ = QuadraticBezier(udg_ANH_TempTime, udg_ANH_Point1Z[udg_ANH_Looper], udg_ANH_Point2Z[udg_ANH_Looper], udg_ANH_Point3Z[udg_ANH_Looper])
              • -------- --------
              • Set VariableSet ANH_CurrentDistance[ANH_Looper] = (ANH_CurrentDistance[ANH_Looper] + ANH_Speed[ANH_Looper])
              • -------- --------
              • Special Effect - Set Position of ANH_ProjectileSFX[ANH_Looper] to x: ANH_TempPosX, y: ANH_TempPosY, z: ANH_TempPosZ
            • Else - Actions
              • Special Effect - Destroy ANH_ProjectileSFX[ANH_Looper]
              • -------- --------
              • Set VariableSet ANH_Point3 = (Point(ANH_Point3X[ANH_Looper], ANH_Point3Y[ANH_Looper]))
              • -------- Tree destruction --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ANH_DestroyTrees Equal to True
                • Then - Actions
                  • Destructible - Pick every destructible within ANH_AoE[ANH_Level[ANH_Looper]] of ANH_Point3 and do (Actions)
                    • Loop - Actions
                      • Set VariableSet ANH_Destructible = (Picked destructible)
                      • Unit - Order ANH_Harvester to Harvest ANH_Destructible
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Current order of ANH_Harvester) Equal to (Order(harvest))
                        • Then - Actions
                          • Destructible - Kill ANH_Destructible
                          • Unit - Order ANH_Harvester to Stop.
                        • Else - Actions
                • Else - Actions
              • -------- --------
              • Set VariableSet ANH_DamageGroup = (Units within ANH_AoE[ANH_Level[ANH_Looper]] of ANH_Point3.)
              • -------- --------
              • Unit Group - Pick every unit in ANH_DamageGroup and do (Actions)
                • Loop - Actions
                  • -------- --------
                  • Set VariableSet ANH_TempUnit = (Picked unit)
                  • -------- --------
                  • Custom script: set udg_ANH_IsAnnihilable = IsAnnihilable(udg_ANH_TempUnit, udg_ANH_Player[udg_ANH_Looper])
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • ANH_IsAnnihilable Equal to True
                    • Then - Actions
                      • Custom script: call AnnihilateUnit(udg_ANH_Caster[udg_ANH_Looper], udg_ANH_TempUnit, udg_ANH_DamageTotal[udg_ANH_Looper])
                      • -------- --------
                      • Special Effect - Create a special effect attached to the ANH_HitAttachment of ANH_TempUnit using ANH_HitModel
                      • Set VariableSet ANH_TempSFX = (Last created special effect)
                      • Special Effect - Set Scale of ANH_TempSFX to ANH_HitModelSize[ANH_Level[ANH_Looper]]
                      • Special Effect - Destroy ANH_TempSFX
                      • -------- --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • ANH_Slows Equal to True
                        • Then - Actions
                          • Set VariableSet ANH_TempPoint = (Position of ANH_TempUnit)
                          • -------- --------
                          • Custom script: call SetUnitY(udg_ANH_DummyCaster, GetLocationY(udg_ANH_TempPoint))
                          • Custom script: call SetUnitX(udg_ANH_DummyCaster, GetLocationX(udg_ANH_TempPoint))
                          • -------- --------
                          • Custom script: call RemoveLocation(udg_ANH_TempPoint)
                          • Unit - Change ownership of ANH_DummyCaster to ANH_Player[ANH_Looper] and Retain color
                          • Unit - Set level of ANH_AnnihilatorSlow for ANH_DummyCaster to ANH_Level[ANH_Looper]
                          • -------- --------
                          • Custom script: call SlowAnnihilatedUnit(udg_ANH_Caster[udg_ANH_Looper], udg_ANH_TempUnit)
                          • -------- --------
                          • Unit - Change ownership of ANH_DummyCaster to Neutral Passive and Retain color
                        • Else - Actions
                    • Else - Actions
                      • Set VariableSet ANH_TempUnit = No unit
              • -------- --------
              • Custom script: call DestroyGroup(udg_ANH_DamageGroup)
              • -------- --------
              • Special Effect - Create a special effect at ANH_Point3 using ANH_ExplosionModel
              • Set VariableSet ANH_TempSFX = (Last created special effect)
              • Special Effect - Set Scale of ANH_TempSFX to ANH_ExplosionModelSize[ANH_Level[ANH_Looper]]
              • Special Effect - Destroy ANH_TempSFX
              • -------- --------
              • Custom script: call RemoveLocation(udg_ANH_Point3)
              • -------- --------
              • Set VariableSet ANH_Player[ANH_Looper] = ANH_Player[ANH_Index]
              • Set VariableSet ANH_Caster[ANH_Looper] = ANH_Caster[ANH_Index]
              • Set VariableSet ANH_Level[ANH_Looper] = ANH_Level[ANH_Index]
              • -------- --------
              • Set VariableSet ANH_CurrentDistance[ANH_Looper] = ANH_CurrentDistance[ANH_Index]
              • Set VariableSet ANH_DamageTotal[ANH_Looper] = ANH_DamageTotal[ANH_Index]
              • Set VariableSet ANH_MaxDistance[ANH_Looper] = ANH_MaxDistance[ANH_Index]
              • -------- --------
              • Set VariableSet ANH_Point1X[ANH_Looper] = ANH_Point1X[ANH_Index]
              • Set VariableSet ANH_Point1Y[ANH_Looper] = ANH_Point1Y[ANH_Index]
              • Set VariableSet ANH_Point1Z[ANH_Looper] = ANH_Point1Z[ANH_Index]
              • -------- --------
              • Set VariableSet ANH_Point2X[ANH_Looper] = ANH_Point2X[ANH_Index]
              • Set VariableSet ANH_Point2Y[ANH_Looper] = ANH_Point2Y[ANH_Index]
              • Set VariableSet ANH_Point2Z[ANH_Looper] = ANH_Point2Z[ANH_Index]
              • -------- --------
              • Set VariableSet ANH_Point3X[ANH_Looper] = ANH_Point3X[ANH_Index]
              • Set VariableSet ANH_Point3Y[ANH_Looper] = ANH_Point3Y[ANH_Index]
              • Set VariableSet ANH_Point3Z[ANH_Looper] = ANH_Point3Z[ANH_Index]
              • -------- --------
              • Set VariableSet ANH_ProjectileSFX[ANH_Looper] = ANH_ProjectileSFX[ANH_Index]
              • Set VariableSet ANH_Speed[ANH_Looper] = ANH_Speed[ANH_Index]
              • -------- --------
              • Set VariableSet ANH_Looper = (ANH_Looper - 1)
              • Set VariableSet ANH_Index = (ANH_Index - 1)
              • -------- --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ANH_Index Equal to 0
                • Then - Actions
                  • Trigger - Turn off ANH_EffectTrigger
                • Else - Actions


  • Annihilator Cooldown
    • Events
      • Unit - A unit Stops casting an ability
    • Conditions
      • (Ability being cast) Equal to SLB_Ability
    • Actions
      • Unit - Remove SLB_PassiveTrigger from (Triggering unit)


  • Annihilator Miscellaneous
    • Events
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • ANH_Preload Equal to True
        • Then - Actions
          • Set VariableSet ANH_Point1 = (Random point in (Playable map area))
          • -------- --------
          • Unit - Create 1 ANH_DummyType for Neutral Passive at ANH_Point1 facing Default building facing degrees
          • Set VariableSet ANH_TempUnit = (Last created unit)
          • -------- --------
          • Unit - Add ANH_Ability to ANH_TempUnit
          • Unit - Remove ANH_Ability from ANH_TempCaster
          • Unit - Add ANH_AnnihilatorCooldown to ANH_TempUnit
          • Unit - Remove ANH_AnnihilatorCooldown from ANH_TempCaster
          • -------- --------
          • Special Effect - Create a special effect attached to the overhead of ANH_TempUnit using ANH_ExplosionModel
          • Special Effect - Destroy (Last created special effect)
          • Special Effect - Create a special effect attached to the overhead of ANH_TempUnit using ANH_HitModel
          • Special Effect - Destroy (Last created special effect)
          • Special Effect - Create a special effect attached to the overhead of ANH_TempUnit using ANH_ProjectileModel
          • Special Effect - Destroy (Last created special effect)
          • -------- --------
          • Unit - Remove ANH_TempUnit from the game
          • -------- --------
          • Custom script: call RemoveLocation(udg_ANH_Point1)
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • ANH_Slows Equal to True
        • Then - Actions
          • Set VariableSet ANH_Point1 = (Random point in (Playable map area))
          • Unit - Create 1 ANH_DummyType for Neutral Passive at ANH_Point1 facing Default building facing degrees
          • Set VariableSet ANH_DummyCaster = (Last created unit)
          • Unit - Add ANH_AnnihilatorSlow to ANH_DummyCaster
          • -------- --------
          • Custom script: call RemoveLocation(udg_ANH_Point1)
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • ANH_DestroyTrees Equal to True
        • Then - Actions
          • Set VariableSet ANH_Point1 = (Random point in (Playable map area))
          • Unit - Create 1 ANH_DummyType for Neutral Passive at ANH_Point1 facing Default building facing degrees
          • Set VariableSet ANH_Harvester = (Last created unit)
          • Unit - Add Harvest (Gold and Lumber) to ANH_Harvester
          • -------- --------
          • Custom script: call RemoveLocation(udg_ANH_Point1)
        • Else - Actions



Credits

Vexorian 's Dummy model
Change Logs

v1.0 - Initial release
v1.1 - Improved configurations
Previews
Contents

Annihilator v1.1 (Map)

Reviews
Wrda
I think you should preload on one corners of the map, else players might notice the destruction of the effects and hear the sounds. The passive is very nice, solid spell. Approved
Top