Actor BadSpirit
{
	Health 40
	Radius 20
	Height 10
	ProjectilePassHeight 60
    Speed 10
 	Painchance "BarrelGrab", 0
	mass 3000
    scale 1
	Monster
    +FLOORCLIP
	+lookallaround
	+Thruspecies
	+bright
	+noblooddecals
	+NOGRAVITY
	+dontfall
	+FLOAT
	+FLOATBOB
	+DONTCORPSE
	+NORADIUSDMG
	+AVOIDMELEE
	-solid
	+NONSHOOTABLE
	-countkill
	species "EnemyShot"
	bloodtype GMOTAnoBlood
    PainSound "BadSpirit/Pain"
    DeathSound "miniboner/die"
	activesound "BadSpirit/Idle"


	var int user_SpiritTimer;
	var int user_SpiritActive;
	states
	{
	Spawn:
		TNT1 A 0
		TNT1 A 1 A_look
		loop
	See:
		TNT1 A 0
		TNT1 AAAAA 0 A_Chase ("","",CHF_NOPLAYACTIVE)
		TNT1 A 0 A_GiveInventory ("SpiritSafety",1)
		TNT1 A 1 A_RadiusGive ("CorpseChecker",300,RGF_MONSTERS|RGF_CORPSES,1)
		TNT1 AAAAA 0 A_Chase ("","",CHF_NOPLAYACTIVE)
		TNT1 A 0 A_SetUserVar("user_SpiritTimer", user_SpiritTimer+1)
		TNT1 A 0 A_JumpIf (user_SpiritTimer == 150, "SilentDeath")
		TNT1 A 1 A_JumpIfInventory ("CorpseFound",1,"Manifest")
		TNT1 AAAAA 0 A_Chase ("","",CHF_NOPLAYACTIVE)
		TNT1 A 1 A_RadiusGive ("CorpseChecker",300,RGF_MONSTERS|RGF_CORPSES,1)
		TNT1 A 1 A_JumpIfInventory ("CorpseFound",1,"Manifest")
		loop
	Lurking:
		TNT1 AAA 0 A_Chase ("","",CHF_NOPLAYACTIVE)
		TNT1 A 0 A_GiveInventory ("SpiritSafety",1)
		TNT1 A 1 
		TNT1 AAA 0 A_Chase ("","",CHF_NOPLAYACTIVE)
		TNT1 A 0 A_SetUserVar("user_SpiritTimer", user_SpiritTimer+1)
		TNT1 A 0 A_JumpIf (user_SpiritTimer == 150, "SilentDeath")
		TNT1 A 1
		TNT1 AAAAA 0 A_Chase ("","",CHF_NOPLAYACTIVE)
		TNT1 A 1 
		TNT1 A 1 A_Jump (120,"Lurking")
		Goto See
		
	Manifest:
		TNT1 A 0
		TNT1 A Random (25,100)
		TNT1 A 0 A_PlaySound ("BadSpirit/Manifest",0)
		TNT1 A 0 A_Stop
		BST1 ABCD 2

		TNT1 A 0 A_SetUserVar("user_SpiritTimer", 0)
		TNT1 A 0 A_TakeInventory ("SpiritSafety",999)
		TNT1 A 0 A_ChangeFlag ("NORADIUSDMG",0)
		BST1 E 4 A_SetShootable
		TNT1 A 0 
		BST1 FGH 2
		Goto Haunting
	HideAway:
		TNT1 A 0
		TNT1 A 0 A_ChangeFlag ("NORADIUSDMG",1)
		TNT1 A 0 A_SetUserVar("user_SpiritActive", 0)
		TNT1 A 0 A_Stop
		BST1 E 1 A_UnSetShootable
		BST1 E 3 
		TNT1 A 0 A_PlaySound ("BadSpirit/Vanish",0)
		BST1 DCBA 2
		TNT1 A random(20,43)
		Goto Lurking
	Missile:
		BST2 ABCD 1 A_FastChase
		TNT1 A 0 A_SetUserVar("user_SpiritActive", user_SpiritActive+15)
		goto Haunting
	Melee:
		TNT1 A 0
		TNT1 A 0 A_ChangeFlag ("FRIGHTENED",1)
		BST2 ABCD 2 A_VileChase
		BST2 ABCD 2 A_VileChase
		TNT1 A 0 A_ChangeFlag ("FRIGHTENED",0)
		goto Haunting
	Haunting:
		BST2 ABCD 3 A_VileChase
		TNT1 A 0 A_SetUserVar("user_SpiritActive", user_SpiritActive+1)
		TNT1 A 0 A_JumpIf (user_SpiritActive >= 30, "HideAway")
		loop
	Pain.Dazer:
	Pain.Superkick:
    	BST2 E 3
  		TNT1 A 0 A_GiveInventory ("KickDazer",1)
		TNT1 A 0 A_ChangeFlag ("FRIGHTENED",0)
		TNT1 A 0 A_ChangeFlag ("NoGravity",0)
		TNT1 A 0 A_ChangeFlag ("FloatBob",0)
		BST2 E 3 A_Pain 
		Goto Dazed
	Pain:
		TNT1 A 0 A_ChangeFlag ("FRIGHTENED",0)
		TNT1 A 0 A_ChangeFlag ("NoGravity",1)
		TNT1 A 0 A_ChangeFlag ("FloatBob",1)
		BST2 E 3 A_Pain 
		Goto Haunting
    Dazed:
		BST2 E 2
		BST2 E 1 
		BST2 E 1 A_JumpIfInventory ("PowerKickedStatus",1,"Dazed")
		BST2 E 1 A_ChangeFlag ("NoGravity",1)
		TNT1 A 0 A_ChangeFlag ("FloatBob",1)
		Goto See


	Heal:
		TNT1 A 0 A_Stop
		TNT1 A 0 A_ChangeFlag ("FloatBob",0)
		TNT1 A 0 A_ChangeFlag ("NORADIUSDMG",1)
		TNT1 A 0 A_UnSetShootable
		BST1 E 4 A_Stop
		TNT1 A 0 A_PlaySound ("BadSpirit/Revive",0)
		TNT1 A 0 A_ChangeFlag ("NoGravity",0)
		BST1 DCBA 2
		TNT1 A 3
		stop
	Death:
		TNT1 A 0 
		TNT1 A 0 A_PlaySound ("skuttle/explode", 0)
		TNT1 AAAAAAA 0 A_SpawnDebris ("missiledebris1")
		TNT1 AAAAAAAAAAAA 0 A_SpawnItemEx ("missiledebris2",random(-16,16),random(-16,16),random(-10,10),random(-100,100)/20.0,random(-100,100)/20.0,random(-100,100)/20.0,0,160)
		MWND E 3 Bright
		MWND F 2 Bright
		MWND G 3 Bright
		MWND H 2 Bright
		MWND I 2 Bright
		stop
	SilentDeath:
		TNT1 A 0
		TNT1 A 1
		stop
	}
}

