Big Lightning Rod v1
2500
ID:
230
Family ID:
Author:
Boekie
Rarity:
common
Element:
storm
Attack Type:
Energy
Attack Range:
1200
Attack CD:
1.2
Damage:
1979-1998
Mana:
45
Mana regen:
2
Status:
Approved

Description:

A storm tower that releases a magic lighting bolt.
Release Lightning
This tower releases a lightning bolt that strikes the target for 2500 damage. 

Level Bonus:
+125 damage.

AC_TYPE_OFFENSIVE_UNIT
 20, 1200 range, 1s cooldown
Download

Toggle Triggers

Autocast

caster_art: AUTOCAST_cooldown: 1 AUTOCAST_numBuffsBeforeIdle: 0 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_UNIT AUTOCAST_manacost: 20 AUTOCAST_range: 1200 AUTOCAST_buffType: 0 AUTOCAST_targetSelf: false AUTOCAST_targetType: 0 target_art: AUTOCAST_autoRange: 1200
private function onAutocast takes Tower tower returns nothing
local Unit creep = Event.getTarget() 
call tower.doSpellDamage(creep,2500.0+(tower.getLevel()*125.0),tower.calcSpellCritNoBonus()) 
call SFXOnUnit("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl",creep.getUnit(),"origin") 
endfunction
Core of Dark Emotions v1
2500
ID:
293
Family ID:
Author:
Killamasta
Rarity:
uncommon
Element:
darkness
Attack Type:
Decay
Attack Range:
800
Attack CD:
2
Damage:
185-185
Status:
Approved

Description:

The Master of Hate, Anger and Rage corrupts all the innocent hearts to make them rot.
Specials:
Bounce attack:
   8 targets
   -0% damage per bounce
Rotting Heart
This tower corrupts the creep's heart and makes it rot on damage. The affected creep takes 625  Spelldamage every second for 6 seconds.

Level Bonus:
+25 poison damage
+0.5 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()*.5).userReal = 625. + 25 * tower.getLevel() 
endfunction
Experienced Marine v1
2500
ID:
294
Family ID:
Author:
Boekie
Rarity:
rare
Element:
iron
Attack Type:
Decay
Attack Range:
1200
Attack CD:
0.6
Damage:
560-560
Mana:
35
Mana regen:
1.3
Status:
Approved

Description:

A highly esteemed footsoldier with moderate self esteem.
Stim
This marine uses a stimpack, increasing its attackspeed by 150% and decreasing its attackdamage by 50%. This buff lasts 5 seconds. 

Level Bonus:
+0.08 seconds duration

AC_TYPE_OFFENSIVE_IMMEDIATE
 25, 1200 range, 7s cooldown
Frag Grenade
When this tower damages a creep it has a 25% chance to fire a frag grenade that will split into 8 smaller grenades after a short delay. When a grenade collides with a creep it deals 1800 spelldamage and increases the damage the target takes from attacks by 2%, stacking up to a maximum of 50%.

Level Bonus:
+0.4% chance
+150 damage
+0.1% damage increase
Download

Toggle Triggers

Autocast

caster_art: Abilities\Spells\Human\Avatar\AvatarCaster.mdl AUTOCAST_cooldown: 7 AUTOCAST_numBuffsBeforeIdle: 0 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_IMMEDIATE AUTOCAST_manacost: 25 AUTOCAST_range: 1200 AUTOCAST_buffType: 0 AUTOCAST_targetSelf: true AUTOCAST_targetType: 0 target_art: AUTOCAST_autoRange: 1200
private function onAutocast takes Tower tower returns nothing
    local integer level = tower.getLevel()
    call boekie_stim_buff.applyCustomTimed(tower,tower,level,5.0+0.08*level)
endfunction

Header

    globals
        //@import
        ProjectileType shard
        //@import
        BuffType boekie_stim_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: 0.25 ONDAMAGE_chanceLevelAdd: 0.004
function onDamage takes Tower tower returns nothing
    set Projectile.createFromUnitToUnit(shard, tower, 1.50, tower.calcSpellCritNoBonus(), tower, Event.getTarget(), false, true, false).userInt = 8 //eight projectiles
endfunction
Monument of Death v1
2500
ID:
344
Family ID:
Author:
geX
Rarity:
common
Element:
darkness
Attack Type:
Decay
Attack Range:
1050
Attack CD:
1.75
Damage:
2296-2896
Status:
Approved

