Cursed Tombstone v1
400
ID:
354
Family ID:
Author:
geX
Rarity:
common
Element:
darkness
Attack Type:
Decay
Attack Range:
1050
Attack CD:
1.9
Damage:
447-547
Status:
Approved

Description:

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

Level Bonus:
 +0.2% chance
Download

Toggle Triggers

On Damage

ONDAMAGE_chance: 0.012 ONDAMAGE_chanceLevelAdd: 0.002
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
Nature Sprites v1
400
ID:
396
Family ID:
Author:
DaveMatthews
Rarity:
uncommon
Element:
nature
Attack Type:
Essence
Attack Range:
900
Attack CD:
1.2
Damage:
338-338
Mana:
50
Mana regen:
2.5
Status:
Approved

Description:

Friendly spirits that live in the trees.
Nature's Gift
One of the spirits flies towards a tower in 500 range and buffs it for 5 seconds. The buff has a different effect depending on the tower's element:
+28% experience for Astral
+16% spell damage for Darkness
+4% crit chance for Nature
+16% damage for Fire
+20% buff duration for Ice
+8% attack speed for Storm
+6% item chance for Iron
The buffed tower has a 25% chance to receive another random effect in addition to the first one.

Level Bonus:
+0.8% experience
+0.4% spell damage
+0.1% crit chance
+0.4% damage
+0.6% buff duration
+0.2% attack speed
+0.14% item chance

AC_TYPE_OFFENSIVE_BUFF
 45, 500 range, 2s cooldown
Download

Toggle Triggers

Autocast

AUTOCAST_cooldown: 2 AUTOCAST_autoRange: 500 AUTOCAST_manacost: 45 AUTOCAST_range: 500 AUTOCAST_targetType: TARGET_TYPE_TOWERS AUTOCAST_numBuffsBeforeIdle: 5 caster_art: target_art: AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_BUFF AUTOCAST_buffType: 0 AUTOCAST_isExtended: false AUTOCAST_targetSelf: false
private function onAutocast takes Tower tower returns nothing
    local Projectile p
    set p = Projectile.createFromUnitToUnit(dave_sprite, tower, 0, 0, tower, Event.getTarget(), true, false, false)
    call p.setScale(0.75)
    call p.color(50,255,50,255)
endfunction

Header

    globals
        BuffType dave_gift
        //@export
        ProjectileType dave_sprite
    endglobals
    
function gift_create takes Buff B returns nothing
    local Tower target = B.getBuffedUnit()
    local Tower tower = B.getCaster()
    local integer elem = target.getCategory()
    local integer relem
    local integer level = B.getLevel()
    local real memberModifier = tower.userReal // scale factor based on family member
    
    // Ensure caster is still alive.
    if tower == 0 then
        return
    endif

    if elem == Element.ASTRAL then
        set B.userInt = MOD_EXP_RECEIVED
        set B.userReal = (0.28 + level * 0.008) * memberModifier
    elseif elem == Element.DARKNESS then
        set B.userInt = MOD_SPELL_DAMAGE_DEALT
        set B.userReal = (0.16 + level * 0.004) * memberModifier
    elseif elem == Element.NATURE then
        set B.userInt = MOD_ATK_CRIT_CHANCE
        set B.userReal = (0.04 + level * 0.001) * memberModifier
    elseif elem == Element.FIRE then
        set B.userInt = MOD_DAMAGE_ADD_PERC
        set B.userReal = (0.16 + level * 0.004) * memberModifier
    elseif elem == Element.ICE  then
        set B.userInt = MOD_BUFF_DURATION
        set B.userReal = (0.2 + level * 0.006) * memberModifier
    elseif elem == Element.STORM  then
        set B.userInt = MOD_ATTACKSPEED
        set B.userReal = (0.08 + level * 0.002) * memberModifier
    elseif elem == Element.IRON  then
        set B.userInt = MOD_ITEM_CHANCE_ON_KILL
        set B.userReal = (0.06 + level * 0.0016) * memberModifier
    endif
    // Apply the modification
    call target.modifyProperty(B.userInt, B.userReal)

    if tower.calcChance(0.25) then
        set relem = GetRandomInt(0,5)
        // Relem cannot be 6 (IRON), so we apply iron buff if elem == relem.
        if elem == relem  then
            set B.userInt2 = MOD_ITEM_CHANCE_ON_KILL
            set B.userReal2 = (0.06 + level * 0.0016) * memberModifier
        elseif relem == Element.ASTRAL then
            set B.userInt2 = MOD_EXP_RECEIVED
            set B.userReal2 = (0.28 + level * 0.008) * memberModifier
        elseif relem == Element.DARKNESS then
            set B.userInt2 = MOD_SPELL_DAMAGE_DEALT
            set B.userReal2 = (0.16 + level * 0.004) * memberModifier
        elseif relem == Element.NATURE then
            set B.userInt2 = MOD_ATK_CRIT_CHANCE
            set B.userReal2 = (0.04 + level * 0.001) * memberModifier
        elseif relem == Element.FIRE then
            set B.userInt2 = MOD_DAMAGE_ADD_PERC
            set B.userReal2 = (0.16 + level * 0.004) * memberModifier
        elseif relem == Element.ICE  then
            set B.userInt2 = MOD_BUFF_DURATION
            set B.userReal2 = (0.2 + level * 0.006) * memberModifier
        elseif relem == Element.STORM  then
            set B.userInt2 = MOD_ATTACKSPEED
            set B.userReal2 = (0.08 + level * 0.002) * memberModifier
        endif
        // Apply the bonus modification
        call target.modifyProperty(B.userInt2, B.userReal2)
        set B.userInt3 = Effect.createColored("Abilities\\Weapons\\KeeperGroveMissile\\KeeperGroveMissile.mdl", target.getX(), target.getY(), 150, 0, 0.9, 255, 180, 180, 255)
    else
        set B.userInt2 = 0
        set B.userInt3 = Effect.createScaled("Abilities\\Weapons\\KeeperGroveMissile\\KeeperGroveMissile.mdl", target.getX(), target.getY(), 150, 0, 0.75)
    endif
    
