Vulshok, the Berserker v1
2400
ID:
140
Family ID:
Author:
Boekie
Rarity:
unique
Element:
fire
Attack Type:
Physical
Attack Range:
1000
Attack CD:
0.64
Damage:
900-900
Status:
Approved

Description:

Legendary fel orc berserker, he is the ultimate fighter.
Specials:
x2 crit damage
+3% attackspeed/lvl
Ultimate Fighter
Vulshok uses his great power to specialize his attacks:
- Every 3rd attack adds a critical hit
- Every 7th attack deals 3000 bonus attackdamage
- Every 12th attack splashes all damage over 200 AoE
- Every 15th attack adds 0.5% attack damage permanently

Level Bonus:
+200 attackdamage on 7th attack
Maim
When Vulshok damages a creep it gets maimed. The creep is slowed by 10% for 5 seconds and every second it gets slowed by an extra 5%. This buff lasts for 5 seconds and cannot be refreshed. 

Level Bonus:
+0.5% slow 
+0.1% extra slow per second
Download

Toggle Triggers

Header

    globals
        MultiboardValues boekie_vulshok_multiboard 
        BuffType boekie_vulshok_slow
    endglobals
    
    function boekie_vulshok_slowPeriodic takes Buff b returns nothing 
        call b.setPower(b.getPower() + 50 + b.getLevel()/5)
    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 boekie_vulshok_multiboard = MultiboardValues.create(4) 
        call boekie_vulshok_multiboard.setKey(0,"Attacks to crit") 
        call boekie_vulshok_multiboard.setKey(1,"Attacks to damage") 
        call boekie_vulshok_multiboard.setKey(2,"Attacks to splash") 
        call boekie_vulshok_multiboard.setKey(3,"Attacks to grow") 
        
        call m.addModification(MOD_MOVESPEED,-0.10,-0.001)     
        set boekie_vulshok_slow = BuffType.create(5,0.0,false)
        call boekie_vulshok_slow.setBuffModifier(m)
        call boekie_vulshok_slow.setBuffIcon('@@0@@') 
        call boekie_vulshok_slow.addPeriodicEvent(EventHandler.boekie_vulshok_slowPeriodic,1) 
    endfunction

On Attack

ONATTACK_chance: 1.0 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
    local Unit target = Event.getTarget()
    local integer crit = 0
    
    set tower.userInt = tower.userInt + 1

    //Crit (every 3rd)
    if ModuloInteger(tower.userInt,3) == 0 then 
        call tower.addAttackCrit()
        set crit = 1 //So the triggered attackdamage can crit too!
    endif 

    //Bonus damage (every 7th)
    if ModuloInteger(tower.userInt,7) == 0 then
        //Splashed bonus damage (every 84th)
        if ModuloInteger(tower.userInt,12) == 0 then
            call tower.doAttackDamageAoEUnit(target,200,3000.0+(tower.getLevel()*200.0),tower.calcAttackMulticrit(0.0,0.0,crit),0.0)
            call Effect.createScaled("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl", target.getX(), target.getY(), 0.0, 0, 1.5).destroy()
        else
            call tower.doAttackDamage(target,3000.0+(tower.getLevel()*200.0),tower.calcAttackMulticrit(0.0,0.0,crit)) 
            call Effect.createScaled("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl", target.getX(), target.getY(), 0.0, 0, 0.2).destroy()
        endif
    endif 
    
    //Splash (every 12th)
    if ModuloInteger(tower.userInt,12) == 0 then
        set tower.userInt2 = 1
    endif
    
    //Growth (every 15th)
    if ModuloInteger(tower.userInt,15) == 0 then 
        call tower.modifyProperty(MOD_DAMAGE_ADD_PERC, 0.005)
        //Rare text has increased chance to show with increased triggerchances. ;]
        if tower.calcChance(0.005) then
            call tower.getOwner().displayFloatingText("I WILL BATHE IN YOUR BLOOD!",tower,255,100,100)
        elseif tower.calcChance(0.1) then
            call tower.getOwner().displayFloatingText("FEAR ME!",tower,255,100,100)
        elseif tower.calcChance(0.4) then
            call tower.getOwner().displayFloatingText("GRRR!",tower,255,100,100)
        else
            call tower.getOwner().displayFloatingText("ROAR!",tower,255,100,100)
        endif
        //Increase model size.
        set tower.userInt3 = tower.userInt3 + 1
        call tower.setScale(0.9 + 0.001 * tower.userInt3)
    endif 
    
    if tower.userInt >= 420 then
        set tower.userInt = 0
    endif
