Rundown Iron Sentry v1
950
ID:
31
Family ID:
Author:
Glowackos
Rarity:
rare
Element:
iron
Attack Type:
Physical
Attack Range:
925
Attack CD:
1.4
Damage:
710-710
Status:
Approved

Description:

A powerful iron tower that will go to great lengths to defend its territory.
Alert
Towers in 500 range get alerted whenever a creep of size air, champion or boss enters the sentry's attack range. They have their base damage increased by 7.5% for 5 seconds. Does not stack.

Level Bonus:
+0.5% base damage bonus
Trespasser Awareness
This tower strengthens its defenses when uninvited units enter its territory. It gains bonus 5%-40% base percent damage with each creep entering its attack range, based on the creep's size. Bonus damage lasts 5 seconds and new stacks of damage do not refresh duration of old ones.
There is also a 40% chance that the trespassing creep will permanently have its armor reduced by 3, which stacks up to 5 times.

Level Bonus:
+0.1 armor reduction
+0.1%-0.8% bonus base percent damage
Download

Toggle Triggers

Header

    globals
        //@export
        BuffType glow_damage_buff
        //@export
        BuffType glow_armor_shred
    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 m = Modifier.create()
        call m.addModification(MOD_DAMAGE_BASE_PERC, 0.075, 0.005)
        set glow_damage_buff = BuffType.create(5, 5, true)
        call glow_damage_buff.setBuffIcon('@@0@@')
        call glow_damage_buff.setBuffModifier(m)
        
        set m = Modifier.create()
        call m.addModification(MOD_ARMOR, 0.0, -0.01)
        set glow_armor_shred = BuffType.create(-1.0, 0.0, false)
        call glow_armor_shred.setBuffIcon('@@1@@')
        call glow_armor_shred.setBuffModifier(m)
    endfunction

On Unit Comes In Range

UNITINRANGE_targetType: TARGET_TYPE_CREEPS UNITINRANGE_range: 925
function onUnitInRange takes Tower tower returns nothing
    local Unit creep = Event.getTarget()
    local integer size = creep.getSize()
    local integer level = tower.getLevel()
    local Iterate it
    local Unit next
    local integer uid = tower.getUID()
    local Buff b = creep.getBuffOfType(glow_armor_shred)
    local integer buffLevel = 300 + 10 * level
    if b != 0 then
        set buffLevel = IMinBJ(buffLevel + b.getLevel(), buffLevel * 5)
    endif
    
    if tower.calcChance(0.4) then
        call glow_armor_shred.apply(tower,creep,buffLevel)
    endif
    call tower.modifyProperty(MOD_DAMAGE_BASE_PERC,(0.05 + 0.001*level)*(size+1))
    if size > SIZE_NORMAL then
        set it = Iterate.overUnitsInRangeOfCaster(tower, TARGET_TOWERS, 500)
        loop
            set next = it.next()
            exitwhen next == 0
            call glow_damage_buff.apply(tower,next,0)
        endloop
    endif
    call TriggerSleepAction(5)
    if tower.getUID() == uid then
        call tower.modifyProperty(MOD_DAMAGE_BASE_PERC,-(0.05 + 0.001*level)*(size+1))
    endif
endfunction
Bomb Turret v1
950
ID:
217
Family ID:
Author:
DaveMatthews
Rarity:
rare
Element:
iron
Attack Type:
Physical
Attack Range:
900
Attack CD:
2.6
Damage:
2429-2429
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 250 area around the target by 15% for 4 seconds. 

Level Bonus:
+0.4% 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 250 area around the target by 10% for 4 seconds. 

Level Bonus:
+0.4% 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 250 area around the target for 1 second. 

