Enraged Tree v1
1600
ID:
522
Family ID:
Author:
Boekie
Rarity:
uncommon
Element:
nature
Attack Type:
Physical
Attack Range:
950
Attack CD:
1.4
Damage:
1096-1115
Status:
Approved

Description:

An angry tree that has a chance to throw a big rock at its target.
Rock Throw
30% chance to throw a rock towards the attacked unit. On impact it deals 1200 spell damage in a 400 AoE. 

Level Bonus:
+0.6% chance
+40 damage
Download

Toggle Triggers

Header

    globals
        //@import
        ProjectileType boekie_tree_rock
    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 Attack

ONATTACK_chance: 0.30 ONATTACK_chanceLevelAdd: 0.006
function onAttack takes Tower tower returns nothing
    set Projectile.createLinearInterpolationFromUnitToUnit(boekie_tree_rock,tower,12.0+tower.getLevel()*0.40, tower.calcSpellCritNoBonus(),tower,Event.getTarget(),0.25,true).userReal = 400.0
endfunction
Green Dragon Roost v1
1600
ID:
538
Family ID:
Author:
Boekie
Rarity:
unique
Element:
nature
Attack Type:
Essence
Attack Range:
800
Attack CD:
2
Damage:
1048-1097
Status:
Approved

Description:

Increases the multi crit of nearby towers.
Specials:
Bounce attack:
   4 targets
   -10% damage per bounce
15% crit chance (+0.5%/lvl)
x1.5 crit damage (+x0.05/lvl)
Green Dragon Force - Aura
Increases the multicrit of towers in 200 range by 2.
Download

Toggle Triggers

Header

    globals
    
    BuffType boekie_multicrit_aura 
    
    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_multicrit_aura = BuffType.createAuraEffectType(true)  
    call m.addModification(MOD_MULTICRIT_COUNT,2,0.0)  
    call boekie_multicrit_aura.setBuffModifier(m)  
    call boekie_multicrit_aura.setStackingGroup("multicrit_aura")  
    call boekie_multicrit_aura.setBuffIcon('@@0@@') 
    endfunction

Tower Aura

AURA_auraEffect: boekie_multicrit_aura AURA_power: 0 AURA_level: 0 AURA_auraRange: 200 AURA_targetType: TARGET_TYPE_TOWERS AURA_levelAdd: 1 AURA_powerAdd: 1 AURA_targetSelf: true
Sparkling Storm Lantern v1
1600
ID:
552
Family ID:
Author:
Boekie
Rarity:
uncommon
Element:
storm
Attack Type:
Energy
Attack Range:
1000
Attack CD:
1.3
Damage:
990-990
Status:
Approved

Description:

This tower is able to release a burst attack.
Burst Lightning
Has a 20% chance on attack to fire 4 extra projectiles at random creeps in 300 range around the main target. Each extra projectile deals the same amount of damage as a normal attack. 

Level Bonus:
+1% chance
+1 extra projectile at levels 15 and 25
Download

Toggle Triggers

Header

    globals
    endglobals
    
    //@import
    function newAttack takes Tower tower, integer numShots, Creep creep 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.20 ONATTACK_chanceLevelAdd: 0.01
function onAttack takes Tower tower returns nothing
    local Creep creep = Event.getTarget()
    local integer numShots = 4
    local integer twrLevel = tower.getLevel()
    if twrLevel == 25 then
        set numShots = 6 
    elseif twrLevel >= 15 then
        set numShots = 5
    endif
    
    call newAttack(tower,numShots,creep)
    
endfunction
Library v1
1600
ID:
620
Family ID:
Author:
SirCoqaLot.
Rarity:
uncommon
Element:
astral
Attack Type:
Energy
Attack Range:
960
Attack CD:
2.6
Damage:
3602-3602
Status:
Approved

Description:

Basic astral tower that strengthens itself by acummulating knowledge from its books.
High Knowledge
Grants 0.85 experience on attack.
Download

