Essence of Anger v1
600
ID:
291
Family ID:
Author:
Killamasta
Rarity:
uncommon
Element:
darkness
Attack Type:
Decay
Attack Range:
800
Attack CD:
2
Damage:
63-63
Status:
Approved

Description:

A piece of a black heart. Poisons many enemies.
Specials:
Bounce attack:
   4 targets
   -0% damage per bounce
Poisononed Heart
This tower destroys a piece of the creep's heart on damage. The affected creep takes 150  Spelldamage every second for 6 seconds.

Level Bonus:
+6 poison damage
+0.3 seconds poison duration
Download

Toggle Triggers

Header

    globals  
       //@import
       BuffType Poisoned_heart // this is used to declare the buff
    endglobals 
    
  

//Do not remove or rename this function! 
//Put your initialization tasks here, this function will be called on map init  

    private function init takes nothing returns nothing  
   
    endfunction

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
  
 local Unit creep = Event.getTarget()

 
set Poisoned_heart.applyCustomTimed(tower,creep,tower.getLevel(),6+tower.getLevel()*.3).userReal = 150. + 6 * tower.getLevel()
 
endfunction
Adept Witch v1
600
ID:
375
Family ID:
Author:
cedi
Rarity:
uncommon
Element:
darkness
Attack Type:
Essence
Attack Range:
1100
Attack CD:
1.6
Damage:
538-538
Mana:
30
Mana regen:
1.5
Status:
Approved

Description:

Yet she has the knowledge to transform you into a frog.
Specials:
+1 mana/lvl
+0.1 mana regen/lvl
Love Potion
The witch throws a bottle of love potion on the target, slowing it by 32% and increasing its item drop chance by 25.6%. The potion lasts 7 seconds.

Level Bonus:
+0.375% slow
+0.3% Item drop chance

AC_TYPE_OFFENSIVE_BUFF
 25, 1100.00 range, 3.00s cooldown
Soul Split
When the witch attacks, it has a 36% chance to deal 400 spell damage to its target, increasing the witch's attackspeed by 15% and decreasing the chance to trigger this spell by 9%. These effects last 12 seconds and stack. If the target is under the influence of a Love Potion, the attackspeed bonus, the damage and the duration of this spell are doubled.

Level Bonus:
+16 spell damage
Download

Toggle Triggers

Autocast

caster_art: AUTOCAST_cooldown: 3.00 AUTOCAST_numBuffsBeforeIdle: 1 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_BUFF AUTOCAST_manacost: 25 AUTOCAST_range: 1100.00 AUTOCAST_buffType: cedi_LovePotion AUTOCAST_targetSelf: false AUTOCAST_targetType: TARGET_TYPE_CREEPS target_art: AUTOCAST_autoRange: 1100.00
private function onAutocast takes Tower tower returns nothing
    set Projectile.createFromUnitToUnit( cedi_LoveMissile, tower, 1.00, tower.calcSpellCritNoBonus(), tower, Event.getTarget(), true, false, false ).userInt = 256 + tower.getLevel() * 3
endfunction

Header

    globals
        //@import
        BuffType cedi_LovePotion
        //@import
        BuffType cedi_SoulBuff
        //@import
        ProjectileType cedi_LoveMissile
    endglobals
    
    //Do not remove or rename this function!
    //Put your initialization tasks here, this function will be called on map init
    private function init takes nothing returns nothing
    endfunction

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
    local real multipler = 1.00
    local integer UID = tower.getUID()
    if tower.calcChance( tower.userReal / 100.00 ) then
        if Event.getTarget().getBuffOfType( cedi_LovePotion ) != 0 then
            set multipler = 2.00
            call tower.getOwner().displayFloatingTextX( "Double", tower, 255, 0, 0, 255, 64.00, 1.00, 2.00 )
        endif
        call SFXAtUnit("Objects\\Spawnmodels\\Undead\\UndeadDissipate\\UndeadDissipate.mdl", tower.getUnit())
        call tower.doSpellDamage( Event.getTarget(), (400 + 16 * tower.getLevel() ) * multipler, tower.calcSpellCritNoBonus() )
        call cedi_SoulBuff.applyCustomTimed( tower, tower, 1, 12 * multipler )
        set tower.userReal = tower.userReal - 9.00 //* multipler
        call tower.modifyProperty( MOD_ATTACKSPEED, 0.15 * multipler ) 
        
        call TriggerSleepAction( 12.00 * multipler )
        if tower.getUID() == UID then
            call tower.modifyProperty( MOD_ATTACKSPEED, -0.15 * multipler ) 
            set tower.userReal = tower.userReal + 9.00 //* multipler
        endif
    endif
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    set tower.userReal = 36.00
endfunction
Glowing Sun Orb v1
600
ID:
390
Family ID:
Author:
MasterCassim
Rarity:
common
Element:
astral
Attack Type:
Energy
Attack Range:
850
Attack CD:
1.3
Damage:
562-562
Status:
Approved

