Tiny Storm Lantern v1
250
ID:
380
Family ID:
Author:
Boekie
Rarity:
uncommon
Element:
storm
Attack Type:
Energy
Attack Range:
1000
Attack CD:
1.3
Damage:
207-207
Status:
Approved

Description:

This tower is able to release a burst attack.
Burst Lightning
Has a 20% chance on attack to fire 2 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
        ProjectileType ball 
    endglobals
    
    public function hit takes Projectile p, Unit creep returns nothing  
        local Tower tower = p.getCaster()  
        call tower.doAttackDamage(creep,tower.getCurrentAttackDamageWithBonus(), tower.calcAttackMulticrit(0.0,0.0,0))
    endfunction  
    
    //@export
    function newAttack takes Tower tower, integer numShots, Creep creep returns nothing
        local integer UID = creep.getUID()
        local Iterate it = Iterate.overUnitsInRangeOfUnit(tower,TARGET_CREEPS,creep,300)
        local Creep next
        call TriggerSleepAction(0.2)
        set next = it.nextRandom()
        loop
            if next == 0 then
                if creep.getUID() != UID then
                    return
                endif
                call Projectile.createFromUnitToUnit(ball,tower,1.0,0,tower,creep,true,false,false).setScale(0.50)
            else
                call Projectile.createFromUnitToUnit(ball,tower,1.0,0,tower,next,true,false,false).setScale(0.50)
                set next = it.nextRandom()
            endif
            set numShots = numShots - 1
            exitwhen numShots == 0
            call TriggerSleepAction(0.2)
        endloop
        if next != 0 then
            call it.destroy()
    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 ball = ProjectileType.create("Abilities\\Spells\\Orc\\Purge\\PurgeBuffTarget.mdl",4,1000)  
        call ball.enableHoming(ProjectileTargetEvent.hit,0)  
    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 = 2
    local integer twrLevel = tower.getLevel()
    if twrLevel == 25 then
        set numShots = 4 
    elseif twrLevel >= 15 then
        set numShots = 3
    endif
    
    call newAttack(tower,numShots,creep)
    
endfunction
Glaring Solar Orb v1
250
ID:
389
Family ID:
Author:
MasterCassim
Rarity:
common
Element:
astral
Attack Type:
Energy
Attack Range:
850
Attack CD:
1.3
Damage:
242-242
Status:
Approved

Description:

The blazing light of the sun makes its targets glow, especially undead ones.
Specials:
Splash attack:
   125 AoE: 45% damage
   225 AoE: 20% damage
+15% dmg to undead
Afterglow
The Orb has a 5% chance to reduce armor of units it damages by 3 for 5 seconds. This chance is doubled for bosses.

Level Bonus:
+0.6% chance
+0.25 seconds duration
Download

Toggle Triggers

Header

    globals
      //@import
      BuffType cassimArmor
    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
function onDamage takes Tower tower returns nothing
   local integer lvl = tower.getLevel()
   local Creep creep = Event.getTarget()
   local real sizeFactor = 1.0
   if creep.getSize() == SIZE_BOSS then
      set sizeFactor = 2.0
   endif
   if(tower.calcChance((0.05+lvl*0.006)*sizeFactor)) then
      call cassimArmor.applyCustomTimed(tower,creep,3,5+lvl*0.25)
   endif
endfunction
Militia Watchtower v1
250
ID:
417
Family ID:
Author:
ShyGnome
Rarity:
uncommon
Element:
iron
Attack Type:
Physical
Attack Range:
850
Attack CD:
0.7
Damage:
71-71
Status:
Approved

Description:

Militia guardians rain axes at the heads of the enemies. However, they are not very accurate, and afraid of undead and large creeps.
Specials:
-20% dmg to bosses (+0.6%/lvl)
-20% dmg to undead (+0.4%/lvl)
+20% dmg to nature (+0.4%/lvl)
Hail of Axes
Militia guardians throw axes to up to 3 enemies at once, but each attack has 33% chance to miss.  If there are less creeps than attacks, the remaining axes will hit the main target.

Level Bonus:
-1% chance to miss
+1 target at levels 15 and 25
Download

Toggle Triggers