endfunction

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
    local Iterate it
    local Creep creep = Event.getTarget()
    
    if tower.userInt2 == 1 then
        call tower.doAttackDamageAoEUnit(creep,200,tower.getCurrentAttackDamageWithBonus(),tower.calcAttackMulticrit(0.0,0.0,1),0.0) //+1 multicrit count for the guaranteed crit every three attacks.
        set Event.damage = 0 //Cancel the regular attack
        //Apply slow to all creeps hit.
        set it = Iterate.overUnitsInRangeOfUnit(tower,TARGET_CREEPS,creep,200)
        loop
            set creep = it.next()
            exitwhen creep == 0
            if creep.getBuffOfType(boekie_vulshok_slow) == 0 then
                call boekie_vulshok_slow.apply(tower, creep, tower.getLevel()*5)
            endif
        endloop
        set tower.userInt2 = 0
    else
        if creep.getBuffOfType(boekie_vulshok_slow) == 0 then
            call boekie_vulshok_slow.apply(tower, creep, tower.getLevel()*5)
        endif
    endif
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    //Abilities
    set tower.userInt = 0
    //Splash on next attack
    set tower.userInt2 = 0
    //Number of growths
    set tower.userInt3 = 0
endfunction

On Tower Details

function onTowerDetails takes Tower tower returns MultiboardValues
    call boekie_vulshok_multiboard.setValue(0,I2S(3-ModuloInteger(tower.userInt,3)))
    call boekie_vulshok_multiboard.setValue(1,I2S(7-ModuloInteger(tower.userInt,7)))
    call boekie_vulshok_multiboard.setValue(2,I2S(12-ModuloInteger(tower.userInt,12)))
    call boekie_vulshok_multiboard.setValue(3,I2S(15-ModuloInteger(tower.userInt,15)))
    return boekie_vulshok_multiboard 
endfunction
Witch Queen v1
2400
ID:
185
Family ID:
Author:
cedi
Rarity:
uncommon
Element:
darkness
Attack Type:
Essence
Attack Range:
1100
Attack CD:
1.6
Damage:
2153-2153
Mana:
30
Mana regen:
1.5
Status:
Approved

Description:

What's the thing around my ankle? Ohh that, that are the hands of one of my minions.
Specials:
+1 mana/lvl
+0.1 mana regen/lvl
Love Potion
The witch throws a bottle of love potion on the target, slowing it by 42% and increasing its item drop chance by 33.6%. The potion lasts 7 seconds.

Level Bonus:
+0.375% slow
+0.3% Item drop chance

AC_TYPE_OFFENSIVE_BUFF
 25, 1100.00 range, 3.00s cooldown
Soul Split
When the witch attacks, it has a 42% chance to deal 2000 spell damage to its target, increasing the witch's attackspeed by 25% and decreasing the chance to trigger this spell by 8%. These effects last 15 seconds and stack. If the target is under the influence of a Love Potion, the attackspeed bonus, the damage and the duration of this spell are doubled.

Level Bonus:
+80 spell damage
Download

Toggle Triggers

Autocast

caster_art: AUTOCAST_cooldown: 3.00 AUTOCAST_numBuffsBeforeIdle: 1 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_BUFF AUTOCAST_manacost: 25 AUTOCAST_range: 1100.00 AUTOCAST_buffType: cedi_LovePotion AUTOCAST_targetSelf: false AUTOCAST_targetType: TARGET_TYPE_CREEPS target_art: AUTOCAST_autoRange: 1100.00
private function onAutocast takes Tower tower returns nothing
    set Projectile.createFromUnitToUnit( cedi_LoveMissile, tower, 1.00, tower.calcSpellCritNoBonus(), tower, Event.getTarget(), true, false, false ).userInt = 336 + tower.getLevel() * 3
endfunction

