//Special item used to damage bossbrains
//Mainly used for Blaz to damage the icon
//of sin with his lackluster ranged weapons

actor BossBrainSmoother : custominventory
{
	+inventory.alwayspickup
	+INVENTORY.AUTOACTIVATE
	+EXTREMEDEATH
	states
	{
	pickup:
		TNT1 A 0
		TNT1 A 1 A_CheckFlag ("Friendly", "NoHit")
		TNT1 A 1 A_JumpIf(CheckClass("BossBrain", AAPTR_DEFAULT, TRUE), "SmoothBrain")
		TNT1 A 1
		stop
	SmoothBrain:
		TNT1 A 0 A_FaceTarget
		TNT1 A 1 DamageThing (20)
		stop
	NoHit:
		TNT1 A 0
		TNT1 A 1 
		stop
	}
}


//-----------------------------------------------------------------------

//=====================================================
//=====================================================
//DAZE EFFECTS
//=====================================================
//=====================================================
//This is used for the stun based attacks in GMOTA
//Originally called KickDazer as this mechanic used to be
//tied to Kustam's kicks exclusively, now everyone has it
//and I'm too lazy to change the name in everything.


Actor KickDazer : custominventory
{
	+INVENTORY.AUTOACTIVATE
	+INVENTORY.ALWAYSPICKUP
	states
	{
	Pickup:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory ("PowerKickedStatus",1,"NoStars")
		TNT1 A 0 A_ThrowGrenade ("DazedStars",3)
		//TNT1 A 0 A_spawnitemex ("DazedStars",1,0,height,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
	NoStars:
		TNT1 A 0 A_GiveInventory ("Stargiver",1)
		TNT1 A 0 A_GiveInventory ("StunMarker",1)
		stop
	}
}

actor StarGiver : powerupgiver
{
	+INVENTORY.AUTOACTIVATE
	+INVENTORY.ALWAYSPICKUP
	powerup.type "KickedStatus"
}


actor PowerKickedStatus : powerspeed
{
	Powerup.Duration -5
	Speed 0.5
}

//Primarily used for Blaz's Stun Overload attack
//this is added to make sure if you land a killing
//shot with it, it'll still detonate.
actor StunMarker : inventory
{inventory.maxamount 1}

actor StunMarkerTaker : custominventory
{
	+inventory.alwayspickup
	+INVENTORY.AUTOACTIVATE
	states
	{
	pickup:
		TNT1 A 0
		TNT1 A 1 A_TakeInventory ("StunMarker",99)
		stop
	}
}


Actor DazedStars
{
	+noclip
	+nointeraction
	+bright
	SeeSound "GMOTA/DizzyEffect"
	states
	{
	spawn:
		TNT1 A 0
        TNT1 A 1
		TNT1 A 0 A_JumpIfHealthLower (1,"Death")
		TNT1 A 0 A_GiveInventory ("DizzyFrameSpawner1",1,AAPTR_TARGET)
		TNT1 A 0 A_Warp (AAPTR_TARGET,0,0,46,0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE|WARPF_COPYINTERPOLATION)
        TNT1 A 1 
		TNT1 A 0 A_GiveInventory ("DizzyFrameSpawner2",1,AAPTR_TARGET)
		TNT1 A 0 A_JumpIfInTargetInventory ("PowerKickedStatus",1,"Spawn2")
		goto death
	Spawn2:
		TNT1 A 0
        TNT1 A 1
		TNT1 A 0 A_JumpIfHealthLower (1,"Death")
		TNT1 A 0 A_GiveInventory ("DizzyFrameSpawner3",1,AAPTR_TARGET)
		TNT1 A 0 A_Warp (AAPTR_TARGET,0,0,46,0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE|WARPF_COPYINTERPOLATION)
        TNT1 A 1 
		TNT1 A 0 A_GiveInventory ("DizzyFrameSpawner4",1,AAPTR_TARGET)
		TNT1 A 0 A_JumpIfInTargetInventory ("PowerKickedStatus",1,"Spawn3")
		goto death
	Spawn3:
		TNT1 A 0
        TNT1 A 1 
		TNT1 A 0 A_JumpIfHealthLower (1,"Death")
		TNT1 A 0 A_GiveInventory ("DizzyFrameSpawner5",1,AAPTR_TARGET)
		TNT1 A 0 A_warp (AAPTR_TARGET,0,0,46,0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE|WARPF_COPYINTERPOLATION)
        TNT1 A 1 
		TNT1 A 0 A_GiveInventory ("DizzyFrameSpawner6",1,AAPTR_TARGET)
		TNT1 A 0 A_JumpIfInTargetInventory ("PowerKickedStatus",1,"Spawn4")
		goto death
	Spawn4:
		TNT1 A 0
        TNT1 A 1 
		TNT1 A 0 A_JumpIfHealthLower (1,"Death")
		TNT1 A 0 A_GiveInventory ("DizzyFrameSpawner7",1,AAPTR_TARGET)
		TNT1 A 0 A_JumpIfInTargetInventory ("PowerKickedStatus",1,"Spawn")
		goto death
	death:
		TNT1 A 0
		TNT1 A 1 A_GiveInventory ("StunMarkerTaker",1,AAPTR_TARGET)
		TNT1 A 1 A_StopSound (CHAN_VOICE)
		stop
	}
}
	


