Broken Circle of Wind v1
50
ID:
312
Family ID:
Author:
SternBogen / Natac & girlfriend
Rarity:
uncommon
Element:
storm
Attack Type:
Physical
Attack Range:
1100
Attack CD:
1.4
Damage:
54-56
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 20% chance to catch a ground, non-boss unit in a cyclone for 0.5 seconds, dealing 20 physical damage to all units in 300 AoE when it falls back down. Falling champions deal 25% more damage. 

Level Bonus:
+2 damage
+0.3% chance to catch
Download

Toggle Triggers

Header

    globals
        //@export
        BuffType sternbogen_broken_wind
    endglobals
    
    // Creep got buffed -> move creep up
    function cyclone_creep_up takes Buff b returns nothing
        local Creep c = b.getBuffedUnit()
        // (start) cyclone animation
        set b.userInt = Effect.createAnimated("Abilities\\Spells\\NightElf\\Cyclone\\CycloneTarget.mdl", c.getX(), c.getY(), 0.0, 0.0)
        call Effect(b.userInt).noDeathAnimation()
        // move creep up
        call c.adjustHeight(300, 1000)
    endfunction 
    
    // turn the creep (cyclone) -> Periodic event
    function cyclone_creep_turn takes Buff b returns nothing 
        local unit real_unit = b.getBuffedUnit().getUnit()
        call SetUnitFacing(real_unit, GetUnitFacing(real_unit) + 150.0)
        set real_unit = null
    endfunction 
    

    
    // move creep down and do damage
    function cyclone_creep_down takes Buff b returns nothing 
        local Tower t = b.getCaster()
        local Creep c = b.getBuffedUnit()
        local real ratio = 1
        // set units back (down)
        call c.adjustHeight(-300, 2500)
        // remove the cyclone
        call Effect(b.userInt).destroy()
        // effects
        call Effect.createSimpleAtUnit("Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl", c).destroy()
        call Effect.createSimpleAtUnit("Abilities\\Weapons\\Bolt\\BoltImpact.mdl", c).destroy()
        // do damage
        if c.getSize() == SIZE_CHAMPION then
            set ratio = 1.25
        endif
        call t.doAttackDamageAoEUnit(c, ratio * 300.0, b.userReal3, t.calcAttackMulticrit(0,0,0), 0.0)
    endfunction
    
    private function init takes nothing returns nothing
        set sternbogen_broken_wind = BuffType.createDuplicate(cb_stun, 1.0, 0, false)
        call sternbogen_broken_wind.setBuffIcon('@@0@@')
        
        // on creation on buff ON the creep -> lift unit up
        call sternbogen_broken_wind.addEventOnCreate(cyclone_creep_up)
        // during buffed: periodic -> rotate creep
        call sternbogen_broken_wind.addPeriodicEvent(cyclone_creep_turn, 0.1)
        // buff ends -> unit down, damage or if creep gets killed while lift up
        call sternbogen_broken_wind.addEventOnCleanup(cyclone_creep_down)

    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 = 20 + 2 * 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.20 + (0.003 * 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.5)
            if b != 0 then
                set b.userReal3 = damage
            endif
        endif
    endif 
endfunction
Wooden Trap v1
50
ID:
325
Family ID:
Author:
Boekie
Rarity:
uncommon
Element:
iron
Attack Type:
Physical
Attack Range:
950
Attack CD:
1.3
Damage:
38-38
Status:
Approved

Description:

This trap is used to capture beasts but it works on other stuff too.
Activate Trap
Every 15 seconds this tower traps 3 creeps in 950 range, dealing 70 spelldamage and stunning them for 0.5 seconds.

Level Bonus:
+3 spelldamage 
-0.2 seconds cooldown
Download

Toggle Triggers

Header

    globals
    endglobals
    
    //@export
    function trap takes Tower tower, real cooldown, real baseDamage, real damageAdd, real stunDuration, integer maxTargets returns nothing
        local integer lvl = tower.getLevel()
        local Iterate it = Iterate.overUnitsInRangeOfCaster(tower,TARGET_CREEPS,950)
        local Unit next = it.nextRandom()
        local integer numTargets = 0

        loop
            exitwhen next == 0
            set numTargets = numTargets + 1
            call cb_stun.applyOnlyTimed(tower, next, stunDuration) 
            call tower.doSpellDamage(next,baseDamage+lvl*damageAdd,tower.calcSpellCritNoBonus())
            call SFXAtUnit("Abilities\\Spells\\Orc\\ReinforcedTrollBurrow\\ReinforcedTrollBurrowTarget.mdl",next.getUnit())
            exitwhen numTargets >= maxTargets
            set next = it.nextRandom()
        endloop
        
        if next != 0 then 
            call it.destroy()
        endif
        
        if numTargets > 0 then
            call Event.getCurrentPeriodicEvent().enableAdvanced(cooldown - lvl*0.2, false) //Trapping successful; go into cooldown.
        else
            call Event.getCurrentPeriodicEvent().enableAdvanced(2, false) //Nothing trapped; go into a shorter cooldown.
        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
    endfunction

Periodic

PERIODIC_period: 2
function periodic takes Tower tower returns nothing
    call trap(tower, 15, 70, 3, 0.5, 3)
endfunction
Ruined Monolith v1
50
ID:
638
Family ID:
Author:
drol
Rarity:
common
Element:
storm
Attack Type:
Physical
Attack Range:
1050
Attack CD:
1.5
Damage:
47-51
Status:
Approved

Description:

Covered with ancient runes from rituals practiced ages ago.
Specials:
Bounce attack:
   3 targets
   -50% damage per bounce