Header

    globals
        //@import
        BuffType cedi_LovePotion
        //@import
        BuffType cedi_SoulBuff
        //@import
        ProjectileType cedi_LoveMissile
    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 real multipler = 1.00
    local integer UID = tower.getUID()
    if ( tower.calcChance( tower.userReal / 100.00 ) ) then
        if Event.getTarget().getBuffOfType( cedi_LovePotion ) != 0 then
            set multipler = 2.00
            call tower.getOwner().displayFloatingTextX( "Double", tower, 255, 0, 0, 255, 64.00, 1.00, 2.00 )
        endif
        call SFXAtUnit("Objects\\Spawnmodels\\Undead\\UndeadDissipate\\UndeadDissipate.mdl", tower.getUnit())
        call tower.doSpellDamage( Event.getTarget(), (2000 + 80 * tower.getLevel() ) * multipler, tower.calcSpellCritNoBonus() )
        call cedi_SoulBuff.applyCustomTimed( tower, tower, 1, 15 * multipler )
        set tower.userReal = tower.userReal - 8.00 //* multipler
        call tower.modifyProperty( MOD_ATTACKSPEED, 0.25 * multipler ) 
        
        call TriggerSleepAction( 15.00 * multipler )
        if tower.getUID() == UID then
            call tower.modifyProperty( MOD_ATTACKSPEED, -0.25 * multipler ) 
            set tower.userReal = tower.userReal + 8.00 //* multipler
        endif
    endif
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    set tower.userReal = 42.00
endfunction
Icy Spires v1
2400
ID:
323
Family ID:
Author:
SirCoqaLot.
Rarity:
rare
Element:
ice
Attack Type:
Elemental
Attack Range:
1100
Attack CD:
1.4
Damage:
2402-2402
Status:
Approved

Description:

Advanced frost tower that will freeze attacked creeps, stunning them and reducing their health regeneration.
Cold
This tower has a 25% chance on attack to freeze the attacked creep and reduce its health regeneration by 30%. The freeze lasts for 1.2 seconds and cannot be reapplied on already frozen units. Chance to proc, health regeneration reduction and freeze duration are halved for bosses. Does not affect immune creeps. 

Level Bonus:
+0.5% chance
+0.05 seconds duration
-0.8% hp regen
Download

Toggle Triggers

Header

    globals
    //@import
    BuffType sirFrost
    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.25 ONDAMAGE_chanceLevelAdd: 0.005
function onDamage takes Tower tower returns nothing
    local Creep creep = Event.getTarget()
    local integer lvl = tower.getLevel()
    local real scalar = 1.0
    if creep.getSize() >= SIZE_BOSS then
        set scalar = 0.5
    endif
    
    if GetRandomReal(0,1) < scalar and not creep.isImmune() and creep.getBuffOfType(sirFrost) == 0 then
        call sirFrost.applyCustomTimed(tower,creep,R2I(lvl * scalar),(1.2+lvl*0.05) * scalar )
        call SFXAtUnit("Abilities\\Spells\\Undead\\FreezingBreath\\FreezingBreathTargetArt.mdl",creep.getUnit())
    endif
    // call SFXAtUnit("Abilities\\Spells\\Undead\\FreezingBreath\\FreezingBreathTargetArt.mdl",creep.getUnit())
endfunction
Human Sacrifice v1
2400
ID:
336
Family ID:
Author:
DaveMatthews
Rarity:
rare
Element:
darkness
Attack Type:
Decay
Attack Range:
850
Attack CD:
1
Damage:
2099-2099
Mana:
100
Mana regen:
2.5
Status:
Approved

Description:

Sacrifices itself to boost nearby towers.
Specials:
+0.2 mana regen/lvl
Sacrifice
This tower loses 100% of its damage to boost the dps of a tower in 500 range by 45% of its total damage for 6 seconds. This buff has no effect on towers of the same family.

Level Bonus:
+0.6% bonus damage

AC_TYPE_OFFENSIVE_BUFF
 90, 500 range, 6s cooldown
Blood Spill
On attack, this tower has a 15% chance to lose 100% attack speed and boost the attack speed of all towers in 200 range by 75%, equally divided among them, for 6 seconds. Every time it casts Blood Spill, the tower gains 0.5 experience for every other tower affected. Cannot retrigger when the buff is already active. 

Level Bonus:
+1% attack speed 
+0.4% chance
Download

Toggle Triggers

Autocast

