mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-12-13 14:11:19 +00:00
c3f26b5405
Localized functionality to an inventory function so that any item can make use of sharing. Added flag to avoid infinite recursions. HandlePickup() will now also share keys (for more complete handling). PuzzleItems are now included in sharing.
153 lines
3.2 KiB
Text
153 lines
3.2 KiB
Text
//===========================================================================
|
|
//
|
|
//
|
|
//
|
|
//===========================================================================
|
|
|
|
class ScoreItem : Inventory
|
|
{
|
|
Default
|
|
{
|
|
Height 10;
|
|
+COUNTITEM
|
|
Inventory.Amount 1;
|
|
+Inventory.ALWAYSPICKUP
|
|
}
|
|
|
|
override bool TryPickup (in out Actor toucher)
|
|
{
|
|
toucher.Score += Amount;
|
|
GoAwayAndDie();
|
|
return true;
|
|
}
|
|
}
|
|
|
|
//===========================================================================
|
|
//
|
|
//
|
|
//
|
|
//===========================================================================
|
|
|
|
class Key : Inventory
|
|
{
|
|
Default
|
|
{
|
|
+DONTGIB; // Don't disappear due to a crusher
|
|
+INVENTORY.ISKEYITEM;
|
|
Inventory.InterHubAmount 0;
|
|
Inventory.PickupSound "misc/k_pkup";
|
|
}
|
|
|
|
static native clearscope bool IsLockDefined(int locknum);
|
|
static native clearscope Color GetMapColorForLock(int locknum);
|
|
static native clearscope Color GetMapColorForKey(Key key);
|
|
static native clearscope int GetKeyTypeCount();
|
|
static native clearscope class<Key> GetKeyType(int index);
|
|
|
|
override bool HandlePickup (Inventory item)
|
|
{
|
|
// In single player, you can pick up an infinite number of keys
|
|
// even though you can only hold one of each.
|
|
if (multiplayer)
|
|
{
|
|
return Super.HandlePickup (item);
|
|
}
|
|
if (GetClass() == item.GetClass())
|
|
{
|
|
item.bPickupGood = true;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
override bool ShouldStay ()
|
|
{
|
|
return !!multiplayer;
|
|
}
|
|
}
|
|
|
|
//===========================================================================
|
|
//
|
|
// AMapRevealer
|
|
//
|
|
// A MapRevealer reveals the whole map for the player who picks it up.
|
|
// The MapRevealer doesn't actually go in your inventory. Instead, it sets
|
|
// a flag on the level.
|
|
//
|
|
//===========================================================================
|
|
|
|
class MapRevealer : Inventory
|
|
{
|
|
override bool TryPickup (in out Actor toucher)
|
|
{
|
|
level.allmap = true;
|
|
GoAwayAndDie ();
|
|
return true;
|
|
}
|
|
}
|
|
|
|
//===========================================================================
|
|
//
|
|
//
|
|
//
|
|
//===========================================================================
|
|
|
|
class PuzzleItem : Inventory
|
|
{
|
|
meta int PuzzleItemNumber;
|
|
meta String PuzzFailMessage;
|
|
meta Sound PuzzFailSound;
|
|
|
|
property Number: PuzzleItemNumber;
|
|
property FailMessage: PuzzFailMessage;
|
|
property FailSound: PuzzFailSound;
|
|
|
|
Default
|
|
{
|
|
+NOGRAVITY
|
|
+INVENTORY.INVBAR
|
|
+INVENTORY.ISKEYITEM
|
|
Inventory.DefMaxAmount;
|
|
Inventory.UseSound "PuzzleSuccess";
|
|
Inventory.PickupSound "misc/i_pkup";
|
|
PuzzleItem.FailMessage("$TXT_USEPUZZLEFAILED");
|
|
PuzzleItem.FailSound "*puzzfail";
|
|
}
|
|
|
|
override bool HandlePickup (Inventory item)
|
|
{
|
|
// Can't carry more than 1 of each puzzle item in coop netplay
|
|
if (multiplayer && !deathmatch && item.GetClass() == GetClass())
|
|
{
|
|
return true;
|
|
}
|
|
return Super.HandlePickup (item);
|
|
}
|
|
|
|
override bool Use (bool pickup)
|
|
{
|
|
if (Owner == NULL) return false;
|
|
if (Owner.UsePuzzleItem (PuzzleItemNumber))
|
|
{
|
|
return true;
|
|
}
|
|
// [RH] Always play the sound if the use fails.
|
|
Owner.A_StartSound (PuzzFailSound, CHAN_VOICE);
|
|
if (Owner.CheckLocalView())
|
|
{
|
|
Console.MidPrint (null, PuzzFailMessage, true);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
override void UseAll(Actor user)
|
|
{
|
|
}
|
|
|
|
override bool ShouldStay ()
|
|
{
|
|
return !!multiplayer;
|
|
}
|
|
|
|
}
|
|
|