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

Explosive Toxic Gas V1.01

Inspired off the the "How to train your dragon" Hideous Zippleback, Wanted to try out combination spells (hence why this is technically a pack but only two spells so really a set) The second spell is mainly to just spark off the first spell for additional effect rather than it being an impressive spell itself.

Works in tandem - Use the first spell to cover land (randomly) in Toxic gas, use the second spell to ignite the gas to devestating effect

Although both spells can be used seperately it's recommended they are used together.


Toxic Gas:
Spews Gas onto the target area and spreads out randomly from the target point which poisons Organic units and rusts Mechanicals, dealing damage every second, if the gas is ignited it will explode dealing extra damage and setting nearby units on fire.

Level 1 - 4 Directions, Short expansion, weak poison, weak explosion
Level 2 - 6 Directions, Medium expansion, medium poison, medium explosion
Level 3 - 8 Directions, Long expansion, Strong poison, Fatal explosion

Volanic Rock:
Throws a volcanic rock at the target area dealing damage and setting nearby units on fire dealing damage over a short time also ignites toxic gas

Level 1 - Weak damage, Small explosion, 1st degree burn
Level 2 - Medium damage, Medium explosion, 2nd Degree Burn
Level 3 - Heavy Damage, Large explosion, 3rd Degree Burn



