class HappySphere : Health
{
	Default
	{
		+COUNTITEM;
		+INVENTORY.AUTOACTIVATE;
		+INVENTORY.ALWAYSPICKUP;
		+INVENTORY.FANCYPICKUPSOUND;
		+FLOATBOB;
		Inventory.Amount 100;
		Inventory.MaxAmount 200;
		Inventory.PickupMessage "$GOTSUPERSQUARE";
		Inventory.PickupSound "misc/p_pkup";
	}
	States
	{
	Spawn:
		HAPP ABCD 6 Bright;
		Loop;
	}
}

class SillySphere : CustomInventory
{
	Default
	{
		+COUNTITEM;
		+FLOATBOB;
		+INVENTORY.AUTOACTIVATE;
		+INVENTORY.ALWAYSPICKUP;
		Inventory.PickupMessage "$GOTMEGASQUARE";
		Inventory.PickupSound "misc/p_pkup";
	}
	States
	{
	Spawn:
		SILL ABCD 6 Bright;
		Loop;
	Pickup:
		SILL A 0 A_GiveInventory("MegasphereHealth",1);
		SILL A 0 A_GiveInventory("ArmorBrick",1);
		Stop;
	}
}

class SillySphereNotItem : SillySphere
{
	Default
	{
		-COUNTITEM;
	}
}

class HotSauceGodMode : PowerupGiver
{
	Default
	{
		Powerup.Type "PowerInvulnerable";
		Powerup.Duration 300; // Approx. The amount of time to "burn through" hot sauce, har har.
		+INVENTORY.AUTOACTIVATE;
		+INVENTORY.ALWAYSPICKUP;
	}
}

class HolyGodMode : PowerupGiver
{
	Default
	{
		Powerup.Type "PowerInvulnerable";
		Powerup.Color "ff ff ff", 0.2;
		Powerup.Duration 1400;
		+INVENTORY.AUTOACTIVATE;
		+INVENTORY.ALWAYSPICKUP;
	}
}

class HolyFlight : PowerupGiver
{
	Default
	{
		Powerup.Type "PowerFlight";
		Powerup.Duration 1400;
		+INVENTORY.AUTOACTIVATE;
		+INVENTORY.ALWAYSPICKUP;
	}
}

class HolySphere : CustomInventory
{
	Default
	{
		+COUNTITEM;
		+FLOATBOB;
		+INVENTORY.AUTOACTIVATE;
		+INVENTORY.ALWAYSPICKUP;
		Inventory.PickupMessage "$GOTHOLY";
		Inventory.PickupSound "misc/g_pkup";
	}
	States
	{
	Spawn:
		HOLY ABCD 6 Bright;
		Loop;
	Pickup:
		HOLY A 0 A_GiveInventory("HolyGodMode",1);
		HOLY A 0 A_GiveInventory("HolyFlight",1);
		Stop;
	}
}

class Power2xDamage : PowerDamage
{
	Default
	{
		DamageFactor "Normal", 2;
		Inventory.Icon "TNT1A0";
		+INVENTORY.AUTOACTIVATE;
		+INVENTORY.ALWAYSPICKUP;
	}
}

class DevilSphere : PowerupGiver
{
	Default
	{
		+COUNTITEM;
		+FLOATBOB;
		+INVENTORY.AUTOACTIVATE;
		+INVENTORY.ALWAYSPICKUP;
		Inventory.PickupMessage "$GOTDEVIL";
		Inventory.PickupSound "misc/d_pkup";
		Powerup.Type "Power2xDamage";
		Powerup.Color "dd 00 00", 0.2;
		Powerup.Duration 1400;
	}
	States
	{
	Spawn:
		DEVL ABCD 6 Bright;
		Loop;
	}
}

class PowerEnergyDrink : PowerSpeed
{
}

class Powerzade : PowerupGiver
{
	Default
	{
		Inventory.PickupMessage "$GOTSPEED";
		Inventory.PickupSound "misc/p_pkup";
		Powerup.Type "PowerEnergyDrink";
		Powerup.Duration -45;
		Speed 1.35;
		+COUNTITEM;
		+INVENTORY.AUTOACTIVATE;
		+INVENTORY.ALWAYSPICKUP;
	}
	States
	{
	Spawn:
		PZAD ABC 5 Bright;
		Loop;
	}
}

