Grand Bomb Turret v1
2000
ID:
218
Family ID:
Author:
DaveMatthews
Rarity:
rare
Element:
iron
Attack Type:
Physical
Attack Range:
900
Attack CD:
2.6
Damage:
5113-5113
Status:
Approved

Description:

Can fire different bombs for a great versatility.
Concussive Bombs
Equips the tower with concussive bombs. Each attack slows all the creeps in a 300 area around the target by 25% for 4 seconds. 

Level Bonus:
+0.6% slow

AC_TYPE_NOAC_IMMEDIATE
 0, 0 range, 5s cooldown
Acid Bombs
Equips the tower with acid bombs. Each attack reduces the armor of all the creeps in a 300 area around the target by 15% for 4 seconds. 

Level Bonus:
+0.6% armor reduction

AC_TYPE_NOAC_IMMEDIATE
 0, 0 range, 5s cooldown
Smoke Bombs
Equips the tower with smoke bombs. Each attack silences all the creeps in a 300 area around the target for 1.5 seconds. 

Level Bonus:
+0.06 seconds duration

AC_TYPE_NOAC_IMMEDIATE
 0, 0 range, 5s cooldown
Download

Toggle Triggers

Autocast

caster_art: AUTOCAST_cooldown: 5 AUTOCAST_numBuffsBeforeIdle: 1 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_NOAC_IMMEDIATE AUTOCAST_manacost: 0 AUTOCAST_range: 0 AUTOCAST_buffType: dave_concussive AUTOCAST_targetSelf: true AUTOCAST_targetType: TARGET_TYPE_TOWERS target_art: AUTOCAST_autoRange: 0
private function onAutocast takes Tower tower returns nothing
if tower.getBuffOfType(dave_concussive)==0 then
  call dave_concussive.apply(tower, tower, tower.getLevel())
endif

if tower.getBuffOfType(dave_acid)!=0 then
  call tower.getBuffOfType(dave_acid).removeBuff()
endif
  
if tower.getBuffOfType(dave_smoke)!=0 then
  call tower.getBuffOfType(dave_smoke).removeBuff()
endif
endfunction

Autocast

caster_art: AUTOCAST_cooldown: 5 AUTOCAST_numBuffsBeforeIdle: 1 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_NOAC_IMMEDIATE AUTOCAST_manacost: 0 AUTOCAST_range: 0 AUTOCAST_buffType: dave_acid AUTOCAST_targetSelf: true AUTOCAST_targetType: TARGET_TYPE_TOWERS target_art: AUTOCAST_autoRange: 0
private function onAutocast takes Tower tower returns nothing
if tower.getBuffOfType(dave_acid)==0 then
  call dave_acid.apply(tower, tower, tower.getLevel())
endif

if tower.getBuffOfType(dave_concussive)!=0 then
  call tower.getBuffOfType(dave_concussive).removeBuff()
endif
  
if tower.getBuffOfType(dave_smoke)!=0 then
  call tower.getBuffOfType(dave_smoke).removeBuff()
endif
endfunction

Autocast

caster_art: AUTOCAST_cooldown: 5 AUTOCAST_numBuffsBeforeIdle: 1 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_NOAC_IMMEDIATE AUTOCAST_manacost: 0 AUTOCAST_range: 0 AUTOCAST_buffType: dave_smoke AUTOCAST_targetSelf: true AUTOCAST_targetType: TARGET_TYPE_TOWERS target_art: AUTOCAST_autoRange: 0
private function onAutocast takes Tower tower returns nothing
if tower.getBuffOfType(dave_smoke)==0 then
  call dave_smoke.apply(tower, tower, tower.getLevel())
endif

if tower.getBuffOfType(dave_acid)!=0 then
  call tower.getBuffOfType(dave_acid).removeBuff()
endif
  
if tower.getBuffOfType(dave_concussive)!=0 then
  call tower.getBuffOfType(dave_concussive).removeBuff()
endif
endfunction

Header

    globals
    //@import
    BuffType dave_concussive
    //@import
    BuffType dave_acid
    //@import
    BuffType dave_smoke
    //@import
    BuffType dave_concussive_buff
    //@import
    BuffType dave_acid_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 integer level = tower.getLevel()