Description:

Basic tower with a small chance on attack to kill lesser targets immediately.
Tomb's Curse
This tower has a 2% chance on attack to kill a non boss, non champion target immediately.

Level Bonus:
 +0.25% chance
Download

Toggle Triggers

On Damage

ONDAMAGE_chance: 0.02 ONDAMAGE_chanceLevelAdd: 0.0025
function onDamage takes Tower tower returns nothing
            
local Unit creep = Event.getTarget()
    local integer size = creep.getSize()
    if size < SIZE_CHAMPION then  // removed or size == SIZE_AIR
        call tower.killInstantly(creep)
        call SFXAtUnit("Abilities\\Spells\\Undead\\DeathCoil\\DeathCoilSpecialArt.mdl",creep.getUnit())       
    endif
        
endfunction
Frozen Inferno v1
2500
ID:
368
Family ID:
Author:
IamanEvilMan
Rarity:
common
Element:
darkness
Attack Type:
Essence
Attack Range:
900
Attack CD:
0.9
Damage:
1627-1627
Mana:
45
Mana regen:
2
Status:
Approved

Description:

This tower uses mana to summon coldfire from the Frozen Heart of Hell for minor AoE damage and slowing effect. Stolen souls improve this ability with each tower level.
Specials:
-25% dmg to undead (+1%/lvl)
Soul Chill
Chills the souls of all creeps in 250 AoE of the target, dealing 1800 spelldamage and slowing them by 12% for 4 seconds. 

Level Bonus:
+96 damage 
+1% slow 
+0.1 seconds duration

AC_TYPE_OFFENSIVE_UNIT
 20, 900 range, 1s cooldown
Download

Toggle Triggers

Autocast

AUTOCAST_cooldown: 1 AUTOCAST_autoRange: 900 AUTOCAST_manacost: 20 AUTOCAST_range: 900 AUTOCAST_targetType: 0 AUTOCAST_numBuffsBeforeIdle: 2 caster_art: target_art: Abilities\Spells\Undead\RaiseSkeletonWarrior\RaiseSkeleton.mdl AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_UNIT AUTOCAST_buffType: soul_chill AUTOCAST_isExtended: false AUTOCAST_targetSelf: false
private function onAutocast takes Tower tower returns nothing
    local Unit targ = Event.getTarget()
    local Iterate it = Iterate.overUnitsInRangeOfUnit(tower,TARGET_CREEPS,targ,250)
    local Unit next

    local real calculated_slow = 120 + tower.getLevel() * 10
    local real duration = 4.0 + tower.getLevel() * 0.1
    local real spelldmg = 1800 + tower.getLevel() * 96 
     
loop

    set next = it.next()
    exitwhen next == 0
    call soul_chill.applyCustomTimed(tower, next, R2I(calculated_slow), duration)
    call tower.doSpellDamage(next, spelldmg, tower.calcSpellCritNoBonus())

endloop

    call SFXAtUnit("Abilities\\Spells\\Undead\\RaiseSkeletonWarrior\\RaiseSkeleton.mdl", targ.getUnit())
endfunction

Header

globals
    //@import        
    BuffType soul_chill
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
Goblin Stronghold v1
2500
ID:
373
Family ID:
Author:
cedi
Rarity:
unique
Element:
iron
Attack Type:
Physical
Attack Range:
800
Attack CD:
2.5
Damage:
897-906
Status:
Approved

Description:

You should always consider goblin-made items to be a nuclear weapon with a faulty trigger, you just might live to see another day.
Reimbursement:
Whenever this tower attacks and not a single one of the other abilities trigger the player is reimbursed 5 gold.
Probability Field Emitter:
Whenever this tower attacks it has a 20% chance to launch a probability field emitter at a random tower within 500 range, increasing trigger chances by 30% - 60% for 5 seconds.

Level Bonus:
+0.6% chance
+0.6% trigger chances
Clockwork Engineer
Whenever this tower attacks it has a 20% chance to launch a clockwork engineer at a random tower within 500 range, increasing attack speed and damage by 10% - 40% for 5 seconds.

Level Bonus:
+0.6% chance
+0.6% attack speed and damage
Goblin Sapper
Whenever this tower attacks it has a 20% chance to launch a sapper team at the attacked creep. On contact the sappers deal 1350 - 7650 spell damage to the target and all creeps within 250 range. Also slows all affected creeps by 25% - 45% for 3 seconds.