//Nice gross hax, IDIOT

actor DizzyFrameSpawner1 : custominventory
{
	+inventory.alwayspickup
	+INVENTORY.AUTOACTIVATE
	states
	{
	pickup:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx ("DizzyFrame1",0,0,height,0,0,0,0,SXF_NOCHECKPOSITION)
		stop
	}
}

actor DizzyFrameSpawner2 : DizzyFrameSpawner1
{
	states
	{
	pickup:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx ("DizzyFrame2",0,0,height,0,0,0,0,SXF_NOCHECKPOSITION)
		stop
	}
}

actor DizzyFrameSpawner3 : DizzyFrameSpawner1
{
	states
	{
	pickup:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx ("DizzyFrame3",0,0,height,0,0,0,0,SXF_NOCHECKPOSITION)
		stop
	}
}

actor DizzyFrameSpawner4 : DizzyFrameSpawner1
{
	states
	{
	pickup:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx ("DizzyFrame4",0,0,height,0,0,0,0,SXF_NOCHECKPOSITION)
		stop
	}
}

actor DizzyFrameSpawner5 : DizzyFrameSpawner1
{
	states
	{
	pickup:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx ("DizzyFrame5",0,0,height,0,0,0,0,SXF_NOCHECKPOSITION)
		stop
	}
}

actor DizzyFrameSpawner6 : DizzyFrameSpawner1
{
	states
	{
	pickup:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx ("DizzyFrame6",0,0,height,0,0,0,0,SXF_NOCHECKPOSITION)
		stop
	}
}

actor DizzyFrameSpawner7 : DizzyFrameSpawner1
{
	states
	{
	pickup:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx ("DizzyFrame7",0,0,height,0,0,0,0,SXF_NOCHECKPOSITION)
		stop
	}
}


Actor DizzyFrame1
{
	+NOCLIP
	+NOINTERACTION
	+BRIGHT
	states
	{
	Spawn:
		TNT1 A 0
		KCSN A 1 
		stop
	}
}

Actor DizzyFrame2 : DizzyFrame1
{
	states
	{
	Spawn:
		TNT1 A 0
		KCSN B 1 
		stop
	}
}

Actor DizzyFrame3 : DizzyFrame1
{
	states
	{
	Spawn:
		TNT1 A 0
		KCSN C 1 
		stop
	}
}

Actor DizzyFrame4 : DizzyFrame1
{
	states
	{
	Spawn:
		TNT1 A 0
		KCSN D 1 
		stop
	}
}

Actor DizzyFrame5 : DizzyFrame1
{
	states
	{
	Spawn:
		TNT1 A 0
		KCSN E 1 
		stop
	}
}

Actor DizzyFrame6 : DizzyFrame1
{
	states
	{
	Spawn:
		TNT1 A 0
		KCSN F 1 
		stop
	}
}

Actor DizzyFrame7 : DizzyFrame1
{
	states
	{
	Spawn:
		TNT1 A 0
		KCSN G 1 
		stop
	}
}

//-----------------------------------------------------------------------

//=====================================================
//=====================================================
//FIRE DEATH EFFECTS
//=====================================================
//=====================================================
//This is used to mark enemies that're hit with fire based
//weaponry, and then stick them with some visual burning
//effects if they're killed with it.
//I stole this from Legendoom with Yholl's help

