//add all decorate here through include

#include "actors/main.txt"
//#include "actors/invasionspots.txt"
//#include "actors/parkour.txt"

actor Trigger: CustomInventory
{
    Inventory.MaxAmount 0
    +AUTOACTIVATE
}

actor ParkmoreAngleIndicator: Inventory
{
    Inventory.MaxAmount 0x7FFFFFFF
    +UNDROPPABLE
}

actor ParkmoreCheckItem: CustomInventory
{
    Inventory.MaxAmount 0
    +AUTOACTIVATE
}

actor ParkmoreCheckWater: ParkmoreCheckItem
{
    States
    {
      Pickup:
        TNT1 A 0 A_TakeInventory("WaterIndicator")
        TNT1 A 0 A_GiveInventory("WaterIndicator", waterlevel)
        stop
    }
}

actor ParkmoreCheckN: ParkmoreCheckItem
{
    States { Pickup: TNT1 A 0 A_SpawnItemEx("ParkmoreChecker", 0,0,32, 64,0,0, 0, SXF_SETMASTER)   stop }
}

actor ParkmoreCheckNE: ParkmoreCheckItem
{
    States { Pickup: TNT1 A 0 A_SpawnItemEx("ParkmoreChecker", 0,0,32, 64,0,0, 45, SXF_SETMASTER)   stop }
}

actor ParkmoreCheckE: ParkmoreCheckItem
{
    States { Pickup: TNT1 A 0 A_SpawnItemEx("ParkmoreChecker", 0,0,32, 64,0,0, 90, SXF_SETMASTER)   stop }
}

actor ParkmoreCheckSE: ParkmoreCheckItem
{
    States { Pickup: TNT1 A 0 A_SpawnItemEx("ParkmoreChecker", 0,0,32, 64,0,0, 135, SXF_SETMASTER)   stop }
}

actor ParkmoreCheckS: ParkmoreCheckItem
{
    States { Pickup: TNT1 A 0 A_SpawnItemEx("ParkmoreChecker", 0,0,32, 64,0,0, 180, SXF_SETMASTER)   stop }
}

actor ParkmoreCheckSW: ParkmoreCheckItem
{
    States { Pickup: TNT1 A 0 A_SpawnItemEx("ParkmoreChecker", 0,0,32, 64,0,0, 225, SXF_SETMASTER)   stop }
}

actor ParkmoreCheckW: ParkmoreCheckItem
{
    States { Pickup: TNT1 A 0 A_SpawnItemEx("ParkmoreChecker", 0,0,32, 64,0,0, 270, SXF_SETMASTER)   stop }
}

actor ParkmoreCheckNW: ParkmoreCheckItem
{
    States { Pickup: TNT1 A 0 A_SpawnItemEx("ParkmoreChecker", 0,0,32, 64,0,0, 315, SXF_SETMASTER)   stop }
}

actor ParkmoreCheckKick: ParkmoreCheckItem
{
    States
    {
      Pickup: TNT1 A 0 A_SpawnItemEx("ParkmoreCheckerKick", 0,0,32, 48,0,0, 0, SXF_SETMASTER)   stop
    }
}

actor ParkmoreCheckGrab: ParkmoreCheckItem
{
    States
    {
      Pickup:
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeTop",    0,0,64, 64,0,0, 0, SXF_SETMASTER)
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeTop",    0,0,62, 56,0,0, 0, SXF_SETMASTER)
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeTop",    0,0,60, 48,0,0, 0, SXF_SETMASTER)
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeTop",    0,0,58, 40,0,0, 0, SXF_SETMASTER)
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeLip",    0,0,56, 38,0,0, 0, SXF_SETMASTER)
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeLip",    0,0,48, 38,0,0, 0, SXF_SETMASTER)
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeLip",    0,0,40, 38,0,0, 0, SXF_SETMASTER)
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeLip",    0,0,32, 38,0,0, 0, SXF_SETMASTER)
        stop
    }
}

actor ParkmoreCheckWallGrab: ParkmoreCheckItem
{
    States
    {
      Pickup:
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeLip",    0,0,56, 32,0,0, 0, SXF_SETMASTER)
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeLip",    0,0,48, 32,0,0, 0, SXF_SETMASTER)
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeLip",    0,0,40, 32,0,0, 0, SXF_SETMASTER)
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeLip",    0,0,32, 32,0,0, 0, SXF_SETMASTER)
        stop
    }
}

actor ParkmoreCheckWallGrab2: ParkmoreCheckItem
{
    States
    {
      Pickup:
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeLip",    0,0,56, 32,0,0,
                                ACS_ExecuteWithResult(395, 1), SXF_SETMASTER|SXF_ABSOLUTEANGLE)
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeLip",    0,0,48, 32,0,0,
                                ACS_ExecuteWithResult(395, 1), SXF_SETMASTER|SXF_ABSOLUTEANGLE)
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeLip",    0,0,40, 32,0,0,
                                ACS_ExecuteWithResult(395, 1), SXF_SETMASTER|SXF_ABSOLUTEANGLE)
        TNT1 A 0 A_SpawnItemEx("ParkmoreCheckLedgeLip",    0,0,32, 32,0,0,
                                ACS_ExecuteWithResult(395, 1), SXF_SETMASTER|SXF_ABSOLUTEANGLE)
        stop
    }
}

actor ParkmoreFloorChecker
{
    +SOLID
    +SERVERSIDEONLY
    +NOTIMEFREEZE
    +NODAMAGETHRUST
    +CANNOTPUSH

    Radius 12
    Height 1

    Mass 0x7FFFFFFF

    States
    {
      Spawn:
        TNT1 A 0
        stop
    }
}