Header

    globals
        //@export
        ProjectileType MilitiaAxe
    endglobals

    function MilitiaAxeHit takes Projectile p, Unit target returns nothing
   local Tower tower = p.getCaster()
   if tower.calcBadChance(0.33-0.01*tower.getLevel()) then
      call tower.getOwner().displayFloatingTextX("Miss",tower,255, 0, 0,255,0.05,0.0,2.0)
   else
      call tower.doAttackDamage(target,tower.getCurrentAttackDamageWithBonus(),tower.calcAttackCritNoBonus())
   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 MilitiaAxe = ProjectileType.createInterpolate("Abilities\\Weapons\\Axe\\AxeMissile.mdl",800)
            call MilitiaAxe.setEventOnInterpolationFinished(MilitiaAxeHit)
    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

    if tower.getLevel() >= 25 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(MilitiaAxe,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
    if tower.calcBadChance(0.33-0.01*tower.getLevel()) then
        set Event.damage = 0
        call tower.getOwner().displayFloatingTextX("Miss",tower,255, 0, 0,255,0.05,0.0,2.0)
    endif
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    set tower.userInt = 1 // Save the family member (1 = first member)
    set tower.userInt2 = 0 // Used to save the buff (double linked list)
endfunction
Restored Cage v1
250
ID:
581
Family ID:
Author:
Chronos
Rarity:
common
Element:
darkness
Attack Type:
Decay
Attack Range:
800
Attack CD:
1.5
Damage:
299-304
Status:
Approved

Description:

Common darkness tower, adept at eliminating magical, nature and undead foes.
Banish
Magic, undead and nature creeps damaged by this tower suffer an additional 45% of that damage as spelldamage.

Level Bonus:
+1.3% damage
Download

Toggle Triggers

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
    local Unit creep = Event.getTarget()
    if creep.getCategory() <= CATEGORY_NATURE then
        call tower.doSpellDamage(creep, Event.damage * (0.45 + (0.013 * tower.getLevel())), tower.calcSpellCritNoBonus())
        call SFXAtUnit("Abilities\\Spells\\NightElf\\ManaBurn\\ManaBurnTarget.mdl", creep.getUnit())
    endif
endfunction
Embershell Turtle Nestling v1
260
ID:
533
Family ID:
Author:
Velex
Rarity:
uncommon
Element:
fire
Attack Type:
Decay
Attack Range:
800
Attack CD:
0.25
Damage:
182-181
Mana:
12
Mana regen:
1
Status:
Approved

Description:

Embershell Turtles are volatile creatures who tend to sporadically attack just about everything. Luckily, they tend to run out of steam rather quickly.
Specials:
+0.6 mana/lvl
Overheat
Each attack costs 1 mana, which is regenerated at a rate of 1 mana per second.
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 (mana < 1) then
    call tower.orderStop()
  else
    call SetUnitState(towerUnit , UNIT_STATE_MANA, mana-1)
  endif
  set towerUnit = null
endfunction
Blooming Chasm v1
275
ID:
681
Family ID:
Author:
SirCoqaLot.
Rarity:
uncommon
Element:
nature
Attack Type:
Essence
Attack Range:
950
Attack CD:
1.4
Damage:
289-289
Status:
Approved

Description:

Basic tower that has a small chance to root creeps it attacks.
Entangle
Has a 12.5% chance to entangle the attacked target for 2.25 seconds. Entangled targets are immobile and suffer 660 damage per second. Cannot entangle air or boss units. 

Level Bonus:
+0.2% chance to entangle
+33 damage per second
Download

Toggle Triggers

Header

    globals
        //@import
        BuffType chasm_entangle
    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.125 ONDAMAGE_chanceLevelAdd: 0.002
function onDamage takes Tower tower returns nothing
    local Creep target = Event.getTarget()
    if target.getSize() < SIZE_BOSS and target.getSize() != SIZE_AIR then
        call chasm_entangle.apply(tower, target, 1)
        call target.reorder()
    endif
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    set tower.userInt = 660 //base entagle dps
endfunction
Digging Hole v1
280
ID:
126
Family ID:
Author:
drol
Rarity:
common
Element:
iron
Attack Type:
Decay
Attack Range:
900
Attack CD:
1.85
Damage:
508-542
Status:
Approved

Description:

Sometimes even the most fruitless places still have some treasure left.
Specials:
+20% bounty collected (+0.6%/lvl)
Download