diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 52c7ead59..cf2b72e2d 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,3 +1,32 @@ +April 30, 2006 (Changes by Graf Zahl) +- Removed the DCorpseQueue class. It was no longer used and since + the savegames it might have been used in have become incompatible + a long time ago there is no reason to keep it around anymore. +- Fixed: level.maptime must be set to 0 every time a level is loaded. +- Converted a_doomarmor.cpp and a_doomkeys.cpp to DECORATE. +- Replaced all need key messages that weren't already in LANGUAGE with + a LANGUAGE identifier. Also made the messages for Hexen's keys unique + strings instead of constructing them at run time. +- Added: Pickup messages can now handle embedded localized strings - like + the need key messages +- Converted a_hereticdecorations.cpp as well. +- Time to put the capabilities of Zip files to good use: + Converted a_doomdecorations.cpp into a DECORATE lump to test my changes. + (The EXE got 24 kb shorter by that - much more than I expected...) +- Added a 'game' property to DECORATE so that game specific IDs can be + defined. +- Added an #include directive to the DECORATE parser. +- Also removed ABreakableDecoration. Using AActor and the metadata + for the death and burn height gives the same results with less code. +- Removed the ADecoration class. It just inherited from AActor without + adding any functionality of its own. +- Added functions to sc_man to save and restore the full script state. + This allows recursive use of the script parser. +- Changed SC_Open to check for full names in a ZIP first. +- Fixed: Ammo2 no longer gets displayed when it is identical to Ammo1. +- Re-enabled the death camera due to public demand but made it switchable + by a CVAR. + April 29, 2006 (Changes by Graf Zahl) - ZDoom now loads zdoom.pk3 instead of zdoom.wad. - Fixed: StreamSong::SetVolume should check the m_stream pointer. This can diff --git a/src/decorations.cpp b/src/decorations.cpp index e4b68144e..40ffabbd0 100644 --- a/src/decorations.cpp +++ b/src/decorations.cpp @@ -77,44 +77,9 @@ struct FExtraInfo bool ExplosionShooterImmune; }; -class ADecoration : public AActor +class ASimpleProjectile : public AActor { - DECLARE_STATELESS_ACTOR (ADecoration, AActor); -}; -IMPLEMENT_ABSTRACT_ACTOR (ADecoration) - -class ABreakableDecoration : public ADecoration -{ - DECLARE_STATELESS_ACTOR (ABreakableDecoration, ADecoration); -public: - void Serialize (FArchive &arc) - { - Super::Serialize (arc); - arc << DeathHeight << BurnHeight; - } - - void Die (AActor *source, AActor *inflictor) - { - Super::Die (source, inflictor); - flags &= ~MF_CORPSE; // Don't be a corpse - if (DamageType == MOD_FIRE) - { - height = BurnHeight; // Use burn height - } - else - { - height = DeathHeight; // Use death height - } - }; - - fixed_t DeathHeight; - fixed_t BurnHeight; -}; -IMPLEMENT_ABSTRACT_ACTOR (ABreakableDecoration) - -class ASimpleProjectile : public ADecoration -{ - DECLARE_STATELESS_ACTOR (ASimpleProjectile, ADecoration); + DECLARE_STATELESS_ACTOR (ASimpleProjectile, AActor); public: void Serialize (FArchive &arc) { @@ -363,10 +328,32 @@ static void ParseDecorate (void (*process)(FState *, int)) EDefinitionType def; FActorInfo *info; char *typeName; + int recursion=0; // Get actor class name. The A prefix is added automatically. - while (SC_GetString ()) + while (true) { + if (!SC_GetString ()) + { + if (recursion==0) return; + SC_RestoreScriptState(); + recursion--; + continue; + } + if (SC_Compare ("#include")) + { + int lump; + + SC_MustGetString(); + // This is not using SC_Open because it can print a more useful error message when done here + lump = Wads.CheckNumForFullName(sc_String); + if (lump==-1) lump = Wads.CheckNumForName(sc_String); + if (lump==-1) SC_ScriptError("Lump '%s' not found", sc_String); + SC_SaveScriptState(); + SC_OpenLumpNum(lump, sc_String); + recursion++; + continue; + } if (SC_Compare ("Actor")) { ProcessActor (process); @@ -380,7 +367,7 @@ static void ParseDecorate (void (*process)(FState *, int)) } else if (SC_Compare ("Breakable")) { - parent = RUNTIME_CLASS(ABreakableDecoration); + parent = RUNTIME_CLASS(AActor); def = DEF_BreakableDecoration; SC_MustGetString (); } @@ -392,7 +379,7 @@ static void ParseDecorate (void (*process)(FState *, int)) } else { - parent = RUNTIME_CLASS(ADecoration); + parent = RUNTIME_CLASS(AActor); def = DEF_Decoration; } @@ -424,6 +411,10 @@ static void ParseDecorate (void (*process)(FState *, int)) { info->GameFilter |= GAME_Raven; } + else if (SC_Compare ("Strife")) + { + info->GameFilter |= GAME_Strife; + } else if (SC_Compare ("Any")) { info->GameFilter = GAME_Any; @@ -534,15 +525,8 @@ static void ParseDecorate (void (*process)(FState *, int)) info->OwnedStates[extra.DeathStart].Action = A_ScreamAndUnblock; } - if (extra.DeathHeight == 0) - { - ((ABreakableDecoration *)(info->Defaults))->DeathHeight = - ((ABreakableDecoration *)(info->Defaults))->height; - } - else - { - ((ABreakableDecoration *)(info->Defaults))->DeathHeight = extra.DeathHeight; - } + if (extra.DeathHeight == 0) extra.DeathHeight = ((AActor*)(info->Defaults))->height; + info->Class->Meta.SetMetaFixed (AMETA_DeathHeight, extra.DeathHeight); } ((AActor *)(info->Defaults))->DeathState = &info->OwnedStates[extra.DeathStart]; } @@ -580,15 +564,9 @@ static void ParseDecorate (void (*process)(FState *, int)) info->OwnedStates[extra.FireDeathStart].Action = A_ActiveAndUnblock; } - if (extra.BurnHeight == 0) - { - ((ABreakableDecoration *)(info->Defaults))->BurnHeight = - ((ABreakableDecoration *)(info->Defaults))->height; - } - else - { - ((ABreakableDecoration *)(info->Defaults))->BurnHeight = extra.BurnHeight; - } + if (extra.BurnHeight == 0) extra.BurnHeight = ((AActor*)(info->Defaults))->height; + info->Class->Meta.SetMetaFixed (AMETA_BurnHeight, extra.BurnHeight); + ((AActor *)(info->Defaults))->BDeathState = &info->OwnedStates[extra.FireDeathStart]; } diff --git a/src/g_doom/a_doomarmor.cpp b/src/g_doom/a_doomarmor.cpp deleted file mode 100644 index b641276c0..000000000 --- a/src/g_doom/a_doomarmor.cpp +++ /dev/null @@ -1,102 +0,0 @@ -#include "info.h" -#include "a_pickups.h" -#include "d_player.h" -#include "p_local.h" -#include "gstrings.h" -#include "gi.h" - -// Armor bonus -------------------------------------------------------------- - -class AArmorBonus : public ABasicArmorBonus -{ - DECLARE_ACTOR (AArmorBonus, ABasicArmorBonus) -protected: - virtual const char *PickupMessage () - { - return GStrings("GOTARMBONUS"); - } -}; - -FState AArmorBonus::States[] = -{ - S_NORMAL (BON2, 'A', 6, NULL , &States[1]), - S_NORMAL (BON2, 'B', 6, NULL , &States[2]), - S_NORMAL (BON2, 'C', 6, NULL , &States[3]), - S_NORMAL (BON2, 'D', 6, NULL , &States[4]), - S_NORMAL (BON2, 'C', 6, NULL , &States[5]), - S_NORMAL (BON2, 'B', 6, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (AArmorBonus, Doom, 2015, 22) - PROP_RadiusFixed (20) - PROP_HeightFixed (16) - PROP_Flags (MF_SPECIAL|MF_COUNTITEM) - - PROP_BasicArmorBonus_SavePercent (FRACUNIT/3) - PROP_BasicArmorBonus_SaveAmount (1) - PROP_BasicArmorBonus_MaxSaveAmount (200) // deh.MaxArmor - PROP_Inventory_FlagsSet (IF_ALWAYSPICKUP) - - PROP_SpawnState (0) - PROP_Inventory_Icon ("ARM1A0") -END_DEFAULTS - -// Green armor -------------------------------------------------------------- - -class AGreenArmor : public ABasicArmorPickup -{ - DECLARE_ACTOR (AGreenArmor, ABasicArmorPickup) -protected: - virtual const char *PickupMessage () - { - return GStrings("GOTARMOR"); - } -}; - -FState AGreenArmor::States[] = -{ - S_NORMAL (ARM1, 'A', 6, NULL , &States[1]), - S_BRIGHT (ARM1, 'B', 7, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (AGreenArmor, Doom, 2018, 68) - PROP_RadiusFixed (20) - PROP_HeightFixed (16) - PROP_Flags (MF_SPECIAL) - - PROP_BasicArmorPickup_SavePercent (FRACUNIT/3) - PROP_BasicArmorPickup_SaveAmount (100) // 100*deh.GreenAC - - PROP_SpawnState (0) - PROP_Inventory_Icon ("ARM1A0") -END_DEFAULTS - -// Blue armor --------------------------------------------------------------- - -class ABlueArmor : public ABasicArmorPickup -{ - DECLARE_ACTOR (ABlueArmor, ABasicArmorPickup) -protected: - virtual const char *PickupMessage () - { - return GStrings("GOTMEGA"); - } -}; - -FState ABlueArmor::States[] = -{ - S_NORMAL (ARM2, 'A', 6, NULL , &States[1]), - S_BRIGHT (ARM2, 'B', 6, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (ABlueArmor, Doom, 2019, 69) - PROP_RadiusFixed (20) - PROP_HeightFixed (16) - PROP_Flags (MF_SPECIAL) - - PROP_BasicArmorPickup_SavePercent (FRACUNIT/2) - PROP_BasicArmorPickup_SaveAmount (200) // 100*deh.BlueAC - - PROP_SpawnState (0) - PROP_Inventory_Icon ("ARM2A0") -END_DEFAULTS diff --git a/src/g_doom/a_doomdecorations.cpp b/src/g_doom/a_doomdecorations.cpp deleted file mode 100644 index f5b80ccb2..000000000 --- a/src/g_doom/a_doomdecorations.cpp +++ /dev/null @@ -1,403 +0,0 @@ -#include "actor.h" -#include "info.h" - -/********** Decorations ***********/ - -#define _DECCOMMON(cls,ednum,rad,hi,ns,id) \ - class cls : public AActor { DECLARE_STATELESS_ACTOR (cls, AActor) static FState States[ns]; }; \ - IMPLEMENT_ACTOR (cls, Doom, ednum, id) \ - PROP_SpawnState(0) \ - PROP_RadiusFixed(rad) \ - PROP_HeightFixed(hi) - -#define _DECSTARTSTATES(cls,ns) \ - FState cls::States[ns] = - -#define DECID(cls,ednum,id,rad,hi,ns) \ - _DECCOMMON(cls,ednum,rad,hi,ns,id) \ - PROP_Flags (MF_SOLID) \ - END_DEFAULTS \ - _DECSTARTSTATES(cls,ns) - -#define DEC(cls,ednum,rad,hi,ns) \ - DECID(cls,ednum,0,rad,hi,ns) - -#define DECNSOLID(cls,ednum,rad,hi,ns) \ - _DECCOMMON(cls,ednum,rad,hi,ns,0) \ - END_DEFAULTS \ - _DECSTARTSTATES(cls,ns) - -#define DECHANG(cls,ednum,rad,hi,ns) \ - _DECCOMMON(cls,ednum,rad,hi,ns,0) \ - PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY) \ - END_DEFAULTS \ - _DECSTARTSTATES(cls,ns) - -#define DECHANGNS(cls,ednum,rad,hi,ns) \ - _DECCOMMON(cls,ednum,rad,hi,ns,0) \ - PROP_Flags (MF_SPAWNCEILING|MF_NOGRAVITY) \ - END_DEFAULTS \ - _DECSTARTSTATES(cls,ns) - -#define DECNBLOCKID(cls,ednum,id,rad,hi,ns) \ - _DECCOMMON(cls,ednum,rad,hi,ns,id) \ - /*PROP_Flags (MF_NOBLOCKMAP)*/ \ - END_DEFAULTS \ - _DECSTARTSTATES(cls,ns) - -#define SUBCLASS_NS(cls,super,ednum,rad,hi) \ - class cls : public super { DECLARE_STATELESS_ACTOR (cls, super) }; \ - IMPLEMENT_STATELESS_ACTOR (cls, Doom, ednum, 0) \ - PROP_RadiusFixed (rad) \ - PROP_HeightFixed (hi) \ - PROP_FlagsClear (MF_SOLID) \ - END_DEFAULTS - -// Tech lamp --------------------------------------------------------------- - -DEC (ATechLamp, 85, 16, 80, 4) -{ - S_BRIGHT (TLMP, 'A', 4, NULL, &States[1]), - S_BRIGHT (TLMP, 'B', 4, NULL, &States[2]), - S_BRIGHT (TLMP, 'C', 4, NULL, &States[3]), - S_BRIGHT (TLMP, 'D', 4, NULL, &States[0]) -}; - -// Tech lamp 2 ------------------------------------------------------------- - -DEC (ATechLamp2, 86, 16, 60, 4) -{ - S_BRIGHT (TLP2, 'A', 4, NULL, &States[1]), - S_BRIGHT (TLP2, 'B', 4, NULL, &States[2]), - S_BRIGHT (TLP2, 'C', 4, NULL, &States[3]), - S_BRIGHT (TLP2, 'D', 4, NULL, &States[0]) -}; - -// Column ------------------------------------------------------------------ - -DEC (AColumn, 2028, 16, 48, 1) -{ - S_BRIGHT (COLU, 'A', -1, NULL, NULL) -}; - -// Tall green column ------------------------------------------------------- - -DEC (ATallGreenColumn, 30, 16, 52, 1) -{ - S_NORMAL (COL1, 'A', -1, NULL, NULL) -}; - -// Short green column ------------------------------------------------------ - -DEC (AShortGreenColumn, 31, 16, 40, 1) -{ - S_NORMAL (COL2, 'A', -1, NULL, NULL) -}; - -// Tall red column --------------------------------------------------------- - -DEC (ATallRedColumn, 32, 16, 52, 1) -{ - S_NORMAL (COL3, 'A', -1, NULL, NULL) -}; - -// Short red column -------------------------------------------------------- - -DEC (AShortRedColumn, 33, 16, 40, 1) -{ - S_NORMAL (COL4, 'A', -1, NULL, NULL) -}; - -// Skull column ------------------------------------------------------------ - -DEC (ASkullColumn, 37, 16, 40, 1) -{ - S_NORMAL (COL6, 'A', -1, NULL, NULL) -}; - -// Heart column ------------------------------------------------------------ - -DEC (AHeartColumn, 36, 16, 40, 2) -{ - S_NORMAL (COL5, 'A', 14, NULL, &States[1]), - S_NORMAL (COL5, 'B', 14, NULL, &States[0]) -}; - -// Evil eye ---------------------------------------------------------------- - -DEC (AEvilEye, 41, 16, 54, 4) -{ - S_BRIGHT (CEYE, 'A', 6, NULL, &States[1]), - S_BRIGHT (CEYE, 'B', 6, NULL, &States[2]), - S_BRIGHT (CEYE, 'C', 6, NULL, &States[3]), - S_BRIGHT (CEYE, 'B', 6, NULL, &States[0]) -}; - -// Floating skull ---------------------------------------------------------- - -DEC (AFloatingSkull, 42, 16, 26, 3) -{ - S_BRIGHT (FSKU, 'A', 6, NULL, &States[1]), - S_BRIGHT (FSKU, 'B', 6, NULL, &States[2]), - S_BRIGHT (FSKU, 'C', 6, NULL, &States[0]) -}; - -// Torch tree -------------------------------------------------------------- - -DEC (ATorchTree, 43, 16, 56, 1) -{ - S_NORMAL (TRE1, 'A', -1, NULL, NULL) -}; - -// Blue torch -------------------------------------------------------------- - -DEC (ABlueTorch, 44, 16, 68, 4) -{ - S_BRIGHT (TBLU, 'A', 4, NULL, &States[1]), - S_BRIGHT (TBLU, 'B', 4, NULL, &States[2]), - S_BRIGHT (TBLU, 'C', 4, NULL, &States[3]), - S_BRIGHT (TBLU, 'D', 4, NULL, &States[0]) -}; - -// Green torch ------------------------------------------------------------- - -DEC (AGreenTorch, 45, 16, 68, 4) -{ - S_BRIGHT (TGRN, 'A', 4, NULL, &States[1]), - S_BRIGHT (TGRN, 'B', 4, NULL, &States[2]), - S_BRIGHT (TGRN, 'C', 4, NULL, &States[3]), - S_BRIGHT (TGRN, 'D', 4, NULL, &States[0]) -}; - -// Red torch --------------------------------------------------------------- - -DEC (ARedTorch, 46, 16, 68, 4) -{ - S_BRIGHT (TRED, 'A', 4, NULL, &States[1]), - S_BRIGHT (TRED, 'B', 4, NULL, &States[2]), - S_BRIGHT (TRED, 'C', 4, NULL, &States[3]), - S_BRIGHT (TRED, 'D', 4, NULL, &States[0]) -}; - -// Short blue torch -------------------------------------------------------- - -DEC (AShortBlueTorch, 55, 16, 37, 4) -{ - S_BRIGHT (SMBT, 'A', 4, NULL, &States[1]), - S_BRIGHT (SMBT, 'B', 4, NULL, &States[2]), - S_BRIGHT (SMBT, 'C', 4, NULL, &States[3]), - S_BRIGHT (SMBT, 'D', 4, NULL, &States[0]) -}; - -// Short green torch ------------------------------------------------------- - -DEC (AShortGreenTorch, 56, 16, 37, 4) -{ - S_BRIGHT (SMGT, 'A', 4, NULL, &States[1]), - S_BRIGHT (SMGT, 'B', 4, NULL, &States[2]), - S_BRIGHT (SMGT, 'C', 4, NULL, &States[3]), - S_BRIGHT (SMGT, 'D', 4, NULL, &States[0]) -}; - -// Short red torch --------------------------------------------------------- - -DEC (AShortRedTorch, 57, 16, 37, 4) -{ - S_BRIGHT (SMRT, 'A', 4, NULL, &States[1]), - S_BRIGHT (SMRT, 'B', 4, NULL, &States[2]), - S_BRIGHT (SMRT, 'C', 4, NULL, &States[3]), - S_BRIGHT (SMRT, 'D', 4, NULL, &States[0]) -}; - -// Stalagtite -------------------------------------------------------------- - -DEC (AStalagtite, 47, 16, 40, 1) -{ - S_NORMAL (SMIT, 'A', -1, NULL, NULL) -}; - -// Tech pillar ------------------------------------------------------------- - -DEC (ATechPillar, 48, 16, 128, 1) -{ - S_NORMAL (ELEC, 'A', -1, NULL, NULL) -}; - -// Candle stick ------------------------------------------------------------ - -DECNSOLID (ACandlestick, 34, 20, 14, 1) -{ - S_BRIGHT (CAND, 'A', -1, NULL, NULL) -}; - -// Candelabra -------------------------------------------------------------- - -DEC (ACandelabra, 35, 16, 60, 1) -{ - S_BRIGHT (CBRA, 'A', -1, NULL, NULL) -}; - -// Bloody twitch ----------------------------------------------------------- - -DECHANG (ABloodyTwitch, 49, 16, 68, 4) -{ - S_NORMAL (GOR1, 'A', 10, NULL, &States[1]), - S_NORMAL (GOR1, 'B', 15, NULL, &States[2]), - S_NORMAL (GOR1, 'C', 8, NULL, &States[3]), - S_NORMAL (GOR1, 'B', 6, NULL, &States[0]) -}; - -// Meat 2 ------------------------------------------------------------------ - -DECHANG (AMeat2, 50, 16, 84, 1) -{ - S_NORMAL (GOR2, 'A', -1, NULL, NULL) -}; - -// Meat 3 ------------------------------------------------------------------ - -DECHANG (AMeat3, 51, 16, 84, 1) -{ - S_NORMAL (GOR3, 'A', -1, NULL, NULL) -}; - -// Meat 4 ------------------------------------------------------------------ - -DECHANG (AMeat4, 52, 16, 68, 1) -{ - S_NORMAL (GOR4, 'A', -1, NULL, NULL) -}; - -// Meat 5 ------------------------------------------------------------------ - -DECHANG (AMeat5, 53, 16, 52, 1) -{ - S_NORMAL (GOR5, 'A', -1, NULL, NULL) -}; - -// Nonsolid meat ----------------------------------------------------------- - -SUBCLASS_NS (ANonsolidMeat2, AMeat2, 59, 20, 84) -SUBCLASS_NS (ANonsolidMeat3, AMeat3, 61, 20, 52) -SUBCLASS_NS (ANonsolidMeat4, AMeat4, 60, 20, 68) -SUBCLASS_NS (ANonsolidMeat5, AMeat5, 62, 20, 52) - -// Nonsolid bloody twitch -------------------------------------------------- - -SUBCLASS_NS (ANonsolidTwitch, ABloodyTwitch, 63, 20, 68) - -// Head on a stick --------------------------------------------------------- - -DEC (AHeadOnAStick, 27, 16, 56, 1) -{ - S_NORMAL (POL4, 'A', -1, NULL, NULL) -}; - -// Heads (plural!) on a stick ---------------------------------------------- - -DEC (AHeadsOnAStick, 28, 16, 64, 1) -{ - S_NORMAL (POL2, 'A', -1, NULL, NULL) -}; - -// Head candles ------------------------------------------------------------ - -DEC (AHeadCandles, 29, 16, 42, 2) -{ - S_BRIGHT (POL3, 'A', 6, NULL, &States[1]), - S_BRIGHT (POL3, 'B', 6, NULL, &States[0]) -}; - -// Dead on a stick --------------------------------------------------------- - -DEC (ADeadStick, 25, 16, 64, 1) -{ - S_NORMAL (POL1, 'A', -1, NULL, NULL) -}; - -// Still alive on a stick -------------------------------------------------- - -DEC (ALiveStick, 26, 16, 64, 2) -{ - S_NORMAL (POL6, 'A', 6, NULL, &States[1]), - S_NORMAL (POL6, 'B', 8, NULL, &States[0]) -}; - -// Big tree ---------------------------------------------------------------- - -DEC (ABigTree, 54, 32, 108, 1) -{ - S_NORMAL (TRE2, 'A', -1, NULL, NULL) -}; - -// Burning barrel ---------------------------------------------------------- - -DECID (ABurningBarrel, 70, 149, 16, 32, 3) -{ - S_BRIGHT (FCAN, 'A', 4, NULL, &States[1]), - S_BRIGHT (FCAN, 'B', 4, NULL, &States[2]), - S_BRIGHT (FCAN, 'C', 4, NULL, &States[0]) -}; - -// Hanging with no guts ---------------------------------------------------- - -DECHANG (AHangNoGuts, 73, 16, 88, 1) -{ - S_NORMAL (HDB1, 'A', -1, NULL, NULL) -}; - -// Hanging from bottom with no brain --------------------------------------- - -DECHANG (AHangBNoBrain, 74, 16, 88, 1) -{ - S_NORMAL (HDB2, 'A', -1, NULL, NULL) -}; - -// Hanging from top, looking down ------------------------------------------ - -DECHANG (AHangTLookingDown, 75, 16, 64, 1) -{ - S_NORMAL (HDB3, 'A', -1, NULL, NULL) -}; - -// Hanging from top, looking up -------------------------------------------- - -DECHANG (AHangTLookingUp, 77, 16, 64, 1) -{ - S_NORMAL (HDB5, 'A', -1, NULL, NULL) -}; - -// Hanging from top, skully ------------------------------------------------ - -DECHANG (AHangTSkull, 76, 16, 64, 1) -{ - S_NORMAL (HDB4, 'A', -1, NULL, NULL) -}; - -// Hanging from top without a brain ---------------------------------------- - -DECHANG (AHangTNoBrain, 78, 16, 64, 1) -{ - S_NORMAL (HDB6, 'A', -1, NULL, NULL) -}; - -// Colon gibs -------------------------------------------------------------- - -DECNBLOCKID (AColonGibs, 79, 147, 20, 4, 1) -{ - S_NORMAL (POB1, 'A', -1, NULL, NULL) -}; - -// Small pool o' blood ----------------------------------------------------- - -DECNBLOCKID (ASmallBloodPool, 80, 148, 20, 1, 1) -{ - S_NORMAL (POB2, 'A', -1, NULL, NULL) -}; - -// brain stem lying on the ground ------------------------------------------ - -DECNBLOCKID (ABrainStem, 81, 150, 20, 4, 1) -{ - S_NORMAL (BRS1, 'A', -1, NULL, NULL) -}; diff --git a/src/g_doom/a_doomkeys.cpp b/src/g_doom/a_doomkeys.cpp deleted file mode 100644 index af35a1f27..000000000 --- a/src/g_doom/a_doomkeys.cpp +++ /dev/null @@ -1,164 +0,0 @@ -#include "info.h" -#include "a_pickups.h" -#include "d_player.h" -#include "gstrings.h" -#include "p_local.h" -#include "a_keys.h" -#include "gstrings.h" - -IMPLEMENT_STATELESS_ACTOR (ADoomKey, Doom, -1, 0) - PROP_RadiusFixed (20) - PROP_HeightFixed (16) - PROP_Flags (MF_SPECIAL|MF_NOTDMATCH) -END_DEFAULTS - -// Blue key card ------------------------------------------------------------ - -class ABlueCard : public ADoomKey -{ - DECLARE_ACTOR (ABlueCard, ADoomKey) -public: - const char *PickupMessage (); -}; - -FState ABlueCard::States[] = -{ - S_NORMAL (BKEY, 'A', 10, NULL , &States[1]), - S_BRIGHT (BKEY, 'B', 10, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (ABlueCard, Doom, 5, 85) - PROP_SpawnState (0) - PROP_Inventory_Icon ("STKEYS0") -END_DEFAULTS - -const char *ABlueCard::PickupMessage () -{ - return GStrings("GOTBLUECARD"); -} - -// Yellow key card ---------------------------------------------------------- - -class AYellowCard : public ADoomKey -{ - DECLARE_ACTOR (AYellowCard, ADoomKey) -public: - const char *PickupMessage (); -}; - -FState AYellowCard::States[] = -{ - S_NORMAL (YKEY, 'A', 10, NULL , &States[1]), - S_BRIGHT (YKEY, 'B', 10, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (AYellowCard, Doom, 6, 87) - PROP_SpawnState (0) - PROP_Inventory_Icon ("STKEYS1") -END_DEFAULTS - -const char *AYellowCard::PickupMessage () -{ - return GStrings("GOTYELWCARD"); -} - -// Red key card ------------------------------------------------------------- - -class ARedCard : public ADoomKey -{ - DECLARE_ACTOR (ARedCard, ADoomKey) -public: - const char *PickupMessage (); -}; - -FState ARedCard::States[] = -{ - S_NORMAL (RKEY, 'A', 10, NULL , &States[1]), - S_BRIGHT (RKEY, 'B', 10, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (ARedCard, Doom, 13, 86) - PROP_SpawnState (0) - PROP_Inventory_Icon ("STKEYS2") -END_DEFAULTS - -const char *ARedCard::PickupMessage () -{ - return GStrings("GOTREDCARD"); -} - -// Blue skull key ----------------------------------------------------------- - -class ABlueSkull : public ADoomKey -{ - DECLARE_ACTOR (ABlueSkull, ADoomKey) -public: - const char *PickupMessage (); -}; - -FState ABlueSkull::States[] = -{ - S_NORMAL (BSKU, 'A', 10, NULL , &States[1]), - S_BRIGHT (BSKU, 'B', 10, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (ABlueSkull, Doom, 40, 90) - PROP_SpawnState (0) - PROP_Inventory_Icon ("STKEYS3") -END_DEFAULTS - -const char *ABlueSkull::PickupMessage () -{ - return GStrings("GOTBLUESKUL"); -} - -// Yellow skull key --------------------------------------------------------- - -class AYellowSkull : public ADoomKey -{ - DECLARE_ACTOR (AYellowSkull, ADoomKey) -public: - const char *PickupMessage (); -}; - -FState AYellowSkull::States[] = -{ - S_NORMAL (YSKU, 'A', 10, NULL , &States[1]), - S_BRIGHT (YSKU, 'B', 10, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (AYellowSkull, Doom, 39, 88) - PROP_SpawnState (0) - PROP_Inventory_Icon ("STKEYS4") -END_DEFAULTS - -const char *AYellowSkull::PickupMessage () -{ - return GStrings("GOTYELWSKUL"); -} - -// Red skull key ------------------------------------------------------------ - -class ARedSkull : public ADoomKey -{ - DECLARE_ACTOR (ARedSkull, ADoomKey) -public: - const char *PickupMessage (); -}; - -FState ARedSkull::States[] = -{ - S_NORMAL (RSKU, 'A', 10, NULL , &States[1]), - S_BRIGHT (RSKU, 'B', 10, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (ARedSkull, Doom, 38, 89) - PROP_SpawnState (0) - PROP_Inventory_Icon ("STKEYS5") -END_DEFAULTS - -const char *ARedSkull::PickupMessage () -{ - return GStrings("GOTREDSKUL"); -} - diff --git a/src/g_doom/doom_sbar.cpp b/src/g_doom/doom_sbar.cpp index 5338d9500..6049a3dd1 100644 --- a/src/g_doom/doom_sbar.cpp +++ b/src/g_doom/doom_sbar.cpp @@ -634,7 +634,7 @@ private: TAG_DONE); DrBNumberOuter (ammo1->Amount, -67, -4 - BigHeight); ammotop = -4 - BigHeight; - if (ammo2 != NULL) + if (ammo2 != NULL && ammo2!=ammo1) { // Draw secondary ammo just above the primary ammo int y = MIN (-6 - BigHeight, -6 - (ammoIcon != NULL ? ammoIcon->GetHeight() : 0)); diff --git a/src/g_heretic/a_hereticdecorations.cpp b/src/g_heretic/a_hereticdecorations.cpp deleted file mode 100644 index a10efaf2d..000000000 --- a/src/g_heretic/a_hereticdecorations.cpp +++ /dev/null @@ -1,147 +0,0 @@ -#include "actor.h" -#include "info.h" - -/********** Decorations ***********/ - -#define _DECCOMMON(cls,ednum,rad,hi,ns) \ - class cls : public AActor { DECLARE_STATELESS_ACTOR (cls, AActor) static FState States[ns]; }; \ - IMPLEMENT_ACTOR (cls, Heretic, ednum, 0) \ - PROP_SpawnState (0) \ - PROP_RadiusFixed (rad) \ - PROP_HeightFixed (hi) - -#define _DECSTARTSTATES(cls,ns) \ - FState cls::States[ns] = - -#define DECF(cls,ednum,rad,hi,ns,fl) \ - _DECCOMMON(cls,ednum,rad,hi,ns) \ - PROP_Flags (fl) \ - END_DEFAULTS \ - _DECSTARTSTATES(cls,ns) - -#define DEC(cls,ednum,rad,hi,ns) \ - DECF(cls,ednum,rad,hi,ns,MF_SOLID) - -#define DECNSOLID(cls,ednum,rad,hi,ns) \ - _DECCOMMON(cls,ednum,rad,hi,ns) END_DEFAULTS _DECSTARTSTATES(cls,ns) - -#define DECHANG(cls,ednum,rad,hi,ns) \ - DECF(cls,ednum,rad,hi,ns,MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY) - -#define DECHANGNS(cls,ednum,rad,hi,ns) \ - DECF(cls,ednum,rad,hi,ns,MF_SPAWNCEILING|MF_NOGRAVITY) - -#define DECFLOATNS(cls,ednum,rad,hi,ns) \ - DECF(cls,ednum,rad,hi,ns,MF_NOGRAVITY) - -#define DECNBLOCK(cls,ednum,rad,hi,ns) \ - DECF(cls,ednum,rad,hi,ns,MF_NOBLOCKMAP) - -DECHANGNS (ASkullHang70, 17, 20, 70, 1) -{ - S_NORMAL (SKH1, 'A', -1, NULL, NULL) -}; - -DECHANGNS (ASkullHang60, 24, 20, 60, 1) -{ - S_NORMAL (SKH2, 'A', -1, NULL, NULL) -}; - -DECHANGNS (ASkullHang45, 25, 20, 45, 1) -{ - S_NORMAL (SKH3, 'A', -1, NULL, NULL) -}; - -DECHANGNS (ASkullHang35, 26, 20, 35, 1) -{ - S_NORMAL (SKH4, 'A', -1, NULL, NULL) -}; - -DECHANGNS (AChandelier, 28, 20, 60, 3) -{ - S_NORMAL (CHDL, 'A', 4, NULL, &States[1]), - S_NORMAL (CHDL, 'B', 4, NULL, &States[2]), - S_NORMAL (CHDL, 'C', 4, NULL, &States[0]) -}; - -DEC (ASerpentTorch, 27, 12, 54, 3) -{ - S_NORMAL (SRTC, 'A', 4, NULL, &States[1]), - S_NORMAL (SRTC, 'B', 4, NULL, &States[2]), - S_NORMAL (SRTC, 'C', 4, NULL, &States[0]) -}; - -DEC (ASmallPillar, 29, 16, 34, 1) -{ - S_NORMAL (SMPL, 'A', -1, NULL, NULL) -}; - -DEC (AStalagmiteSmall, 37, 8, 32, 1) -{ - S_NORMAL (STGS, 'A', -1, NULL, NULL) -}; - -DEC (AStalagmiteLarge, 38, 12, 64, 1) -{ - S_NORMAL (STGL, 'A', -1, NULL, NULL) -}; - -DECHANG (AStalactiteSmall, 39, 8, 36, 1) -{ - S_NORMAL (STCS, 'A', -1, NULL, NULL) -}; - -DECHANG (AStalactiteLarge, 40, 12, 68, 1) -{ - S_NORMAL (STCL, 'A', -1, NULL, NULL) -}; - - -DEC (AFireBrazier, 76, 16, 44, 8) -{ - S_BRIGHT (KFR1, 'A', 3, NULL, &States[1]), - S_BRIGHT (KFR1, 'B', 3, NULL, &States[2]), - S_BRIGHT (KFR1, 'C', 3, NULL, &States[3]), - S_BRIGHT (KFR1, 'D', 3, NULL, &States[4]), - S_BRIGHT (KFR1, 'E', 3, NULL, &States[5]), - S_BRIGHT (KFR1, 'F', 3, NULL, &States[6]), - S_BRIGHT (KFR1, 'G', 3, NULL, &States[7]), - S_BRIGHT (KFR1, 'H', 3, NULL, &States[0]) -}; - -DEC (ABarrel, 44, 12, 32, 1) -{ - S_NORMAL (BARL, 'A', -1, NULL, NULL) -}; - -DEC (ABrownPillar, 47, 14, 128, 1) -{ - S_NORMAL (BRPL, 'A', -1, NULL, NULL) -}; - -DECHANGNS (AMoss1, 48, 20, 23, 1) -{ - S_NORMAL (MOS1, 'A', -1, NULL, NULL) -}; - -DECHANGNS (AMoss2, 49, 20, 27, 1) -{ - S_NORMAL (MOS2, 'A', -1, NULL, NULL) -}; - -/*DECFLOATNS (AWallTorch, 50, 20, 16, 3)*/ -_DECCOMMON(AWallTorch, 50, 20, 16, 3) -PROP_Flags (MF_NOGRAVITY) -PROP_Flags4 (MF4_FIXMAPTHINGPOS) -END_DEFAULTS -_DECSTARTSTATES(AWallTorch, 3) -{ - S_BRIGHT (WTRH, 'A', 6, NULL, &States[1]), - S_BRIGHT (WTRH, 'B', 6, NULL, &States[2]), - S_BRIGHT (WTRH, 'C', 6, NULL, &States[0]) -}; - -DECHANG (AHangingCorpse, 51, 8, 104, 1) -{ - S_NORMAL (HCOR, 'A', -1, NULL, NULL) -}; diff --git a/src/g_heretic/heretic_sbar.cpp b/src/g_heretic/heretic_sbar.cpp index 5c58fdc97..3eefda5c7 100644 --- a/src/g_heretic/heretic_sbar.cpp +++ b/src/g_heretic/heretic_sbar.cpp @@ -408,6 +408,11 @@ private: // Ammo GetCurrentAmmo (ammo1, ammo2, ammocount1, ammocount2); + if (ammo1==ammo2) + { + // Don't show the same ammo twice. + ammo2=NULL; + } if (oldammo1 != ammo1 || oldammo2 != ammo2 || oldammocount1 != ammocount1 || oldammocount2 != ammocount2) { @@ -600,7 +605,7 @@ private: DTA_HUDRules, HUD_Normal, DTA_CenterBottomOffset, true, TAG_DONE); - if (ammo2 != NULL) + if (ammo2 != NULL && ammo2!=ammo1) { // Draw secondary ammo just above the primary ammo DrINumberOuter (ammo2->Amount, -29, -56); diff --git a/src/g_hexen/hexen_sbar.cpp b/src/g_hexen/hexen_sbar.cpp index bd569d552..83f2617e6 100644 --- a/src/g_hexen/hexen_sbar.cpp +++ b/src/g_hexen/hexen_sbar.cpp @@ -448,6 +448,11 @@ private: 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. diff --git a/src/g_level.cpp b/src/g_level.cpp index acc1f1b56..7d855de0b 100644 --- a/src/g_level.cpp +++ b/src/g_level.cpp @@ -1735,6 +1735,7 @@ void G_DoLoadLevel (int position, bool autosave) } level.starttime = gametic; + level.maptime = 0; G_UnSnapshotLevel (!savegamerestore); // [RH] Restore the state of the level. G_FinishTravel (); if (players[consoleplayer].camera == NULL || diff --git a/src/g_shared/a_action.cpp b/src/g_shared/a_action.cpp index 0c2d812a9..dc55c8578 100644 --- a/src/g_shared/a_action.cpp +++ b/src/g_shared/a_action.cpp @@ -331,45 +331,6 @@ void DCorpsePointer::Serialize (FArchive &arc) arc << Corpse << Count; } -// Pointers to members cannot be assigned to single array elements, -// so this class is deprecated. It exists now only for compatibility with -// old savegames. - -class DCorpseQueue : public DThinker -{ - DECLARE_CLASS (DCorpseQueue, DThinker) - HAS_OBJECT_POINTERS -public: - void Serialize (FArchive &arc); - void Tick (); -protected: - AActor *CorpseQueue[CORPSEQUEUESIZE]; -}; - -IMPLEMENT_CLASS(DCorpseQueue) - -void DCorpseQueue::Serialize (FArchive &arc) -{ - int foo = 0; - int i; - - Super::Serialize (arc); - for (i = 0; i < CORPSEQUEUESIZE; ++i) - arc << CorpseQueue[i]; - arc << foo; -} - -void DCorpseQueue::Tick () -{ - for (int i = 0; i < CORPSEQUEUESIZE; ++i) - { - if (CorpseQueue[i] != NULL) - { - new DCorpsePointer (CorpseQueue[i]); - } - } - Destroy (); -} // throw another corpse on the queue void A_QueueCorpse (AActor *actor) diff --git a/src/g_shared/a_pickups.cpp b/src/g_shared/a_pickups.cpp index 67f8caadd..10cd7fd47 100644 --- a/src/g_shared/a_pickups.cpp +++ b/src/g_shared/a_pickups.cpp @@ -812,6 +812,40 @@ void AInventory::Hide () } } + +//=========================================================================== +// +// +//=========================================================================== + +static void PrintPickupMessage (const char *str) +{ + if (str != NULL) + { + string temp; + + if (strchr (str, '$')) + { + // The message or part of it is from the LANGUAGE lump + string name; + + size_t part1 = strcspn (str, "$"); + temp = string(str, part1); + + size_t part2 = strcspn (str + part1 + 1, "$"); + name = string(str + part1 + 1, part2); + + temp += GStrings(name.GetChars()); + if (str[part1 + 1 + part2] == '$') + { + temp += str + part1 + part2 + 2; + } + str = temp.GetChars(); + } + Printf (PRINT_LOW, "%s\n", str); + } +} + //=========================================================================== // // AInventory :: Touch @@ -845,7 +879,7 @@ void AInventory::Touch (AActor *toucher) { StaticLastMessageTic = gametic; StaticLastMessage = message; - Printf (PRINT_LOW, "%s\n", message); + PrintPickupMessage (message); StatusBar->FlashCrosshair (); } @@ -860,7 +894,7 @@ void AInventory::Touch (AActor *toucher) { PlayPickupSound (toucher); } - } + } // [RH] Execute an attached special (if any) DoPickupSpecial (toucher); diff --git a/src/g_strife/strife_sbar.cpp b/src/g_strife/strife_sbar.cpp index 34d2031d6..63b68e3b1 100644 --- a/src/g_strife/strife_sbar.cpp +++ b/src/g_strife/strife_sbar.cpp @@ -478,7 +478,7 @@ private: DTA_HUDRules, HUD_Normal, DTA_CenterBottomOffset, true, TAG_DONE); - if (ammo2 != NULL) + if (ammo2 != NULL && ammo1!=ammo2) { // Draw secondary ammo just above the primary ammo DrINumberOuter (ammo2->Amount, -23, -48, false, 7); diff --git a/src/r_main.cpp b/src/r_main.cpp index e25821b30..76f67bb1d 100644 --- a/src/r_main.cpp +++ b/src/r_main.cpp @@ -101,6 +101,7 @@ static bool r_showviewer; CVAR (String, r_viewsize, "", CVAR_NOSET) CVAR (Int, r_polymost, 0, 0) +CVAR (Bool, r_deathcamera, false, CVAR_ARCHIVE) fixed_t r_BaseVisibility; fixed_t r_WallVisibility; @@ -993,7 +994,7 @@ void R_SetupFrame (AActor *actor) } if (player != NULL && - ((player->cheats & CF_CHASECAM)/* || (camera->health <= 0)*/) && + ((player->cheats & CF_CHASECAM) || (r_deathcamera && camera->health <= 0)) && (camera->RenderStyle != STYLE_None) && !(camera->renderflags & RF_INVISIBLE) && camera->sprite != 0) // Sprite 0 is always TNT1 diff --git a/src/sc_man.cpp b/src/sc_man.cpp index 8c60743e0..1ce575d0c 100644 --- a/src/sc_man.cpp +++ b/src/sc_man.cpp @@ -62,7 +62,7 @@ char *sc_ScriptsDir = ""; // PRIVATE DATA DEFINITIONS ------------------------------------------------ -static char ScriptName[128]; +static string ScriptName; static char *ScriptBuffer; static char *ScriptPtr; static char *ScriptEndPtr; @@ -86,7 +86,9 @@ static bool Escape=true; void SC_Open (const char *name) { - SC_OpenLumpNum (Wads.GetNumForName (name), name); + int lump = Wads.CheckNumForFullName(name); + if (lump==-1) lump = Wads.GetNumForName(name); + SC_OpenLumpNum(lump, name); } //========================================================================== @@ -102,7 +104,8 @@ void SC_OpenFile (const char *name) { SC_Close (); ScriptSize = M_ReadFile (name, (byte **)&ScriptBuffer); - ExtractFileBase (name, ScriptName); + ScriptName = name; // This is used for error messages so the full file name is preferable + //ExtractFileBase (name, ScriptName); FreeScript = true; SC_PrepareScript (); } @@ -121,7 +124,7 @@ void SC_OpenMem (const char *name, char *buffer, int size) SC_Close (); ScriptSize = size; ScriptBuffer = buffer; - strcpy (ScriptName, name); + ScriptName = name; FreeScript = false; SC_PrepareScript (); } @@ -140,7 +143,7 @@ void SC_OpenLumpNum (int lump, const char *name) ScriptSize = Wads.LumpLength (lump); ScriptBuffer = new char[ScriptSize]; Wads.ReadLump (lump, ScriptBuffer); - strcpy (ScriptName, name); + ScriptName = name; FreeScript = true; SC_PrepareScript (); } @@ -164,6 +167,7 @@ static void SC_PrepareScript (void) AlreadyGot = false; SavedScriptPtr = NULL; CMode = false; + Escape = true; } //========================================================================== @@ -596,7 +600,7 @@ BOOL SC_GetFloat (void) if (*stopper != 0) { I_Error ("SC_GetFloat: Bad numeric constant \"%s\".\n" - "Script %s, Line %d\n", sc_String, ScriptName, sc_Line); + "Script %s, Line %d\n", sc_String, ScriptName.GetChars(), sc_Line); } sc_Number = (int)sc_Float; return true; @@ -747,7 +751,7 @@ void STACK_ARGS SC_ScriptError (const char *message, ...) va_end (arglist); } - I_Error ("Script error, \"%s\" line %d:\n%s\n", ScriptName, + I_Error ("Script error, \"%s\" line %d:\n%s\n", ScriptName.GetChars(), sc_Line, composed.GetChars()); } @@ -764,3 +768,86 @@ static void CheckOpen(void) I_FatalError ("SC_ call before SC_Open()."); } } + + +//========================================================================== +// +// Script state saving +// This allows recursive script execution +// This does not save the last token! +// +//========================================================================== + +struct SavedScript +{ + int sc_Line; + BOOL sc_End; + BOOL sc_Crossed; + BOOL sc_FileScripts; + + string * ScriptName; + char *ScriptBuffer; + char *ScriptPtr; + char *ScriptEndPtr; + bool ScriptOpen; + int ScriptSize; + bool FreeScript; + char *SavedScriptPtr; + int SavedScriptLine; + bool CMode; + bool Escape; +}; + + +static TArray SavedScripts; + +void SC_SaveScriptState() +{ + SavedScript ss; + + ss.sc_Line = sc_Line; + ss.sc_End = sc_End; + ss.sc_Crossed = sc_Crossed; + ss.sc_FileScripts = sc_FileScripts; + ss.ScriptName = ::new string(ScriptName); + ss.ScriptBuffer = ScriptBuffer; + ss.ScriptPtr = ScriptPtr; + ss.ScriptEndPtr = ScriptEndPtr; + ss.ScriptOpen = ScriptOpen; + ss.ScriptSize = ScriptSize; + ss.FreeScript = FreeScript; + ss.SavedScriptPtr = SavedScriptPtr; + ss.SavedScriptLine = SavedScriptLine; + ss.CMode = CMode; + ss.Escape = Escape; + SavedScripts.Push(ss); + ScriptOpen = false; +} + +void SC_RestoreScriptState() +{ + if (SavedScripts.Size()>0) + { + SavedScript ss; + + SavedScripts.Pop(ss); + sc_Line = ss.sc_Line; + sc_End = ss.sc_End; + sc_Crossed = ss.sc_Crossed; + sc_FileScripts = ss.sc_FileScripts; + ScriptName = *ss.ScriptName; + delete ss.ScriptName; + ScriptBuffer = ss.ScriptBuffer; + ScriptPtr = ss.ScriptPtr; + ScriptEndPtr = ss.ScriptEndPtr; + ScriptOpen = ss.ScriptOpen; + ScriptSize = ss.ScriptSize; + FreeScript = ss.FreeScript; + SavedScriptPtr = ss.SavedScriptPtr; + SavedScriptLine = ss.SavedScriptLine; + CMode = ss.CMode; + Escape = ss.Escape; + SavedScripts.ShrinkToFit(); + AlreadyGot = false; + } +} diff --git a/src/sc_man.h b/src/sc_man.h index 7bf6dc9d6..b335b24d5 100644 --- a/src/sc_man.h +++ b/src/sc_man.h @@ -26,6 +26,8 @@ BOOL SC_Compare (const char *text); int SC_MatchString (const char **strings); int SC_MustMatchString (const char **strings); void STACK_ARGS SC_ScriptError (const char *message, ...); +void SC_SaveScriptState(); +void SC_RestoreScriptState(); extern char *sc_String; extern int sc_StringLen; diff --git a/src/thingdef.cpp b/src/thingdef.cpp index 1f1dd504c..7954f5938 100644 --- a/src/thingdef.cpp +++ b/src/thingdef.cpp @@ -2073,6 +2073,42 @@ static void ActorSkipSuper (AActor *defaults, Baggage &bag) ResetActor(defaults, &bag); } +//========================================================================== +// +//========================================================================== +static void ActorGame (AActor *defaults, Baggage &bag) +{ + SC_MustGetString (); + if (SC_Compare ("Doom")) + { + bag.Info->GameFilter |= GAME_Doom; + } + else if (SC_Compare ("Heretic")) + { + bag.Info->GameFilter |= GAME_Heretic; + } + else if (SC_Compare ("Hexen")) + { + bag.Info->GameFilter |= GAME_Hexen; + } + else if (SC_Compare ("Raven")) + { + bag.Info->GameFilter |= GAME_Raven; + } + else if (SC_Compare ("Strife")) + { + bag.Info->GameFilter |= GAME_Strife; + } + else if (SC_Compare ("Any")) + { + bag.Info->GameFilter = GAME_Any; + } + else + { + SC_ScriptError ("Unknown game type %s", sc_String); + } +} + //========================================================================== // //========================================================================== @@ -2890,7 +2926,8 @@ static void InventoryIcon (AInventory *defaults, Baggage &bag) defaults->Icon = TexMan.AddPatch (sc_String, ns_sprites); if (defaults->Icon<=0) { - Printf("Icon '%s' for '%s' not found\n", sc_String, bag.Info->Class->Name+1); + if (bag.Info->GameFilter == GAME_Any || bag.Info->GameFilter & gameinfo.gametype) + Printf("Icon '%s' for '%s' not found\n", sc_String, bag.Info->Class->Name+1); } } } @@ -3239,6 +3276,7 @@ static const ActorProps props[] = { "dropitem", ActorDropItem, RUNTIME_CLASS(AActor) }, { "explosiondamage", ActorExplosionDamage, RUNTIME_CLASS(AActor) }, { "explosionradius", ActorExplosionRadius, RUNTIME_CLASS(AActor) }, + { "game", ActorGame, RUNTIME_CLASS(AActor) }, { "gibhealth", ActorGibHealth, RUNTIME_CLASS(AActor) }, { "greetings", ActorGreetingsState, RUNTIME_CLASS(AActor) }, { "heal", ActorHealState, RUNTIME_CLASS(AActor) }, diff --git a/src/w_wad.cpp b/src/w_wad.cpp index 7bcfe7424..31ddf06e8 100644 --- a/src/w_wad.cpp +++ b/src/w_wad.cpp @@ -126,44 +126,6 @@ FWadCollection Wads; // CODE -------------------------------------------------------------------- -//========================================================================== -// -// strupr -// -// Suprisingly, glibc lacks this -//========================================================================== - -#ifdef NEED_STRUPR -void strupr (char *s) -{ - while (*s) { - *s = toupper (*s); - ++s; - } -} -#endif - -//========================================================================== -// -// filelength -// -// Suprisingly, glibc lacks this -//========================================================================== - -#ifdef NEED_FILELENGTH -int filelength (int handle) -{ - struct stat fileinfo; - - if (fstat (handle, &fileinfo) == -1) - { - close (handle); - I_Error ("Error fstating"); - } - return fileinfo.st_size; -} -#endif - //========================================================================== // // uppercoppy @@ -532,8 +494,7 @@ void FWadCollection::AddFile (const char *filename, const char * data, int lengt strcpy(base, lname); char * dot = strrchr(base,'.'); if (dot) *dot=0; - strupr(base); - strncpy(lump_p->name, base, 8); + uppercopy(lump_p->name, base); lump_p->fullname = copystring(name); lump_p->position = LittleLong(zip_fh->dwFileOffset) + sizeof(FZipLocalHeader) + LittleShort(zip_fh->wFileNameSize); lump_p->size = zip_fh->dwSize; @@ -600,8 +561,7 @@ void FWadCollection::AddFile (const char *filename, const char * data, int lengt singleinfo.FilePos = 0; singleinfo.Size = LittleLong(wadinfo->GetLength()); ExtractFileBase (filename, name); - strupr (name); - strncpy (singleinfo.Name, name, 8); + uppercopy(singleinfo.Name, name); NumLumps++; } Printf ("\n"); diff --git a/tools/makewad/makewad.c b/tools/makewad/makewad.c index 48e069f13..fdb01b42a 100644 --- a/tools/makewad/makewad.c +++ b/tools/makewad/makewad.c @@ -30,6 +30,14 @@ typedef struct } filelump_t; +/* +// appendlump(wadfile, filename): +// +// open the file by filename, write all of its contents to the wadfile +// +// returns: 0 = success, 1 = error +*/ + int appendlump (FILE *wadfile, char *filename) { char readbuf[64*1024]; @@ -45,28 +53,55 @@ int appendlump (FILE *wadfile, char *filename) } while (lumpfile != NULL) { + // try to read a chunk of data readlen = fread (readbuf, 1, sizeof(readbuf), lumpfile); + + // if we reached the end, or hit an error if (readlen < sizeof(readbuf)) { + // if it's an error, if (ferror (lumpfile)) { + // diagnose fprintf (stderr, "Error reading %s: %s\n", filename, strerror(errno)); + // set return code to error ret |= 1; } + // in any case, close the lump file to break the loop fclose (lumpfile); lumpfile = NULL; } + + // write whatever data we have in the buffer + + // if we hit an error (less bytes written than given) if (fwrite (readbuf, 1, readlen, wadfile) < readlen) { + // diagnose fprintf (stderr, "Error writing to wad: %s\n", strerror(errno)); + // close the lump file to break the loop fclose (lumpfile); lumpfile = NULL; + // set return code to error ret |= 1; } + // if the lump file got closed, the loop exits } return ret; } +/* +// appendtozip(zipFile, zipname, filename): +// +// write a given lump file (filename) to the zipFile as zipname +// +// zipFile: zip object to be written to +// +// zipname: name of the file inside the zip +// filename: file to read data from +// +// returns: 0 = success, 1 = error +*/ int appendtozip (zipFile zipfile, const char * zipname, const char *filename) { char *readbuf; @@ -79,11 +114,16 @@ int appendtozip (zipFile zipfile, const char * zipname, const char *filename) time_t currenttime; struct tm * ltime; + // clear zip_inf structure + memset(&zip_inf, 0, sizeof(zip_inf)); + + // try to determine local time time(¤ttime); ltime = localtime(¤ttime); - memset(&zip_inf, 0, sizeof(zip_inf)); + // if succeeded, if (ltime != NULL) { + // put it into the zip_inf structure zip_inf.tmz_date.tm_sec = ltime->tm_sec; zip_inf.tmz_date.tm_min = ltime->tm_min; zip_inf.tmz_date.tm_hour = ltime->tm_hour; @@ -91,17 +131,20 @@ int appendtozip (zipFile zipfile, const char * zipname, const char *filename) zip_inf.tmz_date.tm_mon = ltime->tm_mon; zip_inf.tmz_date.tm_year = ltime->tm_year; } - + // lumpfile = source file lumpfile = fopen (filename, "rb"); if (lumpfile == NULL) { fprintf (stderr, "Could not open %s: %s\n", filename, strerror(errno)); return 1; } + // len = source size fseek (lumpfile, 0, SEEK_END); len = ftell(lumpfile); fseek (lumpfile, 0, SEEK_SET); + + // allocate a buffer for the whole source file readbuf = (char*)malloc(len); if (readbuf == NULL) { @@ -109,15 +152,21 @@ int appendtozip (zipFile zipfile, const char * zipname, const char *filename) fprintf (stderr, "Could not allocate %d bytes\n", len); return 1; } + // read the whole source file into buffer readlen = fread (readbuf, 1, len, lumpfile); fclose(lumpfile); + + // if read less bytes than expected, if (readlen != len) { + // diagnose and return error free (readbuf); fprintf (stderr, "Unable to read %s\n", filename); return 1; } + // file loaded + // create zip entry, giving entry name and zip_inf data if (Z_OK != zipOpenNewFileInZip(zipfile, zipname, &zip_inf, NULL, 0, NULL, 0, NULL, Z_DEFLATED, Z_BEST_COMPRESSION)) { free (readbuf); @@ -125,44 +174,68 @@ int appendtozip (zipFile zipfile, const char * zipname, const char *filename) return 1; } + // write data into zipfile (zipfile remembers the state) if (Z_OK != zipWriteInFileInZip(zipfile, readbuf, (unsigned)len)) { free (readbuf); fprintf (stderr, "Unable to write %s to zip\n", filename); return 1; } + // done writing data free (readbuf); + // close the zip entry if (Z_OK != zipCloseFileInZip(zipfile)) { fprintf (stderr, "Unable to close %s in zip\n", filename); return 1; } + // all done return 0; } +/* +// buildwad(listfile, listfilename, makecmd, makefile) +// +// go through the listfile, either: +// writing dependencies (listfile + lumps with files) into a makefile, +// -or- +// writing lumps into a wad/zip file +// +// listfile: already opened source file +// listfilename: filename, if any - only for the makefile +// makecmd: given as argv[0] - only for the makefile +// makefile: output filename for makefile. determines mode: +// - if specified, we're writing deps into a makefile +// - otherwise, we're writing lumps into a wad/zip +// +*/ int buildwad (FILE *listfile, char *listfilename, char *makecmd, char *makefile) { + // destination we're writing output into - + // one of these: zipFile zipfile = NULL; + FILE *wadfile = NULL; wadinfo_t header; filelump_t directory[MAX_LUMPS]; - char str[256]; - FILE *wadfile = NULL; + char str[256]; // buffer for reading listfile line by line char *pt; char *lumpname, *filename; int lineno = 0; int ret = 0; int i; + // prepare PWAD data strncpy (header.magic, "PWAD", 4); header.infotableofs = 0; header.numlumps = 0; memset (directory, 0, sizeof(directory)); + // read the listfile line by line while (fgets (str, sizeof(str), listfile)) { - lineno++; + lineno++; // counting lines for diagnostic purposes // Strip comments pt = strchr (str, '#'); @@ -189,7 +262,7 @@ int buildwad (FILE *listfile, char *listfilename, char *makecmd, char *makefile) return 1; } - if (!makefile) + if (!makefile) // if it's not a makefile, { int ln = (int)strlen(pt+1); @@ -210,8 +283,9 @@ int buildwad (FILE *listfile, char *listfilename, char *makecmd, char *makefile) } else filename = makefile; - if (!zipfile) + if (!zipfile) // if we didn't end up opening zip, it's a regular file { + // open wadfile wadfile = fopen (filename, makefile ? "w" : "wb"); if (wadfile == NULL) { @@ -229,7 +303,7 @@ int buildwad (FILE *listfile, char *listfilename, char *makecmd, char *makefile) } } continue; - } + } // @ // Everything up to the next whitespace is the lump name lumpname = pt; @@ -247,17 +321,20 @@ int buildwad (FILE *listfile, char *listfilename, char *makecmd, char *makefile) if (*filename == 0) filename = NULL; } - + // must have output selected if (wadfile == NULL && zipfile == NULL) { fprintf (stderr, "Line %d: No wad specified before lumps.\n", lineno); return 1; } + // if we're writing a makefile, if (makefile) { + // and the lump has a filename, if (filename != NULL) { + // add it as a dependency (with quotes, if needed) if (strchr (filename, ' ')) { fprintf (wadfile, " \\\n\t\"%s\"", filename); @@ -268,42 +345,67 @@ int buildwad (FILE *listfile, char *listfilename, char *makecmd, char *makefile) } } } - else + else // not writing a makefile { - if (zipfile == NULL) + if (zipfile == NULL) // must be a wadfile { + // convert lumpname to uppercase for (i = 0; lumpname[i]; ++i) { lumpname[i] = toupper(lumpname[i]); } + // put name into directory entry strncpy (directory[header.numlumps].name, lumpname, 8); + // put filepos into directory entry directory[header.numlumps].filepos = ftell (wadfile); + // if filename given, if (filename != NULL) { + // append data to the wadfile ret |= appendlump (wadfile, filename); } + // put size into directory entry (how many bytes were just written) directory[header.numlumps].size = ftell (wadfile) - directory[header.numlumps].filepos; } - else if (filename != NULL) + else if (filename != NULL) // writing a zip, and filename is non-null { + // convert lumpname to lowercase for (i = 0; lumpname[i]; ++i) { lumpname[i] = tolower(lumpname[i]); } + // add lump data to the zip ret |= appendtozip(zipfile, lumpname, filename); } + // count all lumps header.numlumps++; } - } + + } // end of line-by-line reading + + // the finishing touches: + // - makefile: terminate the line, and write the action line + // - unzipped wad: write the directory at the end, + // and update the header with directory's position + // - zipped wad: just close it + + // if we were writing a plain file, if (wadfile != NULL) { + // if it's makefile, if (makefile) { + // terminate the dependencies line, + // and write the action command fprintf (wadfile, "\n\t%s %s\n", makecmd, listfilename); } - else + else // otherwise, it's plain wad { + // the directory of lumps will be written at the end, + // starting at the current position - put it into the header header.infotableofs = ftell (wadfile); + + // swap endianness, if needed #ifdef WORDS_BIGENDIAN #define SWAP(x) ((((x)>>24)|(((x)>>8) & 0xff00)|(((x)<<8) & 0xff0000)|((x)<<24))) @@ -313,29 +415,37 @@ int buildwad (FILE *listfile, char *listfilename, char *makecmd, char *makefile) directory[i].size = SWAP(directory[i].size); } #endif + // write the whole directory of lumps if (fwrite (directory, sizeof(directory[0]), header.numlumps, wadfile) != header.numlumps) { + // failed to write the whole directory fprintf (stderr, "Error writing to wad: %s\n", strerror(errno)); ret |= 1; } - else + else // success - seek to 0 and rewrite the header, now with offset { + // endianness #ifdef WORDS_BIGENDIAN SWAP(header.infotableofs); SWAP(header.numlumps); #endif + // seek to 0 fseek (wadfile, 0, SEEK_SET); + + // rewrite the header if (fwrite (&header, sizeof(header), 1, wadfile) != 1) { fprintf (stderr, "Error writing to wad: %s\n", strerror(errno)); ret |= 1; } } - } + } // plain wad + fclose (wadfile); - } + } // wadfile!=NULL - wad or makefile else if (zipfile != NULL) { + // zip - just close it zipClose(zipfile, NULL); } return ret; @@ -393,6 +503,6 @@ int __cdecl main (int argc, char **argv) return ret; baduse: - fprintf (stderr, "Usage: makewad [-make makecommand makefile] [listfile]\n"); + fprintf (stderr, "Usage: makewad [-make makefile] [listfile]\n"); return 1; } diff --git a/wadsrc/decorate/decorate.txt b/wadsrc/decorate/decorate.txt new file mode 100644 index 000000000..db44a787b --- /dev/null +++ b/wadsrc/decorate/decorate.txt @@ -0,0 +1,5 @@ +#include "actors/doom/doomarmor.txt" +#include "actors/doom/doomkeys.txt" +#include "actors/doom/doomdecorations.txt" + +#include "actors/heretic/hereticdecorations.txt" diff --git a/wadsrc/decorate/doom/doomarmor.txt b/wadsrc/decorate/doom/doomarmor.txt new file mode 100644 index 000000000..1af1008ca --- /dev/null +++ b/wadsrc/decorate/doom/doomarmor.txt @@ -0,0 +1,66 @@ + +// Armor bonus -------------------------------------------------------------- + +Actor ArmorBonus : BasicArmorBonus 2015 +{ + Game Doom + SpawnID 22 + Radius 20 + Height 16 + Inventory.Pickupmessage "$GOTARMBONUS" + Inventory.Icon "ARM1A0" + Armor.Savepercent 33.33333 + Armor.Saveamount 1 + Armor.Maxsaveamount 200 + +COUNTITEM + +INVENTORY.ALWAYSPICKUP + States + { + Spawn: + BON2 ABCDCB 6 + loop + } +} + +// Green armor -------------------------------------------------------------- + +Actor GreenArmor : BasicArmorPickup 2018 +{ + Game Doom + SpawnID 68 + Radius 20 + Height 16 + Inventory.Pickupmessage "$GOTARMOR" + Inventory.Icon "ARM1A0" + Armor.Savepercent 33.33333 + Armor.Saveamount 100 + States + { + Spawn: + ARM1 A 6 + ARM1 B 7 bright + loop + } +} + +// Blue armor --------------------------------------------------------------- + +Actor BlueArmor : BasicArmorPickup 2019 +{ + Game Doom + SpawnID 69 + Radius 20 + Height 16 + Inventory.Pickupmessage "$GOTMEGA" + Inventory.Icon "ARM2A0" + Armor.Savepercent 50 + Armor.Saveamount 200 + States + { + Spawn: + ARM2 A 6 + ARM2 B 6 bright + loop + } +} + diff --git a/wadsrc/decorate/doom/doomdecorations.txt b/wadsrc/decorate/doom/doomdecorations.txt new file mode 100644 index 000000000..b31098ad2 --- /dev/null +++ b/wadsrc/decorate/doom/doomdecorations.txt @@ -0,0 +1,754 @@ + +// Tech lamp --------------------------------------------------------------- + +ACTOR TechLamp 85 +{ + Game Doom + Radius 16 + Height 80 + +SOLID + States + { + Spawn: + TLMP ABCD 4 BRIGHT + Loop + } +} + +// Tech lamp 2 ------------------------------------------------------------- + +ACTOR TechLamp2 86 +{ + Game Doom + Radius 16 + Height 60 + +SOLID + States + { + Spawn: + TLP2 ABCD 4 BRIGHT + Loop + } +} + +// Column ------------------------------------------------------------------ + +ACTOR Column 2028 +{ + Game Doom + Radius 16 + Height 48 + +SOLID + States + { + Spawn: + COLU A -1 BRIGHT + Stop + } +} + +// Tall green column ------------------------------------------------------- + +ACTOR TallGreenColumn 30 +{ + Game Doom + Radius 16 + Height 52 + +SOLID + States + { + Spawn: + COL1 A -1 + Stop + } +} + +// Short green column ------------------------------------------------------ + +ACTOR ShortGreenColumn 31 +{ + Game Doom + Radius 16 + Height 40 + +SOLID + States + { + Spawn: + COL2 A -1 + Stop + } +} + +// Tall red column --------------------------------------------------------- + +ACTOR TallRedColumn 32 +{ + Game Doom + Radius 16 + Height 52 + +SOLID + States + { + Spawn: + COL3 A -1 + Stop + } +} + +// Short red column -------------------------------------------------------- + +ACTOR ShortRedColumn 33 +{ + Game Doom + Radius 16 + Height 40 + +SOLID + States + { + Spawn: + COL4 A -1 + Stop + } +} + +// Skull column ------------------------------------------------------------ + +ACTOR SkullColumn 37 +{ + Game Doom + Radius 16 + Height 40 + +SOLID + States + { + Spawn: + COL6 A -1 + Stop + } +} + +// Heart column ------------------------------------------------------------ + +ACTOR HeartColumn 36 +{ + Game Doom + Radius 16 + Height 40 + +SOLID + States + { + Spawn: + COL5 AB 14 + Loop + } +} + +// Evil eye ---------------------------------------------------------------- + +ACTOR EvilEye 41 +{ + Game Doom + Radius 16 + Height 54 + +SOLID + States + { + Spawn: + CEYE ABCB 6 BRIGHT + Loop + } +} + +// Floating skull ---------------------------------------------------------- + +ACTOR FloatingSkull 42 +{ + Game Doom + Radius 16 + Height 26 + +SOLID + States + { + Spawn: + FSKU ABC 6 BRIGHT + Loop + } +} + +// Torch tree -------------------------------------------------------------- + +ACTOR TorchTree 43 +{ + Game Doom + Radius 16 + Height 56 + +SOLID + States + { + Spawn: + TRE1 A -1 + Stop + } +} + +// Blue torch -------------------------------------------------------------- + +ACTOR BlueTorch 44 +{ + Game Doom + Radius 16 + Height 68 + +SOLID + States + { + Spawn: + TBLU ABCD 4 BRIGHT + Loop + } +} + +// Green torch ------------------------------------------------------------- + +ACTOR GreenTorch 45 +{ + Game Doom + Radius 16 + Height 68 + +SOLID + States + { + Spawn: + TGRN ABCD 4 BRIGHT + Loop + } +} + +// Red torch --------------------------------------------------------------- + +ACTOR RedTorch 46 +{ + Game Doom + Radius 16 + Height 68 + +SOLID + States + { + Spawn: + TRED ABCD 4 BRIGHT + Loop + } +} + +// Short blue torch -------------------------------------------------------- + +ACTOR ShortBlueTorch 55 +{ + Game Doom + Radius 16 + Height 37 + +SOLID + States + { + Spawn: + SMBT ABCD 4 BRIGHT + Loop + } +} + +// Short green torch ------------------------------------------------------- + +ACTOR ShortGreenTorch 56 +{ + Game Doom + Radius 16 + Height 37 + +SOLID + States + { + Spawn: + SMGT ABCD 4 BRIGHT + Loop + } +} + +// Short red torch --------------------------------------------------------- + +ACTOR ShortRedTorch 57 +{ + Game Doom + Radius 16 + Height 37 + +SOLID + States + { + Spawn: + SMRT ABCD 4 BRIGHT + Loop + } +} + +// Stalagtite -------------------------------------------------------------- + +ACTOR Stalagtite 47 +{ + Game Doom + Radius 16 + Height 40 + +SOLID + States + { + Spawn: + SMIT A -1 + Stop + } +} + +// Tech pillar ------------------------------------------------------------- + +ACTOR TechPillar 48 +{ + Game Doom + Radius 16 + Height 128 + +SOLID + States + { + Spawn: + ELEC A -1 + Stop + } +} + +// Candle stick ------------------------------------------------------------ + +ACTOR Candlestick 34 +{ + Game Doom + Radius 20 + Height 14 + States + { + Spawn: + CAND A -1 BRIGHT + Stop + } +} + +// Candelabra -------------------------------------------------------------- + +ACTOR Candelabra 35 +{ + Game Doom + Radius 16 + Height 60 + +SOLID + States + { + Spawn: + CBRA A -1 BRIGHT + Stop + } +} + +// Bloody twitch ----------------------------------------------------------- + +ACTOR BloodyTwitch 49 +{ + Game Doom + Radius 16 + Height 68 + +SOLID + +NOGRAVITY + +SPAWNCEILING + States + { + Spawn: + GOR1 A 10 + GOR1 B 15 + GOR1 C 8 + GOR1 B 6 + Loop + } +} + +// Meat 2 ------------------------------------------------------------------ + +ACTOR Meat2 50 +{ + Game Doom + Radius 16 + Height 84 + +SOLID + +NOGRAVITY + +SPAWNCEILING + States + { + Spawn: + GOR2 A -1 + Stop + } +} + +// Meat 3 ------------------------------------------------------------------ + +ACTOR Meat3 51 +{ + Game Doom + Radius 16 + Height 84 + +SOLID + +NOGRAVITY + +SPAWNCEILING + States + { + Spawn: + GOR3 A -1 + Stop + } +} + +// Meat 4 ------------------------------------------------------------------ + +ACTOR Meat4 52 +{ + Game Doom + Radius 16 + Height 68 + +SOLID + +NOGRAVITY + +SPAWNCEILING + States + { + Spawn: + GOR4 A -1 + Stop + } +} + +// Meat 5 ------------------------------------------------------------------ + +ACTOR Meat5 53 +{ + Game Doom + Radius 16 + Height 52 + +SOLID + +NOGRAVITY + +SPAWNCEILING + States + { + Spawn: + GOR5 A -1 + Stop + } +} + +// Nonsolid meat ----------------------------------------------------------- + +ACTOR NonsolidMeat2 : Meat2 59 +{ + Game Doom + -SOLID + Radius 20 +} + +ACTOR NonsolidMeat3 : Meat3 61 +{ + Game Doom + -SOLID + Radius 20 +} + +ACTOR NonsolidMeat4 : Meat4 60 +{ + Game Doom + -SOLID + Radius 20 +} + +ACTOR NonsolidMeat5 : Meat5 62 +{ + Game Doom + -SOLID + Radius 20 +} + +// Nonsolid bloody twitch -------------------------------------------------- + +ACTOR NonsolidTwitch : BloodyTwitch 63 +{ + Game Doom + -SOLID + Radius 20 +} + +// Head on a stick --------------------------------------------------------- + +ACTOR HeadOnAStick 27 +{ + Game Doom + Radius 16 + Height 56 + +SOLID + States + { + Spawn: + POL4 A -1 + Stop + } +} + +// Heads (plural!) on a stick ---------------------------------------------- + +ACTOR HeadsOnAStick 28 +{ + Game Doom + Radius 16 + Height 64 + +SOLID + States + { + Spawn: + POL2 A -1 + Stop + } +} + +// Head candles ------------------------------------------------------------ + +ACTOR HeadCandles 29 +{ + Game Doom + Radius 16 + Height 42 + +SOLID + States + { + Spawn: + POL3 AB 6 BRIGHT + Loop + } +} + +// Dead on a stick --------------------------------------------------------- + +ACTOR DeadStick 25 +{ + Game Doom + Radius 16 + Height 64 + +SOLID + States + { + Spawn: + POL1 A -1 + Stop + } +} + +// Still alive on a stick -------------------------------------------------- + +ACTOR LiveStick 26 +{ + Game Doom + Radius 16 + Height 64 + +SOLID + States + { + Spawn: + POL6 A 6 + POL6 B 8 + Loop + } +} + +// Big tree ---------------------------------------------------------------- + +ACTOR BigTree 54 +{ + Game Doom + Radius 32 + Height 108 + +SOLID + States + { + Spawn: + TRE2 A -1 + Stop + } +} + +// Burning barrel ---------------------------------------------------------- + +ACTOR BurningBarrel 70 +{ + Game Doom + SpawnID 149 + Radius 16 + Height 32 + +SOLID + States + { + Spawn: + FCAN ABC 4 BRIGHT + Loop + } +} + +// Hanging with no guts ---------------------------------------------------- + +ACTOR HangNoGuts 73 +{ + Game Doom + Radius 16 + Height 88 + +SOLID + +NOGRAVITY + +SPAWNCEILING + States + { + Spawn: + HDB1 A -1 + Stop + } +} + +// Hanging from bottom with no brain --------------------------------------- + +ACTOR HangBNoBrain 74 +{ + Game Doom + Radius 16 + Height 88 + +SOLID + +NOGRAVITY + +SPAWNCEILING + States + { + Spawn: + HDB2 A -1 + Stop + } +} + +// Hanging from top, looking down ------------------------------------------ + +ACTOR HangTLookingDown 75 +{ + Game Doom + Radius 16 + Height 64 + +SOLID + +NOGRAVITY + +SPAWNCEILING + States + { + Spawn: + HDB3 A -1 + Stop + } +} + +// Hanging from top, looking up -------------------------------------------- + +ACTOR HangTLookingUp 77 +{ + Game Doom + Radius 16 + Height 64 + +SOLID + +NOGRAVITY + +SPAWNCEILING + States + { + Spawn: + HDB5 A -1 + Stop + } +} + +// Hanging from top, skully ------------------------------------------------ + +ACTOR HangTSkull 76 +{ + Game Doom + Radius 16 + Height 64 + +SOLID + +NOGRAVITY + +SPAWNCEILING + States + { + Spawn: + HDB4 A -1 + Stop + } +} + +// Hanging from top without a brain ---------------------------------------- + +ACTOR AHangTNoBrain 78 +{ + Game Doom + Radius 16 + Height 64 + +SOLID + +NOGRAVITY + +SPAWNCEILING + States + { + Spawn: + HDB6 A -1 + Stop + } +} + +// Colon gibs -------------------------------------------------------------- + +ACTOR ColonGibs 79 +{ + Game Doom + SpawnID 147 + Radius 20 + Height 4 + States + { + Spawn: + POB1 A -1 + Stop + } +} + +// Small pool o' blood ----------------------------------------------------- + +ACTOR SmallBloodPool 80 +{ + Game Doom + SpawnID 148 + Radius 20 + Height 1 + States + { + Spawn: + POB2 A -1 + Stop + } +} + +// brain stem lying on the ground ------------------------------------------ + +ACTOR BrainStem 81 +{ + Game Doom + SpawnID 150 + Radius 20 + Height 4 + States + { + Spawn: + BRS1 A -1 + Stop + } +} + diff --git a/wadsrc/decorate/doom/doomkeys.txt b/wadsrc/decorate/doom/doomkeys.txt new file mode 100644 index 000000000..9072582d1 --- /dev/null +++ b/wadsrc/decorate/doom/doomkeys.txt @@ -0,0 +1,110 @@ + +Actor DoomKey : Key +{ + Radius 20 + Height 16 + +NOTDMATCH +} + +// Blue key card ------------------------------------------------------------ + +Actor BlueCard : DoomKey 5 +{ + Game Doom + SpawnID 85 + Inventory.Pickupmessage "$GOTBLUECARD" + Inventory.Icon "STKEYS0" + States + { + Spawn: + BKEY A 10 + BKEY B 10 bright + loop + } +} + +// Yellow key card ---------------------------------------------------------- + +Actor YellowCard : DoomKey 6 +{ + Game Doom + SpawnID 87 + Inventory.Pickupmessage "$GOTYELWCARD" + Inventory.Icon "STKEYS1" + States + { + Spawn: + YKEY A 10 + YKEY B 10 bright + loop + } +} + +// Red key card ------------------------------------------------------------- + +Actor RedCard : DoomKey 13 +{ + Game Doom + SpawnID 86 + Inventory.Pickupmessage "$GOTREDCARD" + Inventory.Icon "STKEYS2" + States + { + Spawn: + RKEY A 10 + RKEY B 10 bright + loop + } +} + +// Blue skull key ----------------------------------------------------------- + +Actor BlueSkull : DoomKey 40 +{ + Game Doom + SpawnID 90 + Inventory.Pickupmessage "$GOTBLUESKUL" + Inventory.Icon "STKEYS3" + States + { + Spawn: + BSKU A 10 + BSKU B 10 bright + loop + } +} + +// Yellow skull key --------------------------------------------------------- + +Actor YellowSkull : DoomKey 39 +{ + Game Doom + SpawnID 88 + Inventory.Pickupmessage "$GOTYELWSKUL" + Inventory.Icon "STKEYS4" + States + { + Spawn: + YSKU A 10 + YSKU B 10 bright + loop + } +} + +// Red skull key ------------------------------------------------------------ + +Actor RedSkull : DoomKey 38 +{ + Game Doom + SpawnID 89 + Inventory.Pickupmessage "$GOTREDSKUL" + Inventory.Icon "STKEYS5" + States + { + Spawn: + RSKU A 10 + RSKU B 10 bright + loop + } +} + diff --git a/wadsrc/decorate/heretic/hereticdecorations.txt b/wadsrc/decorate/heretic/hereticdecorations.txt new file mode 100644 index 000000000..c68e22739 --- /dev/null +++ b/wadsrc/decorate/heretic/hereticdecorations.txt @@ -0,0 +1,266 @@ +ACTOR SkullHang70 17 +{ + Game Heretic + Radius 20 + Height 70 + +SPAWNCEILING + +NOGRAVITY + States + { + Spawn: + SKH1 A -1 + Stop + } +} + +ACTOR SkullHang60 24 +{ + Game Heretic + Radius 20 + Height 60 + +SPAWNCEILING + +NOGRAVITY + States + { + Spawn: + SKH2 A -1 + Stop + } +} + +ACTOR SkullHang45 25 +{ + Game Heretic + Radius 20 + Height 45 + +SPAWNCEILING + +NOGRAVITY + States + { + Spawn: + SKH3 A -1 + Stop + } +} + +ACTOR SkullHang35 26 +{ + Game Heretic + Radius 20 + Height 35 + +SPAWNCEILING + +NOGRAVITY + States + { + Spawn: + SKH4 A -1 + Stop + } +} + +ACTOR Chandelier 28 +{ + Game Heretic + Radius 20 + Height 60 + +SPAWNCEILING + +NOGRAVITY + States + { + Spawn: + CHDL ABC 4 + Loop + } +} + +ACTOR SerpentTorch 27 +{ + Game Heretic + Radius 12 + Height 54 + +SOLID + States + { + Spawn: + SRTC ABC 4 + Loop + } +} + +ACTOR SmallPillar 29 +{ + Game Heretic + Radius 16 + Height 34 + +SOLID + States + { + Spawn: + SMPL A -1 + Stop + } +} + +ACTOR StalagmiteSmall 37 +{ + Game Heretic + Radius 8 + Height 32 + +SOLID + States + { + Spawn: + STGS A -1 + Stop + } +} + +ACTOR StalagmiteLarge 38 +{ + Game Heretic + Radius 12 + Height 64 + +SOLID + States + { + Spawn: + STGL A -1 + Stop + } +} + +ACTOR StalactiteSmall 39 +{ + Game Heretic + Radius 8 + Height 36 + +SOLID + +SPAWNCEILING + +NOGRAVITY + States + { + Spawn: + STCS A -1 + Stop + } +} + +ACTOR StalactiteLarge 40 +{ + Game Heretic + Radius 12 + Height 68 + +SOLID + +SPAWNCEILING + +NOGRAVITY + States + { + Spawn: + STCL A -1 + Stop + } +} + +ACTOR FireBrazier 76 +{ + Game Heretic + Radius 16 + Height 44 + +SOLID + States + { + Spawn: + KFR1 ABCDEFGH 3 Bright + Loop + } +} + +ACTOR Barrel 44 +{ + Game Heretic + Radius 12 + Height 32 + +SOLID + States + { + Spawn: + BARL A -1 + Stop + } +} + +ACTOR BrownPillar 47 +{ + Game Heretic + Radius 14 + Height 128 + +SOLID + States + { + Spawn: + BRPL A -1 + Stop + } +} + +ACTOR Moss1 48 +{ + Game Heretic + Radius 20 + Height 23 + +SPAWNCEILING + +NOGRAVITY + States + { + Spawn: + MOS1 A -1 + Stop + } +} + +ACTOR Moss2 49 +{ + Game Heretic + Radius 20 + Height 27 + +SPAWNCEILING + +NOGRAVITY + States + { + Spawn: + MOS2 A -1 + Stop + } +} + +ACTOR WallTorch 50 +{ + Game Heretic + Radius 20 + Height 16 + +NOGRAVITY + +FIXMAPTHINGPOS + States + { + Spawn: + WTRH ABC 6 Bright + Loop + } +} + +ACTOR HangingCorpse 51 +{ + Game Heretic + Radius 8 + Height 104 + +SOLID + +SPAWNCEILING + +NOGRAVITY + States + { + Spawn: + HCOR A -1 + Stop + } +} + diff --git a/wadsrc/languages/english-us.txt b/wadsrc/languages/english-us.txt index 9deb1bd60..7bc1d68fa 100644 --- a/wadsrc/languages/english-us.txt +++ b/wadsrc/languages/english-us.txt @@ -85,6 +85,12 @@ PD_YELLOWO = "You need a yellow key to activate this object"; PD_BLUEK = "You need a blue key to open this door"; PD_REDK = "You need a red key to open this door"; PD_YELLOWK = "You need a yellow key to open this door"; +PD_BLUECO = "You need a blue card to activate this object"; +PD_REDCO = "You need a red card to activate this object"; +PD_YELLOWCO = "You need a yellow card to activate this object"; +PD_BLUESO = "You need a blue skull to activate this object"; +PD_REDSO = "You need a red skull to activate this object"; +PD_YELLOWSO = "You need a yellow skull to activate this object"; GGSAVED = "game saved."; HUSTR_MSGU = "[Message unsent]"; @@ -529,8 +535,12 @@ PD_BLUES = "You need a blue skull to open this door"; PD_REDS = "You need a red skull to open this door"; PD_YELLOWS = "You need a yellow skull to open this door"; PD_ANY = "Any key will open this door"; +PD_ANYOBJ = "Any key will activate this object"; PD_ALL3 = "You need all three keys to open this door"; +PD_ALL3O = "You need all three keys to activate this object"; PD_ALL6 = "You need all six keys to open this door"; +PD_ALL6O = "You need all six keys to activate this object"; +PD_ALLKEYS = "You need all the keys"; // Gameflow messages TXT_FRAGLIMIT = "Fraglimit hit."; @@ -895,6 +905,18 @@ TXT_KEY_HORN = "HORN KEY"; TXT_KEY_SWAMP = "SWAMP KEY"; TXT_KEY_CASTLE = "CASTLE KEY"; +TXT_NEED_KEY_STEEL = "You need the STEEL KEY"; +TXT_NEED_KEY_CAVE = "You need the CAVE KEY"; +TXT_NEED_KEY_AXE = "You need the AXE KEY"; +TXT_NEED_KEY_FIRE = "You need the FIRE KEY"; +TXT_NEED_KEY_EMERALD = "You need the EMERALD KEY"; +TXT_NEED_KEY_DUNGEON = "You need the DUNGEON KEY"; +TXT_NEED_KEY_SILVER = "You need the SILVER KEY"; +TXT_NEED_KEY_RUSTED = "You need the RUSTED KEY"; +TXT_NEED_KEY_HORN = "You need the HORN KEY"; +TXT_NEED_KEY_SWAMP = "You need the SWAMP KEY"; +TXT_NEED_KEY_CASTLE = "You need the CASTLE KEY"; + // Artifacts TXT_ARTIINVULNERABILITY2 = "ICON OF THE DEFENDER"; @@ -948,6 +970,21 @@ TXT_QUIETUS_PIECE = "SEGMENT OF QUIETUS"; TXT_WRAITHVERGE_PIECE = "SEGMENT OF WRAITHVERGE"; TXT_BLOODSCOURGE_PIECE = "SEGMENT OF BLOODSCOURGE"; +// Strife locks + +TXT_NEEDKEY = "You don't have the key"; +TXT_NEED_PASSCARD = "You need a passcard"; +TXT_NEED_PASSCARD_DOOR = "You need a pass card key to open this door"; +TXT_NEED_IDCARD = "You need an ID card" +TXT_NEED_PRISONKEY = "You don't have the key to the prison"; +TXT_NEED_HANDPRINT = "Hand print not on file"; +TXT_NEED_GOLDKEY = "You need the Gold Key"; +TXT_NEED_IDBADGE = "You need an ID Badge"; +TXT_NEED_IDBADGE_DOOR = "You need an ID Badge to open this door"; +TXT_NEED_SILVERKEY = "You need the Silver Key"; +TXT_NEED_BRASSKEY = "You need the Brass Key"; +TXT_NEED_REDCRYSTAL = "You need the Red Crystal"; +TXT_NEED_BLUECRYSTAL = "You need the Blue Crystal"; // Bloodbath announcer diff --git a/wadsrc/languages/italian.txt b/wadsrc/languages/italian.txt index fe961b180..1b8f6a0fb 100644 --- a/wadsrc/languages/italian.txt +++ b/wadsrc/languages/italian.txt @@ -547,6 +547,14 @@ PD_YELLOWS = "ti serve una chiave-teschio gialla per aprire questa porta"; PD_ANY = "Una chiave qualunque aprira' questa porta"; PD_ALL3 = "Ti servono tutte le tre chiavi per aprire questa porta"; PD_ALL6 = "Ti servono tutte le sei chiavi per aprire questa porta"; +PD_ALL3O = "Ti servono tutte le tre chiavi per attivare questo oggetto "; +PD_ALL6O = "Ti servono tutte le sei chiavi per attivare questo oggetto "; +PD_BLUECO = "ti serve una tessera blu per attivare questo oggetto "; +PD_REDCO = "ti serve una tessera rossa per attivare questo oggetto "; +PD_YELLOWCO = "ti serve una tessera gialla per attivare questo oggetto "; +PD_BLUESO = "ti serve una chiave-teschio blu per attivare questo oggetto "; +PD_REDSO = "ti serve una chiave-teschio rossa per attivare questo oggetto "; +PD_YELLOWSO = "ti serve una chiave-teschio gialla per attivare questo oggetto "; // Gameflow messages TXT_FRAGLIMIT = "Fraglimit raggiunto."; diff --git a/wadsrc/lockdefs.txt b/wadsrc/lockdefs.txt index d0998f0d6..d16d68e47 100644 --- a/wadsrc/lockdefs.txt +++ b/wadsrc/lockdefs.txt @@ -7,7 +7,7 @@ Lock 1 Doom { RedCard Message "$PD_REDC" - RemoteMessage "You need a red card to activate this object" + RemoteMessage "$PD_REDCO" Mapcolor 255 0 0 } @@ -16,7 +16,7 @@ Lock 2 Doom { BlueCard Message "$PD_BLUEC" - RemoteMessage "You need a blue card to activate this object" + RemoteMessage "$PD_BLUECO" Mapcolor 0 0 255 } @@ -25,7 +25,7 @@ Lock 3 Doom { YellowCard Message "$PD_YELLOWC" - RemoteMessage "You need a yellow card to activate this object" + RemoteMessage "$PD_YELLOWCO" Mapcolor 255 255 0 } @@ -34,7 +34,7 @@ Lock 4 Doom { RedSkull Message "$PD_REDS" - RemoteMessage "You need a red skull to activate this object" + RemoteMessage "$PD_REDSO" Mapcolor 255 0 0 } @@ -43,7 +43,7 @@ Lock 5 Doom { BlueSkull Message "$PD_BLUES" - RemoteMessage "You need a blue skull to activate this object" + RemoteMessage "$PD_BLUESO" Mapcolor 0 0 255 } @@ -52,7 +52,7 @@ Lock 6 Doom { YellowSkull Message "$PD_YELLOWS" - RemoteMessage "You need a yellow skull to activate this object" + RemoteMessage "$PD_YELLOWSO" Mapcolor 255 255 0 } @@ -112,15 +112,15 @@ Lock 134 Doom Lock 100 { - Message "Any key will open this door" - RemoteMessage "Any key will activate this object" + Message "$PD_ANY" + RemoteMessage "$PD_ANYOBJ" Mapcolor 128 128 255 } Lock 228 { - Message "Any key will open this door" - RemoteMessage "Any key will activate this object" + Message "$PD_ANY" + RemoteMessage "$PD_ANYOBJ" Mapcolor 128 128 255 } @@ -130,7 +130,7 @@ Lock 229 Doom Any { YellowCard YellowSkull KeyYellow} Any { RedCard RedSkull KeyGreen} Message "$PD_ALL3" - RemoteMessage "You need all three keys to activate this object" + RemoteMessage "$PD_ALL3O" } Lock 101 Doom @@ -142,7 +142,7 @@ Lock 101 Doom RedCard RedSkull Message "$PD_ALL6" - RemoteMessage "You need all six keys to activate this object" + RemoteMessage "$PD_ALL6O" } // @@ -203,7 +203,7 @@ Lock 229 Heretic KeyYellow KeyBlue Message "$PD_ALL3" - RemoteMessage "You need all three keys to activate this object" + RemoteMessage "$PD_ALL3O" } Lock 101 Heretic @@ -212,7 +212,7 @@ Lock 101 Heretic KeyYellow KeyBlue Message "$PD_ALL3" - RemoteMessage "You need all three keys to activate this object" + RemoteMessage "$PD_ALL3O" } @@ -223,7 +223,7 @@ Lock 101 Heretic Lock 1 Hexen { KeySteel - Message "You need the $TXT_KEY_STEEL" + Message "$TXT_NEED_KEY_STEEL" Mapcolor 150 150 150 } @@ -231,7 +231,7 @@ Lock 1 Hexen Lock 2 Hexen { KeyCave - Message "You need the $TXT_KEY_CAVE" + Message "$TXT_NEED_KEY_CAVE" Mapcolor 255 218 0 } @@ -239,7 +239,7 @@ Lock 2 Hexen Lock 3 Hexen { KeyAxe - Message "You need the $TXT_KEY_AXE" + Message "$TXT_NEED_KEY_AXE" Mapcolor 64 64 255 } @@ -247,7 +247,7 @@ Lock 3 Hexen Lock 4 Hexen { KeyFire - Message "You need the $TXT_KEY_FIRE" + Message "$TXT_NEED_KEY_FIRE" Mapcolor 255 128 0 } @@ -255,7 +255,7 @@ Lock 4 Hexen Lock 5 Hexen { KeyEmerald - Message "You need the $TXT_KEY_EMERALD" + Message "$TXT_NEED_KEY_EMERALD" Mapcolor 0 255 0 } @@ -263,7 +263,7 @@ Lock 5 Hexen Lock 6 Hexen { KeyDungeon - Message "You need the $TXT_KEY_DUNGEON" + Message "$TXT_NEED_KEY_DUNGEON" Mapcolor 47 151 255 } @@ -271,7 +271,7 @@ Lock 6 Hexen Lock 7 Hexen { KeySilver - Message "You need the $TXT_KEY_SILVER" + Message "$TXT_NEED_KEY_SILVER" Mapcolor 154 152 188 } @@ -279,7 +279,7 @@ Lock 7 Hexen Lock 8 Hexen { KeyRusted - Message "You need the $TXT_KEY_RUSTED" + Message "$TXT_NEED_KEY_RUSTED" Mapcolor 156 76 0 } @@ -287,7 +287,7 @@ Lock 8 Hexen Lock 9 Hexen { KeyHorn - Message "You need the $TXT_KEY_HORN" + Message "$TXT_NEED_KEY_HORN" Mapcolor 255 218 0 } @@ -295,7 +295,7 @@ Lock 9 Hexen Lock 10 Hexen { KeySwamp - Message "You need the $TXT_KEY_SWAMP" + Message "$TXT_NEED_KEY_SWAMP" Mapcolor 64 255 64 } @@ -303,7 +303,7 @@ Lock 10 Hexen Lock 11 Hexen { KeyCastle - Message "You need the $TXT_KEY_CASTLE" + Message "$TXT_NEED_KEY_CASTLE" Mapcolor 255 64 64 } @@ -321,7 +321,7 @@ Lock 101 Hexen KeyHorn KeySwamp KeyCastle - Message "You need all the keys" + Message "$PD_ALLKEYS" } Lock 229 Hexen @@ -337,7 +337,7 @@ Lock 229 Hexen KeyHorn KeySwamp KeyCastle - Message "You need all the keys" + Message "$PD_ALLKEYS" } @@ -354,7 +354,7 @@ Lock 1 Strife Lock 2 Strife { GovsKey - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } @@ -362,8 +362,8 @@ Lock 2 Strife Lock 3 Strife { Passcard - RemoteMessage "You need a passcard" - Message "You need a pass card key to open this door" + RemoteMessage "$TXT_NEED_PASSCARD" + Message "$TXT_NEED_PASSCARD_DOOR" Mapcolor 128 266 150 } @@ -371,7 +371,7 @@ Lock 3 Strife Lock 4 Strife { IDBadge - Message "You need an ID card" + Message "$TXT_NEED_IDCARD" Mapcolor 255 128 0 } @@ -379,7 +379,7 @@ Lock 4 Strife Lock 5 Strife { PrisonKey - Message "You don't have the key to the prison" + Message "$TXT_NEED_PRISONKEY" Mapcolor 0 255 0 } @@ -387,7 +387,7 @@ Lock 5 Strife Lock 6 Strife { SeveredHand - Message "Hand print not on file" + Message "$TXT_NEED_HANDPRINT" Mapcolor 255 151 100 } @@ -395,7 +395,7 @@ Lock 6 Strife Lock 7 Strife { Power1Key - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } @@ -403,7 +403,7 @@ Lock 7 Strife Lock 8 Strife { Power2Key - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } @@ -411,7 +411,7 @@ Lock 8 Strife Lock 9 Strife { Power3Key - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } @@ -419,7 +419,7 @@ Lock 9 Strife Lock 10 Strife { GoldKey - Message "You need the Gold Key" + Message "$TXT_NEED_GOLDKEY" Mapcolor 255 200 0 } @@ -427,134 +427,134 @@ Lock 10 Strife Lock 11 Strife { IDCard - RemoteMessage "You need an ID badge" - Message "You need an ID badge to open this door" + RemoteMessage "$TXT_NEED_IDBADGE" + Message "$TXT_NEED_IDBADGE_DOOR" Mapcolor 200 0 0 } Lock 12 Strife { SilverKey - Message "You need a Silver Key" + Message "$TXT_NEED_SILVERKEY" Mapcolor 150 150 150 } Lock 13 Strife { OracleKey - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } Lock 14 Strife { MilitaryID - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } Lock 15 Strife { OrderKey - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } Lock 16 Strife { WarehouseKey - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } Lock 17 Strife { BrassKey - Message "You need a brass key" + Message "$TXT_NEED_BRASSKEY" Mapcolor 150 75 0 } Lock 18 Strife { RedCrystalKey - Message "You need the Red Crystal" + Message "$TXT_NEED_REDCRYSTAL" Mapcolor 150 150 150 } Lock 19 Strife { BlueCrystalKey - Message "You need the Blue Crystal" + Message "$TXT_NEED_BLUECRYSTAL" Mapcolor 150 150 150 } Lock 20 Strife { ChapelKey - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } Lock 21 Strife { CatacombKey - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } Lock 22 Strife { SecurityKey - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } Lock 23 Strife { CoreKey - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } Lock 24 Strife { MaulerKey - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } Lock 25 Strife { FactoryKey - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } Lock 26 Strife { MineKey - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } Lock 27 Strife { NewKey5 - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } Lock 50 Strife { PrisonPass - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } Lock 51 Strife { OraclePass - Message "You don't have the key" + Message "$TXT_NEEDKEY" Mapcolor 150 150 150 } diff --git a/wadsrc/wadsrc.vcproj b/wadsrc/wadsrc.vcproj index ebca61755..c0d6d9e1b 100644 --- a/wadsrc/wadsrc.vcproj +++ b/wadsrc/wadsrc.vcproj @@ -229,6 +229,26 @@ RelativePath=".\languages\italian.txt"> + + + + + + + + + + + + diff --git a/wadsrc/xlat/doomxlat.txt b/wadsrc/xlat/doomxlat.txt index bc283855f..2d0e373af 100644 --- a/wadsrc/xlat/doomxlat.txt +++ b/wadsrc/xlat/doomxlat.txt @@ -286,7 +286,7 @@ include "xlat/defines.i" // should give results equivalent to hardware Legacy rendering. 284 = 0, TranslucentLine (lineid, 128, 0) 285 = 0, TranslucentLine (lineid, 192, 0) -286 = 0, TranslucentLine (lineid, 208, 0) +286 = 0, TranslucentLine (lineid, 48, 0) 287 = 0, TranslucentLine (lineid, 128, 1) 281 = 0, ExtraFloor_LightOnly (tag, 0) // thick extra floor diff --git a/wadsrc/zdoom.lst b/wadsrc/zdoom.lst index f297d1930..d99816c05 100644 --- a/wadsrc/zdoom.lst +++ b/wadsrc/zdoom.lst @@ -176,3 +176,15 @@ strfinfo.txt mapinfo/strife.txt ======== # Strife's helper script acs/strfhelp.o strfhelp.o + + +======== +# Decorate stuff + +decorate.txt decorate/decorate.txt + +actors/doom/doomarmor.txt decorate/doom/doomarmor.txt +actors/doom/doomkeys.txt decorate/doom/doomkeys.txt +actors/doom/doomdecorations.txt decorate/doom/doomdecorations.txt + +actors/heretic/hereticdecorations.txt decorate/heretic/hereticdecorations.txt diff --git a/zdoom.vcproj b/zdoom.vcproj index 97de4b450..9a1cbcb19 100644 --- a/zdoom.vcproj +++ b/zdoom.vcproj @@ -2901,21 +2901,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" "/> - - - - - - - - - - - - - - - - @@ -2979,21 +2949,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" "/> - - - - - - - - - - - - - - - -