Level Bonus:
+0.04 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
    //@export
    BuffType dave_concussive
    //@export
    BuffType dave_acid
    //@export
    BuffType dave_smoke
    //@export
    BuffType dave_concussive_buff
    //@export
    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
    local Modifier m = Modifier.create()
    local Modifier n = Modifier.create()
    
     set dave_concussive_buff = BuffType.create(4,0,false)
     call dave_concussive_buff.setBuffModifier(m)
     call m.addModification(MOD_MOVESPEED,-0.15,-0.004)
     call dave_concussive_buff.setBuffIcon( '@@2@@' )
     
     set dave_acid_buff = BuffType.create(4,0,false)
     call dave_acid_buff.setBuffModifier(n)
     call dave_acid_buff.setBuffIcon( '@@4@@' )
     call n.addModification(MOD_ARMOR_PERC,-0.1,-0.004)
    
     set dave_concussive = BuffType.create(-1,0,true)
     call dave_concussive.setBuffIcon( '@@0@@' )
     
     set dave_acid = BuffType.create(-1,0,true)
     call dave_acid.setBuffIcon( '@@1@@' )
     
     set dave_smoke = BuffType.create(-1,0,true)
     call dave_smoke.setBuffIcon( '@@3@@' )

    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,250)
        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,250)
        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,250)
        loop
           set u = it.next()
           exitwhen u == 0
           call cb_silence.applyOnlyTimed(tower, u, 1+(0.04*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
Gnoll Thunder Mage v1
950
ID:
328
Family ID:
Author:
cedi
Rarity:
rare
Element:
storm
Attack Type:
Energy
Attack Range:
1200
Attack CD:
0.75
Damage:
111-111
Mana:
20
Mana regen:
1
Status:
Approved

Description:

Gnollssss!
Thunder Shock
Deals [1450 + (435 x amount of player towers)] spell damage to a target creep. This ability has a 25% chance to recast itself when cast. Maximum of 1 extra cast.

Level Bonus:
+58 base spelldamage
+17.4 spelldamage per player tower
+1 extra cast at levels 15 and 25

AC_TYPE_OFFENSIVE_UNIT
 12, 1200.00 range, 3.0s cooldown
Download

Toggle Triggers

Autocast

caster_art: Abilities\Spells\Orc\Purge\PurgeBuffTarget.mdl AUTOCAST_cooldown: 3.0 AUTOCAST_numBuffsBeforeIdle: 1 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_UNIT AUTOCAST_manacost: 12 AUTOCAST_range: 1200.00 AUTOCAST_buffType: 0 AUTOCAST_targetSelf: true AUTOCAST_targetType: TARGET_TYPE_CREEPS target_art: Abilities\Spells\Other\Monsoon\MonsoonBoltTarget.mdl AUTOCAST_autoRange: 1200.00
private function onAutocast takes Tower tower returns nothing
    local Unit U = Event.getTarget()
    local integer lvl = tower.getLevel()
    local integer i = tower.userInt
    local Iterate I
    local boolean b
    call tower.doSpellDamage( U, 1450.00 + 58.00 * lvl + ( 435.00 + 17.4 * lvl ) * tower.getOwner().getNumTowers(), tower.calcSpellCritNoBonus() )
    if tower.calcChance( 0.25 ) then
        call tower.getOwner().displaySmallFloatingText( "MULTICAST!", tower, 0, 255, 0, 0.00 )
        loop
            exitwhen i <= 0
            set I = Iterate.overUnitsInRangeOfCaster( tower, TARGET_CREEPS, 1200.00 )
            set b = true
            loop
                if i <= 0 then
                    //enough hits
                    call I.destroy()
                    exitwhen true
                endif
                set U = I.next()
                if U == 0 and b then
                    //no units near
                    return
                endif
                set b = false
                exitwhen U == 0
                call SFXAtUnit( "Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl", U.getUnit() )
                call tower.doSpellDamage( U, 1450.00 + 58.00 * lvl + ( 435.00 + 17.4 * lvl ) * tower.getOwner().getNumTowers(), tower.calcSpellCritNoBonus() )
                set i = i - 1
            endloop
        endloop
    endif
endfunction

Header

    globals
        MultiboardValues MBV
    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
        set MBV = MultiboardValues.create( 1 )
        call MBV.setKey( 0, "Thunder Shock Dmg" )
    endfunction

On Level Up

function onLevelUp takes Tower tower returns nothing
    local integer lvl = tower.getLevel()
    if lvl < 15 then
        set tower.userInt = 1
    elseif lvl >= 15 and lvl < 25 then
        set tower.userInt = 2
    elseif lvl == 25 then
        set tower.userInt = 3
    endif
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    local integer lvl = tower.getLevel()
    if lvl < 15 then
        set tower.userInt = 1
    elseif lvl >= 15 and lvl < 25 then
        set tower.userInt = 2
    elseif lvl == 25 then
        set tower.userInt = 3
    endif
endfunction

On Tower Details

function onTowerDetails takes Tower tower returns MultiboardValues
    local real r = 1450.00 + 58.00 * tower.getLevel() + ( 435.00 + 17.4 * tower.getLevel() ) * tower.getOwner().getNumTowers()
    call MBV.setValue( 0, R2S( r ) )
    return MBV
endfunction
Small Library v1
950
ID:
619
Family ID:
Author:
SirCoqaLot.
Rarity:
uncommon
Element:
astral
Attack Type:
Energy
Attack Range:
960
Attack CD:
2.6
Damage:
2083-2083
Status:
Approved

Description:

Basic astral tower that strengthens itself by acummulating knowledge from its books.
High Knowledge
Grants 0.7 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.7)
endfunction
Ruined Storm Tower v1
975
ID:
341
Family ID:
Author:
SirCoqaLot.
Rarity:
uncommon
Element:
storm
Attack Type:
Physical
Attack Range:
1000
Attack CD:
2.8
Damage:
3409-3459
Status:
Approved

Description:

Strange tower that rejects some items.
Rejection
This tower drops all except Uncommon items on attack.
Download

Toggle Triggers

On Attack

ONATTACK_chance: 1.0 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
    local Item itm
    local integer i = 1

    loop 
    exitwhen i > 6
        set itm = tower.getHeldItem(i)
        if  itm != 0 and itm.getRarity() != Rarity.UNCOMMON then
            call itm.drop()
        endif
        set i = i + 1
    endloop
  
endfunction
Warrior of Light v1
1000
ID:
84
Family ID:
Author:
i_mOck_death
Rarity:
rare
Element:
astral
Attack Type:
Elemental
Attack Range:
900
Attack CD:
1
Damage:
406-406
Status:
Approved

Description:

Rare Astral tower with a chance on each attack to create a wave of light that damages enemies.
Ain Soph Aur
This tower has a 20% chance on every attack to create a shockwave of light that starts at the targeted creep and travels 500 units behind that creep dealing 1000 spell damage to all creeps in its path.

Level Bonus:
+0.5% chance
+50 damage
Aura of Light - Aura
Towers in 300 range deal 15% more damage to undead creeps.

Level Bonus:
+0.6% damage
Download

Toggle Triggers

Header

    globals
        Cast Swave
        //@export
        BuffType mOck_Warrioroflight
    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 Amod = Modifier.create()
        set mOck_Warrioroflight = BuffType.createAuraEffectType(true)
        call Amod.addModification(MOD_DMG_TO_UNDEAD,0,.001)
        call mOck_Warrioroflight.setBuffModifier(Amod)
        call mOck_Warrioroflight.setBuffIcon('@@1@@')
        set Swave = Cast.create('@@0@@', "carrionswarm", 1)
    endfunction

On Attack

ONATTACK_chance: .2 ONATTACK_chanceLevelAdd: 0.005
function onAttack takes Tower tower returns nothing
local unit creep = Event.getTarget().getUnit()
local integer level = tower.getLevel()
local real facing = GetUnitFacing(creep) - 180
local real x = GetUnitX(creep) + (50) * Cos(facing * bj_DEGTORAD)
local real y = GetUnitY(creep) + (50) * Sin(facing * bj_DEGTORAD)
call Effect.createSimple("Abilities\\Spells\\Human\\HolyBolt\\HolyBoltSpecialArt.mdl",GetUnitX(creep),GetUnitY(creep)).destroy()
call Swave.pointCastFromUnitOnPoint(tower,Event.getTarget(),x, y,1.0+(.05*level), tower.calcSpellCritNoBonus())

set creep = null
endfunction

Tower Aura

AURA_powerAdd: 6 AURA_auraEffect: mOck_Warrioroflight AURA_levelAdd: 6 AURA_power: 150 AURA_targetType: TARGET_TYPE_TOWERS AURA_targetSelf: true AURA_level: 150 AURA_auraRange: 300
Mutating Acid Factory v1
1000
ID:
164
Family ID:
Author:
cedi
Rarity:
common
Element:
iron
Attack Type:
Decay
Attack Range:
800
Attack CD:
1
Damage:
452-472
Status:
Approved

Description:

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

Level Bonus:
+0.192 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(), 4800 + tower.getLevel() * 192, 3.0 + 0.12 * tower.getLevel() )
endfunction