endfunction

function effect_clean takes Buff B returns nothing
    local Tower target = B.getBuffedUnit()
    // Remove the modification
    call target.modifyProperty(B.userInt, -B.userReal)
    if B.userInt2 != 0 then
        // Remove the bonus modification
        call target.modifyProperty(B.userInt2, -B.userReal2)
    endif
    if B.userInt3 != 0 then
      call Effect(B.userInt3).destroy()
    endif
endfunction

function spritehit takes Projectile P, Unit target returns nothing
    local Tower tower = P.getCaster()
    call dave_gift.apply(tower, target, tower.getLevel())
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 dave_gift = BuffType.create(5,0,true)
     call dave_gift.setBuffIcon('@@0@@')
     call dave_gift.addEventOnCreate(gift_create)
     call dave_gift.addEventOnCleanup(effect_clean)
     
     set dave_sprite = ProjectileType.create("Abilities\\Weapons\\KeeperGroveMissile\\KeeperGroveMissile.mdl",4,400)
     call dave_sprite.enableHoming(ProjectileTargetEvent.spritehit,0)
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    set tower.userReal = 1.0 //Member buff strength modifier
endfunction
Greater Shrub v1
400
ID:
459
Family ID:
Author:
gex
Rarity:
common
Element:
nature
Attack Type:
Physical
Attack Range:
880
Attack CD:
0.9
Damage:
299-299
Status:
Approved

Description:

Common nature tower with an increased critical strike chance and damage.
Specials:
5% crit chance (+0.4%/lvl)
x1.5 crit damage (+x0.04/lvl)
Download
Cold Obelisk v1
400
ID:
539
Family ID:
Author:
Boekie
Rarity:
uncommon
Element:
ice
Attack Type:
Elemental
Attack Range:
600
Attack CD:
2.1
Damage:
681-681
Status:
Approved

Description:

A frightfully blue column of solid ice, worshipped by cold blooded folk.
Specials:
Splash attack:
   140 AoE: 35% damage
+45% dmg to masses (+2%/lvl)
Absolute Zero
The Obelisk slows creeps it damages by 18% for 4 seconds.

Level Bonus:
+0.4% slow
Download

Toggle Triggers

Header

    globals
        //@export
        BuffType mcSlow
    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 slow=Modifier.create()  
        call slow.addModification(MOD_MOVESPEED,0,-0.001)  
        set mcSlow=BuffType.create(0,0,false)
        call mcSlow.setBuffIcon('@@0@@')
        call mcSlow.setBuffModifier(slow)
    endfunction

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
    local integer s = R2I((18+tower.getLevel()*0.4)*10)
    
    call mcSlow.applyCustomTimed(tower,Event.getTarget(), s, 4) 
endfunction
Fiery Rock v1
400
ID:
653
Family ID:
Author:
geX
Rarity:
common
Element:
fire
Attack Type:
Elemental
Attack Range:
900
Attack CD:
1.2
Damage:
389-455
Status:
Approved

Description:

Basic tower with low splash damage
Specials:
Splash attack:
   170 AoE: 25% damage
Download
Storm Column v1
420
ID:
481
Family ID:
Author:
geX
Rarity:
common
Element:
storm
Attack Type:
Energy
Attack Range:
1600
Attack CD:
1.2
Damage:
160-580
Status:
Approved

Description:

Basic long ranged tower.
Download
Accumulated Knowledge v1
450
ID:
618
Family ID:
Author:
SirCoqaLot.
Rarity:
uncommon
Element:
astral
Attack Type:
Energy
Attack Range:
960
Attack CD:
2.6
Damage:
960-960
Status:
Approved

Description:

Basic astral tower that strengthens itself by acummulating knowledge from its books.
High Knowledge
Grants 0.55 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.55)
endfunction