Level Bonus:
+0.4% chance
+180 spell damage
+0.6% slow
Download

Toggle Triggers

Header

    globals
        ProjectileType cedi_gob_sapper
        ProjectileType cedi_gob_robot //Both robot and emitter
        
        BuffType cedi_gob_sapperB
        BuffType cedi_gob_robotB
        BuffType cedi_gob_emitterB
    endglobals
    
    function Sapper_Hit takes Projectile P, Unit U returns nothing
        local Tower T = P.getCaster()
        local Iterate I = Iterate.overUnitsInRangeOfUnit( T, TARGET_CREEPS, U, 250.00 )
        
        if T == 0 then
            //We got no caster, abbadon ship.
            call I.destroy()
            return
        endif
        
        call T.getOwner().displaySmallFloatingText( I2S( P.userInt / 10 ) + "% slow", U, 100, 100, 255, 40.0 )
        
        call DestroyEffect( AddSpecialEffect( "Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl", P.x, P.y ) )
        
        loop
            set U = I.next()
            exitwhen U == 0
            call T.doSpellDamage( U, P.userReal, T.calcSpellCritNoBonus() )
            call cedi_gob_sapperB.apply( T, U, P.userInt )
        endloop
    endfunction
    
    //Both robot and emitter
    function Robot_Hit takes Projectile P, Unit U returns nothing
        set P.explode = false
        
        if P.getCaster() == 0 then
            //We got no caster, abbadon ship.
            return
        endif
        
        if P.userInt == 1 then
            //robot
            call cedi_gob_robotB.apply( P.getCaster(), U, P.userInt2 )
            call P.getCaster().getOwner().displaySmallFloatingText( I2S( P.userInt2 / 10 ) + "% AS and DMG", U, 100, 255, 100, 40.0 )
        else
            //emitter
            call cedi_gob_emitterB.apply( P.getCaster(), U, P.userInt2 )
            call P.getCaster().getOwner().displaySmallFloatingText( I2S( P.userInt2 / 10 ) + "% Trigger Chance", U, 100, 255, 100, 40.0 )
        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 m
        
        //sapper
        set cedi_gob_sapper = ProjectileType.create( "units\\creeps\\GoblinSapper\\GoblinSapper.mdl", 20.0, 700.00 )
        call cedi_gob_sapper.enableHoming( Sapper_Hit, 0 )
        //sapper buff
        set cedi_gob_sapperB = BuffType.create( 3.0, 0.0, false )
        call cedi_gob_sapperB.setBuffIcon( '@@2@@' )
        set m = Modifier.create()
        call m.addModification( MOD_MOVESPEED, 0.00, -0.001 )
        call cedi_gob_sapperB.setBuffModifier( m )
        
        //robot / emitter
        set cedi_gob_robot = ProjectileType.createInterpolate( "", 200.0 )
        call cedi_gob_robot.setEventOnInterpolationFinished( Robot_Hit )
        //robot buff
        set cedi_gob_robotB = BuffType.create( 5.0, 0.0, true )
        call cedi_gob_robotB.setBuffIcon( '@@3@@' )
        set m = Modifier.create()
        call m.addModification( MOD_DAMAGE_ADD_PERC, 0.00, 0.001 )
        call m.addModification( MOD_ATTACKSPEED, 0.00, 0.001 )
        call cedi_gob_robotB.setBuffModifier( m )
        call cedi_gob_robotB.setSpecialEffect( "Units\\Creeps\\HeroTinkerRobot\\HeroTinkerRobot.mdl", 120.0, 0.7 )
        
        //emitter buff
        set cedi_gob_emitterB = BuffType.create( 5.0, 0.0, true )
        call cedi_gob_emitterB.setBuffIcon( '@@4@@' )
        set m = Modifier.create()
        call m.addModification( MOD_TRIGGER_CHANCES, 0.00, 0.001 )
        call cedi_gob_emitterB.setBuffModifier( m )
        call cedi_gob_emitterB.setSpecialEffect( "units\\creeps\\GoblinLandMine\\GoblinLandMine.mdl", 120.0, 1.0 )
    endfunction

On Attack

