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!
Played around with the idea of "how configurable can you make a relatively simple spell" the result being this, Arcane Drain, not much to say about it other than being relatively sfx-spammy (I reduced it a lot though) but it's a fun spell
- More configurable than anybody would care to use
- Documentation
- Fun to play around with
- Comes with 3 "default" themes (can be added/modified at will ofc)
- Draining spell (who doesn't like them?)
- Import instructions
Disperses draining fields randomly in the general direction of the target area, draining fields will absorb life and mana from the target and return the health and mana to the caster. The form the spell takes depends on its level.
Level 1 - Drains 25 health and 12 mana per second.
Level 2 - Drains 30 health and 15 mana per second.
Level 3 - Drains 35 health and 17 mana per second,
Each configuration variable controls which features you want to use in your spells
[0] - True: Have starting projectile/False: Instantly create draining areas
[1] - True: Drain Health/False: Don't drain health
[2] - True: Have projectiles "deliver" health to caster/False: Health immediately given to caster
[3] - True: Drain Mana/False: Don't drain mana
[4] - True: Have projectiles "deliver" mana to caster/False: Mana immediately given to caster
[5] - True: Uses "True" projectile speed (fixed value)/False: Projectile speed dependent on distance (all will land at the same time)
[6] - True: Changes "theme" of spell upon levelup/False: uses "Default" theme (set directly below)
-------------------
There are conditions which effect unit targetting, they are explained straightforwardly in the config
[7]
[8]
[9]
[10]
[11]
--------------------
[12] - True: Will drain all mana from target until the hit 0/False: Will drain amount of mana only when the total amount is available (i.e. mana must at least equal normal drain amount)
[13] - True: Shows Healing SFX/False: Does not show Healing SFX
[14] - True: Shows Mana SFX/False: Does not show Mana SFX
[15] - True: Shows Mana being drained SFX/False: Does not show Mana being drained SFX
[16] - True: Shows Health being drained SFX/False: Does not show Health being drained SFX
[17] - True: Will pick a random theme (overrides other theme options)
Arcane Drain Configuration
Events
Map initialization
Conditions
Actions
-------- -------- --------
-------- Determines the Parts of the spell used --------
-------- Launch Projectile --------
Set AD_Conditions[0] = True
-------- Drain Health --------
Set AD_Conditions[1] = True
-------- Drain Health Projectile --------
Set AD_Conditions[2] = True
-------- Drain Mana --------
Set AD_Conditions[3] = True
-------- Drain Mana Projectile --------
Set AD_Conditions[4] = True
-------- ProjectileSpeed/Incoming Time --------
Set AD_Conditions[5] = False
-------- Cycle Themes --------
Set AD_Conditions[6] = False
-------- If cycle themes is set to False, this determines which Theme will be used --------
Set AD_DefaultTheme = 1
Set AD_SpellsThemeCount = 3
-------- Determines the targets available for the spell --------
-------- Target is alive --------
Set AD_Conditions[7] = True
-------- Target is Magic Immune --------
Set AD_Conditions[8] = False
-------- Target is Structure --------
Set AD_Conditions[9] = False
-------- Target is Ground unit --------
Set AD_Conditions[10] = True
-------- Target is Belongs to an enemy --------
Set AD_Conditions[11] = True
-------- Full Mana Drain --------
Set AD_Conditions[12] = True
-------- Other conditions --------
-------- Healing SFX --------
Set AD_Conditions[13] = True
-------- Mana SFX --------
Set AD_Conditions[14] = True
-------- Drain Mana SFX --------
Set AD_Conditions[15] = True
-------- Drain Health SFX --------
Set AD_Conditions[16] = True
-------- Randomise Theme --------
Set AD_Conditions[17] = True
-------- Controls amount of SFX --------
Set AD_SFXWaitTime = 15.00
-------- Controls the minimum spread out distance of the drain areas --------
Set AD_MinDistanceSpread = 90.00
Set AD_RecieveSFXLimiter = 3
-------- Determines the Projectile Movement --------
-------- Launch Projectile --------
Set AD_LaunchArcMultiplyerBase = 0.30
Set AD_LaunchArcMultiplyerPL = 0.00
Set AD_LaunchSpeedBase = 4.00
Set AD_LaunchSpeedPerLevel = 1.00
Set AD_LaunchIncomingTimeBase = 2.50
Set AD_LaunchIncomingTimePerLevel = -0.50
-------- Heal Projectile --------
Set AD_HealthArcMultiplyerBase = 0.45
Set AD_HealthArcMultiplyerPL = 0.00
Set AD_HealSpeedBase = 5.00
Set AD_HealSpeedPerLevel = 0.00
Set AD_HealthIncomingTimeBase = 2.00
Set AD_HealthIncomingTimePerLevel = -0.25
-------- Mana Projectile --------
Set AD_ManaArcMultiplyerBase = 0.50
Set AD_ManaArcMultiplyerPL = 0.00
Set AD_ManaSpeedBase = 5.00
Set AD_ManaSpeedPerLevel = 0.00
Set AD_ManaIncomingTimeBase = 2.00
Set AD_ManaIncomingTimePerLevel = -0.25
-------- Determines the area that the Drain Areas will scatter across --------
Set AD_AoeBase = 200.00
Set AD_AoePerLevel = 50.00
-------- Determines how much space each Drain Area covers --------
Set AD_DrainAreaAOEBase = 120.00
Set AD_DrainAreaAOEPerLevel = 0.00
-------- Determines the amount of Drain areas created --------
Set AD_DrainAreaCountBase = 4
Set AD_DrainAreaCountPerLevel = 2
-------- Determines how much Health damage a unit takes per second --------
Set AD_HealthDamagePerSecBase = 20.00
Set AD_HealthDamagePerSecPerLevel = 5.00
-------- Determines how much Mana damage a unit takes per second --------
Set AD_ManaDamagePerSecBase = 10.00
Set AD_ManaDamagePerSecPerLevel = 2.50
-------- Determines how long the drain area will last (seconds) --------
-------- When changing this, remember to modify the object data spell and increase the "follow through time" to these values +2 or 3 seconds (depending on method of movement) --------
-------- Otherwise the spell will end early --------
Set AD_DrainAreaDurationBase = 2.00
Set AD_DrainAreaDurationPerLevel = 3.00
-------- Determines the scaling of the SFX --------
-------- Determines the scaling of the Launch Projectiles --------
Set AD_EffectScalingLaunchBase = 100.00
Set AD_EffectScalingLaunchPL = 0.00
-------- Determines the scaling of the Drain Areas --------
Set AD_EffectScalingDrainAreaBase = 80.00
Set AD_EffectScalingDrainAreaPL = 0.00
-------- Determines the scaling of the Drained Health Projectiles --------
Set AD_EffectScalingHealthBase = 50.00
Set AD_EffectScalingHealthPL = 0.00
-------- Determines the scaling of the Drained Mana Projectiles --------
Set AD_EffectScalingManaBase = 50.00
Set AD_EffectScalingManaPL = 0.00
-------- Determines the unit model used as the Drain Area --------
Set AD_DrainAreaSFX[1] = Abilities\Spells\Other\Drain\ManaDrainTarget.mdl
Set AD_DrainAreaSFX[2] = Abilities\Spells\Orc\LiquidFire\Liquidfire.mdl
Set AD_DrainAreaSFX[3] = Abilities\Spells\NightElf\EntanglingRoots\EntanglingRootsTarget.mdl
-------- Determines the SFX used as the Launch Projectile --------
Set AD_LaunchSFX[1] = Abilities\Weapons\FrostWyrmMissile\FrostWyrmMissile.mdl
Set AD_LaunchSFX[2] = Abilities\Weapons\RedDragonBreath\RedDragonMissile.mdl
Set AD_LaunchSFX[3] = Abilities\Weapons\GreenDragonMissile\GreenDragonMissile.mdl
-------- Determines the SFX used as the Drained Health Projectile --------
Set AD_HealthDrainSFX[1] = Abilities\Weapons\ZigguratMissile\ZigguratMissile.mdl
Set AD_HealthDrainSFX[2] = Abilities\Weapons\PhoenixMissile\Phoenix_Missile.mdl
Set AD_HealthDrainSFX[3] = Abilities\Weapons\IllidanMissile\IllidanMissile.mdl
-------- Determines the unit model used as the Drained Mana Projectile --------
Set AD_ManaDrainSFX[1] = Abilities\Weapons\FarseerMissile\FarseerMissile.mdl
Set AD_ManaDrainSFX[2] = Abilities\Weapons\LavaSpawnMissile\LavaSpawnMissile.mdl
Set AD_ManaDrainSFX[3] = Units\Human\HeroBloodElf\BloodElfBall.mdl
-------- Determines the unit model used as the Healing effect --------
Set AD_HealedLifeSFX[1] = Abilities\Spells\Items\ResourceItems\ResourceEffectTarget.mdl
Set AD_HealedLifeSFX[2] = Abilities\Spells\Orc\FeralSpirit\feralspirittarget.mdl
Set AD_HealedLifeSFX[3] = Abilities\Spells\Undead\DeathCoil\DeathCoilSpecialArt.mdl
-------- Determines the unit model used as the Healing effect for mana --------
Set AD_HealedManaSFX[1] = Abilities\Spells\Undead\FrostArmor\FrostArmorDamage.mdl
Set AD_HealedManaSFX[2] = Abilities\Spells\Other\Incinerate\FireLordDeathExplode.mdl
Set AD_HealedManaSFX[3] = Abilities\Spells\Undead\Sleep\SleepSpecialArt.mdl
-------- Determines the unit model used as the Drained effect --------
Set AD_DrainedHealthSFX[1] = Abilities\Spells\Other\Stampede\StampedeMissileDeath.mdl
Set AD_DrainedHealthSFX[2] = Abilities\Spells\Other\Incinerate\IncinerateBuff.mdl
Set AD_DrainedHealthSFX[3] = Abilities\Spells\NightElf\Immolation\ImmolationDamage.mdl
-------- Determines the unit model used as the Drained effect for mana --------
Set AD_DrainedManaSFX[1] = Abilities\Spells\Items\SpellShieldAmulet\SpellShieldCaster.mdl
Set AD_DrainedManaSFX[2] = Abilities\Spells\Other\Incinerate\FireLordDeathExplode.mdl
Set AD_DrainedManaSFX[3] = Abilities\Spells\Undead\CarrionSwarm\CarrionSwarmDamage.mdl
-------- Determines the unit model used as the effect for ending the spell --------
Set AD_EndSFX[1] = Abilities\Spells\Human\DispelMagic\DispelMagicTarget.mdl
Set AD_EndSFX[2] = Abilities\Spells\Other\Incinerate\FireLordDeathExplode.mdl
Set AD_EndSFX[3] = Abilities\Spells\Undead\AnimateDead\AnimateDeadTarget.mdl
-------- Determines the unit model use when the effect is cancelled early --------
Set AD_CancelledSFX[1] = Abilities\Spells\Human\DispelMagic\DispelMagicTarget.mdl
Set AD_CancelledSFX[2] = Abilities\Spells\Other\Incinerate\FireLordDeathExplode.mdl
Set AD_CancelledSFX[3] = Abilities\Spells\Undead\AnimateDead\AnimateDeadTarget.mdl
-------- Determines the ability used as a dummy --------
Set AD_Spell = Arcane Drain
-------- Determines the order used to check that the spell is being cast (should match ability used) --------
Set AD_Order = channel
-------- Determines the Dummy used to attach all the effects to --------
Set AD_DummyType = Arcane Drain
-------- -------- --------
-------- Determines the Speed of the loop trigger --------
Set AD_TimerSpeed = 0.03
Trigger - Add to Arcane Drain Loop <gen> the event (Time - Every AD_TimerSpeed seconds of game time)
-------- -------- --------
Arcane Drain Activation
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to AD_Spell
Actions
Set AD_TempUnit2 = (Triggering unit)
Set AD_TempPlayer = (Owner of AD_TempUnit2)
Set AD_TempInteger2 = (Level of AD_Spell for AD_TempUnit2)
Set AD_TempReal = (Real(AD_TempInteger2))
Set AD_TempInteger = (AD_DrainAreaCountBase + (AD_DrainAreaCountPerLevel x (Integer(AD_TempReal))))
Set AD_TempPoint2 = (Target point of ability being cast)
-------- Identifies if you want the theme to change upon level up, randomly, or not at all --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[17] Equal to True
Then - Actions
Set AD_TempInteger2 = (Random integer number between 1 and AD_SpellsThemeCount)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[6] Equal to False
Then - Actions
Set AD_TempInteger2 = AD_DefaultTheme
Else - Actions
-------- Runs depending on if you want starting projectiles --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[0] Equal to True
Then - Actions
-------- Projectile Launch --------
Set AD_TempPoint = (Position of AD_TempUnit2)
For each (Integer AD_Index) from 1 to AD_TempInteger, do (Actions)
Loop - Actions
Set AD_MaxIndex = (AD_MaxIndex + 1)
Set AD_TempPoint3 = (AD_TempPoint2 offset by (Random real number between AD_MinDistanceSpread and (AD_AoeBase + (AD_AoePerLevel x AD_TempReal))) towards (Random angle) degrees)
Unit - Create 1 AD_DummyType for AD_TempPlayer at AD_TempPoint facing (Angle from AD_TempPoint to AD_TempPoint3) degrees
Set AD_TempUnit = (Last created unit)
Special Effect - Create a special effect attached to the origin of AD_TempUnit using AD_LaunchSFX[AD_TempInteger2]
Animation - Change AD_TempUnit's size to ((AD_EffectScalingLaunchBase + (AD_EffectScalingLaunchPL x AD_TempReal))%, 0.00%, 0.00%) of its original size
Set AD_OriginalCaster[AD_MaxIndex] = AD_TempUnit2
Set AD_SpecialEffect[AD_MaxIndex] = (Last created special effect)
Set AD_DrainAOE[AD_MaxIndex] = (AD_DrainAreaAOEBase + (AD_DrainAreaAOEPerLevel x AD_TempReal))
Set AD_HealthDrain[AD_MaxIndex] = (((AD_HealthDamagePerSecBase + (AD_HealthDamagePerSecPerLevel x AD_TempReal)) x AD_TimerSpeed) x AD_SFXWaitTime)
Set AD_ManaDrain[AD_MaxIndex] = (((AD_ManaDamagePerSecBase + (AD_ManaDamagePerSecPerLevel x AD_TempReal)) x AD_TimerSpeed) x AD_SFXWaitTime)
Set AD_Duration[AD_MaxIndex] = (AD_DrainAreaDurationBase + (AD_DrainAreaDurationPerLevel x AD_TempReal))
Set AD_AbilityLevel[AD_MaxIndex] = AD_TempReal
Set AD_CurrentDistance[AD_MaxIndex] = 0.00
Set AD_Theme[AD_MaxIndex] = AD_TempInteger2
Custom script: set udg_AD_CasterX[udg_AD_MaxIndex] = GetUnitX(udg_AD_TempUnit2)
Custom script: set udg_AD_CasterY[udg_AD_MaxIndex] = GetUnitY(udg_AD_TempUnit2)
Set AD_MaxDistance[AD_MaxIndex] = (Distance between AD_TempPoint and AD_TempPoint3)
Set AD_MaxHeight[AD_MaxIndex] = (AD_MaxDistance[AD_MaxIndex] x (AD_LaunchArcMultiplyerBase + (AD_LaunchArcMultiplyerPL x AD_TempReal)))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[5] Equal to True
Then - Actions
Set AD_LaunchSpeed[AD_MaxIndex] = (AD_LaunchSpeedBase + (AD_LaunchSpeedPerLevel x AD_TempReal))
Else - Actions
Set AD_LaunchSpeed[AD_MaxIndex] = ((AD_MaxDistance[AD_MaxIndex] x 0.03) / (AD_LaunchIncomingTimeBase + (AD_LaunchIncomingTimePerLevel x AD_TempReal)))
For each (Integer AD_Index) from 1 to AD_TempInteger, do (Actions)
Loop - Actions
Set AD_MaxIndex = (AD_MaxIndex + 1)
Set AD_TempPoint3 = (AD_TempPoint2 offset by (AD_AoeBase + (AD_AoePerLevel x AD_TempReal)) towards (Random angle) degrees)
Unit - Create 1 AD_DummyType for AD_TempPlayer at AD_TempPoint3 facing (Angle from AD_TempPoint2 to AD_TempPoint3) degrees
Set AD_TempUnit = (Last created unit)
Unit - Add a (AD_DrainAreaDurationBase + (AD_DrainAreaDurationPerLevel x AD_TempReal)) second Generic expiration timer to AD_TempUnit
Unit - Pause AD_TempUnit
Special Effect - Create a special effect attached to the origin of AD_TempUnit using AD_DrainAreaSFX[AD_TempInteger2]
Animation - Change AD_TempUnit's size to ((AD_EffectScalingDrainAreaBase + (AD_EffectScalingDrainAreaPL x AD_TempReal))%, 0.00%, 0.00%) of its original size
Set AD_OriginalCaster[AD_MaxIndex] = AD_TempUnit2
Set AD_SpecialEffect[AD_MaxIndex] = (Last created special effect)
Set AD_DrainAOE[AD_MaxIndex] = (AD_DrainAreaAOEBase + (AD_DrainAreaAOEPerLevel x AD_TempReal))
Set AD_AbilityLevel[AD_MaxIndex] = AD_TempReal
Set AD_HealthDrain[AD_MaxIndex] = (((AD_HealthDamagePerSecBase + (AD_HealthDamagePerSecPerLevel x AD_TempReal)) x AD_TimerSpeed) x AD_SFXWaitTime)
Set AD_ManaDrain[AD_MaxIndex] = (((AD_ManaDamagePerSecBase + (AD_ManaDamagePerSecPerLevel x AD_TempReal)) x AD_TimerSpeed) x AD_SFXWaitTime)
Set AD_CurrentDistance[AD_Index] = (AD_CurrentDistance[AD_Index] + AD_LaunchSpeed[AD_Index])
Animation - Change AD_TempUnit flying height to ((((4.00 x AD_MaxHeight[AD_Index]) / AD_MaxDistance[AD_Index]) x (AD_CurrentDistance[AD_Index] / AD_MaxDistance[AD_Index])) x (AD_MaxDistance[AD_Index] - AD_CurrentDistance[AD_Index])) at 0.00
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_CurrentDistance[AD_Index] Greater than or equal to AD_MaxDistance[AD_Index]
Then - Actions
Special Effect - Destroy AD_SpecialEffect[AD_Index]
Special Effect - Create a special effect attached to the origin of AD_TempUnit using AD_DrainAreaSFX[AD_Theme[AD_Index]]
Set AD_SpecialEffect[AD_Index] = (Last created special effect)
Animation - Change AD_TempUnit's size to ((AD_EffectScalingDrainAreaBase + (AD_EffectScalingDrainAreaPL x AD_TempReal))%, 0.00%, 0.00%) of its original size
Unit - Add a AD_Duration[AD_Index] second Generic expiration timer to AD_TempUnit
Set AD_StageID[AD_Index] = 2
Else - Actions
Else - Actions
-------- Draining control --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_StageID[AD_Index] Equal to 2
Then - Actions
Set AD_TempPoint = (Position of AD_TempUnit)
Set AD_TempGroup = (Units within AD_DrainAOE[AD_Index] of AD_TempPoint)
Unit Group - Pick every unit in AD_TempGroup and do (Actions)
Loop - Actions
Set AD_TempUnit2 = (Picked unit)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(AD_TempUnit2 is alive) Equal to AD_Conditions[7]
(AD_TempUnit2 is Magic Immune) Equal to AD_Conditions[8]
(AD_TempUnit2 is A structure) Equal to AD_Conditions[9]
(AD_TempUnit2 is A ground unit) Equal to AD_Conditions[10]
(AD_TempUnit2 belongs to an enemy of (Owner of AD_OriginalCaster[AD_Index])) Equal to AD_Conditions[11]
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[1] Equal to True
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_SFXCurrentWaitTimeHpHeal[AD_Index] Greater than or equal to AD_SFXWaitTime
Then - Actions
Set AD_TempReal = (Life of AD_TempUnit2)
Unit - Cause AD_OriginalCaster[AD_Index] to damage AD_TempUnit2, dealing AD_HealthDrain[AD_Index] damage of attack type Spells and damage type Normal
Set AD_TempReal2 = (Life of AD_TempUnit2)
Set AD_CarriedHealth[AD_Index] = (AD_TempReal - AD_TempReal2)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[16] Equal to True
Then - Actions
Special Effect - Create a special effect attached to the chest of AD_TempUnit2 using AD_DrainedHealthSFX[AD_Theme[AD_Index]]
Special Effect - Destroy (Last created special effect)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[2] Equal to True
Then - Actions
-------- Health Segment creation --------
Set AD_MaxIndex = (AD_MaxIndex + 1)
Set AD_TempPoint2 = (Position of AD_OriginalCaster[AD_Index])
Unit - Create 1 AD_DummyType for AD_TempPlayer at AD_TempPoint facing (Angle from AD_TempPoint to AD_TempPoint2) degrees
Set AD_TempUnit = (Last created unit)
Set AD_TempReal = AD_AbilityLevel[AD_Index]
Special Effect - Create a special effect attached to the origin of AD_TempUnit using AD_HealthDrainSFX[AD_Theme[AD_Index]]
Animation - Change AD_TempUnit's size to ((AD_EffectScalingHealthBase + (AD_EffectScalingHealthPL x AD_TempReal))%, 0.00%, 0.00%) of its original size
Set AD_OriginalCaster[AD_MaxIndex] = AD_OriginalCaster[AD_Index]
Set AD_SpecialEffect[AD_MaxIndex] = (Last created special effect)
Set AD_CarriedHealth[AD_MaxIndex] = AD_CarriedHealth[AD_Index]
Set AD_CarriedMana[AD_MaxIndex] = 0.00
Set AD_CurrentDistance[AD_MaxIndex] = 0.00
Set AD_Theme[AD_MaxIndex] = AD_TempInteger2
Set AD_MaxDistance[AD_MaxIndex] = (Distance between AD_TempPoint and AD_TempPoint2)
Set AD_MaxHeight[AD_MaxIndex] = (AD_MaxDistance[AD_MaxIndex] x (AD_HealthArcMultiplyerBase + (AD_HealthArcMultiplyerPL x AD_TempReal)))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[5] Equal to True
Then - Actions
Set AD_HealthSpeed[AD_MaxIndex] = (AD_HealSpeedBase + (AD_HealSpeedPerLevel x AD_TempReal))
Else - Actions
Set AD_HealthSpeed[AD_MaxIndex] = ((AD_MaxDistance[AD_MaxIndex] x AD_TimerSpeed) / (AD_HealthIncomingTimeBase + (AD_HealthIncomingTimePerLevel x AD_TempReal)))
Set AD_SFXLimiter = (Random integer number between 1 and AD_RecieveSFXLimiter)
Unit - Set life of AD_OriginalCaster[AD_Index] to ((Life of AD_OriginalCaster[AD_Index]) + AD_CarriedHealth[AD_Index])
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[13] Equal to True
AD_SFXLimiter Equal to 1
Then - Actions
Special Effect - Create a special effect attached to the origin of AD_OriginalCaster[AD_Index] using AD_HealedLifeSFX[AD_Theme[AD_Index]]
Special Effect - Destroy (Last created special effect)
Else - Actions
Set AD_SFXCurrentWaitTimeHpHeal[AD_Index] = 0.00
Else - Actions
Set AD_SFXCurrentWaitTimeHpHeal[AD_Index] = (AD_SFXCurrentWaitTimeHpHeal[AD_Index] + 1.00)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[3] Equal to True
(Mana of AD_TempUnit2) Greater than 0.00
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_SFXCurrentWaitTimeManaHeal[AD_Index] Greater than or equal to AD_SFXWaitTime
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[12] Equal to False
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Mana of AD_TempUnit2) Greater than or equal to AD_ManaDrain[AD_Index]
Then - Actions
Unit - Set mana of AD_TempUnit2 to ((Mana of AD_TempUnit2) - AD_ManaDrain[AD_Index])
Set AD_CarriedMana[AD_Index] = AD_ManaDrain[AD_Index]
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[15] Equal to True
Then - Actions
Special Effect - Create a special effect attached to the chest of AD_TempUnit2 using AD_DrainedManaSFX[AD_Theme[AD_Index]]
Special Effect - Destroy (Last created special effect)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[4] Equal to True
Then - Actions
-------- Mana segment creation --------
Set AD_MaxIndex = (AD_MaxIndex + 1)
Set AD_TempPoint2 = (Position of AD_OriginalCaster[AD_Index])
Unit - Create 1 AD_DummyType for AD_TempPlayer at AD_TempPoint facing (Angle from AD_TempPoint to AD_TempPoint2) degrees
Set AD_TempUnit = (Last created unit)
Set AD_TempReal = AD_AbilityLevel[AD_Index]
Special Effect - Create a special effect attached to the origin of AD_TempUnit using AD_ManaDrainSFX[AD_Theme[AD_Index]]
Animation - Change AD_TempUnit's size to ((AD_EffectScalingManaBase + (AD_EffectScalingManaPL x AD_TempReal))%, 0.00%, 0.00%) of its original size
Set AD_OriginalCaster[AD_MaxIndex] = AD_OriginalCaster[AD_Index]
Set AD_SpecialEffect[AD_MaxIndex] = (Last created special effect)
Set AD_CarriedHealth[AD_MaxIndex] = 0.00
Set AD_CarriedMana[AD_MaxIndex] = AD_CarriedMana[AD_Index]
Set AD_CurrentDistance[AD_MaxIndex] = 0.00
Set AD_Theme[AD_MaxIndex] = AD_TempInteger2
Set AD_MaxDistance[AD_MaxIndex] = (Distance between AD_TempPoint and AD_TempPoint2)
Set AD_MaxHeight[AD_MaxIndex] = (AD_MaxDistance[AD_MaxIndex] x (AD_ManaArcMultiplyerBase + (AD_ManaArcMultiplyerPL x AD_TempReal)))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[5] Equal to True
Then - Actions
Set AD_ManaSpeed[AD_MaxIndex] = (AD_ManaSpeedBase + (AD_ManaSpeedPerLevel x AD_TempReal))
Else - Actions
Set AD_ManaSpeed[AD_MaxIndex] = ((AD_MaxDistance[AD_MaxIndex] x AD_TimerSpeed) / (AD_ManaIncomingTimeBase + (AD_ManaIncomingTimePerLevel x AD_TempReal)))
Set AD_SFXLimiter = (Random integer number between 1 and AD_RecieveSFXLimiter)
Unit - Set mana of AD_OriginalCaster[AD_Index] to ((Mana of AD_OriginalCaster[AD_Index]) + AD_CarriedMana[AD_Index])
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[14] Equal to True
AD_SFXLimiter Equal to 1
Then - Actions
Special Effect - Create a special effect attached to the chest of AD_OriginalCaster[AD_Index] using AD_HealedManaSFX[AD_Theme[AD_Index]]
Special Effect - Destroy (Last created special effect)
Else - Actions
Else - Actions
Set AD_CarriedMana[AD_Index] = 0.00
Else - Actions
Set AD_TempReal = (Mana of AD_TempUnit2)
Unit - Set mana of AD_TempUnit2 to ((Mana of AD_TempUnit2) - AD_ManaDrain[AD_Index])
Set AD_TempReal2 = (Mana of AD_TempUnit2)
Set AD_CarriedMana[AD_Index] = (AD_TempReal - AD_TempReal2)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[15] Equal to True
Then - Actions
Special Effect - Create a special effect attached to the chest of AD_TempUnit2 using AD_DrainedManaSFX[AD_Theme[AD_Index]]
Special Effect - Destroy (Last created special effect)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[4] Equal to True
Then - Actions
-------- Mana segment creation --------
Set AD_MaxIndex = (AD_MaxIndex + 1)
Set AD_TempPoint2 = (Position of AD_OriginalCaster[AD_Index])
Unit - Create 1 AD_DummyType for AD_TempPlayer at AD_TempPoint facing (Angle from AD_TempPoint to AD_TempPoint2) degrees
Set AD_TempUnit = (Last created unit)
Set AD_TempReal = AD_AbilityLevel[AD_Index]
Special Effect - Create a special effect attached to the origin of AD_TempUnit using AD_ManaDrainSFX[AD_Theme[AD_Index]]
Animation - Change AD_TempUnit's size to ((AD_EffectScalingManaBase + (AD_EffectScalingManaPL x AD_TempReal))%, 0.00%, 0.00%) of its original size
Set AD_OriginalCaster[AD_MaxIndex] = AD_OriginalCaster[AD_Index]
Set AD_SpecialEffect[AD_MaxIndex] = (Last created special effect)
Set AD_CarriedHealth[AD_MaxIndex] = 0.00
Set AD_CarriedMana[AD_MaxIndex] = AD_CarriedMana[AD_Index]
Set AD_CurrentDistance[AD_MaxIndex] = 0.00
Set AD_Theme[AD_MaxIndex] = AD_TempInteger2
Set AD_MaxDistance[AD_MaxIndex] = (Distance between AD_TempPoint and AD_TempPoint2)
Set AD_MaxHeight[AD_MaxIndex] = (AD_MaxDistance[AD_MaxIndex] x (AD_ManaArcMultiplyerBase + (AD_ManaArcMultiplyerPL x AD_TempReal)))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[5] Equal to True
Then - Actions
Set AD_ManaSpeed[AD_MaxIndex] = (AD_ManaSpeedBase + (AD_ManaSpeedPerLevel x AD_TempReal))
Else - Actions
Set AD_ManaSpeed[AD_MaxIndex] = ((AD_MaxDistance[AD_MaxIndex] x AD_TimerSpeed) / (AD_ManaIncomingTimeBase + (AD_ManaIncomingTimePerLevel x AD_TempReal)))
Set AD_CurrentDistance[AD_Index] = (AD_CurrentDistance[AD_Index] + AD_HealthSpeed[AD_Index])
Animation - Change AD_TempUnit flying height to ((((4.00 x AD_MaxHeight[AD_Index]) / AD_MaxDistance[AD_Index]) x (AD_CurrentDistance[AD_Index] / AD_MaxDistance[AD_Index])) x (AD_MaxDistance[AD_Index] - AD_CurrentDistance[AD_Index])) at 0.00
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Distance between AD_TempPoint2 and AD_TempPoint3) Less than or equal to 50.00
Then - Actions
Special Effect - Destroy AD_SpecialEffect[AD_Index]
Set AD_SFXLimiter = (Random integer number between 1 and AD_RecieveSFXLimiter)
Unit - Set life of AD_OriginalCaster[AD_Index] to ((Life of AD_OriginalCaster[AD_Index]) + AD_CarriedHealth[AD_Index])
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[13] Equal to True
AD_SFXLimiter Equal to 1
Then - Actions
Special Effect - Create a special effect attached to the origin of AD_OriginalCaster[AD_Index] using AD_HealedLifeSFX[AD_Theme[AD_Index]]
Special Effect - Destroy (Last created special effect)
Set AD_CurrentDistance[AD_Index] = (AD_CurrentDistance[AD_Index] + AD_ManaSpeed[AD_Index])
Animation - Change AD_TempUnit flying height to ((((4.00 x AD_MaxHeight[AD_Index]) / AD_MaxDistance[AD_Index]) x (AD_CurrentDistance[AD_Index] / AD_MaxDistance[AD_Index])) x (AD_MaxDistance[AD_Index] - AD_CurrentDistance[AD_Index])) at 0.00
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Distance between AD_TempPoint2 and AD_TempPoint3) Less than or equal to 50.00
Then - Actions
Special Effect - Destroy AD_SpecialEffect[AD_Index]
Unit - Set mana of AD_OriginalCaster[AD_Index] to ((Mana of AD_OriginalCaster[AD_Index]) + AD_CarriedMana[AD_Index])
Set AD_SFXLimiter = (Random integer number between 1 and AD_RecieveSFXLimiter)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
AD_Conditions[14] Equal to True
AD_SFXLimiter Equal to 1
Then - Actions
Special Effect - Create a special effect attached to the chest of AD_OriginalCaster[AD_Index] using AD_HealedManaSFX[AD_Theme[AD_Index]]
Special Effect - Destroy (Last created special effect)
-=V1.00=-
- Initial upload
-=V1.01=-
- Updated tooltip
- Altered some SFX to make the themes more consistent
- Changed to a channeling (Can cast multiple times if you stay in the same location, but not move)
- Made the spell cancellable (just issue any other order
- Added minimum spread out range configurable
- Added new SFX "Cancel sfx" (defaults set to the same as end spell sfx) also configurable
- Reduced amount of SFX (increase configurable "SFX Wait") so if you still have issues, increase that some more
- Modified dummy removal trigger so it is initially off/turned off
-=V1.02=-
- Moved button
- nulled variables after use
- Made order configurable
Message me, if you find any errors, considering how much indentation was needed for all the configurables, I've probably made a mistake somewhere, so I'd appreciate the heads-up so I can fix any issues as early as I get the chance
Give credits if you use this in your map, and I hope you enjoy it.
(Try casting at each level, and play around with the configurables)
Personaly I dont thhink to ur spells could be usefull for anykind of pvp maps, but I think to they would be awesome for some boss fight and dungeon stile maps.
+2 rep
Should note that, that effect is actually intentional, despite it's strange looking-ness, though I will look to make the modifications you have suggested with making it a channeling spell, so that cannot happen
Maker said:
The dummy removal trigger should not be on all the time
The ability spams effects
I'll change the "SFX wait time" in the config to a higher value, will lower all the sfx amount and change nothing else, As for dummy removal, just give me a second
Maker said:
Level 1 has launch sound for the initial projectiles, but not a
sound when they land. Level 2 and 3 have no launch sound, but do
have landing sound. That is not consistent
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.