Wild Kodo Beast v1
2700
ID:
170
Family ID:
Author:
SirCoqaLot.
Rarity:
unique
Element:
nature
Attack Type:
Decay
Attack Range:
800
Attack CD:
2
Damage:
1361-2361
Status:
Approved

Description:

A mighty Kodo beast that will sometimes devour units to strengthen nearby allies and lets fall some dung in a close area.
Devour
On attack the Kodo has a 6% chance to take a bite out of its target dealing 5000 spell damage and increasing the multiplier for bonuses granted by 'Kodo Dung' by 1 for 6 seconds. 

Level Bonus:
+0.1% chance 
+400 spell damage
Kodo Dung - Aura
The dung of this kodo grants towers in 400 range: 
 +10% damage 
 +10% attackspeed 
 +3% critical strike chance 
 +15% critical strike damage 

Level Bonus:
+0.2% damage
+0.2% attackspeed
+0.06% critical strike chance
+0.3% critical strike damage
Download

Toggle Triggers

Header

    globals
        BuffType sir_kodo_aura
        BuffType sir_kodo_devour
    endglobals
    
    private function kodoAuraOnRefresh takes Buff b returns nothing
        local Tower tower = b.getCaster()
        call b.setPower((100 + 2 * tower.getLevel()) * tower.userInt)
    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
        local Modifier m = Modifier.create()
        set sir_kodo_aura = BuffType.createAuraEffectType(true)
        call m.addModification(MOD_ATK_CRIT_CHANCE,0,0.0003)
        call m.addModification(MOD_ATK_CRIT_DAMAGE,0,0.0015)
        call m.addModification(MOD_ATTACKSPEED,0,0.001)
        call m.addModification(MOD_DAMAGE_ADD_PERC,0,0.001)
        call sir_kodo_aura.setBuffModifier(m)
        call sir_kodo_aura.setEventOnRefresh(kodoAuraOnRefresh)
        call sir_kodo_aura.setBuffIcon('@@0@@')
    endfunction

On Attack

ONATTACK_chance: 0.06 ONATTACK_chanceLevelAdd: 0.001
function onAttack takes Tower tower returns nothing
    local integer UID = tower.getUID()
    call tower.doSpellDamage(Event.getTarget(),5000+tower.getLevel()*400,tower.calcSpellCritNoBonus())
    call SFXAtUnit("Abilities\\Spells\\Orc\\Devour\\DevourEffectArt.mdl",Event.getTarget().getUnit())
    set tower.userInt = tower.userInt + 1
    call tower.refreshAuras()
    call TriggerSleepAction(6.0 * tower.getProp_BuffDuration())
    if tower.getUID() == UID then
        set tower.userInt = tower.userInt - 1
        call tower.refreshAuras()
    endif
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    set tower.userInt = 1 //Kodo devour aura multiplier
endfunction

Tower Aura

AURA_auraEffect: sir_kodo_aura AURA_power: 100 AURA_level: 0 AURA_auraRange: 400 AURA_targetType: TARGET_TYPE_TOWERS AURA_levelAdd: 1 AURA_powerAdd: 2 AURA_targetSelf: true
Embershell Turtle Matriarch v1
2700
ID:
536
Family ID:
Author:
Velex
Rarity:
uncommon
Element:
fire
Attack Type:
Decay
Attack Range:
800
Attack CD:
0.25
Damage:
1881-1880
Mana:
18
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.9 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
Fortunate Miner v1
2700
ID:
688
Family ID:
Author:
drol
Rarity:
rare
Element:
iron
Attack Type:
Decay
Attack Range:
1000
Attack CD:
1.8
Damage:
3304-3423
Status:
Approved

Description:

This loner has been searching for gold and treasure his entire life.
Specials:
+20% bounty collected (+0.8%/lvl)
Goldrush
The miner has a 20% chance on attack to go into a goldrush, increasing attackspeed by more than 60% depending on the player's gold and making each hit gain 5.4 gold. Goldrush lasts 5 seconds. Cannot retrigger while in goldrush!

Hint: Check multiboard to view exact attack speed bonus

Level Bonus:
+0.22 gold gained
+0.1 seconds duration
Excavation
Every 20 seconds the miner has a 25% chance to find 40 gold.

Level Bonus:
+1.6 gold
Download

Toggle Triggers

Header

    globals
        //@import
        BuffType drol_goldrush
        //@import
        MultiboardValues drol_excavationMulti
    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: 0.2 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
    if tower.getBuffOfGroup("drol_goldrush") == 0 then
        call drol_goldrush.applyCustomTimed(tower,tower,R2I(40. + Pow(GetPlayerState(tower.getOwner().getThePlayer(), PLAYER_STATE_RESOURCE_GOLD),0.5) / 2), 5. + tower.getLevel())
    endif
    