- Heavily Configurable
- Combination Spells
- Unique functionality
- Realistic
- Multiple effects
- Pretty
- Comes with instructions



  • ETG Configuration
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- Do not touch --------
      • Hashtable - Create a hashtable
      • Set ETG_Hash = (Last created hashtable)
      • -------- -------- --------
      • -------- Determines the size of the gas projectile --------
      • Set ETG_GasProjectileScale = 200.00
      • -------- Determines the size of the volcanic Rock --------
      • Set ETG_VolcanicProjectileScale = 100.00
      • -------- Determines how random the Gas spread will be --------
      • Set ETG_SpreadRandomiser = 40.00
      • -------- Determines the Arc for the volcanic rock --------
      • Set ETG_HeightMultiplyer = 0.45
      • -------- Determines how much ground each Gas segment will cover --------
      • Set ETG_GasCloudAOE = 100.00
      • -------- Determines how big the Volcanic Rock AOE is --------
      • Set ETG_VolcanicRockAoeBase = 50.00
      • Set ETG_VolcanicRockAoePerLevel = 50.00
      • -------- Determines the damage dealt by the poison --------
      • Set ETG_PoisonDamageBase = 0.50
      • Set ETG_PoisonDamagePerLevel = 0.10
      • -------- Determines the damage deal by the burning --------
      • Set ETG_BurnDamageBase = 0.30
      • Set ETG_BurnDamagePerLevel = 0.20
      • -------- Determines the damage upon explosion --------
      • Set ETG_ExplosionDamageBase = 50.00
      • Set ETG_ExplosionDamagePerLevel = 25.00
      • -------- Determines the gas poison duration --------
      • Set ETG_PoisonDurationBase = 50.00
      • Set ETG_PoisonDurationPerLevel = 20.00
      • -------- Determines the duration of the Clouds --------
      • Set ETG_GasCloudDurationBase = 8.00
      • Set ETG_GasCloudDurationPerLevel = 2.00
      • -------- Determines the duration of the Burning --------
      • Set ETG_BurnDurationBase = 100.00
      • Set ETG_BurnDurationPerLevel = 40.00
      • -------- Sets the minimum range of the Volcanic Rock Spell --------
      • Set ETG_MinRange = 100.00
      • -------- Determines the amount of directions the gas will spread out in --------
      • Set ETG_GasHeadsBase = 2
      • Set ETG_GasHeadsPerLevel = 2
      • -------- Determines how far the gas will spread --------
      • Set ETG_GasSpreadBase = 3.00
      • Set ETG_GasSpreadPerLevel = 2.00
      • -------- Determines how fast the cloud of Gas will be sent out --------
      • Set ETG_GasSpeed = 20.00
      • -------- Determines the delay between each part of gas being created --------
      • Set ETG_GasSpreadSpeed = 2
      • -------- Determines the fly height for the Gas projectile --------
      • Set ETG_GasProjectileFlyHeight = 100.00
      • -------- Determines the Dummy unit of the spell --------
      • Set ETG_Dummy = ETG Dummy
      • -------- Determines the unit model used as the Gas --------
      • Set ETG_GasModel = Abilities\Spells\Undead\PlagueCloud\PlagueCloudCaster.mdl
      • -------- Determines the unit model used as the Gas Projectile --------
      • Set ETG_GasProjectileModel = Abilities\Weapons\ChimaeraAcidMissile\ChimaeraAcidMissile.mdl
      • -------- Determines the unit model used as the Volcanic Rock --------
      • Set ETG_RockModel = Abilities\Spells\Other\Volcano\VolcanoMissile.mdl
      • -------- Determines the unit model used when the cloud dissapates --------
      • Set ETG_DissapateModel = Abilities\Spells\Undead\AnimateDead\AnimateDeadTarget.mdl
      • -------- Determines the unit model used when the cloud explodes --------
      • Set ETG_ExplosionModel = Abilities\Spells\Other\Incinerate\FireLordDeathExplode.mdl
      • -------- Determines the unit model used as the Fire --------
      • Set ETG_FireModel = Environment\LargeBuildingFire\LargeBuildingFire2.mdl
      • -------- Determines the unit model used as the Poison mark --------
      • Set ETG_PoisonModel = Abilities\Spells\Undead\AntiMagicShell\AntiMagicShell.mdl
      • -------- Determines the spell used to act as the activation spell --------
      • -------- Toxic Gas --------
      • Set ETG_Spell = Toxic Gas
      • -------- Volcanic Rock --------
      • Set ETG_Spell2 = Volcanic Rock
      • -------- ------ --------
      • -------- Ability to add burn buff --------
      • Set ETG_BuffAbilityBurn = Burn
      • -------- Ability to add poison buff --------
      • Set ETG_BuffAbilityPoison = Poison
  • ETG Activation
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • Or - Any (Conditions) are true
        • Conditions
          • (Ability being cast) Equal to ETG_Spell
          • (Ability being cast) Equal to ETG_Spell2
    • Actions
      • -------- Spell setup --------
      • Set ETG_U = (Triggering unit)
      • Set ETG_TempPoint = (Position of (Triggering unit))
      • Set ETG_TempPoint2 = (Target point of ability being cast)
      • Set ETG_TempReal = (Real((Level of ETG_Spell for ETG_U)))
      • Set ETG_Angle = (Angle from ETG_TempPoint to ETG_TempPoint2)
      • -------- -------- --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ability being cast) Equal to ETG_Spell
        • Then - Actions
          • -------- Creating the Gas --------
          • Unit - Create 1 ETG_Dummy for (Owner of ETG_U) at ETG_TempPoint facing ETG_Angle degrees
          • -------- Unit setup --------
          • Set ETG_TempU = (Last created unit)
          • Custom script: set udg_ETG_UHandle = GetHandleId(udg_ETG_TempU)
          • Special Effect - Create a special effect attached to the origin of ETG_TempU using ETG_GasProjectileModel
          • Animation - Change ETG_TempU's size to (ETG_GasProjectileScale%, ETG_GasProjectileScale%, ETG_GasProjectileScale%) of its original size
          • Animation - Change ETG_TempU flying height to ETG_GasProjectileFlyHeight at 0.00
          • -------- -------- --------
          • -------- Original Casting Unit --------
          • Hashtable - Save Handle OfETG_U as 1 of ETG_UHandle in ETG_Hash
          • -------- Stage ID --------
          • Hashtable - Save 1 as 2 of ETG_UHandle in ETG_Hash
          • -------- Number of Gas Heads --------
          • Hashtable - Save (ETG_GasHeadsBase + ((Integer(ETG_TempReal)) x ETG_GasHeadsPerLevel)) as 3 of ETG_UHandle in ETG_Hash
          • -------- Duration of each Gas cloud --------
          • Hashtable - Save (ETG_GasCloudDurationBase + (ETG_TempReal x ETG_GasCloudDurationPerLevel)) as 4 of ETG_UHandle in ETG_Hash
          • -------- Poison Damage --------
          • Hashtable - Save (ETG_PoisonDamageBase + (ETG_TempReal x ETG_PoisonDamagePerLevel)) as 5 of ETG_UHandle in ETG_Hash
          • -------- Poison Duration --------
          • Hashtable - Save (ETG_PoisonDurationBase + (ETG_TempReal x ETG_PoisonDurationPerLevel)) as 6 of ETG_UHandle in ETG_Hash
          • -------- Amount of spreading Gas --------
          • Hashtable - Save (ETG_GasSpreadBase + (ETG_TempReal x ETG_GasSpreadPerLevel)) as 10 of ETG_UHandle in ETG_Hash
          • -------- Distance To Travel --------
          • Hashtable - Save (Distance between ETG_TempPoint and ETG_TempPoint2) as 11 of ETG_UHandle in ETG_Hash
          • -------- Distance Initalisation --------
          • Hashtable - Save 0.00 as 12 of ETG_UHandle in ETG_Hash
          • -------- Cloud effect --------
          • Hashtable - Save Handle Of(Last created special effect) as 13 of ETG_UHandle in ETG_Hash
          • -------- Added to unit group --------
          • Unit Group - Add ETG_TempU to ETG_Group
        • Else - Actions
          • -------- Minimum Range check --------
          • Set ETG_RealCache[0] = (Distance between ETG_TempPoint and ETG_TempPoint2)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ETG_RealCache[0] Less than ETG_MinRange
            • Then - Actions
              • Custom script: call RemoveLocation(udg_ETG_TempPoint2)
              • Set ETG_Angle = (Facing of ETG_U)
              • Set ETG_TempPoint2 = (ETG_TempPoint offset by ETG_MinRange towards ETG_Angle degrees)
              • Set ETG_RealCache[0] = (Distance between ETG_TempPoint and ETG_TempPoint2)
            • Else - Actions
          • -------- Creating the Rock --------
          • Unit - Create 1 ETG_Dummy for (Owner of ETG_U) at ETG_TempPoint facing ETG_Angle degrees
          • -------- Unit setup --------
          • Set ETG_TempU = (Last created unit)
          • Custom script: set udg_ETG_UHandle = GetHandleId(udg_ETG_TempU)
          • Special Effect - Create a special effect attached to the overhead of ETG_TempU using ETG_RockModel
          • Animation - Change ETG_TempU's size to (ETG_VolcanicProjectileScale%, ETG_VolcanicProjectileScale%, ETG_VolcanicProjectileScale%) of its original size
          • -------- -------- --------
          • -------- Original Casting Unit --------
          • Hashtable - Save Handle OfETG_U as 1 of ETG_UHandle in ETG_Hash
          • -------- Stage ID --------
          • Hashtable - Save 4 as 2 of ETG_UHandle in ETG_Hash
          • -------- Explosion Aoe --------
          • Hashtable - Save (ETG_VolcanicRockAoeBase + (ETG_TempReal x ETG_VolcanicRockAoePerLevel)) as 6 of ETG_UHandle in ETG_Hash
          • -------- Distance To Travel --------
          • Hashtable - Save ETG_RealCache[0] as 11 of ETG_UHandle in ETG_Hash
          • -------- Distance Initalisation --------
          • Hashtable - Save 0.00 as 12 of ETG_UHandle in ETG_Hash
          • Hashtable - Save (ETG_RealCache[0] x ETG_HeightMultiplyer) as 13 of ETG_UHandle in ETG_Hash
          • -------- Rock effect --------
          • Hashtable - Save Handle Of(Last created special effect) as 14 of ETG_UHandle in ETG_Hash
          • -------- Added to unit group --------
          • Unit Group - Add ETG_TempU to ETG_Group
      • -------- Explosion Damage --------
      • Hashtable - Save (ETG_ExplosionDamageBase + (ETG_TempReal x ETG_ExplosionDamagePerLevel)) as 9 of ETG_UHandle in ETG_Hash
      • -------- Burn Damage --------
      • Hashtable - Save (ETG_BurnDamageBase + (ETG_TempReal x ETG_BurnDamagePerLevel)) as 7 of ETG_UHandle in ETG_Hash
      • -------- Burn Duration --------
      • Hashtable - Save (ETG_BurnDurationBase + (ETG_TempReal x ETG_BurnDurationPerLevel)) as 8 of ETG_UHandle in ETG_Hash
      • -------- Clearing Leaks --------
      • Custom script: call RemoveLocation(udg_ETG_TempPoint2)
      • Custom script: call RemoveLocation(udg_ETG_TempPoint)
      • Trigger - Turn on ETG Loop <gen>
  • ETG Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in ETG_Group and do (Actions)
        • Loop - Actions
          • -------- Unit Setup --------
          • Set ETG_U = (Picked unit)
          • Custom script: set udg_ETG_UHandle = GetHandleId(udg_ETG_U)
          • Set ETG_TempInteger = (Load 2 of ETG_UHandle from ETG_Hash)
          • -------- Stage 1 (of 4) --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ETG_TempInteger Equal to 1
            • Then - Actions
              • -------- Movement --------
              • Custom script: set udg_ETG_TempX = GetUnitX(udg_ETG_U)
              • Custom script: set udg_ETG_TempY = GetUnitY(udg_ETG_U)
              • Custom script: set udg_ETG_Angle = (GetUnitFacing(udg_ETG_U) * bj_DEGTORAD)
              • Custom script: call SetUnitX(udg_ETG_U, udg_ETG_TempX + udg_ETG_GasSpeed * Cos(udg_ETG_Angle))
              • Custom script: call SetUnitY(udg_ETG_U, udg_ETG_TempY + udg_ETG_GasSpeed * Sin(udg_ETG_Angle))
              • Set ETG_TempReal = ((Load 12 of ETG_UHandle from ETG_Hash) + ETG_GasSpeed)
              • -------- Arrival --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ETG_TempReal Greater than or equal to (Load 11 of ETG_UHandle from ETG_Hash)
                • Then - Actions
                  • Set ETG_TempPoint = (Position of ETG_U)
                  • Set ETG_Angle = 0.00
                  • -------- Creating Gas --------
                  • Set ETG_TempU = (Load 1 of ETG_UHandle in ETG_Hash)
                  • -------- Amount of gas heads --------
                  • Set ETG_RealCache[0] = (Real((Load 3 of ETG_UHandle from ETG_Hash)))
                  • -------- Duration of each Gas cloud --------
                  • Set ETG_RealCache[1] = (Load 4 of ETG_UHandle from ETG_Hash)
                  • -------- Poison Damage --------
                  • Set ETG_RealCache[2] = (Load 5 of ETG_UHandle from ETG_Hash)
                  • -------- Poison Duration --------
                  • Set ETG_RealCache[3] = (Load 6 of ETG_UHandle from ETG_Hash)
                  • -------- Burn Damage --------
                  • Set ETG_RealCache[4] = (Load 7 of ETG_UHandle from ETG_Hash)
                  • -------- Burn Duration --------
                  • Set ETG_RealCache[5] = (Load 8 of ETG_UHandle from ETG_Hash)
                  • -------- Explosion Damage --------
                  • Set ETG_RealCache[6] = (Load 9 of ETG_UHandle from ETG_Hash)
                  • -------- Amount of spreading Gas --------
                  • Set ETG_RealCache[7] = (Load 10 of ETG_UHandle from ETG_Hash)
                  • For each (Integer ETG_i) from 1 to (Load 3 of ETG_UHandle from ETG_Hash), do (Actions)
                    • Loop - Actions
                      • -------- Gas data Setup --------
                      • Set ETG_Angle = (ETG_Angle + (360.00 / ETG_RealCache[0]))
                      • Set ETG_TempPoint2 = (ETG_TempPoint offset by ETG_GasCloudAOE towards ETG_Angle degrees)
                      • -------- Creating Gas --------
                      • Unit - Create 1 ETG_Dummy for (Owner of ETG_U) at ETG_TempPoint2 facing ETG_Angle degrees
                      • Set ETG_TempU2 = (Last created unit)
                      • Custom script: call RemoveLocation(udg_ETG_TempPoint2)
                      • Custom script: set udg_ETG_UHandleC = GetHandleId(udg_ETG_TempU2)
                      • Special Effect - Create a special effect attached to the chest of ETG_TempU2 using ETG_GasModel
                      • -------- Original Casting Unit --------
                      • Hashtable - Save Handle OfETG_TempU as 1 of ETG_UHandleC in ETG_Hash
                      • -------- Stage ID --------
                      • Hashtable - Save 2 as 2 of ETG_UHandleC in ETG_Hash
                      • -------- Duration of each Gas cloud --------
                      • Hashtable - Save ETG_RealCache[1] as 4 of ETG_UHandleC in ETG_Hash
                      • -------- Poison Damage --------
                      • Hashtable - Save ETG_RealCache[2] as 5 of ETG_UHandleC in ETG_Hash
                      • -------- Poison Duration --------
                      • Hashtable - Save ETG_RealCache[3] as 6 of ETG_UHandleC in ETG_Hash
                      • -------- Burn Damage --------
                      • Hashtable - Save ETG_RealCache[4] as 7 of ETG_UHandleC in ETG_Hash
                      • -------- Burn Duration --------
                      • Hashtable - Save ETG_RealCache[5] as 8 of ETG_UHandleC in ETG_Hash
                      • -------- Explosion Damage --------
                      • Hashtable - Save ETG_RealCache[6] as 9 of ETG_UHandleC in ETG_Hash
                      • -------- Amount of spreading Gas --------
                      • Hashtable - Save ETG_RealCache[7] as 10 of ETG_UHandleC in ETG_Hash
                      • -------- Ignition setup --------
                      • Hashtable - Save False as 11 of ETG_UHandleC in ETG_Hash
                      • -------- Effect --------
                      • Hashtable - Save Handle Of(Last created special effect) as 12 of ETG_UHandleC in ETG_Hash
                      • -------- Spread delay --------
                      • Hashtable - Save 0 as 13 of ETG_UHandleC in ETG_Hash
                      • -------- Amount of spreads --------
                      • Hashtable - Save 1 as 14 of ETG_UHandleC in ETG_Hash
                      • -------- Gas setup --------
                      • Unit - Add a ETG_RealCache[1] second Generic expiration timer to ETG_TempU2
                      • Unit Group - Add ETG_TempU2 to ETG_Group
                      • Unit Group - Add ETG_TempU2 to ETG_Explodeables
                  • Custom script: call RemoveLocation(udg_ETG_TempPoint)
                  • Special Effect - Destroy (Load 13 of ETG_UHandle in ETG_Hash)
                  • Unit Group - Remove ETG_U from ETG_Group
                  • Unit - Kill ETG_U
                  • Hashtable - Clear all child hashtables of child ETG_UHandle in ETG_Hash
                • Else - Actions
                  • Hashtable - Save ETG_TempReal as 12 of ETG_UHandle in ETG_Hash
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ETG_TempInteger Equal to 2
                • Then - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (ETG_U is dead) Equal to True
                    • Then - Actions
                      • Set ETG_TempPoint = (Position of ETG_U)
                      • -------- Ignition Check --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Load 11 of ETG_UHandle from ETG_Hash) Equal to True
                        • Then - Actions
                          • -------- Explode effects --------
                          • Special Effect - Create a special effect at ETG_TempPoint using ETG_ExplosionModel
                          • Special Effect - Destroy (Last created special effect)
                          • -------- Explosion/Burn setup --------
                          • Set ETG_TempPoint = (Position of ETG_U)
                          • Set ETG_RealCache[5] = (ETG_GasCloudAOE + 50.00)
                          • Set ETG_TempGroup = (Units within ETG_RealCache[5] of ETG_TempPoint)
                          • Set ETG_TempU2 = (Load 1 of ETG_UHandle in ETG_Hash)
                          • Set ETG_RealCache[0] = (Load 7 of ETG_UHandle from ETG_Hash)
                          • Set ETG_RealCache[1] = (Load 8 of ETG_UHandle from ETG_Hash)
                          • -------- Explosion/Burn --------
                          • Unit Group - Pick every unit in ETG_TempGroup and do (Actions)
                            • Loop - Actions
                              • -------- Finding Targets --------
                              • Set ETG_TempU = (Picked unit)
                              • Custom script: set udg_ETG_UHandleC = GetHandleId(udg_ETG_TempU)
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • (ETG_TempU is Magic Immune) Equal to False
                                  • (ETG_TempU is A structure) Equal to False
                                  • (ETG_TempU is alive) Equal to True
                                  • (ETG_TempU belongs to an enemy of (Owner of ETG_U)) Equal to True
                                  • (ETG_TempU is A ground unit) Equal to True
                                • Then - Actions
                                  • -------- Burn --------
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • (Load 8 of ETG_UHandleC from ETG_Hash) Less than or equal to 0.00
                                    • Then - Actions
                                      • Special Effect - Destroy (Load 10 of ETG_UHandleC in ETG_Hash)
                                      • Hashtable - Save Handle OfETG_TempU2 as 1 of ETG_UHandleC in ETG_Hash
                                      • Hashtable - Save ETG_RealCache[0] as 7 of ETG_UHandleC in ETG_Hash
                                      • Hashtable - Save ETG_RealCache[1] as 8 of ETG_UHandleC in ETG_Hash
                                      • Hashtable - Save 3 as 2 of ETG_UHandleC in ETG_Hash
                                      • Special Effect - Create a special effect attached to the chest of ETG_TempU using ETG_FireModel
                                      • Hashtable - Save Handle Of(Last created special effect) as 10 of ETG_UHandleC in ETG_Hash
                                      • Unit - Add ETG_BuffAbilityBurn to ETG_TempU
                                      • Unit Group - Add ETG_TempU to ETG_Group
                                    • Else - Actions
                                  • -------- Explosion Damage --------
                                  • Unit - Cause ETG_TempU2 to damage ETG_TempU, dealing (Load 9 of ETG_UHandle from ETG_Hash) damage of attack type Spells and damage type Normal
                                • Else - Actions
                          • Unit Group - Pick every unit in ETG_Explodeables and do (Actions)
                            • Loop - Actions
                              • Set ETG_TempU = (Picked unit)
                              • Set ETG_TempPoint2 = (Position of ETG_TempU)
                              • -------- Check Chain Ignition --------
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • (Distance between ETG_TempPoint and ETG_TempPoint2) Less than or equal to ETG_RealCache[5]
                                • Then - Actions
                                  • -------- Ignition setup --------
                                  • Custom script: set udg_ETG_UHandleC = GetHandleId(udg_ETG_TempU)
                                  • Unit - Add a 0.10 second Generic expiration timer to ETG_TempU
                                  • Hashtable - Save True as 11 of ETG_UHandleC in ETG_Hash
                                • Else - Actions
                              • Custom script: call RemoveLocation (udg_ETG_TempPoint2)
                          • Custom script: call DestroyGroup (udg_ETG_TempGroup)
                          • Custom script: call RemoveLocation (udg_ETG_TempPoint)
                        • Else - Actions
                          • -------- Dissapation SFX --------
                          • Special Effect - Create a special effect at ETG_TempPoint using ETG_DissapateModel
                          • Special Effect - Destroy (Last created special effect)
                      • Custom script: call RemoveLocation (udg_ETG_TempPoint)
                      • -------- Unit Cleaup --------
                      • Unit Group - Remove ETG_U from ETG_Group
                      • Unit Group - Remove ETG_U from ETG_Explodeables
                      • Special Effect - Destroy (Load 13 of ETG_UHandle in ETG_Hash)
                      • Hashtable - Clear all child hashtables of child ETG_UHandle in ETG_Hash
                      • Unit - Remove ETG_U from the game
                      • -------- Check unit group is empty --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Number of units in ETG_Group) Equal to 0
                        • Then - Actions
                          • Trigger - Turn off (This trigger)
                        • Else - Actions
                    • Else - Actions
                      • -------- Spread Delay --------
                      • Set ETG_TempInteger = (Load 13 of ETG_UHandle from ETG_Hash)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • ETG_TempInteger Equal to ETG_GasSpreadSpeed
                          • (Load 14 of ETG_UHandle from ETG_Hash) Equal to 1
                          • (Load 10 of ETG_UHandle from ETG_Hash) Greater than 0.00
                        • Then - Actions
                          • -------- Spread Reconfiguration --------
                          • Hashtable - Save 0 as 13 of ETG_UHandle in ETG_Hash
                          • Hashtable - Save 0 as 14 of ETG_UHandle in ETG_Hash
                          • -------- Spread Setup --------
                          • Set ETG_TempPoint = (Position of ETG_U)
                          • Set ETG_TempReal = (Facing of ETG_U)
                          • Set ETG_TempPoint2 = (ETG_TempPoint offset by ETG_GasCloudAOE towards ETG_TempReal degrees)
                          • Set ETG_Angle = (Random real number between (ETG_TempReal - ETG_SpreadRandomiser) and (ETG_TempReal + ETG_SpreadRandomiser))
                          • Set ETG_TempU = (Load 1 of ETG_UHandle in ETG_Hash)
                          • -------- Duration of each Gas cloud --------
                          • Set ETG_RealCache[1] = (Load 4 of ETG_UHandle from ETG_Hash)
                          • -------- Poison Damage --------
                          • Set ETG_RealCache[2] = (Load 5 of ETG_UHandle from ETG_Hash)
                          • -------- Poison Duration --------
                          • Set ETG_RealCache[3] = (Load 6 of ETG_UHandle from ETG_Hash)
                          • -------- Burn Damage --------
                          • Set ETG_RealCache[4] = (Load 7 of ETG_UHandle from ETG_Hash)
                          • -------- Burn Duration --------
                          • Set ETG_RealCache[5] = (Load 8 of ETG_UHandle from ETG_Hash)
                          • -------- Explosion Damage --------
                          • Set ETG_RealCache[6] = (Load 9 of ETG_UHandle from ETG_Hash)
                          • -------- Amount of spreading Gas --------
                          • Set ETG_RealCache[7] = ((Load 10 of ETG_UHandle from ETG_Hash) - 1.00)
                          • -------- Create Gas --------
                          • Unit - Create 1 ETG_Dummy for (Owner of ETG_U) at ETG_TempPoint2 facing ETG_Angle degrees
                          • Set ETG_TempU2 = (Last created unit)
                          • Custom script: call RemoveLocation(udg_ETG_TempPoint2)
                          • Custom script: call RemoveLocation(udg_ETG_TempPoint)
                          • Custom script: set udg_ETG_UHandleC = GetHandleId(udg_ETG_TempU2)
                          • Special Effect - Create a special effect attached to the origin of ETG_TempU2 using ETG_GasModel
                          • -------- Original Casting Unit --------
                          • Hashtable - Save Handle OfETG_TempU as 1 of ETG_UHandleC in ETG_Hash
                          • -------- Stage ID --------
                          • Hashtable - Save 2 as 2 of ETG_UHandleC in ETG_Hash
                          • -------- Duration of each Gas cloud --------
                          • Hashtable - Save ETG_RealCache[1] as 4 of ETG_UHandleC in ETG_Hash
                          • -------- Poison Damage --------
                          • Hashtable - Save ETG_RealCache[2] as 5 of ETG_UHandleC in ETG_Hash
                          • -------- Poison Duration --------
                          • Hashtable - Save ETG_RealCache[3] as 6 of ETG_UHandleC in ETG_Hash
                          • -------- Burn Damage --------
                          • Hashtable - Save ETG_RealCache[4] as 7 of ETG_UHandleC in ETG_Hash
                          • -------- Burn Duration --------
                          • Hashtable - Save ETG_RealCache[5] as 8 of ETG_UHandleC in ETG_Hash
                          • -------- Explosion Damage --------
                          • Hashtable - Save ETG_RealCache[6] as 9 of ETG_UHandleC in ETG_Hash
                          • -------- Amount of spreading Gas --------
                          • Hashtable - Save ETG_RealCache[7] as 10 of ETG_UHandleC in ETG_Hash
                          • -------- Ignition setup --------
                          • Hashtable - Save False as 11 of ETG_UHandleC in ETG_Hash
                          • -------- Effect --------
                          • Hashtable - Save Handle Of(Last created special effect) as 12 of ETG_UHandleC in ETG_Hash
                          • -------- Spread delay --------
                          • Hashtable - Save 0 as 13 of ETG_UHandleC in ETG_Hash
                          • -------- Amount of spreads --------
                          • Hashtable - Save 1 as 14 of ETG_UHandleC in ETG_Hash
                          • -------- Gas setup --------
                          • Unit - Add a ETG_RealCache[1] second Generic expiration timer to ETG_TempU2
                          • Unit Group - Add ETG_TempU2 to ETG_Group
                          • Unit Group - Add ETG_TempU2 to ETG_Explodeables
                        • Else - Actions
                          • Hashtable - Save (ETG_TempInteger + 1) as 13 of ETG_UHandle in ETG_Hash
                      • -------- Poisoned Units setup --------
                      • Set ETG_TempPoint = (Position of ETG_U)
                      • Set ETG_TempGroup = (Units within ETG_GasCloudAOE of ETG_TempPoint)
                      • Set ETG_TempU2 = (Load 1 of ETG_UHandle in ETG_Hash)
                      • Set ETG_RealCache[0] = (Load 5 of ETG_UHandle from ETG_Hash)
                      • Set ETG_RealCache[1] = (Load 6 of ETG_UHandle from ETG_Hash)
                      • -------- Poison --------
                      • Unit Group - Pick every unit in ETG_TempGroup and do (Actions)
                        • Loop - Actions
                          • -------- Finding Targets --------
                          • Set ETG_TempU = (Picked unit)
                          • Custom script: set udg_ETG_UHandleC = GetHandleId(udg_ETG_TempU)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (ETG_TempU is Magic Immune) Equal to False
                              • (ETG_TempU is A structure) Equal to False
                              • (ETG_TempU is alive) Equal to True
                              • (ETG_TempU belongs to an enemy of (Owner of ETG_U)) Equal to True
                              • (ETG_TempU is A ground unit) Equal to True
                              • (Load 6 of ETG_UHandleC from ETG_Hash) Less than or equal to 0.00
                            • Then - Actions
                              • -------- Poison --------
                              • Special Effect - Destroy (Load 9 of ETG_UHandleC in ETG_Hash)
                              • Hashtable - Save Handle OfETG_TempU2 as 1 of ETG_UHandleC in ETG_Hash
                              • Hashtable - Save ETG_RealCache[0] as 5 of ETG_UHandleC in ETG_Hash
                              • Hashtable - Save ETG_RealCache[1] as 6 of ETG_UHandleC in ETG_Hash
                              • Hashtable - Save 3 as 2 of ETG_UHandleC in ETG_Hash
                              • Special Effect - Create a special effect attached to the chest of ETG_TempU using ETG_PoisonModel
                              • Hashtable - Save Handle Of(Last created special effect) as 9 of ETG_UHandleC in ETG_Hash
                              • Unit - Add ETG_BuffAbilityPoison to ETG_TempU
                              • Unit Group - Add ETG_TempU to ETG_Group
                            • Else - Actions
                      • Custom script: call DestroyGroup (udg_ETG_TempGroup)
                      • Custom script: call RemoveLocation (udg_ETG_TempPoint)
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • ETG_TempInteger Equal to 3
                    • Then - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (ETG_U is dead) Equal to True
                        • Then - Actions
                          • -------- Unit cleanup --------
                          • Special Effect - Destroy (Load 9 of ETG_UHandle in ETG_Hash)
                          • Special Effect - Destroy (Load 10 of ETG_UHandle in ETG_Hash)
                          • Unit Group - Remove ETG_U from ETG_Group
                          • Hashtable - Clear all child hashtables of child ETG_UHandle in ETG_Hash
                          • -------- Check if the unit group is empty --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Number of units in ETG_Group) Equal to 0
                            • Then - Actions
                              • Trigger - Turn off (This trigger)
                            • Else - Actions
                        • Else - Actions
                          • -------- Burn/Poison Check --------
                          • Set ETG_TempU2 = (Load 1 of ETG_UHandle in ETG_Hash)
                          • Set ETG_RealCache[1] = (Load 6 of ETG_UHandle from ETG_Hash)
                          • Set ETG_RealCache[3] = (Load 8 of ETG_UHandle from ETG_Hash)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • Or - Any (Conditions) are true
                                • Conditions
                                  • ETG_RealCache[1] Greater than 0.00
                                  • ETG_RealCache[3] Greater than 0.00
                            • Then - Actions
                              • -------- Poison --------
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • ETG_RealCache[1] Greater than 0.00
                                • Then - Actions
                                  • Set ETG_RealCache[0] = (Load 5 of ETG_UHandle from ETG_Hash)
                                  • Unit - Cause ETG_TempU2 to damage ETG_U, dealing ETG_RealCache[0] damage of attack type Spells and damage type Normal
                                  • Hashtable - Save (ETG_RealCache[1] - 1.00) as 6 of ETG_UHandle in ETG_Hash
                                • Else - Actions
                              • -------- Burn --------
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • ETG_RealCache[3] Greater than 0.00
                                • Then - Actions
                                  • Set ETG_RealCache[2] = (Load 7 of ETG_UHandle from ETG_Hash)
                                  • Unit - Cause ETG_TempU2 to damage ETG_U, dealing ETG_RealCache[2] damage of attack type Spells and damage type Normal
                                  • Hashtable - Save (ETG_RealCache[3] - 1.00) as 8 of ETG_UHandle in ETG_Hash
                                • Else - Actions
                            • Else - Actions
                              • -------- Unit Cleanup --------
                              • Special Effect - Destroy (Load 9 of ETG_UHandle in ETG_Hash)
                              • Special Effect - Destroy (Load 10 of ETG_UHandle in ETG_Hash)
                              • Unit - Remove ETG_BuffAbilityPoison from ETG_U
                              • Unit - Remove ETG_BuffAbilityBurn from ETG_U
                              • Unit Group - Remove ETG_U from ETG_Group
                              • Hashtable - Clear all child hashtables of child ETG_UHandle in ETG_Hash
                              • -------- Check unit group is empty --------
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • (Number of units in ETG_Group) Equal to 0
                                • Then - Actions
                                  • Trigger - Turn off (This trigger)
                                • Else - Actions
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • ETG_TempInteger Equal to 4
                        • Then - Actions
                          • -------- Movement --------
                          • Custom script: set udg_ETG_TempX = GetUnitX(udg_ETG_U)
                          • Custom script: set udg_ETG_TempY = GetUnitY(udg_ETG_U)
                          • Custom script: set udg_ETG_Angle = (GetUnitFacing(udg_ETG_U) * bj_DEGTORAD)
                          • Custom script: call SetUnitX(udg_ETG_U, udg_ETG_TempX + udg_ETG_GasSpeed * Cos(udg_ETG_Angle))
                          • Custom script: call SetUnitY(udg_ETG_U, udg_ETG_TempY + udg_ETG_GasSpeed * Sin(udg_ETG_Angle))
                          • -------- ------ --------
                          • -------- Fly Height --------
                          • Set ETG_RealCache[1] = (Load 11 of ETG_UHandle from ETG_Hash)
                          • Set ETG_RealCache[2] = (Load 13 of ETG_UHandle from ETG_Hash)
                          • Set ETG_RealCache[3] = ((Load 12 of ETG_UHandle from ETG_Hash) + ETG_GasSpeed)
                          • Hashtable - Save ETG_RealCache[3] as 12 of ETG_UHandle in ETG_Hash
                          • Set ETG_RealCache[4] = (((4.00 x ETG_RealCache[2]) / ETG_RealCache[1]) x ((ETG_RealCache[3] / ETG_RealCache[1]) x (ETG_RealCache[1] - ETG_RealCache[3])))
                          • Animation - Change ETG_U flying height to ETG_RealCache[4] at 0.00
                          • -------- ------ --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • ETG_RealCache[4] Less than 0.00
                            • Then - Actions
                              • -------- Landing --------
                              • Set ETG_TempPoint = (Position of ETG_U)
                              • Special Effect - Create a special effect at ETG_TempPoint using ETG_ExplosionModel
                              • Special Effect - Destroy (Last created special effect)
                              • -------- Explosion Setup --------
                              • Set ETG_RealCache[5] = (Load 6 of ETG_UHandle from ETG_Hash)
                              • Set ETG_TempGroup = (Units within ETG_RealCache[5] of ETG_TempPoint)
                              • Set ETG_TempU2 = (Load 1 of ETG_UHandle in ETG_Hash)
                              • Set ETG_RealCache[0] = (Load 7 of ETG_UHandle from ETG_Hash)
                              • Set ETG_RealCache[1] = (Load 8 of ETG_UHandle from ETG_Hash)
                              • -------- Targets --------
                              • Unit Group - Pick every unit in ETG_TempGroup and do (Actions)
                                • Loop - Actions
                                  • -------- Finding Targets --------
                                  • Set ETG_TempU = (Picked unit)
                                  • Custom script: set udg_ETG_UHandleC = GetHandleId(udg_ETG_TempU)
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • (ETG_TempU is Magic Immune) Equal to False
                                      • (ETG_TempU is A structure) Equal to False
                                      • (ETG_TempU is alive) Equal to True
                                      • (ETG_TempU belongs to an enemy of (Owner of ETG_U)) Equal to True
                                      • (ETG_TempU is A ground unit) Equal to True
                                      • (Load 8 of ETG_UHandleC from ETG_Hash) Less than or equal to 0.00
                                    • Then - Actions
                                      • -------- Burn setup --------
                                      • Special Effect - Destroy (Load 10 of ETG_UHandleC in ETG_Hash)
                                      • Hashtable - Save Handle OfETG_TempU2 as 1 of ETG_UHandleC in ETG_Hash
                                      • Hashtable - Save ETG_RealCache[0] as 7 of ETG_UHandleC in ETG_Hash
                                      • Hashtable - Save ETG_RealCache[1] as 8 of ETG_UHandleC in ETG_Hash
                                      • Hashtable - Save 3 as 2 of ETG_UHandleC in ETG_Hash
                                      • -------- Damage --------
                                      • Unit - Cause ETG_TempU2 to damage ETG_TempU, dealing (Load 9 of ETG_UHandle from ETG_Hash) damage of attack type Spells and damage type Normal
                                      • -------- Burn --------
                                      • Special Effect - Create a special effect attached to the chest of ETG_TempU using ETG_FireModel
                                      • Hashtable - Save Handle Of(Last created special effect) as 10 of ETG_UHandleC in ETG_Hash
                                      • Unit - Add ETG_BuffAbilityBurn to ETG_TempU
                                      • Unit Group - Add ETG_TempU to ETG_Group
                                    • Else - Actions
                              • -------- Ignited Gas --------
                              • Unit Group - Pick every unit in ETG_Explodeables and do (Actions)
                                • Loop - Actions
                                  • Set ETG_TempU = (Picked unit)
                                  • Set ETG_TempPoint2 = (Position of ETG_TempU)
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • (Distance between ETG_TempPoint and ETG_TempPoint2) Less than or equal to ETG_RealCache[5]
                                    • Then - Actions
                                      • -------- Get Ignition Setup --------
                                      • Custom script: set udg_ETG_UHandleC = GetHandleId(udg_ETG_TempU)
                                      • Unit - Add a 0.10 second Generic expiration timer to ETG_TempU
                                      • Hashtable - Save True as 11 of ETG_UHandleC in ETG_Hash
                                    • Else - Actions
                                  • Custom script: call RemoveLocation (udg_ETG_TempPoint2)
                              • -------- Unit Cleanup --------
                              • Custom script: call DestroyGroup (udg_ETG_TempGroup)
                              • Custom script: call RemoveLocation (udg_ETG_TempPoint)
                              • Special Effect - Destroy (Load 14 of ETG_UHandle in ETG_Hash)
                              • Unit - Kill ETG_U
                              • Unit Group - Remove ETG_U from ETG_Group
                              • Hashtable - Clear all child hashtables of child ETG_UHandle in ETG_Hash
                              • -------- Checks if group is empty --------
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • (Number of units in ETG_Group) Equal to 0
                                • Then - Actions
                                  • Trigger - Turn off (This trigger)
                                • Else - Actions
                            • Else - Actions
                        • Else - Actions