Toggle Triggers

On Attack

ONATTACK_chance: 1.0 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
    call tower.addExp (0.85)
endfunction
Phoenix v1
1650
ID:
148
Family ID:
Author:
Der_kleine_Tomy
Rarity:
rare
Element:
fire
Attack Type:
Elemental
Attack Range:
850
Attack CD:
2.5
Damage:
1307-1307
Status:
Approved

Description:

A phoenix which can burn more than 1 target with its attacks.
Specials:
+20% dmg to nature (+1%/lvl)
Eruption
When Phoenixfire expires, it erupts and deals 260 elemental damage per armor point the creep is missing in 200 range around its target. Additionally the target regains only 60% of its armor. Creeps further away recieve less damage. This ability can be cast to make Phoenixfire expire immediately.

Level Bonus:
-1.5% armor regain

AC_TYPE_NOAC_IMMEDIATE
 0, 0.0 range, 1.0s cooldown
Phoenixfire
The Phoenix attacks up to 3 targets at once. If there are less creeps than attacks, the remaining attacks will hit the main target. The armor of attacked creeps melts, reducing it by 0.6 for 5 seconds. This buff is stackable.

Level Bonus:
+0.015 armor reduction
+1 target at level 15
Download

Toggle Triggers

Autocast

caster_art: AUTOCAST_cooldown: 1.0 AUTOCAST_numBuffsBeforeIdle: 0 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_NOAC_IMMEDIATE AUTOCAST_manacost: 0 AUTOCAST_range: 0.0 AUTOCAST_buffType: 0 AUTOCAST_targetSelf: true AUTOCAST_targetType: 0 target_art: AUTOCAST_autoRange: 0.0
private function onAutocast takes Tower tower returns nothing
    local Buff b
    local Iterate it = Iterate.overUnitsInRangeOfCaster(tower, TARGET_TYPE_CREEPS, 3000.0)
    local Unit u
    loop
        set u = it.next()
        exitwhen u == 0
        set b = u.getBuffOfType(tomy_PhoenixFireBuff)
        if b != 0 then
            call b.removeBuff()
        endif
    endloop
endfunction

Header

    globals
        //@import
        ProjectileType tomy_PhoenixPT
        //@import
        BuffType tomy_PhoenixFireBuff
    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 Attack

ONATTACK_chance: 1.0 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
    local integer attacks = 2
    local boolean add = false
    local Unit maintarget = Event.getTarget()
    local Unit target
    local Iterate it = Iterate.overUnitsInRangeOfUnit(tower,TARGET_TYPE_CREEPS,maintarget,450)
    local real sidearc = 0.20
    local boolean itDestroyed = false
 
    if tower.getLevel() >= 15 then
        set attacks = attacks + 1
    endif
 
    loop
        exitwhen attacks == 0 // Exit when all attacks are fired
        
        // If the Iterate is not destroyed, get the next target
        if not itDestroyed then
            set target = it.next()
        
            // If there are no more targets
            if target == 0 then
                set itDestroyed = true // Iterate is destroyed (auto destroy)
                set target = maintarget // target is the maintarget now
            endif
        endif
  
        // If there are no more units, shoot at the maintarget (itDestroyed). If there are units then don't shoot at the maintarget
        if itDestroyed or target != maintarget then
            call Projectile.createBezierInterpolationFromUnitToUnit(tomy_PhoenixPT,tower,0,0,tower,target,0,sidearc,0,true).setScale(0.40)
            set attacks = attacks - 1
            set sidearc = -sidearc
            if add then
                set sidearc = sidearc + 0.20
            endif
            set add = not add
        endif
    endloop
 
    // If the Iterate is not destroyed yet, destroy it
    if not itDestroyed then
        call it.destroy()
    endif  
