// Coin ---------------------------------------------------------------------

class Coin : Inventory
{
	Default
	{
		+DROPPED
		+NOTDMATCH
		+FLOORCLIP
		Inventory.MaxAmount 0x7fffffff;
		+INVENTORY.INVBAR
		Tag "$TAG_COIN";
		Inventory.Icon "I_COIN";
		Inventory.PickupMessage "$TXT_COIN";
	}
	States
	{
	Spawn:
		COIN A -1;
		Stop;
	}
	
	// Coin ---------------------------------------------------------------------

	override String PickupMessage ()
	{
		if (Amount == 1)
		{
			return Super.PickupMessage();
		}
		else
		{
			String msg = StringTable.Localize("$TXT_XGOLD");
			msg.Replace("%d", "" .. Amount);
			return msg;
		}
	}

	override bool HandlePickup (Inventory item)
	{
		if (item is "Coin")
		{
			if (Amount < MaxAmount)
			{
				if (MaxAmount - Amount < item.Amount)
				{
					Amount = MaxAmount;
				}
				else
				{
					Amount += item.Amount;
				}
				item.bPickupGood = true;
			}
			return true;
		}
		return false;
	}

	override Inventory CreateCopy (Actor other)
	{
		if (GetClass() == "Coin")
		{
			return Super.CreateCopy (other);
		}
		Inventory copy = Inventory(Spawn("Coin"));
		copy.Amount = Amount;
		copy.BecomeItem ();
		GoAwayAndDie ();
		return copy;
	}

	//===========================================================================
	//
	// ACoin :: CreateTossable
	//
	// Gold drops in increments of 50 if you have that much, less if you don't.
	//
	//===========================================================================

	override Inventory CreateTossable (int amt)
	{
		Coin tossed;

		if (bUndroppable || Owner == NULL || Amount <= 0)
		{
			return NULL;
		}
		if (amt == -1) amt = Amount >= 50? 50 : Amount >= 25? 25 : Amount >= 10? 10 : 1;
		else if (amt > Amount) amt = Amount;
		if (amt > 25)
		{
			Amount -= amt;
			tossed = Coin(Spawn("Gold50"));
			tossed.Amount = amt;
		}
		else if (amt > 10)
		{
			Amount -= 25;
			tossed = Coin(Spawn("Gold25"));
		}
		else if (amt > 1)
		{
			Amount -= 10;
			tossed = Coin(Spawn("Gold10"));
		}
		else if (Amount > 1 || bKeepDepleted)
		{
			Amount -= 1;
			tossed = Coin(Spawn("Coin"));
		}
		else // Amount == 1 && !(ItemFlags & IF_KEEPDEPLETED)
		{
			BecomePickup ();
			tossed = self;
		}
		tossed.bSpecial = false;
		tossed.bSolid = false;
		tossed.DropTime = 30;
		if (tossed != self && Amount <= 0)
		{
			Destroy ();
		}
		return tossed;
	}
	
}


// 10 Gold ------------------------------------------------------------------

class Gold10 : Coin
{
	Default
	{
		Inventory.Amount 10;
		Tag "$TAG_10GOLD";
		Inventory.PickupMessage "$TXT_10GOLD";
	}
	States
	{
	Spawn:
		CRED A -1;
		Stop;
	}
}

// 25 Gold ------------------------------------------------------------------

class Gold25 : Coin
{
	Default
	{
		Inventory.Amount 25;
		Tag "$TAG_25GOLD";
		Inventory.PickupMessage "$TXT_25GOLD";
	}
	States
	{
	Spawn:
		SACK A -1;
		Stop;
	}
}

// 50 Gold ------------------------------------------------------------------

class Gold50 : Coin
{
	Default
	{
		Inventory.Amount 50;
		Tag "$TAG_50GOLD";
		Inventory.PickupMessage "$TXT_50GOLD";
	}
	States
	{
	Spawn:
		CHST A -1;
		Stop;
	}
}

// 300 Gold ------------------------------------------------------------------

class Gold300 : Coin
{
	Default
	{
		Inventory.Amount 300;
		Tag "$TAG_300GOLD";
		Inventory.PickupMessage "$TXT_300GOLD";
		Inventory.GiveQuest 3;
		+INVENTORY.ALWAYSPICKUP
	}
	States
	{
	Spawn:
		TOKN A -1;
		Stop;
	}
}