-=V1.00=-
- Initial Upload
- Expect errors
-=V1.01=-
- Added Buffs (Now in Config)
- Changed Icon for Toxic Gas
- Added fly height to the Gas projectile (Also in Config)



To allow your other spells to ignite the gas you need to Copy and paste the following trigger section into your spell when you want it to ignite the gas:

  • Unit Group - Pick every unit in ETG_Explodeables and do (Actions)
    • Loop - Actions
      • Set ETG_TempU = (Picked unit)
      • Set ETG_TempPoint2 = (Position of ETG_TempU)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Distance between ETG_TempPoint and ETG_TempPoint2) Less than or equal to ETG_RealCache[5]
        • Then - Actions
          • -------- Get Ignition Setup --------
          • Custom script: set udg_ETG_UHandleC = GetHandleId(udg_ETG_TempU)
          • Unit - Add a 0.10 second Generic expiration timer to ETG_TempU
          • Hashtable - Save True as 11 of ETG_UHandleC in ETG_Hash
        • Else - Actions
Please note that you /will/ need to set ETG_RealCache[5] to the AOE of the spell or rather the ignition range that you want on your spell


Enjoy and give credits

Keywords:
Gas, Toxic, Explosive, Ignite, Ignition, Chain, Explode, How to train your dragon, Fuse, Poison, Corrosive, Fire, Flame.
Contents