// Used for walljump detection
actor ParkmoreChecker2
{
    Radius 4
    Height 16

    +SOLID
    +NOBLOCKMONST
    +SERVERSIDEONLY

    States
    {
      Spawn:
        BAL1 A 105
        stop
    }
}

// Used for 3D floor detection
actor ParkmoreChecker3
{
    Radius 0
    Height 0
    -SOLID
}

actor ParkmoreChecker: FastProjectile
{
    Projectile
    Speed 64
    Radius 4
    Height 1
    Damage 0
    +CANNOTPUSH
    +NODAMAGETHRUST
    +SERVERSIDEONLY
    +PUFFGETSOWNER
    +NOTIMEFREEZE
    +MOVEWITHSECTOR
    +PAINLESS

    -ACTIVATEIMPACT
    -ACTIVATEPCROSS

    States
    {
      Spawn:
        TNT1 A 1
        stop

      Death:
        TNT1 A 0 A_Stop
        TNT1 A 0 A_GiveToTarget("CanWallBounce")
        stop
    }
}

actor ParkmoreCheckerKick: ParkmoreChecker
{
    States
    {
      Death:
        TNT1 A 0 A_Stop
        TNT1 A 0 A_GiveToTarget("CanWallBounce", 2)
        stop
    }
}

actor ParkmoreCheckLedgeTop: ParkmoreChecker
{
    Radius 2
    +RIPPER
    +BLOODLESSIMPACT

    States
    {
      Spawn:
        TNT1 A 1
        TNT1 A 0 A_GiveToTarget("OpenGrab", 1)
        TNT1 A 0 A_Stop
        //BAL2 A 70 bright
        stop

      Death:
        TNT1 A 0 A_Stop
        stop
    }
}

actor ParkmoreCheckLedgeLip: ParkmoreChecker
{
    +RIPPER
    +BLOODLESSIMPACT
    Radius 2

    States
    {
      Death:
        TNT1 A 0 A_Stop
        TNT1 A 0 A_GiveToTarget("CanGrab", 1)
        //BAL1 A 70 bright
        stop
    }
}


actor ParkmoreHeightFinder
{
    Height 1
    Radius 2
    MaxStepHeight 32

    +MOVEWITHSECTOR
    +CANPASS
    +ACTLIKEBRIDGE
    +SERVERSIDEONLY
    +NOBLOCKMAP
    +NOTIMEFREEZE
    +NOBLOCKMONST

    Gravity 32767

    RenderStyle Add
    Alpha 0.2

    States
    {
      Spawn:
        TNT1 A 0
        TNT1 A 1 ACS_ExecuteAlways(395, 0, 0,16,3)
//        PLSS A 70 bright
        loop
    }
}

actor ParkmoreHeightTrailSpawner
{
    +NOINTERACTION
    +CLIENTSIDEONLY

    reactiontime 350

    States
    {
      Spawn:
        TNT1 A 0 A_Countdown
        TNT1 A 1 ACS_ExecuteAlways(395, 0, 0,16,3)
        loop

      Death:
        TNT1 A 0
        stop
    }
}

actor ParkmoreHeightTrail
{
    +NOINTERACTION
    +CLIENTSIDEONLY
    +NOTIMEFREEZE

    Radius 0
    Height 0

    RenderStyle Add
    Alpha 0.3
    Scale 0.4

    Translation "192:207=208:223", "240:243=232:235", "244:247=76:79"

    States
    {
      Spawn:
        PLSS AAAAAAAABBBBBBBB 1 bright A_FadeOut(random(2,8)*0.001)
        loop
    }
}


actor ParkmoreHeightMarker
{
    +NOINTERACTION
    Height 0
    Radius 0
    
    RenderStyle Add

    States
    {
      Spawn:
        PLSS ABABABAB 8 bright
        stop
    }
}

actor ParkmoreCounter: Inventory
{
    Inventory.MaxAmount 0x7FFFFFFF
    +UNDROPPABLE
}

actor CanWallBounce:    ParkmoreCounter {}
actor OpenGrab:         ParkmoreCounter {}
actor CanGrab:          ParkmoreCounter {}
actor HasKicked:        ParkmoreCounter {}
actor WaterIndicator:   ParkmoreCounter {}
actor NoParkour:        ParkmoreCounter {}

actor KickTrail: PowerSpeed
{
    Speed 1.0
    Powerup.Duration -2
}


actor FingerCrunch
{
    Radius 0
    Height 0
    +NOINTERACTION
    +ISMONSTER

    Obituary "%o got %p fingers pinched off."

    States
    {
      Spawn:
        TNT1 A 0
        TNT1 A 0 A_LookEx(LOF_NOSOUNDCHECK, 0, 24, 0, 360, "Kill")
        stop

      Kill:
        TNT1 A 0 A_CustomMissile("FingerCruncher")
        stop
    }
}

actor FingerCruncher
{
    Obituary "%o got %p fingers pinched off."
    +NOINTERACTION

    States
    {
      Spawn:
        TNT1 A 0
        goto Death

      Death:
        TNT1 A 1 A_Explode(40, 8)
        stop
    }
}

actor PowerStayTheFuckStill: PowerSpeed
{
    Speed 0
}

actor ParkmoreUnloadingCheck: Trigger
{
    States
    {
      Pickup:
        TNT1 A 0 ACS_ExecuteWithResult(395, 2)
        stop
    }
}