AUTOCAST_cooldown: 6 AUTOCAST_autoRange: 500 AUTOCAST_manacost: 90 AUTOCAST_range: 500 AUTOCAST_targetType: TARGET_TYPE_TOWERS AUTOCAST_numBuffsBeforeIdle: 1 caster_art: Abilities\Spells\Undead\CarrionSwarm\CarrionSwarmDamage.mdl target_art: Abilities\Spells\Undead\DeathPact\DeathPactCaster.mdl AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_BUFF AUTOCAST_buffType: dave_sacrifice_target AUTOCAST_isExtended: false AUTOCAST_targetSelf: false
private function onAutocast takes Tower tower returns nothing
    local Tower target = Event.getTarget()
    local Buff b

    if target.getFamily() != tower.getFamily() then
        if target.getBuffOfType(dave_sacrifice_target) != 0 then
            call dave_sacrifice_target.apply(tower, target, 0)
        else
            set b = dave_sacrifice_target.apply(tower, target, 0)
            set b.userReal = tower.getCurrentAttackDamageWithBonus()*(0.45+(0.006*tower.getLevel()))
            call target.modifyProperty(MOD_DPS_ADD, b.userReal) 
        endif
        
        call dave_sacrifice_altar.apply(tower, tower, tower.getLevel())
    endif
endfunction

Header

    globals
        //@import
        BuffType dave_sacrifice_target
        //@import
        BuffType dave_sacrifice_altar
        //@import
        BuffType dave_blood_target
        //@import
        BuffType dave_blood_altar
    endglobals
    
    private function init takes nothing returns nothing
    endfunction

On Attack

ONATTACK_chance: 0.15 ONATTACK_chanceLevelAdd: 0.004
function onAttack takes Tower tower returns nothing
        local integer numTowers
        local integer level = tower.getLevel() 
        local Tower u
        local Buff b
        local Iterate it = Iterate.overUnitsInRangeOfCaster(tower, TARGET_TOWERS, 200)

        set b = tower.getBuffOfType(dave_blood_altar)
        set numTowers = it.count() - 1

        if b == 0 then
          call SFXAtUnit("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodKnight.mdl", tower.getUnit())
            loop
                set u = it.next()
                exitwhen u == 0
                if u != tower then
                    call dave_blood_target.apply(tower, u, (75 + level)/numTowers)
                endif
            endloop
            if numTowers > 0 then
                call dave_blood_altar.apply(tower, tower, level)
                call tower.addExp(0.5 * numTowers)
            endif
        else
          call it.destroy()    
        endif
    
endfunction
Supercollider v1
2400
ID:
403
Family ID:
Author:
the_red_terror
Rarity:
rare
Element:
iron
Attack Type:
Energy
Attack Range:
900
Attack CD:
1
Damage:
1413-1413
Status:
Approved

Description:

Gains a lot of speed and damage on each attack, while losing the bonus on kill.
Energy Acceleration
Every attack increases attack speed and damage by 4%. 

Level Bonus:
+0.1% attack speed and damage
Errant Tachyons
On kill, this tower is stunned for 2 seconds and the bonus from Energy Acceleration is lost.
Download

Toggle Triggers

Header

            globals
        MultiboardValues Red_Terror_Values
    endglobals

    
    //Do not remove or rename this function!
    //Put your initialization tasks here, this function will be called on map init

    //@import 
        function redterror_energy_rotation takes Tower tower returns nothing 
        endfunction

    
    private function init takes nothing returns nothing
            set Red_Terror_Values = MultiboardValues.create(1)
            call Red_Terror_Values.setKey(0, "Acceleration")
    endfunction
        

On Attack

ONATTACK_chance: 1.0 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
            
local integer lvl = tower.getLevel()
        call tower.modifyProperty(MOD_DAMAGE_ADD_PERC,0.04+(lvl*0.001))
        call tower.modifyProperty(MOD_ATTACKSPEED,0.04+(lvl*0.001))
        set tower.userReal = tower.userReal+(0.04+(lvl*0.001))
            call redterror_energy_rotation(tower)
        
endfunction

On Kill

function onKill takes Tower tower returns nothing
            
local integer lvl = tower.getLevel()
            call  SFXAtUnit("Abilities\\Spells\\Orc\\FeralSpirit\\feralspiritdone.mdl",Event.getTarget().getUnit())
                call tower.modifyProperty(MOD_DAMAGE_ADD_PERC,-(tower.userReal))
                call tower.modifyProperty(MOD_ATTACKSPEED,-(tower.userReal))
                call cb_stun.applyOnlyTimed(tower,tower,2)
                set tower.userReal = 0
                    call redterror_energy_rotation(tower)
//different SFX?
        
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
            
local Effect e = Effect.createAnimatedScaled("Abilities\\Spells\\Orc\\SpiritLink\\SpiritLinkTarget.mdl",tower.getX(), tower.getY(), 8.0, 0.0, 1.50)
    set tower.userInt2 = e
    set tower.userReal = 0
    call redterror_energy_rotation(tower)
        
