diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index c9d8f1e..0000000
--- a/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-yadex-1.7.0.tar.gz
diff --git a/Yadex_170_ALL.diff b/Yadex_170_ALL.diff
deleted file mode 100644
index 168c164..0000000
--- a/Yadex_170_ALL.diff
+++ /dev/null
@@ -1,2825 +0,0 @@
-diff -u -r -N yadex-1.7.0/atclib/al_adigits.c yadex-1.7.0-all/atclib/al_adigits.c
---- yadex-1.7.0/atclib/al_adigits.c 1999-08-02 00:52:00.000000000 +1000
-+++ yadex-1.7.0-all/atclib/al_adigits.c 2005-01-10 14:30:53.000000000 +1100
-@@ -29,5 +29,11 @@
- #include "atclib.h"
-
-
--const char al_adigits[36] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-+const char al_adigits[36] =
-+{
-+'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-+'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
-+'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
-+'U', 'V', 'W', 'X', 'Y', 'Z'
-+};
-
-diff -u -r -N yadex-1.7.0/docsrc/index.html yadex-1.7.0-all/docsrc/index.html
---- yadex-1.7.0/docsrc/index.html 2002-05-09 23:36:06.000000000 +1000
-+++ yadex-1.7.0-all/docsrc/index.html 2005-01-10 14:30:53.000000000 +1100
-@@ -34,6 +34,7 @@
-
-
- - Palette viewer
-+
- 3D Level Preview
-
- Advanced user's guide
-
TODO
- - The man page for Yadex
-diff -u -r -N yadex-1.7.0/docsrc/preview.html yadex-1.7.0-all/docsrc/preview.html
---- yadex-1.7.0/docsrc/preview.html 1970-01-01 10:00:00.000000000 +1000
-+++ yadex-1.7.0-all/docsrc/preview.html 2005-01-10 14:34:20.000000000 +1100
-@@ -0,0 +1,108 @@
-+
-+
-+Yadex 3D level preview
-+
-+
-+
-+
-+