endfunction

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
    local Unit target = Event.getTarget()
    local Buff b = target.getBuffOfType(tomy_PhoenixFireBuff)
    local integer level = tower.getLevel()
    local real armorLoss = 0.60 + 0.015 * level
        
    if b != 0 then
        call tomy_PhoenixFireBuff.apply(tower, target, b.getPower() + R2I(armorLoss * 100.0))
    else
        call tomy_PhoenixFireBuff.apply(tower, target, R2I(armorLoss * 100.0))
    endif
 
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    set tower.userInt = 2 // Save the family member (1 = first member)
    set tower.userInt2 = 0 // Used to save the buff (double linked list)
    call AddUnitAnimationProperties(tower.getUnit(), "stand alternate", false)
endfunction
Infernal Dog v1
1680
ID:
75
Family ID:
Author:
cedi
Rarity:
uncommon
Element:
fire
Attack Type:
Decay
Attack Range:
800
Attack CD:
1.2
Damage:
1712-1712
Status:
Approved

Description:

The hounds of war are howling again.
Specials:
+7% damage/lvl
Roar
Whenever this tower damages a unit it has 30% chance to release a battle cry. The cry increases the attack damage of all towers in 420 range by 5% for 5 seconds. If a tower has allready the roar buff the attack damage is increased by 0.75% and the duration is refreshed. Stacks up to 100 times.

Level Bonus:
+0.75% attack damage
Download

Toggle Triggers

Header

    globals
        //@import
        BuffType cedi_helldog
    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.3 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
    local Iterate I = Iterate.overUnitsInRangeOfCaster( tower, TARGET_TYPE_TOWERS, 420.0 )
    local Unit U 
    local Buff B
    call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\NightElf\\BattleRoar\\RoarCaster.mdl", tower.getUnit(), "origin" ) )
    loop
        set U = I.next()
        exitwhen U == 0
        set B = U.getBuffOfType( cedi_helldog )
        if B != 0 then
            if B.userInt < 100 then
                call cedi_helldog.apply( tower, U, B.getLevel() + 15 )
                set B.userInt = B.userInt + 1
            else
                call B.refreshDuration()
            endif
        else
            call cedi_helldog.apply( tower, U, tower.getLevel() * 15 )
            set B.userInt = 0
        endif
    endloop
    //0.0005  0.003, 0.0045, 0.006, 0.0075, 0.009
    //0.05    0.05 , 0.05  , 0.05 , 0.05  , 0.05
    //        70   , 210   , 840  , 1680  , 3360
endfunction
Hurricane Dog v1
1680
ID:
245
Family ID:
Author:
cedi
Rarity:
uncommon
Element:
storm
Attack Type:
Energy
Attack Range:
900
Attack CD:
1.5
Damage:
2062-2070
Status:
Approved

Description:

Do you hear the howl of the storm?
Specials:
+2.1% attackspeed/lvl
Thunderous Roar
Whenever this tower damages a unit it has 30% chance to release a battle cry. The cry increases the attack speed of all towers in 420 range by 5% for 5 seconds. If a tower already has the thunderous roar buff the attack speed is increased by 0.75% and the duration is refreshed. Stacks up to 100 times.

Level Bonus:
+0.75% attack speed
Download

Toggle Triggers

Header

    globals
        //@import
        BuffType cedi_stormdog
    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.3 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
    local Iterate I = Iterate.overUnitsInRangeOfCaster( tower, TARGET_TYPE_TOWERS, 420.0 )
    local Unit U 
    local Buff B
    call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\NightElf\\Taunt\\TauntCaster.mdl", tower.getUnit(), "origin" ) )
    loop
        set U = I.next()
        exitwhen U == 0
        set B = U.getBuffOfType( cedi_stormdog )
        if B != 0 then
            if B.userInt < 100 then
                call cedi_stormdog.apply( tower, U, B.getLevel() + 15 )
                set B.userInt = B.userInt + 1
            else
                call B.refreshDuration()
            endif
        else
            set B = cedi_stormdog.apply( tower, U, tower.getLevel() * 15 )
            set B.userInt = 0
        endif
    endloop
endfunction