Cute Small Spider v1
120
ID:
102
Family ID:
Author:
D1000
Rarity:
uncommon
Element:
nature
Attack Type:
Essence
Attack Range:
825
Attack CD:
1.2
Damage:
57-66
Status:
Unapproved

Description:

A cute small spider.
Ugh... It spat at me!
Specials:
-30% dmg to nature
+10% dmg to orcs
+20% dmg to humanoids
Poisonous Spittle
Units damaged by the spider become infected and receive 30 spell damage per second for 5 seconds. Further attacks on the same unit will increase the potency of the infection, stacking the damage and refreshing duration. Limit of 5 stacks. The highest stack amount of any spider that has infected a unit will be used.

Level Bonus:
+1.5 damage per second
+0.05 second duration
+1 stack every 5 levels
Download

Toggle Triggers

Header

    globals
        //@export
        BuffType D1000_Spider_Poison
        //@export
        EventTypeList D1000_Spider_Apply
    endglobals
    
    function D1000_Spider_Damage takes Buff b returns nothing
        local Unit caster = b.getCaster()
        call caster.doSpellDamage(b.getBuffedUnit(),b.userReal,caster.calcSpellCritNoBonus()) 
    endfunction
    
    function hit takes Tower tower returns nothing
        local Unit target = Event.getTarget()
        local Buff b = target.getBuffOfType(D1000_Spider_Poison)
        local integer level = tower.getLevel()
        local real addDam = tower.userInt+tower.userReal*level
        local real maxDam = tower.userInt2 + tower.userReal2 * level + addDam * (R2I(level / 5))
        if b <= 0 then
            set b = D1000_Spider_Poison.apply(tower, target, level)
            set b.userReal = addDam
            set b.userReal2 = maxDam
            set b.userReal3 = tower.getProp_SpellDmgDealt()
        else
            if b.userReal2 >= maxDam then
                set maxDam = b.userReal2
            endif
            
            if b.userReal+addDam >= maxDam then
                set addDam = maxDam
            else
                set addDam = b.userReal+addDam
            endif
            
            if b.userReal3 < tower.getProp_SpellDmgDealt() then
                call b.removeBuff()
                set b = D1000_Spider_Poison.apply(tower, target, level)
                set b.userReal3 = tower.getProp_SpellDmgDealt()
            else
                call b.setRemainingDuration(tower.userInt3 + tower.userReal3 * level)
            endif
            set b.userReal = addDam
            set b.userReal2 = maxDam
        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
        set D1000_Spider_Poison = BuffType.create(5,0.05,false)
        call D1000_Spider_Poison.setBuffIcon('@@0@@')
        call D1000_Spider_Poison.addPeriodicEvent(EventHandler.D1000_Spider_Damage,1) 
        set D1000_Spider_Apply = EventTypeList.create()
        call D1000_Spider_Apply.addEventOnDamage(hit, 1, 0)
    endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    call tower.addEventList(D1000_Spider_Apply)
    set tower.userInt = 30
    set tower.userReal = 1.5
    set tower.userInt2 = 150
    set tower.userReal2 = 7.5
    set tower.userInt3 = 5
    set tower.userReal3 = 0.05
endfunction
Ash Geyser v1
120
ID:
571
Family ID:
Author:
drol
Rarity:
uncommon
Element:
fire
Attack Type:
Elemental
Attack Range:
1100
Attack CD:
1.8
Damage:
106-115
Status:
Approved

Description:

A sleeping geyser that only sprouts fire now and then.
Specials:
Splash attack:
   175 AoE: 30% damage
+20% dmg to normals (+0.4%/lvl)
Ignite
The geyser has a 30% chance on damaging a creep to ignite the target, dealing 15% of the tower's attack damage as spell damage per second and reducing the target's health regeneration by 5% for 8 seconds.

Level Bonus:
+0.6% attack damage
+0.1% health regeneration reduction
Download

Toggle Triggers

Header

    globals
        //@export
        BuffType drol_fireDot
    endglobals
    
    function drol_fireDot_Damage takes Buff b returns nothing 
        call b.getCaster().doSpellDamage(b.getBuffedUnit(),b.userReal,b.getCaster().calcSpellCritNoBonus())  
    endfunction
    
    private function init takes nothing returns nothing
        local Modifier drol_fireMod = Modifier.create()
        set drol_fireDot = BuffType.create(8,0,false)
        call drol_fireDot.setBuffIcon('@@0@@')
        call drol_fireMod.addModification(MOD_HP_REGEN_PERC, -0.05, -0.001)
        call drol_fireDot.setBuffModifier(drol_fireMod)
        call drol_fireDot.addPeriodicEvent(EventHandler.drol_fireDot_Damage,1)
    endfunction

On Damage

ONDAMAGE_chance: 0.30 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
    set drol_fireDot.apply(tower,Event.getTarget(),tower.getLevel()).userReal = tower.getCurrentAttackDamageWithBonus() * (0.15 + tower.getLevel() * 0.006)
endfunction
Phantom v2
125
ID:
83
Family ID:
Author:
drol
Rarity:
uncommon
Element:
storm
Attack Type:
Magic
Attack Range:
900
Attack CD:
1.5
Damage:
148-148
Mana:
17
Mana regen:
1
Status:
Approved