local Unit creep = Event.getTarget()
local Unit u
local Iterate it
    
    if tower.getBuffOfType(dave_concussive)!=0 then
        set it = Iterate.overUnitsInRangeOfUnit(tower,TARGET_CREEPS,creep,300)
        loop
           set u = it.next()
           exitwhen u == 0
           call dave_concussive_buff.apply(tower,u,level)
        endloop
       call Effect.createScaled("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl", GetUnitX(creep.getUnit()), GetUnitY(creep.getUnit()), 0, 0, 1.0).setLifetime(0.2)
    elseif tower.getBuffOfType(dave_acid)!=0 then
        set it = Iterate.overUnitsInRangeOfUnit(tower,TARGET_CREEPS,creep,300)
        loop
           set u = it.next()
           exitwhen u == 0
           call dave_acid_buff.apply(tower, u, level)
        endloop
       call Effect.createScaled("Abilities\\Weapons\\ChimaeraAcidMissile\\ChimaeraAcidMissile.mdl", GetUnitX(creep.getUnit()), GetUnitY(creep.getUnit()), 0, 0, 1.3).setLifetime(0.2)
    elseif tower.getBuffOfType(dave_smoke)!=0 then
        set it = Iterate.overUnitsInRangeOfUnit(tower,TARGET_CREEPS,creep,300)
        loop
           set u = it.next()
           exitwhen u == 0
           call cb_silence.applyOnlyTimed(tower, u, 1.5+(0.06*level))
        endloop
       call Effect.createScaled("Abilities\\Spells\\Human\\CloudOfFog\\CloudOfFog.mdl", GetUnitX(creep.getUnit()), GetUnitY(creep.getUnit()), 0, 0, 0.8).setLifetime(0.5)
    endif
endfunction
Geothermal Refinery v1
2000
ID:
224
Family ID:
Author:
Velex
Rarity:
rare
Element:
fire
Attack Type:
Elemental
Attack Range:
700
Attack CD:
0.5
Damage:
848-848
Status:
Approved

Description:

Aura tower with a damage bonus aura.
Thermal Boost - Aura
Increases damage of towers in 200 range by 30%.

Level Bonus:
+0.8% damage
Download

Toggle Triggers

Header

    globals
        //@import
        BuffType velex_dmg_aura
    endglobals
    

    private function init takes nothing returns nothing
    endfunction

Tower Aura

AURA_powerAdd: 8 AURA_auraEffect: velex_dmg_aura AURA_levelAdd: 8 AURA_power: 300 AURA_targetType: TARGET_TYPE_TOWERS AURA_targetSelf: true AURA_level: 300 AURA_auraRange: 200
Green Lightning Storm v1
2000
ID:
264
Family ID:
Author:
drol
Rarity:
rare
Element:
storm
Attack Type:
Energy
Attack Range:
1200
Attack CD:
2
Damage:
1183-1782
Mana:
65
Mana regen:
0
Status:
Approved

Description:

This tower gains mana by attacking and can use it to gain an attackspeed boost.
Specials:
+20% dmg to magical
Lightning Surge
Increases the attackspeed of this tower by 200% for the next 5 attacks. The surge fades after 8 seconds.

Level Bonus:
+2% attackspeed
+1 attack per 5 levels

AC_TYPE_OFFENSIVE_IMMEDIATE
 60, 1200 range, 6s cooldown
Mana Feed
Attacks restore 4 mana to the tower and increase spell crit chance by 10%.

Hint: Mana regeneration increases mana gained.

Level Bonus:
+0.2% spell crit chance
Lightning Burst
Grants a 12.5% chance to deal 35 times current mana as spell damage on attack.
Resets the bonus spell crit of 'Mana Feed'.

Level Bonus:
+0.5% chance
Download

Toggle Triggers

Autocast

caster_art: AUTOCAST_cooldown: 6 AUTOCAST_numBuffsBeforeIdle: 0 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_IMMEDIATE AUTOCAST_manacost: 60 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
    
    set tower.userInt = 5 + tower.getLevel() / 5
    call drol_surge.apply(tower,tower,tower.getLevel()+50)
