Owl of Wisdom v1
2300
ID:
190
Family ID:
Author:
Der_kleine_Tomy
Rarity:
unique
Element:
astral
Attack Type:
Energy
Attack Range:
900
Attack CD:
2
Damage:
1756-1756
Status:
Approved

Description:

Strong spell damage tower which gets stronger with experience. Can even damage immune units with it's spells.
Specials:
5% spell crit chance (+0.15%/lvl)
+1% spell damage/lvl
Weak Spots:
The Owl of Wisdom is able to find weak spots even on magic immune units. It's Energyball deals 10% of its spell damage as energy damage to immune units.

Level Bonus:
+0.4% damage
Energyball
The Owl of Wisdom has a 25% chance on attack to cast Energyball on the attacked creep. The Energyball deals 4500 + [2.25x Towerexp] spell damage in a 100 AoE around the attacked creep. The experience bonus cannot exceed [150x current wave] damage.

Level Bonus:
+1 AoE
+0.4% chance
Energy Aura
Every 5 seconds, for each creep in 900 range the Owl of Wisdom has a 10% chance to cast Energyball on it.

Level Bonus:
+0.2% chance
Download

Toggle Triggers

Header

    globals
    //@export
      ProjectileType tomy_energyballPT
    endglobals
    
    private function Tomy_Energyball_Damage takes Projectile p, Unit target returns nothing
        local Tower tower = p.userInt
        local real damage
        local real immunedamage
  
        // Owl of Wisdom
        if tower.userInt == 1 then
            set damage = 4500.0 + RMinBJ(tower.getExp() * 2.25, tower.getOwner().getTeam().getLevel() * 150.0)
            set immunedamage = (10.0 + 0.4 * tower.getLevel()) / 100
        else // Ancient Owl of Wisdom
            set damage = 6500.0 + RMinBJ(tower.getExp() * 3.25, tower.getOwner().getTeam().getLevel() * 150.0)
            set immunedamage = (15.0 + 0.6 * tower.getLevel()) / 100
        endif
      
        if not target.isImmune() then
            call tower.doSpellDamageAoEUnit(target, 100 + (1* tower.getLevel()),damage, tower.calcSpellCritNoBonus(),0)
        else
            call tower.doAttackDamageAoEUnit(target,100 + (1* tower.getLevel()) ,damage * immunedamage * tower.getProp_SpellDmgDealt(), tower.calcSpellCritNoBonus(), 0)
        endif
  
        call Effect.createColored("Units\\NightElf\\Wisp\\WispExplode.mdl",p.x,p.y,p.z,0,0.70,0,0,255,255).setLifetime(1.0)    
    endfunction
    
 
    function Tomy_Energyball_Start takes Unit target, Tower tower returns nothing
        set Projectile.createFromUnitToUnit(tomy_energyballPT, tower, 0, 0, tower, target, true, false, false).userInt = tower 
    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 tomy_energyballPT = ProjectileType.create("Abilities\\Spells\\Undead\\DarkSummoning\\DarkSummonMissile.mdl", 5.0, 950.0)
        call tomy_energyballPT.enableHoming(ProjectileTargetEvent.Tomy_Energyball_Damage, 0.0)
    endfunction

On Attack

ONATTACK_chance: 0.25 ONATTACK_chanceLevelAdd: 0.004
function onAttack takes Tower tower returns nothing
    call Tomy_Energyball_Start(Event.getTarget(), tower)  
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    set tower.userInt = 1
endfunction

Periodic

PERIODIC_period: 5.0
function periodic takes Tower tower returns nothing
 
    local Unit target
    local Iterate it = Iterate.overUnitsInRangeOfCaster(tower,TARGET_CREEPS,900)
   
    loop
        set target = it.next()
        exitwhen target == 0
        if tower.calcChance(0.10+0.002*tower.getLevel()) then
            call Tomy_Energyball_Start(target, tower)
        endif 
    endloop
  
endfunction
Xtreme Shrubfield v1
2300
ID:
565
Family ID:
Author:
gex
Rarity:
common
Element:
nature
Attack Type:
Physical
Attack Range:
1000
Attack CD:
0.9
Damage:
1360-1360
Status:
Approved

Description:

Common nature tower with an increased critical strike chance and damage.
Specials:
10% crit chance (+0.7%/lvl)
x2 crit damage (+x0.07/lvl)
Download
Hell Rock v1
2350
ID:
35
Family ID:
Author:
geX
Rarity:
common
Element:
fire
Attack Type:
Elemental
Attack Range:
900
Attack CD:
1.2
Damage:
2247-2637
Status:
Approved

Description:

Basic tower with low splash damage
Specials:
Splash attack:
   200 AoE: 25% damage