-+
Yadex $VERSION ($SOURCE_DATE)
-+
3D Level Preview
-+
-+
-+
-+
-+
-+ What's it for
-+
-+The 3D level preview function lets you get a rough idea of what
-+your level looks like, quickly, without all the hassle of saving,
-+building nodes and starting DOOM. It is activated by pressing the
-+`R' key while editing a level, and draws the player's view that
-+you would see within DOOM (with some limitations). While the
-+rendering window is up, you can move around the level using the
-+cursor keys and toggle things like texturing and sprites on/off.
-+
-+
Key bindings
-+
-+
-+- [Left]
-+
[Right]
-+ - Turn the view left or right. Use the SHIFT key to
-+turn a greater amount.
-+
-+
- [Up]
-+
[Down]
-+ - Move the view forward or back. Use the SHIFT key to
-+move a greater distance.
-+
-+
- [n]
-+
[m]
-+ - Move the view sideways left or right (strafing). Uppercase `N'
-+and `M' (i.e. with the SHIFT key) will move a greater distance.
-+
-+
- [c]
-+
[d]
-+ - Move the view upwards or downwards (flying). Uppercase `C' and
-+`D' (i.e. with the SHIFT key) will move a greater distance. Note
-+that you cannot move up or down when "walking" mode is enabled.
-+
-+
- [t]
-+
- Toggle texture mapping. When disabled (the default), all walls,
-+ceilings and floors are drawn with solid (somewhat random) colours.
-+
-+
- [s]
-+
- Toggle sprites.
-+
-+
- [w]
-+
- Toggle walking mode. When enabled, the view height is always
-+above the current floor. For example, if you move forward over a
-+cliff, the view will drop down. When disabled (the default), you can
-+fly about the level at any height.
-+
-+
- [Esc]
-+
[q]
-+ - Exit the 3D level preview. The current viewing state (position,
-+direction, etc) are remembered, and will be used next time the 3D
-+preview is activated (unless the player object has been moved, or a
-+different level was loaded).
-+
-+
-+
-+ Features
-+
-+
-+- No BSP (nodes) required !
-+
- Textures and flats are drawn exactly like DOOM, including X/Y
-+offsets and upper/lower unpegging flags.
-+
- Sky is handled just like in DOOM (but drawn in solid blue).
-+
-+
-+ Limitations
-+
-+
-+- No lighting, the level appears full-bright all the time.
-+
- No mid-masked textures (rails, gratings) are drawn.
-+
- Thing sprites (especially monsters) are always drawn facing
-+you, even when their direction is away from you.
-+
- Sprite positioning may be inaccurate, because their X and
-+Y offsets are not honoured.
-+
- Things that are supposed to hang from the ceiling
-+(hanging body parts, chandeliers, etc) will appear on the floor.
-+
- There are some glitches in the current renderer, which look like
-+"slimetrails" (vertical lines).
-+
-+
-+ Caveats
-+
-+One last thing. The 3D preview function can use a huge amount of
-+memory when texturing and sprites are both enabled (and a large amount
-+even when texturing and sprites are both disabled). If your computer
-+has a very low amount of memory (e.g. less than 16 MB), then Yadex may
-+crash with an out of memory error. I think you are unlikely to hit
-+this problem, but if in doubt, save your work first.
-+
-+
-+
AJA $SELF_DATE
-+
-+
-diff -u -r -N yadex-1.7.0/GNUmakefile yadex-1.7.0-all/GNUmakefile
---- yadex-1.7.0/GNUmakefile 2003-12-29 04:23:56.000000000 +1100
-+++ yadex-1.7.0-all/GNUmakefile 2005-01-10 14:30:53.000000000 +1100
-@@ -160,6 +160,7 @@
- s_swapf s_vertices sanity scrnshot \
- selbox selectn selpath selrect \
- serialnum spritdir sticker swapmem \
-+ r_render r_images \
- t_centre t_flags t_prop t_spin \
- textures things trace v_centre \
- v_merge v_polyg vectext verbmsg \
-@@ -237,6 +238,7 @@
- docsrc/legal.html \
- docsrc/packagers_guide.html \
- docsrc/palette.html \
-+ docsrc/preview.html \
- docsrc/reporting.html \
- docsrc/tips.html \
- docsrc/trivia.html \
-@@ -609,8 +611,9 @@
- #
- ########################################################################
-
--# If Makefile.config doesn't exist, give a hint...
-+# If Makefile.config or config.h don't exist, give a hint...
- $(OBJDIR)/Makefile.config:
-+$(OBJDIR)/config.h:
- @echo "Sorry guv'nor, but... did you run ./configure ?" >&2
- @false
-
-@@ -637,7 +640,7 @@
- # Note: the modules of Atclib are not scanned as they all
- # depend on $(HEADERS_ATCLIB) and nothing else.
-
--yadex.dep: $(SRC_NON_GEN)
-+yadex.dep: $(SRC_NON_GEN) src/config.h
- @echo "Generating $@"
- @makedepend -f- -Y -Iatclib $(SRC_NON_GEN) 2>/dev/null \
- | awk 'sub (/^src/, "") == 1 { \
-diff -u -r -N yadex-1.7.0/src/editloop.cc yadex-1.7.0-all/src/editloop.cc
---- yadex-1.7.0/src/editloop.cc 2003-07-05 21:12:32.000000000 +1000
-+++ yadex-1.7.0-all/src/editloop.cc 2005-01-10 14:30:53.000000000 +1100
-@@ -70,6 +70,7 @@
- #include "x_exchng.h"
- #include "x_hover.h"
- #include "xref.h"
-+#include "r_render.h"
-
- #ifdef Y_X11
- #include
-@@ -304,8 +305,8 @@
-
- e.mb_menu[MBM_EDIT] = new Menu (NULL,
- "~Copy object(s)", 'o', 0,
-- "~Add object", YK_INS, 0,
-- "~Delete object(s)", YK_DEL, 0,
-+ "~Add object", 'I', 0,
-+ "~Delete object(s)", '\b', 0,
- "~Exchange object numbers", 24, 0,
- "~Preferences...", YK_F5, 0,
- "~Snap to grid", 'y', MIF_VTICK, &e.grid_snap, 0,
-@@ -342,6 +343,7 @@
- "~Next object", 'n', 0,
- "~Prev object", 'p', 0,
- "~Jump to object...", 'j', 0,
-+ "~Find by type", 'f', 0,
- NULL);
-
- e.mb_menu[MBM_MISC_L] = new Menu ("Misc. operations",
-@@ -1344,8 +1346,8 @@
- }
- }
-
-- // [F8]: pop up the "Misc. operations" menu
-- else if (is.key == YK_F8
-+ // [M]: pop up the "Misc. operations" menu
-+ else if (is.key == 'M'
- && e.menubar->highlighted () < 0)
- {
- e.modpopup->set (e.menubar->get_menu (MBI_MISC), 1);
-@@ -1706,7 +1708,15 @@
- select_linedefs_path (&e.Selected, e.highlighted.num, YS_TOGGLE);
- RedrawMap = 1;
- }
--
-+ // [E]: add linedef and split sector -- [AJA]
-+ else if (is.key == 'E' && e.obj_type == OBJ_VERTICES)
-+ {
-+ if (e.Selected)
-+ {
-+ MiscOperations (e.obj_type, &e.Selected, 5);
-+ RedrawMap = 1;
-+ }
-+ }
- // [E]: Select/unselect all 1s linedefs in path
- else if (is.key == 'E' && e.highlighted._is_linedef ())
- {
-@@ -1834,6 +1844,56 @@
- RedrawMap = 1;
- }
-
-+ // [f]: find object by type
-+ else if (is.key == 'f' && (! e.global || e.highlighted ()))
-+ {
-+ Objid find_obj;
-+ int otype;
-+ obj_no_t omax,onum;
-+ find_obj.type = e.highlighted () ? e.highlighted.type : e.obj_type;
-+ onum = find_obj.num = e.highlighted () ? e.highlighted.num : 0;
-+ omax = GetMaxObjectNum(find_obj.type);
-+ switch (find_obj.type)
-+ {
-+ case OBJ_SECTORS:
-+ if ( ! InputSectorType( 84, 21, &otype))
-+ {
-+ for (onum = e.highlighted () ? onum + 1 : onum; onum <= omax; onum++)
-+ if (Sectors[onum].special == (wad_stype_t) otype)
-+ {
-+ find_obj.num = onum;
-+ GoToObject(find_obj);
-+ break;
-+ }
-+ }
-+ break;
-+ case OBJ_THINGS:
-+ if ( ! InputThingType( 42, 21, &otype))
-+ {
-+ for (onum = e.highlighted () ? onum + 1 : onum; onum <= omax; onum++)
-+ if (Things[onum].type == (wad_ttype_t) otype)
-+ {
-+ find_obj.num = onum;
-+ GoToObject(find_obj);
-+ break;
-+ }
-+ }
-+ break;
-+ case OBJ_LINEDEFS:
-+ if ( ! InputLinedefType( 0, 21, &otype))
-+ {
-+ for (onum = e.highlighted () ? onum + 1 : onum; onum <= omax; onum++)
-+ if (LineDefs[onum].type == (wad_ldtype_t) otype)
-+ {
-+ find_obj.num = onum;
-+ GoToObject(find_obj);
-+ break;
-+ }
-+ }
-+ break;
-+ }
-+ RedrawMap = 1;
-+ }
- #if 0
- // [c]: clear selection and redraw the map
- else if (is.key == 'c')
-@@ -1921,6 +1981,17 @@
- StretchSelBox = false;
- }
-
-+ // [w]: split sector between vertices
-+ else if (is.key == 'w' && e.obj_type == OBJ_VERTICES
-+ && e.Selected && e.Selected->next && ! e.Selected->next->next)
-+ {
-+ SplitSector (e.Selected->next->objnum, e.Selected->objnum);
-+ ForgetSelection (&e.Selected);
-+ RedrawMap = 1;
-+ DragObject = false;
-+ StretchSelBox = false;
-+ }
-+
- // [x]: spin things 1/8 turn clockwise
- else if (is.key == 'x' && e.obj_type == OBJ_THINGS
- && (e.Selected || e.highlighted ()))
-@@ -1987,7 +2058,7 @@
- }
-
- // [Del]: delete the current object
-- else if (is.key == YK_DEL
-+ else if (is.key == '\b'
- && (e.Selected || e.highlighted ())) /* 'Del' */
- {
- if (e.obj_type == OBJ_THINGS
-@@ -2015,7 +2086,7 @@
- }
-
- // [Ins]: insert a new object
-- else if (is.key == YK_INS || is.key == YK_INS + YK_SHIFT) /* 'Ins' */
-+ else if (is.key == 'I' || is.key == YK_INS + YK_SHIFT) /* 'Ins' */
- {
- SelPtr cur;
- int prev_obj_type = e.obj_type;
-@@ -2201,12 +2272,34 @@
- RedrawMap = 1;
- }
-
-+ // [Z] Set sector on surrounding linedefs (AJA)
-+ else if (is.key == 'Z' && e.pointer_in_window)
-+ {
-+ if (e.obj_type == OBJ_SECTORS && e.Selected)
-+ {
-+ SuperSectorSelector (e.pointer_x, e.pointer_y,
-+ e.Selected->objnum);
-+ }
-+ else
-+ {
-+ SuperSectorSelector (e.pointer_x, e.pointer_y, OBJ_NO_NONE);
-+ }
-+ RedrawMap = 1;
-+ }
-+
- // [!] Debug info (not documented)
- else if (is.key == '!')
- {
- DumpSelection (e.Selected);
- }
-
-+ // [R] Render 3D view (AJA)
-+ else if (is.key == 'R')
-+ {
-+ Render3D ();
-+ RedrawMap = 1;
-+ }
-+
- // [@] Show font (not documented)
- else if (is.key == '@')
- {
-@@ -2214,6 +2307,30 @@
- RedrawMap = 1;
- }
-
-+ // [T] Transfer properties to selected objects (AJA)
-+ else if (is.key == 'T' && e.Selected
-+ && e.highlighted.num >= 0)
-+ {
-+ switch (e.obj_type)
-+ {
-+ case OBJ_SECTORS:
-+ TransferSectorProperties (e.highlighted.num, e.Selected);
-+ RedrawMap = 1;
-+ break;
-+ case OBJ_THINGS:
-+ TransferThingProperties (e.highlighted.num, e.Selected);
-+ RedrawMap = 1;
-+ break;
-+ case OBJ_LINEDEFS:
-+ TransferLinedefProperties (e.highlighted.num, e.Selected);
-+ RedrawMap = 1;
-+ break;
-+ default:
-+ Beep ();
-+ break;
-+ }
-+ }
-+
- // [|] Show colours (not documented)
- else if (is.key == '|')
- {
-diff -u -r -N yadex-1.7.0/src/editloop.h yadex-1.7.0-all/src/editloop.h
---- yadex-1.7.0/src/editloop.h 2000-01-11 00:40:12.000000000 +1100
-+++ yadex-1.7.0-all/src/editloop.h 2005-01-10 14:30:53.000000000 +1100
-@@ -6,6 +6,9 @@
-
- void EditorLoop (const char *); /* SWAP! */
- const char *SelectLevel (int levelno);
-+extern int InputSectorType(int x0, int y0, int *number);
-+extern int InputLinedefType(int x0, int y0, int *number);
-+extern int InputThingType(int x0, int y0, int *number);
-
-
-
-diff -u -r -N yadex-1.7.0/src/gcolour1.cc yadex-1.7.0-all/src/gcolour1.cc
---- yadex-1.7.0/src/gcolour1.cc 2003-03-28 23:37:32.000000000 +1100
-+++ yadex-1.7.0-all/src/gcolour1.cc 2005-01-10 14:30:53.000000000 +1100
-@@ -127,6 +127,21 @@
- }
- verbmsg ("colours: colour %d remapped to %d (delta %d)\n",
- IMG_TRANSP, colour0, smallest_delta);
-+
-+ rgb_c med_blue (0, 0, 128);
-+ sky_colour = 0;
-+ smallest_delta = INT_MAX;
-+
-+ for (size_t n = 0; n < DOOM_COLOURS; n++)
-+ {
-+ int delta = med_blue - rgb_values[n];
-+ if (delta < smallest_delta)
-+ {
-+ sky_colour = n;
-+ smallest_delta = delta;
-+ }
-+ }
-+ verbmsg ("Sky Colour remapped to %d (delta %d)\n", sky_colour, smallest_delta);
- }
-
- #endif
-diff -u -r -N yadex-1.7.0/src/gcolour2.cc yadex-1.7.0-all/src/gcolour2.cc
---- yadex-1.7.0/src/gcolour2.cc 2003-03-28 23:37:32.000000000 +1100
-+++ yadex-1.7.0-all/src/gcolour2.cc 2005-01-10 14:30:53.000000000 +1100
-@@ -35,4 +35,5 @@
-
- pcolour_t *game_colour = 0; // Pixel values for the DOOM_COLOURS game clrs.
- int colour0; // Game colour to which g. colour 0 is remapped
-+int sky_colour; // Game colour for a medium sky blue
-
-diff -u -r -N yadex-1.7.0/src/gcolour2.h yadex-1.7.0-all/src/gcolour2.h
---- yadex-1.7.0/src/gcolour2.h 2000-08-11 07:18:16.000000000 +1000
-+++ yadex-1.7.0-all/src/gcolour2.h 2005-01-10 14:30:53.000000000 +1100
-@@ -10,4 +10,5 @@
-
- extern pcolour_t *game_colour; // Pixel values for the DOOM_COLOURS game clrs.
- extern int colour0; // Game colour to which g. colour 0 is remapped
-+extern int sky_colour; // Game colour for a medium blue sky
-
-diff -u -r -N yadex-1.7.0/src/l_prop.cc yadex-1.7.0-all/src/l_prop.cc
---- yadex-1.7.0/src/l_prop.cc 2003-03-28 23:37:32.000000000 +1100
-+++ yadex-1.7.0-all/src/l_prop.cc 2005-01-10 14:30:53.000000000 +1100
-@@ -105,7 +105,7 @@
- * Prototypes of private functions
- */
- static char *GetTaggedLineDefFlag (int linedefnum, int flagndx);
--static int InputLinedefType (int x0, int y0, int *number);
-+int InputLinedefType (int x0, int y0, int *number);
- static const char *PrintLdtgroup (void *ptr);
-
-
-@@ -475,7 +475,7 @@
- * Let the user select a linedef type number and return it.
- * Returns 0 if OK, <>0 if cancelled
- */
--static int InputLinedefType (int x0, int y0, int *number)
-+int InputLinedefType (int x0, int y0, int *number)
- {
- int r;
- int ldtgno = 0;
-@@ -547,3 +547,37 @@
- return ((ldtgroup_t *)ptr)->desc;
- }
-
-+/*
-+ * TransferLinedefProperties
-+ *
-+ * Note: right now nothing is done about sidedefs. Being able to
-+ * (intelligently) transfer sidedef properties from source line to
-+ * destination linedefs could be a useful feature -- though it is
-+ * unclear the best way to do it. OTOH not touching sidedefs might
-+ * be useful too.
-+ *
-+ * -AJA- 2001-05-27
-+ */
-+#define LINEDEF_FLAG_KEEP (1 + 4)
-+
-+void TransferLinedefProperties (int src_linedef, SelPtr linedefs)
-+{
-+ SelPtr cur;
-+ wad_ldflags_t src_flags = LineDefs[src_linedef].flags & ~LINEDEF_FLAG_KEEP;
-+
-+ for (cur=linedefs; cur; cur=cur->next)
-+ {
-+ if (! is_obj(cur->objnum))
-+ continue;
-+
-+ // don't transfer certain flags
-+ LineDefs[cur->objnum].flags &= LINEDEF_FLAG_KEEP;
-+ LineDefs[cur->objnum].flags |= src_flags;
-+
-+ LineDefs[cur->objnum].type = LineDefs[src_linedef].type;
-+ LineDefs[cur->objnum].tag = LineDefs[src_linedef].tag;
-+
-+ MadeChanges = 1;
-+ }
-+}
-+
-diff -u -r -N yadex-1.7.0/src/r_images.cc yadex-1.7.0-all/src/r_images.cc
---- yadex-1.7.0/src/r_images.cc 1970-01-01 10:00:00.000000000 +1000
-+++ yadex-1.7.0-all/src/r_images.cc 2005-01-10 14:30:53.000000000 +1100
-@@ -0,0 +1,400 @@
-+/*
-+ * r_images.cc
-+ * AJA 2002-04-23 (based on textures.cc and flats.cc)
-+ */
-+
-+
-+/*
-+This file is part of Yadex.
-+
-+Yadex incorporates code from DEU 5.21 that was put in the public domain in
-+1994 by Raphaël Quinet and Brendon Wyber.
-+
-+The rest of Yadex is Copyright © 1997-2000 André Majorel.
-+
-+This program is free software; you can redistribute it and/or modify it under
-+the terms of the GNU General Public License as published by the Free Software
-+Foundation; either version 2 of the License, or (at your option) any later
-+version.
-+
-+This program is distributed in the hope that it will be useful, but WITHOUT
-+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-+FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-+
-+You should have received a copy of the GNU General Public License along with
-+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-+Place, Suite 330, Boston, MA 02111-1307, USA.
-+*/
-+
-+
-+#include "yadex.h"
-+#ifdef Y_X11
-+#include
-+#endif
-+#include "dialog.h"
-+#include "game.h" /* yg_picture_format */
-+#include "gfx.h"
-+#include "levels.h"
-+#include "lists.h"
-+#include "patchdir.h"
-+#include "pic2img.h"
-+#include "sticker.h"
-+#include "flats.h"
-+#include "textures.h"
-+#include "wadfile.h"
-+#include "wads.h"
-+#include "wadres.h"
-+#include "wstructs.h"
-+
-+#include "r_images.h"
-+
-+
-+/*
-+ * flat_list_entry_match
-+ * Function used by bsearch() to locate a particular
-+ * flat in the FTexture.
-+ */
-+static int flat_list_entry_match (const void *key, const void *flat_list_entry)
-+{
-+return y_strnicmp ((const char *) key,
-+ ((const flat_list_entry_t *) flat_list_entry)->name,
-+ WAD_FLAT_NAME);
-+}
-+
-+
-+/*
-+ * load a flat into a new image. NULL if not found.
-+ */
-+
-+Img * Flat2Img (const wad_flat_name_t& fname)
-+{
-+char name[WAD_FLAT_NAME + 1];
-+strncpy (name, fname, WAD_FLAT_NAME);
-+name[WAD_FLAT_NAME] = 0;
-+
-+flat_list_entry_t *flat = (flat_list_entry_t *)
-+ bsearch (name, flat_list, NumFTexture, sizeof *flat_list,
-+ flat_list_entry_match);
-+
-+if (! flat) // Not found in list
-+ return 0;
-+
-+int width = DOOM_FLAT_WIDTH; // Big deal !
-+int height = DOOM_FLAT_HEIGHT;
-+
-+const Wad_file *wadfile = flat->wadfile;
-+wadfile->seek (flat->offset);
-+
-+Img *img = new Img (width, height, false);
-+
-+wadfile->read_bytes (img->wbuf (), (long) width * height);
-+
-+return img;
-+}
-+
-+
-+/*
-+ * load a wall texture ("TEXTURE1" or "TEXTURE2" object) into an image.
-+ * Returns NULL if not found or error.
-+ */
-+
-+Img * Tex2Img (const wad_tex_name_t& texname)
-+{
-+MDirPtr dir = 0; /* main directory pointer to the TEXTURE* entries */
-+i32 *offsets; /* array of offsets to texture names */
-+int n; /* general counter */
-+i16 width, height; /* size of the texture */
-+i16 npatches; /* number of wall patches used to build this texture */
-+i32 numtex; /* number of texture names in TEXTURE* list */
-+i32 texofs; /* offset in the wad file to the texture data */
-+char tname[WAD_TEX_NAME + 1]; /* texture name */
-+char picname[WAD_PIC_NAME + 1]; /* wall patch name */
-+bool have_dummy_bytes;
-+int header_size;
-+int item_size;
-+
-+char name[WAD_TEX_NAME + 1];
-+strncpy (name, texname, WAD_TEX_NAME);
-+name[WAD_TEX_NAME] = 0;
-+
-+// Iwad-dependant details
-+if (yg_texture_format == YGTF_NAMELESS)
-+ {
-+ have_dummy_bytes = true;
-+ header_size = 14;
-+ item_size = 10;
-+ }
-+else if (yg_texture_format == YGTF_NORMAL)
-+ {
-+ have_dummy_bytes = true;
-+ header_size = 14;
-+ item_size = 10;
-+ }
-+else if (yg_texture_format == YGTF_STRIFE11)
-+ {
-+ have_dummy_bytes = false;
-+ header_size = 10;
-+ item_size = 6;
-+ }
-+else
-+ {
-+ nf_bug ("Bad texture format %d.", (int) yg_texture_format);
-+ return 0;
-+ }
-+
-+/* offset for texture we want. */
-+texofs = 0;
-+// Doom alpha 0.4 : "TEXTURES", no names
-+if (yg_texture_lumps == YGTL_TEXTURES && yg_texture_format == YGTF_NAMELESS)
-+ {
-+ dir = FindMasterDir (MasterDir, "TEXTURES");
-+ if (dir != NULL)
-+ {
-+ dir->wadfile->seek (dir->dir.start);
-+ dir->wadfile->read_i32 (&numtex);
-+ if (WAD_TEX_NAME < 7) nf_bug ("WAD_TEX_NAME too small"); // Sanity
-+ if (! y_strnicmp (name, "TEX", 3)
-+ && isdigit (name[3])
-+ && isdigit (name[4])
-+ && isdigit (name[5])
-+ && isdigit (name[6])
-+ && name[7] == '\0')
-+ {
-+ long num;
-+ if (sscanf (name + 3, "%4ld", &num) == 1
-+ && num >= 0 && num < numtex)
-+ {
-+ dir->wadfile->seek (dir->dir.start + 4 + 4 * num);
-+ dir->wadfile->read_i32 (&texofs);
-+ texofs += dir->dir.start;
-+ }
-+ }
-+ }
-+ }
-+// Doom alpha 0.5 : only "TEXTURES"
-+else if (yg_texture_lumps == YGTL_TEXTURES
-+ && (yg_texture_format == YGTF_NORMAL || yg_texture_format == YGTF_STRIFE11))
-+ {
-+ // Is it in TEXTURES ?
-+ dir = FindMasterDir (MasterDir, "TEXTURES");
-+ if (dir != NULL) // (Theoretically, it should always exist)
-+ {
-+ dir->wadfile->seek (dir->dir.start);
-+ dir->wadfile->read_i32 (&numtex);
-+ /* read in the offsets for texture1 names and info. */
-+ offsets = (i32 *) GetMemory ((long) numtex * 4);
-+ dir->wadfile->read_i32 (offsets, numtex);
-+ for (n = 0; n < numtex && !texofs; n++)
-+ {
-+ dir->wadfile->seek (dir->dir.start + offsets[n]);
-+ dir->wadfile->read_bytes (&tname, WAD_TEX_NAME);
-+ if (!y_strnicmp (tname, name, WAD_TEX_NAME))
-+ texofs = dir->dir.start + offsets[n];
-+ }
-+ FreeMemory (offsets);
-+ }
-+ }
-+// Other iwads : "TEXTURE1" and "TEXTURE2"
-+else if (yg_texture_lumps == YGTL_NORMAL
-+ && (yg_texture_format == YGTF_NORMAL || yg_texture_format == YGTF_STRIFE11))
-+ {
-+ // Is it in TEXTURE1 ?
-+ dir = FindMasterDir (MasterDir, "TEXTURE1");
-+ if (dir != NULL) // (Theoretically, it should always exist)
-+ {
-+ dir->wadfile->seek (dir->dir.start);
-+ dir->wadfile->read_i32 (&numtex);
-+ /* read in the offsets for texture1 names and info. */
-+ offsets = (i32 *) GetMemory ((long) numtex * 4);
-+ dir->wadfile->read_i32 (offsets, numtex);
-+ for (n = 0; n < numtex && !texofs; n++)
-+ {
-+ dir->wadfile->seek (dir->dir.start + offsets[n]);
-+ dir->wadfile->read_bytes (&tname, WAD_TEX_NAME);
-+ if (!y_strnicmp (tname, name, WAD_TEX_NAME))
-+ texofs = dir->dir.start + offsets[n];
-+ }
-+ FreeMemory (offsets);
-+ }
-+ // Well, then is it in TEXTURE2 ?
-+ if (texofs == 0)
-+ {
-+ dir = FindMasterDir (MasterDir, "TEXTURE2");
-+ if (dir != NULL) // Doom II has no TEXTURE2
-+ {
-+ dir->wadfile->seek (dir->dir.start);
-+ dir->wadfile->read_i32 (&numtex);
-+ /* read in the offsets for texture2 names */
-+ offsets = (i32 *) GetMemory ((long) numtex * 4);
-+ dir->wadfile->read_i32 (offsets, numtex);
-+ for (n = 0; n < numtex && !texofs; n++)
-+ {
-+ dir->wadfile->seek (dir->dir.start + offsets[n]);
-+ dir->wadfile->read_bytes (&tname, WAD_TEX_NAME);
-+ if (!y_strnicmp (tname, name, WAD_TEX_NAME))
-+ texofs = dir->dir.start + offsets[n];
-+ }
-+ FreeMemory (offsets);
-+ }
-+ }
-+ }
-+else
-+ nf_bug ("Invalid texture_format/texture_lumps combination.");
-+
-+/* texture name not found */
-+if (texofs == 0)
-+ return 0;
-+
-+/* read the info for this texture */
-+i32 header_ofs;
-+if (yg_texture_format == YGTF_NAMELESS)
-+ header_ofs = texofs;
-+else
-+ header_ofs = texofs + WAD_TEX_NAME;
-+dir->wadfile->seek (header_ofs + 4);
-+dir->wadfile->read_i16 (&width);
-+dir->wadfile->read_i16 (&height);
-+if (have_dummy_bytes)
-+ {
-+ i16 dummy;
-+ dir->wadfile->read_i16 (&dummy);
-+ dir->wadfile->read_i16 (&dummy);
-+ }
-+dir->wadfile->read_i16 (&npatches);
-+
-+/* Compose the texture */
-+Img *texbuf = new Img (width, height, false);
-+
-+/* Paste onto the buffer all the patches that the texture is
-+ made of. */
-+for (n = 0; n < npatches; n++)
-+ {
-+ i16 xofs, yofs; // offset in texture space for the patch
-+ i16 pnameind; // index of patch in PNAMES
-+
-+ dir->wadfile->seek (header_ofs + header_size + (long) n * item_size);
-+ dir->wadfile->read_i16 (&xofs);
-+ dir->wadfile->read_i16 (&yofs);
-+ dir->wadfile->read_i16 (&pnameind);
-+
-+ if (have_dummy_bytes)
-+ {
-+ i16 stepdir;
-+ i16 colormap;
-+ dir->wadfile->read_i16 (&stepdir); // Always 1, unused.
-+ dir->wadfile->read_i16 (&colormap); // Always 0, unused.
-+ }
-+
-+ /* AYM 1998-08-08: Yes, that's weird but that's what Doom
-+ does. Without these two lines, the few textures that have
-+ patches with negative y-offsets (BIGDOOR7, SKY1, TEKWALL1,
-+ TEKWALL5 and a few others) would not look in the texture
-+ viewer quite like in Doom. This should be mentioned in
-+ the UDS, by the way. */
-+ if (yofs < 0)
-+ yofs = 0;
-+
-+ Lump_loc loc;
-+ {
-+ wad_pic_name_t *wname = patch_dir.name_for_num (pnameind);
-+ if (wname == 0)
-+ {
-+ warn ("texture \"%.*s\": patch %2d has bad index %d.\n",
-+ WAD_TEX_NAME, tname, (int) n, (int) pnameind);
-+ continue;
-+ }
-+ patch_dir.loc_by_name ((const char *) *wname, loc);
-+ *picname = '\0';
-+ strncat (picname, (const char *) *wname, sizeof picname - 1);
-+ }
-+
-+ if (LoadPicture (*texbuf, picname, loc, xofs, yofs, 0, 0))
-+ warn ("texture \"%.*s\": patch \"%.*s\" not found.\n",
-+ WAD_TEX_NAME, tname, WAD_PIC_NAME, picname);
-+ }
-+
-+return texbuf;
-+}
-+
-+
-+/* --- ImageCache methods --- */
-+
-+
-+Img *ImageCache::GetFlat (const wad_flat_name_t& fname)
-+{
-+std::string f_str = WadToString(fname);
-+
-+flat_map_t::iterator P = flats.find (f_str);
-+
-+if (P != flats.end ())
-+ return P->second;
-+
-+// flat not in the list yet. Add it.
-+
-+Img *result = Flat2Img (fname);
-+flats[f_str] = result;
-+
-+// note that a NULL return from Flat2Img is OK, it means that no
-+// such flat exists. Our renderer will revert to using a solid
-+// colour.
-+
-+return result;
-+}
-+
-+
-+Img *ImageCache::GetTex (const wad_tex_name_t& tname)
-+{
-+if (tname[0] == 0 || tname[0] == '-')
-+ return 0;
-+
-+std::string t_str = WadToString(tname);
-+
-+tex_map_t::iterator P = textures.find (t_str);
-+
-+if (P != textures.end ())
-+ return P->second;
-+
-+// texture not in the list yet. Add it.
-+
-+Img *result = Tex2Img (tname);
-+textures[t_str] = result;
-+
-+// note that a NULL return from Tex2Img is OK, it means that no
-+// such texture exists. Our renderer will revert to using a solid
-+// colour.
-+
-+return result;
-+}
-+
-+
-+Img *ImageCache::GetSprite (const wad_ttype_t& type)
-+{
-+sprite_map_t::iterator P = sprites.find (type);
-+
-+if (P != sprites.end ())
-+ return P->second;
-+
-+// sprite not in the list yet. Add it.
-+
-+Img *result = 0;
-+
-+const char *sprite_root = get_thing_sprite (type);
-+if (sprite_root)
-+ {
-+ Lump_loc loc;
-+ wad_res.sprites.loc_by_root (sprite_root, loc);
-+ result = new Img ();
-+
-+ if (LoadPicture (*result, sprite_root, loc, 0, 0) != 0)
-+ {
-+ delete result;
-+ result = 0;
-+ }
-+ }
-+
-+// note that a NULL image is OK. Our renderer will just ignore the
-+// missing sprite.
-+
-+sprites[type] = result;
-+return result;
-+}
-diff -u -r -N yadex-1.7.0/src/r_images.h yadex-1.7.0-all/src/r_images.h
---- yadex-1.7.0/src/r_images.h 1970-01-01 10:00:00.000000000 +1000
-+++ yadex-1.7.0-all/src/r_images.h 2005-01-10 14:30:53.000000000 +1100
-@@ -0,0 +1,69 @@
-+/*
-+ * r_images.h
-+ * AJA 2002-04-27
-+ */
-+
-+
-+#ifndef YH_R_IMAGES /* DO NOT INSERT ANYTHING BEFORE THIS LINE */
-+#define YH_R_IMAGES
-+
-+
-+#include