Charged Obelisk v1
1700
ID:
54
Family ID:
Author:
Boekie
Rarity:
unique
Element:
storm
Attack Type:
Energy
Attack Range:
1200
Attack CD:
1.5
Damage:
748-748
Mana:
30
Mana regen:
1
Status:
Approved

Description:

This tower uses its lightning powers to help its allies.
Specials:
+0.04 mana regen/lvl
Charge
Applies a buff to target tower which lasts 10 seconds, it increases the attack speed of the tower by 25%. Every second this buff will grant an additional 5% bonus attackspeed.

Level Bonus:
+0.6% base attackspeed
+0.1% bonus attackspeed

AC_TYPE_OFFENSIVE_BUFF
 20, 1200 range, 5s cooldown
Electric Field
On every attack this tower shocks a creep in 1000 range. This shock deals 1000 spelldamage and stuns for 0.2 seconds, the spelldamage has 20% bonus chance to crit. The stun does not work on bosses! 

Level Bonus:
+40 spelldamage
+0.4% bonus crit chance
Download

Toggle Triggers

Autocast

caster_art: AUTOCAST_cooldown: 5 AUTOCAST_numBuffsBeforeIdle: 3 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_BUFF AUTOCAST_manacost: 20 AUTOCAST_range: 1200 AUTOCAST_buffType: boekie_chargeBuff AUTOCAST_targetSelf: true AUTOCAST_targetType: TARGET_TYPE_TOWERS target_art: AUTOCAST_autoRange: 1200
private function onAutocast takes Tower tower returns nothing
call boekie_chargeBuff.apply(tower,Event.getTarget(),tower.getLevel()*6)
endfunction

Header

    globals
    BuffType boekie_chargeBuff 
    endglobals
    
    function boekie_charge takes Buff b returns nothing  
        local Tower caster = b.getCaster()
        local Unit target = b.getBuffedUnit() 
        local integer newLevel = b.getLevel() + 50 + caster.getLevel()
        local real duration = b.getRemainingDuration()
        
        call boekie_chargeBuff.applyCustomTimed(caster,target,newLevel,duration).setRemainingDuration(duration)
        
    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 = Modifier.create() 
       
    set boekie_chargeBuff = BuffType.create( 10.00, 0.0, true )  
    call boekie_chargeBuff.setBuffIcon( '@@0@@' )  
    call m.addModification( MOD_ATTACKSPEED, 0.25, 0.001 )  
    call boekie_chargeBuff.setBuffModifier( m ) 
    call boekie_chargeBuff.addPeriodicEvent(EventHandler.boekie_charge,1)
    
    
    endfunction

On Attack

ONATTACK_chance: 1.0 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
    local Iterate inRange 
    local real numResults=0.0 
    local Unit result 
    local Unit next 
    local integer lvl = tower.getLevel()  
    set inRange=Iterate.overUnitsInRangeOfCaster(tower,TARGET_CREEPS,1000) 

    loop 
        set next=inRange.next() 
        exitwhen next==0 
        set numResults=numResults+1.0 

        if GetRandomReal(0.0,1.0)<=1.0/numResults then 
            set result=next 
        endif 
    endloop 

    if numResults>0.5 then 
        call tower.doSpellDamage(result,1000+(lvl*40),tower.calcSpellCrit(0.20+(lvl*0.004),0))
        
        if result.getSize() < SIZE_BOSS then
            call cb_stun.applyOnlyTimed(tower,result,0.2)
        endif
        
        call SFXAtUnit("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",result.getUnit()) 
    endif
endfunction
Quillboar Painbringer v1
1700
ID:
64
Family ID:
Author:
SirCoqaLot.
Rarity:
rare
Element:
nature
Attack Type:
Physical
Attack Range:
800
Attack CD:
0.9
Damage:
815-834
Mana:
100
Mana regen:
1
Status:
Unapproved

Description:

Advanced Nature tower that is able to release a spray of thorns from it's back.
Quillspray
This tower deals 30% of its attack damage as physical damage to every unit in 800 range around it. A creep hit by a Quillspray receives 11% more damage than it did from the previous Quillspray, if hit again within 1.5 seconds. This effect stacks up to 40 times.