endfunction

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
    local real goldBonus = 5.4 + tower.getLevel() * 0.22
     
    if Event.isMainTarget() and tower.getBuffOfGroup("drol_goldrush") > 0 then
        set tower.userReal = tower.userReal + goldBonus
        call tower.getOwner().giveGold(goldBonus, tower.getUnit(), false, true)
    endif
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    
    local Tower preceding = Event.getPrecedingTower()  

    if(preceding.getFamily() == tower.getFamily()) then  
        set tower.userReal = preceding.userReal
    else
        set tower.userReal = 0.0
    endif 
    
endfunction

On Tower Details

function onTowerDetails takes Tower tower returns MultiboardValues
    // Show total gold digged up
    call   drol_excavationMulti.setValue(0,I2S(R2I(tower.userReal)))
    call   drol_excavationMulti.setValue(1,I2S(60 + R2I(Pow(GetPlayerState(tower.getOwner().getThePlayer(), PLAYER_STATE_RESOURCE_GOLD),0.5)/2)) + "%")
    return drol_excavationMulti
endfunction

Periodic

PERIODIC_period: 20
function periodic takes Tower tower returns nothing
    local real goldBonus = 40 + tower.getLevel() * 1.6
    local Effect targetEffect 

    set targetEffect = Effect.createScaled("Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl", GetUnitX(tower.getUnit()), GetUnitY(tower.getUnit()), 0, 0, 0.8)
    call targetEffect.setLifetime(0.1) 
        
    if tower.calcChance(0.25) then
        set tower.userReal = tower.userReal + goldBonus
        call tower.getOwner().giveGold(goldBonus, tower.getUnit(), false, true)
    endif
endfunction
Bone Monument v1
2750
ID:
93
Family ID:
Author:
SirCoqaLot.
Rarity:
uncommon
Element:
darkness
Attack Type:
Physical
Attack Range:
950
Attack CD:
1.8
Damage:
2598-2608
Status:
Approved

Description:

Higher darkness tower that increases the efficiency of other nearby darkness towers.
Empowering Darkness
On attack this tower increases the damage the target receives from other darkness towers by 6%. This effect stacks up to 10 times.

Level Bonus:
+0.12% damage increased
Download

Toggle Triggers

Header

    globals
    //@import
    BuffType sir_bone_debuff
    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 bufflevel = Event.getTarget().getBuffOfType(sir_bone_debuff).getLevel()
    if bufflevel < 10 then
        call Event.getTarget().modifyProperty(MOD_DMG_FROM_DARKNESS,0.06+tower.getLevel()*(0.0012))
        call sir_bone_debuff.applyAdvanced(tower,Event.getTarget(),bufflevel+1,0,1000)
    endif
    
endfunction
Gatling Gun v1
2750
ID:
141
Family ID:
Author:
Boekie
Rarity:
unique
Element:
iron
Attack Type:
Physical
Attack Range:
1000
Attack CD:
1
Damage:
795-795
Status:
Approved

Description:

A very powerful gun created by the dwarves. It has a chance to fire a burst of projectiles.
Specials:
10% crit chance (+0.5%/lvl)
Rapid Gun Fire
Has a 65% chance on attack to shoot an extra projectile. Every extra projectile can be followed up by another projectile, but the chance is reduced by 6% each time. Every extra projectile deals the same amount of damage as a normal attack and has a 10% chance to explode, dealing that damage in 200 AoE around the target. Maximum of 10 extra projectiles per attack.

Level Bonus:
+0.4% chance
+0.3% chance to explode
Sentry
This tower gains 15% attackdamage whenever a creep comes within 800 range of it. Lasts 3 seconds and stacks up to 20 times. 

Level Bonus:
+0.5% damage
+0.05 seconds duration
Download

Toggle Triggers

Header

    globals
        ProjectileType ball 
        BuffType boekie_sentryBuff
    endglobals
    
    public function hit takes Projectile p, Unit creep returns nothing  
        local Tower tower = p.getCaster()  
        local Effect targetEffect
        
        if tower.calcChance(0.10 + (tower.getLevel()*0.003)) == true then
            set targetEffect = Effect.createScaled("Abilities\\Spells\\Other\\Incinerate\\FireLordDeathExplode.mdl", p.x, p.y, 30.0, 0, 1.6) 
            call targetEffect.setLifetime(1.0) 
            call tower.doAttackDamageAoEUnit(creep, 200, p.userReal*tower.getCurrentAttackDamageWithBonus(),tower.calcAttackMulticrit(0,0,0), 0.0)
        else
            call tower.doAttackDamage(creep,p.userReal*tower.getCurrentAttackDamageWithBonus(),tower.calcAttackMulticrit(0,0,0)) 
        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  
        local Modifier m = Modifier.create()
        set ball = ProjectileType.create("Abilities\\Weapons\\BoatMissile\\BoatMissile.mdl",4,1000)  
        call ball.enableHoming(ProjectileTargetEvent.hit,0)  
        
        set boekie_sentryBuff = BuffType.create(0.0, 0.0, true) 
        call m.addModification(MOD_DAMAGE_ADD_PERC, 0.0, 0.005) 
        call boekie_sentryBuff.setBuffModifier(m) 
        call boekie_sentryBuff.setBuffIcon('@@0@@') 
        call boekie_sentryBuff.setStackingGroup("boekie_sentryBuff") 
    endfunction 