ONATTACK_chance: 1.0 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
    local Unit U = Event.getTarget()
    local Projectile P
    local integer lvl = tower.getLevel()
    local boolean b = false
    local Iterate I
    //sapper
    if tower.calcChance( 0.2 + 0.004 * lvl ) then
        set b = true 
        set P = Projectile.createFromUnitToUnit( cedi_gob_sapper, tower, 1.0, 1.0, tower, U, true, false, false )
        //set damage 4500 (0.3/1.7)  + 180
        set P.userReal = GetRandomReal( 1350.0, 7650.0 ) + 180.00 * lvl
        //set slow / 15% + 10%  / 0.001
        set P.userInt = GetRandomInt( 250, 450 ) + 6 * lvl
    endif
    
    //robot
    if tower.calcChance( 0.2 + 0.004 * lvl ) then
        set I = Iterate.overUnitsInRangeOfCaster( tower, TARGET_TOWERS, 500.00 )
        set U = I.nextRandom()
        
        //Don't target self
        if U == tower then
            set U = I.nextRandom()
        endif
        
        if U != 0 then
            call I.destroy()
        else
            //no sense doing anything more.
            return
        endif
    
        set b = true 
        set P = Projectile.createLinearInterpolationFromUnitToUnit( cedi_gob_robot, tower, 1.0, 1.0, tower, U, 0.35, true )
        //set model
        call P.setModel( "Units\\Creeps\\HeroTinkerRobot\\HeroTinkerRobot.mdl" )
        //set type
        set P.userInt = 1
        //set effect / 10% - 40%
        set P.userInt2 = GetRandomInt( 100, 400 ) + 6 * lvl
    endif
    
    //emitter
    if tower.calcChance( 0.2 + 0.004 * lvl ) then
        set I = Iterate.overUnitsInRangeOfCaster( tower, TARGET_TOWERS, 500.00 )
        set U = I.nextRandom()
        
        //Don't target self
        if U == tower then
            set U = I.nextRandom()
        endif
        
        if U != 0 then
            call I.destroy()
        else
            //no sense doing anything more.
            return
        endif
    
        set b = true 
        set P = Projectile.createLinearInterpolationFromUnitToUnit( cedi_gob_robot, tower, 1.0, 1.0, tower, U, 0.33, true )
        //set model
        call P.setModel( "units\\creeps\\GoblinLandMine\\GoblinLandMine.mdl" )
        //set type
        set P.userInt = 0
        //set effect / 30% - 60% +15%
        set P.userInt2 = GetRandomInt( 300, 600 ) + 6 * lvl
    endif
    
    //Economy
    if not b then
        //Nothing happened, add gold
        call tower.getOwner().giveGold( 5.0, tower.getUnit(), true, true )
    endif
endfunction
Ancient Felweed v1
2500
ID:
410
Family ID:
Author:
SirCoqaLot.
Rarity:
common
Element:
fire
Attack Type:
Decay
Attack Range:
750
Attack CD:
1
Damage:
1889-1889
Status:
Approved

Description:

Basic Tower that sometimes deals more damage.
Fireblossom
Every 5th attack deals 15% bonus damage.
Every 6th attack deals 30% bonus damage.
Every 7th attack deals 45% bonus damage.
Every 8th attack deals 60% bonus damage. 

Level Bonus:
+0.3% bonus damage every 5th attack.
+0.6% bonus damage every 6th attack.
+0.9% bonus damage every 7th attack.
+1.2% bonus damage every 8th attack.
Download

Toggle Triggers

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
local real damage = Event.damage
local integer level = tower.getLevel()

set tower.userInt = tower.userInt +1
set tower.userInt2 = tower.userInt2 +1
set tower.userInt3 = tower.userInt3 +1
set tower.userReal = tower.userReal +1

if tower.userInt >= 5 then
    set Event.damage = Event.damage * (1.15 + level * 0.003)
    set tower.userInt = 0
endif
if tower.userInt2 >= 6 then
    set Event.damage = Event.damage * (1.3 + level * 0.006)
    set tower.userInt2 = 0
endif
if tower.userInt3 >= 7 then
    set Event.damage = Event.damage * (1.45 + level * 0.009)
    set tower.userInt3 = 0
endif
if tower.userReal >= 8 then
    set Event.damage = Event.damage * (1.6 +level * 0.012)
    set tower.userReal = 0
endif
if Event.damage > damage then
    call tower.getOwner().displaySmallFloatingText(I2S(R2I(Event.damage)),tower,255,150,150,0)
endif
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
set tower.userInt = 0
set tower.userInt2 = 0
set tower.userInt3 = 0
set tower.userReal = 0
endfunction