Hint: Save mana to amplify the effect of this ability.

Level Bonus:
+0.2% base damage
7% chance to doublecast Quillsprays at level 15
5% chance to triplecast Quillsprays at level 25

AC_TYPE_OFFENSIVE_IMMEDIATE
 5, 800 range, 0.2s cooldown
Occasional Quillspray
On attack this tower has a 15% chance to trigger a Quillspray. 

Hint: This Quillspray costs no mana. 

Level Bonus:
+0.18% chance
Download

Toggle Triggers

Autocast

AUTOCAST_cooldown: 0.2 AUTOCAST_autoRange: 700 AUTOCAST_manacost: 5 AUTOCAST_range: 800 AUTOCAST_targetType: 0 AUTOCAST_numBuffsBeforeIdle: 0 caster_art: target_art: AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_IMMEDIATE AUTOCAST_buffType: 0 AUTOCAST_isExtended: true AUTOCAST_targetSelf: true
private function onAutocast takes Tower tower returns nothing
    local integer level = tower.getLevel()
    call quillspray(tower,1350)
    if level == 25 then 
        if tower.calcChance(0.05) then
            call quillspray(tower,1500)
            call quillspray(tower,1700)
         elseif tower.calcChance(0.07) then
            call quillspray(tower,1500)
        endif
    elseif level > 15 then
        if tower.calcChance(0.07) then
            call quillspray(tower,1500)
        endif
    endif
endfunction

Header

    globals
    //@import
    ProjectileType sir_boar_proj
    //@import
    BuffType sir_boar_debuff
    endglobals
    
    //@import
    function quillspray takes Tower tower, real speed returns nothing

    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
    endfunction

On Attack

ONATTACK_chance: 0.15 ONATTACK_chanceLevelAdd: 0.0018
function onAttack takes Tower tower returns nothing
    local integer level = tower.getLevel()
    call quillspray(tower,1350)
    if level == 25 then 
        if tower.calcChance(0.05) then // 0.02
            call quillspray(tower,1500)
            call quillspray(tower,1700)
        elseif tower.calcChance(0.07) then // 0.02
            call quillspray(tower,1500)
        endif
    elseif level > 15 then
        if tower.calcChance(0.07) then // 0.02
            call quillspray(tower,1500)
        endif
    endif
endfunction
Sun Array v1
1700
ID:
446
Family ID:
Author:
geX
Rarity:
common
Element:
astral
Attack Type:
Energy
Attack Range:
1200
Attack CD:
2
Damage:
1844-2085
Status:
Approved

Description:

Basic Tower with a weak bouncing attack and bonus damage to undead enemies.
Specials:
Bounce attack:
   3 targets
   -40% damage per bounce
+25% dmg to undead (+2.5%/lvl)
Download
Coin Machine v1
1700
ID:
556
Family ID:
Author:
Boekie
Rarity:
rare
Element:
iron
Attack Type:
Physical
Attack Range:
1200
Attack CD:
2.5
Damage:
2955-2955
Mana:
30
Mana regen:
2
Status:
Approved

Description:

This machine is used to make money.
Golden Influence
This tower adds a buff to a tower in 400 range that lasts 10 seconds. The buff increases bounty gain by 40%. Everytime this spell is cast you gain 5 gold.

Level Bonus:
+0.4 seconds duration 
+0.6% bounty gain

AC_TYPE_OFFENSIVE_BUFF
 20, 400 range, 4s cooldown
Multiply Gold
This tower increases the gold income of the player by 5%.
Download

Toggle Triggers

Autocast

caster_art: AUTOCAST_cooldown: 4 AUTOCAST_numBuffsBeforeIdle: 3 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_BUFF AUTOCAST_manacost: 20 AUTOCAST_range: 400 AUTOCAST_buffType: boekie_goldBuff AUTOCAST_targetSelf: true AUTOCAST_targetType: TARGET_TYPE_TOWERS target_art: Abilities\Spells\Items\ResourceItems\ResourceEffectTarget.mdl AUTOCAST_autoRange: 400
private function onAutocast takes Tower tower returns nothing
local integer level = tower.getLevel()
call boekie_goldBuff.applyCustomTimed(tower,Event.getTarget(),level*6,10+(level*0.4)) 
call tower.getOwner().giveGold( 5,tower.getUnit(), true, true) 
 
