Scales v1
3500
ID:
210
Family ID:
Author:
cedi
Rarity:
unique
Element:
storm
Attack Type:
Energy
Attack Range:
1500
Attack CD:
1.5
Damage:
843-851
Abil. Factor:
0.2
Status:
Approved

Description:

Brrizzl fizzl.

Latest Upload Comment:

Restored from 1.10
Specials:
+20% dmg to air (+0.8%/lvl)
Lightmare
Summons a storm cloud which attacks units in 1500 range. Every 0.33 seconds the cloud attacks up to 3 targets with forked lightning. Each lightning deals 1300 spell damage. Lightmare lasts 10 seconds and does not benefit from buff duration.

Level Bonus:
+52 spell damage
I Scale
This tower gains 1.66% spell damage, spell crit damage and 0.125% spell crit chance for each level the player survives.
Electrify
Whenever this tower damages a creep, it has a 20% chance to electrify it for 5 seconds. Each second, all creeps in 225 range of the electrified unit take 900 spell damage.

Level Bonus:
+0.8% chance
+36 spell damage per second
Overcharge
Whenever this tower deals damage with its attacks or its other innate abilities it has a 25% chance to deal 900 spell damage to the damaged unit. Overcharge can trigger itself, but the chance to do so is decreased by 5% for each time it retriggers.

Level Bonus:
+36 spell damage
+1% chance
Download

Toggle Triggers

Autocast

caster_art: AUTOCAST_cooldown: 10.5 AUTOCAST_numBuffsBeforeIdle: 0 AUTOCAST_isExtended: false AUTOCAST_autocastType: AC_TYPE_OFFENSIVE_IMMEDIATE AUTOCAST_manacost: 1000 AUTOCAST_range: 1500.0 AUTOCAST_buffType: 0 AUTOCAST_targetSelf: true AUTOCAST_targetType: 0 target_art: AUTOCAST_autoRange: 1500.00
private function onAutocast takes Tower tower returns nothing
    local Effect E = Effect.createScaled( "Abilities\\Spells\\Human\\CloudOfFog\\CloudOfFog.mdl", tower.getX(), tower.getY(), 300.00, 0.00, 0.60 )
    local integer UID = tower.getUID()
    call E.setLifetime( 10.0 )
    set tower.userInt2 = 1
    call TriggerSleepAction( 10.0 )
    if UID == tower.getUID() then
        set tower.userInt2 = 0
    endif
endfunction

Header

    globals
        Cast TUNDER
        BuffType ELEC
        MultiboardValues MB
    endglobals
    
    function overchargeDamage takes Tower tower, Creep targ, integer level returns nothing
        local unit u = targ.getUnit()
        local integer i = 0
        loop
            exitwhen GetWidgetLife( u ) <= 0.405
            if tower.calcChance( ( 0.25 + level / 100.00 ) - i * 0.05 ) then
                call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl", u, "origin" ) )
                call tower.doSpellDamage( targ, 900.0 + level * 36.0, tower.calcSpellCritNoBonus() )
            else
                exitwhen true
            endif
            set i = i + 1
        endloop
        set u = null    
    endfunction
    
    function overchargeA takes SpellDummy D returns nothing
        local Tower tower = D.getCaster()
        call overchargeDamage(tower,Event.getTarget(),tower.getLevel())
    endfunction
    
    function elec takes Buff B returns nothing
        local Tower tower = B.getCaster()
        local Unit targ = B.getBuffedUnit()
        local Iterate I = Iterate.overUnitsInRangeOfUnit( tower, TARGET_TYPE_CREEPS, targ, 225.0 )
        local real dmg = 900.0 + 36.0 * tower.getLevel()
        local Unit U
        loop
            set U = I.next()
            exitwhen U == 0
            if U != targ then
                call tower.doSpellDamage( U, dmg, tower.calcSpellCritNoBonus() )
                call overchargeDamage(tower,U,tower.getLevel())
            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 TUNDER = Cast.create( '@@0@@', "forkedlightning", 2.0 )
        call TUNDER.setSourceHeight( 300.00 )
        call TUNDER.setDamageEvent( overchargeA )
        
        set ELEC = BuffType.create( 5.0, 0.00, false )
        call ELEC.setBuffIcon( '@@2@@' )
        call ELEC.addPeriodicEvent( elec, 1.0 )
        
        set MB = MultiboardValues.create( 3 )
        call MB.setKey( 0, "Spell Damage Bonus" )
        call MB.setKey( 1, "Spell Crit Damage Bonus" )
        call MB.setKey( 2, "Spell Crit Chance Bonus" )
    endfunction

On Attack

ONATTACK_chance: 1.0 ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
    local integer i = tower.getOwner().getTeam().getLevel()
    local integer i2 = i
    if i > tower.userInt then
        set i = i - tower.userInt
        set tower.userInt3 = tower.userInt3 + i
        
        call tower.modifyProperty( MOD_SPELL_DAMAGE_DEALT, i / 60.00 )
        call tower.modifyProperty( MOD_SPELL_CRIT_DAMAGE, i / 60.00 )
        call tower.modifyProperty( MOD_SPELL_CRIT_CHANCE, i / 800.00 )
        
        set tower.userInt = i2
    endif
endfunction

On Damage

ONDAMAGE_chance: 0.2 ONDAMAGE_chanceLevelAdd: 0.008
function onDamage takes Tower tower returns nothing
    call ELEC.apply( tower, Event.getTarget(), tower.getLevel() )
endfunction

On Damage

ONDAMAGE_chance: 1.00 ONDAMAGE_chanceLevelAdd: 0.00
function onDamage takes Tower tower returns nothing
    call overchargeDamage(tower,Event.getTarget(),tower.getLevel())
endfunction

On Tower Creation

function onCreate takes Tower tower returns nothing
    set tower.userInt = tower.getOwner().getTeam().getLevel()
    set tower.userInt2 = 0
    set tower.userInt3 = 0
endfunction

On Tower Details

goldcost: 0
function onTowerDetails takes Tower tower returns MultiboardValues
    call MB.setValue( 0, formatPercent( tower.userInt3 * 1.66/100,2 ) ) 
    call MB.setValue( 1, formatPercent( tower.userInt3 * 1.66/100,2 ) )
    call MB.setValue( 2, formatPercent( tower.userInt3 * 0.125/100,2 ) )
    return MB
endfunction

Periodic

PERIODIC_period: 0.33
function periodic takes Tower tower returns nothing
    local Iterate I
    local Unit U
    if tower.userInt2 == 1 then

    set I = Iterate.overUnitsInRangeOfCaster( tower, TARGET_TYPE_CREEPS, 1500.00 )
    set U = I.next()
    if U != 0 then
        call TUNDER.targetCastFromCaster( tower, U, 1300.00 + tower.getLevel() * 52.0, tower.calcSpellCritNoBonus() )
        call I.destroy()
    endif
    
    endif
endfunction