diff -N -p -r -u yadex-1.7.0-orig/src/editloop.cc yadex-1.7.0/src/editloop.cc
--- yadex-1.7.0-orig/src/editloop.cc Tue Oct 19 20:53:55 2004
+++ yadex-1.7.0/src/editloop.cc Wed Oct 20 00:54:28 2004
@@ -43,6 +43,7 @@ Place, Suite 330, Boston, MA 02111-1307,
#include "entry.h"
#include "entry2.h"
#include "events.h"
+#include "game.h"
#include "gfx.h"
#include "gfx2.h" // show_character_set() show_pcolours()
#include "gfx3.h"
@@ -94,6 +95,7 @@ static int menubar_out_y1; /* FIXME */
/* prototypes of private functions */
static int SortLevels (const void *item1, const void *item2);
+static char *GetBehaviorFileName (const char *levelname);
/*
* SelectLevel
@@ -303,15 +305,28 @@ e.mb_menu[MBM_FILE] = new Menu (NULL,
"~Quit", 'q', 0,
NULL);
-e.mb_menu[MBM_EDIT] = new Menu (NULL,
- "~Copy object(s)", 'o', 0,
- "~Add object", YK_INS, 0,
- "~Delete object(s)", YK_DEL, 0,
- "~Exchange object numbers", 24, 0,
- "~Preferences...", YK_F5, 0,
- "~Snap to grid", 'y', MIF_VTICK, &e.grid_snap, 0,
- "~Lock grid step", 'z', MIF_VTICK, &e.grid_step_locked, 0,
- NULL);
+
+if (yg_level_format == YGLF_HEXEN)
+ e.mb_menu[MBM_EDIT] = new Menu (NULL,
+ "~Copy object(s)", 'o', 0,
+ "~Add object", YK_INS, 0,
+ "~Delete object(s)", YK_DEL, 0,
+ "~Exchange object numbers", 24, 0,
+ "~Preferences...", YK_F5, 0,
+ "~Snap to grid", 'y', MIF_VTICK, &e.grid_snap, 0,
+ "~Lock grid step", 'z', MIF_VTICK, &e.grid_step_locked, 0,
+ "Load ~BEHAVIOR lump", 'b', 0,
+ NULL);
+else
+ e.mb_menu[MBM_EDIT] = new Menu (NULL,
+ "~Copy object(s)", 'o', 0,
+ "~Add object", YK_INS, 0,
+ "~Delete object(s)", YK_DEL, 0,
+ "~Exchange object numbers", 24, 0,
+ "~Preferences...", YK_F5, 0,
+ "~Snap to grid", 'y', MIF_VTICK, &e.grid_snap, 0,
+ "~Lock grid step", 'z', MIF_VTICK, &e.grid_step_locked, 0,
+ NULL);
// If you change the order of modes here, don't forget
// to modify the <modes> array.
@@ -2357,6 +2372,30 @@ cancel_save_as:
RedrawMap = 1;
}
+ // Load BEHAVIOR lump (JL)
+ else if (is.key == 'b')
+ {
+ char *acsfile;
+ const char *acsname;
+ if (levelname)
+ acsname = levelname;
+ else
+ acsname = "behavior";
+ acsfile = GetBehaviorFileName (acsname);
+ FILE* f = fopen(acsfile, "rb");
+ if (f)
+ {
+ FreeFarMemory(Behavior);
+ fseek(f, 0, SEEK_END);
+ BehaviorSize = ftell(f);
+ Behavior = (u8*)GetFarMemory(BehaviorSize);
+ fseek(f, 0, SEEK_SET);
+ fread(Behavior, BehaviorSize, 1, f);
+ fclose(f);
+ }
+ RedrawMap = 1;
+ }
+
/* user likes music */
else if (is.key)
{
@@ -2504,6 +2543,34 @@ static int zoom_fit (edit_t& e)
return 1;
CenterMapAroundCoords ((MapMinX + MapMaxX) / 2, (MapMinY + MapMaxY) / 2);
return 0;
+}
+
+/*
+ get the name of the BEHAVIOR lump file (returns NULL on Esc)
+*/
+
+static char *GetBehaviorFileName (const char *levelname)
+{
+#define BUFSZ 79
+ char *outfile = (char *) GetMemory (BUFSZ + 1);
+
+ /* get the file name */
+ // If no name, find a default one
+ if (! levelname)
+ {
+ levelname = "behavior";
+ }
+
+ al_scpslower (outfile, levelname, BUFSZ);
+ al_saps (outfile, ".o", BUFSZ);
+ InputFileName (-1, -1, "Name of the BEHAVIOR script file:", BUFSZ, outfile);
+ /* escape */
+ if (outfile[0] == '\0')
+ {
+ FreeMemory (outfile);
+ return 0;
+ }
+ return outfile;
}
diff -N -p -r -u yadex-1.7.0-orig/src/l_prop.cc yadex-1.7.0/src/l_prop.cc
--- yadex-1.7.0-orig/src/l_prop.cc Tue Oct 19 20:53:55 2004
+++ yadex-1.7.0/src/l_prop.cc Tue Oct 19 23:16:01 2004
@@ -111,7 +111,7 @@ static const char *PrintLdtgroup (void *
void LinedefProperties (int x0, int y0, SelPtr obj)
{
- char *menustr[8];
+ char *menustr[12];
char texname[WAD_TEX_NAME + 1];
int n, val;
SelPtr cur, sdlist;
@@ -132,9 +132,9 @@ void LinedefProperties (int x0, int y0,
switch (val)
{
case 1:
- for (n = 0; n < 8; n++)
+ for (n = 0; n < 12; n++)
menustr[n] = (char *) GetMemory (60);
- sprintf (menustr[7], "Edit linedef #%d", obj->objnum);
+ sprintf (menustr[11], "Edit linedef #%d", obj->objnum);
sprintf (menustr[0], "Change flags (Current: %d)",
LineDefs[obj->objnum].flags);
sprintf (menustr[1], "Change type (Current: %d)",
@@ -149,7 +149,16 @@ void LinedefProperties (int x0, int y0,
LineDefs[obj->objnum].sidedef1);
sprintf (menustr[6], "Change 2nd sidedef ref. (Current: #%d)",
LineDefs[obj->objnum].sidedef2);
- val = vDisplayMenu (x0 + 42, subwin_y0, menustr[7],
+ sprintf (menustr[7], "Change special arg2 (Current: %d)",
+ LineDefs[obj->objnum].arg2);
+ sprintf (menustr[8], "Change special arg3 (Current: %d)",
+ LineDefs[obj->objnum].arg3);
+ sprintf (menustr[9], "Change special arg4 (Current: %d)",
+ LineDefs[obj->objnum].arg4);
+ sprintf (menustr[10], "Change special arg5 (Current: %d)",
+ LineDefs[obj->objnum].arg5);
+ if (yg_level_format == YGLF_HEXEN)
+ val = vDisplayMenu (x0 + 42, subwin_y0, menustr[11],
menustr[0], YK_, 0,
menustr[1], YK_, 0,
menustr[2], YK_, 0,
@@ -157,8 +166,22 @@ void LinedefProperties (int x0, int y0,
menustr[4], YK_, 0,
menustr[5], YK_, 0,
menustr[6], YK_, 0,
+ menustr[7], YK_, 0,
+ menustr[8], YK_, 0,
+ menustr[9], YK_, 0,
+ menustr[10], YK_, 0,
NULL);
- for (n = 0; n < 8; n++)
+ else
+ val = vDisplayMenu (x0 + 42, subwin_y0, menustr[11],
+ menustr[0], YK_, 0,
+ menustr[1], YK_, 0,
+ menustr[2], YK_, 0,
+ menustr[3], YK_, 0,
+ menustr[4], YK_, 0,
+ menustr[5], YK_, 0,
+ menustr[6], YK_, 0,
+ NULL);
+ for (n = 0; n < 12; n++)
FreeMemory (menustr[n]);
subsubwin_y0 = subwin_y0 + BOX_BORDER + (2 + val) * FONTH;
switch (val)
@@ -267,6 +290,50 @@ void LinedefProperties (int x0, int y0,
LineDefs[cur->objnum].sidedef2 = val;
MadeChanges = 1;
MadeMapChanges = 1;
+ }
+ break;
+
+ case 8:
+ val = InputIntegerValue (x0 + 84, subsubwin_y0,
+ 0, 255, LineDefs[obj->objnum].arg2);
+ if (val != IIV_CANCEL) // Not [esc]
+ {
+ for (cur = obj; cur; cur = cur->next)
+ LineDefs[cur->objnum].arg2 = val;
+ MadeChanges = 1;
+ }
+ break;
+
+ case 9:
+ val = InputIntegerValue (x0 + 84, subsubwin_y0,
+ 0, 255, LineDefs[obj->objnum].arg3);
+ if (val != IIV_CANCEL) // Not [esc]
+ {
+ for (cur = obj; cur; cur = cur->next)
+ LineDefs[cur->objnum].arg3 = val;
+ MadeChanges = 1;
+ }
+ break;
+
+ case 10:
+ val = InputIntegerValue (x0 + 84, subsubwin_y0,
+ 0, 255, LineDefs[obj->objnum].arg4);
+ if (val != IIV_CANCEL) // Not [esc]
+ {
+ for (cur = obj; cur; cur = cur->next)
+ LineDefs[cur->objnum].arg4 = val;
+ MadeChanges = 1;
+ }
+ break;
+
+ case 11:
+ val = InputIntegerValue (x0 + 84, subsubwin_y0,
+ 0, 255, LineDefs[obj->objnum].arg5);
+ if (val != IIV_CANCEL) // Not [esc]
+ {
+ for (cur = obj; cur; cur = cur->next)
+ LineDefs[cur->objnum].arg5 = val;
+ MadeChanges = 1;
}
break;
}
diff -N -p -r -u yadex-1.7.0-orig/src/levels.cc yadex-1.7.0/src/levels.cc
--- yadex-1.7.0-orig/src/levels.cc Tue Oct 19 20:53:55 2004
+++ yadex-1.7.0/src/levels.cc Wed Oct 20 00:04:05 2004
@@ -58,6 +58,8 @@ int NumVertices; /* number of vertexes
VPtr Vertices; /* vertex data */
int NumSectors; /* number of sectors */
SPtr Sectors; /* sectors data */
+u8* Behavior;
+int BehaviorSize;
// FIXME should be somewhere else
int NumWTexture; /* number of wall textures */
@@ -95,6 +97,10 @@ y_file_name_t Level_file_name_saved; /*
the Level has never been saved yet,
an empty string. */
+static u8 DefaultBehavior[16] = {
+ 'A', 'C', 'S', 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
void EmptyLevelData (const char *levelname)
{
Things = 0;
@@ -109,6 +115,12 @@ Sectors = 0;
NumSectors = 0;
Vertices = 0;
NumVertices = 0;
+if (yg_level_format == YGLF_HEXEN)
+ {
+ BehaviorSize = sizeof(DefaultBehavior);
+ Behavior = (u8*) GetFarMemory ((unsigned long) BehaviorSize );
+ memcpy(Behavior, DefaultBehavior, BehaviorSize);
+ }
}
@@ -199,7 +211,7 @@ else
{
offset = dir->dir.start;
length = dir->dir.size;
- if (MainWad == Iwad4) // Hexen mode
+ if (yg_level_format == YGLF_HEXEN) // Hexen mode
{
NumThings = (int) (length / WAD_HEXEN_THING_BYTES);
if ((i32) (NumThings * WAD_HEXEN_THING_BYTES) != length)
@@ -234,18 +246,23 @@ if (NumThings > 0)
rc = 1;
goto byebye;
}
- if (MainWad == Iwad4) // Hexen mode
+ if (yg_level_format == YGLF_HEXEN) // Hexen mode
for (long n = 0; n < NumThings; n++)
{
u8 dummy2[6];
- wf->read_i16 (); // Tid
+ wf->read_i16 (&Things[n].tid );
wf->read_i16 (&Things[n].xpos );
wf->read_i16 (&Things[n].ypos );
- wf->read_i16 (); // Height
+ wf->read_i16 (&Things[n].height);
wf->read_i16 (&Things[n].angle);
wf->read_i16 (&Things[n].type );
wf->read_i16 (&Things[n].when );
- wf->read_bytes (dummy2, sizeof dummy2);
+ wf->read_u8 (Things[n].special);
+ wf->read_u8 (Things[n].arg1 );
+ wf->read_u8 (Things[n].arg2 );
+ wf->read_u8 (Things[n].arg3 );
+ wf->read_u8 (Things[n].arg4 );
+ wf->read_u8 (Things[n].arg5 );
if (wf->error ())
{
err ("%s: error reading thing #%ld", lump_name, n);
@@ -283,7 +300,7 @@ if (yg_level_format != YGLF_ALPHA)
NumLineDefs = 0;
else
{
- if (MainWad == Iwad4) // Hexen mode
+ if (yg_level_format == YGLF_HEXEN) // Hexen mode
{
NumLineDefs = (int) (dir->dir.size / WAD_HEXEN_LINEDEF_BYTES);
if ((i32) (NumLineDefs * WAD_HEXEN_LINEDEF_BYTES) != dir->dir.size)
@@ -310,7 +327,7 @@ if (yg_level_format != YGLF_ALPHA)
rc = 1;
goto byebye;
}
- if (MainWad == Iwad4) // Hexen mode
+ if (yg_level_format == YGLF_HEXEN) // Hexen mode
for (long n = 0; n < NumLineDefs; n++)
{
u8 dummy[6];
@@ -322,6 +339,10 @@ if (yg_level_format != YGLF_ALPHA)
wf->read_i16 (&LineDefs[n].sidedef2);
LineDefs[n].type = dummy[0];
LineDefs[n].tag = dummy[1]; // arg1 often contains a tag
+ LineDefs[n].arg2 = dummy[2];
+ LineDefs[n].arg3 = dummy[3];
+ LineDefs[n].arg4 = dummy[4];
+ LineDefs[n].arg5 = dummy[5];
if (wf->error ())
{
err ("%s: error reading linedef #%ld", lump_name, n);
@@ -907,6 +928,37 @@ else // Doom alpha--a wholly different
}
}
+// Read BEHAVIOR
+if (yg_level_format == YGLF_HEXEN)
+{
+const char *lump_name = "BEHAVIOR";
+verbmsg (" behavior\n");
+dir = FindMasterDir (Level, lump_name);
+if (dir)
+ {
+ BehaviorSize = (int)dir->dir.size;
+ if (BehaviorSize > 0)
+ {
+ Behavior = (u8*) GetFarMemory ((unsigned long) BehaviorSize );
+ const Wad_file *wf = dir->wadfile;
+ wf->seek (dir->dir.start);
+ if (wf->error ())
+ {
+ err ("%s: seek error", lump_name);
+ rc = 1;
+ goto byebye;
+ }
+ wf->read_bytes (Behavior, BehaviorSize);
+ if (wf->error ())
+ {
+ err ("%s: error behavior lump", lump_name);
+ rc = 1;
+ goto byebye;
+ }
+ }
+ }
+}
+
/* Sanity checking on sidedefs: the sector must exist. I don't
make this a fatal error, though, because it's not exceptional
to find wads with unused sidedefs with a sector# of -1. Well
@@ -1011,16 +1063,10 @@ int SaveLevelData (const char *outfile,
FILE *file;
MDirPtr dir;
int n;
-long lump_offset[WAD_LL__];
-size_t lump_size[WAD_LL__];
+long lump_offset[WAD_LL__MAX];
+size_t lump_size[WAD_LL__MAX];
wad_level_lump_no_t l;
-if (yg_level_format == YGLF_HEXEN || ! strcmp (Game, "hexen"))
- {
- Notify (-1, -1, "I refuse to save. Hexen mode is still",
- "too badly broken. You would lose data.");
- return 1;
- }
if (! level_name || ! levelname2levelno (level_name))
{
nf_bug ("SaveLevelData: bad level_name \"%s\", using \"E1M1\" instead.",
@@ -1047,9 +1093,15 @@ bool reuse_nodes = Level
&& ! MadeMapChanges
&& yg_level_format != YGLF_ALPHA;
+int NumLumps;
+if (yg_level_format == YGLF_HEXEN)
+ NumLumps = WAD_LL__HEXEN;
+else
+ NumLumps = WAD_LL__DOOM;
+
// Write the pwad header
WriteBytes (file, "PWAD", 4); // Pwad file
-file_write_i32 (file, WAD_LL__); // Number of entries = 11
+file_write_i32 (file, NumLumps); // Number of entries = 11
file_write_i32 (file, 0); // Fix this up later
if (Level)
dir = Level->next;
@@ -1067,11 +1119,30 @@ lump_offset[l] = ftell (file);
ObjectsNeeded (OBJ_THINGS, 0);
for (n = 0; n < NumThings; n++)
{
- file_write_i16 (file, Things[n].xpos );
- file_write_i16 (file, Things[n].ypos );
- file_write_i16 (file, Things[n].angle);
- file_write_i16 (file, Things[n].type );
- file_write_i16 (file, Things[n].when );
+ if (yg_level_format == YGLF_HEXEN)
+ {
+ file_write_i16 (file, Things[n].tid );
+ file_write_i16 (file, Things[n].xpos );
+ file_write_i16 (file, Things[n].ypos );
+ file_write_i16 (file, Things[n].height);
+ file_write_i16 (file, Things[n].angle);
+ file_write_i16 (file, Things[n].type );
+ file_write_i16 (file, Things[n].when );
+ WriteBytes (file, &Things[n].special, 1);
+ WriteBytes (file, &Things[n].arg1, 1 );
+ WriteBytes (file, &Things[n].arg2, 1 );
+ WriteBytes (file, &Things[n].arg3, 1 );
+ WriteBytes (file, &Things[n].arg4, 1 );
+ WriteBytes (file, &Things[n].arg5, 1 );
+ }
+ else
+ {
+ file_write_i16 (file, Things[n].xpos );
+ file_write_i16 (file, Things[n].ypos );
+ file_write_i16 (file, Things[n].angle);
+ file_write_i16 (file, Things[n].type );
+ file_write_i16 (file, Things[n].when );
+ }
}
lump_size[l] = ftell (file) - lump_offset[l];
if (Level)
@@ -1083,13 +1154,32 @@ lump_offset[WAD_LL_LINEDEFS] = ftell (fi
ObjectsNeeded (OBJ_LINEDEFS, 0);
for (n = 0; n < NumLineDefs; n++)
{
- file_write_i16 (file, LineDefs[n].start );
- file_write_i16 (file, LineDefs[n].end );
- file_write_i16 (file, LineDefs[n].flags );
- file_write_i16 (file, LineDefs[n].type );
- file_write_i16 (file, LineDefs[n].tag );
- file_write_i16 (file, LineDefs[n].sidedef1);
- file_write_i16 (file, LineDefs[n].sidedef2);
+ if (yg_level_format == YGLF_HEXEN)
+ {
+ u8 dummy[6];
+ dummy[0] = LineDefs[n].type;
+ dummy[1] = LineDefs[n].tag;
+ dummy[2] = LineDefs[n].arg2;
+ dummy[3] = LineDefs[n].arg3;
+ dummy[4] = LineDefs[n].arg4;
+ dummy[5] = LineDefs[n].arg5;
+ file_write_i16 (file, LineDefs[n].start );
+ file_write_i16 (file, LineDefs[n].end );
+ file_write_i16 (file, LineDefs[n].flags );
+ WriteBytes (file, dummy, 6);
+ file_write_i16 (file, LineDefs[n].sidedef1);
+ file_write_i16 (file, LineDefs[n].sidedef2);
+ }
+ else
+ {
+ file_write_i16 (file, LineDefs[n].start );
+ file_write_i16 (file, LineDefs[n].end );
+ file_write_i16 (file, LineDefs[n].flags );
+ file_write_i16 (file, LineDefs[n].type );
+ file_write_i16 (file, LineDefs[n].tag );
+ file_write_i16 (file, LineDefs[n].sidedef1);
+ file_write_i16 (file, LineDefs[n].sidedef2);
+ }
}
lump_size[l] = ftell (file) - lump_offset[l];
if (Level)
@@ -1221,9 +1311,21 @@ lump_size[l] = ftell (file) - lump_offse
if (Level)
dir = dir->next;
+
+// Write the BEHAVIOR lump
+if (yg_level_format == YGLF_HEXEN)
+{
+ l = WAD_LL_BEHAVIOR;
+ lump_offset[l] = ftell (file);
+ WriteBytes(file, Behavior, BehaviorSize);
+ lump_size[l] = BehaviorSize;
+ if (Level)
+ dir = dir->next;
+}
+
// Write the actual directory
long dir_offset = ftell (file);
-for (int L = 0; L < (int) WAD_LL__; L++)
+for (int L = 0; L < (int) NumLumps; L++)
{
file_write_i32 (file, lump_offset[L]);
file_write_i32 (file, lump_size[L]);
diff -N -p -r -u yadex-1.7.0-orig/src/levels.h yadex-1.7.0/src/levels.h
--- yadex-1.7.0-orig/src/levels.h Tue Oct 19 20:53:55 2004
+++ yadex-1.7.0/src/levels.h Tue Oct 19 22:22:49 2004
@@ -28,6 +28,8 @@ extern VPtr Vertices; /* vertices data
extern int NumSegs; /* number of segments */
extern int NumSectors; /* number of sectors */
extern SPtr Sectors; /* sectors data */
+extern u8* Behavior;
+extern int BehaviorSize;
// FIXME should be somewhere else
extern int NumWTexture; /* number of wall textures */
diff -N -p -r -u yadex-1.7.0-orig/src/objects.cc yadex-1.7.0/src/objects.cc
--- yadex-1.7.0-orig/src/objects.cc Tue Oct 19 20:53:55 2004
+++ yadex-1.7.0/src/objects.cc Tue Oct 19 23:53:42 2004
@@ -465,12 +465,28 @@ switch (objtype)
Things[last].type = Things[copyfrom].type;
Things[last].angle = Things[copyfrom].angle;
Things[last].when = Things[copyfrom].when;
+ Things[last].tid = Things[copyfrom].tid;
+ Things[last].height = Things[copyfrom].height;
+ Things[last].special = Things[copyfrom].special;
+ Things[last].arg1 = Things[copyfrom].arg1;
+ Things[last].arg2 = Things[copyfrom].arg2;
+ Things[last].arg3 = Things[copyfrom].arg3;
+ Things[last].arg4 = Things[copyfrom].arg4;
+ Things[last].arg5 = Things[copyfrom].arg5;
}
else
{
Things[last].type = default_thing;
Things[last].angle = 0;
Things[last].when = 0x07;
+ Things[last].tid = 0;
+ Things[last].height = 0;
+ Things[last].special = 0;
+ Things[last].arg1 = 0;
+ Things[last].arg2 = 0;
+ Things[last].arg3 = 0;
+ Things[last].arg4 = 0;
+ Things[last].arg5 = 0;
}
break;
@@ -508,6 +524,10 @@ switch (objtype)
LineDefs[last].flags = LineDefs[copyfrom].flags;
LineDefs[last].type = LineDefs[copyfrom].type;
LineDefs[last].tag = LineDefs[copyfrom].tag;
+ LineDefs[last].arg2 = LineDefs[copyfrom].arg2;
+ LineDefs[last].arg3 = LineDefs[copyfrom].arg3;
+ LineDefs[last].arg4 = LineDefs[copyfrom].arg4;
+ LineDefs[last].arg5 = LineDefs[copyfrom].arg5;
}
else
{
@@ -516,6 +536,10 @@ switch (objtype)
LineDefs[last].flags = 1;
LineDefs[last].type = 0;
LineDefs[last].tag = 0;
+ LineDefs[last].arg2 = 0;
+ LineDefs[last].arg3 = 0;
+ LineDefs[last].arg4 = 0;
+ LineDefs[last].arg5 = 0;
}
LineDefs[last].sidedef1 = OBJ_NO_NONE;
LineDefs[last].sidedef2 = OBJ_NO_NONE;
diff -N -p -r -u yadex-1.7.0-orig/src/sanity.cc yadex-1.7.0/src/sanity.cc
--- yadex-1.7.0-orig/src/sanity.cc Tue Oct 19 20:53:55 2004
+++ yadex-1.7.0/src/sanity.cc Tue Oct 19 22:11:08 2004
@@ -67,10 +67,10 @@ void check_types ()
assert_size (i16, 2);
assert_size (u32, 4);
assert_size (i32, 4);
- assert_size (struct LineDef, 14);
+ assert_size (struct LineDef, 18);
assert_size (struct Sector, 26);
assert_size (struct SideDef, 30);
- assert_size (struct Thing, 10);
+ assert_size (struct Thing, 20);
assert_size (struct Vertex, 4);
assert_wrap (u8, 255, 0);
assert_wrap (i8, 127, -128);
diff -N -p -r -u yadex-1.7.0-orig/src/t_prop.cc yadex-1.7.0/src/t_prop.cc
--- yadex-1.7.0-orig/src/t_prop.cc Tue Oct 19 20:53:55 2004
+++ yadex-1.7.0/src/t_prop.cc Tue Oct 19 23:43:46 2004
@@ -45,6 +45,7 @@ Place, Suite 330, Boston, MA 02111-1307,
static const char *PrintThinggroup (void *ptr);
static const char *PrintThingdef (void *ptr);
int InputThingType (int x0, int y0, int *number);
+int InputLinedefType (int x0, int y0, int *number);
/*
@@ -59,9 +60,9 @@ int n, val;
SelPtr cur;
int subwin_y0;
-for (n = 0; n < 6; n++)
+for (n = 0; n < 14; n++)
menustr[n] = (char *) GetMemory (60);
-sprintf (menustr[5], "Edit thing #%d", obj->objnum);
+sprintf (menustr[13], "Edit thing #%d", obj->objnum);
sprintf (menustr[0], "Change type (Current: %s)",
get_thing_name (Things[obj->objnum].type));
sprintf (menustr[1], "Change angle (Current: %s)",
@@ -72,14 +73,47 @@ sprintf (menustr[3], "Change X position
Things[obj->objnum].xpos);
sprintf (menustr[4], "Change Y position (Current: %d)",
Things[obj->objnum].ypos);
-val = vDisplayMenu (x0, y0, menustr[5],
+sprintf (menustr[5], "Change Z position (Current: %d)",
+ Things[obj->objnum].height);
+sprintf (menustr[6], "Change TID (Current: %d)",
+ Things[obj->objnum].tid);
+sprintf (menustr[7], "Change special (Current: %d)",
+ Things[obj->objnum].special);
+sprintf (menustr[8], "Change arg1 (Current: %d)",
+ Things[obj->objnum].arg1);
+sprintf (menustr[9], "Change arg2 (Current: %d)",
+ Things[obj->objnum].arg2);
+sprintf (menustr[10], "Change arg3 (Current: %d)",
+ Things[obj->objnum].arg3);
+sprintf (menustr[11], "Change arg4 (Current: %d)",
+ Things[obj->objnum].arg4);
+sprintf (menustr[12], "Change arg5 (Current: %d)",
+ Things[obj->objnum].arg5);
+if (yg_level_format == YGLF_HEXEN) // Hexen mode
+val = vDisplayMenu (x0, y0, menustr[13],
menustr[0], YK_, 0,
menustr[1], YK_, 0,
menustr[2], YK_, 0,
menustr[3], YK_, 0,
menustr[4], YK_, 0,
+ menustr[5], YK_, 0,
+ menustr[6], YK_, 0,
+ menustr[7], YK_, 0,
+ menustr[8], YK_, 0,
+ menustr[9], YK_, 0,
+ menustr[10], YK_, 0,
+ menustr[11], YK_, 0,
+ menustr[12], YK_, 0,
NULL);
-for (n = 0; n < 6; n++)
+else
+val = vDisplayMenu (x0, y0, menustr[13],
+ menustr[0], YK_, 0,
+ menustr[1], YK_, 0,
+ menustr[2], YK_, 0,
+ menustr[3], YK_, 0,
+ menustr[4], YK_, 0,
+ NULL);
+for (n = 0; n < 14; n++)
FreeMemory (menustr[n]);
subwin_y0 = y0 + BOX_BORDER + (2 + val) * FONTH;
switch (val)
@@ -237,6 +271,93 @@ switch (val)
n = val - Things[obj->objnum].ypos;
for (cur = obj; cur; cur = cur->next)
Things[cur->objnum].ypos += n;
+ MadeChanges = 1;
+ }
+ break;
+
+ case 6:
+ val = InputIntegerValue (x0 + 42, subwin_y0, -32768, 32767,
+ Things[obj->objnum].height);
+ if (val != IIV_CANCEL)
+ {
+ n = val - Things[obj->objnum].height;
+ for (cur = obj; cur; cur = cur->next)
+ Things[cur->objnum].height += n;
+ MadeChanges = 1;
+ }
+ break;
+
+ case 7:
+ val = InputIntegerValue (x0 + 42, subwin_y0, -32768, 32767,
+ Things[obj->objnum].tid);
+ if (val != IIV_CANCEL)
+ {
+ for (cur = obj; cur; cur = cur->next)
+ Things[cur->objnum].tid = val;
+ MadeChanges = 1;
+ }
+ break;
+
+ case 8:
+ if (! InputLinedefType (x0 + 42, subwin_y0, &val))
+ {
+ for (cur = obj; cur; cur = cur->next)
+ Things[cur->objnum].special = val;
+ MadeChanges = 1;
+ }
+ break;
+
+ case 9:
+ val = InputIntegerValue (x0 + 42, subwin_y0, 0, 255,
+ Things[obj->objnum].arg1);
+ if (val != IIV_CANCEL)
+ {
+ for (cur = obj; cur; cur = cur->next)
+ Things[cur->objnum].arg1 = val;
+ MadeChanges = 1;
+ }
+ break;
+
+ case 10:
+ val = InputIntegerValue (x0 + 42, subwin_y0, 0, 255,
+ Things[obj->objnum].arg2);
+ if (val != IIV_CANCEL)
+ {
+ for (cur = obj; cur; cur = cur->next)
+ Things[cur->objnum].arg2 = val;
+ MadeChanges = 1;
+ }
+ break;
+
+ case 11:
+ val = InputIntegerValue (x0 + 42, subwin_y0, 0, 255,
+ Things[obj->objnum].arg3);
+ if (val != IIV_CANCEL)
+ {
+ for (cur = obj; cur; cur = cur->next)
+ Things[cur->objnum].arg3 = val;
+ MadeChanges = 1;
+ }
+ break;
+
+ case 12:
+ val = InputIntegerValue (x0 + 42, subwin_y0, 0, 255,
+ Things[obj->objnum].arg4);
+ if (val != IIV_CANCEL)
+ {
+ for (cur = obj; cur; cur = cur->next)
+ Things[cur->objnum].arg4 = val;
+ MadeChanges = 1;
+ }
+ break;
+
+ case 13:
+ val = InputIntegerValue (x0 + 42, subwin_y0, 0, 255,
+ Things[obj->objnum].arg5);
+ if (val != IIV_CANCEL)
+ {
+ for (cur = obj; cur; cur = cur->next)
+ Things[cur->objnum].arg5 = val;
MadeChanges = 1;
}
break;
diff -N -p -r -u yadex-1.7.0-orig/src/wstructs.h yadex-1.7.0/src/wstructs.h
--- yadex-1.7.0-orig/src/wstructs.h Tue Oct 19 20:53:55 2004
+++ yadex-1.7.0/src/wstructs.h Tue Oct 19 22:45:16 2004
@@ -84,14 +84,30 @@ typedef i16 wad_tangle_t;
typedef i16 wad_tflags_t;
struct Thing
{
+ i16 tid;
wad_coord_t xpos; // FIXME rename to "x"
wad_coord_t ypos; // FIXME rename to "y"
+ wad_z_t height;
wad_tangle_t angle;
wad_ttype_t type;
wad_tflags_t when; // FIXME rename to "flags"
+ u8 special;
+ u8 arg1;
+ u8 arg2;
+ u8 arg3;
+ u8 arg4;
+ u8 arg5;
};
typedef struct
{
+ wad_coord_t xpos; // FIXME rename to "x"
+ wad_coord_t ypos; // FIXME rename to "y"
+ wad_tangle_t angle;
+ wad_ttype_t type;
+ wad_tflags_t when; // FIXME rename to "flags"
+} wad_doom_thing_t;
+typedef struct
+{
i16 tid;
wad_coord_t x;
wad_coord_t y;
@@ -121,11 +137,25 @@ struct LineDef
wad_ldflags_t flags;
wad_ldtype_t type;
wad_tag_t tag;
+ u8 arg2;
+ u8 arg3;
+ u8 arg4;
+ u8 arg5;
wad_sdn_t sidedef1; // # of first (right) sidedef
wad_sdn_t sidedef2; // # of second (left) sidedef or 0xffff
};
typedef struct
{
+ wad_vn_t start; // # of start vertex
+ wad_vn_t end; // # of end vertex
+ wad_ldflags_t flags;
+ wad_ldtype_t type;
+ wad_tag_t tag;
+ wad_sdn_t sidedef1; // # of first (right) sidedef
+ wad_sdn_t sidedef2; // # of second (left) sidedef or 0xffff
+} wad_doom_linedef_t;
+typedef struct
+{
wad_vn_t start;
wad_vn_t end;
wad_ldflags_t flags;
@@ -197,8 +227,11 @@ typedef enum
WAD_LL_SECTORS,
WAD_LL_REJECT,
WAD_LL_BLOCKMAP,
- // Hexen has a BEHAVIOR lump here
- WAD_LL__
+ WAD_LL_BEHAVIOR,
+
+ WAD_LL__MAX,
+ WAD_LL__HEXEN = WAD_LL__MAX,
+ WAD_LL__DOOM = WAD_LL_BEHAVIOR
} wad_level_lump_no_t;
typedef struct
@@ -207,7 +240,7 @@ typedef struct
size_t item_size;
} wad_level_lump_def_t;
-const wad_level_lump_def_t wad_level_lump[WAD_LL__] =
+const wad_level_lump_def_t wad_level_lump[WAD_LL__MAX] =
{
{ 0, 0 }, // Label -- no fixed name
{ "THINGS", WAD_THING_BYTES },
@@ -219,8 +252,8 @@ const wad_level_lump_def_t wad_level_lum
{ "NODES", 0 },
{ "SECTORS", WAD_SECTOR_BYTES },
{ "REJECT", 0 },
- { "BLOCKMAP", 0 }
- // Hexen has a BEHAVIOR lump here
+ { "BLOCKMAP", 0 },
+ { "BEHAVIOR", 0 }
};
--- yadex-1.7.0-orig/ygd/hexen.ygd Tue Oct 19 20:53:55 2004
+++ yadex-1.7.0/ygd/hexen.ygd Wed Oct 20 23:55:14 2004
@@ -108,6 +108,7 @@ ldt 100 x "?? Scroll left" "?? Scroll
ldt 101 x "?? Scroll right" "?? Scroll_Texture_Right"
ldt 102 x "?? Scroll up" "?? Scroll_Texture_Up"
ldt 103 x "?? Scroll down" "?? Scroll_Texture_Down"
+ldt 109 L "?? Force lightng" "?? Light_ForceLightning"
ldt 110 L "?? Raise light" "?? Light_RaiseByValue"
ldt 111 L "?? Lower light" "?? Light_LowerByValue"
ldt 112 L "?? Set light" "?? Light_ChangeToValue"
@@ -136,25 +137,12 @@ ldt 140 x "?? Change sound" "?? Sector
#
st 0 " Normal" "Normal"
-st 1 " Phased light" "light phased" # FIXME
-st 2 " Light start" "lightsequencestart" # FIXME
-st 3 " Light specl1" "lightsequencespecial1" # FIXME
-st 4 " Light specl2" "lightsequencespecial2" # FIXME
-st 9 " Secret" "Sector counts toward secret count"
+st 1 " Phased light" "light phased"
+st 2 " Light start" "lightsequencestart"
+st 3 " Light specl1" "lightsequencespecial1"
+st 4 " Light specl2" "lightsequencespecial2"
st 26 " Stairs1" "Stairs special 1"
st 27 " Stairs2" "Stairs special 2"
-st 40 " Wind east 1" "Wind east force 1"
-st 41 " Wind east 2" "Wind east force 2"
-st 42 " Wind east 3" "Wind east force 3"
-st 43 " Wind north 1" "Wind north force 1"
-st 44 " Wind north 2" "Wind north force 2"
-st 45 " Wind north 3" "Wind north force 3"
-st 46 " Wind south 1" "Wind south force 1"
-st 47 " Wind south 2" "Wind south force 2"
-st 48 " Wind south 3" "Wind south force 3"
-st 49 " Wind west 1" "Wind west force 1"
-st 50 " Wind west 2" "Wind west force 2"
-st 51 " Wind west 3" "Wind west force 3"
st 198 " Lightning 64" "Indoor lightning, +64 units"
st 199 " Lightning 32" "Indoor lightning, +32 units"
st 200 " Sky2" "Use MAPINFO sky2"
@@ -191,17 +179,21 @@ st 224 " Scroll SW F" "Scroll southwes
thinggroup p rgb:4/f/4 "Player"
thinggroup m rgb:f/0/0 "Monster"
thinggroup w rgb:f/a/0 "Weapon"
-thinggroup a rgb:8/5/0 "Ammunition"
+thinggroup a rgb:8/5/0 "Mana"
thinggroup h rgb:2/8/0 "Health & armour"
+thinggroup A rgb:2/8/0 "Artifacts"
+thinggroup q rgb:2/8/0 "Quest items"
thinggroup b rgb:2/8/0 "Misc. bonus"
thinggroup k rgb:f/0/f "Key"
thinggroup P rgb:6/6/c "Plants"
+thinggroup t rgb:6/6/c "Stalagm. & stalact."
+thinggroup g rgb:6/6/c "Gargoyle statues"
+thinggroup T rgb:6/6/c "Table stuff"
+thinggroup D rgb:6/6/c "Dungeon stuff"
thinggroup d rgb:6/6/c "Misc. decoration"
thinggroup l rgb:6/6/c "Light source"
-#thinggroup g rgb:6/6/c "Gory decoration"
-#thinggroup c rgb:6/6/c "Corpse"
-thinggroup e rgb:0/b/d "Environment sound"
-thinggroup s rgb:0/b/d "Ambient sound"
+thinggroup s rgb:0/b/d "Sound"
+thinggroup S rgb:0/b/d "Special"
#
# Definition of things
@@ -210,56 +202,268 @@ thinggroup s rgb:0/b/d "Ambient sound"
# <desc> must not exceed 19 characters.
#
-thing 1 p - 16 "Player 1 start" PLAY
-thing 2 p - 16 "Player 2 start" PLAY
-thing 3 p - 16 "Player 3 start" PLAY
-thing 4 p - 16 "Player 4 start" PLAY
+thing 1 p - 16 "Player 1 start *" PLAY
+thing 2 p - 16 "Player 2 start *" PLAY
+thing 3 p - 16 "Player 3 start *" PLAY
+thing 4 p - 16 "Player 4 start *" PLAY
thing 11 p - 16 "Deathmatch start" PLAYF1
thing 14 p - 16 "Teleport exit" TELE
+thing 9100 p - 16 "Player 5 start *" PLAY
+thing 9101 p - 16 "Player 6 start *" PLAY
+thing 9102 p - 16 "Player 7 start *" PLAY
+thing 9103 p - 16 "Player 8 start *" PLAY
-thing 31 m - 32 "Demon" DEMN
+thing 31 m - 32 "Chaos serpent" DEMN
+thing 34 m - 40 "Reiver" WRTH
thing 107 m - 20 "Centaur" CENT
+thing 114 m - 44 "Dark bishop" BISH
thing 115 m - 20 "Centaur leader" CENTF
-thing 120 m - 17 "Serpent leader" SSPTK # Not too sure...
-thing 121 m - 17 "Serpent" SSDV # Not too sure...
-thing 8020 m - 22 "Ice guy" ICEY
+thing 120 m - 17 "Stalker leader" SSPTK
+thing 121 m - 17 "Stalker" SSDV
+thing 254 m - 40 "Death wyvern *" DRAG
+thing 8020 m - 22 "Wendigo" ICEY
+thing 8080 m - 64 "Chaos serpent (gas)" DEM2
+thing 10011 m - 40 "Reiver leader" WRTH
thing 10030 m - 25 "Ettin" ETTN
-thing 10060 m - 20 "Fire demon" FDMN
-
-thing 10 w - 17 "Serpent staff" WCSS # Cleric
-thing 53 w - 17 "Frost chards" WMCS # Mage
-thing 8010 w - 17 "Timon's axe" WFAX # Fighter
+thing 10060 m - 20 "Fire gargoyle" FDMN
+thing 10080 m - 80 "Heresiarch" SORC
+thing 10100 m - 32 "Zedek (fighter)" PLAYA8
+thing 10101 m - 32 "Traductus (cleric)" CLERA8
+thing 10102 m - 32 "Menelkir (mage)" MAGEA8
+thing 10200 m - 20 "Korax" KORX
+
+thing 10 w - 17 "Serpent staff" WCSS
+thing 12 w - 20 "Quietus blade" WFR1
+thing 13 w - 20 "Quietus guard" WFR2
+thing 16 w - 20 "Quietus hilt" WFR3
+thing 18 w - 20 "Wraithverge head" WCH1
+thing 19 w - 20 "Wraithverge center" WCH2
+thing 20 w - 20 "Wraithverge grip" WCH3
+thing 21 w - 20 "Bloodscourge head" WMS1
+thing 22 w - 20 "Bloodscourge center" WMS2
+thing 23 w - 20 "Bloodscourge grip" WMS3
+thing 53 w - 17 "Frost chards" WMCS
+thing 123 w - 10 "Hammer of retributn" WFHM
+thing 8009 w - 10 "Firestorm" WCFM
+thing 8010 w - 17 "Timon's axe" WFAX
+thing 8040 w - 20 "Arc of death" WMLG
thing 122 a - 17 "Blue manna" MAN1
thing 124 a - 17 "Green manna" MAN2
thing 8004 a - 17 "Combined manna" MAN3
thing 81 h - 17 "Crystal vial" PTN1
-thing 82 h - 17 "Quartz flask" PTN2
-thing 8000 h - 17 "Flechette" PSBG
+thing 8005 h - 10 "Mesh armor" ARM1
+thing 8006 h - 20 "Falcon shield" ARM2
thing 8007 h - 17 "Platinum helmet" ARM3
+thing 8008 h - 20 "Amulet of warding" ARM4
-thing 314 k - 17 "Stone (?) key" KEY7
+thing 30 A - 20 "Porkalator" ARTIPORK
+thing 32 A - 20 "Mystic urn" ARTISPHL
+thing 33 A - 20 "Torch" ARTITRCH
+thing 36 A - 20 "Chaos device" ARTIATLP
+thing 82 A - 17 "Quartz flask" PTN2
+thing 83 A - 20 "Wings of wrath" SOAR
+thing 84 A - 20 "Icon of defender" INVU
+thing 86 A - 15 "Dark servant" ARTISUMN
+thing 8000 A - 17 "Flechette" PSBG
+thing 8002 A - 20 "Boots of speed" ARTISPED
+thing 8003 A - 20 "Krater of might" ARTIBMAN
+thing 8041 A - 20 "Dragonskin bracers" ARTIBRAC
+thing 10040 A - 20 "Banishment device" ARTITELO
+thing 10110 A - 20 "Disc of repulsion" ARTIBLST
+thing 10120 A - 20 "Mystic ambient inc" ARTIHRAD
+
+thing 9002 q - 20 "Yorick's skull" ARTISKLL
+thing 9003 q - 20 "Heart of D'Sparil" ARTIBGEM
+thing 9004 q - 20 "Ruby planet" ARTIGEMR
+thing 9005 q - 20 "Emerald planet 1" ARTIGEMG
+thing 9006 q - 20 "Sapphire planet 1" ARTIGEMB
+thing 9007 q - 20 "Daemon codex" ABK1
+thing 9008 q - 20 "Liber oscura" ABK2
+thing 9009 q - 20 "Emerald planet 2" ARTIGMG2
+thing 9010 q - 20 "Sapphire planet 2" ARTIGMB2
+thing 9014 q - 20 "Flame mask" ARTISKL2
+thing 9015 q - 20 "Glaive seal" ARTIFWEP
+thing 9016 q - 20 "Holy relic" ARTICWEP
+thing 9017 q - 20 "Sigil of the Magus" ARTIMWEP
+thing 9018 q - 20 "Clock gear 1" ARTIGEAR
+thing 9019 q - 20 "Clock gear 2" ARTIGER2
+thing 9020 q - 20 "Clock gear 3" ARTIGER3
+thing 9021 q - 20 "Clock gear 4" ARTIGER4
+
+thing 8030 k - 10 "Steel key" KEY1
+thing 8031 k - 10 "Cave key" KEY2
+thing 8032 k - 10 "Axe key" KEY3
+thing 8033 k - 10 "Fire key" KEY4
+thing 8034 k - 10 "Emerald key" KEY5
+thing 8035 k - 10 "Dungeon key" KEY6
+thing 8036 k - 10 "Silver key" KEY7
+thing 8037 k - 10 "Rusted key" KEY8
+thing 8038 k - 10 "Horn key" KEY9
+thing 8039 k - 10 "Swamp key" KEYA
+thing 8200 k - 10 "Castle key" KEYB
+thing 24 P - 20 "Tree trunk (brown)" TRE1
+thing 25 P - 20 "Tree trunk (brownD)" TRE1
thing 26 P - 17 "Swamp tree tall" TRE2
thing 27 P - 17 "Swamp tree short" TRE3
+thing 28 P - 20 "Tree stump (splint)" STM1
+thing 29 P - 20 "Tree stump" STM2
+thing 39 P - 20 "Mushroom (large, L)" MSH1
+thing 40 P - 20 "Mushroom (large, R)" MSH2
+thing 41 P - 20 "Mushroom (med, L)" MSH3
+thing 42 P - 20 "Mushroom (small, R)" MSH4
+thing 44 P - 20 "Mushroom (small)" MSH5
+thing 45 P - 20 "Mushroom (small, F)" MSH6
+thing 46 P - 20 "Mushroom (small, B)" MSH7
+thing 47 P - 20 "Mushroom (small, M)" MSH8
+thing 60 P - 20 "Vine" TRE3
thing 78 P - 17 "Tree leaning right" TRE4
thing 79 P - 17 "Tree leaning left" TRE5
thing 80 P - 17 "Gnarled tree right" TRE6
thing 87 P - 17 "Gnarled tree left" TRE7
+thing 113 P - 10 "Blowing leaves" LEF1
thing 8062 P - 17 "Dead tree" TRDT
thing 8068 P - 17 "Conic tree" XMAS
-
-thing 48 d - 17 "Stalactite+gmite" SGMP
-thing 72 d - 17 "Statue" STT2
-thing 74 d - 17 "Short statue" STT4
+thing 8101 P - 20 "Shrub (small)" SHB1
+thing 8102 P - 20 "Shrub (large)" SHB2
+thing 8103 P - 20 "Bucket (hanging)" BCKT
+thing 8104 P - 20 "Mushroom (explodng)" SHRM
+
+thing 48 t - 17 "Stalactite+gmite" SGMP
+thing 49 t - 20 "Stalagmite (large)" SGM1
+thing 50 t - 20 "Stalagmite (medium)" SGM2
+thing 51 t - 20 "Stalagmite (small)" SGM3
+thing 52 t - 20 "Stalactite (large)" SLC1
+thing 56 t - 20 "Stalactite (medium)" SLC2
+thing 57 t - 20 "Stalactite (small)" SLC3
+thing 89 t - 20 "Ice stalactite(lrg)" ICT1
+thing 90 t - 20 "Ice stalactite(med)" ICT2
+thing 91 t - 20 "Ice stalactite(sml)" ICT3
+thing 92 t - 20 "Ice stalactite(tny)" ICT4
+thing 93 t - 20 "Ice stalagmite(lrg)" ICM1
+thing 94 t - 20 "Ice stalagmite(med)" ICM2
+thing 95 t - 20 "Ice stalagmite(sml)" ICM3
+thing 96 t - 20 "Ice stalagmite(tny)" ICM4
+
+thing 5 g - 20 "Gargoyle statue w/s" STTW
+thing 72 g - 17 "Stone gargoyle tall" STT2
+thing 73 g - 20 "Ice gargoyle tall" STT3
+thing 74 g - 17 "Stone gargoyle shrt" STT4
+thing 76 g - 20 "Ice gargoyle short" STT5
+thing 8044 g - 20 "Wooden gargoyle tal" GAR1
+thing 8045 g - 20 "Fire gargoyle tall" GAR2
+thing 8046 g - 20 "Red gargoyle tall" GAR3
+thing 8047 g - 20 "Wooden gargoyle tal" GAR4
+thing 8048 g - 20 "Metal gargoyle tall" GAR5
+thing 8049 g - 20 "Fire gargoyle short" GAR6
+thing 8050 g - 20 "Red gargoyle short" GAR7
+thing 8051 g - 20 "Wooden gargoyle srt" GAR8
+thing 8052 g - 20 "Metal gargoyle shrt" GAR9
+thing 9011 g - 20 "Gargoyle statue" STWN
+
+thing 8500 T - 20 "Stein (tall)" TST1
+thing 8501 T - 20 "Stein (short)" TST2
+thing 8502 T - 20 "Candle w/spider web" TST3
+thing 8503 T - 20 "Candle (short)" TST4
+thing 8504 T - 20 "Candle (tall)" TST5
+thing 8505 T - 20 "Goblet (spilled)" TST6
+thing 8506 T - 20 "Goblet (tall)" TST7
+thing 8507 T - 20 "Goblet (short)" TST8
+thing 8508 T - 20 "Goblet w/silver bnd" TST9
+thing 8509 T - 20 "Meat cleaver" TST0
+
+thing 61 D - 20 "Corpse impaled" CPS1
+thing 62 D - 20 "Corpse sleeping" CPS2
+thing 71 D - 20 "Corpse hung legs" CPS3
+thing 108 D - 20 "Corpse hung" CPS4
+thing 109 D - 20 "Corpse bleeding" CPS5
+thing 110 D - 20 "Corpse chained" CPS6
+thing 111 D - 10 "Pool of blood" BDPL
+thing 8067 D - 20 "Iron maiden" IRON
+thing 8071 D - 20 "Chain (short)" CHNS
+thing 8072 D - 20 "Chain (long)" CHNSB0
+thing 8073 D - 20 "Chain heart on hook" CHNSC0
+thing 8074 D - 20 "Chain w/large hook" CHNSD0
+thing 8075 D - 20 "Chain w/small hook" CHNSE0
+thing 8076 D - 20 "Chain w/spiked ball" CHNSF0
+thing 8077 D - 20 "Chain skull on hook" CHNSG0
+
+thing 6 d - 20 "Rock w/moss (tiny)" RCK1
+thing 7 d - 20 "Rock w/moss (small)" RCK2
+thing 9 d - 20 "Rock w/moss (medium)" RCK3
+thing 15 d - 20 "Rock w/moss (large)" RCK4
+thing 37 d - 20 "Stump w/moss (short)" STM3
+thing 38 d - 20 "Stump w/moss (tall)" STM4
+thing 58 d - 20 "Moss (three strands)" MSS1
+thing 59 d - 20 "Moss (one strand)" MSS2
+thing 63 d - 20 "Tombstone (R.I.P.)" TMS1
+thing 64 d - 20 "Tombstone (Shane)" TMS2
+thing 65 d - 20 "Tombstone (large cross)" TMS3
+thing 66 d - 20 "Tombstone (Brian R.)" TMS4
+thing 67 d - 20 "Tombstone (circular cross)" TMS5
+thing 68 d - 20 "Tombstone (small cross on pedestal)" TMS6
+thing 69 d - 20 "Tombstone (Brian P.)" TMS7
thing 77 d - 17 "Banner" BNR1
-
-thing 54 l - 17 "Torch" WLTR
-thing 8061 l - 17 "FIXME" BRTR
-
-thing 314 e - 17 "Bogus sound"
-
-thing 314 s - 17 "Bogus sound"
-
-
+thing 88 d - 20 "Log" LOGG
+thing 97 d - 20 "Rock formation (large, brown)" RKBL
+thing 98 d - 20 "Rock formation (small, brown)" RKBS
+thing 99 d - 20 "Rock formation (small, gray)" RKBK
+thing 100 d - 20 "Rubble (large)" RBL1
+thing 101 d - 20 "Rubble (small)" RBL2
+thing 102 d - 20 "Rubble (medium)" RBL3
+thing 103 d - 20 "Vase on pedestal" VASE
+thing 104 d - 20 "Pot (tall, skinny) *" POT1
+thing 105 d - 20 "Pot (medium, skinny) *" POT2
+thing 106 d - 20 "Pot (short, chipped) *" POT3
+thing 140 d - 20 "Sparkling red smoke" TSMK
+thing 8064 d - 20 "Suit of armor *" SUIT
+thing 8065 d - 40 "Bell" BBLL
+thing 8100 d - 20 "Barrel" BARL
+thing 9012 d - 20 "Pedestal" GMPD
+thing 10001 d - 20 "Fog (small) *" FOGS
+thing 10002 d - 20 "Fog (medium) *" FOGM
+thing 10003 d - 20 "Fog (large) *" FOGL
+thing 10090 d - 20 "Spike (down)" TSPKC0
+thing 10091 d - 20 "Spike (up)" TSPK
+
+thing 17 l - 20 "Chandelier w/flame" CDLR
+thing 54 l - 17 "Wall torch w/flame" WLTR
+thing 55 l - 20 "Wall torch" WLTRI0
+thing 116 l - 10 "Brazier w/flame" TWTR
+thing 117 l - 10 "Brazier" TWTRI0
+thing 119 l - 20 "Candles" CNDL
+thing 8042 l - 20 "Minotaur statue f" FBUL
+thing 8043 l - 20 "Minotaur statue" FBULH0
+thing 8060 l - 20 "Fire skull" FSKL
+thing 8061 l - 17 "Brazier w/flame sm" BRTR
+thing 8063 l - 20 "Chandelier" CDLRD0
+thing 8066 l - 20 "Candle (blue)" CAND
+thing 8069 l - 20 "Cauldron (w/flame)" CDRNB0
+thing 8070 l - 20 "Cauldron" CDRN
+thing 10500 l - 20 "Flame (small, t) *" FFSM
+thing 10501 l - 20 "Flame (small, cnt)" FFSMC0
+thing 10502 l - 20 "Flame (large, t) *" FFLG
+thing 10503 l - 20 "Flame (large, cnt)" FFLGF0
+
+thing 1400 s - 20 "Stone" TELE
+thing 1401 s - 20 "Heavy" TELE
+thing 1402 s - 20 "Metal" TELE
+thing 1403 s - 20 "Creak" TELE
+thing 1404 s - 20 "Silent" TELE
+thing 1405 s - 20 "Lava" TELE
+thing 1406 s - 20 "Water" TELE
+thing 1407 s - 20 "Ice" TELE
+thing 1408 s - 20 "Earth crack" TELE
+thing 1409 s - 20 "Metal2" TELE
+thing 1410 s - 20 "Wind blowing" TELE
+
+thing 118 S - 10 "Magic step" TLGL
+thing 3000 S - 20 "Polyobject anchor" ICPRD0
+thing 3001 S - 20 "Start spot" SBFXH0
+thing 3002 S - 20 "Start spot w/crush" SBFXC0
+thing 9001 S - 10 "Map spot *" TELEC0
+thing 9013 S - 10 "Map spot w/gravity" TELED0
+thing 10000 S - 20 "Spawn fog *" SPIRK0
+thing 10225 S - 20 "Spawn bat *" ABATC3C7