Raging Furbolg v1
1500
ID:
246
Family ID:
Author:
geX
Rarity:
uncommon
Element:
nature
Attack Type:
Physical
Attack Range:
900
Attack CD:
1.9
Damage:
1225-2625
Status:
Approved

Description:

A friendly and cuddly creature as long it isn't angry. Unfortunately it is always angry whenever it ain't sleeping.
Specials:
+20% dmg to orcs
Rampage
Has a 15% chance on attack to go into a rampage for 5.0 seconds. While in rampage, it has +200% attackspeed, +25% critical strike chance and +75% critical strike damage. Cannot retrigger while in rampage!

Level Bonus:
+0.1 sec duration
+3% attackspeed
+1 multicrit at lvl 15 and 25
Download

Toggle Triggers

Header

    globals
        //@import
        BuffType gex_rage_buff
        //@import
        BuffType gex_rage_buff15
        //@import
        BuffType gex_rage_buff25
    endglobals
    
    private function init takes nothing returns nothing
    endfunction

On Attack

ONATTACK_chance: 0.15 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
    local integer lvl = tower.getLevel()    
    
    //Do not allow retriggering while the furbolg is raged
    if tower.getBuffOfGroup("gex_rage") == 0 then
        if lvl < 15 then
            call gex_rage_buff.applyCustomTimed(tower,tower,50+lvl*3,5.0+0.1*lvl)
        elseif lvl < 25 then
            call gex_rage_buff15.applyCustomTimed(tower,tower,50+lvl*3,5.0+0.1*lvl)
        else
            call gex_rage_buff25.applyCustomTimed(tower,tower,50+lvl*3,5.0+0.1*lvl)
        endif
    endif
endfunction
Orcan Circle v1
1500
ID:
315
Family ID:
Author:
SternBogen / Natac & girlfriend
Rarity:
uncommon
Element:
storm
Attack Type:
Physical
Attack Range:
1100
Attack CD:
1.4
Damage:
1600-1611
Status:
Approved

Description:

Strong gusts of wind often linger around these ruins.
Specials:
+70% dmg to air (+2%/lvl)
Wind of Death
On attack this tower has a 26% chance to catch a ground, non-boss unit in a cyclone for 0.8 seconds, dealing 600 physical damage to all units in 300 AoE when it falls back down. Falling champions deal 25% more damage. 

Level Bonus:
+60 damage
+0.6% chance to catch
Download

Toggle Triggers

Header

    globals
        //@import
        BuffType sternbogen_broken_wind
    endglobals
    
    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 Creep target = Event.getTarget()
    local real damage = 600 + 60 * tower.getLevel()
    local Buff b
    if (target.getSize() == SIZE_MASS or target.getSize() == SIZE_NORMAL or target.getSize() == SIZE_CHAMPION) then
        if(tower.calcChance(0.26 + (0.006 * tower.getLevel()))) then
            set b = target.getBuffOfType(sternbogen_broken_wind)
            if b != 0 then
                set damage = RMaxBJ(b.userReal3, damage)
            endif
            set b = sternbogen_broken_wind.applyCustomTimed(tower, target, tower.getLevel(), 0.8)
            if b != 0 then
                set b.userReal3 = damage
            endif
        endif
    endif 
endfunction
Nature Spirits v1
1500
ID:
397
Family ID:
Author:
DaveMatthews
Rarity:
uncommon
Element:
nature
Attack Type:
Essence
Attack Range:
900
Attack CD:
1.2
Damage:
1267-1267
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:
+42% experience for Astral
+24% spell damage for Darkness
+6% crit chance for Nature
+24% damage for Fire
+30% buff duration for Ice
+12% attack speed for Storm
+9% item chance for Iron
The buffed tower has a 25% chance to receive another random effect in addition to the first one.

Level Bonus:
+1.2% experience
+0.6% spell damage
+0.15% crit chance
+0.6% damage
+0.9% buff duration
+0.3% attack speed
+0.21% 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(1.5)
    call p.color(50,255,50,255)
endfunction

Header

    globals
        //@import
        ProjectileType dave_sprite
    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 Tower Creation

function onCreate takes Tower tower returns nothing
    set tower.userReal = 1.5
