diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 7e538ecd63..a87a9aa1d3 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,4 +1,21 @@ June 17, 2006 (Changes by Graf Zahl) +- Converted a_doomhealth.cpp to DECORATE. +- Added a PickupMessage property to the internal actor parser, replaced + most of the virtual PickupMessages with it and placed the code that + reads the metadata into AInventory::PickupMessage. Now the + PickupMessage method is truly virtual and I can do: + Added a Health.LowMessage property to define double message items like + Doom's medikit in DECORATE. +- Since defining Mana3 as an ammo type and then overriding the TryPickup + method means that this item defeats all ammo checks in the game it might + as well be defined as a CustomInventory item. At least this fixes the + amount given in easy and very hard skills. +- Converted all ammo items to DECORATE. +- Changed internal property setting of ammo types and sister weapons + to use fuglyname as for DECORATE definitions. This allows to export + the ammo definitions into DECORATE definitions without doing it for + the weapons themselves. +- Replaced obituary methods with actor properties. - Fixed: The secret map check didn't work for maps inside Zips. June 14, 2006 diff --git a/src/actor.h b/src/actor.h index c6df4bade5..ccebac8f17 100644 --- a/src/actor.h +++ b/src/actor.h @@ -442,12 +442,6 @@ public: // Smallest yaw interval for a mapthing to be spawned with virtual angle_t AngleIncrements (); - // Normal/ranged obituary if this actor is the attacker - virtual const char *GetObituary (); - - // Melee obituary if this actor is the attacker - virtual const char *GetHitObituary (); - // Return true if the monster should use a missile attack, false for melee virtual bool SuggestMissileAttack (fixed_t dist); diff --git a/src/b_think.cpp b/src/b_think.cpp index 6c3165869e..72e9c5e67f 100644 --- a/src/b_think.cpp +++ b/src/b_think.cpp @@ -333,7 +333,7 @@ void DCajunMaster::WhatToGet (AActor *actor, AActor *item) // if (item->IsKindOf (RUNTIME_CLASS(AArtifact))) // return; // don't know how to use artifacts if (item->IsKindOf (RUNTIME_CLASS(AWeapon))) - { + { // FIXME AWeapon *weapon = static_cast (item); AWeapon *heldWeapon; diff --git a/src/d_dehacked.cpp b/src/d_dehacked.cpp index db8de37b2b..44273c6242 100644 --- a/src/d_dehacked.cpp +++ b/src/d_dehacked.cpp @@ -2639,9 +2639,6 @@ bool ADehackedPickup::TryPickup (AActor *toucher) const char *ADehackedPickup::PickupMessage () { - const char *message = RealPickup->GetClass()->Meta.GetMetaString (AIMETA_PickupMessage); - if (message != NULL) return message; - return RealPickup->PickupMessage (); } diff --git a/src/g_doom/a_arachnotron.cpp b/src/g_doom/a_arachnotron.cpp index 26cd33f6fb..a2540313bc 100644 --- a/src/g_doom/a_arachnotron.cpp +++ b/src/g_doom/a_arachnotron.cpp @@ -14,8 +14,6 @@ void A_SpidRefire (AActor *self); class AArachnotron : public AActor { DECLARE_ACTOR (AArachnotron, AActor) -public: - const char *GetObituary () { return GStrings("OB_BABY"); } }; FState AArachnotron::States[] = @@ -92,6 +90,8 @@ IMPLEMENT_ACTOR (AArachnotron, Doom, 68, 6) PROP_PainSound ("baby/pain") PROP_DeathSound ("baby/death") PROP_ActiveSound ("baby/active") + PROP_Obituary("$OB_BABY") + END_DEFAULTS class AArachnotronPlasma : public APlasmaBall diff --git a/src/g_doom/a_archvile.cpp b/src/g_doom/a_archvile.cpp index ce200b8398..628ab237f9 100644 --- a/src/g_doom/a_archvile.cpp +++ b/src/g_doom/a_archvile.cpp @@ -92,12 +92,9 @@ IMPLEMENT_ACTOR (AArchvile, Doom, 64, 111) PROP_PainSound ("vile/pain") PROP_DeathSound ("vile/death") PROP_ActiveSound ("vile/active") -END_DEFAULTS + PROP_Obituary("$OB_VILE") -const char *AArchvile::GetObituary () -{ - return GStrings("OB_VILE"); -} +END_DEFAULTS class AArchvileFire : public AActor { diff --git a/src/g_doom/a_bruiser.cpp b/src/g_doom/a_bruiser.cpp index a3fed51566..c22edbb1f0 100644 --- a/src/g_doom/a_bruiser.cpp +++ b/src/g_doom/a_bruiser.cpp @@ -15,9 +15,6 @@ void A_BruisAttack (AActor *); class ABaronOfHell : public AActor { DECLARE_ACTOR (ABaronOfHell, AActor) -public: - const char *GetObituary () { return GStrings("OB_BARON"); } - const char *GetHitObituary () { return GStrings("OB_BARONHIT"); } }; FState ABaronOfHell::States[] = @@ -87,6 +84,9 @@ IMPLEMENT_ACTOR (ABaronOfHell, Doom, 3003, 3) PROP_PainSound ("baron/pain") PROP_DeathSound ("baron/death") PROP_ActiveSound ("baron/active") + PROP_Obituary("$OB_BARON") + PROP_HitObituary("$OB_BARONHIT") + END_DEFAULTS class ABaronBall : public AActor @@ -131,9 +131,6 @@ AT_SPEED_SET (BaronBall, speed) class AHellKnight : public ABaronOfHell { DECLARE_ACTOR (AHellKnight, ABaronOfHell) -public: - const char *GetObituary () { return GStrings("OB_KNIGHT"); } - const char *GetHitObituary () { return GStrings("OB_KNIGHTHIT"); } }; FState AHellKnight::States[] = @@ -203,6 +200,8 @@ IMPLEMENT_ACTOR (AHellKnight, Doom, 69, 113) PROP_PainSound ("knight/pain") PROP_DeathSound ("knight/death") PROP_ActiveSound ("knight/active") + PROP_Obituary("$OB_KNIGHT") + PROP_HitObituary("$OB_KNIGHTHIT") END_DEFAULTS void A_BruisAttack (AActor *self) diff --git a/src/g_doom/a_cacodemon.cpp b/src/g_doom/a_cacodemon.cpp index 21d518f3ad..2a0d009702 100644 --- a/src/g_doom/a_cacodemon.cpp +++ b/src/g_doom/a_cacodemon.cpp @@ -14,9 +14,6 @@ void A_HeadAttack (AActor *); class ACacodemon : public AActor { DECLARE_ACTOR (ACacodemon, AActor) -public: - const char *GetObituary () { return GStrings("OB_CACO"); } - const char *GetHitObituary () { return GStrings("OB_CACOHIT"); } }; FState ACacodemon::States[] = @@ -76,6 +73,8 @@ IMPLEMENT_ACTOR (ACacodemon, Doom, 3005, 19) PROP_DeathSound ("caco/death") PROP_ActiveSound ("caco/active") PROP_AttackSound ("caco/melee") + PROP_Obituary("$OB_CACO") + PROP_HitObituary("$OB_CACOHIT") END_DEFAULTS class ACacodemonBall : public AActor diff --git a/src/g_doom/a_cyberdemon.cpp b/src/g_doom/a_cyberdemon.cpp index 2a630a9845..44e05d8f08 100644 --- a/src/g_doom/a_cyberdemon.cpp +++ b/src/g_doom/a_cyberdemon.cpp @@ -16,8 +16,6 @@ void A_Metal (AActor *); class ACyberdemon : public AActor { DECLARE_ACTOR (ACyberdemon, AActor) -public: - const char *GetObituary () { return GStrings("OB_CYBORG"); } }; FState ACyberdemon::States[] = @@ -83,6 +81,7 @@ IMPLEMENT_ACTOR (ACyberdemon, Doom, 16, 114) PROP_PainSound ("cyber/pain") PROP_DeathSound ("cyber/death") PROP_ActiveSound ("cyber/active") + PROP_Obituary("$OB_CYBORG") END_DEFAULTS void A_CyberAttack (AActor *self) diff --git a/src/g_doom/a_demon.cpp b/src/g_doom/a_demon.cpp index 4e55284e8c..6da6cdcb59 100644 --- a/src/g_doom/a_demon.cpp +++ b/src/g_doom/a_demon.cpp @@ -13,8 +13,6 @@ void A_SargAttack (AActor *); class ADemon : public AActor { DECLARE_ACTOR (ADemon, AActor) -public: - const char *GetHitObituary () { return GStrings("OB_DEMONHIT"); } }; FState ADemon::States[] = @@ -82,13 +80,12 @@ IMPLEMENT_ACTOR (ADemon, Doom, 3002, 8) PROP_PainSound ("demon/pain") PROP_DeathSound ("demon/death") PROP_ActiveSound ("demon/active") + PROP_HitObituary("$OB_DEMONHIT") END_DEFAULTS class ASpectre : public ADemon { DECLARE_STATELESS_ACTOR (ASpectre, ADemon) -public: - const char *GetHitObituary () { return GStrings("OB_SPECTREHIT"); } }; IMPLEMENT_STATELESS_ACTOR (ASpectre, Doom, 58, 9) @@ -101,6 +98,7 @@ IMPLEMENT_STATELESS_ACTOR (ASpectre, Doom, 58, 9) PROP_PainSound ("spectre/pain") PROP_DeathSound ("spectre/death") PROP_ActiveSound ("spectre/active") + PROP_HitObituary("$OB_SPECTREHIT") END_DEFAULTS void A_SargAttack (AActor *self) diff --git a/src/g_doom/a_doomartifacts.cpp b/src/g_doom/a_doomartifacts.cpp index 2398bc9575..d2586238cd 100644 --- a/src/g_doom/a_doomartifacts.cpp +++ b/src/g_doom/a_doomartifacts.cpp @@ -34,11 +34,6 @@ public: } return true; } -protected: - virtual const char *PickupMessage () - { - return GStrings("GOTMSPHERE"); - } }; FState AMegasphere::States[] = @@ -54,6 +49,7 @@ IMPLEMENT_ACTOR (AMegasphere, Doom, 83, 132) PROP_Inventory_FlagsSet (IF_AUTOACTIVATE|IF_ALWAYSPICKUP) PROP_Inventory_MaxAmount (0) PROP_SpawnState (0) + PROP_Inventory_PickupMessage("$GOTMSPHERE") END_DEFAULTS // Berserk ------------------------------------------------------------------ @@ -81,11 +77,6 @@ public: } return false; } -protected: - virtual const char *PickupMessage () - { - return GStrings("GOTBERSERK"); - } }; FState ABerserk::States[] = @@ -99,5 +90,6 @@ IMPLEMENT_ACTOR (ABerserk, Doom, 2023, 134) PROP_Inventory_FlagsSet (IF_AUTOACTIVATE|IF_ALWAYSPICKUP) PROP_Inventory_MaxAmount (0) PROP_PowerupGiver_Powerup ("PowerStrength") + PROP_Inventory_PickupMessage("$GOTBERSERK") END_DEFAULTS diff --git a/src/g_doom/a_doomglobal.h b/src/g_doom/a_doomglobal.h index b64b9a0a9d..e459a2cc2c 100644 --- a/src/g_doom/a_doomglobal.h +++ b/src/g_doom/a_doomglobal.h @@ -13,8 +13,6 @@ class ABossBrain : public AActor class AExplosiveBarrel : public AActor { DECLARE_ACTOR (AExplosiveBarrel, AActor) -public: - const char *GetObituary (); }; class ABulletPuff : public AActor @@ -29,34 +27,26 @@ class ARocket : public AActor DECLARE_ACTOR (ARocket, AActor) public: void BeginPlay (); - const char *GetObituary (); }; class AArchvile : public AActor { DECLARE_ACTOR (AArchvile, AActor) -public: - const char *GetObituary (); }; class ALostSoul : public AActor { DECLARE_ACTOR (ALostSoul, AActor) -public: - const char *GetObituary (); }; class APlasmaBall : public AActor { DECLARE_ACTOR (APlasmaBall, AActor) - const char *GetObituary (); }; class ABFGBall : public AActor { DECLARE_ACTOR (ABFGBall, AActor) -public: - const char *GetObituary (); }; class AScriptedMarine : public AActor diff --git a/src/g_doom/a_doomhealth.cpp b/src/g_doom/a_doomhealth.cpp deleted file mode 100644 index 95d1dd02ca..0000000000 --- a/src/g_doom/a_doomhealth.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include "info.h" -#include "a_pickups.h" -#include "d_player.h" -#include "gstrings.h" -#include "p_local.h" - -// Health bonus ------------------------------------------------------------- - -class AHealthBonus : public AHealth -{ - DECLARE_ACTOR (AHealthBonus, AHealth) -protected: - virtual const char *PickupMessage () - { - return GStrings("GOTHTHBONUS"); - } -}; - -FState AHealthBonus::States[] = -{ - S_NORMAL (BON1, 'A', 6, NULL , &States[1]), - S_NORMAL (BON1, 'B', 6, NULL , &States[2]), - S_NORMAL (BON1, 'C', 6, NULL , &States[3]), - S_NORMAL (BON1, 'D', 6, NULL , &States[4]), - S_NORMAL (BON1, 'C', 6, NULL , &States[5]), - S_NORMAL (BON1, 'B', 6, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (AHealthBonus, Doom, 2014, 152) - PROP_RadiusFixed (20) - PROP_HeightFixed (16) - PROP_Flags (MF_SPECIAL|MF_COUNTITEM) - PROP_Inventory_Amount (1) - PROP_Inventory_MaxAmount (200) // deh.MaxSoulsphere - PROP_Inventory_FlagsSet (IF_ALWAYSPICKUP) - PROP_SpawnState (0) -END_DEFAULTS - -// Stimpack ----------------------------------------------------------------- - -class AStimpack : public AHealth -{ - DECLARE_ACTOR (AStimpack, AHealth) -protected: - virtual const char *PickupMessage () - { - return GStrings("GOTSTIM"); - } -}; - -FState AStimpack::States[] = -{ - S_NORMAL (STIM, 'A', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AStimpack, Doom, 2011, 23) - PROP_RadiusFixed (20) - PROP_HeightFixed (16) - PROP_Flags (MF_SPECIAL) - PROP_Inventory_Amount (10) - PROP_SpawnState (0) -END_DEFAULTS - -// Medikit ------------------------------------------------------------------ - -class AMedikit : public AHealth -{ - DECLARE_ACTOR (AMedikit, AHealth) -public: - virtual bool TryPickup (AActor *toucher) - { - PrevHealth = toucher->player->health; - return Super::TryPickup (toucher); - } -protected: - virtual const char *PickupMessage () - { - return GStrings((PrevHealth < 25) ? "GOTMEDINEED" : "GOTMEDIKIT"); - } - int PrevHealth; -}; - -FState AMedikit::States[] = -{ - S_NORMAL (MEDI, 'A', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AMedikit, Doom, 2012, 24) - PROP_RadiusFixed (20) - PROP_HeightFixed (16) - PROP_Flags (MF_SPECIAL) - PROP_Inventory_Amount (25) - PROP_SpawnState (0) -END_DEFAULTS diff --git a/src/g_doom/a_doomimp.cpp b/src/g_doom/a_doomimp.cpp index be7311a905..ba9aba7c2a 100644 --- a/src/g_doom/a_doomimp.cpp +++ b/src/g_doom/a_doomimp.cpp @@ -14,9 +14,6 @@ void A_TroopAttack (AActor *); class ADoomImp : public AActor { DECLARE_ACTOR (ADoomImp, AActor) -public: - const char *GetObituary () { return GStrings("OB_IMP"); } - const char *GetHitObituary () { return GStrings("OB_IMPHIT"); } }; FState ADoomImp::States[] = @@ -92,6 +89,8 @@ IMPLEMENT_ACTOR (ADoomImp, Doom, 3001, 5) PROP_PainSound ("imp/pain") PROP_DeathSound ("imp/death") PROP_ActiveSound ("imp/active") + PROP_Obituary("$OB_IMP") + PROP_HitObituary("$OB_IMPHIT") END_DEFAULTS class ADoomImpBall : public AActor diff --git a/src/g_doom/a_doommisc.cpp b/src/g_doom/a_doommisc.cpp index ed01b8fa2e..2a93f5ac96 100644 --- a/src/g_doom/a_doommisc.cpp +++ b/src/g_doom/a_doommisc.cpp @@ -45,13 +45,9 @@ IMPLEMENT_ACTOR (AExplosiveBarrel, Doom, 2035, 125) PROP_DeathState (S_BEXP) PROP_DeathSound ("world/barrelx") + PROP_Obituary("$OB_BARREL") END_DEFAULTS -const char *AExplosiveBarrel::GetObituary () -{ - return GStrings("OB_BARREL"); -} - void A_BarrelDestroy (AActor *actor) { if ((dmflags2 & DF2_BARRELS_RESPAWN) && diff --git a/src/g_doom/a_doomweaps.cpp b/src/g_doom/a_doomweaps.cpp index 5d3ef1bf37..f62120c8bc 100644 --- a/src/g_doom/a_doomweaps.cpp +++ b/src/g_doom/a_doomweaps.cpp @@ -20,226 +20,6 @@ static FRandom pr_fireplasma ("FirePlasma"); static FRandom pr_firerail ("FireRail"); static FRandom pr_bfgspray ("BFGSpray"); -/* ammo ********************************************************************/ - -// Clip -------------------------------------------------------------------- - -class AClip : public AAmmo -{ - DECLARE_ACTOR (AClip, AAmmo) -public: - virtual const char *PickupMessage () - { - return GStrings("GOTCLIP"); - } -}; - -FState AClip::States[] = -{ - S_NORMAL (CLIP, 'A', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AClip, Doom, 2007, 11) - PROP_RadiusFixed (20) - PROP_HeightFixed (16) - PROP_Flags (MF_SPECIAL) - PROP_Inventory_Amount (10) - PROP_Inventory_MaxAmount (200) - PROP_Ammo_BackpackAmount (10) - PROP_Ammo_BackpackMaxAmount (400) - PROP_SpawnState (0) - PROP_Inventory_Icon ("CLIPA0") -END_DEFAULTS - -// Clip box ---------------------------------------------------------------- - -class AClipBox : public AClip -{ - DECLARE_ACTOR (AClipBox, AClip) -public: - virtual const char *PickupMessage () - { - return GStrings("GOTCLIPBOX"); - } -}; - -FState AClipBox::States[] = -{ - S_NORMAL (AMMO, 'A', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AClipBox, Doom, 2048, 139) - PROP_RadiusFixed (20) - PROP_HeightFixed (16) - PROP_Flags (MF_SPECIAL) - PROP_Inventory_Amount (50) - PROP_SpawnState (0) -END_DEFAULTS - -// Rocket ------------------------------------------------------------------ - -class ARocketAmmo : public AAmmo -{ - DECLARE_ACTOR (ARocketAmmo, AAmmo) -public: - virtual const char *PickupMessage () - { - return GStrings("GOTROCKET"); - } -}; - -FState ARocketAmmo::States[] = -{ - S_NORMAL (ROCK, 'A', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ARocketAmmo, Doom, 2010, 140) - PROP_RadiusFixed (20) - PROP_HeightFixed (26) - PROP_Flags (MF_SPECIAL) - PROP_Inventory_Amount (1) - PROP_Inventory_MaxAmount (50) - PROP_Ammo_BackpackAmount (1) - PROP_Ammo_BackpackMaxAmount (100) - PROP_SpawnState (0) - PROP_Inventory_Icon ("ROCKA0") -END_DEFAULTS - -// Rocket box -------------------------------------------------------------- - -class ARocketBox : public ARocketAmmo -{ - DECLARE_ACTOR (ARocketBox, ARocketAmmo) -public: - virtual const char *PickupMessage () - { - return GStrings("GOTROCKBOX"); - } -}; - -FState ARocketBox::States[] = -{ - S_NORMAL (BROK, 'A', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ARocketBox, Doom, 2046, 141) - PROP_RadiusFixed (20) - PROP_HeightFixed (16) - PROP_Flags (MF_SPECIAL) - PROP_Inventory_Amount (5) - PROP_SpawnState (0) -END_DEFAULTS - -// Cell -------------------------------------------------------------------- - -class ACell : public AAmmo -{ - DECLARE_ACTOR (ACell, AAmmo) -public: - virtual const char *PickupMessage () - { - return GStrings("GOTCELL"); - } -}; - -FState ACell::States[] = -{ - S_NORMAL (CELL, 'A', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ACell, Doom, 2047, 75) - PROP_RadiusFixed (20) - PROP_HeightFixed (10) - PROP_Flags (MF_SPECIAL) - PROP_Inventory_Amount (20) - PROP_Inventory_MaxAmount (300) - PROP_Ammo_BackpackAmount (20) - PROP_Ammo_BackpackMaxAmount (600) - PROP_SpawnState (0) - PROP_Inventory_Icon ("CELLA0") -END_DEFAULTS - -// Cell pack --------------------------------------------------------------- - -class ACellPack : public ACell -{ - DECLARE_ACTOR (ACellPack, ACell) -public: - virtual const char *PickupMessage () - { - return GStrings("GOTCELLBOX"); - } -}; - -FState ACellPack::States[] = -{ - S_NORMAL (CELP, 'A', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ACellPack, Doom, 17, 142) - PROP_RadiusFixed (20) - PROP_HeightFixed (18) - PROP_Flags (MF_SPECIAL) - PROP_Inventory_Amount (100) - PROP_SpawnState (0) -END_DEFAULTS - -// Shells ------------------------------------------------------------------ - -class AShell : public AAmmo -{ - DECLARE_ACTOR (AShell, AAmmo) -public: - virtual const char *PickupMessage () - { - return GStrings("GOTSHELLS"); - } -}; - -FState AShell::States[] = -{ - S_NORMAL (SHEL, 'A', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AShell, Doom, 2008, 12) - PROP_RadiusFixed (20) - PROP_HeightFixed (8) - PROP_Flags (MF_SPECIAL) - PROP_Inventory_Amount (4) - PROP_Inventory_MaxAmount (50) - PROP_Ammo_BackpackAmount (4) - PROP_Ammo_BackpackMaxAmount (100) - PROP_SpawnState (0) - PROP_Inventory_Icon ("SHELA0") -END_DEFAULTS - -// Shell box --------------------------------------------------------------- - -class AShellBox : public AShell -{ - DECLARE_ACTOR (AShellBox, AShell) -public: - virtual const char *PickupMessage () - { - return GStrings("GOTSHELLBOX"); - } -}; - -FState AShellBox::States[] = -{ - S_NORMAL (SBOX, 'A', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AShellBox, Doom, 2049, 143) - PROP_RadiusFixed (20) - PROP_HeightFixed (10) - PROP_Flags (MF_SPECIAL) - PROP_Inventory_Amount (20) - PROP_SpawnState (0) -END_DEFAULTS - -/* the weapons that use the ammo above *************************************/ - // Fist --------------------------------------------------------------------- void A_Punch (AActor *); @@ -247,8 +27,6 @@ void A_Punch (AActor *); class AFist : public AWeapon { DECLARE_ACTOR (AFist, AWeapon) -public: - const char *GetObituary (); }; FState AFist::States[] = @@ -279,12 +57,9 @@ IMPLEMENT_ACTOR (AFist, Doom, -1, 0) PROP_Weapon_AtkState (S_PUNCH1) PROP_Weapon_HoldAtkState (S_PUNCH1) PROP_Weapon_Kickback (100) -END_DEFAULTS + PROP_Obituary("$OB_MPFIST") -const char *AFist::GetObituary () -{ - return GStrings("OB_MPFIST"); -} +END_DEFAULTS // // A_Punch @@ -334,8 +109,6 @@ void A_FirePistol (AActor *); class APistol : public AWeapon { DECLARE_ACTOR (APistol, AWeapon) -public: - const char *GetObituary (); }; FState APistol::States[] = @@ -378,13 +151,9 @@ IMPLEMENT_ACTOR (APistol, Doom, -1, 0) PROP_Weapon_Kickback (100) PROP_Weapon_MoveCombatDist (25000000) PROP_Weapon_AmmoType1 ("Clip") + PROP_Obituary("$OB_MPPISTOL") END_DEFAULTS -const char *APistol::GetObituary () -{ - return GStrings("OB_MPPISTOL"); -} - // // A_FirePistol // @@ -424,9 +193,6 @@ void A_Saw (AActor *); class AChainsaw : public AWeapon { DECLARE_ACTOR (AChainsaw, AWeapon) -public: - const char *PickupMessage (); - const char *GetObituary (); }; FState AChainsaw::States[] = @@ -465,18 +231,10 @@ IMPLEMENT_ACTOR (AChainsaw, Doom, 2005, 32) PROP_Weapon_HoldAtkState (S_SAW1) PROP_Weapon_UpSound ("weapons/sawup") PROP_Weapon_ReadySound ("weapons/sawidle") + PROP_Obituary("$OB_MPCHAINSAW") + PROP_Inventory_PickupMessage("$GOTCHAINSAW") END_DEFAULTS -const char *AChainsaw::PickupMessage () -{ - return GStrings("GOTCHAINSAW"); -} - -const char *AChainsaw::GetObituary () -{ - return GStrings("OB_MPCHAINSAW"); -} - // // A_Saw // @@ -545,9 +303,6 @@ void A_FireShotgun (AActor *); class AShotgun : public AWeapon { DECLARE_ACTOR (AShotgun, AWeapon) -public: - const char *PickupMessage (); - const char *GetObituary (); }; FState AShotgun::States[] = @@ -598,18 +353,10 @@ IMPLEMENT_ACTOR (AShotgun, Doom, 2001, 27) PROP_Weapon_Kickback (100) PROP_Weapon_MoveCombatDist (24000000) PROP_Weapon_AmmoType1 ("Shell") + PROP_Obituary("$OB_MPSHOTGUN") + PROP_Inventory_PickupMessage("$GOTSHOTGUN") END_DEFAULTS -const char *AShotgun::PickupMessage () -{ - return GStrings("GOTSHOTGUN"); -} - -const char *AShotgun::GetObituary () -{ - return GStrings("OB_MPSHOTGUN"); -} - // // A_FireShotgun // @@ -649,9 +396,6 @@ void A_CloseShotgun2 (AActor *actor); class ASuperShotgun : public AWeapon { DECLARE_ACTOR (ASuperShotgun, AWeapon) -public: - const char *PickupMessage (); - const char *GetObituary (); }; FState ASuperShotgun::States[] = @@ -707,18 +451,10 @@ IMPLEMENT_ACTOR (ASuperShotgun, Doom, 82, 33) PROP_Weapon_Kickback (100) PROP_Weapon_MoveCombatDist (15000000) PROP_Weapon_AmmoType1 ("Shell") + PROP_Obituary("$OB_MPSSHOTGUN") + PROP_Inventory_PickupMessage("$GOTSHOTGUN2") END_DEFAULTS -const char *ASuperShotgun::PickupMessage () -{ - return GStrings("GOTSHOTGUN2"); -} - -const char *ASuperShotgun::GetObituary () -{ - return GStrings("OB_MPSSHOTGUN"); -} - // // A_FireShotgun2 // @@ -790,9 +526,6 @@ void A_FireCGun (AActor *); class AChaingun : public AWeapon { DECLARE_ACTOR (AChaingun, AWeapon) -public: - const char *PickupMessage (); - const char *GetObituary (); }; FState AChaingun::States[] = @@ -837,18 +570,10 @@ IMPLEMENT_ACTOR (AChaingun, Doom, 2002, 28) PROP_Weapon_Kickback (100) PROP_Weapon_MoveCombatDist (27000000) PROP_Weapon_AmmoType1 ("Clip") + PROP_Obituary("$OB_MPCHAINGUN") + PROP_Inventory_PickupMessage("$GOTCHAINGUN") END_DEFAULTS -const char *AChaingun::PickupMessage () -{ - return GStrings("GOTCHAINGUN"); -} - -const char *AChaingun::GetObituary () -{ - return GStrings("OB_MPCHAINGUN"); -} - // // A_FireCGun // @@ -895,8 +620,6 @@ void A_Explode (AActor *); class ARocketLauncher : public AWeapon { DECLARE_ACTOR (ARocketLauncher, AWeapon) -public: - const char *PickupMessage (); }; FState ARocketLauncher::States[] = @@ -945,13 +668,9 @@ IMPLEMENT_ACTOR (ARocketLauncher, Doom, 2003, 29) PROP_Weapon_MoveCombatDist (18350080) PROP_Weapon_AmmoType1 ("RocketAmmo") PROP_Weapon_ProjectileType ("Rocket") + PROP_Inventory_PickupMessage("$GOTLAUNCHER") END_DEFAULTS -const char *ARocketLauncher::PickupMessage () -{ - return GStrings("GOTLAUNCHER"); -} - FState ARocket::States[] = { #define S_ROCKET 0 @@ -977,6 +696,7 @@ IMPLEMENT_ACTOR (ARocket, Doom, -1, 127) PROP_SeeSound ("weapons/rocklf") PROP_DeathSound ("weapons/rocklx") + PROP_Obituary("$OB_MPROCKET") END_DEFAULTS void ARocket::BeginPlay () @@ -985,11 +705,6 @@ void ARocket::BeginPlay () effects |= FX_ROCKET; } -const char *ARocket::GetObituary () -{ - return GStrings("OB_MPROCKET"); -} - // // A_FireMissile // @@ -1017,8 +732,6 @@ void A_FirePlasma (AActor *); class APlasmaRifle : public AWeapon { DECLARE_ACTOR (APlasmaRifle, AWeapon) -public: - const char *PickupMessage (); }; FState APlasmaRifle::States[] = @@ -1063,13 +776,9 @@ IMPLEMENT_ACTOR (APlasmaRifle, Doom, 2004, 30) PROP_Weapon_MoveCombatDist (27000000) PROP_Weapon_ProjectileType ("PlasmaBall") PROP_Weapon_AmmoType1 ("Cell") + PROP_Inventory_PickupMessage("$GOTPLASMA") END_DEFAULTS -const char *APlasmaRifle::PickupMessage () -{ - return GStrings("GOTPLASMA"); -} - FState APlasmaBall::States[] = { #define S_PLASBALL 0 @@ -1101,13 +810,9 @@ IMPLEMENT_ACTOR (APlasmaBall, Doom, -1, 51) PROP_SeeSound ("weapons/plasmaf") PROP_DeathSound ("weapons/plasmax") + PROP_Obituary("$OB_MPPLASMARIFLE") END_DEFAULTS -const char *APlasmaBall::GetObituary () -{ - return GStrings("OB_MPPLASMARIFLE"); -} - // // A_FirePlasma // @@ -1191,8 +896,6 @@ void A_BFGsound (AActor *); class ABFG9000 : public AWeapon { DECLARE_ACTOR (ABFG9000, AWeapon) -public: - const char *PickupMessage (); }; class ABFGExtra : public AActor @@ -1245,13 +948,9 @@ IMPLEMENT_ACTOR (ABFG9000, Doom, 2006, 31) PROP_Weapon_MoveCombatDist (10000000) PROP_Weapon_AmmoType1 ("Cell") PROP_Weapon_ProjectileType ("BFGBall") + PROP_Inventory_PickupMessage("$GOTBFG9000") END_DEFAULTS -const char *ABFG9000::PickupMessage () -{ - return GStrings("GOTBFG9000"); -} - FState ABFGBall::States[] = { #define S_BFGSHOT 0 @@ -1282,13 +981,9 @@ IMPLEMENT_ACTOR (ABFGBall, Doom, -1, 128) PROP_DeathState (S_BFGLAND) PROP_DeathSound ("weapons/bfgx") + PROP_Obituary("$OB_MPBFG_BOOM") END_DEFAULTS -const char *ABFGBall::GetObituary () -{ - return GStrings("OB_MPBFG_BOOM"); -} - FState ABFGExtra::States[] = { S_BRIGHT (BFE2, 'A', 8, NULL , &States[1]), diff --git a/src/g_doom/a_fatso.cpp b/src/g_doom/a_fatso.cpp index 623e29bca4..7e65f847e8 100644 --- a/src/g_doom/a_fatso.cpp +++ b/src/g_doom/a_fatso.cpp @@ -16,8 +16,6 @@ void A_FatAttack3 (AActor *); class AFatso : public AActor { DECLARE_ACTOR (AFatso, AActor) -public: - const char *GetObituary () { return GStrings("OB_FATSO"); } }; FState AFatso::States[] = @@ -101,6 +99,7 @@ IMPLEMENT_ACTOR (AFatso, Doom, 67, 112) PROP_PainSound ("fatso/pain") PROP_DeathSound ("fatso/death") PROP_ActiveSound ("fatso/active") + PROP_Obituary("$OB_FATSO") END_DEFAULTS class AFatShot : public AActor diff --git a/src/g_doom/a_lostsoul.cpp b/src/g_doom/a_lostsoul.cpp index dce9d8cbe3..d91d545e7c 100644 --- a/src/g_doom/a_lostsoul.cpp +++ b/src/g_doom/a_lostsoul.cpp @@ -66,13 +66,9 @@ IMPLEMENT_ACTOR (ALostSoul, Doom, 3006, 110) PROP_PainSound ("skull/pain") PROP_DeathSound ("skull/death") PROP_ActiveSound ("skull/active") + PROP_Obituary("$OB_SKULL") END_DEFAULTS -const char *ALostSoul::GetObituary () -{ - return GStrings("OB_SKULL"); -} - // // SkullAttack // Fly at the player like a missile. diff --git a/src/g_doom/a_possessed.cpp b/src/g_doom/a_possessed.cpp index 08a0115f44..7827b16028 100644 --- a/src/g_doom/a_possessed.cpp +++ b/src/g_doom/a_possessed.cpp @@ -25,7 +25,6 @@ class AZombieMan : public AActor DECLARE_ACTOR (AZombieMan, AActor) public: void NoBlockingSet (); - const char *GetObituary () { return GStrings("OB_ZOMBIE"); } }; FState AZombieMan::States[] = @@ -101,6 +100,7 @@ IMPLEMENT_ACTOR (AZombieMan, Doom, 3004, 4) PROP_PainSound ("grunt/pain") PROP_DeathSound ("grunt/death") PROP_ActiveSound ("grunt/active") + PROP_Obituary("$OB_ZOMBIE") END_DEFAULTS void AZombieMan::NoBlockingSet () @@ -137,7 +137,6 @@ class AShotgunGuy : public AActor DECLARE_ACTOR (AShotgunGuy, AActor) public: void NoBlockingSet (); - const char *GetObituary () { return GStrings("OB_SHOTGUY"); } }; FState AShotgunGuy::States[] = @@ -215,6 +214,7 @@ IMPLEMENT_ACTOR (AShotgunGuy, Doom, 9, 1) PROP_PainSound ("shotguy/pain") PROP_DeathSound ("shotguy/death") PROP_ActiveSound ("shotguy/active") + PROP_Obituary("$OB_SHOTGUY") END_DEFAULTS void AShotgunGuy::NoBlockingSet () @@ -267,7 +267,6 @@ class AChaingunGuy : public AActor DECLARE_ACTOR (AChaingunGuy, AActor) public: void NoBlockingSet (); - const char *GetObituary () { return GStrings("OB_CHAINGUY"); } }; FState AChaingunGuy::States[] = @@ -346,6 +345,7 @@ IMPLEMENT_ACTOR (AChaingunGuy, Doom, 65, 2) PROP_DeathSound ("chainguy/death") PROP_ActiveSound ("chainguy/active") PROP_AttackSound ("chainguy/attack") + PROP_Obituary("$OB_CHAINGUY") END_DEFAULTS void AChaingunGuy::NoBlockingSet () @@ -359,7 +359,6 @@ class AWolfensteinSS : public AActor { DECLARE_ACTOR (AWolfensteinSS, AActor) public: - const char *GetObituary () { return GStrings("OB_WOLFSS"); } void NoBlockingSet (); }; @@ -440,6 +439,7 @@ IMPLEMENT_ACTOR (AWolfensteinSS, Doom, 84, 116) PROP_DeathSound ("wolfss/death") PROP_ActiveSound ("wolfss/active") PROP_AttackSound ("wolfss/attack") + PROP_Obituary("$OB_WOLFSS") END_DEFAULTS void AWolfensteinSS::NoBlockingSet () diff --git a/src/g_doom/a_revenant.cpp b/src/g_doom/a_revenant.cpp index eff7afee6a..fbe93b9ecb 100644 --- a/src/g_doom/a_revenant.cpp +++ b/src/g_doom/a_revenant.cpp @@ -20,9 +20,6 @@ void A_SkelFist (AActor *); class ARevenant : public AActor { DECLARE_ACTOR (ARevenant, AActor) -public: - const char *GetObituary () { return GStrings("OB_UNDEAD"); } - const char *GetHitObituary () { return GStrings("OB_UNDEADHIT"); } }; FState ARevenant::States[] = @@ -101,6 +98,8 @@ IMPLEMENT_ACTOR (ARevenant, Doom, 66, 20) PROP_PainSound ("skeleton/pain") PROP_DeathSound ("skeleton/death") PROP_ActiveSound ("skeleton/active") + PROP_Obituary("$OB_UNDEAD") + PROP_HitObituary("$OB_UNDEADHIT") END_DEFAULTS diff --git a/src/g_doom/a_spidermaster.cpp b/src/g_doom/a_spidermaster.cpp index e245005232..0779935650 100644 --- a/src/g_doom/a_spidermaster.cpp +++ b/src/g_doom/a_spidermaster.cpp @@ -17,8 +17,6 @@ void A_SPosAttackUseAtkSound (AActor *); class ASpiderMastermind : public AActor { DECLARE_ACTOR (ASpiderMastermind, AActor) -public: - const char *GetObituary () { return GStrings("OB_SPIDER"); } }; FState ASpiderMastermind::States[] = @@ -88,6 +86,7 @@ IMPLEMENT_ACTOR (ASpiderMastermind, Doom, 7, 7) PROP_PainSound ("spider/pain") PROP_DeathSound ("spider/death") PROP_ActiveSound ("spider/active") + PROP_Obituary("$OB_SPIDER") END_DEFAULTS void A_SpidRefire (AActor *self) diff --git a/src/g_heretic/a_beast.cpp b/src/g_heretic/a_beast.cpp index 90fa8b3a74..55275d7164 100644 --- a/src/g_heretic/a_beast.cpp +++ b/src/g_heretic/a_beast.cpp @@ -20,7 +20,6 @@ class ABeast : public AActor DECLARE_ACTOR (ABeast, AActor) public: void NoBlockingSet (); - const char *GetObituary (); }; FState ABeast::States[] = @@ -89,6 +88,7 @@ IMPLEMENT_ACTOR (ABeast, Heretic, 70, 3) PROP_PainSound ("beast/pain") PROP_DeathSound ("beast/death") PROP_ActiveSound ("beast/active") + PROP_Obituary("$OB_BEAST") END_DEFAULTS void ABeast::NoBlockingSet () @@ -96,11 +96,6 @@ void ABeast::NoBlockingSet () P_DropItem (this, "CrossbowAmmo", 10, 84); } -const char *ABeast::GetObituary () -{ - return GStrings("OB_BEAST"); -} - // Beast ball --------------------------------------------------------------- // Heretic also had a MT_BURNBALL and MT_BURNBALLFB based on the beast ball, diff --git a/src/g_heretic/a_chicken.cpp b/src/g_heretic/a_chicken.cpp index 157ee7f408..087ea31a1c 100644 --- a/src/g_heretic/a_chicken.cpp +++ b/src/g_heretic/a_chicken.cpp @@ -220,7 +220,6 @@ class AChicken : public AActor DECLARE_ACTOR (AChicken, AActor) public: void Destroy (); - const char *GetObituary (); void Die (AActor *source, AActor *inflictor); }; @@ -275,6 +274,7 @@ IMPLEMENT_ACTOR (AChicken, Heretic, -1, 122) PROP_PainSound ("chicken/pain") PROP_DeathSound ("chicken/death") PROP_ActiveSound ("chicken/active") + PROP_Obituary("$OB_CHICKEN") END_DEFAULTS void AChicken::Destroy () @@ -286,11 +286,6 @@ void AChicken::Destroy () Super::Destroy (); } -const char *AChicken::GetObituary () -{ - return GStrings("OB_CHICKEN"); -} - void AChicken::Die (AActor *source, AActor *inflictor) { Super::Die (source, inflictor); diff --git a/src/g_heretic/a_clink.cpp b/src/g_heretic/a_clink.cpp index cdc4a2c02a..6a3db3cd2c 100644 --- a/src/g_heretic/a_clink.cpp +++ b/src/g_heretic/a_clink.cpp @@ -18,7 +18,6 @@ class AClink : public AActor DECLARE_ACTOR (AClink, AActor) public: void NoBlockingSet (); - const char *GetObituary (); }; FState AClink::States[] = @@ -73,6 +72,7 @@ IMPLEMENT_ACTOR (AClink, Heretic, 90, 1) PROP_PainSound ("clink/pain") PROP_DeathSound ("clink/death") PROP_ActiveSound ("clink/active") + PROP_Obituary("$OB_CLINK") END_DEFAULTS void AClink::NoBlockingSet () @@ -80,11 +80,6 @@ void AClink::NoBlockingSet () P_DropItem (this, "SkullRodAmmo", 20, 84); } -const char *AClink::GetObituary () -{ - return GStrings("OB_CLINK"); -} - //---------------------------------------------------------------------------- // // PROC A_ClinkAttack diff --git a/src/g_heretic/a_dsparil.cpp b/src/g_heretic/a_dsparil.cpp index c3e1885b0c..06eab41392 100644 --- a/src/g_heretic/a_dsparil.cpp +++ b/src/g_heretic/a_dsparil.cpp @@ -65,9 +65,6 @@ void ABossSpot::BeginPlay () class ASorcerer1 : public AActor { DECLARE_ACTOR (ASorcerer1, AActor) -public: - const char *GetObituary (); - const char *GetHitObituary (); }; FState ASorcerer1::States[] = @@ -137,18 +134,10 @@ IMPLEMENT_ACTOR (ASorcerer1, Heretic, 7, 142) PROP_PainSound ("dsparilserpent/pain") PROP_DeathSound ("dsparilserpent/death") PROP_ActiveSound ("dsparilserpent/active") + PROP_Obituary("$OB_DSPARIL1") + PROP_HitObituary("$OB_DSPARIL1HIT") END_DEFAULTS -const char *ASorcerer1::GetObituary () -{ - return GStrings("OB_DSPARIL1"); -} - -const char *ASorcerer1::GetHitObituary () -{ - return GStrings("OB_DSPARIL1HIT"); -} - // Sorcerer FX 1 ------------------------------------------------------------ class ASorcererFX1 : public AActor @@ -270,6 +259,8 @@ IMPLEMENT_ACTOR (ASorcerer2, Heretic, -1, 143) PROP_AttackSound ("dsparil/attack") PROP_PainSound ("dsparil/pain") PROP_ActiveSound ("dsparil/active") + PROP_Obituary("$OB_DSPARIL2") + PROP_HitObituary("$OB_DSPARIL2HIT") END_DEFAULTS void ASorcerer2::Serialize (FArchive &arc) @@ -295,16 +286,6 @@ void ASorcerer2::BeginPlay () } } -const char *ASorcerer2::GetObituary () -{ - return GStrings("OB_DSPARIL2"); -} - -const char *ASorcerer2::GetHitObituary () -{ - return GStrings("OB_DSPARIL2HIT"); -} - // Sorcerer 2 FX 1 ---------------------------------------------------------- class ASorcerer2FX1 : public AActor diff --git a/src/g_heretic/a_hereticartifacts.cpp b/src/g_heretic/a_hereticartifacts.cpp index 4caf8ad545..684f4dd171 100644 --- a/src/g_heretic/a_hereticartifacts.cpp +++ b/src/g_heretic/a_hereticartifacts.cpp @@ -13,7 +13,6 @@ class AArtiTomeOfPower : public APowerupGiver DECLARE_ACTOR (AArtiTomeOfPower, APowerupGiver) public: bool Use (bool pickup); - const char *PickupMessage (); }; FState AArtiTomeOfPower::States[] = @@ -28,6 +27,7 @@ IMPLEMENT_ACTOR (AArtiTomeOfPower, Heretic, 86, 134) PROP_Inventory_FlagsSet (IF_PICKUPFLASH) PROP_Inventory_Icon ("ARTIPWBK") PROP_PowerupGiver_Powerup ("PowerWeaponLevel2") + PROP_Inventory_PickupMessage("$TXT_ARTITOMEOFPOWER") END_DEFAULTS bool AArtiTomeOfPower::Use (bool pickup) @@ -51,11 +51,6 @@ bool AArtiTomeOfPower::Use (bool pickup) } } -const char *AArtiTomeOfPower::PickupMessage () -{ - return GStrings("TXT_ARTITOMEOFPOWER"); -} - // Time bomb ---------------------------------------------------------------- class AActivatedTimeBomb : public AActor @@ -99,7 +94,6 @@ class AArtiTimeBomb : public AInventory DECLARE_ACTOR (AArtiTimeBomb, AInventory) public: bool Use (bool pickup); - const char *PickupMessage (); }; FState AArtiTimeBomb::States[] = @@ -115,6 +109,7 @@ IMPLEMENT_ACTOR (AArtiTimeBomb, Heretic, 34, 72) PROP_Inventory_FlagsSet (IF_INVBAR|IF_PICKUPFLASH|IF_FANCYPICKUPSOUND) PROP_Inventory_Icon ("ARTIFBMB") PROP_Inventory_PickupSound ("misc/p_pkup") + PROP_Inventory_PickupMessage("$TXT_ARTIFIREBOMB") END_DEFAULTS bool AArtiTimeBomb::Use (bool pickup) @@ -128,7 +123,3 @@ bool AArtiTimeBomb::Use (bool pickup) return true; } -const char *AArtiTimeBomb::PickupMessage () -{ - return GStrings("TXT_ARTIFIREBOMB"); -} diff --git a/src/g_heretic/a_hereticglobal.h b/src/g_heretic/a_hereticglobal.h index 533c20f795..bd94b79222 100644 --- a/src/g_heretic/a_hereticglobal.h +++ b/src/g_heretic/a_hereticglobal.h @@ -27,8 +27,6 @@ class ASorcerer2 : public AActor public: void Serialize (FArchive &arc); void BeginPlay (); - const char *GetObituary (); - const char *GetHitObituary (); int NumBossSpots; AActor *FirstBossSpot; @@ -39,8 +37,6 @@ class AWizard : public AActor DECLARE_ACTOR (AWizard, AActor) public: void NoBlockingSet (); - const char *GetObituary (); - const char *GetHitObituary (); }; void P_DSparilTeleport (AActor *actor); diff --git a/src/g_heretic/a_hereticimp.cpp b/src/g_heretic/a_hereticimp.cpp index c0c47379ab..26b9d15b21 100644 --- a/src/g_heretic/a_hereticimp.cpp +++ b/src/g_heretic/a_hereticimp.cpp @@ -25,9 +25,6 @@ void A_ImpXDeath2 (AActor *); class AHereticImp : public AActor { DECLARE_ACTOR (AHereticImp, AActor) -public: - const char *GetObituary (); - const char *GetHitObituary (); }; FState AHereticImp::States[] = @@ -114,18 +111,10 @@ IMPLEMENT_ACTOR (AHereticImp, Heretic, 66, 5) PROP_PainSound ("himp/pain") PROP_DeathSound ("himp/death") PROP_ActiveSound ("himp/active") + PROP_Obituary("$OB_HERETICIMP") + PROP_HitObituary("$OB_HERETICIMPHIT") END_DEFAULTS -const char *AHereticImp::GetObituary () -{ - return GStrings("OB_HERETICIMP"); -} - -const char *AHereticImp::GetHitObituary () -{ - return GStrings("OB_HERETICIMPHIT"); -} - // Heretic imp leader ------------------------------------------------------- class AHereticImpLeader : public AHereticImp diff --git a/src/g_heretic/a_hereticweaps.cpp b/src/g_heretic/a_hereticweaps.cpp index 6870f82592..be76ec7e8c 100644 --- a/src/g_heretic/a_hereticweaps.cpp +++ b/src/g_heretic/a_hereticweaps.cpp @@ -38,18 +38,6 @@ static FRandom pr_fp2 ("FirePhoenixPL2"); #define FLAME_THROWER_TICS (10*TICRATE) -#define AMMO_GWND_WIMPY 10 -#define AMMO_GWND_HEFTY 50 -#define AMMO_CBOW_WIMPY 5 -#define AMMO_CBOW_HEFTY 20 -#define AMMO_BLSR_WIMPY 10 -#define AMMO_BLSR_HEFTY 25 -#define AMMO_SKRD_WIMPY 20 -#define AMMO_SKRD_HEFTY 100 -#define AMMO_PHRD_WIMPY 1 -#define AMMO_PHRD_HEFTY 10 -#define AMMO_MACE_WIMPY 20 -#define AMMO_MACE_HEFTY 100 #define USE_GWND_AMMO_1 1 #define USE_GWND_AMMO_2 1 @@ -284,58 +272,6 @@ void A_StaffAttackPL2 (AActor *actor) void A_FireGoldWandPL1 (AActor *); void A_FireGoldWandPL2 (AActor *); -// Wimpy ammo --------------------------------------------------------------- - -class AGoldWandAmmo : public AAmmo -{ - DECLARE_ACTOR (AGoldWandAmmo, AAmmo) -public: - virtual const char *PickupMessage () - { - return GStrings("TXT_AMMOGOLDWAND1"); - } -}; - -FState AGoldWandAmmo::States[] = -{ - S_NORMAL (AMG1, 'A', -1, NULL , NULL), -}; - -IMPLEMENT_ACTOR (AGoldWandAmmo, Heretic, 10, 11) - PROP_Inventory_Amount (AMMO_GWND_WIMPY) - PROP_Inventory_MaxAmount (100) - PROP_Ammo_BackpackAmount (AMMO_GWND_WIMPY) - PROP_Ammo_BackpackMaxAmount (200) - PROP_Flags (MF_SPECIAL) - PROP_SpawnState (0) - PROP_Inventory_Icon ("INAMGLD") -END_DEFAULTS - -// Hefty ammo --------------------------------------------------------------- - -class AGoldWandHefty : public AGoldWandAmmo -{ - DECLARE_ACTOR (AGoldWandHefty, AGoldWandAmmo) -public: - virtual const char *PickupMessage () - { - return GStrings("TXT_AMMOGOLDWAND2"); - } -}; - -FState AGoldWandHefty::States[] = -{ - S_NORMAL (AMG2, 'A', 4, NULL , &States[1]), - S_NORMAL (AMG2, 'B', 4, NULL , &States[2]), - S_NORMAL (AMG2, 'C', 4, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (AGoldWandHefty, Heretic, 12, 12) - PROP_Inventory_Amount (AMMO_GWND_HEFTY) - PROP_Flags (MF_SPECIAL) - PROP_SpawnState (0) -END_DEFAULTS - // Gold wand ---------------------------------------------------------------- class AGoldWand : public AHereticWeapon @@ -573,68 +509,11 @@ void A_FireCrossbowPL1 (AActor *); void A_FireCrossbowPL2 (AActor *); void A_BoltSpark (AActor *); -// Wimpy ammo --------------------------------------------------------------- - -class ACrossbowAmmo : public AAmmo -{ - DECLARE_ACTOR (ACrossbowAmmo, AAmmo) -public: - const char *PickupMessage () - { - return GStrings("TXT_AMMOCROSSBOW1"); - } -}; - -FState ACrossbowAmmo::States[] = -{ - S_NORMAL (AMC1, 'A', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ACrossbowAmmo, Heretic, 18, 33) - PROP_Inventory_Amount (AMMO_CBOW_WIMPY) - PROP_Inventory_MaxAmount (50) - PROP_Ammo_BackpackAmount (AMMO_CBOW_WIMPY) - PROP_Ammo_BackpackMaxAmount (100) - PROP_Flags (MF_SPECIAL) - PROP_SpawnState (0) - PROP_Inventory_Icon ("INAMBOW") -END_DEFAULTS - -// Hefty ammo --------------------------------------------------------------- - -class ACrossbowHefty : public ACrossbowAmmo -{ - DECLARE_ACTOR (ACrossbowHefty, ACrossbowAmmo) -public: - const char *PickupMessage () - { - return GStrings("TXT_AMMOCROSSBOW2"); - } -}; - -FState ACrossbowHefty::States[] = -{ - S_NORMAL (AMC2, 'A', 5, NULL , &States[1]), - S_NORMAL (AMC2, 'B', 5, NULL , &States[2]), - S_NORMAL (AMC2, 'C', 5, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (ACrossbowHefty, Heretic, 19, 34) - PROP_Inventory_Amount (AMMO_CBOW_HEFTY) - PROP_Flags (MF_SPECIAL) - PROP_SpawnState (0) -END_DEFAULTS - // Crossbow ----------------------------------------------------------------- class ACrossbow : public AHereticWeapon { DECLARE_ACTOR (ACrossbow, AHereticWeapon) -public: - const char *PickupMessage () - { - return GStrings("TXT_WPNCROSSBOW"); - } }; class ACrossbowPowered : public ACrossbow @@ -711,6 +590,7 @@ IMPLEMENT_ACTOR (ACrossbow, Heretic, 2001, 27) PROP_Weapon_AmmoType1 ("CrossbowAmmo") PROP_Weapon_SisterType ("CrossbowPowered") PROP_Weapon_ProjectileType ("CrossbowFX1") + PROP_Inventory_PickupMessage("$TXT_WPNCROSSBOW") END_DEFAULTS IMPLEMENT_STATELESS_ACTOR (ACrossbowPowered, Heretic, -1, 0) @@ -917,56 +797,6 @@ void A_MaceBallImpact2 (AActor *); void A_FireMacePL2 (AActor *); void A_DeathBallImpact (AActor *); -// Wimpy ammo --------------------------------------------------------------- - -class AMaceAmmo : public AAmmo -{ - DECLARE_ACTOR (AMaceAmmo, AAmmo) -public: - const char *PickupMessage () - { - return GStrings("TXT_AMMOMACE1"); - } -}; - -FState AMaceAmmo::States[] = -{ - S_NORMAL (AMM1, 'A', -1, NULL, NULL) -}; - -IMPLEMENT_ACTOR (AMaceAmmo, Heretic, 13, 35) - PROP_Inventory_Amount (AMMO_MACE_WIMPY) - PROP_Inventory_MaxAmount (150) - PROP_Ammo_BackpackAmount (AMMO_MACE_WIMPY) - PROP_Ammo_BackpackMaxAmount (300) - PROP_Flags (MF_SPECIAL) - PROP_SpawnState (0) - PROP_Inventory_Icon ("INAMLOB") -END_DEFAULTS - -// Hefty ammo --------------------------------------------------------------- - -class AMaceHefty : public AMaceAmmo -{ - DECLARE_ACTOR (AMaceHefty, AMaceAmmo) -public: - const char *PickupMessage () - { - return GStrings("TXT_AMMOMACE1"); - } -}; - -FState AMaceHefty::States[] = -{ - S_NORMAL (AMM2, 'A', -1, NULL, NULL) -}; - -IMPLEMENT_ACTOR (AMaceHefty, Heretic, 16, 36) - PROP_Inventory_Amount (AMMO_MACE_HEFTY) - PROP_Flags (MF_SPECIAL) - PROP_SpawnState (0) -END_DEFAULTS - // The mace itself ---------------------------------------------------------- class AMace : public AHereticWeapon @@ -975,11 +805,6 @@ class AMace : public AHereticWeapon HAS_OBJECT_POINTERS public: void Serialize (FArchive &arc); -public: - const char *PickupMessage () - { - return GStrings("TXT_WPNMACE"); - } protected: bool DoRespawn (); int NumMaceSpots; @@ -1055,6 +880,7 @@ BEGIN_DEFAULTS (AMace, Heretic, -1, 0) PROP_Weapon_AmmoType1 ("MaceAmmo") PROP_Weapon_SisterType ("MacePowered") PROP_Weapon_ProjectileType ("MaceFX2") + PROP_Inventory_PickupMessage("$TXT_WPNMACE") END_DEFAULTS IMPLEMENT_STATELESS_ACTOR (AMacePowered, Heretic, -1, 0) @@ -1639,11 +1465,6 @@ void A_GauntletSound (AActor *); class AGauntlets : public AHereticWeapon { DECLARE_ACTOR (AGauntlets, AHereticWeapon) -public: - const char *PickupMessage () - { - return GStrings("TXT_WPNGAUNTLETS"); - } }; class AGauntletsPowered : public AGauntlets @@ -1711,6 +1532,7 @@ IMPLEMENT_ACTOR (AGauntlets, Heretic, 2005, 32) PROP_Weapon_YAdjust (15) PROP_Weapon_UpSound ("weapons/gauntletsactivate") PROP_Weapon_SisterType ("GauntletsPowered") + PROP_Inventory_PickupMessage("$TXT_WPNGAUNTLETS") END_DEFAULTS IMPLEMENT_STATELESS_ACTOR (AGauntletsPowered, Heretic, -1, 0) @@ -1887,70 +1709,11 @@ void A_FireBlasterPL1 (AActor *); void A_FireBlasterPL2 (AActor *); void A_SpawnRippers (AActor *); -// Wimpy ammo --------------------------------------------------------------- - -class ABlasterAmmo : public AAmmo -{ - DECLARE_ACTOR (ABlasterAmmo, AAmmo) -public: - const char *PickupMessage () - { - return GStrings("TXT_AMMOBLASTER1"); - } -}; - -FState ABlasterAmmo::States[] = -{ - S_NORMAL (AMB1, 'A', 4, NULL , &States[1]), - S_NORMAL (AMB1, 'B', 4, NULL , &States[2]), - S_NORMAL (AMB1, 'C', 4, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (ABlasterAmmo, Heretic, 54, 37) - PROP_Inventory_Amount (AMMO_BLSR_WIMPY) - PROP_Inventory_MaxAmount (200) - PROP_Ammo_BackpackAmount (AMMO_BLSR_WIMPY) - PROP_Ammo_BackpackMaxAmount (400) - PROP_Flags (MF_SPECIAL) - PROP_SpawnState (0) - PROP_Inventory_Icon ("INAMBST") -END_DEFAULTS - -// Hefty ammo --------------------------------------------------------------- - -class ABlasterHefty : public ABlasterAmmo -{ - DECLARE_ACTOR (ABlasterHefty, ABlasterAmmo) -public: - const char *PickupMessage () - { - return GStrings("TXT_AMMOBLASTER2"); - } -}; - -FState ABlasterHefty::States[] = -{ - S_NORMAL (AMB2, 'A', 4, NULL , &States[1]), - S_NORMAL (AMB2, 'B', 4, NULL , &States[2]), - S_NORMAL (AMB2, 'C', 4, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (ABlasterHefty, Heretic, 55, 38) - PROP_Inventory_Amount (AMMO_BLSR_HEFTY) - PROP_Flags (MF_SPECIAL) - PROP_SpawnState (0) -END_DEFAULTS - // Blaster ------------------------------------------------------------------ class ABlaster : public AHereticWeapon { DECLARE_ACTOR (ABlaster, AHereticWeapon) -public: - const char *PickupMessage () - { - return GStrings("TXT_WPNBLASTER"); - } }; class ABlasterPowered : public ABlaster @@ -2006,6 +1769,7 @@ IMPLEMENT_ACTOR (ABlaster, Heretic, 53, 28) PROP_Weapon_MoveCombatDist (27000000) PROP_Weapon_AmmoType1 ("BlasterAmmo") PROP_Weapon_SisterType ("BlasterPowered") + PROP_Inventory_PickupMessage("$TXT_WPNBLASTER") END_DEFAULTS IMPLEMENT_STATELESS_ACTOR (ABlasterPowered, Heretic, -1, 0) @@ -2348,68 +2112,11 @@ void A_HideInCeiling (AActor *); void A_SkullRodStorm (AActor *); void A_RainImpact (AActor *); -// Wimpy ammo --------------------------------------------------------------- - -class ASkullRodAmmo : public AAmmo -{ - DECLARE_ACTOR (ASkullRodAmmo, AAmmo) -public: - const char *PickupMessage () - { - return GStrings("TXT_AMMOSKULLROD1"); - } -}; - -FState ASkullRodAmmo::States[] = -{ - S_NORMAL (AMS1, 'A', 5, NULL , &States[1]), - S_NORMAL (AMS1, 'B', 5, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (ASkullRodAmmo, Heretic, 20, 158) - PROP_Inventory_Amount (AMMO_SKRD_WIMPY) - PROP_Inventory_MaxAmount (200) - PROP_Ammo_BackpackAmount (AMMO_SKRD_WIMPY) - PROP_Ammo_BackpackMaxAmount (400) - PROP_Flags (MF_SPECIAL) - PROP_SpawnState (0) - PROP_Inventory_Icon ("INAMRAM") -END_DEFAULTS - -// Hefty ammo --------------------------------------------------------------- - -class ASkullRodHefty : public ASkullRodAmmo -{ - DECLARE_ACTOR (ASkullRodHefty, ASkullRodAmmo) -public: - const char *PickupMessage () - { - return GStrings("TXT_AMMOSKULLROD2"); - } -}; - -FState ASkullRodHefty::States[] = -{ - S_NORMAL (AMS2, 'A', 5, NULL , &States[1]), - S_NORMAL (AMS2, 'B', 5, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (ASkullRodHefty, Heretic, 21, 159) - PROP_Inventory_Amount (AMMO_SKRD_HEFTY) - PROP_Flags (MF_SPECIAL) - PROP_SpawnState (0) -END_DEFAULTS - // Skull (Horn) Rod --------------------------------------------------------- class ASkullRod : public AHereticWeapon { DECLARE_ACTOR (ASkullRod, AHereticWeapon) -public: - const char *PickupMessage () - { - return GStrings("TXT_WPNSKULLROD"); - } }; class ASkullRodPowered : public ASkullRod @@ -2465,6 +2172,7 @@ IMPLEMENT_ACTOR (ASkullRod, Heretic, 2004, 30) PROP_Weapon_AmmoType1 ("SkullRodAmmo") PROP_Weapon_SisterType ("SkullRodPowered") PROP_Weapon_ProjectileType ("HornRodFX1") + PROP_Inventory_PickupMessage("$TXT_WPNSKULLROD") END_DEFAULTS IMPLEMENT_STATELESS_ACTOR (ASkullRodPowered, Heretic, -1, 0) @@ -2871,60 +2579,6 @@ void A_PhoenixPuff (AActor *); void A_FlameEnd (AActor *); void A_FloatPuff (AActor *); -// Wimpy ammo --------------------------------------------------------------- - -class APhoenixRodAmmo : public AAmmo -{ - DECLARE_ACTOR (APhoenixRodAmmo, AAmmo) -public: - const char *PickupMessage () - { - return GStrings("TXT_AMMOPHOENIXROD1"); - } -}; - -FState APhoenixRodAmmo::States[] = -{ - S_NORMAL (AMP1, 'A', 4, NULL , &States[1]), - S_NORMAL (AMP1, 'B', 4, NULL , &States[2]), - S_NORMAL (AMP1, 'C', 4, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (APhoenixRodAmmo, Heretic, 22, 161) - PROP_Inventory_Amount (AMMO_PHRD_WIMPY) - PROP_Inventory_MaxAmount (20) - PROP_Ammo_BackpackAmount (AMMO_PHRD_WIMPY) - PROP_Ammo_BackpackMaxAmount (40) - PROP_Flags (MF_SPECIAL) - PROP_SpawnState (0) - PROP_Inventory_Icon ("INAMPNX") -END_DEFAULTS - -// Hefty ammo --------------------------------------------------------------- - -class APhoenixRodHefty : public APhoenixRodAmmo -{ - DECLARE_ACTOR (APhoenixRodHefty, APhoenixRodAmmo) -public: - const char *PickupMessage () - { - return GStrings("TXT_AMMOPHOENIXROD2"); - } -}; - -FState APhoenixRodHefty::States[] = -{ - S_NORMAL (AMP2, 'A', 4, NULL , &States[1]), - S_NORMAL (AMP2, 'B', 4, NULL , &States[2]), - S_NORMAL (AMP2, 'C', 4, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (APhoenixRodHefty, Heretic, 23, 162) - PROP_Inventory_Amount (AMMO_PHRD_HEFTY) - PROP_Flags (MF_SPECIAL) - PROP_SpawnState (0) -END_DEFAULTS - // Phoenix Rod -------------------------------------------------------------- class APhoenixRod : public AHereticWeapon @@ -2936,10 +2590,6 @@ public: Super::Serialize (arc); arc << FlameCount; } - const char *PickupMessage () - { - return GStrings("TXT_WPNPHOENIXROD"); - } int FlameCount; // for flamethrower duration }; @@ -2996,6 +2646,7 @@ IMPLEMENT_ACTOR (APhoenixRod, Heretic, 2003, 29) PROP_Weapon_AmmoType1 ("PhoenixRodAmmo") PROP_Weapon_SisterType ("PhoenixRodPowered") PROP_Weapon_ProjectileType ("PhoenixFX1") + PROP_Inventory_PickupMessage("$TXT_WPNPHOENIXROD") END_DEFAULTS IMPLEMENT_STATELESS_ACTOR (APhoenixRodPowered, Heretic, -1, 0) @@ -3310,25 +2961,3 @@ void A_FloatPuff (AActor *puff) puff->momz += FRACUNIT*18/10; } -// --- Bag of holding ------------------------------------------------------- - -class ABagOfHolding : public ABackpack -{ - DECLARE_ACTOR (ABagOfHolding, ABackpack) -protected: - const char *PickupMessage () - { - return GStrings("TXT_ITEMBAGOFHOLDING"); - } -}; - -FState ABagOfHolding::States[] = -{ - S_NORMAL (BAGH, 'A', -1, NULL, NULL) -}; - -IMPLEMENT_ACTOR (ABagOfHolding, Heretic, 8, 136) - PROP_Flags (MF_SPECIAL|MF_COUNTITEM) - PROP_Flags2 (MF2_FLOATBOB) - PROP_SpawnState (0) -END_DEFAULTS diff --git a/src/g_heretic/a_ironlich.cpp b/src/g_heretic/a_ironlich.cpp index 0e7214ccf3..ef507b90ff 100644 --- a/src/g_heretic/a_ironlich.cpp +++ b/src/g_heretic/a_ironlich.cpp @@ -23,8 +23,6 @@ class AIronlich : public AActor DECLARE_ACTOR (AIronlich, AActor) public: void NoBlockingSet (); - const char *GetObituary (); - const char *GetHitObituary (); }; FState AIronlich::States[] = @@ -76,6 +74,8 @@ IMPLEMENT_ACTOR (AIronlich, Heretic, 6, 20) PROP_PainSound ("ironlich/pain") PROP_DeathSound ("ironlich/death") PROP_ActiveSound ("ironlich/active") + PROP_Obituary("$OB_IRONLICH") + PROP_HitObituary("$OB_IRONLICHHIT") END_DEFAULTS void AIronlich::NoBlockingSet () @@ -84,16 +84,6 @@ void AIronlich::NoBlockingSet () P_DropItem (this, "ArtiEgg", 0, 51); } -const char *AIronlich::GetObituary () -{ - return GStrings("OB_IRONLICH"); -} - -const char *AIronlich::GetHitObituary () -{ - return GStrings("OB_IRONLICHHIT"); -} - // Head FX 1 ---------------------------------------------------------------- class AHeadFX1 : public AActor diff --git a/src/g_heretic/a_knight.cpp b/src/g_heretic/a_knight.cpp index 22220a4bca..3c887d8b12 100644 --- a/src/g_heretic/a_knight.cpp +++ b/src/g_heretic/a_knight.cpp @@ -22,8 +22,6 @@ class AKnight : public AActor DECLARE_ACTOR (AKnight, AActor) public: void NoBlockingSet (); - const char *GetObituary (); - const char *GetHitObituary (); }; FState AKnight::States[] = @@ -82,6 +80,8 @@ IMPLEMENT_ACTOR (AKnight, Heretic, 64, 6) PROP_PainSound ("hknight/pain") PROP_DeathSound ("hknight/death") PROP_ActiveSound ("hknight/active") + PROP_Obituary("$OB_BONEKNIGHT") + PROP_HitObituary("$OB_BONEKNIGHTHIT") END_DEFAULTS void AKnight::NoBlockingSet () @@ -89,16 +89,6 @@ void AKnight::NoBlockingSet () P_DropItem (this, "CrossbowAmmo", 5, 84); } -const char *AKnight::GetObituary () -{ - return GStrings("OB_BONEKNIGHT"); -} - -const char *AKnight::GetHitObituary () -{ - return GStrings("OB_BONEKNIGHTHIT"); -} - // Knight ghost ------------------------------------------------------------- class AKnightGhost : public AKnight diff --git a/src/g_heretic/a_mummy.cpp b/src/g_heretic/a_mummy.cpp index 1c7d6a3c87..4688f627c4 100644 --- a/src/g_heretic/a_mummy.cpp +++ b/src/g_heretic/a_mummy.cpp @@ -23,7 +23,6 @@ class AMummy : public AActor DECLARE_ACTOR (AMummy, AActor) public: void NoBlockingSet (); - const char *GetHitObituary (); }; FState AMummy::States[] = @@ -79,6 +78,7 @@ IMPLEMENT_ACTOR (AMummy, Heretic, 68, 4) PROP_PainSound ("mummy/pain") PROP_DeathSound ("mummy/death") PROP_ActiveSound ("mummy/active") + PROP_HitObituary("$OB_MUMMY") END_DEFAULTS void AMummy::NoBlockingSet () @@ -86,18 +86,11 @@ void AMummy::NoBlockingSet () P_DropItem (this, "GoldWandAmmo", 3, 84); } -const char *AMummy::GetHitObituary () -{ - return GStrings("OB_MUMMY"); -} - // Mummy leader ------------------------------------------------------------- class AMummyLeader : public AMummy { DECLARE_ACTOR (AMummyLeader, AMummy) -public: - const char *GetObituary (); }; FState AMummyLeader::States[] = @@ -116,13 +109,9 @@ IMPLEMENT_ACTOR (AMummyLeader, Heretic, 45, 2) PROP_SpawnHealth (100) PROP_PainChance (64) PROP_MissileState (S_MUMMYL_ATK) + PROP_Obituary("$OB_MUMMYLEADER") END_DEFAULTS -const char *AMummyLeader::GetObituary () -{ - return GStrings("OB_MUMMYLEADER"); -} - // Mummy ghost -------------------------------------------------------------- class AMummyGhost : public AMummy diff --git a/src/g_heretic/a_snake.cpp b/src/g_heretic/a_snake.cpp index 1c63b168bd..1c9f7b146d 100644 --- a/src/g_heretic/a_snake.cpp +++ b/src/g_heretic/a_snake.cpp @@ -17,7 +17,6 @@ class ASnake : public AActor DECLARE_ACTOR (ASnake, AActor) public: void NoBlockingSet (); - const char *GetObituary (); }; FState ASnake::States[] = @@ -80,13 +79,9 @@ IMPLEMENT_ACTOR (ASnake, Heretic, 92, 132) PROP_PainSound ("snake/pain") PROP_DeathSound ("snake/death") PROP_ActiveSound ("snake/active") + PROP_Obituary("$OB_SNAKE") END_DEFAULTS -const char *ASnake::GetObituary () -{ - return GStrings("OB_SNAKE"); -} - // Snake projectile A ------------------------------------------------------- class ASnakeProjA : public AActor diff --git a/src/g_heretic/a_wizard.cpp b/src/g_heretic/a_wizard.cpp index 83985431e5..8cc2d1f323 100644 --- a/src/g_heretic/a_wizard.cpp +++ b/src/g_heretic/a_wizard.cpp @@ -81,6 +81,8 @@ IMPLEMENT_ACTOR (AWizard, Heretic, 15, 19) PROP_PainSound ("wizard/pain") PROP_DeathSound ("wizard/death") PROP_ActiveSound ("wizard/active") + PROP_Obituary("$OB_WIZARD") + PROP_HitObituary("$OB_WIZARDHIT") END_DEFAULTS void AWizard::NoBlockingSet () @@ -89,16 +91,6 @@ void AWizard::NoBlockingSet () P_DropItem (this, "ArtiTomeOfPower", 0, 4); } -const char *AWizard::GetObituary () -{ - return GStrings("OB_WIZARD"); -} - -const char *AWizard::GetHitObituary () -{ - return GStrings("OB_WIZARDHIT"); -} - class AWizardFX1 : public AActor { DECLARE_ACTOR (AWizardFX1, AActor) diff --git a/src/g_hexen/a_blastradius.cpp b/src/g_hexen/a_blastradius.cpp index 3d88dbd0ba..5beb2fcabf 100644 --- a/src/g_hexen/a_blastradius.cpp +++ b/src/g_hexen/a_blastradius.cpp @@ -17,7 +17,6 @@ class AArtiBlastRadius : public AInventory DECLARE_ACTOR (AArtiBlastRadius, AInventory) public: bool Use (bool pickup); - const char *PickupMessage (); protected: void BlastActor (AActor *victim, fixed_t strength); }; @@ -41,13 +40,9 @@ IMPLEMENT_ACTOR (AArtiBlastRadius, Hexen, 10110, 74) PROP_Inventory_FlagsSet (IF_INVBAR|IF_PICKUPFLASH|IF_FANCYPICKUPSOUND) PROP_Inventory_Icon ("ARTIBLST") PROP_Inventory_PickupSound ("misc/p_pkup") + PROP_Inventory_PickupMessage("$TXT_ARTIBLASTRADIUS") END_DEFAULTS -const char *AArtiBlastRadius::PickupMessage () -{ - return GStrings("TXT_ARTIBLASTRADIUS"); -} - // Blast Effect ------------------------------------------------------------- class ABlastEffect : public AActor diff --git a/src/g_hexen/a_boostarmor.cpp b/src/g_hexen/a_boostarmor.cpp index cf387fb192..76e0b99c39 100644 --- a/src/g_hexen/a_boostarmor.cpp +++ b/src/g_hexen/a_boostarmor.cpp @@ -13,7 +13,6 @@ class AArtiBoostArmor : public AInventory DECLARE_ACTOR (AArtiBoostArmor, AInventory) public: bool Use (bool pickup); - const char *PickupMessage (); }; FState AArtiBoostArmor::States[] = @@ -37,6 +36,7 @@ IMPLEMENT_ACTOR (AArtiBoostArmor, Hexen, 8041, 22) PROP_Inventory_FlagsSet (IF_INVBAR|IF_PICKUPFLASH|IF_FANCYPICKUPSOUND) PROP_Inventory_Icon ("ARTIBRAC") PROP_Inventory_PickupSound ("misc/p_pkup") + PROP_Inventory_PickupMessage("$TXT_ARTIBOOSTARMOR") END_DEFAULTS bool AArtiBoostArmor::Use (bool pickup) @@ -82,7 +82,3 @@ bool AArtiBoostArmor::Use (bool pickup) } } -const char *AArtiBoostArmor::PickupMessage () -{ - return GStrings("TXT_ARTIBOOSTARMOR"); -} diff --git a/src/g_hexen/a_clericflame.cpp b/src/g_hexen/a_clericflame.cpp index c5f81edbf7..a22ccac289 100644 --- a/src/g_hexen/a_clericflame.cpp +++ b/src/g_hexen/a_clericflame.cpp @@ -27,11 +27,6 @@ void A_CFlameMissile (AActor *); class ACWeapFlame : public AClericWeapon { DECLARE_ACTOR (ACWeapFlame, AClericWeapon) -public: - const char *PickupMessage () - { - return GStrings("TXT_WEAPON_C3"); - } }; FState ACWeapFlame::States[] = @@ -94,6 +89,7 @@ IMPLEMENT_ACTOR (ACWeapFlame, Hexen, 8009, 0) PROP_Weapon_MoveCombatDist (27000000) PROP_Weapon_AmmoType1 ("Mana2") PROP_Weapon_ProjectileType ("CFlameMissile") + PROP_Inventory_PickupMessage("$TXT_WEAPON_C3") END_DEFAULTS // Floor Flame -------------------------------------------------------------- diff --git a/src/g_hexen/a_clericholy.cpp b/src/g_hexen/a_clericholy.cpp index 0188d852be..6d654f88fe 100644 --- a/src/g_hexen/a_clericholy.cpp +++ b/src/g_hexen/a_clericholy.cpp @@ -29,7 +29,7 @@ void A_CHolyPalette (AActor *); void SpawnSpiritTail (AActor *spirit); -//========================================================================== +//========================================================================== class AClericWeaponPiece : public AFourthWeaponPiece { @@ -38,15 +38,11 @@ public: void BeginPlay (); protected: bool MatchPlayerClass (AActor *toucher); - const char *PieceMessage (); }; -IMPLEMENT_ABSTRACT_ACTOR (AClericWeaponPiece) - -const char *AClericWeaponPiece::PieceMessage () -{ - return GStrings("TXT_WRAITHVERGE_PIECE"); -} +IMPLEMENT_STATELESS_ACTOR (AClericWeaponPiece, Hexen, -1, 0) + PROP_Inventory_PickupMessage("$TXT_WRAITHVERGE_PIECE") +END_DEFAULTS bool AClericWeaponPiece::MatchPlayerClass (AActor *toucher) { @@ -54,7 +50,7 @@ bool AClericWeaponPiece::MatchPlayerClass (AActor *toucher) !toucher->IsKindOf (RUNTIME_CLASS(AMagePlayer)); } -//========================================================================== +//========================================================================== class ACWeaponPiece1 : public AClericWeaponPiece { @@ -80,7 +76,7 @@ void ACWeaponPiece1::BeginPlay () PieceValue = WPIECE1<<3; } -//========================================================================== +//========================================================================== class ACWeaponPiece2 : public AClericWeaponPiece { @@ -106,7 +102,7 @@ void ACWeaponPiece2::BeginPlay () PieceValue = WPIECE2<<3; } -//========================================================================== +//========================================================================== class ACWeaponPiece3 : public AClericWeaponPiece { @@ -164,10 +160,6 @@ public: Super::Serialize (arc); arc << CHolyCount; } - const char *PickupMessage () - { - return GStrings("TXT_WEAPON_C4"); - } PalEntry GetBlend () { return PalEntry (CHolyCount * 128 / 3, 131, 131, 131); @@ -221,6 +213,7 @@ IMPLEMENT_ACTOR (ACWeapWraithverge, Hexen, -1, 0) PROP_Weapon_AmmoType1 ("Mana1") PROP_Weapon_AmmoType2 ("Mana2") PROP_Weapon_ProjectileType ("HolyMissile") + PROP_Inventory_PickupMessage("$TXT_WEAPON_C4") END_DEFAULTS // Holy Missile ------------------------------------------------------------- diff --git a/src/g_hexen/a_clericstaff.cpp b/src/g_hexen/a_clericstaff.cpp index 3fd0f9184d..2a191e43ed 100644 --- a/src/g_hexen/a_clericstaff.cpp +++ b/src/g_hexen/a_clericstaff.cpp @@ -25,11 +25,6 @@ void A_CStaffMissileSlither (AActor *); class ACWeapStaff : public AClericWeapon { DECLARE_ACTOR (ACWeapStaff, AClericWeapon) -public: - const char *PickupMessage () - { - return GStrings("TXT_WEAPON_C2"); - } }; FState ACWeapStaff::States[] = @@ -99,6 +94,7 @@ IMPLEMENT_ACTOR (ACWeapStaff, Hexen, 10, 32) PROP_Weapon_MoveCombatDist (25000000) PROP_Weapon_AmmoType1 ("Mana1") PROP_Weapon_ProjectileType ("CStaffMissile") + PROP_Inventory_PickupMessage("$TXT_WEAPON_C2") END_DEFAULTS // Serpent Staff Missile ---------------------------------------------------- diff --git a/src/g_hexen/a_fighteraxe.cpp b/src/g_hexen/a_fighteraxe.cpp index 3a18c9272c..ba3ecdcb8e 100644 --- a/src/g_hexen/a_fighteraxe.cpp +++ b/src/g_hexen/a_fighteraxe.cpp @@ -39,11 +39,6 @@ public: FState *GetReadyState (); FState *GetAtkState (); FState *GetHoldAtkState (); - - const char *PickupMessage () - { - return GStrings("TXT_WEAPON_F2"); - } }; FState AFWeapAxe::States[] = @@ -175,6 +170,7 @@ IMPLEMENT_ACTOR (AAxePuff, Hexen, -1, 0) PROP_SeeSound ("FighterAxeHitThing") PROP_AttackSound ("FighterHammerHitWall") PROP_ActiveSound ("FighterHammerMiss") + PROP_Inventory_PickupMessage("$TXT_WEAPON_F2") END_DEFAULTS // Glowing Axe Puff --------------------------------------------------------- diff --git a/src/g_hexen/a_fighterhammer.cpp b/src/g_hexen/a_fighterhammer.cpp index 668458c359..7060f6abad 100644 --- a/src/g_hexen/a_fighterhammer.cpp +++ b/src/g_hexen/a_fighterhammer.cpp @@ -27,11 +27,6 @@ void A_BeAdditive (AActor *); class AFWeapHammer : public AFighterWeapon { DECLARE_ACTOR (AFWeapHammer, AFighterWeapon) -public: - const char *PickupMessage () - { - return GStrings("TXT_WEAPON_F3"); - } }; FState AFWeapHammer::States[] = @@ -82,6 +77,7 @@ IMPLEMENT_ACTOR (AFWeapHammer, Hexen, 123, 28) PROP_Weapon_MoveCombatDist (22000000) PROP_Weapon_AmmoType1 ("Mana2") PROP_Weapon_ProjectileType ("HammerMissile") + PROP_Inventory_PickupMessage("$TXT_WEAPON_F3") END_DEFAULTS // Hammer Missile ----------------------------------------------------------- diff --git a/src/g_hexen/a_fighterquietus.cpp b/src/g_hexen/a_fighterquietus.cpp index e39828a837..8ce312eaa6 100644 --- a/src/g_hexen/a_fighterquietus.cpp +++ b/src/g_hexen/a_fighterquietus.cpp @@ -17,7 +17,7 @@ void A_FSwordAttack (AActor *actor); void A_DropQuietusPieces (AActor *); void A_FSwordFlames (AActor *); -//========================================================================== +//========================================================================== class AFighterWeaponPiece : public AFourthWeaponPiece { @@ -26,15 +26,11 @@ public: void BeginPlay (); protected: bool MatchPlayerClass (AActor *toucher); - const char *PieceMessage (); }; -IMPLEMENT_ABSTRACT_ACTOR (AFighterWeaponPiece) - -const char *AFighterWeaponPiece::PieceMessage () -{ - return GStrings("TXT_QUIETUS_PIECE"); -} +IMPLEMENT_STATELESS_ACTOR (AFighterWeaponPiece, Hexen, -1, 0) + PROP_Inventory_PickupMessage("$TXT_QUIETUS_PIECE") +END_DEFAULTS bool AFighterWeaponPiece::MatchPlayerClass (AActor *toucher) { @@ -42,8 +38,8 @@ bool AFighterWeaponPiece::MatchPlayerClass (AActor *toucher) !toucher->IsKindOf (RUNTIME_CLASS(AMagePlayer)); } -//========================================================================== - +//========================================================================== + class AFWeaponPiece1 : public AFighterWeaponPiece { DECLARE_ACTOR (AFWeaponPiece1, AFighterWeaponPiece) @@ -68,7 +64,7 @@ void AFWeaponPiece1::BeginPlay () PieceValue = WPIECE1; } -//========================================================================== +//========================================================================== class AFWeaponPiece2 : public AFighterWeaponPiece { @@ -94,7 +90,7 @@ void AFWeaponPiece2::BeginPlay () PieceValue = WPIECE2; } -//========================================================================== +//========================================================================== class AFWeaponPiece3 : public AFighterWeaponPiece { @@ -145,11 +141,6 @@ END_DEFAULTS class AFWeapQuietus : public AFighterWeapon { DECLARE_ACTOR (AFWeapQuietus, AFighterWeapon) -public: - const char *PickupMessage () - { - return GStrings("TXT_WEAPON_F4"); - } }; FState AFWeapQuietus::States[] = @@ -213,6 +204,7 @@ IMPLEMENT_ACTOR (AFWeapQuietus, Hexen, -1, 0) PROP_Weapon_AmmoType1 ("Mana1") PROP_Weapon_AmmoType2 ("Mana2") PROP_Weapon_ProjectileType ("FSwordMissile") + PROP_Inventory_PickupMessage("$TXT_WEAPON_F4") END_DEFAULTS // Fighter Sword Missile ---------------------------------------------------- @@ -294,14 +286,14 @@ IMPLEMENT_ACTOR (AFSwordFlame, Hexen, -1, 0) END_DEFAULTS -//============================================================================ -// -// A_FSwordAttack -// -//============================================================================ - -void A_FSwordAttack (AActor *actor) -{ +//============================================================================ +// +// A_FSwordAttack +// +//============================================================================ + +void A_FSwordAttack (AActor *actor) +{ player_t *player; if (NULL == (player = actor->player)) @@ -314,13 +306,13 @@ void A_FSwordAttack (AActor *actor) if (!weapon->DepleteAmmo (weapon->bAltFire)) return; } - P_SpawnPlayerMissile (actor, actor->x, actor->y, actor->z-10*FRACUNIT, RUNTIME_CLASS(AFSwordMissile), actor->angle+ANGLE_45/4); - P_SpawnPlayerMissile (actor, actor->x, actor->y, actor->z-5*FRACUNIT, RUNTIME_CLASS(AFSwordMissile), actor->angle+ANGLE_45/8); - P_SpawnPlayerMissile (actor, actor->x, actor->y, actor->z, RUNTIME_CLASS(AFSwordMissile), actor->angle); - P_SpawnPlayerMissile (actor, actor->x, actor->y, actor->z+5*FRACUNIT, RUNTIME_CLASS(AFSwordMissile), actor->angle-ANGLE_45/8); - P_SpawnPlayerMissile (actor, actor->x, actor->y, actor->z+10*FRACUNIT, RUNTIME_CLASS(AFSwordMissile), actor->angle-ANGLE_45/4); - S_Sound (actor, CHAN_WEAPON, "FighterSwordFire", 1, ATTN_NORM); -} + P_SpawnPlayerMissile (actor, actor->x, actor->y, actor->z-10*FRACUNIT, RUNTIME_CLASS(AFSwordMissile), actor->angle+ANGLE_45/4); + P_SpawnPlayerMissile (actor, actor->x, actor->y, actor->z-5*FRACUNIT, RUNTIME_CLASS(AFSwordMissile), actor->angle+ANGLE_45/8); + P_SpawnPlayerMissile (actor, actor->x, actor->y, actor->z, RUNTIME_CLASS(AFSwordMissile), actor->angle); + P_SpawnPlayerMissile (actor, actor->x, actor->y, actor->z+5*FRACUNIT, RUNTIME_CLASS(AFSwordMissile), actor->angle-ANGLE_45/8); + P_SpawnPlayerMissile (actor, actor->x, actor->y, actor->z+10*FRACUNIT, RUNTIME_CLASS(AFSwordMissile), actor->angle-ANGLE_45/4); + S_Sound (actor, CHAN_WEAPON, "FighterSwordFire", 1, ATTN_NORM); +} //============================================================================ // diff --git a/src/g_hexen/a_flechette.cpp b/src/g_hexen/a_flechette.cpp index ab7b3d899e..74eec3cc46 100644 --- a/src/g_hexen/a_flechette.cpp +++ b/src/g_hexen/a_flechette.cpp @@ -146,7 +146,6 @@ class AArtiPoisonBag : public AInventory public: bool HandlePickup (AInventory *item); AInventory *CreateCopy (AActor *other); - const char *PickupMessage (); void BeginPlay (); }; @@ -163,6 +162,7 @@ IMPLEMENT_ACTOR (AArtiPoisonBag, Hexen, 8000, 72) PROP_Inventory_FlagsSet (IF_INVBAR|IF_PICKUPFLASH|IF_FANCYPICKUPSOUND) PROP_Inventory_Icon ("ARTIPSBG") PROP_Inventory_PickupSound ("misc/p_pkup") + PROP_Inventory_PickupMessage("$TXT_ARTIPOISONBAG") END_DEFAULTS // Poison Bag 1 (The Cleric's) ---------------------------------------------- @@ -346,17 +346,6 @@ AInventory *AArtiPoisonBag::CreateCopy (AActor *other) return copy; } -//============================================================================ -// -// AArtiPoisonBag :: PickupMessage -// -//============================================================================ - -const char *AArtiPoisonBag::PickupMessage () -{ - return GStrings("TXT_ARTIPOISONBAG"); -} - //============================================================================ // // AArtiPoisonBag :: BeginPlay diff --git a/src/g_hexen/a_healingradius.cpp b/src/g_hexen/a_healingradius.cpp index 4059c47a46..c3b7f55818 100644 --- a/src/g_hexen/a_healingradius.cpp +++ b/src/g_hexen/a_healingradius.cpp @@ -10,7 +10,7 @@ #include "a_hexenglobal.h" #include "gi.h" -#define HEAL_RADIUS_DIST 255*FRACUNIT +#define HEAL_RADIUS_DIST 255*FRACUNIT // Healing Radius Artifact -------------------------------------------------- @@ -19,7 +19,6 @@ class AArtiHealingRadius : public AInventory DECLARE_ACTOR (AArtiHealingRadius, AInventory) public: bool Use (bool pickup); - const char *PickupMessage (); }; FState AArtiHealingRadius::States[] = @@ -50,6 +49,7 @@ IMPLEMENT_ACTOR (AArtiHealingRadius, Hexen, 10120, 0) PROP_Inventory_FlagsSet (IF_INVBAR|IF_PICKUPFLASH|IF_FANCYPICKUPSOUND) PROP_Inventory_Icon ("ARTIHRAD") PROP_Inventory_PickupSound ("misc/p_pkup") + PROP_Inventory_PickupMessage("$TXT_ARTIHEALINGRADIUS") END_DEFAULTS bool AArtiHealingRadius::Use (bool pickup) @@ -69,8 +69,3 @@ bool AArtiHealingRadius::Use (bool pickup) return effective; } - -const char *AArtiHealingRadius::PickupMessage () -{ - return GStrings("TXT_ARTIHEALINGRADIUS"); -} diff --git a/src/g_hexen/a_hexenglobal.h b/src/g_hexen/a_hexenglobal.h index 4d1fcdd3ed..8ebb316661 100644 --- a/src/g_hexen/a_hexenglobal.h +++ b/src/g_hexen/a_hexenglobal.h @@ -71,7 +71,6 @@ public: void PlayPickupSound (AActor *toucher); protected: virtual bool MatchPlayerClass (AActor *toucher); - virtual const char *PieceMessage (); const PClass *FourthWeaponClass; int PieceValue; AInventory *TempFourthWeapon; @@ -135,20 +134,6 @@ public: bool TryPickup (AActor *toucher); }; -class AMana1 : public AAmmo -{ - DECLARE_ACTOR (AMana1, AAmmo) -public: - const char *PickupMessage (); -}; - -class AMana2 : public AAmmo -{ - DECLARE_ACTOR (AMana2, AAmmo) -public: - const char *PickupMessage (); -}; - class ASwitchableDecoration : public AActor { DECLARE_STATELESS_ACTOR (ASwitchableDecoration, AActor) diff --git a/src/g_hexen/a_magecone.cpp b/src/g_hexen/a_magecone.cpp index 79a223c40b..e7e66b480f 100644 --- a/src/g_hexen/a_magecone.cpp +++ b/src/g_hexen/a_magecone.cpp @@ -26,11 +26,6 @@ void A_ShedShard (AActor *); class AMWeapFrost : public AMageWeapon { DECLARE_ACTOR (AMWeapFrost, AMageWeapon) -public: - const char *PickupMessage () - { - return GStrings("TXT_WEAPON_M2"); - } }; FState AMWeapFrost::States[] = @@ -78,6 +73,7 @@ IMPLEMENT_ACTOR (AMWeapFrost, Hexen, 53, 36) PROP_Weapon_MoveCombatDist (19000000) PROP_Weapon_AmmoType1 ("Mana1") PROP_Weapon_ProjectileType ("FrostMissile") + PROP_Inventory_PickupMessage("$TXT_WEAPON_M2") END_DEFAULTS // Frost Missile ------------------------------------------------------------ diff --git a/src/g_hexen/a_magelightning.cpp b/src/g_hexen/a_magelightning.cpp index 1fbe6b8666..3c288f7eb8 100644 --- a/src/g_hexen/a_magelightning.cpp +++ b/src/g_hexen/a_magelightning.cpp @@ -34,11 +34,6 @@ void A_FreeTargMobj (AActor *); class AMWeapLightning : public AMageWeapon { DECLARE_ACTOR (AMWeapLightning, AMageWeapon) -public: - const char *PickupMessage () - { - return GStrings("TXT_WEAPON_M3"); - } }; FState AMWeapLightning::States[] = @@ -116,6 +111,7 @@ IMPLEMENT_ACTOR (AMWeapLightning, Hexen, 8040, 0) PROP_Weapon_MoveCombatDist (23000000) PROP_Weapon_AmmoType1 ("Mana2") PROP_Weapon_ProjectileType ("LightningFloor") + PROP_Inventory_PickupMessage("$TXT_WEAPON_M3") END_DEFAULTS // Lightning ---------------------------------------------------------------- diff --git a/src/g_hexen/a_mageplayer.cpp b/src/g_hexen/a_mageplayer.cpp index fcdda1f10b..8d69c8af76 100644 --- a/src/g_hexen/a_mageplayer.cpp +++ b/src/g_hexen/a_mageplayer.cpp @@ -165,8 +165,8 @@ bool AMagePlayer::DoHealingRadius (APlayerPawn *other) { int amount = 50 + (pr_manaradius() % 50); - if (GiveAmmo (RUNTIME_CLASS(AMana1), amount) || - GiveAmmo (RUNTIME_CLASS(AMana2), amount)) + if (GiveAmmo (PClass::FindClass("Mana1"), amount) || + GiveAmmo (PClass::FindClass("Mana2"), amount)) { S_Sound (other, CHAN_AUTO, "MysticIncant", 1, ATTN_NORM); return true; diff --git a/src/g_hexen/a_magestaff.cpp b/src/g_hexen/a_magestaff.cpp index 2a21e5aac2..7c72adf4f8 100644 --- a/src/g_hexen/a_magestaff.cpp +++ b/src/g_hexen/a_magestaff.cpp @@ -18,7 +18,7 @@ void A_MStaffPalette (AActor *actor); static AActor *FrontBlockCheck (AActor *mo, int index); static divline_t BlockCheckLine; -//========================================================================== +//========================================================================== class AMageWeaponPiece : public AFourthWeaponPiece { @@ -27,15 +27,11 @@ public: void BeginPlay (); protected: bool MatchPlayerClass (AActor *toucher); - const char *PieceMessage (); }; -IMPLEMENT_ABSTRACT_ACTOR (AMageWeaponPiece) - -const char *AMageWeaponPiece::PieceMessage () -{ - return GStrings("TXT_BLOODSCOURGE_PIECE"); -} +IMPLEMENT_STATELESS_ACTOR (AMageWeaponPiece, Hexen, -1, 0) + PROP_Inventory_PickupMessage("$TXT_BLOODSCOURGE_PIECE") +END_DEFAULTS bool AMageWeaponPiece::MatchPlayerClass (AActor *toucher) { @@ -43,7 +39,7 @@ bool AMageWeaponPiece::MatchPlayerClass (AActor *toucher) !toucher->IsKindOf (RUNTIME_CLASS(AClericPlayer)); } -//========================================================================== +//========================================================================== class AMWeaponPiece1 : public AMageWeaponPiece { @@ -69,7 +65,7 @@ void AMWeaponPiece1::BeginPlay () PieceValue = WPIECE1<<6; } -//========================================================================== +//========================================================================== class AMWeaponPiece2 : public AMageWeaponPiece { @@ -95,7 +91,7 @@ void AMWeaponPiece2::BeginPlay () PieceValue = WPIECE2<<6; } -//========================================================================== +//========================================================================== class AMWeaponPiece3 : public AMageWeaponPiece { @@ -152,10 +148,6 @@ public: Super::Serialize (arc); arc << MStaffCount; } - const char *PickupMessage () - { - return GStrings("TXT_WEAPON_M4"); - } PalEntry GetBlend () { return PalEntry (MStaffCount * 128 / 3, 151, 110, 0); @@ -240,6 +232,7 @@ IMPLEMENT_ACTOR (AMWeapBloodscourge, Hexen, -1, 0) PROP_Weapon_AmmoType1 ("Mana1") PROP_Weapon_AmmoType2 ("Mana2") PROP_Weapon_ProjectileType ("MageStaffFX2") + PROP_Inventory_PickupMessage("$TXT_WEAPON_M4") END_DEFAULTS // Mage Staff FX2 (Bloodscourge) -------------------------------------------- @@ -404,30 +397,30 @@ void MStaffSpawn (AActor *pmo, angle_t angle) } } -//============================================================================ -// -// A_MStaffAttack -// -//============================================================================ - -void A_MStaffAttack (AActor *actor) -{ - angle_t angle; +//============================================================================ +// +// A_MStaffAttack +// +//============================================================================ + +void A_MStaffAttack (AActor *actor) +{ + angle_t angle; player_t *player; if (NULL == (player = actor->player)) { return; } - + AMWeapBloodscourge *weapon = static_cast (actor->player->ReadyWeapon); if (weapon != NULL) { if (!weapon->DepleteAmmo (weapon->bAltFire)) return; } - angle = actor->angle; - + angle = actor->angle; + // [RH] Let's try and actually track what the player aimed at P_AimLineAttack (actor, angle, PLAYERMISSILERANGE, ANGLE_1*32); if (linetarget == NULL) @@ -438,29 +431,29 @@ void A_MStaffAttack (AActor *actor) BlockCheckLine.dy = -finecosine[angle >> ANGLETOFINESHIFT]; linetarget = P_BlockmapSearch (actor, 10, FrontBlockCheck); } - MStaffSpawn (actor, angle); - MStaffSpawn (actor, angle-ANGLE_1*5); - MStaffSpawn (actor, angle+ANGLE_1*5); - S_Sound (actor, CHAN_WEAPON, "MageStaffFire", 1, ATTN_NORM); - weapon->MStaffCount = 3; -} - -//============================================================================ -// -// A_MStaffPalette -// -//============================================================================ - -void A_MStaffPalette (AActor *actor) -{ - if (actor->player != NULL) - { + MStaffSpawn (actor, angle); + MStaffSpawn (actor, angle-ANGLE_1*5); + MStaffSpawn (actor, angle+ANGLE_1*5); + S_Sound (actor, CHAN_WEAPON, "MageStaffFire", 1, ATTN_NORM); + weapon->MStaffCount = 3; +} + +//============================================================================ +// +// A_MStaffPalette +// +//============================================================================ + +void A_MStaffPalette (AActor *actor) +{ + if (actor->player != NULL) + { AMWeapBloodscourge *weapon = static_cast (actor->player->ReadyWeapon); if (weapon != NULL && weapon->MStaffCount != 0) { weapon->MStaffCount--; } - } + } } //============================================================================ diff --git a/src/g_hexen/a_mana.cpp b/src/g_hexen/a_mana.cpp deleted file mode 100644 index 67f96ace04..0000000000 --- a/src/g_hexen/a_mana.cpp +++ /dev/null @@ -1,216 +0,0 @@ -#include "a_pickups.h" -#include "a_hexenglobal.h" -#include "p_local.h" -#include "gstrings.h" -#include "s_sound.h" - -// Blue mana ---------------------------------------------------------------- - -FState AMana1::States[] = -{ - S_BRIGHT (MAN1, 'A', 4, NULL , &States[1]), - S_BRIGHT (MAN1, 'B', 4, NULL , &States[2]), - S_BRIGHT (MAN1, 'C', 4, NULL , &States[3]), - S_BRIGHT (MAN1, 'D', 4, NULL , &States[4]), - S_BRIGHT (MAN1, 'E', 4, NULL , &States[5]), - S_BRIGHT (MAN1, 'F', 4, NULL , &States[6]), - S_BRIGHT (MAN1, 'G', 4, NULL , &States[7]), - S_BRIGHT (MAN1, 'H', 4, NULL , &States[8]), - S_BRIGHT (MAN1, 'I', 4, NULL , &States[0]), -}; - -IMPLEMENT_ACTOR (AMana1, Hexen, 122, 11) - PROP_Inventory_Amount (15) - PROP_Inventory_MaxAmount (MAX_MANA) - PROP_Ammo_BackpackAmount (15) - PROP_Ammo_BackpackMaxAmount (MAX_MANA) - PROP_RadiusFixed (8) - PROP_HeightFixed (8) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOATBOB) - PROP_SpawnState (0) - PROP_Inventory_Icon ("MAN1I0") -END_DEFAULTS - -const char *AMana1::PickupMessage () -{ - return GStrings("TXT_MANA_1"); -} - -// Green mana --------------------------------------------------------------- - -FState AMana2::States[] = -{ - S_BRIGHT (MAN2, 'A', 4, NULL , &States[1]), - S_BRIGHT (MAN2, 'B', 4, NULL , &States[2]), - S_BRIGHT (MAN2, 'C', 4, NULL , &States[3]), - S_BRIGHT (MAN2, 'D', 4, NULL , &States[4]), - S_BRIGHT (MAN2, 'E', 4, NULL , &States[5]), - S_BRIGHT (MAN2, 'F', 4, NULL , &States[6]), - S_BRIGHT (MAN2, 'G', 4, NULL , &States[7]), - S_BRIGHT (MAN2, 'H', 4, NULL , &States[8]), - S_BRIGHT (MAN2, 'I', 4, NULL , &States[9]), - S_BRIGHT (MAN2, 'J', 4, NULL , &States[10]), - S_BRIGHT (MAN2, 'K', 4, NULL , &States[11]), - S_BRIGHT (MAN2, 'L', 4, NULL , &States[12]), - S_BRIGHT (MAN2, 'M', 4, NULL , &States[13]), - S_BRIGHT (MAN2, 'N', 4, NULL , &States[14]), - S_BRIGHT (MAN2, 'O', 4, NULL , &States[15]), - S_BRIGHT (MAN2, 'P', 4, NULL , &States[0]), -}; - -IMPLEMENT_ACTOR (AMana2, Hexen, 124, 12) - PROP_Inventory_Amount (15) - PROP_Inventory_MaxAmount (MAX_MANA) - PROP_Ammo_BackpackAmount (15) - PROP_Ammo_BackpackMaxAmount (MAX_MANA) - PROP_RadiusFixed (8) - PROP_HeightFixed (8) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOATBOB) - PROP_SpawnState (0) - PROP_Inventory_Icon ("MAN2G0") -END_DEFAULTS - -const char *AMana2::PickupMessage () -{ - return GStrings("TXT_MANA_2"); -} - -// Combined mana ------------------------------------------------------------ - -class AMana3 : public AAmmo -{ - DECLARE_ACTOR (AMana3, AAmmo) -public: - bool TryPickup (AActor *other) - { - bool gave; - - gave = GiveMana (other, RUNTIME_CLASS(AMana1)); - gave |= GiveMana (other, RUNTIME_CLASS(AMana2)); - if (gave) - { - GoAwayAndDie (); - } - return gave; - } -protected: - const char *PickupMessage () - { - return GStrings("TXT_MANA_BOTH"); - } - bool GiveMana (AActor *other, const PClass *type) - { - AInventory *mana = other->FindInventory (type); - if (mana == NULL) - { - mana = static_cast(Spawn (type, 0, 0, 0)); - mana->BecomeItem (); - mana->Amount = Amount; - other->AddInventory (mana); - return true; - } - else if (mana->Amount < mana->MaxAmount) - { - mana->Amount += Amount; - if (mana->Amount > mana->MaxAmount) - { - mana->Amount = mana->MaxAmount; - } - return true; - } - return false; - } -}; - -FState AMana3::States[] = -{ -#define S_MANA3 0 - S_BRIGHT (MAN3, 'A', 4, NULL , &States[S_MANA3+1]), - S_BRIGHT (MAN3, 'B', 4, NULL , &States[S_MANA3+2]), - S_BRIGHT (MAN3, 'C', 4, NULL , &States[S_MANA3+3]), - S_BRIGHT (MAN3, 'D', 4, NULL , &States[S_MANA3+4]), - S_BRIGHT (MAN3, 'E', 4, NULL , &States[S_MANA3+5]), - S_BRIGHT (MAN3, 'F', 4, NULL , &States[S_MANA3+6]), - S_BRIGHT (MAN3, 'G', 4, NULL , &States[S_MANA3+7]), - S_BRIGHT (MAN3, 'H', 4, NULL , &States[S_MANA3+8]), - S_BRIGHT (MAN3, 'I', 4, NULL , &States[S_MANA3+9]), - S_BRIGHT (MAN3, 'J', 4, NULL , &States[S_MANA3+10]), - S_BRIGHT (MAN3, 'K', 4, NULL , &States[S_MANA3+11]), - S_BRIGHT (MAN3, 'L', 4, NULL , &States[S_MANA3+12]), - S_BRIGHT (MAN3, 'M', 4, NULL , &States[S_MANA3+13]), - S_BRIGHT (MAN3, 'N', 4, NULL , &States[S_MANA3+14]), - S_BRIGHT (MAN3, 'O', 4, NULL , &States[S_MANA3+15]), - S_BRIGHT (MAN3, 'P', 4, NULL , &States[S_MANA3+0]), -}; - -IMPLEMENT_ACTOR (AMana3, Hexen, 8004, 75) - PROP_Inventory_Amount (20) - PROP_RadiusFixed (8) - PROP_HeightFixed (8) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOATBOB) - PROP_SpawnState (S_MANA3) - PROP_Inventory_Icon ("MAN3L0") -END_DEFAULTS - -// Boost Mana Artifact (Krater of Might) ------------------------------------ - -class AArtiBoostMana : public AInventory -{ - DECLARE_ACTOR (AArtiBoostMana, AInventory) -public: - bool Use (bool pickup); - const char *PickupMessage (); -protected: - bool FillMana (const PClass *type); -}; - -FState AArtiBoostMana::States[] = -{ - S_BRIGHT (BMAN, 'A', -1, NULL , NULL), -}; - -IMPLEMENT_ACTOR (AArtiBoostMana, Hexen, 8003, 26) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOATBOB) - PROP_SpawnState (0) - PROP_Inventory_DefMaxAmount - PROP_Inventory_FlagsSet (IF_INVBAR|IF_PICKUPFLASH|IF_FANCYPICKUPSOUND) - PROP_Inventory_Icon ("ARTIBMAN") - PROP_Inventory_PickupSound ("misc/p_pkup") -END_DEFAULTS - -bool AArtiBoostMana::Use (bool pickup) -{ - bool success; - - success = FillMana (RUNTIME_CLASS(AMana1)); - success |= FillMana (RUNTIME_CLASS(AMana2)); - return success; -} - -bool AArtiBoostMana::FillMana (const PClass *type) -{ - AInventory *mana = Owner->FindInventory (type); - if (mana == NULL) - { - mana = static_cast(Spawn (type, 0, 0, 0)); - mana->BecomeItem (); - mana->Amount = mana->MaxAmount; - Owner->AddInventory (mana); - return true; - } - else if (mana->Amount < mana->MaxAmount) - { - mana->Amount = mana->MaxAmount; - return true; - } - return false; -} - -const char *AArtiBoostMana::PickupMessage () -{ - return GStrings("TXT_ARTIBOOSTMANA"); -} diff --git a/src/g_hexen/a_pig.cpp b/src/g_hexen/a_pig.cpp index ce961f15fa..8b52673a87 100644 --- a/src/g_hexen/a_pig.cpp +++ b/src/g_hexen/a_pig.cpp @@ -217,7 +217,6 @@ class APig : public AActor DECLARE_ACTOR (APig, AActor) public: void Destroy (); - const char *GetObituary (); void Die (AActor *source, AActor *inflictor); }; @@ -288,12 +287,6 @@ void APig::Destroy () Super::Destroy (); } -const char *APig::GetObituary () -{ - //return GStrings("OB_CHICKEN"); - return Super::GetObituary (); -} - void APig::Die (AActor *source, AActor *inflictor) { Super::Die (source, inflictor); @@ -303,104 +296,104 @@ void APig::Die (AActor *source, AActor *inflictor) } } -//============================================================================ -// -// A_SnoutAttack -// -//============================================================================ - -void A_SnoutAttack (AActor *actor) -{ - angle_t angle; - int damage; - int slope; +//============================================================================ +// +// A_SnoutAttack +// +//============================================================================ + +void A_SnoutAttack (AActor *actor) +{ + angle_t angle; + int damage; + int slope; player_t *player; if (NULL == (player = actor->player)) { return; } - - damage = 3+(pr_snoutattack()&3); - angle = player->mo->angle; - slope = P_AimLineAttack(player->mo, angle, MELEERANGE); - PuffSpawned = NULL; - P_LineAttack(player->mo, angle, MELEERANGE, slope, damage, MOD_HIT, RUNTIME_CLASS(ASnoutPuff)); - S_Sound(player->mo, CHAN_VOICE, "PigActive", 1, ATTN_NORM); - if(linetarget) - { - AdjustPlayerAngle(player->mo); - if(PuffSpawned) - { // Bit something - S_Sound(player->mo, CHAN_VOICE, "PigAttack", 1, ATTN_NORM); - } - } -} - -//---------------------------------------------------------------------------- -// -// PROC A_PigLook -// -//---------------------------------------------------------------------------- - -void A_PigLook (AActor *actor) -{ - if (P_UpdateMorphedMonster (actor, 10)) - { - return; - } - A_Look (actor); -} - -//---------------------------------------------------------------------------- -// -// PROC A_PigChase -// -//---------------------------------------------------------------------------- - -void A_PigChase (AActor *actor) -{ - if (P_UpdateMorphedMonster (actor, 3)) - { - return; - } - A_Chase(actor); -} - -//============================================================================ -// -// A_PigAttack -// -//============================================================================ - -void A_PigAttack (AActor *actor) -{ - if (P_UpdateMorphedMonster (actor, 18)) - { - return; - } - if (!actor->target) - { - return; - } - if (actor->CheckMeleeRange ()) - { - P_DamageMobj(actor->target, actor, actor, 2+(pr_pigattack()&1), MOD_HIT); - S_Sound(actor, CHAN_WEAPON, "PigAttack", 1, ATTN_NORM); - } -} - -//============================================================================ -// -// A_PigPain -// -//============================================================================ - -void A_PigPain (AActor *actor) -{ - A_Pain (actor); - if (actor->z <= actor->floorz) - { - actor->momz = FRACUNIT*7/2; - } -} + + damage = 3+(pr_snoutattack()&3); + angle = player->mo->angle; + slope = P_AimLineAttack(player->mo, angle, MELEERANGE); + PuffSpawned = NULL; + P_LineAttack(player->mo, angle, MELEERANGE, slope, damage, MOD_HIT, RUNTIME_CLASS(ASnoutPuff)); + S_Sound(player->mo, CHAN_VOICE, "PigActive", 1, ATTN_NORM); + if(linetarget) + { + AdjustPlayerAngle(player->mo); + if(PuffSpawned) + { // Bit something + S_Sound(player->mo, CHAN_VOICE, "PigAttack", 1, ATTN_NORM); + } + } +} + +//---------------------------------------------------------------------------- +// +// PROC A_PigLook +// +//---------------------------------------------------------------------------- + +void A_PigLook (AActor *actor) +{ + if (P_UpdateMorphedMonster (actor, 10)) + { + return; + } + A_Look (actor); +} + +//---------------------------------------------------------------------------- +// +// PROC A_PigChase +// +//---------------------------------------------------------------------------- + +void A_PigChase (AActor *actor) +{ + if (P_UpdateMorphedMonster (actor, 3)) + { + return; + } + A_Chase(actor); +} + +//============================================================================ +// +// A_PigAttack +// +//============================================================================ + +void A_PigAttack (AActor *actor) +{ + if (P_UpdateMorphedMonster (actor, 18)) + { + return; + } + if (!actor->target) + { + return; + } + if (actor->CheckMeleeRange ()) + { + P_DamageMobj(actor->target, actor, actor, 2+(pr_pigattack()&1), MOD_HIT); + S_Sound(actor, CHAN_WEAPON, "PigAttack", 1, ATTN_NORM); + } +} + +//============================================================================ +// +// A_PigPain +// +//============================================================================ + +void A_PigPain (AActor *actor) +{ + A_Pain (actor); + if (actor->z <= actor->floorz) + { + actor->momz = FRACUNIT*7/2; + } +} diff --git a/src/g_hexen/a_summon.cpp b/src/g_hexen/a_summon.cpp index d310b4f46b..9bfe978328 100644 --- a/src/g_hexen/a_summon.cpp +++ b/src/g_hexen/a_summon.cpp @@ -16,7 +16,6 @@ class AArtiDarkServant : public AInventory DECLARE_ACTOR (AArtiDarkServant, AInventory) public: bool Use (bool pickup); - const char *PickupMessage (); }; FState AArtiDarkServant::States[] = @@ -34,13 +33,9 @@ IMPLEMENT_ACTOR (AArtiDarkServant, Hexen, 86, 16) PROP_Inventory_FlagsSet (IF_INVBAR|IF_PICKUPFLASH|IF_FANCYPICKUPSOUND) PROP_Inventory_Icon ("ARTISUMN") PROP_Inventory_PickupSound ("misc/p_pkup") + PROP_Inventory_PickupMessage("$TXT_ARTISUMMON") END_DEFAULTS -const char *AArtiDarkServant::PickupMessage () -{ - return GStrings("TXT_ARTISUMMON"); -} - // Summoning Doll ----------------------------------------------------------- class ASummoningDoll : public AActor diff --git a/src/g_hexen/a_teleportother.cpp b/src/g_hexen/a_teleportother.cpp index 81ff22a9e1..17ec05c146 100644 --- a/src/g_hexen/a_teleportother.cpp +++ b/src/g_hexen/a_teleportother.cpp @@ -28,7 +28,6 @@ class AArtiTeleportOther : public AInventory DECLARE_ACTOR (AArtiTeleportOther, AInventory) public: bool Use (bool pickup); - const char *PickupMessage (); }; FState AArtiTeleportOther::States[] = @@ -48,13 +47,9 @@ IMPLEMENT_ACTOR (AArtiTeleportOther, Hexen, 10040, 17) PROP_Inventory_FlagsSet (IF_INVBAR|IF_PICKUPFLASH|IF_FANCYPICKUPSOUND) PROP_Inventory_Icon ("ARTITELO") PROP_Inventory_PickupSound ("misc/p_pkup") + PROP_Inventory_PickupMessage("$TXT_ARTITELEPORTOTHER") END_DEFAULTS -const char *AArtiTeleportOther::PickupMessage () -{ - return GStrings("TXT_ARTITELEPORTOTHER"); -} - // Teleport Other FX -------------------------------------------------------- class ATelOtherFX1 : public AActor diff --git a/src/g_hexen/a_weaponpieces.cpp b/src/g_hexen/a_weaponpieces.cpp index e6f1ff7e06..b751afd8e5 100644 --- a/src/g_hexen/a_weaponpieces.cpp +++ b/src/g_hexen/a_weaponpieces.cpp @@ -18,6 +18,7 @@ END_POINTERS BEGIN_STATELESS_DEFAULTS (AFourthWeaponPiece, Hexen, -1, 0) PROP_Inventory_PickupSound ("misc/w_pkup") + PROP_Inventory_PickupMessage("$TXT_WEAPONPIECE") END_DEFAULTS void AFourthWeaponPiece::Serialize (FArchive &arc) @@ -34,7 +35,7 @@ const char *AFourthWeaponPiece::PickupMessage () } else { - return PieceMessage (); + return Super::PickupMessage (); } } @@ -43,16 +44,11 @@ bool AFourthWeaponPiece::MatchPlayerClass (AActor *toucher) return true; } -const char *AFourthWeaponPiece::PieceMessage () -{ - return "A weapon piece! This is your lucky day!"; -} - void AFourthWeaponPiece::PlayPickupSound (AActor *toucher) { if (TempFourthWeapon != NULL) { - // Play the build-sound full volume for all players + // Play the build-sound full volume for all players S_Sound (toucher, CHAN_ITEM, "WeaponBuild", 1, ATTN_SURROUND); } else @@ -61,113 +57,115 @@ void AFourthWeaponPiece::PlayPickupSound (AActor *toucher) } } -//========================================================================== -// -// TryPickupWeaponPiece -// -//========================================================================== - -bool AFourthWeaponPiece::TryPickup (AActor *toucher) -{ - bool shouldStay; - bool checkAssembled; - bool gaveWeapon; - int gaveMana; - - checkAssembled = true; - gaveWeapon = false; - gaveMana = 0; - shouldStay = PrivateShouldStay (); - if (!MatchPlayerClass (toucher)) - { // Wrong class, but try to pick up for mana - if (shouldStay) - { // Can't pick up wrong-class weapons in coop netplay - return false; - } - checkAssembled = false; - gaveMana = toucher->GiveAmmo (RUNTIME_CLASS(AMana1), 20) + - toucher->GiveAmmo (RUNTIME_CLASS(AMana2), 20); - if (!gaveMana) - { // Didn't need the mana, so don't pick it up - return false; - } - } - else if (shouldStay) - { // Cooperative net-game - if (toucher->player->pieces & PieceValue) - { // Already has the piece - return false; - } - toucher->GiveAmmo (RUNTIME_CLASS(AMana1), 20); - toucher->GiveAmmo (RUNTIME_CLASS(AMana2), 20); - } - else - { // Deathmatch or singleplayer game - gaveMana = toucher->GiveAmmo (RUNTIME_CLASS(AMana1), 20) + - toucher->GiveAmmo (RUNTIME_CLASS(AMana2), 20); - if (toucher->player->pieces & PieceValue) - { // Already has the piece, check if mana needed - if (!gaveMana) - { // Didn't need the mana, so don't pick it up - return false; - } - checkAssembled = false; - } - } - - // Check if fourth weapon assembled - if (checkAssembled) - { - toucher->player->pieces |= PieceValue; - for (int i = 0; i < 9; i += 3) - { - int mask = (WPIECE1|WPIECE2|WPIECE3) << i; - - if (PieceValue & mask) - { - if (toucher->CheckLocalView (consoleplayer)) - { - StatusBar->SetInteger (0, i); - } - if ((toucher->player->pieces & mask) == mask) - { - gaveWeapon = (FourthWeaponClass != NULL); - } - break; - } - } - } - - if (gaveWeapon) - { - TempFourthWeapon = static_cast(Spawn (FourthWeaponClass, x, y, z)); - if (TempFourthWeapon != NULL) - { - gaveWeapon = TempFourthWeapon->TryPickup (toucher); - if (!gaveWeapon) - { - TempFourthWeapon->GoAwayAndDie (); - } - } - else - { - gaveWeapon = false; - } - } - if (gaveWeapon || gaveMana || checkAssembled) - { - GoAwayAndDie (); - } - return gaveWeapon || gaveMana || checkAssembled; -} - -bool AFourthWeaponPiece::ShouldStay () -{ - return PrivateShouldStay (); -} - -bool AFourthWeaponPiece::PrivateShouldStay () -{ +//========================================================================== +// +// TryPickupWeaponPiece +// +//========================================================================== + +bool AFourthWeaponPiece::TryPickup (AActor *toucher) +{ + bool shouldStay; + bool checkAssembled; + bool gaveWeapon; + int gaveMana; + const PClass *mana1 = PClass::FindClass(NAME_Mana1); + const PClass *mana2 = PClass::FindClass(NAME_Mana2); + + checkAssembled = true; + gaveWeapon = false; + gaveMana = 0; + shouldStay = PrivateShouldStay (); + if (!MatchPlayerClass (toucher)) + { // Wrong class, but try to pick up for mana + if (shouldStay) + { // Can't pick up wrong-class weapons in coop netplay + return false; + } + checkAssembled = false; + gaveMana = toucher->GiveAmmo (mana1, 20) + + toucher->GiveAmmo (mana2, 20); + if (!gaveMana) + { // Didn't need the mana, so don't pick it up + return false; + } + } + else if (shouldStay) + { // Cooperative net-game + if (toucher->player->pieces & PieceValue) + { // Already has the piece + return false; + } + toucher->GiveAmmo (mana1, 20); + toucher->GiveAmmo (mana2, 20); + } + else + { // Deathmatch or singleplayer game + gaveMana = toucher->GiveAmmo (mana1, 20) + + toucher->GiveAmmo (mana2, 20); + if (toucher->player->pieces & PieceValue) + { // Already has the piece, check if mana needed + if (!gaveMana) + { // Didn't need the mana, so don't pick it up + return false; + } + checkAssembled = false; + } + } + + // Check if fourth weapon assembled + if (checkAssembled) + { + toucher->player->pieces |= PieceValue; + for (int i = 0; i < 9; i += 3) + { + int mask = (WPIECE1|WPIECE2|WPIECE3) << i; + + if (PieceValue & mask) + { + if (toucher->CheckLocalView (consoleplayer)) + { + StatusBar->SetInteger (0, i); + } + if ((toucher->player->pieces & mask) == mask) + { + gaveWeapon = (FourthWeaponClass != NULL); + } + break; + } + } + } + + if (gaveWeapon) + { + TempFourthWeapon = static_cast(Spawn (FourthWeaponClass, x, y, z)); + if (TempFourthWeapon != NULL) + { + gaveWeapon = TempFourthWeapon->TryPickup (toucher); + if (!gaveWeapon) + { + TempFourthWeapon->GoAwayAndDie (); + } + } + else + { + gaveWeapon = false; + } + } + if (gaveWeapon || gaveMana || checkAssembled) + { + GoAwayAndDie (); + } + return gaveWeapon || gaveMana || checkAssembled; +} + +bool AFourthWeaponPiece::ShouldStay () +{ + return PrivateShouldStay (); +} + +bool AFourthWeaponPiece::PrivateShouldStay () +{ // We want a weapon piece to behave like a weapon, so follow the exact // same logic as weapons when deciding whether or not to stay. if (((multiplayer && diff --git a/src/g_hexen/hexen_sbar.cpp b/src/g_hexen/hexen_sbar.cpp index 944be31fd9..accd54511b 100644 --- a/src/g_hexen/hexen_sbar.cpp +++ b/src/g_hexen/hexen_sbar.cpp @@ -228,7 +228,7 @@ public: { HealthMarker += clamp ((curHealth - HealthMarker) >> 2, 1, 6); } - + if (ArtifactFlash > 0) { if (--ArtifactFlash == 0) @@ -359,8 +359,8 @@ private: HealthRefresh = screen->GetPageCount (); } if (HealthRefresh) - { - int lifeClass = LifeBarClass; + { + int lifeClass = LifeBarClass; HealthRefresh--; healthPos = clamp (HealthMarker, 0, 100); @@ -442,65 +442,67 @@ private: DrINumber (temp, 40, 14, temp >= 25 ? imgINumbers : NUM_BASESB_IMAGES); } } - - // Mana - AAmmo *ammo1, *ammo2; - int ammocount1, ammocount2; - int drawbar; - - GetCurrentAmmo (ammo1, ammo2, ammocount1, ammocount2); + + // Mana + AAmmo *ammo1, *ammo2; + int ammocount1, ammocount2; + int drawbar; + + GetCurrentAmmo (ammo1, ammo2, ammocount1, ammocount2); if (ammo1==ammo2) { // Don't show the same ammo twice. ammo2=NULL; } - - // If the weapon uses some ammo that is not mana, do not draw - // the mana bars; draw the specific used ammo instead. - - drawbar = !((ammo1 != NULL && ammo1->GetClass() != RUNTIME_CLASS(AMana1) && ammo1->GetClass() != RUNTIME_CLASS(AMana2)) || - (ammo2 != NULL && ammo2->GetClass() != RUNTIME_CLASS(AMana1) && ammo2->GetClass() != RUNTIME_CLASS(AMana2))); - - if (drawbar != olddrawbars) - { - AmmoRefresh = screen->GetPageCount (); - olddrawbars = drawbar; - oldmana1 = -1; - oldmana2 = -1; - } - if (drawbar && oldammo2 != ammo2) - { - AmmoRefresh = screen->GetPageCount (); - } - if (drawbar) - { - DrawManaBars (ammo1, ammo2); - } - else - { - DrawMainAltAmmo (ammo1, ammo2, ammocount1, ammocount2); - } - - // Armor - temp = GetArmorPercent (NULL); - if (oldarmor != temp) - { - oldarmor = temp; - ArmorRefresh = screen->GetPageCount (); - } - if (ArmorRefresh) - { - ArmorRefresh--; - DrawImage (Images[imgARMCLEAR], 255, 16); - DrINumber (temp / (5*FRACUNIT), 250, 14); - } - - // Weapon Pieces - if (oldpieces != CPlayer->pieces) - { - DrawWeaponPieces(); - oldpieces = CPlayer->pieces; - } + + // If the weapon uses some ammo that is not mana, do not draw + // the mana bars; draw the specific used ammo instead. + const PClass *mana1 = PClass::FindClass(NAME_Mana1); + const PClass *mana2 = PClass::FindClass(NAME_Mana2); + + drawbar = !((ammo1 != NULL && ammo1->GetClass() != mana1 && ammo1->GetClass() != mana2) || + (ammo2 != NULL && ammo2->GetClass() != mana1 && ammo2->GetClass() != mana2)); + + if (drawbar != olddrawbars) + { + AmmoRefresh = screen->GetPageCount (); + olddrawbars = drawbar; + oldmana1 = -1; + oldmana2 = -1; + } + if (drawbar && oldammo2 != ammo2) + { + AmmoRefresh = screen->GetPageCount (); + } + if (drawbar) + { + DrawManaBars (ammo1, ammo2, mana1, mana2); + } + else + { + DrawMainAltAmmo (ammo1, ammo2, ammocount1, ammocount2); + } + + // Armor + temp = GetArmorPercent (NULL); + if (oldarmor != temp) + { + oldarmor = temp; + ArmorRefresh = screen->GetPageCount (); + } + if (ArmorRefresh) + { + ArmorRefresh--; + DrawImage (Images[imgARMCLEAR], 255, 16); + DrINumber (temp / (5*FRACUNIT), 250, 14); + } + + // Weapon Pieces + if (oldpieces != CPlayer->pieces) + { + DrawWeaponPieces(); + oldpieces = CPlayer->pieces; + } } //--------------------------------------------------------------------------- @@ -512,49 +514,49 @@ private: //--------------------------------------------------------------------------- void DrawMainAltAmmo (AAmmo *ammo1, AAmmo *ammo2, int ammocount1, int ammocount2) - { - if (ammo1 != oldammo1 || ammocount1 != oldammocount1) - { - AmmoRefresh = screen->GetPageCount (); - oldammo1 = ammo1; - oldammocount1 = ammocount1; - } - if (ammo2 != oldammo2 || ammocount2 != oldammocount2) - { - AmmoRefresh = screen->GetPageCount (); - oldammo2 = ammo2; - oldammocount2 = ammocount2; - } - - if (AmmoRefresh) - { - AmmoRefresh--; - DrawImage (Images[imgAMMOBACK], 77, 2); - if (ammo2 != NULL) - { // Draw both ammos - AmmoRefresh--; - screen->DrawTexture (TexMan[ammo1->Icon], 89+ST_X, 10+ST_Y, - DTA_CenterOffset, true, - DTA_320x200, true, - TAG_DONE); - DrSmallNumber (ammo1->Amount, 86, 20); - - screen->DrawTexture (TexMan[ammo2->Icon], 113+ST_X, 10+ST_Y, - DTA_CenterOffset, true, - DTA_320x200, true, - TAG_DONE); - DrSmallNumber (ammo2->Amount, 110, 20); - } - else - { // Draw one ammo - screen->DrawTexture (TexMan[ammo1->Icon], 100+ST_X, 10+ST_Y, - DTA_CenterOffset, true, - DTA_320x200, true, - TAG_DONE); - DrSmallNumber (ammo1->Amount, 97, 20); - } - } - } + { + if (ammo1 != oldammo1 || ammocount1 != oldammocount1) + { + AmmoRefresh = screen->GetPageCount (); + oldammo1 = ammo1; + oldammocount1 = ammocount1; + } + if (ammo2 != oldammo2 || ammocount2 != oldammocount2) + { + AmmoRefresh = screen->GetPageCount (); + oldammo2 = ammo2; + oldammocount2 = ammocount2; + } + + if (AmmoRefresh) + { + AmmoRefresh--; + DrawImage (Images[imgAMMOBACK], 77, 2); + if (ammo2 != NULL) + { // Draw both ammos + AmmoRefresh--; + screen->DrawTexture (TexMan[ammo1->Icon], 89+ST_X, 10+ST_Y, + DTA_CenterOffset, true, + DTA_320x200, true, + TAG_DONE); + DrSmallNumber (ammo1->Amount, 86, 20); + + screen->DrawTexture (TexMan[ammo2->Icon], 113+ST_X, 10+ST_Y, + DTA_CenterOffset, true, + DTA_320x200, true, + TAG_DONE); + DrSmallNumber (ammo2->Amount, 110, 20); + } + else + { // Draw one ammo + screen->DrawTexture (TexMan[ammo1->Icon], 100+ST_X, 10+ST_Y, + DTA_CenterOffset, true, + DTA_320x200, true, + TAG_DONE); + DrSmallNumber (ammo1->Amount, 97, 20); + } + } + } //--------------------------------------------------------------------------- // @@ -564,134 +566,134 @@ private: // //--------------------------------------------------------------------------- - void DrawManaBars (AAmmo *ammo1, AAmmo *ammo2) - { + void DrawManaBars (AAmmo *ammo1, AAmmo *ammo2, const PClass *manatype1, const PClass *manatype2) + { AAmmo *mana1 = NULL, *mana2 = NULL; int usemana1 = false, usemana2 = false; int manacount1, manacount2; - int manaPatch1, manaPatch2; - int manaVialPatch1, manaVialPatch2; - - manaPatch1 = 0; - manaPatch2 = 0; - manaVialPatch1 = 0; - manaVialPatch2 = 0; - - if (AmmoRefresh) - { - Mana1Refresh = MAX(AmmoRefresh, Mana1Refresh); - Mana2Refresh = MAX(AmmoRefresh, Mana2Refresh); - AmmoRefresh--; - screen->DrawTexture (Images[imgSTATBAR], ST_X+38, ST_Y, - DTA_WindowLeft, 39, - DTA_WindowRight, 87, - DTA_320x200, Scaled, - TAG_DONE); - } - - // Locate Mana1 and Mana2 in the inventory, and decide which ones are used. - if (ammo1 == NULL) - { - } - else if (ammo1->GetClass() == RUNTIME_CLASS(AMana1)) - { - mana1 = ammo1; - usemana1 = true; - } - else if (ammo1->GetClass() == RUNTIME_CLASS(AMana2)) - { - mana2 = ammo1; - usemana2 = true; - } - if (ammo2 == NULL) - { - } - else if (ammo2->GetClass() == RUNTIME_CLASS(AMana1)) - { - mana1 = ammo2; - usemana1 = true; - } - else if (ammo2->GetClass() == RUNTIME_CLASS(AMana2)) - { - mana2 = ammo2; - usemana2 = true; - } - if (mana1 == NULL) - { - mana1 = CPlayer->mo->FindInventory (); - } - if (mana2 == NULL) - { - mana2 = CPlayer->mo->FindInventory (); - } - manacount1 = mana1 != NULL ? mana1->Amount : 0; - manacount2 = mana2 != NULL ? mana2->Amount : 0; - - // Has Mana1 changed since last time? - if (oldmana1 != manacount1 || oldusemana1 != usemana1) - { - oldmana1 = manacount1; - oldusemana1 = usemana1; - Mana1Refresh = screen->GetPageCount (); - } - - // Has Mana2 changed since last time? - if (oldmana2 != manacount2 || oldusemana2 != usemana2) - { - oldmana2 = manacount2; - oldusemana2 = usemana2; - Mana2Refresh = screen->GetPageCount (); - } - // Decide what to draw for vial 1 - if (Mana1Refresh) - { - Mana1Refresh--; - DrawImage (Images[imgMANACLEAR], 77, 16); - DrSmallNumber (manacount1, 79, 19); - if (!usemana1) - { // Draw Dim Mana icon - manaPatch1 = imgMANADIM1; - manaVialPatch1 = imgMANAVIALDIM1; - } - else - { - manaPatch1 = imgMANABRIGHT1; - manaVialPatch1 = manacount1 ? imgMANAVIAL1 : imgMANAVIALDIM1; - } - } - // Decide what to draw for vial 2 - if (Mana2Refresh) - { - Mana2Refresh--; - DrawImage (Images[imgMANACLEAR], 109, 16); - DrSmallNumber (manacount2, 111, 19); - if (!usemana2) - { // Draw Dim Mana icon - manaPatch2 = imgMANADIM2; - manaVialPatch2 = imgMANAVIALDIM2; - } - else - { - manaPatch2 = imgMANABRIGHT2; - manaVialPatch2 = manacount2 ? imgMANAVIAL2 : imgMANAVIALDIM2; - } - } - // Update mana graphics - if (manaPatch1 || manaPatch2 || manaVialPatch1) - { - if (manaVialPatch1) - { - DrawImage (Images[manaPatch1], 77, 2); - ManaVial1Pic.SetVial (Images[manaVialPatch1], CPlayer->mo, RUNTIME_CLASS(AMana1)); - DrawImage (&ManaVial1Pic, 94, 2); - } - if (manaVialPatch2) - { - DrawImage (Images[manaPatch2], 110, 2); - ManaVial2Pic.SetVial (Images[manaVialPatch2], CPlayer->mo, RUNTIME_CLASS(AMana2)); - DrawImage (&ManaVial2Pic, 102, 2); - } - } + int manaPatch1, manaPatch2; + int manaVialPatch1, manaVialPatch2; + + manaPatch1 = 0; + manaPatch2 = 0; + manaVialPatch1 = 0; + manaVialPatch2 = 0; + + if (AmmoRefresh) + { + Mana1Refresh = MAX(AmmoRefresh, Mana1Refresh); + Mana2Refresh = MAX(AmmoRefresh, Mana2Refresh); + AmmoRefresh--; + screen->DrawTexture (Images[imgSTATBAR], ST_X+38, ST_Y, + DTA_WindowLeft, 39, + DTA_WindowRight, 87, + DTA_320x200, Scaled, + TAG_DONE); + } + + // Locate Mana1 and Mana2 in the inventory, and decide which ones are used. + if (ammo1 == NULL) + { + } + else if (ammo1->GetClass() == manatype1) + { + mana1 = ammo1; + usemana1 = true; + } + else if (ammo1->GetClass() == manatype2) + { + mana2 = ammo1; + usemana2 = true; + } + if (ammo2 == NULL) + { + } + else if (ammo2->GetClass() == manatype1) + { + mana1 = ammo2; + usemana1 = true; + } + else if (ammo2->GetClass() == manatype2) + { + mana2 = ammo2; + usemana2 = true; + } + if (mana1 == NULL) + { + mana1 = static_cast(CPlayer->mo->FindInventory(manatype1)); + } + if (mana2 == NULL) + { + mana2 = static_cast(CPlayer->mo->FindInventory(manatype2)); + } + manacount1 = mana1 != NULL ? mana1->Amount : 0; + manacount2 = mana2 != NULL ? mana2->Amount : 0; + + // Has Mana1 changed since last time? + if (oldmana1 != manacount1 || oldusemana1 != usemana1) + { + oldmana1 = manacount1; + oldusemana1 = usemana1; + Mana1Refresh = screen->GetPageCount (); + } + + // Has Mana2 changed since last time? + if (oldmana2 != manacount2 || oldusemana2 != usemana2) + { + oldmana2 = manacount2; + oldusemana2 = usemana2; + Mana2Refresh = screen->GetPageCount (); + } + // Decide what to draw for vial 1 + if (Mana1Refresh) + { + Mana1Refresh--; + DrawImage (Images[imgMANACLEAR], 77, 16); + DrSmallNumber (manacount1, 79, 19); + if (!usemana1) + { // Draw Dim Mana icon + manaPatch1 = imgMANADIM1; + manaVialPatch1 = imgMANAVIALDIM1; + } + else + { + manaPatch1 = imgMANABRIGHT1; + manaVialPatch1 = manacount1 ? imgMANAVIAL1 : imgMANAVIALDIM1; + } + } + // Decide what to draw for vial 2 + if (Mana2Refresh) + { + Mana2Refresh--; + DrawImage (Images[imgMANACLEAR], 109, 16); + DrSmallNumber (manacount2, 111, 19); + if (!usemana2) + { // Draw Dim Mana icon + manaPatch2 = imgMANADIM2; + manaVialPatch2 = imgMANAVIALDIM2; + } + else + { + manaPatch2 = imgMANABRIGHT2; + manaVialPatch2 = manacount2 ? imgMANAVIAL2 : imgMANAVIALDIM2; + } + } + // Update mana graphics + if (manaPatch1 || manaPatch2 || manaVialPatch1) + { + if (manaVialPatch1) + { + DrawImage (Images[manaPatch1], 77, 2); + ManaVial1Pic.SetVial (Images[manaVialPatch1], CPlayer->mo, manatype1); + DrawImage (&ManaVial1Pic, 94, 2); + } + if (manaVialPatch2) + { + DrawImage (Images[manaPatch2], 110, 2); + ManaVial2Pic.SetVial (Images[manaVialPatch2], CPlayer->mo, manatype2); + DrawImage (&ManaVial2Pic, 102, 2); + } + } } //--------------------------------------------------------------------------- @@ -736,138 +738,138 @@ private: } } -//========================================================================== -// -// DrawKeyBar -// -//========================================================================== - - void DrawKeyBar () - { - AInventory *item; - AHexenArmor *armor; - AKey *keys[5]; - int i; - int temp; - bool different; - - keys[0] = keys[1] = keys[2] = keys[3] = keys[4] = NULL; - for (item = CPlayer->mo->Inventory, i = 0; - item != NULL && i < 5; - item = item->Inventory) - { - if (item->Icon > 0 && - item->IsKindOf (RUNTIME_CLASS(AKey)) && - item->GetClass() != RUNTIME_CLASS(AKey)) - { - keys[i++] = static_cast(item); - } - } - different = false; - for (i = 0; i < 5; ++i) - { - if (keys[i] != oldkeys[i]) - { - oldkeys[i] = keys[i]; - different = true; - } - } - if (different) - { - KeysRefresh = screen->GetPageCount (); - } - if (KeysRefresh) - { - KeysRefresh--; - for (i = 0; i < 5 && keys[i] != NULL; i++) - { - DrawImage (TexMan[keys[i]->Icon], 46 + i*20, 2); - } - } - - temp = GetArmorPercent (&armor); - if (oldarmor != temp && armor != NULL) - { - for (i = 0; i < 4; i++) - { - if (armor->Slots[i] > 0 && armor->SlotsIncrement[i] > 0) - { - DrawFadedImage (Images[imgARMSLOT1+i], 150+31*i, 2, - MIN (OPAQUE, Scale (armor->Slots[i], OPAQUE, - armor->SlotsIncrement[i]))); - } - } - oldarmor = temp; - } - } - -//========================================================================== -// -// GetArmorPercent -// -//========================================================================== - - fixed_t GetArmorPercent (AHexenArmor **armorp) - { - AHexenArmor *harmor = CPlayer->mo->FindInventory(); - fixed_t amount = 0; - if (harmor != NULL) - { - amount = harmor->Slots[0] - + harmor->Slots[1] - + harmor->Slots[2] - + harmor->Slots[3] - + harmor->Slots[4]; - } - // [RH] Count basic armor too. - ABasicArmor *barmor = CPlayer->mo->FindInventory(); - if (barmor != NULL) - { - amount += barmor->SavePercent; - } - if (armorp != NULL) - { - *armorp = harmor; - } - return amount; - } - -//========================================================================== -// -// DrawWeaponPieces -// -//========================================================================== - - void DrawWeaponPieces () - { - static int PieceX[3][3] = - { - { 190, 225, 234 }, - { 190, 212, 225 }, - { 190, 205, 224 }, - }; - int pieces = (CPlayer->pieces >> FourthWeaponShift) & 7; - int weapClass = FourthWeaponClass; - - if (pieces == 7) - { - DrawImage (ClassImages[weapClass][imgWEAPONFULL], 190, 0); - return; - } - DrawImage (ClassImages[weapClass][imgWEAPONSLOT], 190, 0); - if (pieces & WPIECE1) - { - DrawImage (ClassImages[weapClass][imgPIECE1], PieceX[weapClass][0], 0); - } - if (pieces & WPIECE2) - { - DrawImage (ClassImages[weapClass][imgPIECE2], PieceX[weapClass][1], 0); - } - if (pieces & WPIECE3) - { - DrawImage (ClassImages[weapClass][imgPIECE3], PieceX[weapClass][2], 0); - } - } +//========================================================================== +// +// DrawKeyBar +// +//========================================================================== + + void DrawKeyBar () + { + AInventory *item; + AHexenArmor *armor; + AKey *keys[5]; + int i; + int temp; + bool different; + + keys[0] = keys[1] = keys[2] = keys[3] = keys[4] = NULL; + for (item = CPlayer->mo->Inventory, i = 0; + item != NULL && i < 5; + item = item->Inventory) + { + if (item->Icon > 0 && + item->IsKindOf (RUNTIME_CLASS(AKey)) && + item->GetClass() != RUNTIME_CLASS(AKey)) + { + keys[i++] = static_cast(item); + } + } + different = false; + for (i = 0; i < 5; ++i) + { + if (keys[i] != oldkeys[i]) + { + oldkeys[i] = keys[i]; + different = true; + } + } + if (different) + { + KeysRefresh = screen->GetPageCount (); + } + if (KeysRefresh) + { + KeysRefresh--; + for (i = 0; i < 5 && keys[i] != NULL; i++) + { + DrawImage (TexMan[keys[i]->Icon], 46 + i*20, 2); + } + } + + temp = GetArmorPercent (&armor); + if (oldarmor != temp && armor != NULL) + { + for (i = 0; i < 4; i++) + { + if (armor->Slots[i] > 0 && armor->SlotsIncrement[i] > 0) + { + DrawFadedImage (Images[imgARMSLOT1+i], 150+31*i, 2, + MIN (OPAQUE, Scale (armor->Slots[i], OPAQUE, + armor->SlotsIncrement[i]))); + } + } + oldarmor = temp; + } + } + +//========================================================================== +// +// GetArmorPercent +// +//========================================================================== + + fixed_t GetArmorPercent (AHexenArmor **armorp) + { + AHexenArmor *harmor = CPlayer->mo->FindInventory(); + fixed_t amount = 0; + if (harmor != NULL) + { + amount = harmor->Slots[0] + + harmor->Slots[1] + + harmor->Slots[2] + + harmor->Slots[3] + + harmor->Slots[4]; + } + // [RH] Count basic armor too. + ABasicArmor *barmor = CPlayer->mo->FindInventory(); + if (barmor != NULL) + { + amount += barmor->SavePercent; + } + if (armorp != NULL) + { + *armorp = harmor; + } + return amount; + } + +//========================================================================== +// +// DrawWeaponPieces +// +//========================================================================== + + void DrawWeaponPieces () + { + static int PieceX[3][3] = + { + { 190, 225, 234 }, + { 190, 212, 225 }, + { 190, 205, 224 }, + }; + int pieces = (CPlayer->pieces >> FourthWeaponShift) & 7; + int weapClass = FourthWeaponClass; + + if (pieces == 7) + { + DrawImage (ClassImages[weapClass][imgWEAPONFULL], 190, 0); + return; + } + DrawImage (ClassImages[weapClass][imgWEAPONSLOT], 190, 0); + if (pieces & WPIECE1) + { + DrawImage (ClassImages[weapClass][imgPIECE1], PieceX[weapClass][0], 0); + } + if (pieces & WPIECE2) + { + DrawImage (ClassImages[weapClass][imgPIECE2], PieceX[weapClass][1], 0); + } + if (pieces & WPIECE3) + { + DrawImage (ClassImages[weapClass][imgPIECE3], PieceX[weapClass][2], 0); + } + } //--------------------------------------------------------------------------- // @@ -968,17 +970,19 @@ private: } // Mana - AAmmo *ammo1, *ammo2; - int ammocount1, ammocount2; - bool drawmana; - - GetCurrentAmmo (ammo1, ammo2, ammocount1, ammocount2); - - // If the weapon uses some ammo that is not mana, do not draw - // the mana blocks; draw the specific used ammo instead. - - drawmana = !((ammo1 != NULL && ammo1->GetClass() != RUNTIME_CLASS(AMana1) && ammo1->GetClass() != RUNTIME_CLASS(AMana2)) || - (ammo2 != NULL && ammo2->GetClass() != RUNTIME_CLASS(AMana1) && ammo2->GetClass() != RUNTIME_CLASS(AMana2))); + AAmmo *ammo1, *ammo2; + int ammocount1, ammocount2; + bool drawmana; + + GetCurrentAmmo (ammo1, ammo2, ammocount1, ammocount2); + + // If the weapon uses some ammo that is not mana, do not draw + // the mana blocks; draw the specific used ammo instead. + const PClass *mana1 = PClass::FindClass(NAME_Mana1); + const PClass *mana2 = PClass::FindClass(NAME_Mana2); + + drawmana = !((ammo1 != NULL && ammo1->GetClass() != mana1 && ammo1->GetClass() != mana2) || + (ammo2 != NULL && ammo2->GetClass() != mana1 && ammo2->GetClass() != mana2)); if (drawmana) { @@ -989,36 +993,36 @@ private: { if (CPlayer->ReadyWeapon->Ammo1 != NULL) { - if (CPlayer->ReadyWeapon->Ammo1->GetClass() == RUNTIME_CLASS(AMana1)) + if (CPlayer->ReadyWeapon->Ammo1->GetClass() == mana1) { ammo |= 1; } - else if (CPlayer->ReadyWeapon->Ammo1->GetClass() == RUNTIME_CLASS(AMana2)) + else if (CPlayer->ReadyWeapon->Ammo1->GetClass() == mana2) { ammo |= 2; } } if (CPlayer->ReadyWeapon->Ammo2 != NULL) { - if (CPlayer->ReadyWeapon->Ammo2->GetClass() == RUNTIME_CLASS(AMana1)) + if (CPlayer->ReadyWeapon->Ammo2->GetClass() == mana1) { ammo |= 1; } - else if (CPlayer->ReadyWeapon->Ammo2->GetClass() == RUNTIME_CLASS(AMana2)) + else if (CPlayer->ReadyWeapon->Ammo2->GetClass() == mana2) { ammo |= 2; } } } - item = CPlayer->mo->FindInventory (RUNTIME_CLASS(AMana1)); + item = CPlayer->mo->FindInventory (mana1); i = item != NULL ? item->Amount : 0; manaImage = ((ammo & 1) && i > 0) ? imgMANABRIGHT1 : imgMANADIM1; screen->DrawTexture (Images[manaImage], -17, -30, DTA_HUDRules, HUD_Normal, TAG_DONE); DrINumberOuter (i, -47, -30); - item = CPlayer->mo->FindInventory (RUNTIME_CLASS(AMana2)); + item = CPlayer->mo->FindInventory (mana2); i = item != NULL ? item->Amount : 0; manaImage = ((ammo & 2) && i > 0) ? imgMANABRIGHT2 : imgMANADIM2; screen->DrawTexture (Images[manaImage], -17, -15, diff --git a/src/g_raven/a_artiegg.cpp b/src/g_raven/a_artiegg.cpp index e39c3d0eb4..a0f6df3a2b 100644 --- a/src/g_raven/a_artiegg.cpp +++ b/src/g_raven/a_artiegg.cpp @@ -345,7 +345,6 @@ class AArtiEgg : public AInventory DECLARE_ACTOR (AArtiEgg, AInventory) public: bool Use (bool pickup); - const char *PickupMessage (); }; FState AArtiEgg::States[] = @@ -364,6 +363,7 @@ IMPLEMENT_ACTOR (AArtiEgg, Heretic, 30, 14) PROP_Inventory_FlagsSet (IF_INVBAR|IF_PICKUPFLASH|IF_FANCYPICKUPSOUND) PROP_Inventory_Icon ("ARTIEGGC") PROP_Inventory_PickupSound ("misc/p_pkup") + PROP_Inventory_PickupMessage("$TXT_ARTIEGG") END_DEFAULTS bool AArtiEgg::Use (bool pickup) @@ -376,11 +376,6 @@ bool AArtiEgg::Use (bool pickup) return true; } -const char *AArtiEgg::PickupMessage () -{ - return GStrings("TXT_ARTIEGG"); -} - // Pork missile -------------------------------------------------------------- class APorkFX : public AActor @@ -438,7 +433,6 @@ class AArtiPork : public AInventory DECLARE_ACTOR (AArtiPork, AInventory) public: bool Use (bool pickup); - const char *PickupMessage (); }; FState AArtiPork::States[] = @@ -461,6 +455,7 @@ IMPLEMENT_ACTOR (AArtiPork, Hexen, 30, 14) PROP_Inventory_FlagsSet (IF_INVBAR|IF_PICKUPFLASH|IF_FANCYPICKUPSOUND) PROP_Inventory_Icon ("ARTIPORK") PROP_Inventory_PickupSound ("misc/p_pkup") + PROP_Inventory_PickupMessage("$TXT_ARTIEGG2") END_DEFAULTS bool AArtiPork::Use (bool pickup) @@ -473,7 +468,3 @@ bool AArtiPork::Use (bool pickup) return true; } -const char *AArtiPork::PickupMessage () -{ - return GStrings("TXT_ARTIEGG2"); -} diff --git a/src/g_raven/a_artitele.cpp b/src/g_raven/a_artitele.cpp index 6e688f8a6d..410bb62d71 100644 --- a/src/g_raven/a_artitele.cpp +++ b/src/g_raven/a_artitele.cpp @@ -16,7 +16,6 @@ class AArtiTeleport : public AInventory DECLARE_ACTOR (AArtiTeleport, AInventory) public: bool Use (bool pickup); - const char *PickupMessage (); }; FState AArtiTeleport::States[] = @@ -35,6 +34,7 @@ IMPLEMENT_ACTOR (AArtiTeleport, Raven, 36, 18) PROP_Inventory_FlagsSet (IF_INVBAR|IF_PICKUPFLASH|IF_FANCYPICKUPSOUND) PROP_Inventory_Icon ("ARTIATLP") PROP_Inventory_PickupSound ("misc/p_pkup") + PROP_Inventory_PickupMessage("$TXT_ARTITELEPORT") END_DEFAULTS bool AArtiTeleport::Use (bool pickup) @@ -69,11 +69,6 @@ bool AArtiTeleport::Use (bool pickup) return true; } -const char *AArtiTeleport::PickupMessage () -{ - return GStrings("TXT_ARTITELEPORT"); -} - //--------------------------------------------------------------------------- // // FUNC P_AutoUseChaosDevice diff --git a/src/g_shared/a_pickups.cpp b/src/g_shared/a_pickups.cpp index 9046f43db5..6616daa04a 100644 --- a/src/g_shared/a_pickups.cpp +++ b/src/g_shared/a_pickups.cpp @@ -854,11 +854,7 @@ void AInventory::Touch (AActor *toucher) if (!(ItemFlags & IF_QUIET)) { - const char *message = GetClass()->Meta.GetMetaString (AIMETA_PickupMessage); - if (message == NULL) - { - message = PickupMessage (); - } + const char * message = PickupMessage (); if (toucher->CheckLocalView (consoleplayer) && (StaticLastMessageTic != gametic || StaticLastMessage != message)) @@ -930,7 +926,9 @@ void AInventory::DoPickupSpecial (AActor *toucher) const char *AInventory::PickupMessage () { - return "You got a pickup"; + const char *message = GetClass()->Meta.GetMetaString (AIMETA_PickupMessage); + + return message != NULL? message : "You got a pickup"; } //=========================================================================== @@ -1753,6 +1751,28 @@ IMPLEMENT_STATELESS_ACTOR (AHealth, Any, -1, 0) PROP_Inventory_PickupSound ("misc/health_pkup") END_DEFAULTS + +//=========================================================================== +// +// AHealth :: TryPickup +// +//=========================================================================== +const char *AHealth::PickupMessage () +{ + int threshold = GetClass()->Meta.GetMetaInt(AIMETA_LowHealth, 0); + + if (PrevHealth < threshold) + { + const char *message = GetClass()->Meta.GetMetaString (AIMETA_LowHealthMessage); + + if (message != NULL) + { + return message; + } + } + return Super::PickupMessage(); +} + //=========================================================================== // // AHealth :: TryPickup @@ -1766,6 +1786,7 @@ bool AHealth::TryPickup (AActor *other) if (player != NULL) { + PrevHealth = other->player->health; if (max == 0) { max = ((i_compatflags&COMPATF_DEHHEALTH)? 100 : deh.MaxHealth) + player->stamina; @@ -1794,6 +1815,7 @@ bool AHealth::TryPickup (AActor *other) } else { + PrevHealth = INT_MAX; if (P_GiveBody(other, Amount) || ItemFlags & IF_ALWAYSPICKUP) { GoAwayAndDie (); @@ -2020,15 +2042,10 @@ void ABackpack::DetachFromOwner () //=========================================================================== // -// ABackpack :: PickupMessage +// ABackpack // //=========================================================================== -const char *ABackpack::PickupMessage () -{ - return GStrings("GOTBACKPACK"); -} - FState ABackpack::States[] = { S_NORMAL (BPAK, 'A', -1, NULL , NULL) @@ -2038,6 +2055,7 @@ IMPLEMENT_ACTOR (ABackpack, Doom, 8, 144) PROP_HeightFixed (26) PROP_Flags (MF_SPECIAL) PROP_SpawnState (0) + PROP_Inventory_PickupMessage("$GOTBACKPACK") END_DEFAULTS IMPLEMENT_ABSTRACT_ACTOR (AMapRevealer) @@ -2073,15 +2091,6 @@ IMPLEMENT_ACTOR (ACommunicator, Strife, 206, 0) PROP_Inventory_Icon ("I_COMM") PROP_Tag ("Communicator") PROP_Inventory_PickupSound ("misc/p_pkup") + PROP_Inventory_PickupMessage("$TXT_COMMUNICATOR") END_DEFAULTS -//=========================================================================== -// -// ACommunicator :: PickupMessage -// -//=========================================================================== - -const char *ACommunicator::PickupMessage () -{ - return "You picked up the Communicator"; -} diff --git a/src/g_shared/a_pickups.h b/src/g_shared/a_pickups.h index 042c4a855f..4fabea402a 100644 --- a/src/g_shared/a_pickups.h +++ b/src/g_shared/a_pickups.h @@ -74,6 +74,8 @@ enum AIMETA_PickupMessage, // string AIMETA_GiveQuest, // optionally give one of the quest items. AIMETA_DropAmount, // specifies the amount for a dropped ammo item + AIMETA_LowHealth, + AIMETA_LowHealthMessage, }; enum @@ -287,8 +289,11 @@ enum class AHealth : public AInventory { DECLARE_STATELESS_ACTOR (AHealth, AInventory) + + int PrevHealth; public: virtual bool TryPickup (AActor *other); + virtual const char *PickupMessage (); }; // HealthPickup is some item that gives the player health when used. @@ -401,7 +406,6 @@ public: bool HandlePickup (AInventory *item); AInventory *CreateCopy (AActor *other); AInventory *CreateTossable (); - const char *PickupMessage (); void DetachFromOwner (); bool bDepleted; @@ -412,8 +416,6 @@ public: class ACommunicator : public AInventory { DECLARE_ACTOR (ACommunicator, AInventory) -public: - const char *PickupMessage (); }; #endif //__A_PICKUPS_H__ diff --git a/src/g_shared/a_weaponpiece.cpp b/src/g_shared/a_weaponpiece.cpp index c7a3318cf4..2ade057edf 100644 --- a/src/g_shared/a_weaponpiece.cpp +++ b/src/g_shared/a_weaponpiece.cpp @@ -148,8 +148,14 @@ bool AWeaponPiece::PrivateShouldStay () const char *AWeaponPiece::PickupMessage () { - if (FullWeapon) return FullWeapon->PickupMessage(); - return Super::PickupMessage(); + if (FullWeapon) + { + return FullWeapon->PickupMessage(); + } + else + { + return Super::PickupMessage(); + } } //=========================================================================== diff --git a/src/g_strife/a_coin.cpp b/src/g_strife/a_coin.cpp index 37f90106e8..3d58f624c9 100644 --- a/src/g_strife/a_coin.cpp +++ b/src/g_strife/a_coin.cpp @@ -1,5 +1,6 @@ #include "a_pickups.h" #include "a_strifeglobal.h" +#include "gstrings.h" // Coin --------------------------------------------------------------------- @@ -19,19 +20,20 @@ IMPLEMENT_ACTOR (ACoin, Strife, 93, 0) PROP_Inventory_FlagsSet (IF_INVBAR) PROP_Inventory_Icon ("I_COIN") PROP_Tag ("coin") + PROP_Inventory_PickupMessage("$TXT_COIN") END_DEFAULTS const char *ACoin::PickupMessage () { if (Amount == 1) { - return "You picked up the coin."; + return Super::PickupMessage(); } else { static char msg[64]; - sprintf (msg, "You picked up %d gold.", Amount); + sprintf (msg, GStrings("TXT_XGOLD"), Amount); return msg; } } diff --git a/src/g_strife/a_rebels.cpp b/src/g_strife/a_rebels.cpp index a05705c92b..182a876a78 100644 --- a/src/g_strife/a_rebels.cpp +++ b/src/g_strife/a_rebels.cpp @@ -225,7 +225,6 @@ class ATeleporterBeacon : public AInventory DECLARE_ACTOR (ATeleporterBeacon, AInventory) public: bool Use (bool pickup); - const char *PickupMessage (); }; FState ATeleporterBeacon::States[] = @@ -248,13 +247,9 @@ IMPLEMENT_ACTOR (ATeleporterBeacon, Strife, 10, 0) PROP_Inventory_FlagsSet (IF_INVBAR) PROP_Inventory_Icon ("I_BEAC") PROP_Tag ("Teleporter_Beacon") + PROP_Inventory_PickupMessage("$TXT_BEACON") END_DEFAULTS -const char *ATeleporterBeacon::PickupMessage () -{ - return "You picked up the Teleporter Beacon."; -} - bool ATeleporterBeacon::Use (bool pickup) { AInventory *drop; diff --git a/src/g_strife/a_strifeammo.cpp b/src/g_strife/a_strifeammo.cpp deleted file mode 100644 index 74eadc7a00..0000000000 --- a/src/g_strife/a_strifeammo.cpp +++ /dev/null @@ -1,305 +0,0 @@ -#include "a_strifeglobal.h" -#include "p_local.h" -#include "a_strifeweaps.h" - -// HEGrenades: 6 12 -// PhGrenades: 4 8 -// ClipOfBullets ?? 10 -// BoxOfBullets: 50 50 -// MiniMissiles: 4 8 -// CrateOfMissiles: 20 20 -// EnergyPod: 20 40 -// EnergyPack: 100 -// PoisonBolts: 20 -// ElectricBolts: 20 - -// HE-Grenade Rounds -------------------------------------------------------- - -FState AHEGrenadeRounds::States[] = -{ - S_NORMAL (GRN1, 'A', -1, NULL, NULL) -}; - -IMPLEMENT_ACTOR (AHEGrenadeRounds, Strife, 152, 0) - PROP_SpawnState (0) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOORCLIP) - PROP_StrifeType (177) - PROP_StrifeTeaserType (170) - PROP_StrifeTeaserType2 (174) - PROP_Inventory_Amount (6) - PROP_Inventory_MaxAmount (30) - PROP_Ammo_BackpackAmount (6) - PROP_Ammo_BackpackMaxAmount (60) - PROP_Inventory_Icon ("I_GRN1") - PROP_Tag ("HE-Grenade_Rounds") -END_DEFAULTS - -const char *AHEGrenadeRounds::PickupMessage () -{ - return "You picked up the HE-Grenade Rounds."; -} - -// Phosphorus-Grenade Rounds ------------------------------------------------ - -FState APhosphorusGrenadeRounds::States[] = -{ - S_NORMAL (GRN2, 'A', -1, NULL, NULL) -}; - -IMPLEMENT_ACTOR (APhosphorusGrenadeRounds, Strife, 153, 0) - PROP_SpawnState (0) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOORCLIP) - PROP_StrifeType (178) - PROP_StrifeTeaserType (171) - PROP_StrifeTeaserType2 (175) - PROP_Inventory_Amount (4) - PROP_Inventory_MaxAmount (16) - PROP_Ammo_BackpackAmount (4) - PROP_Ammo_BackpackMaxAmount (32) - PROP_Inventory_Icon ("I_GRN2") - PROP_Tag ("Phoshorus-Grenade_Rounds") // "Fire-Grenade_Rounds" in the Teaser -END_DEFAULTS - -const char *APhosphorusGrenadeRounds::PickupMessage () -{ - return "You picked up the Phoshorus-Grenade Rounds."; -} - -// The teaser actually has Gas-Grenade_Rounds defined - -// Clip of Bullets ---------------------------------------------------------- - -FState AClipOfBullets::States[] = -{ - S_NORMAL (BLIT, 'A', -1, NULL, NULL) -}; - -IMPLEMENT_ACTOR (AClipOfBullets, Strife, 2007, 11) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOORCLIP) - PROP_SpawnState (0) - PROP_StrifeType (179) - PROP_StrifeTeaserType (173) - PROP_StrifeTeaserType2 (177) - PROP_Inventory_Amount (10) - PROP_Inventory_MaxAmount (250) - PROP_Ammo_BackpackAmount (10) - PROP_Ammo_BackpackMaxAmount (500) - PROP_Inventory_Icon ("I_BLIT") - PROP_Tag ("clip_of_bullets") // "bullets" in the Teaser -END_DEFAULTS - -const char *AClipOfBullets::PickupMessage () -{ - return "You picked up the clip of bullets."; -} - -// Box of Bullets ----------------------------------------------------------- - -FState ABoxOfBullets::States[] = -{ - S_NORMAL (BBOX, 'A', -1, NULL, NULL) -}; - -IMPLEMENT_ACTOR (ABoxOfBullets, Strife, 2048, 139) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOORCLIP) - PROP_SpawnState (0) - PROP_StrifeType (180) - PROP_StrifeTeaserType (174) - PROP_StrifeTeaserType2 (178) - PROP_Inventory_Amount (50) - PROP_Tag ("ammo") -END_DEFAULTS - -const char *ABoxOfBullets::PickupMessage () -{ - return "You picked up the box of bullets."; -} - -// Mini Missiles ------------------------------------------------------------ - -FState AMiniMissiles::States[] = -{ - S_NORMAL (MSSL, 'A', -1, NULL, NULL) -}; - -IMPLEMENT_ACTOR (AMiniMissiles, Strife, 2010, 140) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOORCLIP) - PROP_SpawnState (0) - PROP_StrifeType (181) - PROP_StrifeTeaserType (175) - PROP_StrifeTeaserType2 (179) - PROP_Inventory_Amount (4) - PROP_Inventory_MaxAmount (100) - PROP_Ammo_BackpackAmount (4) - PROP_Ammo_BackpackMaxAmount (200) - PROP_Inventory_Icon ("I_ROKT") - PROP_Tag ("mini_missiles") //"rocket" in the Teaser -END_DEFAULTS - -const char *AMiniMissiles::PickupMessage () -{ - return "You picked up the mini missiles."; -} - -// Crate of Missiles -------------------------------------------------------- - -FState ACrateOfMissiles::States[] = -{ - S_NORMAL (ROKT, 'A', -1, NULL, NULL) -}; - -IMPLEMENT_ACTOR (ACrateOfMissiles, Strife, 2046, 141) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOORCLIP) - PROP_SpawnState (0) - PROP_StrifeType (182) - PROP_StrifeTeaserType (176) - PROP_StrifeTeaserType2 (180) - PROP_Inventory_Amount (20) - PROP_Tag ("crate_of_missiles") //"box_of_rockets" in the Teaser -END_DEFAULTS - -const char *ACrateOfMissiles::PickupMessage () -{ - return "You picked up the crate of missiles."; -} - -// Energy Pod --------------------------------------------------------------- - -FState AEnergyPod::States[] = -{ - S_NORMAL (BRY1, 'A', 6, NULL, &States[1]), - S_NORMAL (BRY1, 'B', 6, NULL, &States[0]) -}; - -IMPLEMENT_ACTOR (AEnergyPod, Strife, 2047, 75) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOORCLIP) - PROP_SpawnState (0) - PROP_StrifeType (183) - PROP_StrifeTeaserType (177) - PROP_StrifeTeaserType2 (181) - PROP_Inventory_Amount (20) - PROP_Inventory_MaxAmount (400) - PROP_Ammo_BackpackAmount (20) - PROP_Ammo_BackpackMaxAmount (800) - PROP_Ammo_DropAmount (20) - PROP_Inventory_Icon ("I_BRY1") - PROP_Tag ("energy_pod") -END_DEFAULTS - -const char *AEnergyPod::PickupMessage () -{ - return "You picked up the energy pod."; -} - -// Energy pack --------------------------------------------------------------- - -FState AEnergyPack::States[] = -{ - S_NORMAL (CPAC, 'A', 6, NULL, &States[1]), - S_NORMAL (CPAC, 'B', 6, NULL, &States[0]) -}; - -IMPLEMENT_ACTOR (AEnergyPack, Strife, 17, 142) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOORCLIP) - PROP_SpawnState (0) - PROP_StrifeType (184) - PROP_StrifeTeaserType (178) - PROP_StrifeTeaserType2 (182) - PROP_Inventory_Amount (100) - PROP_Tag ("energy_pack") -END_DEFAULTS - -const char *AEnergyPack::PickupMessage () -{ - return "You picked up the energy pack."; -} - -// Poison Bolt Quiver ------------------------------------------------------- - -FState APoisonBolts::States[] = -{ - S_NORMAL (PQRL, 'A', -1, NULL, NULL) -}; - -IMPLEMENT_ACTOR (APoisonBolts, Strife, 115, 0) - PROP_SpawnState (0) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOORCLIP) - PROP_StrifeType (185) - PROP_StrifeTeaserType (179) - PROP_StrifeTeaserType2 (183) - PROP_Inventory_Amount (10) - PROP_Inventory_MaxAmount (25) - PROP_Ammo_BackpackAmount (2) - PROP_Ammo_BackpackMaxAmount (50) - PROP_Inventory_Icon ("I_PQRL") - PROP_Tag ("poison_bolts") // "poison_arrows" in the Teaser -END_DEFAULTS - -const char *APoisonBolts::PickupMessage () -{ - return "You picked up the poison bolts."; -} - -// Electric Bolt Quiver ------------------------------------------------------- - -FState AElectricBolts::States[] = -{ - S_NORMAL (XQRL, 'A', -1, NULL, NULL) -}; - -IMPLEMENT_ACTOR (AElectricBolts, Strife, 114, 0) - PROP_SpawnState (0) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOORCLIP) - PROP_StrifeType (186) - PROP_StrifeTeaserType (180) - PROP_StrifeTeaserType2 (184) - PROP_Inventory_Amount (20) - PROP_Inventory_MaxAmount (50) - PROP_Ammo_BackpackAmount (4) - PROP_Ammo_BackpackMaxAmount (100) - PROP_Inventory_Icon ("I_XQRL") - PROP_Tag ("electric_bolts") // "electric_arrows" in the Teaser -END_DEFAULTS - -const char *AElectricBolts::PickupMessage () -{ - return "You picked up the electric bolts."; -} - -// Ammo Satchel ------------------------------------------------------------- - -class AAmmoSatchel : public ABackpack -{ - DECLARE_ACTOR (AAmmoSatchel, ABackpack) -protected: - virtual const char *PickupMessage () - { - return "You picked up the ammo satchel"; - } -}; - -FState AAmmoSatchel::States[] = -{ - S_NORMAL (BKPK, 'A', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AAmmoSatchel, Strife, 183, 144) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOORCLIP) - PROP_SpawnState (0) - PROP_StrifeType (187) - PROP_StrifeTeaserType (181) - PROP_StrifeTeaserType2 (185) - PROP_Inventory_Icon ("I_BKPK") - PROP_Tag ("ammo_satchel") // "Back_pack" in the Teaser -END_DEFAULTS diff --git a/src/g_strife/a_strifeglobal.h b/src/g_strife/a_strifeglobal.h index 6d150d2b98..e0e3e5cb8a 100644 --- a/src/g_strife/a_strifeglobal.h +++ b/src/g_strife/a_strifeglobal.h @@ -40,7 +40,6 @@ class ADegninOre : public AInventory { DECLARE_ACTOR (ADegninOre, AInventory) public: - const char *PickupMessage (); void GetExplodeParms (int &damage, int &dist, bool &hurtSource); bool Use (bool pickup); }; @@ -90,8 +89,6 @@ class AStrifeWeapon : public AWeapon class AFlameThrower : public AStrifeWeapon { DECLARE_ACTOR (AFlameThrower, AStrifeWeapon) -public: - const char *PickupMessage (); }; class ASigil : public AStrifeWeapon @@ -101,7 +98,6 @@ public: bool HandlePickup (AInventory *item); AInventory *CreateCopy (AActor *other); void Serialize (FArchive &arc); - const char *PickupMessage (); bool SpecialDropAction (AActor *dropper); static int GiveSigilPiece (AActor *daPlayer); diff --git a/src/g_strife/a_strifeitems.cpp b/src/g_strife/a_strifeitems.cpp index 6e406dd31e..b5c096f3e3 100644 --- a/src/g_strife/a_strifeitems.cpp +++ b/src/g_strife/a_strifeitems.cpp @@ -8,9 +8,9 @@ #include "p_lnspec.h" #include "p_enemy.h" #include "s_sound.h" -#include "a_strifeweaps.h" #include "d_event.h" #include "a_keys.h" +#include "c_console.h" // Degnin Ore --------------------------------------------------------------- @@ -48,13 +48,9 @@ IMPLEMENT_ACTOR (ADegninOre, Strife, 59, 0) PROP_Tag ("Degnin_Ore") // "Thalite_Ore" in the Teaser PROP_DeathSound ("ore/explode") PROP_Inventory_Icon ("I_XPRK") + PROP_Inventory_PickupMessage("$TXT_DEGNINORE") END_DEFAULTS -const char *ADegninOre::PickupMessage () -{ - return "You picked up the Degnin Ore."; -} - void ADegninOre::GetExplodeParms (int &damage, int &dist, bool &hurtSource) { damage = dist = 192; @@ -179,7 +175,6 @@ class AScanner : public APowerupGiver { DECLARE_ACTOR (AScanner, APowerupGiver) public: - const char *PickupMessage (); bool Use (bool pickup); }; @@ -200,20 +195,16 @@ IMPLEMENT_ACTOR (AScanner, Strife, 2027, 0) PROP_Inventory_Icon ("I_PMUP") PROP_PowerupGiver_Powerup ("PowerScanner") PROP_Inventory_PickupSound ("misc/i_pkup") + PROP_Inventory_PickupMessage("$TXT_SCANNER") END_DEFAULTS -const char *AScanner::PickupMessage () -{ - return "You picked up the scanner."; -} - bool AScanner::Use (bool pickup) { if (!(level.flags & LEVEL_ALLMAP)) { if (Owner->CheckLocalView (consoleplayer)) { - Printf ("The scanner won't work without a map!\n"); + C_MidPrint(GStrings("TXT_NEEDMAP")); } return false; } @@ -228,7 +219,6 @@ class APrisonPass : public AKey public: bool TryPickup (AActor *toucher); bool SpecialDropAction (AActor *dropper); - const char *PickupMessage (); }; FState APrisonPass::States[] = @@ -243,6 +233,7 @@ IMPLEMENT_ACTOR (APrisonPass, Strife, -1, 0) PROP_SpawnState (0) PROP_Inventory_Icon ("I_TOKN") PROP_Tag ("Prison_pass") + PROP_Inventory_PickupMessage("$TXT_PRISONPASS") END_DEFAULTS bool APrisonPass::TryPickup (AActor *toucher) @@ -253,11 +244,6 @@ bool APrisonPass::TryPickup (AActor *toucher) return true; } -const char *APrisonPass::PickupMessage () -{ - return "You picked up the Prison pass."; -} - //============================================================================ // // APrisonPass :: SpecialDropAction @@ -430,24 +416,28 @@ END_DEFAULTS bool AAmmoFillup::TryPickup (AActor *toucher) { - AInventory *item = toucher->FindInventory(); - if (item == NULL) + const PClass * clip = PClass::FindClass(NAME_ClipOfBullets); + if (clip != NULL) { - item = toucher->GiveInventoryType (RUNTIME_CLASS(AClipOfBullets)); - if (item != NULL) + AInventory *item = toucher->FindInventory(clip); + if (item == NULL) + { + item = toucher->GiveInventoryType (clip); + if (item != NULL) + { + item->Amount = 50; + } + } + else if (item->Amount < 50) { item->Amount = 50; } + else + { + return false; + } + GoAwayAndDie (); } - else if (item->Amount < 50) - { - item->Amount = 50; - } - else - { - return false; - } - GoAwayAndDie (); return true; } diff --git a/src/g_strife/a_strifeweapons.cpp b/src/g_strife/a_strifeweapons.cpp index 6e15e38972..d8d5c42e32 100644 --- a/src/g_strife/a_strifeweapons.cpp +++ b/src/g_strife/a_strifeweapons.cpp @@ -361,11 +361,6 @@ void A_FirePoison (AActor *); class AStrifeCrossbow : public AStrifeWeapon { DECLARE_ACTOR (AStrifeCrossbow, AStrifeWeapon) -public: - const char *PickupMessage () - { - return "You picked up the crossbow"; - } }; FState AStrifeCrossbow::States[] = @@ -442,6 +437,7 @@ IMPLEMENT_ACTOR (AStrifeCrossbow, Strife, 2001, 0) PROP_Weapon_AmmoType1 ("ElectricBolts") PROP_Weapon_SisterType ("StrifeCrossbow2") PROP_Weapon_ProjectileType ("ElectricBolt") + PROP_Inventory_PickupMessage("$TXT_STRIFECROSSBOW") PROP_Inventory_Icon ("CBOWA0") PROP_Tag ("crossbow") @@ -586,10 +582,6 @@ class AAssaultGun : public AStrifeWeapon { DECLARE_ACTOR (AAssaultGun, AStrifeWeapon) public: - const char *PickupMessage () - { - return "You picked up the assault gun"; - } bool HandlePickup (AInventory *item); }; @@ -644,6 +636,7 @@ IMPLEMENT_ACTOR (AAssaultGun, Strife, 2002, 0) PROP_Inventory_Icon ("RIFLA0") PROP_Tag ("assault_gun") + PROP_Inventory_PickupMessage("$TXT_ASSAULTGUN") END_DEFAULTS //============================================================================ @@ -767,11 +760,6 @@ void A_FireMiniMissile (AActor *); class AMiniMissileLauncher : public AStrifeWeapon { DECLARE_ACTOR (AMiniMissileLauncher, AStrifeWeapon) -public: - const char *PickupMessage () - { - return "You picked up the mini missile launcher"; - } }; FState AMiniMissileLauncher::States[] = @@ -818,6 +806,7 @@ IMPLEMENT_ACTOR (AMiniMissileLauncher, Strife, 2003, 0) PROP_Inventory_Icon ("MMSLA0") PROP_Tag ("mini_missile_launcher") // "missile_gun" in the Teaser + PROP_Inventory_PickupMessage("$TXT_MMLAUNCHER") END_DEFAULTS // Rocket Trail ------------------------------------------------------------- @@ -956,11 +945,6 @@ void A_RocketInFlight (AActor *self) void A_FireFlamer (AActor *); -const char *AFlameThrower::PickupMessage () -{ - return "You picked up the flame thrower"; -} - FState AFlameThrower::States[] = { S_NORMAL (FLAM, 'A', -1, NULL, NULL), @@ -1005,36 +989,9 @@ IMPLEMENT_ACTOR (AFlameThrower, Strife, 2005, 0) PROP_Inventory_Icon ("FLAMA0") PROP_Tag ("flame_thrower") + PROP_Inventory_PickupMessage("$TXT_FLAMER") END_DEFAULTS -// Flame Thrower Parts ------------------------------------------------------ - -class AFlameThrowerParts : AInventory -{ - DECLARE_ACTOR (AFlameThrowerParts, AInventory) -public: - const char *PickupMessage () - { - return "You picked up the flame thrower parts."; - } -}; - -FState AFlameThrowerParts::States[] = -{ - S_NORMAL (BFLM, 'A', -1, NULL, NULL) -}; - -IMPLEMENT_ACTOR (AFlameThrowerParts, Strife, -1, 0) - PROP_SpawnState (0) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOORCLIP) - PROP_StrifeType (191) - PROP_StrifeTeaserType (185) - PROP_StrifeTeaserType2 (189) - PROP_Inventory_FlagsSet (IF_INVBAR) - PROP_Inventory_Icon ("I_BFLM") - PROP_Tag ("flame_thrower_parts") -END_DEFAULTS // Flame Thrower Projectile ------------------------------------------------- @@ -1126,11 +1083,6 @@ void A_MaulerTorpedoWave (AActor *); class AMauler : public AStrifeWeapon { DECLARE_ACTOR (AMauler, AStrifeWeapon) -public: - const char *PickupMessage () - { - return "You picked up the mauler"; - } }; FState AMauler::States[] = @@ -1206,6 +1158,7 @@ IMPLEMENT_ACTOR (AMauler, Strife, 2004, 0) PROP_Inventory_Icon ("TRPDA0") PROP_Tag ("mauler") // "blaster" in the Teaser + PROP_Inventory_PickupMessage("$TXT_MAULER") END_DEFAULTS // Mauler Torpedo version --------------------------------------------------- @@ -1700,11 +1653,6 @@ void A_FireGrenade (AActor *); class AStrifeGrenadeLauncher : public AStrifeWeapon { DECLARE_ACTOR (AStrifeGrenadeLauncher, AStrifeWeapon) -public: - const char *PickupMessage () - { - return "You picked up the Grenade launcher"; - } }; FState AStrifeGrenadeLauncher::States[] = @@ -1780,6 +1728,7 @@ IMPLEMENT_ACTOR (AStrifeGrenadeLauncher, Strife, 154, 0) PROP_Inventory_Icon ("GRNDA0") PROP_Tag ("Grenade_launcher") + PROP_Inventory_PickupMessage("$TXT_GLAUNCHER") END_DEFAULTS // White Phosphorous Grenade Launcher --------------------------------------- @@ -1969,6 +1918,7 @@ IMPLEMENT_ACTOR (ASigil, Strife, -1, 0) PROP_Inventory_PickupSound("weapons/sigilcharge") PROP_Tag ("SIGIL") PROP_Inventory_Icon ("I_SGL1") + PROP_Inventory_PickupMessage("$TXT_SIGIL") END_DEFAULTS // Sigil 1 ------------------------------------------------------------------ @@ -2113,17 +2063,6 @@ AInventory *ASigil::CreateCopy (AActor *other) return copy; } -//============================================================================ -// -// ASigil :: PickupMessage -// -//============================================================================ - -const char *ASigil::PickupMessage () -{ - return "You picked up the SIGIL."; -} - //============================================================================ // // A_SelectPiece diff --git a/src/g_strife/a_strifeweaps.h b/src/g_strife/a_strifeweaps.h deleted file mode 100644 index 8333881a61..0000000000 --- a/src/g_strife/a_strifeweaps.h +++ /dev/null @@ -1,71 +0,0 @@ -#include "a_pickups.h" - -class AHEGrenadeRounds : public AAmmo -{ - DECLARE_ACTOR (AHEGrenadeRounds, AAmmo); -public: - virtual const char *PickupMessage (); -}; - -class APhosphorusGrenadeRounds : public AAmmo -{ - DECLARE_ACTOR (APhosphorusGrenadeRounds, AAmmo); -public: - virtual const char *PickupMessage (); -}; - -class AClipOfBullets : public AAmmo -{ - DECLARE_ACTOR (AClipOfBullets, AAmmo) -public: - virtual const char *PickupMessage (); -}; - -class ABoxOfBullets : public AClipOfBullets -{ - DECLARE_ACTOR (ABoxOfBullets, AClipOfBullets) -public: - virtual const char *PickupMessage (); -}; - -class AMiniMissiles : public AAmmo -{ - DECLARE_ACTOR (AMiniMissiles, AAmmo) -public: - virtual const char *PickupMessage (); -}; - -class ACrateOfMissiles : public AMiniMissiles -{ - DECLARE_ACTOR (ACrateOfMissiles, AMiniMissiles) -public: - virtual const char *PickupMessage (); -}; - -class AEnergyPod : public AAmmo -{ - DECLARE_ACTOR (AEnergyPod, AAmmo) -public: - virtual const char *PickupMessage (); -}; - -class AEnergyPack : public AEnergyPod -{ - DECLARE_ACTOR (AEnergyPack, AEnergyPod) -public: - virtual const char *PickupMessage (); -}; - -class APoisonBolts : public AAmmo -{ - DECLARE_ACTOR (APoisonBolts, AAmmo) -public: - virtual const char *PickupMessage (); -}; - -class AElectricBolts : public AAmmo -{ - DECLARE_ACTOR (AElectricBolts, AAmmo) -public: - virtual const char *PickupMessage (); -}; diff --git a/src/g_strife/strife_sbar.cpp b/src/g_strife/strife_sbar.cpp index 1004c1edcc..a4c2668e7b 100644 --- a/src/g_strife/strife_sbar.cpp +++ b/src/g_strife/strife_sbar.cpp @@ -12,7 +12,6 @@ #include "m_swap.h" #include "templates.h" #include "a_keys.h" -#include "a_strifeweaps.h" #include "a_strifeglobal.h" #include "gi.h" @@ -685,26 +684,27 @@ private: // How much ammo does the player have? static const struct { - const PClass *AmmoType; + ENamedName AmmoType; int Y; } AmmoList[7] = { - { RUNTIME_CLASS(AClipOfBullets), 19 }, - { RUNTIME_CLASS(APoisonBolts), 35 }, - { RUNTIME_CLASS(AElectricBolts), 43 }, - { RUNTIME_CLASS(AHEGrenadeRounds), 59 }, - { RUNTIME_CLASS(APhosphorusGrenadeRounds), 67 }, - { RUNTIME_CLASS(AMiniMissiles), 75 }, - { RUNTIME_CLASS(AEnergyPod), 83 } + { NAME_ClipOfBullets, 19 }, + { NAME_PoisonBolts, 35 }, + { NAME_ElectricBolts, 43 }, + { NAME_HEGrenadeRounds, 59 }, + { NAME_PhosphorusGrenadeRounds, 67 }, + { NAME_MiniMissiles, 75 }, + { NAME_EnergyPod, 83 } }; for (i = 0; i < 7; ++i) { - item = CPlayer->mo->FindInventory (AmmoList[i].AmmoType); + const PClass * ammotype = PClass::FindClass(AmmoList[i].AmmoType); + item = CPlayer->mo->FindInventory (ammotype); if (item == NULL) { DrINumber2 (0, left+206*xscale, top+AmmoList[i].Y*yscale, 7*xscale, imgFONY0); - DrINumber2 (((AInventory *)GetDefaultByType (AmmoList[i].AmmoType))->MaxAmount, + DrINumber2 (((AInventory *)GetDefaultByType (ammotype))->MaxAmount, left+239*xscale, top+AmmoList[i].Y*yscale, 7*xscale, imgFONY0); } else diff --git a/src/info.h b/src/info.h index 86cc5c9350..442b22b15a 100644 --- a/src/info.h +++ b/src/info.h @@ -242,7 +242,10 @@ enum ADEF_Weapon_ProjectileType, ADEF_PowerupGiver_Powerup, ADEF_Inventory_Icon, - ADEF_LastString = ADEF_Inventory_Icon, + ADEF_Obituary, + ADEF_HitObituary, + ADEF_Inventory_PickupMsg, + ADEF_LastString = ADEF_Inventory_PickupMsg, // The rest of the properties use their type field (upper 2 bits) ADEF_XScale, diff --git a/src/infodefaults.cpp b/src/infodefaults.cpp index 9e6da00064..9028331b84 100644 --- a/src/infodefaults.cpp +++ b/src/infodefaults.cpp @@ -45,6 +45,7 @@ #include "r_data.h" #include "w_wad.h" #include "a_strifeglobal.h" +#include "thingdef.h" void FActorInfo::BuildDefaults () { @@ -61,6 +62,7 @@ void FActorInfo::BuildDefaults () parent = Class->ParentClass; parent->ActorInfo->BuildDefaults (); + Class->Meta = parent->Meta; assert (Class->Size >= parent->Size); memcpy (Class->Defaults, parent->Defaults, parent->Size); if (Class->Size > parent->Size) @@ -129,9 +131,6 @@ static void ApplyActorDefault (int defnum, const char *datastr, int dataint) switch (defnum) { - case ADEF_Weapon_AmmoType1: - case ADEF_Weapon_AmmoType2: - case ADEF_Weapon_SisterType: case ADEF_Weapon_ProjectileType: case ADEF_PowerupGiver_Powerup: datatype = PClass::FindClass (datastr); @@ -167,6 +166,19 @@ static void ApplyActorDefault (int defnum, const char *datastr, int dataint) sgClass->Meta.SetMetaString (AMETA_StrifeName, name); break; } + + case ADEF_Obituary: + sgClass->Meta.SetMetaString (AMETA_Obituary, datastr); + break; + + case ADEF_HitObituary: + sgClass->Meta.SetMetaString (AMETA_HitObituary, datastr); + break; + + case ADEF_Inventory_PickupMsg: + sgClass->Meta.SetMetaString (AIMETA_PickupMessage, datastr); + break; + case ADEF_PowerupGiver_Powerup: giver->PowerupType = datatype; break; @@ -280,10 +292,10 @@ static void ApplyActorDefault (int defnum, const char *datastr, int dataint) case ADEF_Weapon_FlagsSet: weapon->WeaponFlags |= dataint; break; case ADEF_Weapon_UpSound: weapon->UpSound = datasound; break; case ADEF_Weapon_ReadySound: weapon->ReadySound = datasound; break; - case ADEF_Weapon_SisterType: weapon->SisterWeaponType = datatype; break; + case ADEF_Weapon_SisterType: weapon->SisterWeaponType = fuglyname(datastr); break; case ADEF_Weapon_ProjectileType:weapon->ProjectileType = datatype; break; - case ADEF_Weapon_AmmoType1: weapon->AmmoType1 = datatype; break; - case ADEF_Weapon_AmmoType2: weapon->AmmoType2 = datatype; break; + case ADEF_Weapon_AmmoType1: weapon->AmmoType1 = fuglyname(datastr); break; + case ADEF_Weapon_AmmoType2: weapon->AmmoType2 = fuglyname(datastr); break; case ADEF_Weapon_AmmoGive1: weapon->AmmoGive1 = dataint; break; case ADEF_Weapon_AmmoGive2: weapon->AmmoGive2 = dataint; break; case ADEF_Weapon_AmmoUse1: weapon->AmmoUse1 = dataint; break; diff --git a/src/infomacros.h b/src/infomacros.h index 9f8095e03b..522efbdf7e 100644 --- a/src/infomacros.h +++ b/src/infomacros.h @@ -207,6 +207,9 @@ public: #define PROP_Weapon_ProjectileType(x) ADD_STRING_PROP(ADEF_Weapon_ProjectileType,"\16",x) #define PROP_PowerupGiver_Powerup(x) ADD_STRING_PROP(ADEF_PowerupGiver_Powerup,"\17",x) #define PROP_Inventory_Icon(x) ADD_STRING_PROP(ADEF_Inventory_Icon,"\20",x) +#define PROP_Obituary(x) ADD_STRING_PROP(ADEF_Obituary,"\21",x) +#define PROP_HitObituary(x) ADD_STRING_PROP(ADEF_HitObituary,"\22",x) +#define PROP_Inventory_PickupMessage(x) ADD_STRING_PROP(ADEF_Obituary,"\23",x) #define PROP_XScale(x) ADD_BYTE_PROP(ADEF_XScale,x) #define PROP_YScale(x) ADD_BYTE_PROP(ADEF_YScale,x) diff --git a/src/namedef.h b/src/namedef.h index 4209979679..3dbb7aa63f 100644 --- a/src/namedef.h +++ b/src/namedef.h @@ -68,7 +68,19 @@ xx(Shell) xx(RocketAmmo) xx(Cell) -// Weapon names for the Strife status bar +// Hexen Mana +xx(Mana1) +xx(Mana2) + +// Ammo and weapon names for the Strife status bar +xx(ClipOfBullets) +xx(PoisonBolts) +xx(ElectricBolts) +xx(HEGrenadeRounds) +xx(PhosphorusGrenadeRounds) +xx(MiniMissiles) +xx(EnergyPod) + xx(StrifeCrossbow) xx(AssaultGun) xx(FlameThrower) diff --git a/src/p_interaction.cpp b/src/p_interaction.cpp index 24890245aa..52190e58af 100644 --- a/src/p_interaction.cpp +++ b/src/p_interaction.cpp @@ -127,11 +127,6 @@ void SexMessage (const char *from, char *to, int gender, const char *victim, con }; const char *subst = NULL; - if (from[0]=='$') - { - from=GStrings(from+1); - } - do { if (*from != '%') @@ -256,32 +251,16 @@ void ClientObituary (AActor *self, AActor *inflictor, AActor *attacker) if (message == NULL) { message = attacker->GetClass()->Meta.GetMetaString (AMETA_Obituary); - if (message == NULL) - { - message = attacker->GetHitObituary (); - } } } else { message = attacker->GetClass()->Meta.GetMetaString (AMETA_Obituary); - if (message == NULL) - { - message = attacker->GetObituary (); - } } } } - if (message) - { - SexMessage (message, gendermessage, gender, - self->player->userinfo.netname, self->player->userinfo.netname); - Printf (PRINT_MEDIUM, "%s\n", gendermessage); - return; - } - - if (attacker != NULL && attacker->player != NULL) + if (message == NULL && attacker != NULL && attacker->player != NULL) { if (friendly) { @@ -297,18 +276,10 @@ void ClientObituary (AActor *self, AActor *inflictor, AActor *attacker) if (inflictor != NULL) { message = inflictor->GetClass()->Meta.GetMetaString (AMETA_Obituary); - if (message == NULL) - { - message = inflictor->GetObituary (); - } } if (message == NULL && attacker->player->ReadyWeapon != NULL) { message = attacker->player->ReadyWeapon->GetClass()->Meta.GetMetaString (AMETA_Obituary); - if (message == NULL) - { - message = attacker->player->ReadyWeapon->GetObituary (); - } } if (message == NULL) { @@ -325,15 +296,17 @@ void ClientObituary (AActor *self, AActor *inflictor, AActor *attacker) } } - if (message) + if (message != NULL && message[0] == '$') { - SexMessage (message, gendermessage, gender, - self->player->userinfo.netname, attacker->player->userinfo.netname); - Printf (PRINT_MEDIUM, "%s\n", gendermessage); - return; + message=GStrings[message+1]; } - SexMessage (GStrings("OB_DEFAULT"), gendermessage, gender, + if (message == NULL) + { + message = GStrings("OB_DEFAULT"); + } + + SexMessage (message, gendermessage, gender, self->player->userinfo.netname, self->player->userinfo.netname); Printf (PRINT_MEDIUM, "%s\n", gendermessage); } diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index 73fc374f12..0673c5b210 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -2247,16 +2247,6 @@ angle_t AActor::AngleIncrements () return ANGLE_45; } -const char *AActor::GetObituary () -{ - return NULL; -} - -const char *AActor::GetHitObituary () -{ - return GetObituary (); -} - void AActor::PreExplode () { } diff --git a/src/thingdef.cpp b/src/thingdef.cpp index 3ccad157a4..480199b24a 100644 --- a/src/thingdef.cpp +++ b/src/thingdef.cpp @@ -3237,6 +3237,18 @@ static void InventoryGiveQuest (APuzzleItem *defaults, Baggage &bag) bag.Info->Class->Meta.SetMetaInt(AIMETA_GiveQuest, sc_Number); } +//========================================================================== +// +//========================================================================== +static void HealthLowMessage (AHealth *defaults, Baggage &bag) +{ + SC_MustGetNumber(); + bag.Info->Class->Meta.SetMetaInt(AIMETA_LowHealth, sc_Number); + SC_MustGetStringName(","); + SC_MustGetString(); + bag.Info->Class->Meta.SetMetaString(AIMETA_LowHealthMessage, sc_String); +} + //========================================================================== // //========================================================================== @@ -3267,31 +3279,11 @@ static void WeaponAmmoGive2 (AWeapon *defaults, Baggage &bag) //========================================================================== // // Passing these parameters is really tricky to allow proper inheritance -// and forward declarations. Here only an index into a string table is +// and forward declarations. Here only a name is // stored which must be resolved after everything has been declared // //========================================================================== -// This class is for storing a name inside a const PClass* field without -// generating compiler warnings. It does not manipulate data in any other -// way. -class fuglyname : public FName -{ -public: - fuglyname() : FName() {} - fuglyname(const char *foo) : FName(foo) {} - operator const PClass *() - { - return reinterpret_cast(size_t(int(*this))); - } - fuglyname &operator= (const PClass *foo) - { - FName *p = this; - *p = ENamedName(reinterpret_cast(foo)); - return *this; - } -}; - static void WeaponAmmoType1 (AWeapon *defaults, Baggage &bag) { SC_MustGetString(); @@ -3547,6 +3539,7 @@ static const ActorProps props[] = { "gibhealth", ActorGibHealth, RUNTIME_CLASS(AActor) }, { "heal", ActorHealState, RUNTIME_CLASS(AActor) }, { "health", ActorHealth, RUNTIME_CLASS(AActor) }, + { "health.lowmessage", (apf)HealthLowMessage, RUNTIME_CLASS(AHealth) }, { "height", ActorHeight, RUNTIME_CLASS(AActor) }, { "hitobituary", ActorHitObituary, RUNTIME_CLASS(AActor) }, { "ice", ActorIceState, RUNTIME_CLASS(AActor) }, @@ -3628,15 +3621,28 @@ static const ActorProps *is_actorprop (const char *str) //========================================================================== // // Do some postprocessing after everything has been defined +// This also processes all the internal actors to adjust the type +// fields in the weapons // //========================================================================== void FinishThingdef() { unsigned int i; + bool isRuntimeActor=false; - for (i = 0;i < PClass::m_RuntimeActors.Size(); i++) + for (i = 0;i < PClass::m_Types.Size(); i++) { - PClass * ti = PClass::m_RuntimeActors[i]; + PClass * ti = PClass::m_Types[i]; + + // Skip non-actors + if (!ti->IsDescendantOf(RUNTIME_CLASS(AActor))) continue; + + // Everything coming after the first runtime actor is also a runtime actor + // so this check is sufficient + if (ti == PClass::m_RuntimeActors[0]) + { + isRuntimeActor=true; + } // Friendlies never count as kills! if (GetDefaultByType(ti)->flags & MF_FRIENDLY) @@ -3654,13 +3660,16 @@ void FinishThingdef() if (v != NAME_None && v.IsValidName()) { defaults->AmmoType1 = PClass::FindClass(v); - if (!defaults->AmmoType1) + if (isRuntimeActor) { - SC_ScriptError("Unknown ammo type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); - } - else if (defaults->AmmoType1->ParentClass != RUNTIME_CLASS(AAmmo)) - { - SC_ScriptError("Invalid ammo type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); + if (!defaults->AmmoType1) + { + I_Error("Unknown ammo type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); + } + else if (defaults->AmmoType1->ParentClass != RUNTIME_CLASS(AAmmo)) + { + I_Error("Invalid ammo type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); + } } } @@ -3668,13 +3677,16 @@ void FinishThingdef() if (v != NAME_None && v.IsValidName()) { defaults->AmmoType2 = PClass::FindClass(v); - if (!defaults->AmmoType2) + if (isRuntimeActor) { - SC_ScriptError("Unknown ammo type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); - } - else if (defaults->AmmoType2->ParentClass != RUNTIME_CLASS(AAmmo)) - { - SC_ScriptError("Invalid ammo type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); + if (!defaults->AmmoType2) + { + I_Error("Unknown ammo type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); + } + else if (defaults->AmmoType2->ParentClass != RUNTIME_CLASS(AAmmo)) + { + I_Error("Invalid ammo type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); + } } } @@ -3682,25 +3694,31 @@ void FinishThingdef() if (v != NAME_None && v.IsValidName()) { defaults->SisterWeaponType = PClass::FindClass(v); - if (!defaults->SisterWeaponType) + if (isRuntimeActor) { - SC_ScriptError("Unknown sister weapon type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); - } - else if (!defaults->SisterWeaponType->IsDescendantOf(RUNTIME_CLASS(AWeapon))) - { - SC_ScriptError("Invalid sister weapon type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); + if (!defaults->SisterWeaponType) + { + I_Error("Unknown sister weapon type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); + } + else if (!defaults->SisterWeaponType->IsDescendantOf(RUNTIME_CLASS(AWeapon))) + { + I_Error("Invalid sister weapon type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); + } } } - // Do some consistency checks. If these states are undefined the weapon cannot work! - if (!defaults->ReadyState) SC_ScriptError("Weapon %s doesn't define a ready state.\n", ti->TypeName.GetChars()); - if (!defaults->UpState) SC_ScriptError("Weapon %s doesn't define a select state.\n", ti->TypeName.GetChars()); - if (!defaults->DownState) SC_ScriptError("Weapon %s doesn't define a deselect state.\n", ti->TypeName.GetChars()); - if (!defaults->AtkState) SC_ScriptError("Weapon %s doesn't define an attack state.\n", ti->TypeName.GetChars()); + if (isRuntimeActor) + { + // Do some consistency checks. If these states are undefined the weapon cannot work! + if (!defaults->ReadyState) I_Error("Weapon %s doesn't define a ready state.\n", ti->TypeName.GetChars()); + if (!defaults->UpState) I_Error("Weapon %s doesn't define a select state.\n", ti->TypeName.GetChars()); + if (!defaults->DownState) I_Error("Weapon %s doesn't define a deselect state.\n", ti->TypeName.GetChars()); + if (!defaults->AtkState) I_Error("Weapon %s doesn't define an attack state.\n", ti->TypeName.GetChars()); - // If the weapon doesn't define a hold state use the attack state instead. - if (!defaults->HoldAtkState) defaults->HoldAtkState=defaults->AtkState; - if (!defaults->AltHoldAtkState) defaults->AltHoldAtkState=defaults->AltAtkState; + // If the weapon doesn't define a hold state use the attack state instead. + if (!defaults->HoldAtkState) defaults->HoldAtkState=defaults->AtkState; + if (!defaults->AltHoldAtkState) defaults->AltHoldAtkState=defaults->AltAtkState; + } } // same for the weapon type of weapon pieces. @@ -3715,11 +3733,11 @@ void FinishThingdef() defaults->WeaponClass = PClass::FindClass(v); if (!defaults->WeaponClass) { - SC_ScriptError("Unknown weapon type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); + I_Error("Unknown weapon type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); } else if (!defaults->WeaponClass->IsDescendantOf(RUNTIME_CLASS(AWeapon))) { - SC_ScriptError("Invalid weapon type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); + I_Error("Invalid weapon type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars()); } } } diff --git a/src/thingdef.h b/src/thingdef.h index 3f54d15e8f..df44ccc0c7 100644 --- a/src/thingdef.h +++ b/src/thingdef.h @@ -1,6 +1,26 @@ #ifndef __THINGDEF_H #define __THINGDEF_H +// This class is for storing a name inside a const PClass* field without +// generating compiler warnings. It does not manipulate data in any other +// way. +class fuglyname : public FName +{ +public: + fuglyname() : FName() {} + fuglyname(const char *foo) : FName(foo) {} + operator const PClass *() + { + return reinterpret_cast(size_t(int(*this))); + } + fuglyname &operator= (const PClass *foo) + { + FName *p = this; + *p = ENamedName(reinterpret_cast(foo)); + return *this; + } +}; + int ParseExpression (bool _not); int EvalExpressionI (int id, AActor *self); diff --git a/wadsrc/decorate/decorate.txt b/wadsrc/decorate/decorate.txt index df9f3c66da..d8c7060d53 100644 --- a/wadsrc/decorate/decorate.txt +++ b/wadsrc/decorate/decorate.txt @@ -2,8 +2,10 @@ #include "actors/shared/splashes.txt" #include "actors/doom/deadthings.txt" +#include "actors/doom/doomammo.txt" #include "actors/doom/doomarmor.txt" #include "actors/doom/doomartifacts.txt" +#include "actors/doom/doomhealth.txt" #include "actors/doom/doomkeys.txt" #include "actors/doom/doomdecorations.txt" #include "actors/doom/stealthmonsters.txt" @@ -11,6 +13,7 @@ #include "actors/raven/ravenartifacts.txt" #include "actors/raven/ravenhealth.txt" +#include "actors/heretic/hereticammo.txt" #include "actors/heretic/hereticarmor.txt" #include "actors/heretic/hereticartifacts.txt" #include "actors/heretic/heretickeys.txt" @@ -21,6 +24,7 @@ #include "actors/hexen/hexendecorations.txt" #include "actors/hexen/hexenkeys.txt" #include "actors/hexen/hexenspecialdecs.txt" +#include "actors/hexen/mana.txt" #include "actors/hexen/puzzleitems.txt" #include "actors/hexen/scriptprojectiles.txt" #include "actors/hexen/speedboots.txt" @@ -30,6 +34,7 @@ #include "actors/strife/peasants.txt" #include "actors/strife/questitems.txt" #include "actors/strife/ratbuddy.txt" +#include "actors/strife/strifeammo.txt" #include "actors/strife/strifearmor.txt" #include "actors/strife/strifeitems.txt" #include "actors/strife/strifekeys.txt" diff --git a/wadsrc/decorate/doom/doomammo.txt b/wadsrc/decorate/doom/doomammo.txt new file mode 100644 index 0000000000..88b1c2c3e7 --- /dev/null +++ b/wadsrc/decorate/doom/doomammo.txt @@ -0,0 +1,144 @@ +// Clip -------------------------------------------------------------------- + +ACTOR Clip : Ammo 2007 +{ + Game Doom + SpawnID 11 + Inventory.PickupMessage "$GOTCLIP" + Inventory.Amount 10 + Inventory.MaxAmount 200 + Ammo.BackpackAmount 10 + Ammo.BackpackMaxAmount 400 + Inventory.Icon "CLIPA0" + States + { + Spawn: + CLIP A -1 + Stop + } +} + +// Clip box ---------------------------------------------------------------- + +ACTOR ClipBox : Clip 2048 +{ + Game Doom + SpawnID 139 + Inventory.PickupMessage "$GOTCLIPBOX" + Inventory.Amount 50 + States + { + Spawn: + AMMO A -1 + Stop + } +} + +// Rocket ------------------------------------------------------------------ + +ACTOR RocketAmmo : Ammo 2010 +{ + Game Doom + SpawnID 140 + Inventory.PickupMessage "$GOTROCKET" + Inventory.Amount 1 + Inventory.MaxAmount 50 + Ammo.BackpackAmount 1 + Ammo.BackpackMaxAmount 100 + Inventory.Icon "ROCKA0" + States + { + Spawn: + ROCK A -1 + Stop + } +} + +// Rocket box -------------------------------------------------------------- + +ACTOR RocketBox : RocketAmmo 2046 +{ + Game Doom + SpawnID 141 + Inventory.PickupMessage "$GOTROCKBOX" + Inventory.Amount 5 + States + { + Spawn: + BROK A -1 + Stop + } +} + +// Cell -------------------------------------------------------------------- + +ACTOR Cell : Ammo 2047 +{ + Game Doom + SpawnID 75 + Inventory.PickupMessage "$GOTCELL" + Inventory.Amount 20 + Inventory.MaxAmount 300 + Ammo.BackpackAmount 20 + Ammo.BackpackMaxAmount 600 + Inventory.Icon "CELLA0" + States + { + Spawn: + CELL A -1 + Stop + } +} + +// Cell pack --------------------------------------------------------------- + +ACTOR CellPack : Cell 17 +{ + Game Doom + SpawnID 11 + Inventory.PickupMessage "$GOTCELLBOX" + Inventory.Amount 100 + States + { + Spawn: + CELP A -1 + Stop + } +} + +// Shells ------------------------------------------------------------------ + +ACTOR Shell : Ammo 2008 +{ + Game Doom + SpawnID 12 + Inventory.PickupMessage "$GOTSHELLS" + Inventory.Amount 4 + Inventory.MaxAmount 50 + Ammo.BackpackAmount 4 + Ammo.BackpackMaxAmount 100 + Inventory.Icon "SHELA0" + States + { + Spawn: + SHEL A -1 + Stop + } +} + +// Shell box --------------------------------------------------------------- + +ACTOR ShellBox : Shell 2049 +{ + Game Doom + SpawnID 143 + Inventory.PickupMessage "$GOTSHELLBOX" + Inventory.Amount 20 + States + { + Spawn: + SBOX A -1 + Stop + } +} + diff --git a/wadsrc/decorate/doom/doomhealth.txt b/wadsrc/decorate/doom/doomhealth.txt new file mode 100644 index 0000000000..8cd1bf3264 --- /dev/null +++ b/wadsrc/decorate/doom/doomhealth.txt @@ -0,0 +1,53 @@ +// Health bonus ------------------------------------------------------------- + +ACTOR HealthBonus : Health 2014 +{ + Game Doom + SpawnID 152 + +COUNTITEM + +INVENTORY.ALWAYSPICKUP + Inventory.Amount 1 + Inventory.MaxAmount 200 + Inventory.PickupMessage "$GOTHTHBONUS" + States + { + Spawn: + BON1 ABCDCB 6 + Loop + } +} + +// Stimpack ----------------------------------------------------------------- + +ACTOR Stimpack : Health 2011 +{ + Game Doom + SpawnID 23 + Inventory.Amount 10 + Inventory.MaxAmount 100 + Inventory.PickupMessage "$GOTSTIM" + States + { + Spawn: + STIM A -1 + Stop + } +} + +// Medikit ----------------------------------------------------------------- + +ACTOR Medikit : Health 2012 +{ + Game Doom + SpawnID 24 + Inventory.Amount 25 + Inventory.MaxAmount 100 + Inventory.PickupMessage "$GOTMEDIKIT" + Health.LowMessage 25, "$GOTMEDINEED" + States + { + Spawn: + MEDI A -1 + Stop + } +} diff --git a/wadsrc/decorate/heretic/hereticammo.txt b/wadsrc/decorate/heretic/hereticammo.txt new file mode 100644 index 0000000000..0e7defd855 --- /dev/null +++ b/wadsrc/decorate/heretic/hereticammo.txt @@ -0,0 +1,230 @@ + +// Wimpy ammo --------------------------------------------------------------- + +ACTOR GoldWandAmmo : Ammo 10 +{ + Game Heretic + SpawnID 11 + Inventory.PickupMessage "$TXT_AMMOGOLDWAND1" + Inventory.Amount 10 + Inventory.MaxAmount 100 + Ammo.BackpackAmount 10 + Ammo.BackpackMaxAmount 200 + Inventory.Icon "INAMGLD" + States + { + Spawn: + AMG1 A -1 + Stop + } +} + +// Hefty ammo --------------------------------------------------------------- + +ACTOR GoldWandHefty : GoldWandAmmo 12 +{ + Game Heretic + SpawnID 12 + Inventory.PickupMessage "$TXT_AMMOGOLDWAND2" + Inventory.Amount 50 + States + { + Spawn: + AMG2 ABC 4 + Loop + } +} +// Wimpy ammo --------------------------------------------------------------- + +ACTOR CrossbowAmmo : Ammo 18 +{ + Game Heretic + SpawnID 33 + Inventory.PickupMessage "$TXT_AMMOCROSSBOW1" + Inventory.Amount 5 + Inventory.MaxAmount 50 + Ammo.BackpackAmount 5 + Ammo.BackpackMaxAmount 100 + Inventory.Icon "INAMBOW" + States + { + Spawn: + AMC1 A -1 + Stop + } +} + +// Hefty ammo --------------------------------------------------------------- + +ACTOR CrossbowHefty : CrossbowAmmo 19 +{ + Game Heretic + SpawnID 34 + Inventory.PickupMessage "$TXT_AMMOCROSSBOW2" + Inventory.Amount 20 + States + { + Spawn: + AMC2 ABC 5 + Loop + } +} +// Wimpy ammo --------------------------------------------------------------- + +ACTOR MaceAmmo : Ammo 13 +{ + Game Heretic + SpawnID 35 + Inventory.PickupMessage "$TXT_AMMOMACE1" + Inventory.Amount 20 + Inventory.MaxAmount 150 + Ammo.BackpackAmount 20 + Ammo.BackpackMaxAmount 300 + Inventory.Icon "INAMLOB" + States + { + Spawn: + AMM1 A -1 + Stop + } +} + +// Hefty ammo --------------------------------------------------------------- + +ACTOR MaceHefty : MaceAmmo 16 +{ + Game Heretic + SpawnID 36 + Inventory.PickupMessage "$TXT_AMMOMACE1" + Inventory.Amount 100 + States + { + Spawn: + AMM2 A -1 + Stop + } +} + +// Wimpy ammo --------------------------------------------------------------- + +ACTOR BlasterAmmo : Ammo 54 +{ + Game Heretic + SpawnID 37 + Inventory.PickupMessage "$TXT_AMMOBLASTER1" + Inventory.Amount 10 + Inventory.MaxAmount 200 + Ammo.BackpackAmount 10 + Ammo.BackpackMaxAmount 400 + Inventory.Icon "INAMBST" + States + { + Spawn: + AMB1 ABC 4 + Loop + } +} + +// Hefty ammo --------------------------------------------------------------- + +ACTOR BlasterHefty : BlasterAmmo 55 +{ + Game Heretic + SpawnID 38 + Inventory.PickupMessage "$TXT_AMMOBLASTER2" + Inventory.Amount 25 + States + { + Spawn: + AMB2 ABC 4 + Loop + } +} + +// Wimpy ammo --------------------------------------------------------------- + +ACTOR SkullRodAmmo : Ammo 20 +{ + Game Heretic + SpawnID 158 + Inventory.PickupMessage "$TXT_AMMOSKULLROD1" + Inventory.Amount 20 + Inventory.MaxAmount 200 + Ammo.BackpackAmount 20 + Ammo.BackpackMaxAmount 400 + Inventory.Icon "INAMRAM" + States + { + Spawn: + AMS1 AB 5 + Loop + } +} + +// Hefty ammo --------------------------------------------------------------- + +ACTOR SkullRodHefty : SkullRodAmmo 21 +{ + Game Heretic + SpawnID 159 + Inventory.PickupMessage "$TXT_AMMOSKULLROD2" + Inventory.Amount 100 + States + { + Spawn: + AMS2 AB 5 + Loop + } +} + +// Wimpy ammo --------------------------------------------------------------- + +ACTOR PhoenixRodAmmo : Ammo 22 +{ + Game Heretic + SpawnID 161 + Inventory.PickupMessage "$TXT_AMMOPHOENIXROD1" + Inventory.Amount 1 + Inventory.MaxAmount 20 + Ammo.BackpackAmount 1 + Ammo.BackpackMaxAmount 40 + Inventory.Icon "INAMPNX" + States + { + Spawn: + AMP1 ABC 4 + Loop + } +} +// Hefty ammo --------------------------------------------------------------- + +ACTOR PhoenixRodHefty : PhoenixRodAmmo 23 +{ + Game Heretic + SpawnID 162 + Inventory.PickupMessage "$TXT_AMMOPHOENIXROD2" + Inventory.Amount 10 + States + { + Spawn: + AMP2 ABC 4 + Loop + } +} + +// --- Bag of holding ------------------------------------------------------- + +ACTOR BagOfHolding : Backpack 8 +{ + Game Heretic + SpawnID 136 + Inventory.PickupMessage "$TXT_ITEMBAGOFHOLDING" + +COUNTITEM + +FLOATBOB + States + { + Spawn: + BAGH A -1 + Stop + } +} \ No newline at end of file diff --git a/wadsrc/decorate/hexen/mana.txt b/wadsrc/decorate/hexen/mana.txt new file mode 100644 index 0000000000..ae39d94444 --- /dev/null +++ b/wadsrc/decorate/hexen/mana.txt @@ -0,0 +1,93 @@ +// Blue mana ---------------------------------------------------------------- + +ACTOR Mana1 : Ammo 122 +{ + Game Hexen + SpawnID 11 + Inventory.Amount 15 + Inventory.MaxAmount 200 + Ammo.BackpackAmount 15 + Ammo.BackpackMaxAmount 200 + Radius 8 + Height 8 + +FLOATBOB + Inventory.Icon "MAN1I0" + Inventory.PickupMessage "$TXT_MANA_1" + States + { + Spawn: + MAN1 ABCDEFGHI 4 Bright + Loop + } +} + +// Green mana --------------------------------------------------------------- + +ACTOR Mana2 : Ammo 124 +{ + Game Hexen + SpawnID 12 + Inventory.Amount 15 + Inventory.MaxAmount 200 + Ammo.BackpackAmount 15 + Ammo.BackpackMaxAmount 200 + Radius 8 + Height 8 + +FLOATBOB + Inventory.Icon "MAN2G0" + Inventory.PickupMessage "$TXT_MANA_2" + States + { + Spawn: + MAN2 ABCDEFGHIJKLMNOP 4 Bright + Loop + } +} + +// Combined mana ------------------------------------------------------------ + +ACTOR Mana3 : CustomInventory 8004 +{ + Game Hexen + SpawnID 75 + Radius 8 + Height 8 + +FLOATBOB + Inventory.PickupMessage "$TXT_MANA_BOTH" + States + { + Spawn: + MAN3 ABCDEFGHIJKLMNOP 4 Bright + Loop + Pickup: + TNT1 A 0 A_GiveInventory("Mana1", 20) + TNT1 A 0 A_GiveInventory("Mana2", 20) + Stop + } +} + +// Boost Mana Artifact Krater of Might ------------------------------------ + +ACTOR ArtiBoostMana : CustomInventory 8003 +{ + Game Hexen + SpawnID 26 + +FLOATBOB + +INVENTORY.INVBAR + +INVENTORY.PICKUPFLASH + +INVENTORY.FANCYPICKUPSOUND + Inventory.DefMaxAmount + Inventory.Icon "ARTIBMAN" + Inventory.PickupSound "misc/p_pkup" + Inventory.PickupMessage "$TXT_ARTIBOOSTMANA" + States + { + Spawn: + BMAN A -1 + Stop + Use: + TNT1 A 0 A_GiveInventory("Mana1", 200) + TNT1 A 0 A_GiveInventory("Mana2", 200) + Stop + } +} diff --git a/wadsrc/decorate/strife/strifeammo.txt b/wadsrc/decorate/strife/strifeammo.txt new file mode 100644 index 0000000000..0a4b8decfe --- /dev/null +++ b/wadsrc/decorate/strife/strifeammo.txt @@ -0,0 +1,231 @@ +// HE-Grenade Rounds -------------------------------------------------------- + +ACTOR HEGrenadeRounds : Ammo 152 +{ + Game Strife + +FLOORCLIP + ConversationID 177, 170, 174 + Inventory.Amount 6 + Inventory.MaxAmount 30 + Ammo.BackpackAmount 6 + Ammo.BackpackMaxAmount 60 + Inventory.Icon "I_GRN1" + Tag "HE-Grenade_Rounds" + Inventory.PickupMessage "$TXT_HEGRENADES" + States + { + Spawn: + GRN1 A -1 + Stop + } +} + +// Phosphorus-Grenade Rounds ------------------------------------------------ + +ACTOR PhosphorusGrenadeRounds : Ammo 153 +{ + Game Strife + +FLOORCLIP + ConversationID 178, 171, 175 + Inventory.Amount 4 + Inventory.MaxAmount 16 + Ammo.BackpackAmount 4 + Ammo.BackpackMaxAmount 32 + Inventory.Icon "I_GRN2" + Tag "Phoshorus-Grenade_Rounds" // "Fire-Grenade_Rounds" in the Teaser + Inventory.PickupMessage "$TXT_PHGRENADES" + States + { + Spawn: + GRN2 A -1 + Stop + } +} + +// Clip of Bullets ---------------------------------------------------------- + +ACTOR ClipOfBullets : Ammo 2007 +{ + Game Strife + SpawnID 11 + ConversationID 179, 173, 177 + +FLOORCLIP + Inventory.Amount 10 + Inventory.MaxAmount 250 + Ammo.BackpackAmount 10 + Ammo.BackpackMaxAmount 500 + Inventory.Icon "I_BLIT" + Tag "clip_of_bullets" // "bullets" in the Teaser + Inventory.PickupMessage "$TXT_CLIPOFBULLETS" + States + { + Spawn: + BLIT A -1 + Stop + } +} + +// Box of Bullets ----------------------------------------------------------- + +ACTOR BoxOfBullets : ClipOfBullets 2048 +{ + Game Strife + SpawnID 139 + ConversationID 180, 174, 178 + Inventory.Amount 50 + Tag "ammo" + Inventory.PickupMessage "$TXT_BOXOFBULLETS" + States + { + Spawn: + BBOX A -1 + Stop + } +} + +// Mini Missiles ------------------------------------------------------------ + +ACTOR MiniMissiles : Ammo 2010 +{ + Game Strife + SpawnID 140 + ConversationID 181, 175, 179 + +FLOORCLIP + Inventory.Amount 4 + Inventory.MaxAmount 100 + Ammo.BackpackAmount 4 + Ammo.BackpackMaxAmount 200 + Inventory.Icon "I_ROKT" + Tag "mini_missiles" //"rocket" in the Teaser + Inventory.PickupMessage "$TXT_MINIMISSILES" + States + { + Spawn: + MSSL A -1 + Stop + } +} + +// Crate of Missiles -------------------------------------------------------- + +ACTOR CrateOfMissiles : MiniMissiles 2046 +{ + Game Strife + SpawnID 141 + ConversationID 182, 176, 180 + Inventory.Amount 20 + Tag "crate_of_missiles" //"box_of_rockets" in the Teaser + Inventory.PickupMessage "$TXT_CRATEOFMISSILES" + States + { + Spawn: + ROKT A -1 + Stop + } +} + +// Energy Pod --------------------------------------------------------------- + +ACTOR EnergyPod : Ammo 2047 +{ + Game Strife + SpawnID 75 + ConversationID 183, 177, 181 + +FLOORCLIP + Inventory.Amount 20 + Inventory.MaxAmount 400 + Ammo.BackpackAmount 20 + Ammo.BackpackMaxAmount 800 + Ammo.DropAmount 20 + Inventory.Icon "I_BRY1" + Tag "energy_pod" + Inventory.PickupMessage "$TXT_ENERGYPOD" + States + { + Spawn: + BRY1 AB 6 + Loop + } +} + +// Energy pack --------------------------------------------------------------- + +ACTOR EnergyPack : EnergyPod 17 +{ + Game Strife + SpawnID 142 + ConversationID 184, 178, 182 + Inventory.Amount 100 + Tag "energy_pack" + Inventory.PickupMessage "$TXT_ENERGYPACK" + States + { + Spawn: + CPAC AB 6 + Loop + } +} + +// Poison Bolt Quiver ------------------------------------------------------- + +ACTOR PoisonBolts : Ammo 115 +{ + Game Strife + ConversationID 185, 179, 183 + +FLOORCLIP + Inventory.Amount 10 + Inventory.MaxAmount 25 + Ammo.BackpackAmount 2 + Ammo.BackpackMaxAmount 50 + Inventory.Icon "I_PQRL" + Tag "poison_bolts" // "poison_arrows" in the Teaser + Inventory.PickupMessage "$TXT_POISONBOLTS" + States + { + Spawn: + PQRL A -1 + Stop + } +} + +// Electric Bolt Quiver ------------------------------------------------------- + +ACTOR ElectricBolts : Ammo 114 +{ + Game Strife + ConversationID 186, 180, 184 + +FLOORCLIP + Inventory.Amount 20 + Inventory.MaxAmount 50 + Ammo.BackpackAmount 4 + Ammo.BackpackMaxAmount 100 + Inventory.Icon "I_XQRL" + Tag "electric_bolts" // "electric_arrows" in the Teaser + Inventory.PickupMessage "$TXT_ELECTRICBOLTS" + States + { + Spawn: + XQRL A -1 + Stop + } +} + +// Ammo Satchel ------------------------------------------------------------- + +ACTOR AmmoSatchel : Backpack 183 +{ + Game Strife + SpawnID 144 + ConversationID 187, 181, 184 + +FLOORCLIP + Inventory.Icon "I_BKPK" + Tag "Ammo_satchel" // "Back_pack" in the Teaser + Inventory.PickupMessage "$TXT_AMMOSATCHEL" + States + { + Spawn: + BKPK A -1 + Stop + } +} + diff --git a/wadsrc/decorate/strife/strifeitems.txt b/wadsrc/decorate/strife/strifeitems.txt index ede08b0529..464a60b867 100644 --- a/wadsrc/decorate/strife/strifeitems.txt +++ b/wadsrc/decorate/strife/strifeitems.txt @@ -268,6 +268,25 @@ ACTOR OfficersUniform : Inventory 52 } } + +// Flame Thrower Parts ------------------------------------------------------ + +ACTOR FlameThrowerParts : Inventory +{ + Game Strife + ConversationID 191, 185, 189 + +FLOORCLIP + +INVENTORY.INVBAR + Inventory.Icon "I_BFLM" + Tag "flame_thrower_parts" + 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 diff --git a/wadsrc/languages/english-us.txt b/wadsrc/languages/english-us.txt index 5c80816f66..926ee152cc 100644 --- a/wadsrc/languages/english-us.txt +++ b/wadsrc/languages/english-us.txt @@ -966,6 +966,7 @@ TXT_WEAPON_C4 = "WRAITHVERGE ASSEMBLED"; TXT_WEAPON_M2 = "FROST SHARDS"; TXT_WEAPON_M3 = "ARC OF DEATH"; TXT_WEAPON_M4 = "BLOODSCOURGE ASSEMBLED"; +TXT_WEAPONPIECE = "A weapon piece! This is your lucky day!"; TXT_QUIETUS_PIECE = "SEGMENT OF QUIETUS"; TXT_WRAITHVERGE_PIECE = "SEGMENT OF WRAITHVERGE"; TXT_BLOODSCOURGE_PIECE = "SEGMENT OF BLOODSCOURGE"; @@ -1013,9 +1014,27 @@ TXT_SHADOWARMOR = "You picked up the Shadow armor."; TXT_ENVSUIT = "You picked up the Environmental Suit."; TXT_GUARDUNIFORM = "You picked up the Guard Uniform."; TXT_OFFICERSUNIFORM = "You picked up the Officer's Uniform."; +TXT_FTHROWERPARTS = "You picked up the flame thrower parts."; TXT_REPORT = "You picked up the report."; TXT_INFO = "You picked up the info."; TXT_TARGETER = "You picked up the Targeter."; +TXT_COMMUNICATOR = "You picked up the Communicator"; +TXT_COIN = "You picked up the coin."; +TXT_XGOLD = "You picked up %d gold."; +TXT_BEACON = "You picked up the Teleporter Beacon."; +TXT_DEGNINORE = "You picked up the Degnin Ore."; +TXT_SCANNER = "You picked up the scanner."; +TXT_NEEDMAP = "The scanner won't work without a map!\n"; +TXT_PRISONPASS = "You picked up the Prison pass."; + +TXT_STRIFECROSSBOW = "You picked up the crossbow"; +TXT_ASSAULTGUN = "You picked up the assault gun"; +TXT_MMLAUNCHER = "You picked up the mini missile launcher"; +TXT_FLAMER = "You picked up the flame thrower"; +TXT_MAULER = "You picked up the mauler"; +TXT_GLAUNCHER = "You picked up the Grenade launcher"; +TXT_SIGIL = "You picked up the SIGIL."; + TXT_BASEKEY = "You picked up the Base Key."; TXT_GOVSKEY = "You picked up the Govs Key."; @@ -1046,6 +1065,18 @@ TXT_MINEKEY = "You picked up the Mine Key."; TXT_NEWKEY5 = "You picked up the New Key5."; TXT_ORACLEPASS = "You picked up the Oracle Pass."; +TXT_HEGRENADES = "You picked up the HE-Grenade Rounds."; +TXT_PHGRENADES = "You picked up the Phoshorus-Grenade Rounds."; +TXT_CLIPOFBULLETS = "You picked up the clip of bullets."; +TXT_BOXOFBULLETS = "You picked up the box of bullets."; +TXT_MINIMISSILES = "You picked up the mini missiles."; +TXT_CRATEOFMISSILES = "You picked up the crate of missiles."; +TXT_ENERGYPOD = "You picked up the energy pod."; +TXT_ENERGYPACK = "You picked up the energy pack."; +TXT_POISONBOLTS = "You picked up the poison bolts."; +TXT_ELECTRICBOLTS = "You picked up the electric bolts."; +TXT_AMMOSATCHEL = "You picked up the ammo satchel"; + // Random dialogs TXT_RANDOM_PEASANT_01 = "Please don't hurt me."; diff --git a/wadsrc/zdoom.lst b/wadsrc/zdoom.lst index 417b1cac6d..683661b509 100644 --- a/wadsrc/zdoom.lst +++ b/wadsrc/zdoom.lst @@ -240,8 +240,10 @@ actors/shared/debris.txt decorate/shared/debris.txt actors/shared/splashes.txt decorate/shared/splashes.txt actors/doom/deadthings.txt decorate/doom/deadthings.txt +actors/doom/doomammo.txt decorate/doom/doomammo.txt actors/doom/doomarmor.txt decorate/doom/doomarmor.txt actors/doom/doomartifacts.txt decorate/doom/doomartifacts.txt +actors/doom/doomhealth.txt decorate/doom/doomhealth.txt actors/doom/doomkeys.txt decorate/doom/doomkeys.txt actors/doom/doomdecorations.txt decorate/doom/doomdecorations.txt actors/doom/stealthmonsters.txt decorate/doom/stealthmonsters.txt @@ -249,6 +251,7 @@ actors/doom/stealthmonsters.txt decorate/doom/stealthmonsters.txt actors/raven/ravenartifacts.txt decorate/raven/ravenartifacts.txt actors/raven/ravenhealth.txt decorate/raven/ravenhealth.txt +actors/heretic/hereticammo.txt decorate/heretic/hereticammo.txt actors/heretic/hereticarmor.txt decorate/heretic/hereticarmor.txt actors/heretic/hereticartifacts.txt decorate/heretic/hereticartifacts.txt actors/heretic/heretickeys.txt decorate/heretic/heretickeys.txt @@ -259,6 +262,7 @@ actors/hexen/hexenarmor.txt decorate/hexen/hexenarmor.txt actors/hexen/hexendecorations.txt decorate/hexen/hexendecorations.txt actors/hexen/hexenkeys.txt decorate/hexen/hexenkeys.txt actors/hexen/hexenspecialdecs.txt decorate/hexen/hexenspecialdecs.txt +actors/hexen/mana.txt decorate/hexen/mana.txt actors/hexen/puzzleitems.txt decorate/hexen/puzzleitems.txt actors/hexen/scriptprojectiles.txt decorate/hexen/scriptprojectiles.txt actors/hexen/speedboots.txt decorate/hexen/speedboots.txt @@ -268,6 +272,7 @@ actors/strife/merchants.txt decorate/strife/merchants.txt actors/strife/peasants.txt decorate/strife/peasants.txt actors/strife/questitems.txt decorate/strife/questitems.txt actors/strife/ratbuddy.txt decorate/strife/ratbuddy.txt +actors/strife/strifeammo.txt decorate/strife/strifeammo.txt actors/strife/strifearmor.txt decorate/strife/strifearmor.txt actors/strife/strifeitems.txt decorate/strife/strifeitems.txt actors/strife/strifekeys.txt decorate/strife/strifekeys.txt diff --git a/zdoom.vcproj b/zdoom.vcproj index 27b79d3984..4747c554f2 100644 --- a/zdoom.vcproj +++ b/zdoom.vcproj @@ -1,7 +1,7 @@ + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - @@ -2715,6 +2707,14 @@ GeneratePreprocessedFile="0" /> + + + @@ -2737,7 +2737,7 @@ /> - - - @@ -4752,6 +4742,16 @@ Outputs="$(IntDir)/$(InputName).obj" /> + + + @@ -4776,16 +4776,6 @@ Outputs="$(IntDir)/$(InputName).obj" /> - - - @@ -4796,6 +4786,16 @@ Outputs="$(IntDir)/$(InputName).obj" /> + + + @@ -4820,16 +4820,6 @@ Outputs="$(IntDir)\$(InputName).obj" /> - - - @@ -4840,6 +4830,16 @@ Outputs="$(IntDir)\$(InputName).obj" /> + + + @@ -4864,16 +4864,6 @@ Outputs="$(IntDir)\$(InputName).obj" /> - - - @@ -4884,6 +4874,16 @@ Outputs="$(IntDir)\$(InputName).obj" /> + + + @@ -4908,16 +4908,6 @@ Outputs="$(IntDir)\$(InputName).obj" /> - - - @@ -4928,6 +4918,16 @@ Outputs="$(IntDir)\$(InputName).obj" /> + + + @@ -4999,7 +4999,7 @@ /> + + + @@ -5564,14 +5572,6 @@ GeneratePreprocessedFile="0" /> - - - @@ -5593,7 +5593,7 @@ /> - - - - - - - - - - - - - - @@ -6509,7 +6473,7 @@ /> - - - @@ -8728,26 +8684,6 @@ AdditionalOptions="" /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /> - - - - - - - - @@ -8756,14 +8692,6 @@ AdditionalOptions="" /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /I /fmod/api/inc" " /> - - - @@ -8789,7 +8717,7 @@ /> - - @@ -9109,10 +9033,6 @@ /> - - @@ -9148,7 +9068,7 @@ />