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

            [Art] => ReplaceableTextures\CommandButtons\BTNDarkPortal.blp
            [dmgplus1] => 599
            [bldtm] => 1
            [goldcost] => 800
            [sides1] => 1
            [acquire] => 800
            [upgrades] => Array
                (
                )

            [Upgrade] => Array
                (
                )

            [Name] => Portal to Swine Purgatory
            [weapTp1] => missile
            [MissileHoming] => 1
            [file] => buildings\other\SacrificialAltar\SacrificialAltar.mdl
            [uberSplat] => OSMA
            [Missileart] => none.mdl
            [Missilespeed] => 10000
            [dice1] => 1
            [RngBuff1] => 250
            [modelScale] => 0.6
            [rangeN1] => 950
            [atkType1] => pierce
            [cool1] => 2.5
            [Ubertip] => Attacks with a rampage of exploding pigs straight from the Swine Purgatory.
            [abilList] => Array
                (
                )

            [buildingShadow] => Array
                (
                )

            [targs1] => Array
                (
                )

            [weapsOn] => 1
        )

    [settings] => Array
        (
            [balanceTip] => |cffFFFF00+20% |rdmg to air
            [abil_factor] => 0.255
            [author] => Deemzul
            [alpha] => 255
            [authorDisplay] => Deemzul
            [version] => 1.0
            [element] => fire
            [rarity] => rare
        )

    [effects] => Array
        (
            [0] => Array
                (
                    [x] => -32.7589
                    [y] => -15.2853
                    [z] => 0
                    [scale] => 0.6
                    [rot] => 2.37666
                    [file] => Doodads\Outland\Props\Stake\Stake1.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => -0.6
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [1] => Array
                (
                    [x] => 38.0072
                    [y] => 13.7364
                    [z] => 0
                    [scale] => 0.54
                    [rot] => 0.0997925
                    [file] => Doodads\Outland\Props\Stake\Stake1.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => -0.6
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [2] => Array
                (
                    [x] => 10.188
                    [y] => 39.934
                    [z] => 6.4
                    [scale] => 0.66
                    [rot] => 0.801878
                    [file] => Doodads\Outland\Props\Stake\Stake1.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => -0.6
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [3] => Array
                (
                    [x] => -36.9877
                    [y] => 26.3507
                    [z] => 0
                    [scale] => 0.63
                    [rot] => 1.95539
                    [file] => Doodads\Outland\Props\Stake\Stake1.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => -0.6
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [4] => Array
                (
                    [x] => 29.7571
                    [y] => 54.9169
                    [z] => 0
                    [scale] => 0.6
                    [rot] => 0.197979
                    [file] => Doodads\Outland\Props\Stake\Stake1.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => -0.6
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

            [5] => Array
                (
                    [x] => -12.0371
                    [y] => 16.6721
                    [z] => 134.4
                    [scale] => 1.2
                    [rot] => 5.46474
                    [file] => units\critters\Pig\Pig.mdl
                    [red] => 255
                    [green] => 255
                    [blue] => 255
                    [alpha] => 255
                    [pitch] => 0
                    [advanced] => false
                    [animation] => Array
                        (
                        )

                    [aniSpeed] => 50
                )

        )

    [dmgTable] => Array
        (
            [0] => Array
                (
                    [id] => MOD_DMG_TO_AIR
                    [base] => 0.2
                    [add] => 0
                )

        )

    [triggers] => Array
        (
            [0] => Array
                (
                    [name] => On Attack
                    [code] => call PigNuggetOnAttack(tower,Event.getTarget(),0,2,275+tower.getLevel()*2,0.15 + 0.004*tower.getLevel(),380 + 2)
                    [values] => Array
                        (
                            [visible] => true
                            [icon] => ReplaceableTextures\CommandButtons\BTNPig.blp
                            [name] => Angry Pigs
                            [short_explain] => Attacks with a rampage of |cffFFFF802|r exploding pigs that deal attack damage to a single target and spell damage in AoE.
                            [ONATTACK_chance] => 1.0
                            [ONATTACK_chanceLevelAdd] => 0.0
                            [long_explain] => Attacks with a rampage of |cffFFFF802|r pigs from hell. Pigs will home in on creeps and explode upon contact, dealing the tower's attack damage to the main target and splashing an extra |cffFFFF8015%|r of the tower's attack damage in |cffFFFF80375|r AoE as spell damage, divided by the number of creeps hit.|n|nPigs move at |cffFFFF80380|r speed and home in on targets from |cffFFFF80275|r range.|n|n|cffFF8000Level Bonus:|r|n|cffFFFF80+2|r homing range|n|cffFFFF80+0.4%|r splash damage|n|cffFFFF80+1|r pig at levels |cffFFFF805|r and |cffFFFF8015|r|n|cffFFFF80+2|r pig speed
                        )

                )

            [1] => Array
                (
                    [name] => Header
                    [code] => globals
        ProjectileType deem_BoarPT
        ProjectileType deem_AirBoarPT
        integer array autopigsSizeFactorArray
    endglobals
    
    struct pignugget    //gets attached to timer
        Tower tower = 0 
        Unit target = 0
        integer targetUID = 0
        real angle = 0
        real homerange = 0
        integer pigs = 0
        integer model = 0
        real splash = 0
        boolean Air = false
        real x = 0
        real y = 0
        real z = 0
    endstruct

    struct nuggetpig    //gets attached to projectile
        real dmg = 0
        real crit = 0
        real scrit = 0
        real splash = 0
        boolean Air = false
    endstruct

    
     function pignuggetlauncher takes nothing returns nothing
        local timer t = GetExpiredTimer()
        local pignugget n = GetTimerData(t)
        local Projectile p
        local nuggetpig np = nuggetpig.create() //used to attach damage & crit information to projectile
        

        //target-type differences
        if n.Air then
            set np.Air = true
            if n.targetUID != n.target.getUID() then
                set p = Projectile.createLinearInterpolationFromPointToPoint(deem_AirBoarPT,n.tower,0,0,n.tower.getX() + GetRandomInt(-25,25),n.tower.getY() + GetRandomInt(-25,25),0,n.x+ GetRandomInt(-50,50),n.y+ GetRandomInt(-50,50),n.z+ GetRandomInt(-35,35),GetRandomReal(0,0.30))
            else
                set n.x = n.target.getX()
                set n.y = n.target.getY()
                set n.z = n.target.getZ()
                set p = Projectile.createLinearInterpolationFromPointToUnit(deem_AirBoarPT,n.tower,0,0,n.tower.getX() + GetRandomInt(-25,25),n.tower.getY() + GetRandomInt(-25,25),0,n.target,GetRandomReal(0,0.20),true)
            endif
            call p.color(255,105,105,255)
        else
            set p = Projectile.create(deem_BoarPT, n.tower, 0.00, 0, n.tower.getX() + GetRandomInt(-25,25), n.tower.getY() + GetRandomInt(-25,25), 5.00, n.angle + GetRandomReal(-1,1)*16) 
            if n.target.getSize() >= SIZE_BOSS then
                call p.setCollisionParameters(n.homerange + 75,TARGET_CREEPS)
            else
                call p.setCollisionParameters(n.homerange,TARGET_CREEPS)            
            endif
            set p.speed = 380 + n.tower.getLevel()*2
        endif
        
        //projectile setup
        if n.model == 0 then
            call p.setModel("units\\critters\\Pig\\Pig.mdl")
        elseif n.model == 1 then
            call p.setModel("units\\creeps\\SpiritPig\\SpiritPig.mdl")
            call p.setScale(0.57)
        elseif n.model == 2 then
            call p.setModel("units\\critters\\Felboar\\Felboar.mdl")
        endif
        
        if GetRandomInt(0,1) == 1 then  //swerving, wee
            set p.rotation = 1
            else
            set p.rotation = -1
        endif
        set np.dmg = n.tower.getCurrentAttackDamageWithBonus()
        set np.crit = n.tower.calcAttackMulticrit(0,0,0)
        set np.scrit = n.tower.calcSpellCritNoBonus()
        set np.splash = n.splash
        set p.userInt = np  //attach damage info to projectile
        
        //pig-queue
        set n.pigs = n.pigs-1           //remove pig from pig-queue
                
        if n.pigs <= 0 then             //release timer if pig-queue is empty 
            call ReleaseTimer(t)
            call n.destroy()
        else
            call TimerStart(t, 0.25, true, function pignuggetlauncher) 
        endif
    endfunction
    
   //@export
    function PigNuggetOnAttack takes Tower tower, Unit target, integer model, integer pigs, real homerange, real splash, integer speed returns nothing
        local pignugget nugget = pignugget.create()
        local timer t = NewTimer()
        
            if tower.getLevel() >= 5 then
                set pigs = pigs +1
                if tower.getLevel() >= 15 then
                    set pigs = pigs +1
         //           if tower.getLevel() >= 25 then
         //               set pigs = pigs +1
         //           endif
                endif
            endif
        
        set nugget.tower = tower
        set nugget.target = target
        set nugget.angle = Atan2(target.getY() - tower.getY(), target.getX() - tower.getX())* bj_RADTODEG
        set nugget.homerange = homerange
        set nugget.model = model //0 first member, 1 second member, 2 third member
        set nugget.splash = splash
        set nugget.pigs = pigs
        if nugget.target.getSize() == SIZE_AIR then
            set nugget.Air = true
            set nugget.targetUID = target.getUID()
            set nugget.x = target.getX()
            set nugget.y = target.getY()
            set nugget.z = target.getZ()
        endif
        
        call SetTimerData(t,nugget)
        call TimerStart(t, 0.0, true, function pignuggetlauncher) 
    endfunction
    
    function deem_BoarHit takes Projectile p, Unit target returns nothing
        local Tower tower = p.getCaster()
        local Iterate I 
        local integer count = 0
        local Unit u
        local nuggetpig np = p.userInt  //carries damage & critical information from the time the pig was shot
        
        if target != 0 or np.Air then
            if target != 0 then
                call tower.doAttackDamage(target,np.dmg,np.crit)
                call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\DemolisherFireMissile\\DemolisherFireMissile.mdl", target.getUnit(), "origin"))
            else
                
            endif
            set I = Iterate.overUnitsInRange(tower,TARGET_CREEPS,p.x,p.y,375)

            // target count for AoE, immune sensitive 
            loop                   
                set u = I.next()
                exitwhen u == 0
                if u != 0 then
                    if u.isImmune() == false then 
                        set count = count +1        
                    endif
                endif
            endloop

            //splash damage
            if count != 0 then
                set np.splash = np.splash / count     //split damage to target count
                call tower.doSpellDamageAoE(p.x,p.y,375,np.dmg*np.splash,np.scrit,0)
            endif
            
            //random fix
            set p.explode = false
        else
                call p.avertDestruction()
                call p.setCollisionEnabled(true)
                set p.accelerate = 0
                set p.rotation = 1
                set p.speed = 400
                call p.color(255,255,255,255)
                call p.enablePeriodic(1)
        endif
    endfunction
    
    
    function deem_BoarPeriodic takes Projectile p returns nothing
        set p.direction = p.direction + GetRandomReal(-1,1)*12
        set p.rotation = p.rotation * -1.1
    endfunction
    
    
    function deem_BoarHome takes Projectile p, Unit target returns nothing
        local Tower tower = p.getCaster()
        if target.getSize() != SIZE_AIR then
            call p.setCollisionEnabled(false)
            call p.setHomingTarget(target)
            set p.accelerate = 24
            call p.color(255,95,95,255)
            call p.disablePeriodic()
        endif
    endfunction
    
    //@export
    function autopigs takes Tower tower, Unit target, integer model, integer pigs, real homerange, real splash, integer speed, integer size returns nothing
        set tower.userInt = tower.userInt + autopigsSizeFactorArray[size]
        loop
            exitwhen tower.userInt < 48
            set tower.userInt = tower.userInt - 48
            call PigNuggetOnAttack(tower,target,model,pigs,homerange,splash,speed)
        endloop
    endfunction
    
    function deem_BoarClean takes Projectile p returns nothing
        call nuggetpig(p.userInt).destroy()
    endfunction
    
    private function init takes nothing returns nothing
        set deem_BoarPT = ProjectileType.createRanged("", 1500.0, 380) 
        call deem_BoarPT.enableCollision( deem_BoarHome, 0.00, TARGET_CREEPS, false )
        call deem_BoarPT.enableHoming(deem_BoarHit, 20 )
        call deem_BoarPT.enablePeriodic(deem_BoarPeriodic,1.00)
        call deem_BoarPT.disableExplodeOnExpiration()
        call deem_BoarPT.setEventOnCleanup(deem_BoarClean)
        
        set deem_AirBoarPT = ProjectileType.createInterpolate("", 880) 
        call deem_AirBoarPT.setEventOnInterpolationFinished(ProjectileTargetEvent.deem_BoarHit)
        call deem_AirBoarPT.disableExplodeOnExpiration()
        call deem_AirBoarPT.setEventOnCleanup(deem_BoarClean)
        
        set autopigsSizeFactorArray[SIZE_MASS] = 3
        set autopigsSizeFactorArray[SIZE_MASS_CHALLENGE] = 4
        set autopigsSizeFactorArray[SIZE_NORMAL] = 6
        set autopigsSizeFactorArray[SIZE_CHAMPION] = 10
        set autopigsSizeFactorArray[SIZE_AIR] = 10
        set autopigsSizeFactorArray[SIZE_BOSS] = 25
        set autopigsSizeFactorArray[SIZE_CHALLENGE] = 25
	endfunction
                    [values] => Array
                        (
                            [visible] => false
                            [icon] => 
                            [name] => 
                            [short_explain] => 
                            [long_explain] => 
                        )

                )

            [2] => Array
                (
                    [name] => On Kill
                    [code] => local Unit target = Event.getTarget()
    call autopigs(tower,target,0,2,275+tower.getLevel()*2,0.15 + 0.004*tower.getLevel(),380 + 2,target.getSize())
                    [values] => Array
                        (
                            [visible] => false
                            [icon] => 
                            [name] => 
                            [short_explain] => 
                            [long_explain] => 
                        )

                )

            [3] => Array
                (
                    [name] => On Damage
                    [code] => set Event.damage = 0
                    [values] => Array
                        (
                            [ONDAMAGE_chance] => 1.0
                            [visible] => false
                            [icon] => 
                            [name] => 
                            [short_explain] => 
                            [ONDAMAGE_chanceLevelAdd] => 0.0
                            [long_explain] => 
                        )

                )

            [4] => Array
                (
                    [name] => On Unit Comes In Range
                    [code] => local Unit target = Event.getTarget()
    call autopigs(tower,target,0,2,275+tower.getLevel()*2,0.15 + 0.004*tower.getLevel(),380 + 2,target.getSize())
                    [values] => Array
                        (
                            [UNITINRANGE_targetType] => TARGET_TYPE_CREEPS
                            [visible] => true
                            [icon] => ReplaceableTextures\CommandButtons\BTNFelBoar.blp
                            [name] => Initiative
                            [short_explain] => Every |cffFFFF8016th|r time a creep comes within |cffFFFF80900|r range of this tower, a rampage of pigs will be released at it.|n|nLarger than mass creeps cause pigs to release more often.
                            [UNITINRANGE_range] => 900
                            [long_explain] => Every |cffFFFF8016th|r time a creep comes within |cffFFFF80900|r range of this tower, a rampage of pigs will be released at it.|nWhen this tower kills a creep, the kill counts towards this counter as if the creep had come into the range.|n|nLarger than mass creeps cause pigs to release more often.
                        )

                )

        )

    [abilities] => Array
        (
        )

    [buffs] => Array
        (
        )

    [units] => Array
        (
        )

    [references] => Array
        (
        )

)