Description:

The blazing light of the sun makes its targets glow, especially undead ones.
Specials:
Splash attack:
   125 AoE: 50% damage
   225 AoE: 25% damage
+15% dmg to undead
Afterglow
The Orb has a 5% chance to reduce armor of units it damages by 5 for 5 seconds. This chance is doubled for bosses.

Level Bonus:
+0.6% chance
+0.25 seconds duration
Download

Toggle Triggers

Header

    globals
      //@import
      BuffType cassimArmor
    endglobals
    
    //Do not remove or rename this function!
    //Put your initialization tasks here, this function will be called on map init
    private function init takes nothing returns nothing
    endfunction

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0
function onDamage takes Tower tower returns nothing
  local integer lvl = tower.getLevel()
   local Creep creep = Event.getTarget()
   local real sizeFactor = 1.0
   if creep.getSize() == SIZE_BOSS then
      set sizeFactor = 2.0
   endif
   if(tower.calcChance((0.05+lvl*0.006)*sizeFactor)) then
      call cassimArmor.applyCustomTimed(tower,creep,5,5+lvl*0.25)
   endif
endfunction
Particle Accelerator v1
600
ID:
400
Family ID:
Author:
the_red_terror
Rarity:
rare
Element:
iron
Attack Type:
Energy
Attack Range:
900
Attack CD:
1
Damage:
426-426
Status:
Approved

Description:

Gains speed and damage on each attack, while losing the bonus on kill.
Energy Acceleration
Every attack increases attack speed and damage by 2%. 

Level Bonus:
+0.1% attack speed and damage
Errant Tachyons
On kill, this tower is stunned for 2 seconds and the bonus from Energy Acceleration is lost.
Download

Toggle Triggers

Header

            globals
        MultiboardValues Red_Terror_Values
    endglobals
        


    
    //Do not remove or rename this function!
    //Put your initialization tasks here, this function will be called on map init

    //@export
        function redterror_energy_rotation takes Tower tower returns nothing
            call Effect(tower.userInt2).setAnimationSpeed(0.5+(tower.userReal/2))
        endfunction
    
    private function init takes nothing returns nothing
            set Red_Terror_Values = MultiboardValues.create(1)
            call Red_Terror_Values.setKey(0, "Acceleration")
    endfunction
        

On Attack

ONATTACK_chance: 1.0 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
            
local integer lvl = tower.getLevel()
        call tower.modifyProperty(MOD_DAMAGE_ADD_PERC,0.02+(lvl*0.001))
        call tower.modifyProperty(MOD_ATTACKSPEED,0.02+(lvl*0.001))
        set tower.userReal = tower.userReal+(0.02+(lvl*0.001))
            call redterror_energy_rotation(tower)
        
endfunction

On Kill

function onKill takes Tower tower returns nothing
            
local integer lvl = tower.getLevel()
            call  SFXAtUnit("Abilities\\Spells\\Orc\\FeralSpirit\\feralspiritdone.mdl",Event.getTarget().getUnit())
                call tower.modifyProperty(MOD_DAMAGE_ADD_PERC,-(tower.userReal))
                call tower.modifyProperty(MOD_ATTACKSPEED,-(tower.userReal))
                call cb_stun.applyOnlyTimed(tower,tower,2)
                set tower.userReal = 0
                    call redterror_energy_rotation(tower)
//different SFX?
        
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
            
