mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-29 23:33:00 +00:00
821 lines
14 KiB
Text
821 lines
14 KiB
Text
// Med patch -----------------------------------------------------------------
|
|
|
|
class MedPatch : HealthPickup
|
|
{
|
|
Default
|
|
{
|
|
Health 10;
|
|
+FLOORCLIP
|
|
+INVENTORY.INVBAR
|
|
Inventory.MaxAmount 20;
|
|
Tag "$TAG_MEDPATCH";
|
|
Inventory.Icon "I_STMP";
|
|
Inventory.PickupMessage "$TXT_MEDPATCH";
|
|
HealthPickup.Autouse 3;
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
STMP A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
|
|
// Medical Kit ---------------------------------------------------------------
|
|
|
|
class MedicalKit : HealthPickup
|
|
{
|
|
Default
|
|
{
|
|
Health 25;
|
|
+FLOORCLIP
|
|
+INVENTORY.INVBAR
|
|
Inventory.MaxAmount 15;
|
|
Tag "$TAG_MEDICALKIT";
|
|
Inventory.Icon "I_MDKT";
|
|
Inventory.PickupMessage "$TXT_MEDICALKIT";
|
|
HealthPickup.Autouse 3;
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
MDKT A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
|
|
// Surgery Kit --------------------------------------------------------------
|
|
|
|
class SurgeryKit : HealthPickup
|
|
{
|
|
Default
|
|
{
|
|
+FLOORCLIP
|
|
+INVENTORY.INVBAR
|
|
Health -100;
|
|
Inventory.MaxAmount 5;
|
|
Tag "$TAG_SURGERYKIT";
|
|
Inventory.Icon "I_FULL";
|
|
Inventory.PickupMessage "$TXT_SURGERYKIT";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
FULL AB 35;
|
|
Loop;
|
|
}
|
|
}
|
|
|
|
|
|
// StrifeMap ----------------------------------------------------------------
|
|
|
|
class StrifeMap : MapRevealer
|
|
{
|
|
Default
|
|
{
|
|
+FLOORCLIP
|
|
Inventory.PickupSound "misc/p_pkup";
|
|
Inventory.PickupMessage "$TXT_STRIFEMAP";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
SMAP AB 6 Bright;
|
|
Loop;
|
|
}
|
|
}
|
|
|
|
|
|
// Beldin's Ring ------------------------------------------------------------
|
|
|
|
class BeldinsRing : Inventory
|
|
{
|
|
Default
|
|
{
|
|
+NOTDMATCH
|
|
+FLOORCLIP
|
|
+INVENTORY.INVBAR
|
|
Tag "$TAG_BELDINSRING";
|
|
Inventory.Icon "I_RING";
|
|
Inventory.GiveQuest 1;
|
|
Inventory.PickupMessage "$TXT_BELDINSRING";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
RING A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
|
|
// Offering Chalice ---------------------------------------------------------
|
|
|
|
class OfferingChalice : Inventory
|
|
{
|
|
Default
|
|
{
|
|
+DROPPED
|
|
+FLOORCLIP
|
|
+INVENTORY.INVBAR
|
|
Radius 10;
|
|
Height 16;
|
|
Tag "$TAG_OFFERINGCHALICE";
|
|
Inventory.Icon "I_RELC";
|
|
Inventory.PickupMessage "$TXT_OFFERINGCHALICE";
|
|
Inventory.GiveQuest 2;
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
RELC A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
|
|
// Ear ----------------------------------------------------------------------
|
|
|
|
class Ear : Inventory
|
|
{
|
|
Default
|
|
{
|
|
+FLOORCLIP
|
|
+INVENTORY.INVBAR
|
|
Tag "$TAG_EAR";
|
|
Inventory.Icon "I_EARS";
|
|
Inventory.PickupMessage "$TXT_EAR";
|
|
Inventory.GiveQuest 9;
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
EARS A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
|
|
// Broken Power Coupling ----------------------------------------------------
|
|
|
|
class BrokenPowerCoupling : Inventory
|
|
{
|
|
Default
|
|
{
|
|
Health 40;
|
|
+DROPPED
|
|
+FLOORCLIP
|
|
+INVENTORY.INVBAR
|
|
Radius 16;
|
|
Height 16;
|
|
Tag "$TAG_BROKENCOUPLING";
|
|
Inventory.MaxAmount 1;
|
|
Inventory.Icon "I_COUP";
|
|
Inventory.PickupMessage "$TXT_BROKENCOUPLING";
|
|
Inventory.GiveQuest 8;
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
COUP C -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
|
|
// Shadow Armor -------------------------------------------------------------
|
|
|
|
class ShadowArmor : PowerupGiver
|
|
{
|
|
Default
|
|
{
|
|
+FLOORCLIP
|
|
+VISIBILITYPULSE
|
|
+INVENTORY.INVBAR
|
|
-INVENTORY.FANCYPICKUPSOUND
|
|
RenderStyle "Translucent";
|
|
Tag "$TAG_SHADOWARMOR";
|
|
Inventory.MaxAmount 2;
|
|
Powerup.Type "PowerShadow";
|
|
Inventory.Icon "I_SHD1";
|
|
Inventory.PickupSound "misc/i_pkup";
|
|
Inventory.PickupMessage "$TXT_SHADOWARMOR";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
SHD1 A -1 Bright;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
|
|
// Environmental suit -------------------------------------------------------
|
|
|
|
class EnvironmentalSuit : PowerupGiver
|
|
{
|
|
Default
|
|
{
|
|
+FLOORCLIP
|
|
+INVENTORY.INVBAR
|
|
-INVENTORY.FANCYPICKUPSOUND
|
|
Inventory.MaxAmount 5;
|
|
Powerup.Type "PowerMask";
|
|
Tag "$TAG_ENVSUIT";
|
|
Inventory.Icon "I_MASK";
|
|
Inventory.PickupSound "misc/i_pkup";
|
|
Inventory.PickupMessage "$TXT_ENVSUIT";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
MASK A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
|
|
// Guard Uniform ------------------------------------------------------------
|
|
|
|
class GuardUniform : Inventory
|
|
{
|
|
Default
|
|
{
|
|
+FLOORCLIP
|
|
+INVENTORY.INVBAR
|
|
Tag "$TAG_GUARDUNIFORM";
|
|
Inventory.Icon "I_UNIF";
|
|
Inventory.PickupMessage "$TXT_GUARDUNIFORM";
|
|
Inventory.GiveQuest 15;
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
UNIF A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
|
|
// Officer's Uniform --------------------------------------------------------
|
|
|
|
class OfficersUniform : Inventory
|
|
{
|
|
Default
|
|
{
|
|
+FLOORCLIP
|
|
+INVENTORY.INVBAR
|
|
Tag "$TAG_OFFICERSUNIFORM";
|
|
Inventory.Icon "I_OFIC";
|
|
Inventory.PickupMessage "$TXT_OFFICERSUNIFORM";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
OFIC A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
|
|
// Flame Thrower Parts ------------------------------------------------------
|
|
|
|
class FlameThrowerParts : Inventory
|
|
{
|
|
Default
|
|
{
|
|
+FLOORCLIP
|
|
+INVENTORY.INVBAR
|
|
Inventory.Icon "I_BFLM";
|
|
Tag "$TAG_FTHROWERPARTS";
|
|
Inventory.PickupMessage "$TXT_FTHROWERPARTS";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
BFLM A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
// InterrogatorReport -------------------------------------------------------
|
|
// SCRIPT32 in strife0.wad has an Acolyte that drops this, but I couldn't
|
|
// find that Acolyte in the map. It seems to be totally unused in the
|
|
// final game.
|
|
|
|
class InterrogatorReport : Inventory
|
|
{
|
|
Default
|
|
{
|
|
+FLOORCLIP
|
|
Tag "$TAG_REPORT";
|
|
Inventory.PickupMessage "$TXT_REPORT";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
TOKN A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
|
|
// Info ---------------------------------------------------------------------
|
|
|
|
class Info : Inventory
|
|
{
|
|
Default
|
|
{
|
|
+FLOORCLIP
|
|
+INVENTORY.INVBAR
|
|
Tag "$TAG_INFO";
|
|
Inventory.Icon "I_TOKN";
|
|
Inventory.PickupMessage "$TXT_INFO";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
TOKN A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
|
|
// Targeter -----------------------------------------------------------------
|
|
|
|
class Targeter : PowerupGiver
|
|
{
|
|
Default
|
|
{
|
|
+FLOORCLIP
|
|
+INVENTORY.INVBAR
|
|
-INVENTORY.FANCYPICKUPSOUND
|
|
Tag "$TAG_TARGETER";
|
|
Powerup.Type "PowerTargeter";
|
|
Inventory.MaxAmount 5;
|
|
Inventory.Icon "I_TARG";
|
|
Inventory.PickupSound "misc/i_pkup";
|
|
Inventory.PickupMessage "$TXT_TARGETER";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
TARG A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
// Communicator -----------------------------------------------------------------
|
|
|
|
class Communicator : Inventory
|
|
{
|
|
Default
|
|
{
|
|
+NOTDMATCH
|
|
Tag "$TAG_COMMUNICATOR";
|
|
Inventory.Icon "I_COMM";
|
|
Inventory.PickupSound "misc/p_pkup";
|
|
Inventory.PickupMessage "$TXT_COMMUNICATOR";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
COMM A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
// Degnin Ore ---------------------------------------------------------------
|
|
|
|
class DegninOre : Inventory
|
|
{
|
|
Default
|
|
{
|
|
Health 10;
|
|
Radius 16;
|
|
Height 16;
|
|
Inventory.MaxAmount 10;
|
|
+SOLID
|
|
+SHOOTABLE
|
|
+NOBLOOD
|
|
+FLOORCLIP
|
|
+INCOMBAT
|
|
+INVENTORY.INVBAR
|
|
Tag "$TAG_DEGNINORE";
|
|
DeathSound "ore/explode";
|
|
Inventory.Icon "I_XPRK";
|
|
Inventory.PickupMessage "$TXT_DEGNINORE";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
XPRK A -1;
|
|
Stop;
|
|
Death:
|
|
XPRK A 1 A_RemoveForceField;
|
|
BNG3 A 0 A_SetRenderStyle(1, STYLE_Normal);
|
|
BNG3 A 0 A_Scream;
|
|
BNG3 A 3 Bright A_Explode(192, 192, alert:true);
|
|
BNG3 BCDEFGH 3 Bright;
|
|
Stop;
|
|
}
|
|
|
|
override bool Use (bool pickup)
|
|
{
|
|
if (pickup)
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
Inventory drop;
|
|
|
|
// Increase the amount by one so that when DropInventory decrements it,
|
|
// the actor will have the same number of beacons that he started with.
|
|
// When we return to UseInventory, it will take care of decrementing
|
|
// Amount again and disposing of this item if there are no more.
|
|
Amount++;
|
|
drop = Owner.DropInventory (self);
|
|
if (drop == NULL)
|
|
{
|
|
Amount--;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// Gun Training -------------------------------------------------------------
|
|
|
|
class GunTraining : Inventory
|
|
{
|
|
Default
|
|
{
|
|
+FLOORCLIP
|
|
+INVENTORY.INVBAR
|
|
+INVENTORY.UNDROPPABLE
|
|
Inventory.MaxAmount 100;
|
|
Tag "$TAG_GUNTRAINING";
|
|
Inventory.Icon "I_GUNT";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
GUNT A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
// Health Training ----------------------------------------------------------
|
|
|
|
class HealthTraining : Inventory
|
|
{
|
|
Default
|
|
{
|
|
+FLOORCLIP
|
|
+INVENTORY.INVBAR
|
|
+INVENTORY.UNDROPPABLE
|
|
Inventory.MaxAmount 100;
|
|
Tag "$TAG_HEALTHTRAINING";
|
|
Inventory.Icon "I_HELT";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
HELT A -1;
|
|
Stop;
|
|
}
|
|
|
|
override bool TryPickup (in out Actor toucher)
|
|
{
|
|
if (Super.TryPickup(toucher))
|
|
{
|
|
toucher.GiveInventoryType ("GunTraining");
|
|
toucher.A_GiveInventory("Coin", toucher.player.mo.accuracy*5 + 300);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
// Scanner ------------------------------------------------------------------
|
|
|
|
class Scanner : PowerupGiver
|
|
{
|
|
Default
|
|
{
|
|
+FLOORCLIP
|
|
+INVENTORY.FANCYPICKUPSOUND
|
|
Inventory.MaxAmount 1;
|
|
Tag "$TAG_SCANNER";
|
|
Inventory.Icon "I_PMUP";
|
|
Powerup.Type "PowerScanner";
|
|
Inventory.PickupSound "misc/i_pkup";
|
|
Inventory.PickupMessage "$TXT_SCANNER";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
PMUP AB 6;
|
|
Loop;
|
|
}
|
|
|
|
override bool Use (bool pickup)
|
|
{
|
|
if (!level.AllMap)
|
|
{
|
|
if (Owner.CheckLocalView())
|
|
{
|
|
Console.MidPrint(null, "$TXT_NEEDMAP");
|
|
}
|
|
return false;
|
|
}
|
|
return Super.Use (pickup);
|
|
}
|
|
|
|
}
|
|
|
|
// Prison Pass --------------------------------------------------------------
|
|
|
|
class PrisonPass : Key
|
|
{
|
|
Default
|
|
{
|
|
Inventory.Icon "I_TOKN";
|
|
Tag "$TAG_PRISONPASS";
|
|
Inventory.PickupMessage "$TXT_PRISONPASS";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
TOKN A -1;
|
|
Stop;
|
|
}
|
|
|
|
override bool TryPickup (in out Actor toucher)
|
|
{
|
|
Super.TryPickup (toucher);
|
|
Door_Open(223, 16);
|
|
toucher.GiveInventoryType ("QuestItem10");
|
|
return true;
|
|
}
|
|
|
|
//============================================================================
|
|
//
|
|
// APrisonPass :: SpecialDropAction
|
|
//
|
|
// Trying to make a monster that drops a prison pass turns it into an
|
|
// OpenDoor223 item instead. That means the only way to get it in Strife
|
|
// is through dialog, which is why it doesn't have its own sprite.
|
|
//
|
|
//============================================================================
|
|
|
|
override bool SpecialDropAction (Actor dropper)
|
|
{
|
|
Door_Open(223, 16);
|
|
Destroy ();
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Dummy items. They are just used by Strife to perform ---------------------
|
|
// actions and cannot be held. ----------------------------------------------
|
|
//---------------------------------------------------------------------------
|
|
|
|
class DummyStrifeItem : Inventory
|
|
{
|
|
States
|
|
{
|
|
Spawn:
|
|
TOKN A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
// Sound the alarm! ---------------------------------------------------------
|
|
|
|
class RaiseAlarm : DummyStrifeItem
|
|
{
|
|
Default
|
|
{
|
|
Tag "$TAG_ALARM";
|
|
}
|
|
|
|
override bool TryPickup (in out Actor toucher)
|
|
{
|
|
toucher.SoundAlert (toucher);
|
|
|
|
ThinkerIterator it = ThinkerIterator.Create("AlienSpectre3");
|
|
Actor spectre = Actor(it.Next());
|
|
|
|
if (spectre != NULL && spectre.health > 0 && toucher != spectre)
|
|
{
|
|
spectre.CurSector.SoundTarget = spectre.LastHeard = toucher;
|
|
spectre.target = toucher;
|
|
spectre.SetState (spectre.SeeState);
|
|
}
|
|
GoAwayAndDie ();
|
|
return true;
|
|
}
|
|
|
|
override bool SpecialDropAction (Actor dropper)
|
|
{
|
|
if (dropper.target != null)
|
|
{
|
|
dropper.target.SoundAlert(dropper.target);
|
|
if (dropper.target.CheckLocalView())
|
|
{
|
|
Console.MidPrint(null, "$TXT_YOUFOOL");
|
|
}
|
|
}
|
|
Destroy ();
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
// Open door tag 222 --------------------------------------------------------
|
|
|
|
class OpenDoor222 : DummyStrifeItem
|
|
{
|
|
override bool TryPickup (in out Actor toucher)
|
|
{
|
|
Door_Open(222, 16);
|
|
GoAwayAndDie ();
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
// Close door tag 222 -------------------------------------------------------
|
|
|
|
class CloseDoor222 : DummyStrifeItem
|
|
{
|
|
override bool TryPickup (in out Actor toucher)
|
|
{
|
|
Door_Close(222, 16);
|
|
GoAwayAndDie ();
|
|
return true;
|
|
}
|
|
|
|
override bool SpecialDropAction (Actor dropper)
|
|
{
|
|
Door_Close(222, 16);
|
|
if (dropper.target != null)
|
|
{
|
|
if (dropper.target.CheckLocalView())
|
|
{
|
|
Console.MidPrint(null, "$TXT_YOUREDEAD");
|
|
}
|
|
dropper.target.SoundAlert(dropper.target);
|
|
}
|
|
Destroy ();
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
// Open door tag 224 --------------------------------------------------------
|
|
|
|
class OpenDoor224 : DummyStrifeItem
|
|
{
|
|
override bool TryPickup (in out Actor toucher)
|
|
{
|
|
Door_Open(224, 16);
|
|
GoAwayAndDie ();
|
|
return true;
|
|
}
|
|
|
|
override bool SpecialDropAction (Actor dropper)
|
|
{
|
|
Door_Open(224, 16);
|
|
Destroy ();
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
// Ammo ---------------------------------------------------------------------
|
|
|
|
class AmmoFillup : DummyStrifeItem
|
|
{
|
|
Default
|
|
{
|
|
Tag "$TAG_AMMOFILLUP";
|
|
}
|
|
|
|
override bool TryPickup (in out Actor toucher)
|
|
{
|
|
Inventory item = toucher.FindInventory("ClipOfBullets");
|
|
if (item == NULL)
|
|
{
|
|
item = toucher.GiveInventoryType ("ClipOfBullets");
|
|
if (item != NULL)
|
|
{
|
|
item.Amount = 50;
|
|
}
|
|
}
|
|
else if (item.Amount < 50)
|
|
{
|
|
item.Amount = 50;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
GoAwayAndDie ();
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
// Health -------------------------------------------------------------------
|
|
|
|
class HealthFillup : DummyStrifeItem
|
|
{
|
|
Default
|
|
{
|
|
Tag "$TAG_HEALTHFILLUP";
|
|
}
|
|
|
|
override bool TryPickup (in out Actor toucher)
|
|
{
|
|
static const int skillhealths[] = { -100, -75, -50, -50, -100 };
|
|
|
|
int index = clamp(skill, 0,4);
|
|
if (!toucher.GiveBody (skillhealths[index]))
|
|
{
|
|
return false;
|
|
}
|
|
GoAwayAndDie ();
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
// Upgrade Stamina ----------------------------------------------------------
|
|
|
|
class UpgradeStamina : DummyStrifeItem
|
|
{
|
|
Default
|
|
{
|
|
Inventory.Amount 10;
|
|
Inventory.MaxAmount 100;
|
|
}
|
|
|
|
override bool TryPickup (in out Actor toucher)
|
|
{
|
|
if (toucher.player == NULL)
|
|
return false;
|
|
|
|
toucher.player.mo.stamina += Amount;
|
|
if (toucher.player.mo.stamina >= MaxAmount)
|
|
toucher.player.mo.stamina = MaxAmount;
|
|
|
|
toucher.GiveBody (-100);
|
|
GoAwayAndDie ();
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
// Upgrade Accuracy ---------------------------------------------------------
|
|
|
|
class UpgradeAccuracy : DummyStrifeItem
|
|
{
|
|
override bool TryPickup (in out Actor toucher)
|
|
{
|
|
if (toucher.player == NULL || toucher.player.mo.accuracy >= 100)
|
|
return false;
|
|
toucher.player.mo.accuracy += 10;
|
|
GoAwayAndDie ();
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
// Start a slideshow --------------------------------------------------------
|
|
|
|
class SlideshowStarter : DummyStrifeItem
|
|
{
|
|
override bool TryPickup (in out Actor toucher)
|
|
{
|
|
Level.StartSlideshow();
|
|
if (level.levelnum == 10)
|
|
{
|
|
toucher.GiveInventoryType ("QuestItem17");
|
|
}
|
|
GoAwayAndDie ();
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
|