actor GMOTAFireDamage : CustomInventory
{
	-COUNTITEM
	+INVENTORY.ALWAYSPICKUP
	Inventory.PickupMessage ""
	Inventory.PickupSound ""
	States
	{
	Spawn:
		TNT1 A 1
		Stop
	Pickup:
		TNT1 A 0
		TNT1 A 0 A_JumpIf(CheckClass("ExplosiveBarrel", AAPTR_DEFAULT, TRUE), "IncompatibleActor")
		TNT1 A 0 A_CheckFlag ("ISMONSTER", "ActivateFire")
		Goto IncompatibleActor
	ActivateFire:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx ("GMOTAFireLifeCheck1", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
		Stop
	IncompatibleActor: // Doesn't affect this thing
		TNT1 A 0
		Stop
	}
}

actor GMOTAFireLifeCheck1
{
	+NOGRAVITY
	+NONSHOOTABLE
	+THRUACTORS
	+NOTONAUTOMAP
	+NOTIMEFREEZE
	+NOCLIP
	states
	{
	Spawn:
		TNT1 A 4
		TNT1 A 0
		TNT1 A 1 A_GiveInventory ("GMOTAFireLifeCheck2", 1, AAPTR_MASTER)
		Stop
	Death:
		TNT1 A 0
		TNT1 A 1
		stop
	}
}	

actor GMOTAFireLifeCheck2 : CustomInventory
{
	-COUNTITEM
	+INVENTORY.ALWAYSPICKUP
	+INVENTORY.AUTOACTIVATE
	Inventory.PickupMessage ""
	Inventory.PickupSound ""

	states
	{
	Spawn:
		TNT1 A 1
		stop
	Pickup:
		TNT1 A 1
		TNT1 A 0 A_JumpIfHealthLower (1, "ActivateEffect")
		Stop
	ActivateEffect:
		TNT1 A 0
		TNT1 A 1 A_ThrowGrenade ("GMOTAFireFXSpawner")
		Stop
	}
}	



actor GMOTAFireFXSpawner
{
	scale 0.8
	//projectile
	+clientsideonly
	+noclip
	+dontblast
	
	var int User_FireTimer;	
	states
	{
	Spawn:
		TNT1 A 0
		TNT1 AAAAA 0 A_SpawnItemEx("LavaLazerSmoke",frandom(-15,15),frandom(-15,15),frandom(2,6),0,0,1)
		TNT1 A 2 A_Warp (AAPTR_TARGET,0,0,8,0,WARPF_INTERPOLATE)
		TNT1 A 0 A_SetUserVar("User_FireTimer", User_FireTimer+1)
		TNT1 A 1 A_JumpIf (User_FireTimer >= 18, "Death")
		loop
	Death:
		TNT1 A 0
		TNT1 A 1
		stop
	}
}


//-----------------------------------------------------------------------

//=====================================================
//=====================================================
//LOOT ORBS
//=====================================================
//=====================================================

//These are used for certain monsters when they die, 
//dropping a handful of goodies

actor sunderlootorb 
{
	projectile
	+notimefreeze
    +FORCEXYBILLBOARD	
	+LOOKALLAROUND
	+thruactors
	+bounceonwalls
	+bright
	species "friendly"
	-nogravity
	radius 12
	speed 5
	damage (0)
	height 20
    gravity 0.8
	+NOTELEPORT
	states
	{
	spawn:
		MGCS B 1
		MGCS D 1
		loop
	death:
		TNT1 A 0
		TNT1 A 1 A_DropItem ("sunderloot",1,256)
		AMDP ABCDE 2
		stop
	}
}

actor sunderloot : randomspawner
{
	dropitem "SmallDarkGemDrop", 256, 2
	dropitem "SmallSpiritGemDrop", 256, 2

}


actor strongsunderlootorb : sunderlootorb 
{
	scale 1.5
	states
	{
	death:
		TNT1 A 0
		TNT1 A 1 A_DropItem ("strongsunderloot",1, 256)
		AMDP ABCDE 2
		stop
	}
}

actor strongsunderloot : randomspawner
{
	dropitem "smalldarkgemdrop", 256, 2
}


//-----------------------------------------------------------------------

//=====================================================
//=====================================================
//DEATH RESETTER
//=====================================================
//=====================================================

//This is an item to take away temporary tokens
//like barrels or activated BFG weapons
actor DeathResetter : CustomInventory
{
	-COUNTITEM
	+INVENTORY.ALWAYSPICKUP
	+INVENTORY.AUTOACTIVATE
	Inventory.PickupMessage ""
	Inventory.PickupSound ""

	states
	{
	Spawn:
		TNT1 A 1
		stop
	Pickup:
		TNT1 A 1
		
		//Blaz
		TNT1 A 0 A_TakeInventory ("FatalDrawGo", 99)
		TNT1 A 0 A_TakeInventory ("FatalDrawToken",99)
		TNT1 A 0 A_TakeInventory ("ArcaneForce",999)
		
		//Kustam
		TNT1 A 0 A_TakeInventory ("SentinelShield",999)
		TNT1 A 0 A_TakeInventory ("SentinelForm",99)
		TNT1 A 0 A_TakeInventory ("GunArms",99)

		//Doomslayer
		TNT1 A 0 A_TakeInventory ("UnmakerStack",99)
		TNT1 A 0 A_TakeInventory ("EjectedShells",99)
		TNT1 A 0 A_TakeInventory ("FireThunderbuss",99)
		TNT1 A 0 A_TakeInventory ("ReignStack",99)
		TNT1 A 0 A_TakeInventory ("BFGArmed",99)
		TNT1 A 0 A_TakeInventory ("BFGReady",99)

		//Barrels
		TNT1 A 0 A_TakeInventory ("BarrelToken",99)
		TNT1 A 0 A_TakeInventory ("GoldenBarrelToken",99)
		Stop
	}
}	