Description:

Only seen above the highest clouds, this rare creature sears the sky.
Specials:
+0.1 mana regen/lvl
Wind Shear
Increases the attackspeed of a tower in 300 range by 10% and gives it a 25% attackspeed adjusted chance to cast a chain of lightning which deals 100 initial spelldamage and hits up to 3 targets dealing 25% less damage each bounce. Effect lasts for 5 seconds.

Level Bonus:
+1% attackspeed
+4 spelldamage
+1 target at level 20
+0.1 sec duration

AC_TYPE_ALWAYS_BUFF
 15, 300 range, 3s cooldown
Download

Toggle Triggers

Autocast

AUTOCAST_cooldown: 3 AUTOCAST_numBuffsBeforeIdle: 1 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_ALWAYS_BUFF AUTOCAST_manacost: 15 AUTOCAST_range: 300 AUTOCAST_buffType: drol_phantomBuff AUTOCAST_targetSelf: true AUTOCAST_targetType: TARGET_TYPE_TOWERS AUTOCAST_autoRange: 300 caster_art: target_art: Abilities\Spells\Items\AIlm\AIlmTarget.mdl
private function onAutocast takes Tower tower returns nothing
            
set drol_phantomBuff.apply(tower, Event.getTarget(), tower.getLevel()).userReal = tower.getLevel()
        
endfunction

Header

            globals
    
        //@export
        BuffType drol_phantomBuff
        //@export
        Cast drol_phantomCast
        //@export
        Cast drol_phantomCast2
    
    endglobals
    
    //Casts chain lightning on attack
    function phantomAttack takes Buff b returns nothing
        local Tower twr = b.getBuffedUnit()
        if b.getCaster().getLevel() < 20 then
            if twr.calcChance( 0.25 * twr.getBaseAttackspeed()) then
                call drol_phantomCast.targetCastFromCaster(twr, Event.getTarget(), 1. + b.userReal * 0.04, twr.calcSpellCritNoBonus())
            endif
        else
            if twr.calcChance( 0.25 * twr.getBaseAttackspeed()) then
                call drol_phantomCast2.targetCastFromCaster(twr, Event.getTarget(), 1. + b.userReal * 0.04, twr.calcSpellCritNoBonus())
            endif
        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()
        call m.addModification(MOD_ATTACKSPEED, 0.1, 0.01)
        
        set drol_phantomBuff = BuffType.create( 5.0, 0.1, true)
        
        call drol_phantomBuff.setBuffModifier(m)
        
        call drol_phantomBuff.setBuffIcon('@@2@@')
        
        call drol_phantomBuff.addEventOnAttack( phantomAttack, 1., 0.)
        
        set drol_phantomCast = Cast.create('@@0@@', "chainlightning", 5.0)
        call drol_phantomCast.setSourceHeight(40.0)
        
        set drol_phantomCast2 = Cast.create('@@1@@', "chainlightning", 5.0)
        call drol_phantomCast2.setSourceHeight(40.0)
    
    endfunction
        
Ruined Sun Pillar v1
130
ID:
404
Family ID:
Author:
geX
Rarity:
common
Element:
astral
Attack Type:
Energy
Attack Range:
1200
Attack CD:
2
Damage:
154-171
Status:
Approved

Description:

Basic Tower with a weak bouncing attack and bonus damage to undead enemies.
Specials:
Bounce attack:
   3 targets
   -48% damage per bounce
+21% dmg to undead (+2.1%/lvl)
Download
Small Plant v1
135
ID:
674
Family ID:
Author:
Boekie
Rarity:
common
Element:
nature
Attack Type:
Decay
Attack Range:
825
Attack CD:
1.75
Damage:
215-215
Status:
Approved

Description:

This plant is small but it grows very fast!
Specials:
+42% exp gain (-2.5%/lvl)
+5.5% damage/lvl
Download
Altar of Fortuity v1
140
ID:
206
Family ID:
Author:
Neotopia
Rarity:
common
Element:
iron
Attack Type:
Physical
Attack Range:
800
Attack CD:
1.5
Damage:
337-347
Status:
Approved

Description:

A very old Altar of an ancient religion. Still imbued with the power of the gods, maybe you should wake them up.
Warming Up
Each attack of this tower has a 40% chance to miss the target.

Level Bonus:
-0.6% miss chance
Download

Toggle Triggers

On Damage

ONDAMAGE_chance: 1 ONDAMAGE_chanceLevelAdd: 0
function onDamage takes Tower tower returns nothing
    if tower.calcBadChance( 0.4 - tower.getLevel() * 0.006 ) then
        set Event.damage = 0
        call tower.getOwner().displayFloatingTextX("Miss",tower,255, 0, 0,255,0.05,0.0,2.0)
    endif
endfunction
Creepy Tombstone v1
140
ID:
318
Family ID:
Author:
geX
Rarity:
common
Element:
darkness
Attack Type:
Decay
Attack Range:
1050
Attack CD:
1.95
Damage:
164-204
Status:
Approved

Description:

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

Level Bonus:
 +0.17% chance
Download

Toggle Triggers

On Damage

ONDAMAGE_chance: 0.01 ONDAMAGE_chanceLevelAdd: 0.0017
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