diff --git a/default.cbd b/default.cbd
index b32f4102bd..386f453df5 100644
--- a/default.cbd
+++ b/default.cbd
@@ -3,7 +3,7 @@ do ifopt help
debug - Build debug instead of release
verbose - Show system commands instead of decorated messages
clean - Clean temp files (use with debug to clean debug files)
- zdoom.wad - (Re)build just zdoom.wad, even if it already exists
+ zdoom.pk3 - (Re)build just zdoom.pk3, even if it already exists
To use with MinGW, compile cbuild.c into an executable using:
gcc -O2 -W -Wall -Werror -o cbuild.exe cbuild.c
@@ -70,7 +70,7 @@ do ifnopt clean
ifnexist "${OBJ_DIR}" mkdir "${OBJ_DIR}"
- ifopt zdoom.wad goto makewad
+ ifopt zdoom.pk3 goto makewad
do if "${NOASM}"=""
# This sets a custom command to run durring a compile for files with the
@@ -201,15 +201,15 @@ ${COMPILER} "autostart.cpp a.nas blocks.nas misc.nas tmap.nas tmap2.nas tmap3.na
${LINK} "${TARGET}"
-# If we're not cleaning and zdoom.wad exists, exit now.
-if "${EVILCLEAN}"="0" ifexist zdoom.wad exit 0
+# If we're not cleaning and zdoom.pk3 exists, exit now.
+if "${EVILCLEAN}"="0" ifexist zdoom.pk3 exit 0
#:makewad
-LDFLAGS = ''
CFLAGS = '-Os -Wall -fomit-frame-pointer'
+LDFLAGS = '-lz'
src_paths tools/makewad
-${COMPILER} makewad.c
+${COMPILER} makewad.c ioapi.c zip.c
${LINK} tools/makewad/makewad
src_paths tools/xlatcc
@@ -224,12 +224,12 @@ do if "${EVILCLEAN}"="1"
-rm "${OBJ_DIR}"
-rm "${DEP_DIR}"
-rm zdoomgcc.map
- -rm zdoom.wad
+ -rm zdoom.pk3
else
chdir wadsrc
do ifret 0
-call ../tools/makewad/makewad zdoom.lst
- ifret 0 -copy zdoom.wad ../
+ ifret 0 -copy zdoom.pk3 ../
chdir ..
done
done
diff --git a/docs/rh-log.txt b/docs/rh-log.txt
index 8c69390fad..4e6d919a78 100644
--- a/docs/rh-log.txt
+++ b/docs/rh-log.txt
@@ -1,3 +1,13 @@
+May 4, 2006 (Changes by Graf Zahl)
+- Converted A_Hexendecorations.cpp
+- Changed the lower decal spawning code to transfer the main decal's color if
+ the lower decal's default color is the same as the main decal's.
+- Changed the decal stretcher back to use the specified size parameters as a
+ scaling factor and not a destination size because this is more consistent with
+ the rest of the decal code. Also adjusted the blood smear definition in DECALDEF
+ and the description in the Wiki for this.
+- Added Jim's most recent fixes.
+
May 3, 2006
- Fixed: Conversion of c_bind.cpp to FString was incomplete.
- Fixed some functions that were declared as taking size_t's but defined as taking
@@ -40,6 +50,8 @@ May 3, 2006
- Renamed the string class to FString to emphasize that it is not std::string.
May 3, 2006 (Changes by Graf Zahl)
+- Converted A_Speedboots.cpp, A_HexenArmor.cpp and A_Hexenkeys.cpp to DECORATE
+- Fixed a few memory allocation issues pointed out by Jim's Valgrind dump.
- Removed doom.x, heretic.x and strife.x from the SVN repository. These
are generated files.
- Fixed: A_PainDie has to check whether a valid target exists before
diff --git a/src/c_bind.cpp b/src/c_bind.cpp
index c54d1d4d3e..02b99ac654 100644
--- a/src/c_bind.cpp
+++ b/src/c_bind.cpp
@@ -326,7 +326,7 @@ CCMD (bind)
}
if (argv.argc() == 2)
{
- Printf ("\"%s\" = \"%s\"\n", argv[1], (Bindings[i].GetChars() ? Bindings[i].GetChars() : ""));
+ Printf ("\"%s\" = \"%s\"\n", argv[1], Bindings[i].GetChars());
}
else
{
@@ -417,7 +417,7 @@ CCMD (doublebind)
}
if (argv.argc() == 2)
{
- Printf ("\"%s\" = \"%s\"\n", argv[1], (DoubleBindings[i].GetChars() ? DoubleBindings[i].GetChars() : ""));
+ Printf ("\"%s\" = \"%s\"\n", argv[1], DoubleBindings[i].GetChars());
}
else
{
diff --git a/src/decallib.cpp b/src/decallib.cpp
index f6f9fa907b..fbe390d088 100644
--- a/src/decallib.cpp
+++ b/src/decallib.cpp
@@ -1187,20 +1187,18 @@ DThinker *FDecalStretcherAnim::CreateThinker (DBaseDecal *actor, side_t *wall) c
thinker->TimeToStart = level.maptime + StretchStart;
thinker->TimeToStop = thinker->TimeToStart + StretchTime;
- FTexture * tex = TexMan[actor->PicNum];
-
- if (GoalX >= 0 && tex != NULL)
+ if (GoalX >= 0)
{
- thinker->GoalX = GoalX / tex->GetWidth();
+ thinker->GoalX = GoalX;
thinker->bStretchX = true;
}
else
{
thinker->bStretchX = false;
}
- if (GoalY >= 0 && tex != NULL)
+ if (GoalY >= 0)
{
- thinker->GoalY = GoalY / tex->GetHeight();
+ thinker->GoalY = GoalY;
thinker->bStretchY = true;
}
else
diff --git a/src/decorations.cpp b/src/decorations.cpp
index 40ffabbd0e..a0c269a5a4 100644
--- a/src/decorations.cpp
+++ b/src/decorations.cpp
@@ -336,6 +336,7 @@ static void ParseDecorate (void (*process)(FState *, int))
if (!SC_GetString ())
{
if (recursion==0) return;
+ SC_Close();
SC_RestoreScriptState();
recursion--;
continue;
diff --git a/src/g_hexen/a_hexenarmor.cpp b/src/g_hexen/a_hexenarmor.cpp
deleted file mode 100644
index 8edca6912a..0000000000
--- a/src/g_hexen/a_hexenarmor.cpp
+++ /dev/null
@@ -1,111 +0,0 @@
-#include "info.h"
-#include "a_pickups.h"
-#include "d_player.h"
-#include "gstrings.h"
-#include "p_local.h"
-
-#define PROP_HexenArmor_Class PROP_SpawnHealth
-
-enum
-{
- ARMOR_ARMOR, // MeshArmor
- ARMOR_SHIELD, // FalconShield
- ARMOR_HELMET, // PlatinumHelm
- ARMOR_AMULET // AmuletOfWarding
-};
-
-// Mesh Armor (1) -----------------------------------------------------------
-
-class AMeshArmor : public AHexenArmor
-{
- DECLARE_ACTOR (AMeshArmor, AHexenArmor)
-protected:
- const char *PickupMessage ()
- {
- return GStrings("TXT_ARMOR1");
- }
-};
-
-FState AMeshArmor::States[] =
-{
- S_NORMAL (AR_1, 'A', -1, NULL , NULL),
-};
-
-IMPLEMENT_ACTOR (AMeshArmor, Hexen, 8005, 68)
- PROP_Flags (MF_SPECIAL|MF_NOGRAVITY)
- PROP_HexenArmor_Class (ARMOR_ARMOR)
- PROP_SpawnState (0)
- PROP_Inventory_Amount (0)
-END_DEFAULTS
-
-// Falcon Shield (2) --------------------------------------------------------
-
-class AFalconShield : public AHexenArmor
-{
- DECLARE_ACTOR (AFalconShield, AHexenArmor)
-protected:
- const char *PickupMessage ()
- {
- return GStrings("TXT_ARMOR2");
- }
-};
-
-FState AFalconShield::States[] =
-{
- S_NORMAL (AR_2, 'A', -1, NULL , NULL),
-};
-
-IMPLEMENT_ACTOR (AFalconShield, Hexen, 8006, 69)
- PROP_Flags (MF_SPECIAL|MF_NOGRAVITY)
- PROP_HexenArmor_Class (ARMOR_SHIELD)
- PROP_SpawnState (0)
- PROP_Inventory_Amount (0)
-END_DEFAULTS
-
-// Platinum Helm (3) --------------------------------------------------------
-
-class APlatinumHelm : public AHexenArmor
-{
- DECLARE_ACTOR (APlatinumHelm, AHexenArmor)
-protected:
- const char *PickupMessage ()
- {
- return GStrings("TXT_ARMOR3");
- }
-};
-
-FState APlatinumHelm::States[] =
-{
- S_NORMAL (AR_3, 'A', -1, NULL , NULL),
-};
-
-IMPLEMENT_ACTOR (APlatinumHelm, Hexen, 8007, 70)
- PROP_Flags (MF_SPECIAL|MF_NOGRAVITY)
- PROP_HexenArmor_Class (ARMOR_HELMET)
- PROP_SpawnState (0)
- PROP_Inventory_Amount (0)
-END_DEFAULTS
-
-// Amulet of Warding (4) ----------------------------------------------------
-
-class AAmuletOfWarding : public AHexenArmor
-{
- DECLARE_ACTOR (AAmuletOfWarding, AHexenArmor)
-protected:
- const char *PickupMessage ()
- {
- return GStrings("TXT_ARMOR4");
- }
-};
-
-FState AAmuletOfWarding::States[] =
-{
- S_NORMAL (AR_4, 'A', -1, NULL , NULL),
-};
-
-IMPLEMENT_ACTOR (AAmuletOfWarding, Hexen, 8008, 71)
- PROP_Flags (MF_SPECIAL|MF_NOGRAVITY)
- PROP_HexenArmor_Class (ARMOR_AMULET)
- PROP_SpawnState (0)
- PROP_Inventory_Amount (0)
-END_DEFAULTS
diff --git a/src/g_hexen/a_hexendecorations.cpp b/src/g_hexen/a_hexendecorations.cpp
deleted file mode 100644
index cf562625e2..0000000000
--- a/src/g_hexen/a_hexendecorations.cpp
+++ /dev/null
@@ -1,625 +0,0 @@
-#include "actor.h"
-#include "info.h"
-
-// Convenient macros --------------------------------------------------------
-
-#define _DECCOMMON(cls,ednum,rad,hi,ns) \
- class cls : public AActor { DECLARE_STATELESS_ACTOR (cls, AActor) static FState States[ns]; }; \
- IMPLEMENT_ACTOR (cls, Hexen, ednum, 0) \
- PROP_SpawnState (0) \
- PROP_RadiusFixed (rad) \
- PROP_HeightFixed (hi)
-
-#define _DECSTARTSTATES(cls,ns) \
- END_DEFAULTS FState cls::States[ns] =
-
-#define DEC(cls,ednum,rad,hi,ns) \
- _DECCOMMON(cls,ednum,rad,hi,ns) \
- PROP_Flags (MF_SOLID) \
- _DECSTARTSTATES(cls,ns)
-
-#define DECNS(cls,ednum,rad,hi,ns) \
- _DECCOMMON(cls,ednum,rad,hi,ns) _DECSTARTSTATES(cls,ns)
-
-#define DECHANG(cls,ednum,rad,hi,ns) \
- _DECCOMMON(cls,ednum,rad,hi,ns) \
- PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY) \
- _DECSTARTSTATES(cls,ns)
-
-#define DECHANGNB(cls,ednum,rad,hi,ns) \
- _DECCOMMON(cls,ednum,rad,hi,ns) \
- PROP_Flags (MF_NOBLOCKMAP|MF_SPAWNCEILING|MF_NOGRAVITY) \
- _DECSTARTSTATES(cls,ns)
-
-#define DECHANGNS(cls,ednum,rad,hi,ns) \
- _DECCOMMON(cls,ednum,rad,hi,ns) \
- PROP_Flags (MF_SPAWNCEILING|MF_NOGRAVITY) \
- _DECSTARTSTATES(cls,ns)
-
-#define DECNBLOCK(cls,ednum,rad,hi,ns) \
- _DECCOMMON(cls,ednum,rad,hi,ns) \
- PROP_Flags (MF_NOBLOCKMAP) \
- _DECSTARTSTATES(cls,ns)
-
-#define DECNBNG(cls,ednum,rad,hi,ns) \
- _DECCOMMON(cls,ednum,rad,hi,ns) \
- PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) \
- _DECSTARTSTATES(cls,ns)
-
-#define DECNBNGT(cls,ednum,rad,hi,ns) \
- _DECCOMMON(cls,ednum,rad,hi,ns) \
- PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) \
- PROP_RenderStyle (STYLE_Translucent) \
- PROP_Alpha (OPAQUE*8/10) \
- _DECSTARTSTATES(cls,ns)
-
-// Definitions --------------------------------------------------------------
-
-DEC (AZWingedStatue, 5, 10, 62, 1)
-{
- S_NORMAL (STTW, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZRock1, 6, 20, 16, 1)
-{
- S_NORMAL (RCK1, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZRock2, 7, 20, 16, 1)
-{
- S_NORMAL (RCK2, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZRock3, 9, 20, 16, 1)
-{
- S_NORMAL (RCK3, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZRock4, 15, 20, 16, 1)
-{
- S_NORMAL (RCK4, 'A', -1, NULL, NULL)
-};
-
-DECHANGNS (AZChandelier, 17, 20, 60, 3)
-{
- S_NORMAL (CDLR, 'A', 4, NULL, &States[1]),
- S_NORMAL (CDLR, 'B', 4, NULL, &States[2]),
- S_NORMAL (CDLR, 'C', 4, NULL, &States[0]),
-};
-
-DECHANGNS (AZChandelierUnlit, 8063, 20, 60, 1)
-{
- S_NORMAL (CDLR, 'D', -1, NULL, NULL)
-};
-
-DEC (AZTreeDead, 24, 10, 96, 1)
-{
- S_NORMAL (ZTRE, 'A', -1, NULL, NULL)
-};
-
-DEC (AZTree, 25, 15, 128, 1)
-{
- S_NORMAL (ZTRE, 'A', -1, NULL, NULL)
-};
-
-DEC (AZTreeSwamp150, 26, 10, 150, 1)
-{
- S_NORMAL (TRES, 'A', -1, NULL, NULL)
-};
-
-DEC (AZTreeSwamp120, 27, 10, 120, 1)
-{
- S_NORMAL (TRE3, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStumpBurned, 28, 12, 20, 1)
-{
- S_NORMAL (STM1, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStumpBare, 29, 12, 20, 1)
-{
- S_NORMAL (STM2, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZStumpSwamp1, 37, 20, 16, 1)
-{
- S_NORMAL (STM3, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZStumpSwamp2, 38, 20, 16, 1)
-{
- S_NORMAL (STM4, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZShroomLarge1, 39, 20, 16, 1)
-{
- S_NORMAL (MSH1, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZShroomLarge2, 40, 20, 16, 1)
-{
- S_NORMAL (MSH2, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZShroomLarge3, 41, 20, 16, 1)
-{
- S_NORMAL (MSH3, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZShroomSmall1, 42, 20, 16, 1)
-{
- S_NORMAL (MSH4, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZShroomSmall2, 44, 20, 16, 1)
-{
- S_NORMAL (MSH5, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZShroomSmall3, 45, 20, 16, 1)
-{
- S_NORMAL (MSH6, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZShroomSmall4, 46, 20, 16, 1)
-{
- S_NORMAL (MSH7, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZShroomSmall5, 47, 20, 16, 1)
-{
- S_NORMAL (MSH8, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStalagmitePillar, 48, 8, 138, 1)
-{
- S_NORMAL (SGMP, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStalagmiteLarge, 49, 8, 48, 1)
-{
- S_NORMAL (SGM1, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStalagmiteMedium, 50, 6, 40, 1)
-{
- S_NORMAL (SGM2, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStalagmiteSmall, 51, 8, 36, 1)
-{
- S_NORMAL (SGM3, 'A', -1, NULL, NULL)
-};
-
-DECHANG (AZStalactiteLarge, 52, 8, 66, 1)
-{
- S_NORMAL (SLC1, 'A', -1, NULL, NULL)
-};
-
-DECHANG (AZStalactiteMedium, 56, 6, 50, 1)
-{
- S_NORMAL (SLC2, 'A', -1, NULL, NULL)
-};
-
-DECHANG (AZStalactiteSmall, 57, 8, 40, 1)
-{
- S_NORMAL (SLC3, 'A', -1, NULL, NULL)
-};
-
-DECHANGNS (AZMossCeiling1, 58, 20, 20, 1)
-{
- S_NORMAL (MSS1, 'A', -1, NULL, NULL)
-};
-
-DECHANGNS (AZMossCeiling2, 59, 20, 24, 1)
-{
- S_NORMAL (MSS2, 'A', -1, NULL, NULL)
-};
-
-DEC (AZSwampVine, 60, 8, 52, 1)
-{
- S_NORMAL (SWMV, 'A', -1, NULL, NULL)
-};
-
-DEC (AZCorpseKabob, 61, 10, 92, 1)
-{
- S_NORMAL (CPS1, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZCorpseSleeping, 62, 20, 16, 1)
-{
- S_NORMAL (CPS2, 'A', -1, NULL, NULL)
-};
-
-DEC (AZTombstoneRIP, 63, 10, 46, 1)
-{
- S_NORMAL (TMS1, 'A', -1, NULL, NULL)
-};
-
-DEC (AZTombstoneShane, 64, 10, 46, 1)
-{
- S_NORMAL (TMS2, 'A', -1, NULL, NULL)
-};
-
-DEC (AZTombstoneBigCross, 65, 10, 46, 1)
-{
- S_NORMAL (TMS3, 'A', -1, NULL, NULL)
-};
-
-DEC (AZTombstoneBrianR, 66, 10, 52, 1)
-{
- S_NORMAL (TMS4, 'A', -1, NULL, NULL)
-};
-
-DEC (AZTombstoneCrossCircle, 67, 10, 52, 1)
-{
- S_NORMAL (TMS5, 'A', -1, NULL, NULL)
-};
-
-DEC (AZTombstoneSmallCross, 68, 8, 46, 1)
-{
- S_NORMAL (TMS6, 'A', -1, NULL, NULL)
-};
-
-DEC (AZTombstoneBrianP, 69, 8, 46, 1)
-{
- S_NORMAL (TMS7, 'A', -1, NULL, NULL)
-};
-
-DECHANG (AZCorpseHanging, 71, 6, 75, 1)
-{
- S_NORMAL (CPS3, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStatueGargoyleGreenTall, 72, 14, 108, 1)
-{
- S_NORMAL (STT2, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStatueGargoyleBlueTall, 73, 14, 108, 1)
-{
- S_NORMAL (STT3, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStatueGargoyleGreenShort, 74, 14, 62, 1)
-{
- S_NORMAL (STT4, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStatueGargoyleBlueShort, 76, 14, 62, 1)
-{
- S_NORMAL (STT5, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStatueGargoyleStripeTall, 8044, 14, 108, 1)
-{
- S_NORMAL (GAR1, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStatueGargoyleDarkRedTall, 8045, 14, 108, 1)
-{
- S_NORMAL (GAR2, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStatueGargoyleRedTall, 8046, 14, 108, 1)
-{
- S_NORMAL (GAR3, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStatueGargoyleTanTall, 8047, 14, 108, 1)
-{
- S_NORMAL (GAR4, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStatueGargoyleRustTall, 8048, 14, 108, 1)
-{
- S_NORMAL (GAR5, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStatueGargoyleDarkRedShort, 8049, 14, 62, 1)
-{
- S_NORMAL (GAR6, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStatueGargoyleRedShort, 8050, 14, 62, 1)
-{
- S_NORMAL (GAR7, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStatueGargoyleTanShort, 8051, 14, 62, 1)
-{
- S_NORMAL (GAR8, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStatueGargoyleRustShort, 8052, 14, 62, 1)
-{
- S_NORMAL (GAR9, 'A', -1, NULL, NULL)
-};
-
-DEC (AZBannerTattered, 77, 8, 120, 1)
-{
- S_NORMAL (BNR1, 'A', -1, NULL, NULL)
-};
-
-DEC (AZTreeLarge1, 78, 15, 180, 1)
-{
- S_NORMAL (TRE4, 'A', -1, NULL, NULL)
-};
-
-DEC (AZTreeLarge2, 79, 15, 180, 1)
-{
- S_NORMAL (TRE5, 'A', -1, NULL, NULL)
-};
-
-DEC (AZTreeGnarled1, 80, 22, 100, 1)
-{
- S_NORMAL (TRE6, 'A', -1, NULL, NULL)
-};
-
-DEC (AZTreeGnarled2, 87, 22, 100, 1)
-{
- S_NORMAL (TRE7, 'A', -1, NULL, NULL)
-};
-
-DEC (AZLog, 88, 20, 25, 1)
-{
- S_NORMAL (LOGG, 'A', -1, NULL, NULL)
-};
-
-DECHANG (AZStalactiteIceLarge, 89, 8, 66, 1)
-{
- S_NORMAL (ICT1, 'A', -1, NULL, NULL)
-};
-
-DECHANG (AZStalactiteIceMedium, 90, 5, 50, 1)
-{
- S_NORMAL (ICT2, 'A', -1, NULL, NULL)
-};
-
-DECHANG (AZStalactiteIceSmall, 91, 4, 32, 1)
-{
- S_NORMAL (ICT3, 'A', -1, NULL, NULL)
-};
-
-DECHANG (AZStalactiteIceTiny, 92, 4, 8, 1)
-{
- S_NORMAL (ICT4, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStalagmiteIceLarge, 93, 8, 66, 1)
-{
- S_NORMAL (ICM1, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStalagmiteIceMedium, 94, 5, 50, 1)
-{
- S_NORMAL (ICM2, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStalagmiteIceSmall, 95, 4, 32, 1)
-{
- S_NORMAL (ICM3, 'A', -1, NULL, NULL)
-};
-
-DEC (AZStalagmiteIceTiny, 96, 4, 8, 1)
-{
- S_NORMAL (ICM4, 'A', -1, NULL, NULL)
-};
-
-DEC (AZRockBrown1, 97, 17, 72, 1)
-{
- S_NORMAL (RKBL, 'A', -1, NULL, NULL)
-};
-
-DEC (AZRockBrown2, 98, 15, 50, 1)
-{
- S_NORMAL (RKBS, 'A', -1, NULL, NULL)
-};
-
-DEC (AZRockBlack, 99, 20, 40, 1)
-{
- S_NORMAL (RKBK, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZRubble1, 100, 20, 16, 1)
-{
- S_NORMAL (RBL1, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZRubble2, 101, 20, 16, 1)
-{
- S_NORMAL (RBL2, 'A', -1, NULL, NULL)
-};
-
-DECNS (AZRubble3, 102, 20, 16, 1)
-{
- S_NORMAL (RBL3, 'A', -1, NULL, NULL)
-};
-
-DEC (AZVasePillar, 103, 12, 54, 1)
-{
- S_NORMAL (VASE, 'A', -1, NULL, NULL)
-};
-
-DECHANG (AZCorpseLynched, 108, 11, 95, 1)
-{
- S_NORMAL (CPS4, 'A', -1, NULL, NULL)
-};
-
-DECNBNG (AZCandle, 119, 20, 16, 3)
-{
- S_BRIGHT (CNDL, 'A', 4, NULL, &States[1]),
- S_BRIGHT (CNDL, 'B', 4, NULL, &States[2]),
- S_BRIGHT (CNDL, 'C', 4, NULL, &States[0])
-};
-
-DEC (AZBarrel, 8100, 15, 32, 1)
-{
- S_NORMAL (ZBAR, 'A', -1, NULL, NULL)
-};
-
-DECHANG (AZBucket, 8103, 8, 72, 1)
-{
- S_NORMAL (BCKT, 'A', -1, NULL, NULL)
-};
-
-DEC (AFireThing, 8060, 5, 10, 9)
-{
- S_BRIGHT (FSKL, 'A', 4, NULL, &States[1]),
- S_BRIGHT (FSKL, 'B', 3, NULL, &States[2]),
- S_BRIGHT (FSKL, 'C', 4, NULL, &States[3]),
- S_BRIGHT (FSKL, 'D', 3, NULL, &States[4]),
- S_BRIGHT (FSKL, 'E', 4, NULL, &States[5]),
- S_BRIGHT (FSKL, 'F', 3, NULL, &States[6]),
- S_BRIGHT (FSKL, 'G', 4, NULL, &States[7]),
- S_BRIGHT (FSKL, 'H', 3, NULL, &States[8]),
- S_BRIGHT (FSKL, 'I', 4, NULL, &States[0])
-};
-
-DEC (ABrassTorch, 8061, 6, 35, 13)
-{
- S_BRIGHT (BRTR, 'A', 4, NULL, &States[1]),
- S_BRIGHT (BRTR, 'B', 4, NULL, &States[2]),
- S_BRIGHT (BRTR, 'C', 4, NULL, &States[3]),
- S_BRIGHT (BRTR, 'D', 4, NULL, &States[4]),
- S_BRIGHT (BRTR, 'E', 4, NULL, &States[5]),
- S_BRIGHT (BRTR, 'F', 4, NULL, &States[6]),
- S_BRIGHT (BRTR, 'G', 4, NULL, &States[7]),
- S_BRIGHT (BRTR, 'H', 4, NULL, &States[8]),
- S_BRIGHT (BRTR, 'I', 4, NULL, &States[9]),
- S_BRIGHT (BRTR, 'J', 4, NULL, &States[10]),
- S_BRIGHT (BRTR, 'K', 4, NULL, &States[11]),
- S_BRIGHT (BRTR, 'L', 4, NULL, &States[12]),
- S_BRIGHT (BRTR, 'M', 4, NULL, &States[0])
-};
-
-DECNBLOCK (AZBlueCandle, 8066, 20, 16, 5)
-{
- S_BRIGHT (BCAN, 'A', 5, NULL, &States[1]),
- S_BRIGHT (BCAN, 'B', 5, NULL, &States[2]),
- S_BRIGHT (BCAN, 'C', 5, NULL, &States[3]),
- S_BRIGHT (BCAN, 'D', 5, NULL, &States[4]),
- S_BRIGHT (BCAN, 'E', 5, NULL, &States[0])
-};
-
-DEC (AZIronMaiden, 8067, 12, 60, 1)
-{
- S_NORMAL (IRON, 'A', -1, NULL, NULL)
-};
-
-DECHANGNB (AZChainBit32, 8071, 4, 32, 1)
-{
- S_NORMAL (CHNS, 'A', -1, NULL, NULL)
-};
-
-DECHANGNB (AZChainBit64, 8072, 4, 64, 1)
-{
- S_NORMAL (CHNS, 'B', -1, NULL, NULL)
-};
-
-DECHANGNB (AZChainEndHeart, 8073, 4, 32, 1)
-{
- S_NORMAL (CHNS, 'C', -1, NULL, NULL)
-};
-
-DECHANGNB (AZChainEndHook1, 8074, 4, 32, 1)
-{
- S_NORMAL (CHNS, 'D', -1, NULL, NULL)
-};
-
-DECHANGNB (AZChainEndHook2, 8075, 4, 32, 1)
-{
- S_NORMAL (CHNS, 'E', -1, NULL, NULL)
-};
-
-DECHANGNB (AZChainEndSpike, 8076, 4, 32, 1)
-{
- S_NORMAL (CHNS, 'F', -1, NULL, NULL)
-};
-
-DECHANGNB (AZChainEndSkull, 8077, 4, 32, 1)
-{
- S_NORMAL (CHNS, 'G', -1, NULL, NULL)
-};
-
-DECNBLOCK (ATableShit1, 8500, 20, 16, 1)
-{
- S_NORMAL (TST1, 'A', -1, NULL, NULL)
-};
-
-DECNBLOCK (ATableShit2, 8501, 20, 16, 1)
-{
- S_NORMAL (TST2, 'A', -1, NULL, NULL)
-};
-
-DECNBLOCK (ATableShit3, 8502, 20, 16, 1)
-{
- S_NORMAL (TST3, 'A', -1, NULL, NULL)
-};
-
-DECNBLOCK (ATableShit4, 8503, 20, 16, 1)
-{
- S_NORMAL (TST4, 'A', -1, NULL, NULL)
-};
-
-DECNBLOCK (ATableShit5, 8504, 20, 16, 1)
-{
- S_NORMAL (TST5, 'A', -1, NULL, NULL)
-};
-
-DECNBLOCK (ATableShit6, 8505, 20, 16, 1)
-{
- S_NORMAL (TST6, 'A', -1, NULL, NULL)
-};
-
-DECNBLOCK (ATableShit7, 8506, 20, 16, 1)
-{
- S_NORMAL (TST7, 'A', -1, NULL, NULL)
-};
-
-DECNBLOCK (ATableShit8, 8507, 20, 16, 1)
-{
- S_NORMAL (TST8, 'A', -1, NULL, NULL)
-};
-
-DECNBLOCK (ATableShit9, 8508, 20, 16, 1)
-{
- S_NORMAL (TST9, 'A', -1, NULL, NULL)
-};
-
-DECNBLOCK (ATableShit10, 8509, 20, 16, 1)
-{
- S_NORMAL (TST0, 'A', -1, NULL, NULL)
-};
-
-DECNBNGT (ATeleSmoke, 140, 20, 16, 26)
-{
- S_NORMAL (TSMK, 'A', 4, NULL, &States[1]),
- S_NORMAL (TSMK, 'B', 3, NULL, &States[2]),
- S_NORMAL (TSMK, 'C', 4, NULL, &States[3]),
- S_NORMAL (TSMK, 'D', 3, NULL, &States[4]),
- S_NORMAL (TSMK, 'E', 4, NULL, &States[5]),
- S_NORMAL (TSMK, 'F', 3, NULL, &States[6]),
- S_NORMAL (TSMK, 'G', 4, NULL, &States[7]),
- S_NORMAL (TSMK, 'H', 3, NULL, &States[8]),
- S_NORMAL (TSMK, 'I', 4, NULL, &States[9]),
- S_NORMAL (TSMK, 'J', 3, NULL, &States[10]),
- S_NORMAL (TSMK, 'K', 4, NULL, &States[11]),
- S_NORMAL (TSMK, 'L', 3, NULL, &States[12]),
- S_NORMAL (TSMK, 'M', 4, NULL, &States[13]),
- S_NORMAL (TSMK, 'N', 3, NULL, &States[14]),
- S_NORMAL (TSMK, 'O', 4, NULL, &States[15]),
- S_NORMAL (TSMK, 'P', 3, NULL, &States[16]),
- S_NORMAL (TSMK, 'Q', 4, NULL, &States[17]),
- S_NORMAL (TSMK, 'R', 3, NULL, &States[18]),
- S_NORMAL (TSMK, 'S', 4, NULL, &States[19]),
- S_NORMAL (TSMK, 'T', 3, NULL, &States[20]),
- S_NORMAL (TSMK, 'U', 4, NULL, &States[21]),
- S_NORMAL (TSMK, 'V', 3, NULL, &States[22]),
- S_NORMAL (TSMK, 'W', 4, NULL, &States[23]),
- S_NORMAL (TSMK, 'X', 3, NULL, &States[24]),
- S_NORMAL (TSMK, 'Y', 4, NULL, &States[25]),
- S_NORMAL (TSMK, 'Z', 3, NULL, &States[0])
-};
-
diff --git a/src/g_hexen/a_hexenkeys.cpp b/src/g_hexen/a_hexenkeys.cpp
deleted file mode 100644
index 7567f41b2a..0000000000
--- a/src/g_hexen/a_hexenkeys.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "info.h"
-#include "a_pickups.h"
-#include "gstrings.h"
-#include "a_keys.h"
-#include "tarray.h"
-
-IMPLEMENT_STATELESS_ACTOR (AHexenKey, Hexen, -1, 0)
- PROP_RadiusFixed (8)
- PROP_HeightFixed (20)
- PROP_Flags (MF_SPECIAL)
-END_DEFAULTS
-
-#define MAKEKEY(num,n1,name,ednum, spawn) \
- class AKey##n1 : public AHexenKey { \
- DECLARE_ACTOR (AKey##n1, AHexenKey) \
- public: \
- const char *PickupMessage () { return GStrings("TXT_KEY_" #name); } \
- }; \
- FState AKey##n1::States[] = { S_NORMAL (KEY##num, 'A', -1, NULL, NULL) }; \
- IMPLEMENT_ACTOR (AKey##n1, Hexen, ednum, spawn) PROP_SpawnState (0) \
- PROP_Inventory_Icon ("KEYSLOT" #num) END_DEFAULTS
-
-MAKEKEY (1, Steel, STEEL, 8030, 85)
-MAKEKEY (2, Cave, CAVE, 8031, 86)
-MAKEKEY (3, Axe, AXE, 8032, 87)
-MAKEKEY (4, Fire, FIRE, 8033, 88)
-MAKEKEY (5, Emerald, EMERALD, 8034, 89)
-MAKEKEY (6, Dungeon, DUNGEON, 8035, 90)
-MAKEKEY (7, Silver, SILVER, 8036, 91)
-MAKEKEY (8, Rusted, RUSTED, 8037, 92)
-MAKEKEY (9, Horn, HORN, 8038, 93)
-MAKEKEY (A, Swamp, SWAMP, 8039, 94)
-MAKEKEY (B, Castle, CASTLE, 8200, 0)
diff --git a/src/g_hexen/a_speedboots.cpp b/src/g_hexen/a_speedboots.cpp
deleted file mode 100644
index f60e1cf8c7..0000000000
--- a/src/g_hexen/a_speedboots.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "info.h"
-#include "a_pickups.h"
-#include "a_artifacts.h"
-#include "gstrings.h"
-#include "p_local.h"
-
-// Speed Boots Artifact -----------------------------------------------------
-
-class AArtiSpeedBoots : public APowerupGiver
-{
- DECLARE_ACTOR (AArtiSpeedBoots, APowerupGiver)
-public:
- const char *PickupMessage ();
-};
-
-FState AArtiSpeedBoots::States[] =
-{
- S_BRIGHT (SPED, 'A', 3, NULL , &States[1]),
- S_BRIGHT (SPED, 'B', 3, NULL , &States[2]),
- S_BRIGHT (SPED, 'C', 3, NULL , &States[3]),
- S_BRIGHT (SPED, 'D', 3, NULL , &States[4]),
- S_BRIGHT (SPED, 'E', 3, NULL , &States[5]),
- S_BRIGHT (SPED, 'F', 3, NULL , &States[6]),
- S_BRIGHT (SPED, 'G', 3, NULL , &States[7]),
- S_BRIGHT (SPED, 'H', 3, NULL , &States[0]),
-};
-
-IMPLEMENT_ACTOR (AArtiSpeedBoots, Hexen, 8002, 13)
- PROP_Flags (MF_SPECIAL)
- PROP_Flags2 (MF2_FLOATBOB)
- PROP_SpawnState (0)
- PROP_Inventory_FlagsSet (IF_PICKUPFLASH)
- PROP_Inventory_Icon ("ARTISPED")
- PROP_PowerupGiver_Powerup ("PowerSpeed")
-END_DEFAULTS
-
-const char *AArtiSpeedBoots::PickupMessage ()
-{
- return GStrings("TXT_ARTISPEED");
-}
diff --git a/src/g_shared/a_decals.cpp b/src/g_shared/a_decals.cpp
index 731438e10c..da2c2de564 100644
--- a/src/g_shared/a_decals.cpp
+++ b/src/g_shared/a_decals.cpp
@@ -610,7 +610,13 @@ DImpactDecal *DImpactDecal::StaticCreate (const FDecalTemplate *tpl, fixed_t x,
{
if (tpl->LowerDecal)
{
- StaticCreate (tpl->LowerDecal->GetDecal(), x, y, z, wall);
+ int lowercolor = color;
+ const FDecalTemplate * tpl_low = tpl->LowerDecal->GetDecal();
+
+ // If the default color of the lower decal is the same as the main decal's
+ // apply the custom color as well.
+ if (tpl->ShadeColor == tpl_low->ShadeColor) lowercolor=0;
+ StaticCreate (tpl_low, x, y, z, wall, lowercolor);
}
DImpactDecal::CheckMax();
decal = new DImpactDecal (z);
diff --git a/src/g_shared/a_keys.h b/src/g_shared/a_keys.h
index df01b7a93b..9a2a11d22f 100644
--- a/src/g_shared/a_keys.h
+++ b/src/g_shared/a_keys.h
@@ -15,11 +15,6 @@ protected:
virtual bool ShouldStay ();
};
-class AHexenKey : public AKey
-{
- DECLARE_STATELESS_ACTOR (AHexenKey, AKey)
-};
-
class AStrifeKey : public AKey
{
DECLARE_STATELESS_ACTOR (AStrifeKey, AKey)
diff --git a/src/m_alloc.cpp b/src/m_alloc.cpp
index 56a12826f8..4ba38d8a70 100644
--- a/src/m_alloc.cpp
+++ b/src/m_alloc.cpp
@@ -37,7 +37,7 @@
#include "i_system.h"
#include "m_alloc.h"
-void *Malloc (size_t size)
+void *M_Malloc (size_t size)
{
void *zone = malloc (size);
@@ -47,7 +47,7 @@ void *Malloc (size_t size)
return zone;
}
-void *Calloc (size_t num, size_t size)
+void *M_Calloc (size_t num, size_t size)
{
void *zone = calloc (num, size);
@@ -57,7 +57,7 @@ void *Calloc (size_t num, size_t size)
return zone;
}
-void *Realloc (void *memblock, size_t size)
+void *M_Realloc (void *memblock, size_t size)
{
void *zone = realloc (memblock, size);
diff --git a/src/m_options.cpp b/src/m_options.cpp
index 38956af362..5eb942b04f 100644
--- a/src/m_options.cpp
+++ b/src/m_options.cpp
@@ -2671,7 +2671,7 @@ static void BuildModesList (int hiwidth, int hiheight, int hi_bits)
char strtemp[32], **str;
int i, c;
int width, height, showbits;
- bool letterbox;
+ bool letterbox=false;
int ratiomatch;
if (menu_screenratios >= 0 && menu_screenratios <= 4 && menu_screenratios != 3)
diff --git a/src/r_data.cpp b/src/r_data.cpp
index 13618ae187..2eca7bff92 100644
--- a/src/r_data.cpp
+++ b/src/r_data.cpp
@@ -1746,7 +1746,7 @@ void FIMGZTexture::MakeTexture ()
}
}
- Spans = CreateSpans (Pixels);
+ if (Spans == NULL) Spans = CreateSpans (Pixels);
}
@@ -1976,7 +1976,7 @@ void FPNGTexture::MakeTexture ()
delete[] oldpix;
}
}
- Spans = CreateSpans (Pixels);
+ if (Spans == NULL) Spans = CreateSpans (Pixels);
}
@@ -2220,7 +2220,8 @@ void FMultiPatchTexture::MakeTexture ()
{
// Add a little extra space at the end if the texture's height is not
// a power of 2, in case somebody accidentally makes it repeat vertically.
- int numpix = Width * Height + (1 << HeightBits) - Height;
+ // (Jim's Valgrind dump indicates that more padding is needed here.)
+ int numpix = Width * Height + Height;// (1 << HeightBits) - Height;
Pixels = new BYTE[numpix];
memset (Pixels, 0, numpix);
@@ -2231,7 +2232,7 @@ void FMultiPatchTexture::MakeTexture ()
Parts[i].OriginX, Parts[i].OriginY);
}
- Spans = CreateSpans (Pixels);
+ if (Spans == NULL) Spans = CreateSpans (Pixels);
}
void FMultiPatchTexture::CheckForHacks ()
diff --git a/src/sdl/i_system.cpp b/src/sdl/i_system.cpp
index 258a858a09..8dffe2f3d8 100644
--- a/src/sdl/i_system.cpp
+++ b/src/sdl/i_system.cpp
@@ -386,13 +386,13 @@ static int matchfile (const struct dirent *ent)
void *I_FindFirst (const char *filespec, findstate_t *fileinfo)
{
- string dir;
+ FString dir;
char *slash = strrchr (filespec, '/');
if (slash)
{
pattern = slash+1;
- dir = string(filespec, slash-filespec+1);
+ dir = FString(filespec, slash-filespec+1);
}
else
{
diff --git a/wadsrc/decals/decaldef.txt b/wadsrc/decals/decaldef.txt
index afa7a55407..2cd09e1d06 100644
--- a/wadsrc/decals/decaldef.txt
+++ b/wadsrc/decals/decaldef.txt
@@ -21,7 +21,7 @@ colorchanger ToBlack
stretcher BloodStretcher
{
StretchTime 35
- GoalY 80
+ GoalY 2.0
}
slider BloodSlider
diff --git a/wadsrc/decorate/hexen/hexenarmor.txt b/wadsrc/decorate/hexen/hexenarmor.txt
index 2cf8925e9a..8aa8306540 100644
--- a/wadsrc/decorate/hexen/hexenarmor.txt
+++ b/wadsrc/decorate/hexen/hexenarmor.txt
@@ -1 +1,73 @@
-//
+
+// Mesh Armor (1) -----------------------------------------------------------
+
+ACTOR MeshArmor : HexenArmor 8005
+{
+ Game Hexen
+ SpawnID 68
+ +NOGRAVITY
+ Health 0 // Armor class
+ Inventory.Amount 0
+ Inventory.PickupMessage "$TXT_ARMOR1"
+ States
+ {
+ Spawn:
+ AR_1 A -1
+ Stop
+ }
+}
+
+// Falcon Shield (2) --------------------------------------------------------
+
+ACTOR FalconShield : HexenArmor 8006
+{
+ Game Hexen
+ SpawnID 69
+ +NOGRAVITY
+ Health 1 // Armor class
+ Inventory.Amount 0
+ Inventory.PickupMessage "$TXT_ARMOR2"
+ States
+ {
+ Spawn:
+ AR_2 A -1
+ Stop
+ }
+}
+
+// Platinum Helm (3) --------------------------------------------------------
+
+ACTOR PlatinumHelm : HexenArmor 8007
+{
+ Game Hexen
+ SpawnID 70
+ +NOGRAVITY
+ Health 2 // Armor class
+ Inventory.Amount 0
+ Inventory.PickupMessage "$TXT_ARMOR3"
+ States
+ {
+ Spawn:
+ AR_3 A -1
+ Stop
+ }
+}
+
+// Amulet of Warding (4) ----------------------------------------------------
+
+ACTOR AmuletOfWarding : HexenArmor 8008
+{
+ Game Hexen
+ SpawnID 71
+ +NOGRAVITY
+ Health 3 // Armor class
+ Inventory.Amount 0
+ Inventory.PickupMessage "$TXT_ARMOR4"
+ States
+ {
+ Spawn:
+ AR_4 A -1
+ Stop
+ }
+}
+
diff --git a/wadsrc/decorate/hexen/hexendecorations.txt b/wadsrc/decorate/hexen/hexendecorations.txt
index 2cf8925e9a..3fe66d98c0 100644
--- a/wadsrc/decorate/hexen/hexendecorations.txt
+++ b/wadsrc/decorate/hexen/hexendecorations.txt
@@ -1 +1,1499 @@
-//
+ACTOR ZWingedStatue 5
+{
+ Game Hexen
+ Radius 10
+ Height 62
+ +SOLID
+ States
+ {
+ Spawn:
+ STTW A -1
+ Stop
+ }
+}
+
+ACTOR ZRock1 6
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ RCK1 A -1
+ Stop
+ }
+}
+
+ACTOR ZRock2 7
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ RCK2 A -1
+ Stop
+ }
+}
+
+ACTOR ZRock3 9
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ RCK3 A -1
+ Stop
+ }
+}
+
+ACTOR ZRock4 15
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ RCK4 A -1
+ Stop
+ }
+}
+
+ACTOR ZChandelier 17
+{
+ Game Hexen
+ Radius 20
+ Height 60
+ +SPAWNCEILING
+ +NOGRAVITY
+ States
+ {
+ Spawn:
+ CDLR ABC 4
+ Loop
+ }
+}
+
+ACTOR ZChandelierUnlit 8063
+{
+ Game Hexen
+ Radius 20
+ Height 60
+ +SPAWNCEILING
+ +NOGRAVITY
+ States
+ {
+ Spawn:
+ CDLR D -1
+ Stop
+ }
+}
+
+ACTOR ZTreeDead 24
+{
+ Game Hexen
+ Radius 10
+ Height 96
+ +SOLID
+ States
+ {
+ Spawn:
+ ZTRE A -1
+ Stop
+ }
+}
+
+ACTOR ZTree 25
+{
+ Game Hexen
+ Radius 15
+ Height 128
+ +SOLID
+ States
+ {
+ Spawn:
+ ZTRE A -1
+ Stop
+ }
+}
+
+ACTOR ZTreeSwamp150 26
+{
+ Game Hexen
+ Radius 10
+ Height 150
+ +SOLID
+ States
+ {
+ Spawn:
+ TRES A -1
+ Stop
+ }
+}
+
+ACTOR ZTreeSwamp120 27
+{
+ Game Hexen
+ Radius 10
+ Height 120
+ +SOLID
+ States
+ {
+ Spawn:
+ TRE3 A -1
+ Stop
+ }
+}
+
+ACTOR ZStumpBurned 28
+{
+ Game Hexen
+ Radius 12
+ Height 20
+ +SOLID
+ States
+ {
+ Spawn:
+ STM1 A -1
+ Stop
+ }
+}
+
+ACTOR ZStumpBare 29
+{
+ Game Hexen
+ Radius 12
+ Height 20
+ +SOLID
+ States
+ {
+ Spawn:
+ STM2 A -1
+ Stop
+ }
+}
+
+ACTOR ZStumpSwamp1 37
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ STM3 A -1
+ Stop
+ }
+}
+
+ACTOR ZStumpSwamp2 38
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ STM4 A -1
+ Stop
+ }
+}
+
+ACTOR ZShroomLarge1 39
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ MSH1 A -1
+ Stop
+ }
+}
+
+ACTOR ZShroomLarge2 40
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ MSH2 A -1
+ Stop
+ }
+}
+
+ACTOR ZShroomLarge3 41
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ MSH3 A -1
+ Stop
+ }
+}
+
+ACTOR ZShroomSmall1 42
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ MSH4 A -1
+ Stop
+ }
+}
+
+ACTOR ZShroomSmall2 44
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ MSH5 A -1
+ Stop
+ }
+}
+
+ACTOR ZShroomSmall3 45
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ MSH6 A -1
+ Stop
+ }
+}
+
+ACTOR ZShroomSmall4 46
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ MSH7 A -1
+ Stop
+ }
+}
+
+ACTOR ZShroomSmall5 47
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ MSH8 A -1
+ Stop
+ }
+}
+
+ACTOR ZStalagmitePillar 48
+{
+ Game Hexen
+ Radius 8
+ Height 138
+ +SOLID
+ States
+ {
+ Spawn:
+ SGMP A -1
+ Stop
+ }
+}
+
+ACTOR ZStalagmiteLarge 49
+{
+ Game Hexen
+ Radius 8
+ Height 48
+ +SOLID
+ States
+ {
+ Spawn:
+ SGM1 A -1
+ Stop
+ }
+}
+
+ACTOR ZStalagmiteMedium 50
+{
+ Game Hexen
+ Radius 6
+ Height 40
+ +SOLID
+ States
+ {
+ Spawn:
+ SGM2 A -1
+ Stop
+ }
+}
+
+ACTOR ZStalagmiteSmall 51
+{
+ Game Hexen
+ Radius 8
+ Height 36
+ +SOLID
+ States
+ {
+ Spawn:
+ SGM3 A -1
+ Stop
+ }
+}
+
+ACTOR ZStalactiteLarge 52
+{
+ Game Hexen
+ Radius 8
+ Height 66
+ +SOLID
+ +SPAWNCEILING
+ +NOGRAVITY
+ States
+ {
+ Spawn:
+ SLC1 A -1
+ Stop
+ }
+}
+
+ACTOR ZStalactiteMedium 56
+{
+ Game Hexen
+ Radius 6
+ Height 50
+ +SOLID
+ +SPAWNCEILING
+ +NOGRAVITY
+ States
+ {
+ Spawn:
+ SLC2 A -1
+ Stop
+ }
+}
+
+ACTOR ZStalactiteSmall 57
+{
+ Game Hexen
+ Radius 8
+ Height 40
+ +SOLID
+ +SPAWNCEILING
+ +NOGRAVITY
+ States
+ {
+ Spawn:
+ SLC3 A -1
+ Stop
+ }
+}
+
+ACTOR ZMossCeiling1 58
+{
+ Game Hexen
+ Radius 20
+ Height 20
+ +SPAWNCEILING
+ +NOGRAVITY
+ States
+ {
+ Spawn:
+ MSS1 A -1
+ Stop
+ }
+}
+
+ACTOR ZMossCeiling2 59
+{
+ Game Hexen
+ Radius 20
+ Height 24
+ +SPAWNCEILING
+ +NOGRAVITY
+ States
+ {
+ Spawn:
+ MS21 A -1
+ Stop
+ }
+}
+
+ACTOR ZSwampVine 60
+{
+ Game Hexen
+ Radius 8
+ Height 52
+ +SOLID
+ States
+ {
+ Spawn:
+ SWMV A -1
+ Stop
+ }
+}
+
+ACTOR ZCorpseKabob 61
+{
+ Game Hexen
+ Radius 10
+ Height 92
+ +SOLID
+ States
+ {
+ Spawn:
+ CPS1 A -1
+ Stop
+ }
+}
+
+ACTOR ZCorpseSleeping 62
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ CPS2 A -1
+ Stop
+ }
+}
+
+ACTOR ZTombstoneRIP 63
+{
+ Game Hexen
+ Radius 10
+ Height 46
+ +SOLID
+ States
+ {
+ Spawn:
+ TMS1 A -1
+ Stop
+ }
+}
+
+ACTOR ZTombstoneShane 64
+{
+ Game Hexen
+ Radius 10
+ Height 46
+ +SOLID
+ States
+ {
+ Spawn:
+ TMS2 A -1
+ Stop
+ }
+}
+
+ACTOR ZTombstoneBigCross 65
+{
+ Game Hexen
+ Radius 10
+ Height 46
+ +SOLID
+ States
+ {
+ Spawn:
+ TMS3 A -1
+ Stop
+ }
+}
+
+ACTOR ZTombstoneBrianR 66
+{
+ Game Hexen
+ Radius 10
+ Height 52
+ +SOLID
+ States
+ {
+ Spawn:
+ TMS4 A -1
+ Stop
+ }
+}
+
+ACTOR ZTombstoneCrossCircle 67
+{
+ Game Hexen
+ Radius 10
+ Height 52
+ +SOLID
+ States
+ {
+ Spawn:
+ TMS5 A -1
+ Stop
+ }
+}
+
+ACTOR ZTombstoneSmallCross 68
+{
+ Game Hexen
+ Radius 8
+ Height 46
+ +SOLID
+ States
+ {
+ Spawn:
+ TMS6 A -1
+ Stop
+ }
+}
+
+ACTOR ZTombstoneBrianP 69
+{
+ Game Hexen
+ Radius 8
+ Height 46
+ +SOLID
+ States
+ {
+ Spawn:
+ TMS7 A -1
+ Stop
+ }
+}
+
+ACTOR ZCorpseHanging 71
+{
+ Game Hexen
+ Radius 6
+ Height 75
+ +SOLID
+ +SPAWNCEILING
+ +NOGRAVITY
+ States
+ {
+ Spawn:
+ CPS3 A -1
+ Stop
+ }
+}
+
+ACTOR ZStatueGargoyleGreenTall 72
+{
+ Game Hexen
+ Radius 14
+ Height 108
+ +SOLID
+ States
+ {
+ Spawn:
+ STT2 A -1
+ Stop
+ }
+}
+
+ACTOR ZStatueGargoyleBlueTall 73
+{
+ Game Hexen
+ Radius 14
+ Height 108
+ +SOLID
+ States
+ {
+ Spawn:
+ STT3 A -1
+ Stop
+ }
+}
+
+ACTOR ZStatueGargoyleGreenShort 74
+{
+ Game Hexen
+ Radius 14
+ Height 62
+ +SOLID
+ States
+ {
+ Spawn:
+ STT4 A -1
+ Stop
+ }
+}
+
+ACTOR ZStatueGargoyleBlueShort 76
+{
+ Game Hexen
+ Radius 14
+ Height 62
+ +SOLID
+ States
+ {
+ Spawn:
+ STT5 A -1
+ Stop
+ }
+}
+
+ACTOR ZStatueGargoyleStripeTall 8044
+{
+ Game Hexen
+ Radius 14
+ Height 108
+ +SOLID
+ States
+ {
+ Spawn:
+ GAR1 A -1
+ Stop
+ }
+}
+
+ACTOR ZStatueGargoyleDarkRedTall 8045
+{
+ Game Hexen
+ Radius 14
+ Height 108
+ +SOLID
+ States
+ {
+ Spawn:
+ GAR2 A -1
+ Stop
+ }
+}
+
+ACTOR ZStatueGargoyleRedTall 8046
+{
+ Game Hexen
+ Radius 14
+ Height 108
+ +SOLID
+ States
+ {
+ Spawn:
+ GAR3 A -1
+ Stop
+ }
+}
+
+ACTOR ZStatueGargoyleTanTall 8047
+{
+ Game Hexen
+ Radius 14
+ Height 108
+ +SOLID
+ States
+ {
+ Spawn:
+ GAR4 A -1
+ Stop
+ }
+}
+
+ACTOR ZStatueGargoyleRustTall 8048
+{
+ Game Hexen
+ Radius 14
+ Height 108
+ +SOLID
+ States
+ {
+ Spawn:
+ GAR5 A -1
+ Stop
+ }
+}
+
+ACTOR ZStatueGargoyleDarkRedShort 8049
+{
+ Game Hexen
+ Radius 14
+ Height 62
+ +SOLID
+ States
+ {
+ Spawn:
+ GAR6 A -1
+ Stop
+ }
+}
+
+ACTOR ZStatueGargoyleRedShort 8050
+{
+ Game Hexen
+ Radius 14
+ Height 62
+ +SOLID
+ States
+ {
+ Spawn:
+ GAR7 A -1
+ Stop
+ }
+}
+
+ACTOR ZStatueGargoyleTanShort 8051
+{
+ Game Hexen
+ Radius 14
+ Height 62
+ +SOLID
+ States
+ {
+ Spawn:
+ GAR8 A -1
+ Stop
+ }
+}
+
+ACTOR ZStatueGargoyleRustShort 8052
+{
+ Game Hexen
+ Radius 14
+ Height 62
+ +SOLID
+ States
+ {
+ Spawn:
+ GAR9 A -1
+ Stop
+ }
+}
+
+ACTOR ZBannerTattered 77
+{
+ Game Hexen
+ Radius 8
+ Height 120
+ +SOLID
+ States
+ {
+ Spawn:
+ BNR1 A -1
+ Stop
+ }
+}
+
+ACTOR ZTreeLarge1 78
+{
+ Game Hexen
+ Radius 15
+ Height 180
+ +SOLID
+ States
+ {
+ Spawn:
+ TRE4 A -1
+ Stop
+ }
+}
+
+ACTOR ZTreeLarge2 79
+{
+ Game Hexen
+ Radius 15
+ Height 180
+ +SOLID
+ States
+ {
+ Spawn:
+ TRE5 A -1
+ Stop
+ }
+}
+
+ACTOR ZTreeGnarled1 80
+{
+ Game Hexen
+ Radius 22
+ Height 100
+ +SOLID
+ States
+ {
+ Spawn:
+ TRE6 A -1
+ Stop
+ }
+}
+
+ACTOR ZTreeGnarled2 87
+{
+ Game Hexen
+ Radius 22
+ Height 100
+ +SOLID
+ States
+ {
+ Spawn:
+ TRE7 A -1
+ Stop
+ }
+}
+
+ACTOR ZLog 88
+{
+ Game Hexen
+ Radius 20
+ Height 25
+ +SOLID
+ States
+ {
+ Spawn:
+ LOGG A -1
+ Stop
+ }
+}
+
+ACTOR ZStalactiteIceLarge 89
+{
+ Game Hexen
+ Radius 8
+ Height 66
+ +SOLID
+ +SPAWNCEILING
+ +NOGRAVITY
+ States
+ {
+ Spawn:
+ ICT1 A -1
+ Stop
+ }
+}
+
+ACTOR ZStalactiteIceMedium 90
+{
+ Game Hexen
+ Radius 5
+ Height 50
+ +SOLID
+ +SPAWNCEILING
+ +NOGRAVITY
+ States
+ {
+ Spawn:
+ ICT2 A -1
+ Stop
+ }
+}
+
+ACTOR ZStalactiteIceSmall 91
+{
+ Game Hexen
+ Radius 4
+ Height 32
+ +SOLID
+ +SPAWNCEILING
+ +NOGRAVITY
+ States
+ {
+ Spawn:
+ ICT3 A -1
+ Stop
+ }
+}
+
+ACTOR ZStalactiteIceTiny 92
+{
+ Game Hexen
+ Radius 4
+ Height 8
+ +SOLID
+ +SPAWNCEILING
+ +NOGRAVITY
+ States
+ {
+ Spawn:
+ ICT4 A -1
+ Stop
+ }
+}
+
+ACTOR ZStalagmiteIceLarge 93
+{
+ Game Hexen
+ Radius 8
+ Height 66
+ +SOLID
+ States
+ {
+ Spawn:
+ ICM1 A -1
+ Stop
+ }
+}
+
+ACTOR ZStalagmiteIceMedium 94
+{
+ Game Hexen
+ Radius 5
+ Height 50
+ +SOLID
+ States
+ {
+ Spawn:
+ ICM2 A -1
+ Stop
+ }
+}
+
+ACTOR ZStalagmiteIceSmall 95
+{
+ Game Hexen
+ Radius 4
+ Height 32
+ +SOLID
+ States
+ {
+ Spawn:
+ ICM3 A -1
+ Stop
+ }
+}
+
+ACTOR ZStalagmiteIceTiny 96
+{
+ Game Hexen
+ Radius 4
+ Height 8
+ +SOLID
+ States
+ {
+ Spawn:
+ ICM4 A -1
+ Stop
+ }
+}
+
+ACTOR ZRockBrown1 97
+{
+ Game Hexen
+ Radius 17
+ Height 72
+ +SOLID
+ States
+ {
+ Spawn:
+ RKBL A -1
+ Stop
+ }
+}
+
+ACTOR ZRockBrown2 98
+{
+ Game Hexen
+ Radius 15
+ Height 50
+ +SOLID
+ States
+ {
+ Spawn:
+ RKBS A -1
+ Stop
+ }
+}
+
+ACTOR ZRockBlack 99
+{
+ Game Hexen
+ Radius 20
+ Height 40
+ +SOLID
+ States
+ {
+ Spawn:
+ RKBK A -1
+ Stop
+ }
+}
+
+ACTOR ZRubble1 100
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ RBL1 A -1
+ Stop
+ }
+}
+
+ACTOR ZRubble2 101
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ RBL2 A -1
+ Stop
+ }
+}
+
+ACTOR ZRubble3 102
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ States
+ {
+ Spawn:
+ RBL3 A -1
+ Stop
+ }
+}
+
+ACTOR ZVasePillar 103
+{
+ Game Hexen
+ Radius 12
+ Height 54
+ +SOLID
+ States
+ {
+ Spawn:
+ VASE A -1
+ Stop
+ }
+}
+
+ACTOR ZCorpseLynched 108
+{
+ Game Hexen
+ Radius 11
+ Height 95
+ +SOLID
+ +SPAWNCEILING
+ +NOGRAVITY
+ States
+ {
+ Spawn:
+ CPS4 A -1
+ Stop
+ }
+}
+
+ACTOR ZCandle 119
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ +NOGRAVITY
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ CNDL ABC 4 Bright
+ Loop
+ }
+}
+
+ACTOR ZBarrel 8100
+{
+ Game Hexen
+ Radius 15
+ Height 32
+ +SOLID
+ States
+ {
+ Spawn:
+ ZBAR A -1
+ Stop
+ }
+}
+
+ACTOR ZBucket 8103
+{
+ Game Hexen
+ Radius 8
+ Height 72
+ +SOLID
+ +SPAWNCEILING
+ +NOGRAVITY
+ States
+ {
+ Spawn:
+ BCKT A -1
+ Stop
+ }
+}
+
+ACTOR ZFireThing 8060
+{
+ Game Hexen
+ Radius 5
+ Height 10
+ +SOLID
+ States
+ {
+ Spawn:
+ FSKL A 4 Bright
+ FSKL B 3 Bright
+ FSKL C 4 Bright
+ FSKL D 3 Bright
+ FSKL E 4 Bright
+ FSKL F 3 Bright
+ FSKL G 4 Bright
+ FSKL H 3 Bright
+ FSKL I 4 Bright
+ Loop
+ }
+}
+
+ACTOR ZBrassTorch 8061
+{
+ Game Hexen
+ Radius 6
+ Height 35
+ +SOLID
+ States
+ {
+ Spawn:
+ BRTR ABCDEFGHIJKLM 4 Bright
+ Loop
+ }
+}
+
+ACTOR ZBlueCandle 8066
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ BCAN ABCDE 5 Bright
+ Loop
+ }
+}
+
+ACTOR ZIronMaiden 8067
+{
+ Game Hexen
+ Radius 12
+ Height 60
+ +SOLID
+ States
+ {
+ Spawn:
+ IRON A -1
+ Stop
+ }
+}
+
+ACTOR ZChainBit32 8071
+{
+ Game Hexen
+ Radius 4
+ Height 32
+ +SPAWNCEILING
+ +NOGRAVITY
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ CHNS A -1
+ Stop
+ }
+}
+
+ACTOR ZChainBit64 8072
+{
+ Game Hexen
+ Radius 4
+ Height 64
+ +SPAWNCEILING
+ +NOGRAVITY
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ CHNS B -1
+ Stop
+ }
+}
+
+ACTOR ZChainEndHeart 8073
+{
+ Game Hexen
+ Radius 4
+ Height 32
+ +SPAWNCEILING
+ +NOGRAVITY
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ CHNS C -1
+ Stop
+ }
+}
+
+ACTOR ZChainEndHook1 8074
+{
+ Game Hexen
+ Radius 4
+ Height 32
+ +SPAWNCEILING
+ +NOGRAVITY
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ CHNS D -1
+ Stop
+ }
+}
+
+ACTOR ZChainEndHook2 8075
+{
+ Game Hexen
+ Radius 4
+ Height 32
+ +SPAWNCEILING
+ +NOGRAVITY
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ CHNS E -1
+ Stop
+ }
+}
+
+ACTOR ZChainEndSpike 8076
+{
+ Game Hexen
+ Radius 4
+ Height 32
+ +SPAWNCEILING
+ +NOGRAVITY
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ CHNS F -1
+ Stop
+ }
+}
+
+ACTOR ZChainEndSkull 8077
+{
+ Game Hexen
+ Radius 4
+ Height 32
+ +SPAWNCEILING
+ +NOGRAVITY
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ CHNS G -1
+ Stop
+ }
+}
+
+ACTOR TableShit1 8500
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ TST1 A -1
+ Stop
+ }
+}
+
+ACTOR TableShit2 8501
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ TST2 A -1
+ Stop
+ }
+}
+
+ACTOR TableShit3 8502
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ TST3 A -1
+ Stop
+ }
+}
+
+ACTOR TableShit4 8503
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ TST4 A -1
+ Stop
+ }
+}
+
+ACTOR TableShit5 8504
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ TST5 A -1
+ Stop
+ }
+}
+
+ACTOR TableShit6 8505
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ TST6 A -1
+ Stop
+ }
+}
+
+ACTOR TableShit7 8506
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ TST7 A -1
+ Stop
+ }
+}
+
+ACTOR TableShit8 8507
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ TST8 A -1
+ Stop
+ }
+}
+
+ACTOR TableShit9 8508
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ TST1 A -1
+ Stop
+ }
+}
+
+ACTOR TableShit10 8509
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ +NOBLOCKMAP
+ States
+ {
+ Spawn:
+ TST0 A -1
+ Stop
+ }
+}
+
+ACTOR TeleSmoke 140
+{
+ Game Hexen
+ Radius 20
+ Height 16
+ +NOGRAVITY
+ +NOBLOCKMAP
+ RenderStyle Translucent
+ Alpha 0.6
+ States
+ {
+ Spawn:
+ TSMK A 4
+ TSMK B 3
+ TSMK C 4
+ TSMK D 3
+ TSMK E 4
+ TSMK F 3
+ TSMK G 4
+ TSMK H 3
+ TSMK I 4
+ TSMK J 3
+ TSMK K 4
+ TSMK L 3
+ TSMK M 4
+ TSMK N 3
+ TSMK O 4
+ TSMK P 3
+ TSMK Q 4
+ TSMK R 3
+ TSMK S 4
+ TSMK T 3
+ TSMK U 4
+ TSMK V 3
+ TSMK W 4
+ TSMK X 3
+ TSMK Y 4
+ TSMK Z 3
+ Loop
+ }
+}
+
diff --git a/wadsrc/decorate/hexen/hexenkeys.txt b/wadsrc/decorate/hexen/hexenkeys.txt
index 2cf8925e9a..e58693e696 100644
--- a/wadsrc/decorate/hexen/hexenkeys.txt
+++ b/wadsrc/decorate/hexen/hexenkeys.txt
@@ -1 +1,160 @@
-//
+
+ACTOR HexenKey : Key
+{
+ Radius 8
+ Height 20
+}
+
+ACTOR KeySteel : HexenKey 8030
+{
+ Game Hexen
+ SpawnID 85
+ Inventory.Icon KEYSLOT1
+ Inventory.PickupMessage "$TXT_KEY_STEEL"
+ States
+ {
+ Spawn:
+ KEY1 A -1
+ Stop
+ }
+}
+
+ACTOR KeyCave : HexenKey 8031
+{
+ Game Hexen
+ SpawnID 86
+ Inventory.Icon KEYSLOT2
+ Inventory.PickupMessage "$TXT_KEY_CAVE"
+ States
+ {
+ Spawn:
+ KEY2 A -1
+ Stop
+ }
+}
+
+ACTOR KeyAxe : HexenKey 8032
+{
+ Game Hexen
+ SpawnID 87
+ Inventory.Icon KEYSLOT3
+ Inventory.PickupMessage "$TXT_KEY_AXE"
+ States
+ {
+ Spawn:
+ KEY3 A -1
+ Stop
+ }
+}
+
+ACTOR KeyFire : HexenKey 8033
+{
+ Game Hexen
+ SpawnID 88
+ Inventory.Icon KEYSLOT4
+ Inventory.PickupMessage "$TXT_KEY_FIRE"
+ States
+ {
+ Spawn:
+ KEY4 A -1
+ Stop
+ }
+}
+
+ACTOR KeyEmerald : HexenKey 8034
+{
+ Game Hexen
+ SpawnID 89
+ Inventory.Icon KEYSLOT5
+ Inventory.PickupMessage "$TXT_KEY_EMERALD"
+ States
+ {
+ Spawn:
+ KEY5 A -1
+ Stop
+ }
+}
+
+ACTOR KeyDungeon : HexenKey 8035
+{
+ Game Hexen
+ SpawnID 90
+ Inventory.Icon KEYSLOT6
+ Inventory.PickupMessage "$TXT_KEY_DUNGEON"
+ States
+ {
+ Spawn:
+ KEY6 A -1
+ Stop
+ }
+}
+
+ACTOR KeySilver : HexenKey 8036
+{
+ Game Hexen
+ SpawnID 91
+ Inventory.Icon KEYSLOT7
+ Inventory.PickupMessage "$TXT_KEY_SILVER"
+ States
+ {
+ Spawn:
+ KEY7 A -1
+ Stop
+ }
+}
+
+ACTOR KeyRusted : HexenKey 8037
+{
+ Game Hexen
+ SpawnID 92
+ Inventory.Icon KEYSLOT8
+ Inventory.PickupMessage "$TXT_KEY_RUSTED"
+ States
+ {
+ Spawn:
+ KEY8 A -1
+ Stop
+ }
+}
+
+ACTOR KeyHorn : HexenKey 8038
+{
+ Game Hexen
+ SpawnID 93
+ Inventory.Icon KEYSLOT9
+ Inventory.PickupMessage "$TXT_KEY_HORN"
+ States
+ {
+ Spawn:
+ KEY9 A -1
+ Stop
+ }
+}
+
+ACTOR KeySwamp : HexenKey 8039
+{
+ Game Hexen
+ SpawnID 94
+ Inventory.Icon KEYSLOTA
+ Inventory.PickupMessage "$TXT_KEY_SWAMP"
+ States
+ {
+ Spawn:
+ KEYA A -1
+ Stop
+ }
+}
+
+ACTOR KeyCastle : HexenKey 8200
+{
+ Game Hexen
+ Inventory.Icon KEYSLOTB
+ Inventory.PickupMessage "$TXT_KEY_CASTLE"
+ States
+ {
+ Spawn:
+ KEYB A -1
+ Stop
+ }
+}
+
diff --git a/wadsrc/decorate/hexen/speedboots.txt b/wadsrc/decorate/hexen/speedboots.txt
index 2cf8925e9a..e4b0eefd35 100644
--- a/wadsrc/decorate/hexen/speedboots.txt
+++ b/wadsrc/decorate/hexen/speedboots.txt
@@ -1 +1,18 @@
-//
+
+
+ACTOR ArtiSpeedBoots : PowerupGiver 8002
+{
+ Game Hexen
+ SpawnID 13
+ +FLOATBOB
+ +INVENTORY.PICKUPFLASH
+ Inventory.Icon ARTISPED
+ Inventory.PickupMessage "$TXT_ARTISPEED"
+ Powerup.Type Speed
+ States
+ {
+ Spawn:
+ SPED ABCDEFGH 3 Bright
+ Loop
+ }
+}
diff --git a/zdoom.vcproj b/zdoom.vcproj
index ab8db47130..523e705bd0 100644
--- a/zdoom.vcproj
+++ b/zdoom.vcproj
@@ -3744,54 +3744,9 @@
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" "/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-