endfunction

Header

    globals
    //@import
    BuffType drol_surge
    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 unit towerUnit = tower.getUnit()
  local real mana = GetUnitState(towerUnit, UNIT_STATE_MANA)
  
  call SetUnitState(towerUnit , UNIT_STATE_MANA, mana + 4 * (1. + tower.getProp_ManaRegPercBonus()))
  
  call tower.modifyProperty(MOD_SPELL_CRIT_CHANCE, 0.1+(tower.getLevel()*0.002))
  set tower.userReal = tower.userReal + 0.1 + (tower.getLevel()*0.002)
  set towerUnit = null
endfunction

On Damage

ONDAMAGE_chance: 0.125 ONDAMAGE_chanceLevelAdd: 0.005
function onDamage takes Tower tower returns nothing
    local Effect targetEffect 
    local Creep creep = Event.getTarget()
    
    if not creep.isImmune() then
    
        set targetEffect = Effect.createScaled("Abilities\\Spells\\Human\\ManaFlare\\ManaFlareBoltImpact.mdl", GetUnitX(creep.getUnit()), GetUnitY(creep.getUnit()), 0, 0, 1.8)
        call targetEffect.setLifetime(1.0)
        call tower.doSpellDamage(creep, GetUnitState(tower.getUnit(), UNIT_STATE_MANA) * 35,tower.calcSpellCritNoBonus())
        call tower.modifyProperty(MOD_SPELL_CRIT_CHANCE, -(tower.userReal))
        set tower.userReal = 0.0
    
    endif
    
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    set tower.userReal = 0.0
    set tower.userInt = 0
    
endfunction
Freezing Sea Turtle v1
2000
ID:
283
Family ID:
Author:
i_mOck_death
Rarity:
rare
Element:
ice
Attack Type:
Energy
Attack Range:
900
Attack CD:
0.8
Damage:
1-1
Mana:
3200
Mana regen:
0
Status:
Approved

Description:

Become one with water. Become a turtle.
Specials:
+128 mana/lvl
Splash
Every attack the turtle restores 128 mana. Mana regeneration will increase mana restored. Mana degeneration will not decrease mana restored below 128.

Level Bonus:
+5.12 mana restored
Aqua Breath
This tower deals Energy damage equal to its mana.
Cold Blooded
Every second this tower loses 1.75% of its max mana.
Download

Toggle Triggers

On Attack

ONATTACK_chance: 1.0 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
            
local unit towerUnit = tower.getUnit()
    local real mana = GetUnitState(towerUnit, UNIT_STATE_MANA)
  
    if tower.getProp_ManaRegPercBonus() > 0 then
        call SetUnitState(towerUnit , UNIT_STATE_MANA, mana + (128+tower.getLevel()*5.12) * (1. + tower.getProp_ManaRegPercBonus()))
    else
        call SetUnitState(towerUnit , UNIT_STATE_MANA, mana + (128+tower.getLevel()))
    endif
    set towerUnit = null
        
endfunction

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
            
local Unit creep = Event.getTarget()
    call tower.doAttackDamage(creep, GetUnitState(tower.getUnit(), UNIT_STATE_MANA),tower.calcAttackMulticrit(0.0,0.0,0))
        
endfunction

Periodic

PERIODIC_period: 1
function periodic takes Tower tower returns nothing
            
call tower.subtractMana(GetUnitState(tower.getUnit(), UNIT_STATE_MAX_MANA)*.0175, false)
        
endfunction
Infested Mutating Acid Factory v1
2000
ID:
337
Family ID:
Author:
cedi
Rarity:
common
Element:
iron
Attack Type:
Decay
Attack Range:
800
Attack CD:
1
Damage:
879-899
Status:
Approved

Description:

Careful, corrosive.
Specials:
Bounce attack:
   3 targets
   -15% damage per bounce
Acid Coating
Decreases the armor of damaged units by 9.6 for 3 seconds.

Level Bonus:
+0.384 armor reduction
+0.12 seconds
Download

Toggle Triggers