local Effect e = Effect.createAnimatedScaled("Abilities\\Spells\\Orc\\SpiritLink\\SpiritLinkTarget.mdl",tower.getX(), tower.getY(), 8.0, 0.0, 1.50)
    set tower.userInt2 = e
    set tower.userReal = 0
    call redterror_energy_rotation(tower)
        
endfunction

On Tower Destruction

function onDestruct takes Tower tower returns nothing
            
local Effect e = tower.userInt2
    call e.destroy()
        
endfunction

On Tower Details

goldcost: 0
function onTowerDetails takes Tower tower returns MultiboardValues
            
call Red_Terror_Values.setValue(0, R2SW((tower.userReal*100),1,1))
        return Red_Terror_Values
        
endfunction
Firestorm Core v1
600
ID:
424
Family ID:
Author:
Ashbringer
Rarity:
uncommon
Element:
fire
Attack Type:
Magic
Attack Range:
900
Attack CD:
1.3
Damage:
319-319
Status:
Approved

Description:

A device created to unleash fiery explosions.
Firestorm
Attacks have a 16% chance to apply 3 charges of Firestorm to the target. Each second, a charge will be spent, dealing 300 spell damage to enemies in 300 range. If the target already has charges, the charges will accumulate and a charge will be consumed instantly. On death all remaining firestorm charges get consumed at once.

Level Bonus:
+0.5% chance
+10 damage
Download

Toggle Triggers

Header

    globals
        BuffType ashbringer_firestorm_buff
    endglobals
    
    function ashbringer_firestorm_damage takes Tower tower, Unit creep returns nothing
        call Effect.createScaled("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl", creep.getX(), creep.getY(), 0, 0, 0.4).destroy()
        call tower.doSpellDamageAoEUnit(creep, 300, 300 + (10 * tower.getLevel()), tower.calcSpellCritNoBonus(), 0.0) 
    endfunction
    
    function ashbringer_firestorm_periodic takes Buff b returns nothing
        local Tower tower = b.getCaster()
        local Unit target = b.getBuffedUnit()
        set b.userInt = b.userInt - 1
        if b.userInt <= 0 then
            call b.removeBuff() //need to do it in this order, because the damage can kill the buff carrier, and removing buff after the carrier is dead causes double free
        endif
        call ashbringer_firestorm_damage(tower, target)
    endfunction 
    
    function ashbringer_firestorm_setint takes Buff b returns nothing        
        set b.userInt = b.getPower()
    endfunction
    
    function firestorm takes Buff b returns nothing 
        local Tower tower = b.getCaster() 
        local Creep creep = b.getBuffedUnit() 
        call Effect.createScaled("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl", creep.getX(), creep.getY(), 0, 0, 0.8).destroy()
        call tower.doSpellDamageAoEUnit(creep, 300, b.getPower()* (300 + (10 * tower.getLevel())), tower.calcSpellCritNoBonus(), 0.0) 
    endfunction
    
    //Do not remove or rename this function!
    //Put your initialization tasks here, this function will be called on map init
    private function init takes nothing returns nothing
        set ashbringer_firestorm_buff = BuffType.create(1000,0,false) 
        call ashbringer_firestorm_buff.setBuffIcon('@@0@@')  
        call ashbringer_firestorm_buff.addEventOnCreate(EventHandler.ashbringer_firestorm_setint)
        call ashbringer_firestorm_buff.addPeriodicEvent(EventHandler.ashbringer_firestorm_periodic,1) 
        call ashbringer_firestorm_buff.addEventOnDeath(EventHandler.firestorm)
    endfunction

On Attack

ONATTACK_chance: 0.16 ONATTACK_chanceLevelAdd: 0.005
function onAttack takes Tower tower returns nothing
    local Unit creep = Event.getTarget()
    local Buff b
    local integer i
    set b = creep.getBuffOfType(ashbringer_firestorm_buff)
    if ( b != 0 ) then
        call ashbringer_firestorm_damage(tower, creep)
        set i = b.getPower() + 2
        call b.setPower(i)
        set b.userInt = i
    else
        set i = 3
        call ashbringer_firestorm_buff.applyCustomPower(tower, creep, i, i)
    endif
