class MonolithSpawned : Inventory { Default { Inventory.MaxAmount 1; } }

class MonolithSpawner : Actor
{
	Default
	{
		+NOBLOCKMAP
		+PUFFONACTORS
		+PUFFGETSOWNER
	}
	
	States
	{
	Spawn:
		TNT1 A 0 NoDelay {
			A_TakeInventory("MonolithSpawned",1,0,AAPTR_TARGET);
			A_SpawnItemEx("Monolith",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS);
		}
		Stop;
	}
}

class Monolith : Actor
{
	Default
	{
		Scale 0;
		+NOINTERACTION
		+SHOOTABLE
	}

	States
	{
	Spawn:
		MNLT A 0 NoDelay {
			A_GiveInventory("MonolithSpawned",AAPTR_TARGET,1);
			A_PlaySound("Monolith/Tune");
		}
		MNLT AAAAAAAAAA 1 A_SetScale(Scale.X + 0.25);
		MNLT A 35;
		MNLT A 1 {
			A_AlertMonsters(384);
			A_RadiusGive("MonolithMadness",384,RGF_MONSTERS|RGF_CORPSES|RGF_NOMASTER|RGF_EXSPECIES,1,"none","Rrerr");
			//Return A_JumpIf(!CountInv("MonolithSpawned",AAPTR_TARGET),"Death");
		}
		Wait;
	Death:
		MNLT AAAAAAAAAA 1 A_SetScale(Scale.X - 0.25);
		Stop;
	}
}

//Tomed version
class SuperMonolithSpawner : MonolithSpawner
{
	States
	{
	Spawn:
		TNT1 A 0 NoDelay {
			A_TakeInventory("MonolithSpawned",1,0,AAPTR_TARGET);
			A_SpawnItemEx("SuperMonolith",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS);
		}
		Stop;
	}
}

class SuperMonolith : Monolith
{
	States
	{
	Spawn:
		MNLT A 0 NoDelay {
			A_GiveInventory("MonolithSpawned",AAPTR_TARGET,1);
			A_PlaySound("Monolith/Tune");
		}
		MNLT AAAAAAAAAA 1 A_SetScale(Scale.X + 0.5);
		MNLT A 35;
		MNLT A 1 {
			A_AlertMonsters(768);
			A_RadiusGive("MonolithMadness",768,RGF_MONSTERS|RGF_CORPSES|RGF_NOMASTER|RGF_EXSPECIES,1,"none","Rrerr");
			//Return A_JumpIf(!CountInv("MonolithSpawned",AAPTR_TARGET),"Death");
		}
		Wait;
	Death:
		MNLT AAAAAAAAAA 1 A_SetScale(Scale.X - 0.25);
		Stop;
	}
}

//The item causing "funnytimes".
class MonolithMadness : Powerup
{
	override void DetachFromOwner()
	{
		owner.bFRIENDLY = 0;
		Super.DetachFromOwner();
	}

	override void DoEffect()
	{
		owner.bFRIENDLY = random(0,1);
		Super.DoEffect();
	}

	Default
	{
		Powerup.Duration 32;
	}
}