On Attack

ONATTACK_chance: 0.65 ONATTACK_chanceLevelAdd: 0.004
function onAttack takes Tower tower returns nothing
    local Unit target = Event.getTarget()  
    local PeriodicEvent ev = tower.userInt3
    local integer amount = 1 //initial num balls
    //0.1 is the periodic timer. if you change that, change the value here as well
    local integer maxShotsPossible = R2I(tower.getCurrentAttackspeed() / 0.1) 
    local real dmgRatio = 1.0
    
    //increment amount of extra attacks until the chance isn't met or max is reached.
    loop  
        exitwhen tower.calcChance(0.65 + tower.getLevel() * (0.004) - amount * 0.06) == false or amount > 10
        set amount = amount + 1  
    endloop
    
    //if tower cannot release as many projectiles as required, scale the dmg instead!
    if amount > maxShotsPossible then
        set dmgRatio = I2R(amount) / I2R(maxShotsPossible)
        set amount = maxShotsPossible
    endif
    
    //sets the target to shoot balls at and makes the periodic period smaller to get the rapid attack  
    set tower.userInt = target
    set tower.userInt2 = target.getUID()
    set tower.userReal = amount
    set tower.userReal2 = dmgRatio
    call ev.enable()  
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
set tower.userInt = 0  //saves current projectile target
set tower.userInt2 = 0 //saves target UID - safety check
set tower.userInt3 = 0  //saves the periodic
set tower.userReal = 0.  //saves number of balls to fire
set tower.userReal2 = 1. //saves the projectile's dmg ratio
endfunction

On Unit Comes In Range

UNITINRANGE_targetType: TARGET_TYPE_CREEPS UNITINRANGE_range: 800
function onUnitInRange takes Tower tower returns nothing
    local integer towerLevel = tower.getLevel()
    local integer buffLevel = 1
    local Buff b = tower.getBuffOfGroup("boekie_sentryBuff")
    
    if b != 0 then
        set buffLevel = IMinBJ(b.userInt + 1, 20)
    endif
    set boekie_sentryBuff.applyCustomTimed(tower, tower, buffLevel * (30 + towerLevel), 3.0 + 0.05 * towerLevel).userInt = buffLevel 
      
endfunction

Periodic

PERIODIC_period: 0.1
function periodic takes Tower tower returns nothing
    local Unit target = tower.userInt
    local Projectile gatlingShot
     
    if tower.userInt3 == 0 then  
        //sets the userInt3 to this periodic event  
        set tower.userInt3 = Event.getCurrentPeriodicEvent()
    endif
    
    //check if target hasn't died
    if target.getUID() != tower.userInt2 then
        call PeriodicEvent(tower.userInt3).disable()
        return
    endif
    
    if tower.userReal > 0 then //balls remain to be shot?
        set gatlingShot = Projectile.createFromPointToUnit(ball,tower,1,0,tower.getX(),tower.getY(),100,target,true,false,false)
        call gatlingShot.setScale(0.4)
        set gatlingShot.userReal = tower.userReal2 //the dmgRatio
        
        set tower.userReal = tower.userReal - 1
        if tower.userReal <= 0 then  //burst attack is over so switch off periodic
            call PeriodicEvent(tower.userInt3).disable()
        endif  
    endif 
endfunction
Rampaging Furbolg v1
2750
ID:
252
Family ID:
Author:
geX
Rarity:
uncommon
Element:
nature
Attack Type:
Physical
Attack Range:
900
Attack CD:
1.8
Damage:
1631-4431
Status:
Approved

Description:

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

Level Bonus:
+0.12 sec duration
+4% 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.16 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,100+lvl*4,6.0+0.12*lvl)
        elseif lvl < 25 then
            call gex_rage_buff15.applyCustomTimed(tower,tower,100+lvl*4,6.0+0.12*lvl)
        else
            call gex_rage_buff25.applyCustomTimed(tower,tower,100+lvl*4,6.0+0.12*lvl)
        endif
    endif
endfunction
Frozen Obelisk v1
2750
ID:
541
Family ID:
Author:
Boekie
Rarity:
uncommon
Element:
ice
Attack Type:
Elemental
Attack Range:
600
Attack CD:
2.1
Damage:
4445-4445
Status:
Approved

Description:

A frightfully blue column of solid ice, worshipped by cold blooded folk.
Specials:
Splash attack:
   220 AoE: 35% damage
+45% dmg to masses (+2%/lvl)
Absolute Zero
The Obelisk slows creeps it damages by 30% for 4 seconds.

Level Bonus:
+0.5% slow
Download

Toggle Triggers

Header

    globals
        //@import
        BuffType mcSlow
    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 s = R2I((30+tower.getLevel()*0.5)*10)
    
    call mcSlow.applyCustomTimed(tower,Event.getTarget(), s, 4) 
endfunction