Explosive Toxic Gas (Map)

Reviews
Approved Good job with the spell. Triggering is fine. The idea of the fireball exploding the gas is quite original and it is executed in good fashion. One thing I'd like you to improve is to lenghten the cast animation time of Poison Gas.

Moderator

M

Moderator

Reviewed by Maker, Explosive Toxic Gas V1.01, 17th Feb 2012

Approved

Good job with the spell. Triggering is fine.
The idea of the fireball exploding the gas is quite original and it is executed in good fashion.

One thing I'd like you to improve is to lenghten the cast animation time of Poison Gas.
 
Level 10
Joined
Aug 21, 2010
Messages
316
That's a tad frustrating. As far as I know there's no trigger for it. I've always used dummy units to cast "buff" spells.

No one said that there is a function for it

My old buff system!!!


JASS:
function runApply takes unit target,integer abiid returns nothing
             call UnitAddAbility(target,abiid)
             call UnitMakeAbilityPermanent(target,true,abiid)
          endfunction

          function runRemove takes unit target returns nothing
             local integer id=GetHandleId(GetExpiredTimer())
             call UnitRemoveAbility(target,GetIntData("bs.status.ability.id",id))
             call UnitRemoveAbility(target,GetIntData("bs.status.buff.id",id))
             if HaveHandle("bs.status.effect.stacking",id)then
                call DestroyEffect(GetEffectData("bs.status.effect.stacking",id))
             endif 
          endfunction
          
          function runBuffTimeOut takes nothing returns nothing
             local timer t=GetExpiredTimer()
             local integer id=GetHandleId(t)
             local real tx
             local real ty
             local unit target=GetUnitData("bs.status.target",id)
             local real duration=GetRealData("bs.status.duration",id)
             local real timeout=GetRealData("bs.status.timeout",id)
             local real break=GetRealData("bs.status.break",id)
             local integer abiid=GetIntData("bs.status.ability.id",id)
             local integer i=GetIntData("bs.status.counter",id)
             local string attachpoint=GetStrData("bs.status.attachPoint",id)
             call SetRealData(break+timeout,"bs.status.break",id)
             if break>=duration or GetWidgetLife(target)<=.405 then
                   call runRemove(target)                   
                   call FlushLocalTimer(t)
             endif  
             if GetBooleanData("bs.status.effect.non.stacking",id)then
                call DestroyEffect(AddSpecialEffectTarget(GetAbilityEffectById(abiid,EFFECT_TYPE_MISSILE,i),target,attachpoint))
             else
                set tx=GetUnitX(target)
                set ty=GetUnitY(target)
                call DestroyEffect(AddSpecialEffectLoc(GetAbilityEffectById(abiid,EFFECT_TYPE_MISSILE,i),Location(tx,ty)))   
             endif
             set t=null
             set target=null
          endfunction
           
          function runAddBuff takes unit target,integer abiid,integer buffid,integer i,string attachPoint,real duration,real timeout,boolean onEffect returns unit 
             local timer t
             local integer id
             local effect fx
             if target==null or abiid<=0 or buffid<=0 or timeout<=0. or duration<=0. then
                 call BJDebugMsg("Error: Invalid buff creation parameters")
             else
                 set t=CreateTimer()
                 set id=GetHandleId(t)
                 call runApply(target,abiid)
                 call SetAgentData(target,"bs.status.target",id)
                 call SetRealData(timeout,"bs.status.timeout",id)
                 call SetIntData(abiid,"bs.status.ability.id",id)
                 call SetIntData(buffid,"bs.status.buff.id",id)
                 call SetIntData(i,"bs.status.counter",buffid)
                 call SetRealData(0.,"bs.status.break",id)
                 call SetRealData(duration,"bs.status.duration",id)
                 call SetStrData(attachPoint,"bs.status.attachPoint",id)
                 if onEffect then 
                    call SetBooleanData(onEffect,"bs.status.effect.non.stacking",id)
                 elseif onEffect==null then
                    set fx=AddSpecialEffectTarget(GetAbilityEffectById(abiid,EFFECT_TYPE_MISSILE,i),target,attachPoint)
                    call SetAgentData(fx,"bs.status.effect.stacking",id) 
                    set fx=null         
                 endif
             endif
             call TimerStart(t,timeout,true,function runBuffTimeOut)
             set t=null
             return target
          endfunction
 