Download
Servant of the Twin Flames v1
2350
ID:
212
Family ID:
Author:
DaveMatthews
Rarity:
unique
Element:
fire
Attack Type:
Physical
Attack Range:
900
Attack CD:
1.1
Damage:
2043-2043
Status:
Approved

Description:

A fighter skilled in both physical and magical attacks.
Twin Pulses
Every time this tower has launched 8 red flames, it releases a green pulse, dealing 55% of its attack damage as spell damage in 900 AoE and every time it has launched 8 green flames, it releases a red pulse, dealing 55% of its attack damage as physical damage in 900 AoE. 

Level Bonus: 
+0.5% damage 
-1 flame needed at level 15 and 25
Twin Flames
On each attack, this tower has a chance equal to its crit chance to launch a green flame, dealing 65% of tower's attack damage as spell damage, and a chance equal to its spell crit chance to launch a red flame, dealing 65% of tower's attack damage as physical damage. 

Level Bonus: 
+0.5% damage
Twin Disciplines
Each time it scores a critical hit with an attack, this tower gains 1% bonus critical chance or spell critical chance, both stacking up to 10 times, for 7 seconds. The lower chance will always be prioritized.
Download

Toggle Triggers

Header

    globals
        //@export
        BuffType dave_physical_buff
        //@export
        BuffType dave_spell_buff
        //@export
        ProjectileType dave_red
        //@export
        ProjectileType dave_green
    endglobals
    
    
    function redHit takes Projectile p, Unit creep returns nothing  
        local Tower tower = p.getCaster()
        local integer level= tower.getLevel()
        call tower.doAttackDamage(creep,tower.getCurrentAttackDamageWithBonus()*p.userReal, tower.calcAttackMulticrit(0,0,0))  
    endfunction
    
    function greenHit takes Projectile p, Unit creep returns nothing  
        local Tower tower = p.getCaster()
        local integer level= tower.getLevel()
        call tower.doSpellDamage(creep,tower.getCurrentAttackDamageWithBonus()*p.userReal, tower.calcSpellCritNoBonus())  
    endfunction
    

    private function init takes nothing returns nothing
        local Modifier m = Modifier.create()
        local Modifier n = Modifier.create()
        
        //Physical
        set dave_physical_buff = BuffType.create(7,0,true)
        call m.addModification(MOD_ATK_CRIT_CHANCE,0,0.01)
        call dave_physical_buff.setBuffModifier(m)
        call dave_physical_buff.setBuffIcon('@@1@@')
        
        //Spell        
        set dave_spell_buff = BuffType.create(7,0,true)
        call n.addModification(MOD_SPELL_CRIT_CHANCE,0,0.01)         
        call dave_spell_buff.setBuffModifier(n)
        call dave_spell_buff.setBuffIcon('@@0@@')
        
        //Missiles
        set dave_red = ProjectileType.create("Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl",4,1000) 
        call dave_red.setEventOnInterpolationFinished(ProjectileTargetEvent.redHit)
        set dave_green = ProjectileType.create("Abilities\\Weapons\\GreenDragonMissile\\GreenDragonMissile.mdl",4,1000)
        call dave_green.setEventOnInterpolationFinished(ProjectileTargetEvent.greenHit)
        
    endfunction

On Attack

ONATTACK_chance: 1 ONATTACK_chanceLevelAdd: 0
function onAttack takes Tower tower returns nothing
local Projectile p
local Iterate it
local Effect e
local Unit u
local integer level = tower.getLevel()

if tower.calcChance( tower.getProp_SpellCritChance() ) then
    set Projectile.createBezierInterpolationFromUnitToUnit(dave_red,tower,1,1,tower,Event.getTarget(),0,0.3,0,true).userReal = 0.65+0.005*level
    if tower.userInt >= tower.userInt3 then
        set tower.userInt = 0
        set it = Iterate.overUnitsInRangeOfCaster(tower,TARGET_CREEPS,900)
        loop
          set u = it.next()
          exitwhen u == 0
          call tower.doSpellDamage(u,tower.getCurrentAttackDamageWithBonus()*(0.55+0.005*level),tower.calcSpellCritNoBonus())
          call SFXOnUnit("Abilities\\Spells\\NightElf\\Immolation\\ImmolationDamage.mdl",u.getUnit(), "chest")
          set e = Effect.createColored("Abilities\\Spells\\Demon\\DarkConversion\\ZombifyTarget.mdl",tower.getX()-48,tower.getY()+48, 40, 0.0, 0.42, 0, 255, 0, 255)
          call e.setLifetime(0.5)
        endloop
    else
        set tower.userInt = tower.userInt + 1
    endif
endif
    