//Overclock tokens

Actor CorpseChecker : custominventory
{
	+INVENTORY.AUTOACTIVATE
	+INVENTORY.ALWAYSPICKUP
	states
	{
	Pickup:
		TNT1 A 0
		TNT1 A 1 A_JumpIfHealthLower (1,"GiveSignal")
		stop
	GiveSignal:
		TNT1 A 0
		TNT1 A 1 A_ThrowGrenade ("CorpseSignaller",1)
		TNT1 A 1 A_ThrowGrenade ("CorpseSignaller",1)
		stop
	}
}



Actor CorpseSignaller
{
	+noclip
	+nointeraction
	+bright
	states
	{
	spawn:
		TNT1 A 0
        TNT1 A 1
		TNT1 A 0 A_RadiusGive ("CorpseFound",350,RGF_MONSTERS|RGF_NOSIGHT,1)
        TNT1 A 1 A_RadiusGive ("CorpseFound",350,RGF_MONSTERS|RGF_NOSIGHT,1)
        TNT1 A 1 A_RadiusGive ("CorpseFound",350,RGF_MONSTERS|RGF_NOSIGHT,1)
		goto death
	death:
		TNT1 A 0
		TNT1 A 1
		stop
	}
}


actor CorpseFound : Powerup
{Powerup.Duration -5}

actor SpiritSafety : Powerup
{Powerup.Duration -3}