endfunction

Header

   globals 
    //@export
   BuffType boekie_goldBuff 
   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  
   local Modifier m = Modifier.create()  
   set boekie_goldBuff = BuffType.create( 0.0, 0.0, true )  
   call boekie_goldBuff.setBuffIcon( '@@0@@' )  
   call m.addModification( MOD_BOUNTY_RECEIVED, 0.40, 0.001)  
   call boekie_goldBuff.setBuffModifier( m ) 
   call boekie_goldBuff.setStackingGroup("boekie_goldBuff")
   endfunction 

On Tower Creation

function onCreate takes Tower tower returns nothing
call tower.getOwner().modifyIncomeRate(0.05)
endfunction

On Tower Destruction

function onDestruct takes Tower tower returns nothing
call tower.getOwner().modifyIncomeRate(-0.05)
endfunction
Princess of Light v1
1700
ID:
561
Family ID:
Author:
Boekie
Rarity:
rare
Element:
astral
Attack Type:
Magic
Attack Range:
1000
Attack CD:
1.5
Damage:
1989-1989
Mana:
30
Mana regen:
1.5
Status:
Approved

Description:

This tower is able to extract experience from creeps and energy from spells.
Specials:
+2 mana/lvl
Extract Experience
Casts a buff on a creep. Towers that damage this creep have a 33% chance to extract 1 experience. Buff lasts 10 seconds or until 10 extractions occur.

Level Bonus:
+0.05 experience
+1 extraction

AC_TYPE_OFFENSIVE_BUFF
 20, 1000 range, 5s cooldown
Channel Energy
Whenever this tower is hit by a friendly spell, the caster of that spell will be granted 1 experience and this tower will gain 15% bonus damage for 10 seconds. This effect stacks up to 15 times, but new stacks will not refresh the duration of olds ones.

Level Bonus:
+0.5% damage 
+0.1 seconds duration
Download

Toggle Triggers

Autocast

caster_art: AUTOCAST_cooldown: 5 AUTOCAST_numBuffsBeforeIdle: 3 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_BUFF AUTOCAST_manacost: 20 AUTOCAST_range: 1000 AUTOCAST_buffType: boekie_expGain_buff AUTOCAST_targetSelf: false AUTOCAST_targetType: TARGET_TYPE_CREEPS target_art: AUTOCAST_autoRange: 1000
private function onAutocast takes Tower tower returns nothing
    local integer level = tower.getLevel()
    set boekie_expGain_buff.apply(tower,Event.getTarget(),level).userInt = 10 + level
endfunction

Header

    globals
        //@export
        BuffType boekie_expGain_buff
        //@export
        BuffType boekie_lightSpeed_buff
    endglobals
        
    private function addExpToAttacker takes Buff b returns nothing
        if b.userInt > 0 then
            set b.userInt = b.userInt - 1
            call Event.getTarget().addExp(1.0 + (b.getLevel() * 0.05))
        else
            call b.removeBuff()
        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 = Modifier.create()
        
        set boekie_expGain_buff = BuffType.create(10.0,0.0,true)
        call boekie_expGain_buff.addEventOnDamaged(addExpToAttacker,0.33,0.0)  
        call boekie_expGain_buff.setBuffIcon('@@0@@')
        
        call m.addModification(MOD_DAMAGE_ADD_PERC,0.0,0.005) 
        set boekie_lightSpeed_buff = BuffType.create(-1,0,true)
        call boekie_lightSpeed_buff.setBuffModifier(m) 
        call boekie_lightSpeed_buff.setBuffIcon('@@1@@')
    endfunction

On Spell Target