endfunction
Really Cold Troll v1
600
ID:
477
Family ID:
Author:
cedi
Rarity:
uncommon
Element:
ice
Attack Type:
Elemental
Attack Range:
900
Attack CD:
1.5
Damage:
397-397
Mana:
100
Mana regen:
2.5
Status:
Approved

Description:

Now, he reached the next level...
Specials:
-50% dmg to undead
+25% dmg to orcs
+25% dmg to humanoids
Blizzard
Summons 6 waves of icy spikes which fall down to earth. Each wave deals 333 damage in an AoE of 300. Each time a unit is damaged by this spell there is a chance of 35% to slow the unit by 9% for 4.5 seconds and a chance of 15% to stun the unit for 0.50 seconds.

Level Bonus:
+12 damage
+0.01% slow
+1% chance for slow
+0.1% chance for stun

AC_TYPE_OFFENSIVE_UNIT
 95, 900 range, 10s cooldown
Download

Toggle Triggers

Autocast

caster_art: AUTOCAST_cooldown: 10 AUTOCAST_numBuffsBeforeIdle: 0 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_UNIT AUTOCAST_manacost: 95 AUTOCAST_range: 900 AUTOCAST_buffType: 0 AUTOCAST_targetSelf: true AUTOCAST_targetType: 0 target_art: AUTOCAST_autoRange: 900
private function onAutocast takes Tower tower returns nothing
    local unit u = Event.getTarget().getUnit() 
    call Troll_blizzard.pointCastFromCasterOnPoint( tower, GetUnitX( u ), GetUnitY( u ), 1.00 + I2R( tower.getLevel() ) * 0.036, tower.calcSpellCritNoBonus() )
    set u = null
endfunction

Header

    globals
        BuffType Troll_blizzardslow
        Cast Troll_blizzard
    endglobals
    
    function OnBlizzard takes DummyUnit U returns nothing
        if U.getCaster().calcChance( 0.35 + I2R( U.getCaster().getLevel() ) * 0.01 ) then
            call Troll_blizzardslow.applyOnlyTimed( U.getCaster(), Event.getTarget(), 4.5 )
        endif
        if U.getCaster().calcChance( 0.15 + I2R( U.getCaster().getLevel() ) * 0.001 ) then
            call cb_stun.applyOnlyTimed( U.getCaster(), Event.getTarget(), 0.50 )
        endif
    endfunction
    
    //Do not remove or rename this function!
    //Put your initialization tasks here, this function will be called on map init
    private function init takes nothing returns nothing
        local Modifier mod2 = Modifier.create()
        set Troll_blizzardslow = BuffType.create(0.0,0.0,false)
        call mod2.addModification(MOD_MOVESPEED,-0.09,-0.001)
        call Troll_blizzardslow.setBuffModifier(mod2)
        call Troll_blizzardslow.setBuffIcon('@@4@@')
        set Troll_blizzard = Cast.create( '@@0@@', "blizzard", 9.00 )
        call Troll_blizzard.setDamageEvent( EventHandler.OnBlizzard )
        call Troll_blizzardslow.setStackingGroup("cedi_troll_blizzard")
    endfunction
Expanded Fire Pit v1
600
ID:
559
Family ID:
Author:
Boekie
Rarity:
common
Element:
fire
Attack Type:
Decay
Attack Range:
800
Attack CD:
0.9
Damage:
455-455
Status:
Approved

Description:

A fire pit that has the ability to unleash some powerful flames.
Specials:
2x multicrit
Hot Coals
Whenever this tower kills a creep it gains 25% bonus crit chance for 9.5 seconds.

Level Bonus:
+0.05 sec duration
+0.3% crit chance
Download

Toggle Triggers

Header

    globals
    //@import 
    BuffType boekie_coals_buff 
    endglobals
    
    //Do not remove or rename this function!
    //Put your initialization tasks here, this function will be called on map init
    private function init takes nothing returns nothing
    endfunction

On Kill

function onKill takes Tower tower returns nothing
local integer lvl = tower.getLevel() 
call boekie_coals_buff.applyCustomTimed(tower,tower,100+(lvl*3),9.5+0.05*lvl) 
endfunction