gzdoom/wadsrc/static/zscript/actors/strife/coin.zs

205 lines
3.3 KiB
Text
Raw Normal View History

2016-10-18 21:05:58 +00:00
// Coin ---------------------------------------------------------------------
class Coin : Inventory
2016-10-18 21:05:58 +00:00
{
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
{
2017-02-12 13:28:38 +00:00
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;
}
2016-10-18 21:05:58 +00:00
}
// 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;
}
}