Header

    globals
        //@import
        BuffType cedi_acidarmor
    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
    call cedi_acidarmor.applyCustomTimed( tower, Event.getTarget(), 9600 + tower.getLevel() * 384, 3.0 + 0.12 * tower.getLevel() )
endfunction
Huntress v1
2000
ID:
339
Family ID:
Author:
cedi
Rarity:
rare
Element:
nature
Attack Type:
Physical
Attack Range:
800
Attack CD:
1.8
Damage:
1730-1730
Status:
Approved

Description:

After having to forfeit her belief in Elune she seeked support from the dark and forbidden arts.
Specials:
Bounce attack:
   4 targets
   -25% damage per bounce
+2.4% attackspeed/lvl
Shadow Glaive
Whenever this tower attacks it has a 20% chance to gain 200% attackspeed until the next attack. The next attack will also crit for sure and deal 50% more crit damage.

Level Bonus:
+2% crit damage
+8% attack speed
+0.8% chance
Star Glaive
Whenever this tower damages a creep there is a 25% chance to deal additional 35% of the attack's damage as spell damage.

Level Bonus:
+0.4% chance
+1% attack damage as spell damage
Download

Toggle Triggers

Header

    globals
        //@import
        BuffType cedi_shadowgleve
    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 Buff B = tower.getBuffOfType( cedi_shadowgleve )
    
    if B != 0 then
        call tower.addModifiedAttackCrit( 0.00, 1.50 + tower.getLevel() / 50.0 )
        call B.removeBuff()
    endif
    
    if tower.calcChance( 0.2 + tower.getLevel() * 0.008 ) then
        call cedi_shadowgleve.apply( tower, tower, tower.getLevel() )
    endif
endfunction

On Damage

ONDAMAGE_chance: 0.25 ONDAMAGE_chanceLevelAdd: 0.004
function onDamage takes Tower tower returns nothing
    local real r = Event.damage * ( 0.35 + 0.01 * tower.getLevel() ) //( 1600.00 + tower.getLevel() * 64.0 ) +
    call tower.doSpellDamage( Event.getTarget(), r, tower.calcSpellCritNoBonus() )
    //call cb_stun.applyOnlyTimed( tower, Event.getTarget(), 0.35 )
    call SFXOnUnit( "Abilities\\Spells\\NightElf\\Starfall\\StarfallTarget.mdl", Event.getTarget().getUnit(), "origin" )
endfunction
Meteor Totem v1
2000
ID:
575
Family ID:
Author:
SirCoqaLot.
Rarity:
unique
Element:
fire
Attack Type:
Elemental
Attack Range:
850
Attack CD:
3.8
Damage:
1966-2966
Status:
Approved

Description:

A powerful Totem that causes other towers to release meteors that deal spell damage.
Specials:
Splash attack:
   325 AoE: 50% damage
Attraction
This tower buffs 4 towers in 500 range and gives them a 35% attackspeed adjusted chance on attack to release a meteor dealing 200 spell damage, or a 100% chance to release a meteor on spell cast dealing 500 spell damage. The Meteors fly towards a random target in 1000 range and deal damage in 220 AoE around the main target. The buff lasts until a meteor is released. 

Level Bonus:
+1 tower buffed every 5 levels 
+8 spell damage on attack 
+20 spell damage on cast

AC_TYPE_ALWAYS_BUFF
 0, 500 range, 4s cooldown
Torture
Targets damaged by this tower are debuffed for 2.5 seconds. Whenever a debuffed creep is dealt at least 500 attackdamage it receives an additional 8% of that damage as spell damage. This ability cannot crit. 

Level Bonus:
+0.05 seconds duration
+0.1% damage as spell damage
Download

Toggle Triggers

Autocast

