Array
(
    [scriptVersion] => 7
    [oeValues] => Array
        (
            [auto] => Array
                (
                )

            [Art] => ReplaceableTextures\CommandButtons\BTNWitchDoctor.blp
            [turnRate] => 0.3
            [dmgplus1] => 4755
            [bldtm] => 1
            [goldcost] => 4600
            [sides1] => 1
            [manaN] => 40
            [acquire] => 800
            [upgrades] => Array
                (
                )

            [Upgrade] => Array
                (
                )

            [Name] => Vol'jin the Witch Doctor
            [weapTp1] => missile
            [MissileHoming] => 1
            [file] => units\orc\WitchDoctor\WitchDoctor.mdl
            [uberSplat] => OSMA
            [Missileart] => Abilities\Weapons\WitchDoctorMissile\WitchDoctorMissile.mdl
            [Missilespeed] => 1500
            [dice1] => 1
            [RngBuff1] => 250
            [regenMana] => 1.5
            [modelScale] => 0.6
            [rangeN1] => 800
            [backSw1] => 0.6
            [atkType1] => pierce
            [cool1] => 2
            [Ubertip] => "Try out my Voodoo maaan."                              credits to der_kleine_Tomy
            [abilList] => Array
                (
                )

            [moveHeight] => 33
            [dmgpt1] => 0.73
            [buildingShadow] => Array
                (
                )

            [castbsw] => 0.52
            [targs1] => Array
                (
                )

            [weapsOn] => 1
            [castpt] => 0.35
        )

    [settings] => Array
        (
            [balanceTip] => |cffFFFF00+3% |rattackspeed/lvl|n|cffFFFF00+8% |rdamage/lvl
            [abil_factor] => 0.375
            [author] => SirCoqaLot.
            [alpha] => 255
            [authorDisplay] => SirCoqaLot.
            [version] => 1.0
            [element] => astral
            [rarity] => unique
        )

    [effects] => Array
        (
            [0] => Array
                (
                    [x] => 30.6495
                    [y] => 41.4911
                    [z] => -44.8
                    [scale] => 0.65
                    [rot] => 3.78737
                    [file] => Doodads\Ruins\Props\RuinsPillar\RuinsPillar2.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => 0
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [1] => Array
                (
                    [x] => -0.643791
                    [y] => 3.86516
                    [z] => -19.2
                    [scale] => 0.55
                    [rot] => 2.37859
                    [file] => Doodads\Ruins\Structures\RuinsBuilding\RuinsBuilding1.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => 0
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [2] => Array
                (
                    [x] => -33.6028
                    [y] => 41.232
                    [z] => -44.8
                    [scale] => 0.65
                    [rot] => 2.3562
                    [file] => Doodads\Ruins\Props\RuinsPillar\RuinsPillar2.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => 0
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [3] => Array
                (
                    [x] => -43.0318
                    [y] => -40.6332
                    [z] => -44.8
                    [scale] => 0.65
                    [rot] => 4.36332
                    [file] => Doodads\Ruins\Props\RuinsPillar\RuinsPillar2.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => 0
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [4] => Array
                (
                    [x] => -18.1515
                    [y] => -1.18787
                    [z] => 0
                    [scale] => 0.1
                    [rot] => 3.15605
                    [file] => Doodads\Ruins\Structures\RuinsArchway0_\RuinsArchway0_0.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => -1.55
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [5] => Array
                (
                    [x] => 39.3035
                    [y] => -47.2271
                    [z] => -44.8
                    [scale] => 0.65
                    [rot] => 5.63115
                    [file] => Doodads\Ruins\Props\RuinsPillar\RuinsPillar2.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => 0
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [6] => Array
                (
                    [x] => -0.428693
                    [y] => -31.4557
                    [z] => 0
                    [scale] => 0.3
                    [rot] => 2.41424
                    [file] => Doodads\Ruins\Structures\RuinsBuilding\RuinsBuilding1.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => 0
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [7] => Array
                (
                    [x] => 21.0413
                    [y] => -2.58734
                    [z] => 6.4
                    [scale] => 0.1
                    [rot] => 0.0121412
                    [file] => Doodads\Ruins\Structures\RuinsArchway0_\RuinsArchway0_0.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => -1.55
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [8] => Array
                (
                    [x] => 21.0126
                    [y] => -1.06811
                    [z] => 0
                    [scale] => 0.1
                    [rot] => 6.27143
                    [file] => Doodads\Ruins\Structures\RuinsArchway0_\RuinsArchway0_0.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => -1.55
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [9] => Array
                (
                    [x] => -18.1515
                    [y] => -1.18787
                    [z] => 6.4
                    [scale] => 0.1
                    [rot] => 3.14332
                    [file] => Doodads\Ruins\Structures\RuinsArchway0_\RuinsArchway0_0.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => -1.55
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [10] => Array
                (
                    [x] => -49.8303
                    [y] => -7.55039
                    [z] => -6.4
                    [scale] => 0.15
                    [rot] => 3.04305
                    [file] => Doodads\Terrain\CliffDoodad\Waterfall\Waterfall.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => 0
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [11] => Array
                (
                    [x] => 43.0294
                    [y] => -10.8368
                    [z] => -6.4
                    [scale] => 0.15
                    [rot] => 6.20243
                    [file] => Doodads\Terrain\CliffDoodad\Waterfall\Waterfall.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => 0
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [12] => Array
                (
                    [x] => 37.1381
                    [y] => 1.76902
                    [z] => 0
                    [scale] => 0.75
                    [rot] => 5.06146
                    [file] => Abilities\Spells\NightElf\MoonWell\MoonWellTarget.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => 0
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [13] => Array
                (
                    [x] => -28.1361
                    [y] => 5.13231
                    [z] => 0
                    [scale] => 0.8
                    [rot] => 4.99103
                    [file] => Abilities\Spells\NightElf\MoonWell\MoonWellTarget.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => 0
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [14] => Array
                (
                    [x] => -0.769684
                    [y] => -20.2385
                    [z] => 25.6
                    [scale] => 0.075
                    [rot] => 4.64599
                    [file] => Doodads\Ruins\Structures\RuinsArchway0_\RuinsArchway0_0.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => -1.55
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [15] => Array
                (
                    [x] => 15.9636
                    [y] => -7.30034
                    [z] => 25.6
                    [scale] => 0.0625
                    [rot] => 0.0209271
                    [file] => Doodads\Ruins\Structures\RuinsArchway0_\RuinsArchway0_0.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => -1.55
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [16] => Array
                (
                    [x] => -18.0239
                    [y] => -5.19101
                    [z] => 25.6
                    [scale] => 0.0625
                    [rot] => 3.09748
                    [file] => Doodads\Ruins\Structures\RuinsArchway0_\RuinsArchway0_0.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => -1.55
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

        )

    [dmgTable] => Array
        (
            [0] => Array
                (
                    [id] => MOD_ATTACKSPEED
                    [base] => 0
                    [add] => 0.03
                )

            [1] => Array
                (
                    [id] => MOD_DAMAGE_BASE_PERC
                    [base] => 0
                    [add] => 0.08
                )

        )

    [triggers] => Array
        (
            [0] => Array
                (
                    [name] => On Attack
                    [code] => local integer level = tower.getLevel()
    local unit towerUnit = tower.getUnit()
    local real attackspeed = tower.getCurrentAttackspeed()
    local PeriodicEvent periodicEvent = tower.userInt
    local real towerUnitZ = GetUnitFlyHeight(towerUnit)
    local integer counter = 0
    local integer maxWards = 2
    local Effect e
    local real duration
    local real x
    local real y
    
    if level == 25 then
        set maxWards = 4
    elseif level >= 15 then
        set maxWards = 3
    endif
    
    loop
        // Check whether all wards already exist, if not create one
        if not HaveSavedInteger(voljin_hashtable, tower, counter) then
            set x = LoadReal(voljin_hashtable, tower, counter + 2)
            set y = LoadReal(voljin_hashtable, tower, counter + 3)
            set e = Effect.createAnimated("units\\orc\\SerpentWard\\SerpentWard.mdl", x, y, towerUnitZ - 20, -(45.0 + 90.0 * (counter / 4)))
            call e.setScale(0.4)
            set duration = (6.0+tower.getLevel()*0.1) * tower.getProp_BuffDuration()
            
            call SaveInteger(voljin_hashtable, tower, counter, e) // Save the effect
            call SaveReal(voljin_hashtable, tower, counter + 1, duration) // Save the duration
            
            set tower.userInt2 = tower.userInt2 + 1 // Save the amount of wards
            // The first ward has been created => Start the Periodic Event
            if tower.userInt2 == 1 then
                call periodicEvent.enableAdvanced(attackspeed, false)
                set tower.userReal = attackspeed // Save the periodic interval
            endif
            
            exitwhen true // Exit
        endif
        set counter = counter + 4 // Move to the next ward
        exitwhen counter > (maxWards * 4 - 4)
    endloop
    
    
    set towerUnit = null
                    [values] => Array
                        (
                            [visible] => true
                            [icon] => ReplaceableTextures\CommandButtons\BTNSerpentWard.blp
                            [name] => Serpent Ward
                            [short_explain] => Whenever Vol'jin attacks he might summon a serpent ward to assist him.
                            [ONATTACK_chance] => 0.18
                            [ONATTACK_chanceLevelAdd] => 0.0028
                            [long_explain] => Vol'jin has an |cffffff8018%|r chance on attack to summon |cffffff801|r of |cffffff802|r Serpent Wards to assist him. Each ward lasts |cffffff806|r seconds modified by this tower's buff duration, deals |cffffff8020%|r of Vol'jins attack damage and has Vol'jins current attackspeed at cast. Each Ward attacks a random target in |cffffff80800|r range and has a |cffffff8035%|r chance to stack |cffffff80'Maledict'|r on attack. Wards can not be resummoned and their duration cannot be refreshed. |n|n|cffFF8000Level Bonus:|r|n|cffffff80+0.2%|r attackdamage|n|cffffff80+0.1|r seconds duration|n|cffffff80+0.28%|r chance to summon a ward|n|cffffff80+1|r maximum ward at level |cffffff8015|r and |cffffff8025|r
                        )

                )

            [1] => Array
                (
                    [name] => Header
                    [code] => globals
        BuffType sir_voljin_debuff
        ProjectileType sir_voljin_projectile
        hashtable voljin_hashtable
        // 0 = Ward 1
        // 1 = Duration
        // 2/3 = Position(x/y)
        // 4 = Ward 2
        // ...
    endglobals
    
    function damageEvent takes Buff b returns nothing
        set b.userReal = b.userReal + Event.damage
    endfunction
    
    function expireEvent takes Buff b returns nothing
        call b.getCaster().doSpellDamage(b.getBuffedUnit(),(0.15+(0.035+0.0014*b.getCaster().getLevel())*b.getLevel())*R2I(b.userReal),b.getCaster().calcSpellCritNoBonus())
    endfunction
    
    function purgeEvent takes Buff b returns nothing
        call b.getCaster().doSpellDamage(b.getBuffedUnit(),(0.3+(0.07+0.0028*b.getCaster().getLevel())*b.getLevel())*R2I(b.userReal),b.getCaster().calcSpellCritNoBonus())
    endfunction
    
    function ApplyMaledict takes Tower caster, Unit target, boolean B returns nothing
        local Buff b = target.getBuffOfType(sir_voljin_debuff)
        local real duration = caster.getProp_BuffDuration()
        if B == true and b == 0 then
            set sir_voljin_debuff.applyAdvanced(caster, target,1, 0, 8.0/duration).userReal = 0.0
        elseif (b != 0 and B == false and caster.calcChance(0.35)) or (b != 0 and B == true) then
            call sir_voljin_debuff.applyAdvanced(caster, target, b.getLevel() + 1, 0, 8.0/duration)
        endif
    endfunction
    
    function voljin_hit takes Projectile p, Unit hit returns nothing
        local Tower tower = p.getCaster()
        call tower.doAttackDamage(hit,tower.getCurrentAttackDamageWithBonus() * (0.2+tower.getLevel()*0.002),tower.calcAttackMulticrit(0,0,0))
        call ApplyMaledict(tower,hit,false)
    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 voljin_hashtable = InitHashtable()
        
        set sir_voljin_debuff = BuffType.create(0,0,false)
        call sir_voljin_debuff.setBuffIcon('@@0@@')
        call sir_voljin_debuff.addEventOnDamaged(damageEvent,1,0)
        call sir_voljin_debuff.setEventOnExpire(expireEvent)
        call sir_voljin_debuff.setEventOnPurge(purgeEvent)
    
        set sir_voljin_projectile=ProjectileType.create("Abilities\\Weapons\\SerpentWardMissile\\SerpentWardMissile.mdl",10.0,1200.0)
        call sir_voljin_projectile.enableHoming(ProjectileTargetEvent.voljin_hit,0.0)
	endfunction
                    [values] => Array
                        (
                            [visible] => false
                            [icon] => 
                            [name] => 
                            [short_explain] => 
                            [long_explain] => 
                        )

                )

            [2] => Array
                (
                    [name] => On Tower Destruction
                    [code] => local integer counter = 0
    loop
        if HaveSavedInteger(voljin_hashtable, tower, counter) then
            call Effect(LoadInteger(voljin_hashtable, tower, counter)).destroy()
        endif
        set counter = counter + 4
        exitwhen counter > 12
    endloop
    call FlushChildHashtable(voljin_hashtable, tower)
                    [values] => Array
                        (
                            [visible] => false
                            [icon] => 
                            [name] => 
                            [short_explain] => 
                            [long_explain] => 
                        )

                )

            [3] => Array
                (
                    [name] => On Damage
                    [code] => local Unit creep = Event.getTarget()
    local real damage = Event.damage
    local integer numPurgedBuffs = 0
    
    // Remove buffs (positive and negative buffs) and count them
    if tower.userInt3 <= Game.getGameTime() then
        set tower.userInt3 = Game.getGameTime()+100-tower.getLevel() // adding the cd
        loop
            exitwhen not (creep.purgeBuff(true) or creep.purgeBuff(false))
            set numPurgedBuffs = numPurgedBuffs + 1
        endloop
        
        set damage = damage*(1+numPurgedBuffs*(0.12+tower.getLevel()*0.0016)) // 12% damage 
        set Event.damage = damage
        if numPurgedBuffs != 0 then
            call tower.getOwner().displaySmallFloatingText(I2S(R2I(damage)),tower,255,150,255,0)
        endif
    endif
                    [values] => Array
                        (
                            [ONDAMAGE_chance] => 1.0
                            [visible] => true
                            [icon] => ReplaceableTextures\CommandButtons\BTNRegenerate.blp
                            [name] => Purify
                            [short_explain] => Whenever Vol'jin deals damage to a creep he purges it and deals additional damage.
                            [ONDAMAGE_chanceLevelAdd] => 0.0
                            [long_explain] => Whenever Vol ' jin deals damage he purges all buffs and debuffs from his target, increasing his damage dealt on that attack by |cffffff8012%|r for each purged effect. This ability has a |cffffff804|r second cooldown.|n|n|cffFF8000Level Bonus:|r|n|cffffff80-0.04|r seconds cooldown|n|cffffff80+0.16%|r damage per purged effect
                        )

                )

            [4] => Array
                (
                    [name] => Periodic
                    [code] => local Effect e
    local Unit u
    local Projectile p
    local PeriodicEvent periodicEvent = tower.userInt
    local Iterate it
    local Unit array targets
    local integer numTargets = 0
    local integer counter = 0
    local real duration
    local real facing
    local real x
    local real y
    
    // If it's the first time this event fires
    if periodicEvent == 0 then
        set tower.userInt = Event.getCurrentPeriodicEvent() // Save the event
        call Event.getCurrentPeriodicEvent().disable() // Disable it
        return
    endif
 
    // Get all targets in range
    set it = Iterate.overUnitsInRangeOfCaster(tower,TARGET_CREEPS,800)
    loop
        set u = it.next()
        exitwhen u == 0
        set targets[numTargets] = u
        set numTargets = numTargets + 1
    endloop
    
    loop
        // Is there a ward ?
        if HaveSavedInteger(voljin_hashtable, tower, counter) then
            set e = LoadInteger(voljin_hashtable, tower, counter) // Load ward effect
            set u = targets[GetRandomInt(0, numTargets - 1)] // Get a random target
            set duration = LoadReal(voljin_hashtable, tower, counter + 1) - tower.userReal // Set duration to duration - periodic interval
            if duration > 0 then // Is there duration remaining?
                if u != 0 then // Is there are unit which can be attacked ?
                    // Load position
                    set x = LoadReal(voljin_hashtable, tower, counter + 2)
                    set y = LoadReal(voljin_hashtable, tower, counter + 3)
                    // Calculate the angle between the ward and the target
                    set facing = Atan2(GetUnitY(u.getUnit()) - y, GetUnitX(u.getUnit()) - x) * bj_RADTODEG
                    call e.setFacing(facing) // Set facing
                    call e.setAnimation("attack") // Play attack animation
                    // Shoot prohectile
                    set p = Projectile.createFromPointToUnit(sir_voljin_projectile, tower, 1.0, 1.0, x, y, 147.0, u, true, false, false)
                    call p.setScale(0.4)
                    call e.queueAnimation("stand") // Play the stand animation again
                endif
                // Save the remaining duration
                call SaveReal(voljin_hashtable, tower, counter + 1, duration)
            else // No more duration
                // Remove the ward effect from the hashtable
                call RemoveSavedInteger(voljin_hashtable, tower, counter)
                call e.destroy() // Destroy the ward
                set tower.userInt2 = tower.userInt2 - 1 // Decrease the ward counter
            endif
        endif
        set counter = counter + 4 // Next ward
        // Up to 4 wards with each taking 4 storage places in the hashtable starting at 0
        // => 4 wards * 4 places - 4
        exitwhen counter > (4 * 4 - 4)
    endloop
    // Disable the event
    call periodicEvent.disable()
    // Are there any wards?
    if tower.userInt2 > 0 then
        // Activate the event
        set tower.userReal = tower.getCurrentAttackspeed()
        call periodicEvent.enableAdvanced(tower.getCurrentAttackspeed() ,false)
    endif
                    [values] => Array
                        (
                            [visible] => false
                            [PERIODIC_period] => 0.1
                            [icon] => 
                            [name] => 
                            [short_explain] => 
                            [long_explain] => 
                        )

                )

            [5] => Array
                (
                    [name] => Autocast
                    [code] => local Iterate it = Iterate.overUnitsInRangeOfUnit(tower,TARGET_CREEPS,tower,800)
    local Unit u
    loop
        set u = it.next()
        exitwhen u == 0
        call ApplyMaledict(tower,u,true)
    endloop
                    [values] => Array
                        (
                            [AUTOCAST_cooldown] => 5
                            [AUTOCAST_autoRange] => 800
                            [AUTOCAST_manacost] => 30
                            [icon] => ReplaceableTextures\CommandButtons\BTNBigBadVoodooSpell.blp
                            [AUTOCAST_range] => 800
                            [AUTOCAST_targetType] => 0
                            [AUTOCAST_numBuffsBeforeIdle] => 0
                            [caster_art] => 
                            [long_explain] => Vol'jin jinxes all units in |cffffff80800|r range around him. Targets caught by the jinx are dealt |cffffff8015%|r of the damage they received as spell damage after |cffffff808|r seconds. Maledict stacks, with each stack adding |cffffff803.5%|r additional damage. If Maledict is purged it deals double damage. This ability is unaffected by Buff Duration. |n|n|cffFF8000Level Bonus:|r|n|cffffff80+0.14%|r damage per stack
                            [target_art] => 
                            [AUTOCAST_autocastType] => AC_TYPE_OFFENSIVE_IMMEDIATE
                            [AUTOCAST_buffType] => 0
                            [AUTOCAST_isExtended] => true
                            [name] => Maledict
                            [AUTOCAST_targetSelf] => false
                            [short_explain] => Vol'jin jinxes an area and deals magic damageto the targets based on the damage they received.
                        )

                )

            [6] => Array
                (
                    [name] => On Tower Creation
                    [code] => local real towerX = tower.getX()
    local real towerY = tower.getY()
    
    set tower.userInt = 0 // Contains the Periodic Event
    set tower.userInt2 = 0 // Stores the amount of wards
    set tower.userReal = 0 // Stores the periodic interval
    set tower.userInt3 = Game.getGameTime()-100 // stores the cooldown of purify
    // Ward 1
    call SaveReal(voljin_hashtable, tower,  2, towerX + 38)
    call SaveReal(voljin_hashtable, tower,  3, towerY - 53)
    // Ward 2
    call SaveReal(voljin_hashtable, tower,  6, towerX - 43)
    call SaveReal(voljin_hashtable, tower,  7, towerY - 45)
    // Ward 3
    call SaveReal(voljin_hashtable, tower,  10, towerX - 33)
    call SaveReal(voljin_hashtable, tower,  11, towerY + 38)
    // Ward 4
    call SaveReal(voljin_hashtable, tower, 14, towerX + 35)
    call SaveReal(voljin_hashtable, tower, 15, towerY + 38)
                    [values] => Array
                        (
                            [visible] => false
                            [icon] => 
                            [name] => 
                            [short_explain] => 
                            [long_explain] => 
                        )

                )

        )

    [abilities] => Array
        (
        )

    [buffs] => Array
        (
            [0] => Array
                (
                    [id] => @@0@@
                    [derivedFrom] => BHav
                    [oeValues] => Array
                        (
                            [Targetattach] => overhead
                            [EditorName] => Maledict
                            [Buffubertip] => This unit suffers from Maledict; it will be dealt spell damage when Maledict ends or is purged.
                            [TargetArt] => Abilities\Spells\Orc\SpiritLink\SpiritLinkTarget.mdl
                            [Targetattachcount] => 1
                            [Bufftip] => Maledict
                            [Buffart] => ReplaceableTextures\CommandButtons\BTNBigBadVoodooSpell.blp
                        )

                )

        )

    [units] => Array
        (
        )

    [references] => Array
        (
        )

)