endfunction

On Tower Destruction

function onDestruct takes Tower tower returns nothing
            
local Effect e = tower.userInt2
    call e.destroy()
        
endfunction

On Tower Details

goldcost: 0
function onTowerDetails takes Tower tower returns MultiboardValues
            
call Red_Terror_Values.setValue(0, R2SW((tower.userReal*100),1,1))
        return Red_Terror_Values
        
endfunction
Totally Frozen Troll v1
2400
ID:
479
Family ID:
Author:
cedi
Rarity:
uncommon
Element:
ice
Attack Type:
Elemental
Attack Range:
900
Attack CD:
1.5
Damage:
1362-1362
Mana:
100
Mana regen:
2.5
Status:
Approved

Description:

His father said to him: Stay cool. And he did.
Specials:
-50% dmg to undead
+25% dmg to orcs
+25% dmg to humanoids
Blizzard
Summons 8 waves of icy spikes which fall down to earth. Each wave deals 1000 damage in an AoE of 500. Each time a unit is damaged by this spell there is a chance of 45% to slow the unit by 14% for 5.5 seconds and a chance of 25% to stun the unit for 1 seconds.

Level Bonus:
+50 damage
+0.01% slow
+1% chance for slow
+0.1% chance for stun

AC_TYPE_OFFENSIVE_UNIT
 95, 900 range, 10s cooldown
Download

Toggle Triggers

Autocast

caster_art: AUTOCAST_cooldown: 10 AUTOCAST_numBuffsBeforeIdle: 0 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_UNIT AUTOCAST_manacost: 95 AUTOCAST_range: 900 AUTOCAST_buffType: 0 AUTOCAST_targetSelf: true AUTOCAST_targetType: 0 target_art: AUTOCAST_autoRange: 900
private function onAutocast takes Tower tower returns nothing
    local unit u = Event.getTarget().getUnit() 
    call Troll_blizzard.pointCastFromCasterOnPoint( tower, GetUnitX( u ), GetUnitY( u ), 1.00 + I2R( tower.getLevel() ) * 0.05, tower.calcSpellCritNoBonus() )
    set u = null
endfunction

Header

    globals
        BuffType Troll_blizzardslow
        Cast Troll_blizzard
    endglobals
    
    function OnBlizzard takes DummyUnit U returns nothing
        if U.getCaster().calcChance( 0.45 + I2R( U.getCaster().getLevel() ) * 0.01 ) then
            call Troll_blizzardslow.applyOnlyTimed( U.getCaster(), Event.getTarget(), 5.50 )
        endif
        if U.getCaster().calcChance( 0.25 + I2R( U.getCaster().getLevel() ) * 0.001 ) then
            call cb_stun.applyOnlyTimed( U.getCaster(), Event.getTarget(), 1.00 )
        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 mod2 = Modifier.create()
        set Troll_blizzardslow = BuffType.create(0.0,0.0,false)
        call mod2.addModification(MOD_MOVESPEED,-0.14,-0.001)
        call Troll_blizzardslow.setBuffModifier(mod2)
        call Troll_blizzardslow.setBuffIcon('@@4@@')
        set Troll_blizzard = Cast.create( '@@0@@', "blizzard", 9.00 )
        call Troll_blizzard.setDamageEvent( EventHandler.OnBlizzard )
        call Troll_blizzardslow.setStackingGroup("cedi_troll_blizzard")
    endfunction
Luxurious Fire Pit v1
2400
ID:
560
Family ID:
Author:
Boekie
Rarity:
common
Element:
fire
Attack Type:
Decay
Attack Range:
800
Attack CD:
0.9
Damage:
1692-1692
Status:
Approved

Description:

A fire pit that has the ability to unleash some powerful flames.
Specials:
2x multicrit
Hot Coals
Whenever this tower kills a creep it gains 35% bonus crit chance for 11.5 seconds.

Level Bonus:
+0.05 sec duration
+0.3% crit chance
Download

Toggle Triggers

Header

    globals
    //@import 
    BuffType boekie_coals_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
    endfunction

On Kill

function onKill takes Tower tower returns nothing
local integer lvl = tower.getLevel() 
call boekie_coals_buff.applyCustomTimed(tower,tower,200+(lvl*3),11.5+0.05*lvl) 
endfunction