if tower.calcChance( tower.getProp_AtkCritChance() ) then
    set Projectile.createBezierInterpolationFromUnitToUnit(dave_green,tower,1,1,tower,Event.getTarget(),0,-0.3,0,true).userReal = 0.65+0.005*level
    if tower.userInt2 >= tower.userInt3 then
        set tower.userInt2 = 0
        set it = Iterate.overUnitsInRangeOfCaster(tower,TARGET_CREEPS,900)
        loop
          set u = it.next()
          exitwhen u == 0
          call tower.doAttackDamage(u,tower.getCurrentAttackDamageWithBonus()*(0.55+0.005*level),tower.calcAttackMulticrit(0,0,0))
          call SFXOnUnit("Abilities\\Spells\\Human\\FlameStrike\\FlameStrikeEmbers.mdl",u.getUnit(), "chest")
          set e = Effect.createColored("Abilities\\Spells\\Demon\\DarkConversion\\ZombifyTarget.mdl",tower.getX()+48,tower.getY()+48, 40, 0.0, 0.42, 255, 0, 0, 255)
          call e.setLifetime(0.5)
        endloop 
    else 
        set tower.userInt2 = tower.userInt2 + 1
    endif
endif
endfunction

On Damage

ONDAMAGE_chance: 1 ONDAMAGE_chanceLevelAdd: 0
function onDamage takes Tower tower returns nothing
local Buff b = tower.getBuffOfType(dave_physical_buff)
local Buff s = tower.getBuffOfType(dave_spell_buff)
local integer levelP
local integer levelS

if b != 0 then
   set levelP = b.getLevel()
endif

if s !=0 then
   set levelS = s.getLevel()
endif

if Event.isAttackDamageCritical() then
  if tower.getProp_AtkCritChance() < tower.getProp_SpellCritChance() or levelS == 10 then
     if b==0 then
        call dave_physical_buff.apply(tower,tower,1)
     else
        call dave_physical_buff.apply(tower,tower,IMinBJ(levelP + 1, 10))
     endif
  elseif tower.getProp_AtkCritChance() > tower.getProp_SpellCritChance() or levelP == 10 then
     if s==0 then
        call dave_spell_buff.apply(tower,tower, 1)
     else
        call dave_spell_buff.apply(tower,tower,IMinBJ(levelS + 1, 10))
     endif
  endif
endif
endfunction

On Level Up

function onLevelUp takes Tower tower returns nothing
  if tower.getLevel() < 15 then
    set tower.userInt3 = 8
  elseif tower.getLevel() < 25 then
    set tower.userInt3 = 7 
  elseif tower.getLevel() == 25 then
    set tower.userInt3 = 6
  endif
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
  set tower.userInt = 0
  set tower.userInt2 = 0
  
  if tower.getLevel() < 15 then
    set tower.userInt3 = 8
  elseif tower.getLevel() < 25 then
    set tower.userInt3 = 7 
  elseif tower.getLevel() == 25 then
    set tower.userInt3 = 6
  endif
endfunction
Devastatingly Frozen Mushroom v1
2350
ID:
595
Family ID:
Author:
BetrayedKnight
Rarity:
common
Element:
ice
Attack Type:
Elemental
Attack Range:
950
Attack CD:
1.1
Damage:
1878-1925
Status:
Approved

Description:

Gex would release new versions of YouTD every day if you threatened him with this. Deals bonus damage to orcs humanoids and nature, deals lesser damage to undead. Brrr!
Specials:
-50% dmg to undead
+40% dmg to nature (+1.5%/lvl)
+40% dmg to orcs (+1.5%/lvl)
+40% dmg to humanoids (+1.5%/lvl)
Download
Titanic Fire Sprayer v1
2400
ID:
22
Family ID:
Author:
Cyony
Rarity:
common
Element:
fire
Attack Type:
Elemental
Attack Range:
750
Attack CD:
0.5
Damage:
1370-1370
Status:
Approved

Description:

A titanic, high rate of fire tower
Specials:
+3% attackspeed/lvl
Spray and Pray
Each attack of this tower has a 33% chance to miss the target.

Level Bonus: 
-1.3% miss chance
Download

Toggle Triggers

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
    if tower.calcBadChance(0.33-0.013*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
Astral Lighthouse v1
2400
ID:
120
Family ID:
Author:
Velex
Rarity:
common
Element:
astral
Attack Type:
Magic
Attack Range:
750
Attack CD:
2.2
Damage:
5985-6209
Status:
Approved

Description:

Tower that deals additional damage to invisible units.
Light in the Dark
Deals 30% additional damage to invisible creeps.

Level Bonus:
+1.2% damage
Download

Toggle Triggers

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
    if Event.getTarget().isInvisible() then
        set Event.damage = Event.damage * ( 1.30 + 0.012 * tower.getLevel() )
    endif
    
endfunction