endfunction
Militia Forepost v1
1500
ID:
419
Family ID:
Author:
ShyGnome
Rarity:
uncommon
Element:
iron
Attack Type:
Physical
Attack Range:
850
Attack CD:
0.7
Damage:
426-426
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.8%/lvl)
-20% dmg to undead (+0.6%/lvl)
+20% dmg to nature (+0.6%/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.1% chance to miss
+1 target at levels 15 and 25
Download

Toggle Triggers

Header

   globals
      //@import
      ProjectileType MilitiaAxe
   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 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.011*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 = 3 // Save the family member (1 = first member)
    set tower.userInt2 = 0 // Used to save the buff (double linked list)
endfunction
Dwarven Forgery v1
1500
ID:
469
Family ID:
Author:
geX
Rarity:
unique
Element:
iron
Attack Type:
Physical
Attack Range:
675
Attack CD:
2.5
Damage:
4225-4825
Status:
Approved

Description:

Hidden in the mountains, the dwarven master smiths polish found items to release their true power.
Specials:
+50% item quality (+1%/lvl)
Dwarven Polish - Aura
Increases the item quality ratio of friendly towers in 550 range including itself by 15%.

Level Bonus:
+0.4% quality ratio
Download

Toggle Triggers

Header

    globals
        BuffType itemAura
    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()
        set itemAura = BuffType.createAuraEffectType(true)
        call m.addModification(MOD_ITEM_QUALITY_ON_KILL,0.15,0.004)
        call itemAura.setBuffModifier(m)
        call itemAura.setBuffIcon('@@0@@')
    endfunction

Tower Aura

AURA_auraEffect: itemAura AURA_power: 0 AURA_level: 0 AURA_auraRange: 550 AURA_targetType: TARGET_TYPE_TOWERS AURA_levelAdd: 1 AURA_powerAdd: 1 AURA_targetSelf: true
Library of Alexandria v1
1500
ID:
480
Family ID:
Author:
Boekie
Rarity:
unique
Element:
astral
Mana:
40
Mana regen:
2
Status:
Approved

Description:

This ancient library uses its knowledge to increase experience gain.
Specials:
+4% mana regen/lvl
Divine Teachings
Adds a buff to the targeted tower which lasts 10 seconds. The buff increases the amount of experience the tower gains by 100%. This tower gains 2 experience every time it casts this buff. 

Level Bonus:
+0.2 seconds duration 
+2% experience gain.

AC_TYPE_ALWAYS_BUFF
 30, 500 range, 5s cooldown
Divine Knowledge
Every 5 seconds this tower grants 2 experience to a random tower in 500 range.

Level Bonus:
+0.2 experience
Divine Research - Aura
Increases the experience gain from creeps in 900 range by 30%. 

Level Bonus:
+1% experience
Download

Toggle Triggers

Autocast

caster_art: Abilities\Spells\Items\AIim\AIimTarget.mdl AUTOCAST_cooldown: 5 AUTOCAST_numBuffsBeforeIdle: 0 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_ALWAYS_BUFF AUTOCAST_manacost: 30 AUTOCAST_range: 500 AUTOCAST_buffType: boekie_divine2Buff AUTOCAST_targetSelf: false AUTOCAST_targetType: TARGET_TYPE_TOWERS target_art: Abilities\Spells\Other\Charm\CharmTarget.mdl AUTOCAST_autoRange: 500
private function onAutocast takes Tower tower returns nothing
    call tower.addExp(2)
    call boekie_divine2Buff.apply(tower,Event.getTarget(),tower.getLevel()) //if there is anything inside this function, the buff has to be applied manually
endfunction

Header

    globals
        BuffType boekie_divine_aura
        BuffType boekie_divine2Buff
    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()
        set boekie_divine_aura = BuffType.createAuraEffectType(true)
        call m.addModification(MOD_EXP_GRANTED,0.30,0.01)
        call boekie_divine_aura.setBuffModifier(m)
        call boekie_divine_aura.setBuffIcon('@@0@@')
        
        set m = Modifier.create()
        set boekie_divine2Buff = BuffType.create(10.00, 0.2, true)  
        call m.addModification(MOD_EXP_RECEIVED, 1.00, 0.02)  
        call boekie_divine2Buff.setBuffModifier(m)
        call boekie_divine2Buff.setBuffIcon('@@1@@')
    endfunction

Periodic

PERIODIC_period: 5
function periodic takes Tower tower returns nothing
    local Iterate inRange = Iterate.overUnitsInRangeOfCaster(tower,TARGET_TOWERS,500) 
    local integer numResults = 0
    local Unit result = 0
    local Unit next
    local integer lvl = tower.getLevel()
    local unit u
    
    set result = inRange.nextRandom()

    if result != 0 then
        call result.addExp(2 + lvl * 0.2)
        set u = result.getUnit()
        call SFXAtUnit("Abilities\\Spells\\Human\\Invisibility\\InvisibilityTarget.mdl", u)
        set u = null
        call inRange.destroy()
    endif 
endfunction

Tower Aura

AURA_auraEffect: boekie_divine_aura AURA_power: 0 AURA_level: 0 AURA_auraRange: 900 AURA_targetType: TARGET_TYPE_CREEPS AURA_levelAdd: 1 AURA_powerAdd: 1 AURA_targetSelf: false
Coconut Sapling v1
1500
ID:
525
Family ID:
Author:
cedi
Rarity:
rare
Element:
nature
Attack Type:
Physical
Attack Range:
825
Attack CD:
3
Damage:
1-1
Status:
Approved

Description:

Fall, fall, fall, little nuts, right on the heads of the little noobs...
Specials:
+30% dmg to orcs (+1%/lvl)
+20% dmg to humanoids (+1%/lvl)
Coconut Rain
Each time this tower attacks there is a chance to drop multiple coconuts. The chance to drop a coconut is 100% for the 1st one and after each coconut the chance is decreased by 20%. Each coconut deals 1625 spelldamage in 150 AoE and stuns for 0.5 seconds. Hit units are immune to the stun of this ability for the next 1.5 seconds.

Level Bonus:
+162.5 damage
Download

Toggle Triggers

Header

    globals
        ProjectileType cedi_Coco
        //@export
        BuffType cedi_Coco_Buff
    endglobals
    
    function cedi_Coco_Impact takes Projectile p returns nothing
        local Unit target
        local Unit caster = p.getCaster()
        local Iterate I = Iterate.overUnitsInRange( caster, TARGET_CREEPS, p.x, p.y, 150.00 )
        local real dmg = 1625.00 + I2R( caster.getLevel() ) * 162.50 
        call DestroyEffect( AddSpecialEffect( "Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl", p.x, p.y ) )
        loop
            set target = I.next()
            exitwhen target == 0
            call caster.doSpellDamage( target, dmg, caster.calcSpellCritNoBonus() )
            if ( target.getBuffOfType( cedi_Coco_Buff ) == 0 ) then
                call cb_stun.applyOnlyTimed( caster, target, 0.5 )
                call cedi_Coco_Buff.applyOnlyTimed( caster, target, 1.5 )
            endif
        endloop
    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 cedi_Coco = ProjectileType.create( "abilities\\weapons\\catapult\\catapultmissile.mdl", 4.00, 0.00 )
        call cedi_Coco.enablePhysics( 0, cedi_Coco_Impact, -15.00, 0, 1.00 )
        
        set cedi_Coco_Buff = BuffType.create( 1.5, 0.00, true )
        call cedi_Coco_Buff.setBuffIcon( '@@0@@' )
    endfunction

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
    local real chance = 1.00
    local integer casts = 0
    local Unit u = Event.getTarget()
    local Projectile p
    local real x = u.getX()
    local real y = u.getY()
    local real range
    local real angle
    loop
        if tower.calcChance( chance ) then
            set casts = casts + 1
            set chance = chance * 0.80
        else
            exitwhen true
        endif
    endloop
    loop
        exitwhen casts <= 0
        set range = GetRandomReal( 0.00, 300.00 )
        set angle = GetRandomReal( 0.00, 360.00 ) * bj_DEGTORAD
        set p = Projectile.create( cedi_Coco, tower, 1.00, tower.calcSpellCritNoBonus(), x + Cos( angle ) * range, y + Sin( angle ) * range, 1000.00, 0.00 )
        call p.setScale( 0.30 )
        call p.setGravity( GetRandomReal( 1.00, 1.50 ) )
        set casts = casts - 1
    endloop
endfunction