Level 16
Joined
Aug 7, 2009
Messages
1,403
Actually it is. Without buff it's like damage coming out of nowhere, you don't even know what's going on. Creating one more ability and a buff takes like a minute (for me, at least), so does copying to your map when you're implementing the spell. Plus, you can add some extra text into the buff tooltip.

I always add buffs to everything on my map, that way the players will always be informed about the things going onin the background.
 
Actually it's be 2 Abilities, 2 Buffs, because there's Poison as well as the burning effect, I thought they'd be relatively self explanatory - Considering it's rather visual and you can see what's happening very easily to your units, the only hard to get part is how long it'll last for - and buffs never say that, maybe it's just my personal preference to not *Shrugs*
 
Level 16
Joined
Mar 3, 2006
Messages
1,564
Just create a dummy ability based on Slow Aura, target "Self" and add the buff. Then just add that dummy ability to the unit and remove it when needed. It's that darn, simple, you don't even need a dummy caster or anything else.

I guess this don't resemble the buff system by WarCraft. Remember that when a unit has a buff that is about to end it will dim and glow for seconds before it goes off, if you are looking for perfection, then using a dummy caster is better. (That's my POV)
 
Level 16
Joined
Aug 7, 2009
Messages
1,403
True, but keep in mind that buffs based on the same ability overwrite each other - it's quite sad, but true, or at least those few buffs that I based on casted abilities did so. That's why I started using this slow aura based solution, it works perfectly, even tho' I have ~80 custom buffs.
 
Level 3
Joined
Feb 19, 2012
Messages
22
i love this spell so much, the idea was brilliant and the eye candy on it is amazing, the only suggestion i might make is have the explosion make trees be destroyed as well, because it looks a bit silly when explosions go through trees 5/5
 
Top