+10% dmg to air (+1%/lvl)
Download
Felweed v1
55
ID:
405
Family ID:
Author:
SirCoqaLot.
Rarity:
common
Element:
fire
Attack Type:
Decay
Attack Range:
750
Attack CD:
1
Damage:
49-49
Status:
Approved

Description:

Basic Tower that sometimes deals more damage.
Fireblossom
Every 7th attack deals 10% bonus damage.
Every 8th attack deals 20% bonus damage.
Every 9th attack deals 30% bonus damage.
Every 10th attack deals 40% bonus damage. 

Level Bonus:
+0.2% bonus damage every 7th attack.
+0.4% bonus damage every 8th attack.
+0.6% bonus damage every 9th attack.
+0.8% bonus damage every 10th attack.
Download

Toggle Triggers

On Damage

ONDAMAGE_chance: 1.0 ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
local real damage = Event.damage
local integer level = tower.getLevel()

set tower.userInt = tower.userInt +1
set tower.userInt2 = tower.userInt2 +1
set tower.userInt3 = tower.userInt3 +1
set tower.userReal = tower.userReal +1

if tower.userInt >= 7 then
    set Event.damage = Event.damage * (1.1 + level * 0.002)
    set tower.userInt = 0
endif
if tower.userInt2 >= 8 then
    set Event.damage = Event.damage * (1.2 + level * 0.004)
    set tower.userInt2 = 0
endif
if tower.userInt3 >= 9 then
    set Event.damage = Event.damage * (1.3 + level * 0.006)
    set tower.userInt3 = 0
endif
if tower.userReal >= 10 then
    set Event.damage = Event.damage * (1.4 +level * 0.008)
    set tower.userReal = 0
endif
if Event.damage > damage then
    call tower.getOwner().displaySmallFloatingText(I2S(R2I(Event.damage)),tower,255,150,150,0)
endif
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
set tower.userInt = 0
set tower.userInt2 = 0
set tower.userInt3 = 0
set tower.userReal = 0
endfunction
Small Pocket Rocket v1
55
ID:
544
Family ID:
Author:
Boekie
Rarity:
common
Element:
iron
Attack Type:
Decay
Attack Range:
700
Attack CD:
1.65
Damage:
75-96
Status:
Approved

Description:

This tower attacks with rockets that deal splash damage and deal extra damage to mass.
Specials:
Splash attack:
   125 AoE: 55% damage
+20% dmg to masses (+2%/lvl)
Download
Lunar Sentinel v1
60
ID:
5
Family ID:
Author:
SirCoqaLot.
Rarity:
uncommon
Element:
astral
Attack Type:
Energy
Attack Range:
1200
Attack CD:
2
Damage:
17-37
Status:
Approved

Description:

The spirit of a watcher left to look over the ruins.
Lunar Grace
Smites a target creep dealing 50 spelldamage to it. There is a 12.5% chance to empower the smite with lunar energy dealing 50 additional spell damage, stunning the target for 0.3 seconds and making it receive 12% more damage from spells for 2.5 seconds.

Level Bonus:
+2 inital and chanced spell damage 
+0.5% chance 
+20 initial damage at level 15 
+3% spell damage received at level 15 
+0.1 seconds stun at level 25

AC_TYPE_OFFENSIVE_UNIT
 0, 1200 range, 2s cooldown
Download

Toggle Triggers

Autocast

caster_art: AUTOCAST_cooldown: 2 AUTOCAST_numBuffsBeforeIdle: 0 AUTOCAST_isExtended: true AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_UNIT AUTOCAST_manacost: 0 AUTOCAST_range: 1200 AUTOCAST_buffType: 0 AUTOCAST_targetSelf: false AUTOCAST_targetType: 0 target_art: Abilities\Spells\Items\AIil\AIilTarget.mdl AUTOCAST_autoRange: 1200
private function onAutocast takes Tower tower returns nothing
local integer level = tower.getLevel()
local Unit target = Event.getTarget()
    if level < 15 then
        call tower.doSpellDamage(target,50+level*2,tower.calcSpellCritNoBonus())
    else
        call tower.doSpellDamage(target,70+level*2,tower.calcSpellCritNoBonus())
    endif
    
        if tower.calcChance(0.125 + level * 0.005) == true then
            call tower.doSpellDamage(target,50 + level * 2,tower.calcSpellCritNoBonus())
            if level < 25 then
                call cb_stun.applyOnlyTimed(tower,target,0.3)
            else
                call cb_stun.applyOnlyTimed(tower,target,0.4)
            endif
            if level < 15 then
                call sir_moonp_buff.applyAdvanced(tower,target,0,120,2.5)
            else
                call sir_moonp_buff.applyAdvanced(tower,target,0,150,2.5)
            endif
        endif
endfunction

Header

    globals
    //@export
    BuffType sir_moonp_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()
    set sir_moonp_buff = BuffType.create(0,0,false)
    call m.addModification(MOD_SPELL_DAMAGE_RECEIVED,0,0.001)
    call sir_moonp_buff.setBuffIcon('@@0@@')
    call sir_moonp_buff.setBuffModifier(m)
    call sir_moonp_buff.setStackingGroup("sir_moonp_buff")
    endfunction
Abandoned Pit v1
60
ID:
125
Family ID:
Author:
drol
Rarity:
common
Element:
iron
Attack Type:
Decay
Attack Range:
900
Attack CD:
1.85
Damage:
107-118
Status:
Approved

Description:

Sometimes even the most fruitless places still have some treasure left.
Specials:
+20% bounty collected (+0.5%/lvl)
Download