class PowerzadeNotItem : Powerzade
{
	Default
	{
		-COUNTITEM;
	}
}

class PowerNoDrown : PowerProtection
{
	Default
	{
		DamageFactor "Drowning", 0;
		DamageFactor "Vacuum", 0;
	}
}

class FishTank : PowerupGiver
{
	Default
	{
		Inventory.PickupMessage "$GOTFISHTANK";
		Inventory.MaxAmount 0;
		Powerup.Type "PowerNoDrown";
		Powerup.Duration -90;
		+INVENTORY.AUTOACTIVATE;
		+INVENTORY.ALWAYSPICKUP;
		+FLOATBOB;
	}
	States
	{
	Spawn:
		FISH A -1 Bright;
		Stop;
	}
}

class HotSauce : CustomInventory
{
	Default
	{
		Inventory.PickupMessage "$GOTHOTSAUCE";
		Inventory.PickupSound "misc/p_pkup";
		+COUNTITEM;
		+INVENTORY.AUTOACTIVATE;
		+INVENTORY.ALWAYSPICKUP;
	}
	States
	{
	Spawn:
		HOTS A -1;
		Stop;
	Pickup:
		TNT1 A 0 {
			A_GiveInventory("SauceWeapon", 1);
			A_GiveInventory("HotSauceGodMode", 1);
			A_SelectWeapon("SauceWeapon");
		}
		Stop;
	}
}

class FullScanner : PowerupGiver
{
	Default
	{
		Powerup.Type "PowerScanner";
		Powerup.Duration -30;
		+INVENTORY.AUTOACTIVATE;
		+INVENTORY.ALWAYSPICKUP;
	}
}

class Locationator : CustomInventory
{
	Default
	{
		+COUNTITEM;
		+INVENTORY.FANCYPICKUPSOUND;
		+INVENTORY.ALWAYSPICKUP;
		Inventory.MaxAmount 0;
		Inventory.PickupSound "misc/l_pkup";
		Inventory.PickupMessage "$GOTLOCATIONATOR";
	}
	States
	{
	Spawn:
		LOCA ABCD 6;
		Loop;
	Pickup:
		TNT1 A 0 A_GiveInventory("MapRevealer", 1);
		TNT1 A 0 A_GiveInventory("FullScanner", 1);
		Stop;
	}
}

class PowerEnviroSuit : PowerIronFeet
{
	// [XA] Unusually, ZDoom's damaging floors just check for the presence of
	// PowerIronFeet (or a subclass) in the player's inventory to determine
	// whether or not to deal damage, so to modify it, we've got to inherit from
	// PowerIronFeet and undo some of what it does. Silly, but it works. ;)

	override void AbsorbDamage(int damage, Name damageType, out int newdamage)
	{
		// [XA] no-op. PowerIronFeet normally nullifies the 'Drowning' damagetype,
		// which we don't want here since that's what the fishtank's for.
	}

	override void DoEffect()
	{
		// [XA] Also no-op; this function normally resets air supply in PowerIronFeet.
	}
}

class EnviroSuit : PowerupGiver
{
	Default
	{
		Height 46;
		Inventory.PickupMessage "$GOTENVIROSUIT";
		Inventory.MaxAmount 0;
		Powerup.Type "PowerEnviroSuit";
		Powerup.Color "ff 80 00", 0.1;
		Powerup.Duration -90;
		+INVENTORY.AUTOACTIVATE;
		+INVENTORY.ALWAYSPICKUP;
	}
	States
	{
	Spawn:
		ENVI A -1;
		Stop;
	}
}

class EnviroSpawner : EnviroSuit
{
	Default
	{
		Inventory.RespawnTics 175; // 5 seconds
		+INVENTORY.ALWAYSRESPAWN;
	}
}

class FishTankSpawner : FishTank
{
	Default
	{
		Inventory.RespawnTics 175; // 5 seconds
		+INVENTORY.ALWAYSRESPAWN;
	}
}