function onSpellTarget takes Tower tower returns nothing
    local Unit caster = Event.getTarget()
    local Buff b = tower.getBuffOfType(boekie_lightSpeed_buff)
    local integer twrLevel = tower.getLevel()
    local integer UID = tower.getUID()
    local integer bonusDmg = 30 + twrLevel //each point = 0.5% dmg bonus

    if caster.isATower() then
        call caster.addExp(1) 
        if b == 0 then
            set boekie_lightSpeed_buff.apply(tower, tower, bonusDmg).userInt = 1
        else
            if b.userInt >= 15 then
                return //already at max stacks. ABORT!
            endif
            set b.userInt = b.userInt + 1
            call b.setPower(b.getPower() + bonusDmg)
        endif
        call TriggerSleepAction(10 + 0.01 * twrLevel)
        if tower.getUID() == UID then //make sure tower still alive
            set b = tower.getBuffOfType(boekie_lightSpeed_buff)
            if b != 0 then //make sure buff hasn't been purged or something
                if b.userInt <= 1 then
                    call b.removeBuff()
                else
                    set b.userInt = b.userInt - 1
                    call b.setPower(b.getPower() - bonusDmg)
                endif
            endif
        endif
    endif
endfunction
Caged Fire v1
1750
ID:
203
Family ID:
Author:
cedi
Rarity:
rare
Element:
fire
Attack Type:
Elemental
Attack Range:
900
Attack CD:
0.4
Damage:
266-266
Status:
Approved

Description:

The fire of the demon Nerz'ragul destroyed half of the world. After years the mighty spellcaster Theradom caged it in a magical circle.
Specials:
-50% dmg to magical
+50% dmg to nature (+1%/lvl)
Melt
The enormous heat of the caged fire decreases the armor of all creeps in 900 range by 1 and damages them by 20. Each second creeps in 900 range around the caged fire lose 0.5 extra armor and the fire damage will increase by 20.

Level Bonus:
+0.04 start armor reduction
+0.02 armor reduction
+0.8 damage
Download

Toggle Triggers

Header

    globals
        BuffType myBuff
    endglobals
    
    function Create takes Buff b returns nothing
        local integer lvl = b.getCaster().getLevel()
        set b.userReal = 1.0 + 0.04 * lvl
        set b.userReal2 = 20.0 + 0.8 * lvl
        call b.getBuffedUnit().modifyProperty( MOD_ARMOR, -b.userReal )
    endfunction
    
    function Destroy takes Buff b returns nothing
        call b.getBuffedUnit().modifyProperty( MOD_ARMOR, b.userReal )
    endfunction
    
    function Reaction takes Buff b returns nothing
        local integer lvl = b.getCaster().getLevel()
        
        set b.userReal = b.userReal + 0.5 + 0.02 * lvl
        set b.userReal2 = b.userReal2 + 20.0 + 0.8 * lvl
        
        call b.getCaster().doSpellDamage(b.getBuffedUnit(), b.userReal2, b.getCaster().calcSpellCritNoBonus()) 
        call b.getBuffedUnit().modifyProperty( MOD_ARMOR, -0.5 - 0.02 * lvl )
    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 = Modifier.create() 
        set myBuff = BuffType.createAuraEffectType(false)
        call myBuff.addPeriodicEvent( EventHandler.Reaction, 1.00 )
        call myBuff.addEventOnCleanup( EventHandler.Destroy )
        call myBuff.addEventOnCreate( EventHandler.Create )
        //call m.addModification(MOD_ARMOR,-1.0,-0.5)
        //call myBuff.setBuffModifier(m)
        call myBuff.setBuffIcon('@@0@@')
    endfunction

Tower Aura

AURA_auraEffect: myBuff AURA_power: 1 AURA_level: 1 AURA_auraRange: 900 AURA_targetType: TARGET_TYPE_CREEPS AURA_levelAdd: 0 AURA_powerAdd: 0 AURA_targetSelf: false
Ancient Brazier v1
1750
ID:
280
Family ID:
Author:
SirCoqaLot.
Rarity:
uncommon
Element:
fire
Attack Type:
Elemental
Attack Range:
865
Attack CD:
0.7
Damage:
765-825
Status:
Approved

Description:

Basic tower with high attackspeed and a multicritchance.
Specials:
15% crit chance (+1.5%/lvl)
x1.7 crit damage (+x0.03/lvl)
2 x multicrit
Download