AUTOCAST_cooldown: 4 AUTOCAST_autoRange: 500 AUTOCAST_manacost: 0 AUTOCAST_range: 500 AUTOCAST_targetType: 0 AUTOCAST_numBuffsBeforeIdle: 0 caster_art: target_art: AUTOCAST_autocastType: AC_TYPE_ALWAYS_BUFF AUTOCAST_buffType: 0 AUTOCAST_isExtended: false AUTOCAST_targetSelf: true
private function onAutocast takes Tower tower returns nothing
local Unit u 
local Iterate it = Iterate.overUnitsInRangeOfCaster(tower,TARGET_TOWERS,500) //iterating through towers in 500 range apllying the buff but not to itself
local integer number = 4 + R2I(tower.getLevel()/5)


    loop
        set u = it.nextRandom() 
        exitwhen u == 0 or number == 0
        if u != tower then
            set sir_totem_buff.applyAdvanced(tower,u,0,0,100).userInt = 0
            set number = number - 1 // substracting 1 
        endif
        
    endloop
    
    if u != 0 then
        call it.destroy()
    endif
    
endfunction

Header

    globals
    BuffType sir_totem_buff
    BuffType sir_totem_debuff
    ProjectileType sir_meteor_projectile
    endglobals
    
    function sir_totem_event takes Buff b returns nothing // doing meteor stuff
       local Tower tower = b.getCaster()
       local Tower buffed = b.getBuffedUnit()
       local Iterate it = Iterate.overUnitsInRangeOfCaster(buffed,TARGET_CREEPS,1000)
       local Unit result = it.nextRandom()
       local integer level = tower.getLevel()
        //searching a target in 1k range around tower
        
       if result != 0 then // if the ability has found a creep in range
            if b.userInt == 1 then
                set Projectile.createBezierInterpolationFromPointToUnit(sir_meteor_projectile,buffed,1,1,buffed.getX(),buffed.getY(),buffed.getZ()+1200,result,0.0,0,0.0,true).userInt = 200 + 8 * level     // on atk
            else
                set Projectile.createBezierInterpolationFromPointToUnit(sir_meteor_projectile,buffed,1,1,buffed.getX(),buffed.getY(),buffed.getZ()+1200,result,0.0,0,0.0,true).userInt = 500 + 20 * level// on cast
            endif
            call it.destroy()
       endif
       
       call b.removeBuff()  // purging the buff
    endfunction
    
    
    
    function sir_meteor_hit takes Projectile p, Unit u returns nothing
    local Tower tower = p.getCaster()    
    call tower.doSpellDamageAoE(p.x,p.y,220,p.userInt,tower.calcSpellCritNoBonus(),0)
    //dealing the damage calculated before
    call SFXAtPoint("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl",p.x,p.y)
    endfunction
    
    
    function sir_totem_onatk takes Buff b returns nothing // doing stuff for meteor on attack
    local Tower buffed = b.getBuffedUnit()
    
    if buffed.calcChance(buffed.getBaseAttackspeed()*0.35) then
            set b.userInt = 1
            call sir_totem_event(b)
    endif
    
    endfunction
    
    function sir_totem_attack takes Buff b returns nothing  // doing stuff when the tower itself is attacking
    local Tower caster = b.getCaster()
    local real damage = Event.damage * (0.08 + caster.getLevel()*0.001)
    local Creep target = b.getBuffedUnit()
    
    if Event.damage >= 500 and Event.isSpellDamage() == false then
        call caster.doSpellDamage(target,damage,1)
        call caster.getOwner().displaySmallFloatingText(I2S(R2I(damage*caster.getProp_SpellDmgDealt())),target,255,150,150,20)
    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 sir_totem_buff = BuffType.create(0,0,true)
    call sir_totem_buff.addEventOnAttack(sir_totem_onatk,1,0)
    call sir_totem_buff.addEventOnSpellCast(sir_totem_event)
    call sir_totem_buff.setBuffIcon('@@0@@')
    
    set sir_totem_debuff = BuffType.create(0,0,false)
    call sir_totem_debuff.setBuffIcon('@@1@@')
    call sir_totem_debuff.addEventOnDamaged(sir_totem_attack,1,0)
    
    set sir_meteor_projectile = ProjectileType.create("Abilities\\Weapons\\LordofFlameMissile\\LordofFlameMissile.mdl",10,950)
    call sir_meteor_projectile.setEventOnInterpolationFinished(sir_meteor_hit)
    
    endfunction

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
    call sir_totem_debuff.applyAdvanced(tower,Event.getTarget(),0,0,2.5+tower.getLevel()*0.05)// apllys the buff dealing x% additional damage
endfunction