From 2a827a98bb8bbb994c395d405c8fb94736e28f4a Mon Sep 17 00:00:00 2001
From: Ronald Kinard <furyhunter600@gmail.com>
Date: Wed, 19 Mar 2014 02:31:50 -0500
Subject: [PATCH] Initial SDL2 renderer impmlementation work.

---
 comptime.sh                                   |    3 +-
 src/Makefile                                  |    2 +-
 src/Makefile.cfg                              |    3 +-
 src/m_misc.c                                  |    1 +
 src/sdl2/IMG_xpm.c                            |  506 ++
 src/sdl2/MakeCYG.cfg                          |   17 +
 src/sdl2/MakeNIX.cfg                          |   92 +
 src/sdl2/Makefile.cfg                         |  163 +
 src/sdl2/SDL_icon.xpm                         |   80 +
 src/sdl2/SDL_main/SDL_dummy_main.c            |   12 +
 src/sdl2/SDL_main/SDL_macosx_main.h           |   11 +
 src/sdl2/SDL_main/SDL_macosx_main.m           |  374 ++
 src/sdl2/SDL_main/SDL_openxdk_main.c          |    7 +
 src/sdl2/SDL_main/SDL_win32_main.c            |  406 ++
 src/sdl2/SRB2CE/Makefile.cfg                  |   12 +
 src/sdl2/SRB2CE/SRB2CE.zip                    |  Bin 0 -> 34234 bytes
 src/sdl2/SRB2CE/cehelp.c                      |  447 ++
 src/sdl2/SRB2CE/cehelp.h                      |   63 +
 src/sdl2/SRB2DC/.gitignore                    |    1 +
 src/sdl2/SRB2DC/IP.BIN                        |  Bin 0 -> 32768 bytes
 src/sdl2/SRB2DC/Makefile.cfg                  |   53 +
 src/sdl2/SRB2DC/SELFBOOT.BIN                  |  Bin 0 -> 1408808 bytes
 src/sdl2/SRB2DC/VMU.xbm                       |   19 +
 src/sdl2/SRB2DC/dchelp.c                      |  134 +
 src/sdl2/SRB2DC/dchelp.h                      |   51 +
 src/sdl2/SRB2DC/i_udp.c                       |  455 ++
 src/sdl2/SRB2DC/scramble.c                    |  259 +
 src/sdl2/SRB2PS3/ICON0.png                    |  Bin 0 -> 3678 bytes
 src/sdl2/SRB2PS3/Makefile.cfg                 |  139 +
 src/sdl2/SRB2PS3/sfo.xml                      |   39 +
 src/sdl2/SRB2PSP/ICON0.png                    |  Bin 0 -> 3678 bytes
 src/sdl2/SRB2PSP/Makefile.cfg                 |  126 +
 src/sdl2/SRB2PSP/PIC1.png                     |  Bin 0 -> 20300 bytes
 src/sdl2/SRB2PSP/psp-prxsign/.gitignore       |    2 +
 src/sdl2/SRB2PSP/psp-prxsign/Makefile         |   22 +
 src/sdl2/SRB2PSP/psp-prxsign/cmac.c           |  130 +
 src/sdl2/SRB2PSP/psp-prxsign/cmac.h           |   38 +
 src/sdl2/SRB2PSP/psp-prxsign/kirk_header.h    |   25 +
 src/sdl2/SRB2PSP/psp-prxsign/main.c           |  190 +
 src/sdl2/SRB2PSP/psp-prxsign/psp_header.h     |   29 +
 src/sdl2/SRB2Pandora/Makefile.cfg             |   39 +
 src/sdl2/SRB2Pandora/PXML.xml                 |   17 +
 src/sdl2/SRB2Pandora/icon.png                 |  Bin 0 -> 1690 bytes
 src/sdl2/SRB2WII/Makefile.cfg                 |  124 +
 src/sdl2/SRB2WII/icon.png                     |  Bin 0 -> 11247 bytes
 src/sdl2/SRB2WII/meta.xml                     |   18 +
 src/sdl2/SRB2XBOX/Makefile.cfg                |   44 +
 src/sdl2/SRB2XBOX/xboxhelp.c                  |   91 +
 src/sdl2/SRB2XBOX/xboxhelp.h                  |    6 +
 src/sdl2/Srb2SDL-vc10.vcxproj                 | 1464 +++++
 src/sdl2/Srb2SDL-vc9.vcproj                   | 5845 +++++++++++++++++
 src/sdl2/Srb2SDL.dsp                          | 1057 +++
 src/sdl2/Srb2SDL.dsw                          |   74 +
 src/sdl2/Srb2SDL.ico                          |  Bin 0 -> 2238 bytes
 src/sdl2/dosstr.c                             |   38 +
 src/sdl2/endtxt.c                             |  236 +
 src/sdl2/endtxt.h                             |   24 +
 src/sdl2/filter/filters.c                     | 1000 +++
 src/sdl2/filter/filters.h                     |  212 +
 src/sdl2/filter/hq2x.c                        | 3125 +++++++++
 src/sdl2/filter/hq2x.h                        | 1824 +++++
 src/sdl2/filter/interp.h                      |  306 +
 src/sdl2/filter/lq2x.c                        |  564 ++
 src/sdl2/filter/lq2x.h                        | 1284 ++++
 src/sdl2/filter/main.c                        |   15 +
 src/sdl2/hwsym_sdl.c                          |  183 +
 src/sdl2/hwsym_sdl.h                          |   23 +
 src/sdl2/i_cdmus.c                            |   38 +
 src/sdl2/i_main.c                             |  247 +
 src/sdl2/i_net.c                              |  442 ++
 src/sdl2/i_system.c                           | 3115 +++++++++
 src/sdl2/i_ttf.c                              |  340 +
 src/sdl2/i_ttf.h                              |   88 +
 src/sdl2/i_video.c                            |  186 +
 .../macosx/English.lproj/InfoPlist.strings    |    0
 src/sdl2/macosx/Info.plist                    |   28 +
 src/sdl2/macosx/Srb2mac.icns                  |  Bin 0 -> 79787 bytes
 .../macosx/Srb2mac.pbproj/project.pbxproj     | 3546 ++++++++++
 .../macosx/Srb2mac.xcodeproj/project.pbxproj  | 1508 +++++
 src/sdl2/macosx/mac_alert.c                   |   45 +
 src/sdl2/macosx/mac_alert.h                   |   27 +
 src/sdl2/mixer_sound.c                        |  824 +++
 src/sdl2/ogl_sdl.c                            |  315 +
 src/sdl2/ogl_sdl.h                            |   30 +
 src/sdl2/sdl_sound.c                          | 2030 ++++++
 src/sdl2/sdlmain.h                            |   65 +
 src/sdl2/srb2.ttf                             |  Bin 0 -> 318280 bytes
 87 files changed, 34394 insertions(+), 4 deletions(-)
 create mode 100644 src/sdl2/IMG_xpm.c
 create mode 100644 src/sdl2/MakeCYG.cfg
 create mode 100644 src/sdl2/MakeNIX.cfg
 create mode 100644 src/sdl2/Makefile.cfg
 create mode 100644 src/sdl2/SDL_icon.xpm
 create mode 100644 src/sdl2/SDL_main/SDL_dummy_main.c
 create mode 100644 src/sdl2/SDL_main/SDL_macosx_main.h
 create mode 100644 src/sdl2/SDL_main/SDL_macosx_main.m
 create mode 100644 src/sdl2/SDL_main/SDL_openxdk_main.c
 create mode 100644 src/sdl2/SDL_main/SDL_win32_main.c
 create mode 100644 src/sdl2/SRB2CE/Makefile.cfg
 create mode 100644 src/sdl2/SRB2CE/SRB2CE.zip
 create mode 100644 src/sdl2/SRB2CE/cehelp.c
 create mode 100644 src/sdl2/SRB2CE/cehelp.h
 create mode 100644 src/sdl2/SRB2DC/.gitignore
 create mode 100644 src/sdl2/SRB2DC/IP.BIN
 create mode 100644 src/sdl2/SRB2DC/Makefile.cfg
 create mode 100644 src/sdl2/SRB2DC/SELFBOOT.BIN
 create mode 100644 src/sdl2/SRB2DC/VMU.xbm
 create mode 100644 src/sdl2/SRB2DC/dchelp.c
 create mode 100644 src/sdl2/SRB2DC/dchelp.h
 create mode 100644 src/sdl2/SRB2DC/i_udp.c
 create mode 100644 src/sdl2/SRB2DC/scramble.c
 create mode 100644 src/sdl2/SRB2PS3/ICON0.png
 create mode 100644 src/sdl2/SRB2PS3/Makefile.cfg
 create mode 100644 src/sdl2/SRB2PS3/sfo.xml
 create mode 100644 src/sdl2/SRB2PSP/ICON0.png
 create mode 100644 src/sdl2/SRB2PSP/Makefile.cfg
 create mode 100644 src/sdl2/SRB2PSP/PIC1.png
 create mode 100644 src/sdl2/SRB2PSP/psp-prxsign/.gitignore
 create mode 100644 src/sdl2/SRB2PSP/psp-prxsign/Makefile
 create mode 100644 src/sdl2/SRB2PSP/psp-prxsign/cmac.c
 create mode 100644 src/sdl2/SRB2PSP/psp-prxsign/cmac.h
 create mode 100644 src/sdl2/SRB2PSP/psp-prxsign/kirk_header.h
 create mode 100644 src/sdl2/SRB2PSP/psp-prxsign/main.c
 create mode 100644 src/sdl2/SRB2PSP/psp-prxsign/psp_header.h
 create mode 100644 src/sdl2/SRB2Pandora/Makefile.cfg
 create mode 100644 src/sdl2/SRB2Pandora/PXML.xml
 create mode 100644 src/sdl2/SRB2Pandora/icon.png
 create mode 100644 src/sdl2/SRB2WII/Makefile.cfg
 create mode 100644 src/sdl2/SRB2WII/icon.png
 create mode 100644 src/sdl2/SRB2WII/meta.xml
 create mode 100644 src/sdl2/SRB2XBOX/Makefile.cfg
 create mode 100644 src/sdl2/SRB2XBOX/xboxhelp.c
 create mode 100644 src/sdl2/SRB2XBOX/xboxhelp.h
 create mode 100644 src/sdl2/Srb2SDL-vc10.vcxproj
 create mode 100644 src/sdl2/Srb2SDL-vc9.vcproj
 create mode 100644 src/sdl2/Srb2SDL.dsp
 create mode 100644 src/sdl2/Srb2SDL.dsw
 create mode 100644 src/sdl2/Srb2SDL.ico
 create mode 100644 src/sdl2/dosstr.c
 create mode 100644 src/sdl2/endtxt.c
 create mode 100644 src/sdl2/endtxt.h
 create mode 100644 src/sdl2/filter/filters.c
 create mode 100644 src/sdl2/filter/filters.h
 create mode 100644 src/sdl2/filter/hq2x.c
 create mode 100644 src/sdl2/filter/hq2x.h
 create mode 100644 src/sdl2/filter/interp.h
 create mode 100644 src/sdl2/filter/lq2x.c
 create mode 100644 src/sdl2/filter/lq2x.h
 create mode 100644 src/sdl2/filter/main.c
 create mode 100644 src/sdl2/hwsym_sdl.c
 create mode 100644 src/sdl2/hwsym_sdl.h
 create mode 100644 src/sdl2/i_cdmus.c
 create mode 100644 src/sdl2/i_main.c
 create mode 100644 src/sdl2/i_net.c
 create mode 100644 src/sdl2/i_system.c
 create mode 100644 src/sdl2/i_ttf.c
 create mode 100644 src/sdl2/i_ttf.h
 create mode 100644 src/sdl2/i_video.c
 create mode 100644 src/sdl2/macosx/English.lproj/InfoPlist.strings
 create mode 100644 src/sdl2/macosx/Info.plist
 create mode 100644 src/sdl2/macosx/Srb2mac.icns
 create mode 100644 src/sdl2/macosx/Srb2mac.pbproj/project.pbxproj
 create mode 100644 src/sdl2/macosx/Srb2mac.xcodeproj/project.pbxproj
 create mode 100644 src/sdl2/macosx/mac_alert.c
 create mode 100644 src/sdl2/macosx/mac_alert.h
 create mode 100644 src/sdl2/mixer_sound.c
 create mode 100644 src/sdl2/ogl_sdl.c
 create mode 100644 src/sdl2/ogl_sdl.h
 create mode 100644 src/sdl2/sdl_sound.c
 create mode 100644 src/sdl2/sdlmain.h
 create mode 100644 src/sdl2/srb2.ttf

diff --git a/comptime.sh b/comptime.sh
index 1bd35b629..a03ad33ba 100755
--- a/comptime.sh
+++ b/comptime.sh
@@ -5,7 +5,8 @@ if [ x"$1" != x ]; then
 fi
 
 versiongit() {
-	gitversion=`git svn log HEAD --limit=1 --oneline | cut -f 1 -d " "`
+	#gitversion=`git svn log HEAD --limit=1 --oneline | cut -f 1 -d " "`
+	gitversion=`git log HEAD -n1 --oneline | cut -f 1 -d " "`
 	cat <<EOF > $path/comptime.h
 
 // Do not edit!  This file was autogenerated
diff --git a/src/Makefile b/src/Makefile
index a5d5dc191..2e3f5406e 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -202,7 +202,7 @@ LIBS+=-lm
 endif
 
 ifdef SDL
-include sdl/Makefile.cfg
+include sdl2/Makefile.cfg
 endif #ifdef SDL
 
 ifdef DISTCC
diff --git a/src/Makefile.cfg b/src/Makefile.cfg
index ccf84165f..e4f9290c6 100644
--- a/src/Makefile.cfg
+++ b/src/Makefile.cfg
@@ -230,7 +230,6 @@ ifdef DUMMY
 	BIN:=$(BIN)/dummy
 else
 ifdef LINUX
-	INTERFACE=sdl
 	NASMFORMAT=elf -DLINUX
 	SDL=1
 ifndef NOGETTEXT
@@ -387,7 +386,7 @@ OBJDUMP_OPTS?=--wide --source --line-numbers
 LD=$(CC)
 
 ifdef SDL
-	INTERFACE=sdl
+	INTERFACE=sdl2
 	OBJDIR:=$(OBJDIR)/SDL
 endif
 
diff --git a/src/m_misc.c b/src/m_misc.c
index acf6a5982..6e34f02b7 100644
--- a/src/m_misc.c
+++ b/src/m_misc.c
@@ -49,6 +49,7 @@
 
 #ifdef SDL
 #include "sdl/hwsym_sdl.h"
+typedef off_t off64_t;
 #endif
 
 #if defined (_WIN32)
diff --git a/src/sdl2/IMG_xpm.c b/src/sdl2/IMG_xpm.c
new file mode 100644
index 000000000..e08736d66
--- /dev/null
+++ b/src/sdl2/IMG_xpm.c
@@ -0,0 +1,506 @@
+/*
+    SDL_image:  An example image loading library for use with SDL
+    Copyright (C) 1999-2004 Sam Lantinga
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library 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
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the Free
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+    Sam Lantinga
+    slouken@libsdl.org
+*/
+
+/* $Id: IMG_xpm.c,v 1.10 2004/01/04 22:04:38 slouken Exp $ */
+
+/*
+ * XPM (X PixMap) image loader:
+ *
+ * Supports the XPMv3 format, EXCEPT:
+ * - hotspot coordinates are ignored
+ * - only colour ('c') colour symbols are used
+ * - rgb.txt is not used (for portability), so only RGB colours
+ *   are recognized (#rrggbb etc) - only a few basic colour names are
+ *   handled
+ *
+ * The result is an 8bpp indexed surface if possible, otherwise 32bpp.
+ * The colourkey is correctly set if transparency is used.
+ *
+ * Besides the standard API, also provides
+ *
+ *     SDL_Surface *IMG_ReadXPMFromArray(char **xpm)
+ *
+ * that reads the image data from an XPM file included in the C source.
+ *
+ * TODO: include rgb.txt here. The full table (from solaris 2.6) only
+ * requires about 13K in binary form.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+//#include "SDL_image.h"
+
+
+#ifdef LOAD_XPM
+
+/* See if an image is contained in a data source */
+#if 0
+int IMG_isXPM(SDL_RWops *src)
+{
+        char magic[9];
+
+        return (SDL_RWread(src, magic, sizeof (magic), 1)
+                && memcmp(magic, "/* XPM */", 9) == 0);
+}
+#endif
+
+/* Hash table to look up colors from pixel strings */
+#define STARTING_HASH_SIZE 256
+
+struct hash_entry {
+        char *key;
+        Uint32 color;
+        struct hash_entry *next;
+};
+
+struct color_hash {
+        struct hash_entry **table;
+        struct hash_entry *entries; /* array of all entries */
+        struct hash_entry *next_free;
+        size_t size;
+        int maxnum;
+};
+
+static int hash_key(const char *key, int cpp, size_t size)
+{
+        int hash;
+
+        hash = 0;
+        while ( cpp-- > 0 ) {
+                hash = hash * 33 + *key++;
+        }
+        return (int)(hash & (size - 1));
+}
+
+static struct color_hash *create_colorhash(int maxnum)
+{
+        size_t bytes;
+		int s;
+        struct color_hash *hash;
+
+        /* we know how many entries we need, so we can allocate
+           everything here */
+        hash = malloc(sizeof *hash);
+        if (!hash)
+                return NULL;
+
+        /* use power-of-2 sized hash table for decoding speed */
+        for (s = STARTING_HASH_SIZE; s < maxnum; s <<= 1)
+                ;
+        hash->size = s;
+        hash->maxnum = maxnum;
+        bytes = hash->size * sizeof (struct hash_entry **);
+        hash->entries = NULL;        /* in case malloc fails */
+        hash->table = malloc(bytes);
+        if (!hash->table)
+                return NULL;
+        memset(hash->table, 0, bytes);
+        hash->entries = malloc(maxnum * sizeof (struct hash_entry));
+        if (!hash->entries)
+        {
+                free(hash->table);
+                return NULL;
+        }
+        hash->next_free = hash->entries;
+        return hash;
+}
+
+static int add_colorhash(struct color_hash *hash,
+                         char *key, int cpp, Uint32 color)
+{
+        const int indexkey = hash_key(key, cpp, hash->size);
+        struct hash_entry *e = hash->next_free++;
+        e->color = color;
+        e->key = key;
+        e->next = hash->table[indexkey];
+        hash->table[indexkey] = e;
+        return 1;
+}
+
+/* fast lookup that works if cpp == 1 */
+#define QUICK_COLORHASH(hash, key) ((hash)->table[*(const Uint8 *)(key)]->color)
+
+static Uint32 get_colorhash(struct color_hash *hash, const char *key, int cpp)
+{
+        struct hash_entry *entry = hash->table[hash_key(key, cpp, hash->size)];
+        while (entry) {
+                if (memcmp(key, entry->key, cpp) == 0)
+                        return entry->color;
+                entry = entry->next;
+        }
+        return 0;                /* garbage in - garbage out */
+}
+
+static void free_colorhash(struct color_hash *hash)
+{
+        if (hash && hash->table) {
+                free(hash->table);
+                free(hash->entries);
+                free(hash);
+        }
+}
+
+/* portable case-insensitive string comparison */
+static int string_equal(const char *a, const char *b, size_t n)
+{
+        while (*a && *b && n) {
+                if (toupper((unsigned char)*a) != toupper((unsigned char)*b))
+                        return 0;
+                a++;
+                b++;
+                n--;
+        }
+        return *a == *b;
+}
+
+#undef ARRAYSIZE
+#define ARRAYSIZE(a) (int)(sizeof (a) / sizeof ((a)[0]))
+
+/*
+ * convert colour spec to RGB (in 0xrrggbb format).
+ * return 1 if successful.
+ */
+static int color_to_rgb(const char *spec, size_t speclen, Uint32 *rgb)
+{
+        /* poor man's rgb.txt */
+        static struct { const char *name; Uint32 rgb; } known[] = {
+                {"none",  0xffffffff},
+                {"black", 0x00000000},
+                {"white", 0x00ffffff},
+                {"red",   0x00ff0000},
+                {"green", 0x0000ff00},
+                {"blue",  0x000000ff}
+        };
+
+        if (spec[0] == '#') {
+                char buf[7];
+                switch (speclen) {
+                case 4:
+                        buf[0] = buf[1] = spec[1];
+                        buf[2] = buf[3] = spec[2];
+                        buf[4] = buf[5] = spec[3];
+                        break;
+                case 7:
+                        memcpy(buf, spec + 1, 6);
+                        break;
+                case 13:
+                        buf[0] = spec[1];
+                        buf[1] = spec[2];
+                        buf[2] = spec[5];
+                        buf[3] = spec[6];
+                        buf[4] = spec[9];
+                        buf[5] = spec[10];
+                        break;
+                }
+                buf[6] = '\0';
+                *rgb = (Uint32)strtol(buf, NULL, 16);
+                return 1;
+        } else {
+                int i;
+                for (i = 0; i < ARRAYSIZE(known); i++)
+                        if (string_equal(known[i].name, spec, speclen)) {
+                                *rgb = known[i].rgb;
+                                return 1;
+                        }
+                return 0;
+        }
+}
+
+#ifndef MAX
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#endif
+
+static char *linebuf;
+static int buflen;
+static const char *error;
+
+/*
+ * Read next line from the source.
+ * If len > 0, it's assumed to be at least len chars (for efficiency).
+ * Return NULL and set error upon EOF or parse error.
+ */
+static const char *get_next_line(const char ***lines, SDL_RWops *src, int len)
+{
+        char *linebufnew;
+        if (lines) {
+                return *(*lines)++;
+        } else {
+                char c;
+                int n;
+                do {
+                        if (SDL_RWread(src, &c, 1, 1) <= 0) {
+                                error = "Premature end of data";
+                                return NULL;
+                        }
+                } while (c != '"');
+                if (len) {
+                        len += 4;        /* "\",\n\0" */
+                        if (len > buflen){
+                                buflen = len;
+                                linebufnew = realloc(linebuf, buflen);
+                                if(!linebufnew) {
+                                        free(linebuf);
+                                        error = "Out of memory";
+                                        return NULL;
+                                }
+                                linebuf = linebufnew;
+                        }
+                        if (SDL_RWread(src, linebuf, len - 1, 1) <= 0) {
+                                error = "Premature end of data";
+                                return NULL;
+                        }
+                        n = len - 2;
+                } else {
+                        n = 0;
+                        do {
+                                if (n >= buflen - 1) {
+                                        if (buflen == 0)
+                                                buflen = 16;
+                                        buflen *= 2;
+                                        linebufnew = realloc(linebuf, buflen);
+                                        if(!linebufnew) {
+                                                free(linebuf);
+                                                error = "Out of memory";
+                                                return NULL;
+                                        }
+                                        linebuf = linebufnew;
+                                }
+                                if (SDL_RWread(src, linebuf + n, 1, 1) <= 0) {
+                                        error = "Premature end of data";
+                                        return NULL;
+                                }
+                        } while (linebuf[n++] != '"');
+                        n--;
+                }
+                linebuf[n] = '\0';
+                return linebuf;
+        }
+}
+
+#define SKIPSPACE(p)                            \
+do {                                            \
+        while (isspace((unsigned char)*(p)))        \
+              ++(p);                                \
+} while (0)
+
+#define SKIPNONSPACE(p)                                 \
+do {                                                    \
+        while (!isspace((unsigned char)*(p)) && *p)        \
+              ++(p);                                        \
+} while (0)
+
+/* read XPM from either array or RWops */
+static SDL_Surface *load_xpm(const char **xpm, SDL_RWops *src)
+{
+        SDL_Surface *image = NULL;
+        int indexc;
+        int x, y;
+        int w, h, ncolors, cpp;
+        int indexed;
+        Uint8 *dst;
+        struct color_hash *colors = NULL;
+        SDL_Color *im_colors = NULL;
+        char *keystrings = NULL, *nextkey;
+        const char *line;
+        const char ***xpmlines = NULL;
+        int pixels_len;
+
+        error = NULL;
+        linebuf = NULL;
+        buflen = 0;
+
+        if (xpm)
+                xpmlines = &xpm;
+
+        line = get_next_line(xpmlines, src, 0);
+        if (!line)
+                goto done;
+        /*
+         * The header string of an XPMv3 image has the format
+         *
+         * <width> <height> <ncolors> <cpp> [ <hotspot_x> <hotspot_y> ]
+         *
+         * where the hotspot coords are intended for mouse cursors.
+         * Right now we don't use the hotspots but it should be handled
+         * one day.
+         */
+        if (sscanf(line, "%d %d %d %d", &w, &h, &ncolors, &cpp) != 4
+           || w <= 0 || h <= 0 || ncolors <= 0 || cpp <= 0) {
+                error = "Invalid format description";
+                goto done;
+        }
+
+        keystrings = malloc(ncolors * cpp);
+        if (!keystrings) {
+                error = "Out of memory";
+                goto done;
+        }
+        nextkey = keystrings;
+
+        /* Create the new surface */
+        if (ncolors <= 256) {
+                indexed = 1;
+                image = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 8,
+                                             0, 0, 0, 0);
+                im_colors = image->format->palette->colors;
+                image->format->palette->ncolors = ncolors;
+        } else {
+                indexed = 0;
+                image = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 32,
+                                             0xff0000, 0x00ff00, 0x0000ff, 0);
+        }
+        if (!image) {
+                /* Hmm, some SDL error (out of memory?) */
+                goto done;
+        }
+
+        /* Read the colors */
+        colors = create_colorhash(ncolors);
+        if (!colors) {
+                error = "Out of memory";
+                goto done;
+        }
+        for (indexc = 0; indexc < ncolors; ++indexc ) {
+                const char *p;
+                line = get_next_line(xpmlines, src, 0);
+                if (!line)
+                        goto done;
+
+                p = line + cpp + 1;
+
+                /* parse a colour definition */
+                for (;;) {
+                        char nametype;
+                        const char *colname;
+                        Uint32 rgb, pixel;
+
+                        SKIPSPACE(p);
+                        if (!*p) {
+                                error = "colour parse error";
+                                goto done;
+                        }
+                        nametype = *p;
+                        SKIPNONSPACE(p);
+                        SKIPSPACE(p);
+                        colname = p;
+                        SKIPNONSPACE(p);
+                        if (nametype == 's')
+                                continue;      /* skip symbolic colour names */
+
+                        if (!color_to_rgb(colname, p - colname, &rgb))
+                                continue;
+
+                        memcpy(nextkey, line, cpp);
+                        if (indexed) {
+                                SDL_Color *c = im_colors + indexc;
+                                c->r = (Uint8)(rgb >> 16);
+                                c->g = (Uint8)(rgb >> 8);
+                                c->b = (Uint8)(rgb);
+                                pixel = indexc;
+                        } else
+                                pixel = rgb;
+                        add_colorhash(colors, nextkey, cpp, pixel);
+                        nextkey += cpp;
+                        if (rgb == 0xffffffff)
+                                SDL_SetColorKey(image, SDL_SRCCOLORKEY, pixel);
+                        break;
+                }
+        }
+
+        /* Read the pixels */
+        pixels_len = w * cpp;
+        dst = image->pixels;
+        for (y = 0; y < h; y++) {
+                line = get_next_line(xpmlines, src, pixels_len);
+                if (indexed) {
+                        /* optimization for some common cases */
+                        if (cpp == 1)
+                                for (x = 0; x < w; x++)
+                                        dst[x] = (Uint8)QUICK_COLORHASH(colors,
+                                                                 line + x);
+                        else
+                                for (x = 0; x < w; x++)
+                                        dst[x] = (Uint8)get_colorhash(colors,
+                                                               line + x * cpp,
+                                                               cpp);
+                } else {
+                        for (x = 0; x < w; x++)
+                                ((Uint32*)dst)[x] = get_colorhash(colors,
+                                                                line + x * cpp,
+                                                                  cpp);
+                }
+                dst += image->pitch;
+        }
+
+done:
+        if (error) {
+                SDL_FreeSurface(image);
+                image = NULL;
+                SDL_SetError(error);
+        }
+        free(keystrings);
+        free_colorhash(colors);
+        free(linebuf);
+        return(image);
+}
+
+/* Load a XPM type image from an RWops datasource */
+#if 0
+SDL_Surface *IMG_LoadXPM_RW(SDL_RWops *src)
+{
+        if ( !src ) {
+                /* The error message has been set in SDL_RWFromFile */
+                return NULL;
+        }
+        return load_xpm(NULL, src);
+}
+#endif
+
+static inline SDL_Surface *IMG_ReadXPMFromArray(const char **xpm)
+{
+        return load_xpm(xpm, NULL);
+}
+
+#else  /* not LOAD_XPM */
+
+/* See if an image is contained in a data source */
+#if 0
+int IMG_isXPM(SDL_RWops *src)
+{
+        return(0);
+}
+
+/* Load a XPM type image from an SDL datasource */
+SDL_Surface *IMG_LoadXPM_RW(SDL_RWops *src)
+{
+        return(NULL);
+}
+#endif
+
+static inline SDL_Surface *IMG_ReadXPMFromArray(const char **xpm)
+{
+    return NULL;
+}
+#endif /* not LOAD_XPM */
diff --git a/src/sdl2/MakeCYG.cfg b/src/sdl2/MakeCYG.cfg
new file mode 100644
index 000000000..5907579c1
--- /dev/null
+++ b/src/sdl2/MakeCYG.cfg
@@ -0,0 +1,17 @@
+#
+# sdl/makeCYG.cfg for SRB2/Cygwin
+#
+
+#
+#Cygwin, for debugging
+
+	NOHW=1
+	NOHS=1
+	NOASM=1
+
+	OPTS+=-DLINUX
+
+	i_system_o+=$(OBJDIR)/SRB2.res
+
+	# name of the exefile
+	EXENAME?=lsdlsrb2.exe
diff --git a/src/sdl2/MakeNIX.cfg b/src/sdl2/MakeNIX.cfg
new file mode 100644
index 000000000..863bbb076
--- /dev/null
+++ b/src/sdl2/MakeNIX.cfg
@@ -0,0 +1,92 @@
+#
+# sdl/makeNIX.cfg for SRB2/?nix
+#
+
+#Valgrind support
+ifdef VALGRIND
+VALGRIND_PKGCONFIG?=valgrind
+VALGRIND_CFLAGS?=$(shell $(PKG_CONFIG) $(VALGRIND_PKGCONFIG) --cflags)
+VALGRIND_LDFLAGS?=$(shell $(PKG_CONFIG) $(VALGRIND_PKGCONFIG) --libs)
+ZDEBUG=1
+LIBS+=$(VALGRIND_LDFLAGS)
+ifdef GCC46
+WFLAGS+=-Wno-error=unused-but-set-variable
+WFLAGS+=-Wno-unused-but-set-variable
+endif
+endif
+
+#
+#here is GNU/Linux and other
+#
+
+	OPTS=-DUNIXCOMMON
+
+	#LDFLAGS = -L/usr/local/lib
+	LIBS=-lm
+ifdef LINUX
+	LIBS+=-lrt
+ifdef NOTERMIOS
+	OPTS+=-DNOTERMIOS
+endif
+endif
+
+#
+#here is Solaris
+#
+ifdef SOLARIS
+	NOIPX=1
+	NOASM=1
+	OPTS+=-DSOLARIS -DINADDR_NONE=INADDR_ANY -DBSD_COMP
+	OPTS+=-I/usr/local/include -I/opt/sfw/include
+	LDFLAGS+=-L/opt/sfw/lib
+	LIBS+=-lsocket -lnsl
+endif
+
+#
+#here is FreeBSD
+#
+ifdef FREEBSD
+	OPTS+=-DLINUX -DFREEBSD -I/usr/X11R6/include
+	SDL_CONFIG?=sdl11-config
+	LDFLAGS+=-L/usr/X11R6/lib
+	LIBS+=-lipx -lkvm
+endif
+
+#
+#here is GP2x (arm-gp2x-linux)
+#
+ifdef GP2X
+	PNG_CONFIG?=$(PREFIX)-libpng12-config
+ifdef STATIC #need a better setting name
+	CFLAGS+=-I$(OPEN2X)/include
+ifndef NOMIXER
+	LIBS+=-lvorbisidec
+ifdef MIKMOD
+	LIBS+=-lmikmod
+endif
+ifdef SMPEGLIB
+	LIBS+=-lsmpeg
+	LD=$(CXX)
+endif
+endif
+	NONET=1
+endif
+ifndef ARCHNAME
+"error"
+endif
+	NONX86=1
+	NOHW=1
+	NOHS=1
+	NOMD5=1
+	WFLAGS+=-O0
+	OPTS+=-DGP2X -ffast-math -mcpu=arm920t
+	EXENAME?=SRB2GP2X.gpe
+endif
+
+ifndef NOHW
+	OPTS+=-I/usr/X11R6/include
+	LDFLAGS+=-L/usr/X11R6/lib
+endif
+
+	# name of the exefile
+	EXENAME?=lsdl2srb2
diff --git a/src/sdl2/Makefile.cfg b/src/sdl2/Makefile.cfg
new file mode 100644
index 000000000..68b80ac8f
--- /dev/null
+++ b/src/sdl2/Makefile.cfg
@@ -0,0 +1,163 @@
+#
+# sdl/makefile.cfg for SRB2/SDL
+#
+
+#
+#SDL...., *looks at Alam*, THIS IS A MESS!
+#
+
+ifdef UNIXCOMMON
+include sdl2/MakeNIX.cfg
+endif
+
+ifdef PANDORA
+include sdl/SRB2Pandora/Makefile.cfg
+endif #ifdef PANDORA
+
+ifdef DC
+include sdl/SRB2DC/Makefile.cfg
+endif #ifdef DC
+
+ifdef PS3N
+include sdl/SRB2PS3/Makefile.cfg
+endif #ifdef PS3N
+
+ifdef PSP
+include sdl/SRB2PSP/Makefile.cfg
+endif #ifdef PSP
+
+ifdef XBOX
+include sdl/SRB2XBOX/Makefile.cfg
+endif #ifdef XBOX
+
+ifdef WINCE
+include sdl/SRB2CE/Makefile.cfg
+endif #ifef WINCE
+
+ifdef CYGWIN32
+include sdl2/MakeCYG.cfg
+endif #ifdef CYGWIN32
+
+ifdef SDL_PKGCONFIG
+SDL_CFLAGS?=$(shell $(PKG_CONFIG) $(SDL_PKGCONFIG) --cflags)
+SDL_LDFLAGS?=$(shell $(PKG_CONFIG) $(SDL_PKGCONFIG) --libs)
+else
+ifdef PREFIX
+	SDL_CONFIG?=$(PREFIX)-sdl2-config
+else
+	SDL_CONFIG?=sdl2-config
+endif
+
+ifdef STATIC
+	SDL_CFLAGS?=$(shell $(SDL_CONFIG) --cflags)
+	SDL_LDFLAGS?=$(shell $(SDL_CONFIG) --static-libs)
+else
+	SDL_CFLAGS?=$(shell $(SDL_CONFIG) --cflags)
+	SDL_LDFLAGS?=$(shell $(SDL_CONFIG) --libs)
+endif
+endif
+
+
+	#use the x86 asm code
+ifndef CYGWIN32
+ifndef NOASM
+	USEASM=1
+endif
+endif
+
+	OBJS+=$(OBJDIR)/i_video.o $(OBJDIR)/dosstr.o $(OBJDIR)/endtxt.o $(OBJDIR)/hwsym_sdl.o
+
+	OPTS+=-DDIRECTFULLSCREEN -DSDL
+
+ifndef NOHW
+	OBJS+=$(OBJDIR)/r_opengl.o $(OBJDIR)/ogl_sdl.o
+endif
+
+ifndef NOHS
+ifdef OPENAL
+	OBJS+=$(OBJDIR)/s_openal.o
+	OPTS+=-DSTATIC3DS
+	STATICHS=1
+else
+ifdef FMOD
+	OBJS+=$(OBJDIR)/s_fmod.o
+	OPTS+=-DSTATIC3DS
+	STATICHS=1
+else
+ifdef MINGW
+ifdef DS3D
+	OBJS+=$(OBJDIR)/s_ds3d.o
+	OPTS+=-DSTATIC3DS
+	STATICHS=1
+endif
+endif
+endif
+endif
+endif
+
+ifdef FILTERS
+	OBJS+=$(OBJDIR)/filters.o $(OBJDIR)/hq2x.o $(OBJDIR)/lq2x.o
+	OPTS+=-DHAVE_FILTER
+endif
+
+ifdef NOMIXER
+	i_sound_o=$(OBJDIR)/sdl_sound.o
+else
+	i_sound_o=$(OBJDIR)/mixer_sound.o
+	OPTS+=-DHAVE_MIXER
+	SDL_LDFLAGS+=-lSDL_mixer
+endif
+
+ifdef SDL_TTF
+	OPTS+=-DHAVE_TTF
+	SDL_LDFLAGS+=-lSDL_ttf -lfreetype -lz
+	OBJS+=$(OBJDIR)/i_ttf.o
+endif
+
+#ifdef SDL_IMAGE
+#	OPTS+=-DHAVE_IMAGE
+#	SDL_LDFLAGS+=-lSDL_image
+#endif
+
+ifdef SDL_NET
+	OPTS+=-DHAVE_SDLNET
+	SDL_LDFLAGS+=-lSDL_net
+endif
+
+ifdef SDLMAIN
+	OPTS+=-DSDLMAIN
+else
+ifdef MINGW
+	SDL_CFLAGS+=-Umain
+	SDL_LDFLAGS+=-mconsole
+endif
+endif
+
+ifndef NOHW
+ifdef OPENAL
+ifdef MINGW
+	LIBS:=-lopenal32 $(LIBS)
+else
+	LIBS:=-lopenal $(LIBS)
+endif
+else
+ifdef MINGW
+ifdef DS3D
+	LIBS:=-ldsound -luuid $(LIBS)
+endif
+endif
+endif
+endif
+
+# FIXME: DevkitPPC and ready-compiled SDL Wii require these things to be in a silly order
+ifdef WII
+include sdl/SRB2WII/Makefile.cfg
+endif #ifdef WII
+
+CFLAGS+=$(SDL_CFLAGS)
+LIBS:=$(SDL_LDFLAGS) $(LIBS)
+ifndef WII
+ifdef STATIC
+	LIBS+=$(shell $(SDL_CONFIG) --static-libs)
+endif
+endif
diff --git a/src/sdl2/SDL_icon.xpm b/src/sdl2/SDL_icon.xpm
new file mode 100644
index 000000000..70bb02d3c
--- /dev/null
+++ b/src/sdl2/SDL_icon.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static const char * SDL_icon_xpm[] = {
+"32 32 45 1",
+" 	c None",
+".	c #6B6BFF",
+"+	c #3D00B9",
+"@	c #4848FF",
+"#	c #2525FF",
+"$	c #310096",
+"%	c #003196",
+"&	c #003DB9",
+"*	c #620096",
+"=	c #6E6E6E",
+"-	c #966200",
+";	c #250073",
+">	c #626262",
+",	c #FF8F6B",
+"'	c #FFC66B",
+")	c #FFAB8E",
+"!	c #000080",
+"~	c #B6B6B6",
+"{	c #929292",
+"]	c #FFD48E",
+"^	c #0000B9",
+"/	c #565656",
+"(	c #868686",
+"_	c #808080",
+":	c #C0C0C0",
+"<	c #DADADA",
+"[	c #F2F2F2",
+"}	c #FFFFFF",
+"|	c #CECECE",
+"1	c #AAAAAA",
+"2	c #E6E6E6",
+"3	c #000096",
+"4	c #AB8EFF",
+"5	c #190050",
+"6	c #000000",
+"7	c #8E8EFF",
+"8	c #3E3E3E",
+"9	c #7A7A7A",
+"0	c #0E0E0E",
+"a	c #9E9E9E",
+"b	c #001950",
+"c	c #C2C2C2",
+"d	c #323232",
+"e	c #002573",
+"f	c #A0A0A4",
+"                                ",
+"                                ",
+"                                ",
+"             .+@##@.            ",
+"           @@.@#######@         ",
+"         @@....#########        ",
+" ..    .@.....@+##$%%%&&%       ",
+" ..@# @@....@+#*=-;%%%%%        ",
+"  ..@#@......@>,')!%%%$         ",
+" ~..$#.........{])^#+%/         ",
+"   +##@.........()^@@@@@_       ",
+"  $####@........#=#######+      ",
+"  +######....@@##^#########_    ",
+"  +#####=:<<:+##############/   ",
+"[<=####{<}}}}|###############=  ",
+" }1###=2}}}}}}.###############  ",
+" }<3#3~}}}}}}}4################ ",
+" }<5#6:}}}}}}}7################/",
+" }:6861}}}}}}}.########$$ 9  .@$",
+" }:0a6~}}}}}}}@######5b         ",
+"22cd262}}}}}}2######5b$         ",
+"  2>1a}}}}}}}{(*###%be##        ",
+"  860)1<[22c1)]]+##be###        ",
+"  ~)]]]))))]]]]]=#bb####        ",
+"   )]]]]]]]]](]]=eb$####        ",
+"    :]]]]]]]]]'9bbb$#####       ",
+"      ),'''''(    >db+###       ",
+"                      =##f      ",
+"                        {       ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/src/sdl2/SDL_main/SDL_dummy_main.c b/src/sdl2/SDL_main/SDL_dummy_main.c
new file mode 100644
index 000000000..d8cfdd5bb
--- /dev/null
+++ b/src/sdl2/SDL_main/SDL_dummy_main.c
@@ -0,0 +1,12 @@
+/* Include the SDL main definition header */
+#include "SDL_main.h"
+
+#ifdef main
+#undef main
+int main(int argc, char *argv[])
+{
+	return(SDL_main(argc, argv));
+}
+#else
+/* Nothing to do on this platform */;
+#endif
diff --git a/src/sdl2/SDL_main/SDL_macosx_main.h b/src/sdl2/SDL_main/SDL_macosx_main.h
new file mode 100644
index 000000000..4683df57a
--- /dev/null
+++ b/src/sdl2/SDL_main/SDL_macosx_main.h
@@ -0,0 +1,11 @@
+/*   SDLMain.m - main entry point for our Cocoa-ized SDL app
+       Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
+       Non-NIB-Code & other changes: Max Horn <max@quendi.de>
+
+    Feel free to customize this file to suit your needs
+*/
+
+#import <Cocoa/Cocoa.h>
+
+@interface SDLMain : NSObject
+@end
diff --git a/src/sdl2/SDL_main/SDL_macosx_main.m b/src/sdl2/SDL_main/SDL_macosx_main.m
new file mode 100644
index 000000000..226afe13d
--- /dev/null
+++ b/src/sdl2/SDL_main/SDL_macosx_main.m
@@ -0,0 +1,374 @@
+/*   SDLMain.m - main entry point for our Cocoa-ized SDL app
+       Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
+       Non-NIB-Code & other changes: Max Horn <max@quendi.de>
+
+    Feel free to customize this file to suit your needs
+*/
+
+#import "SDL.h"
+#import "SDL_macosx_main.h"
+#import <sys/param.h> /* for MAXPATHLEN */
+#import <unistd.h>
+
+/* For some reaon, Apple removed setAppleMenu from the headers in 10.4,
+ but the method still is there and works. To avoid warnings, we declare
+ it ourselves here. */
+@interface NSApplication(SDL_Missing_Methods)
+- (void)setAppleMenu:(NSMenu *)menu;
+@end
+
+/* Use this flag to determine whether we use SDLMain.nib or not */
+#define		SDL_USE_NIB_FILE	0
+
+/* Use this flag to determine whether we use CPS (docking) or not */
+#define		SDL_USE_CPS		1
+#if SDL_USE_CPS
+/* Portions of CPS.h */
+typedef struct CPSProcessSerNum
+{
+	UInt32		lo;
+	UInt32		hi;
+} CPSProcessSerNum;
+
+extern OSErr	CPSGetCurrentProcess( CPSProcessSerNum *psn);
+extern OSErr 	CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
+extern OSErr	CPSSetFrontProcess( CPSProcessSerNum *psn);
+
+#endif /* SDL_USE_CPS */
+
+static int    gArgc;
+static char  **gArgv;
+static BOOL   gFinderLaunch;
+
+static void addArgument(const char *value)
+{
+	if(!gArgc)
+		gArgv = (char **)malloc(sizeof(*gArgv));
+	else
+	{
+		char **newgArgv = (char **)realloc(gArgv, sizeof(*gArgv) * (gArgc + 1));
+		if (!newgArgv)
+		{
+			newgArgv = malloc(sizeof(*gArgv) * (gArgc + 1));
+			memcpy(newgArgv, gArgv, sizeof(*gArgv) * gArgc);
+			free(gArgv);
+		}
+		gArgv = newgArgv;
+	}
+	gArgc++;
+	gArgv[gArgc - 1] = (char *)malloc(sizeof(char) * (strlen(value) + 1));
+	strcpy(gArgv[gArgc - 1], value);
+}
+
+static NSString *getApplicationName(void)
+{
+    NSDictionary *dict;
+    NSString *appName = NULL;
+
+    /* Determine the application name */
+    dict = ( NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle());
+    if (dict)
+        appName = [dict objectForKey: @"CFBundleName"];
+
+    if (![appName length])
+        appName = [[NSProcessInfo processInfo] processName];
+
+    return appName;
+}
+
+#if SDL_USE_NIB_FILE
+/* A helper category for NSString */
+@interface NSString (ReplaceSubString)
+- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
+@end
+#endif
+
+@interface SDLApplication : NSApplication
+@end
+
+@implementation SDLApplication
+/* Invoked from the Quit menu item */
+- (void)terminate:(id)sender
+{
+#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
+    (void)sender;
+#endif
+    /* Post a SDL_QUIT event */
+    SDL_Event event;
+    event.type = SDL_QUIT;
+    SDL_PushEvent(&event);
+}
+@end
+
+/* The main class of the application, the application's delegate */
+@implementation SDLMain
+
+/* Set the working directory to the .app's parent directory */
+- (void) setupWorkingDirectory:(BOOL)shouldChdir
+{
+    if (shouldChdir)
+    {
+        char parentdir[MAXPATHLEN];
+	CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
+	CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url);
+	if (CFURLGetFileSystemRepresentation(url2, true, (UInt8 *)parentdir, MAXPATHLEN))
+        {
+	       assert ( chdir (parentdir) == 0 );   /* chdir to the binary app's parent */
+	}
+	CFRelease(url);
+	CFRelease(url2);
+    }
+
+}
+
+#if SDL_USE_NIB_FILE
+
+/* Fix menu to contain the real app name instead of "SDL App" */
+- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
+{
+    NSRange aRange;
+    NSEnumerator *enumerator;
+    NSMenuItem *menuItem;
+
+    aRange = [[aMenu title] rangeOfString:@"SDL App"];
+    if (aRange.length != 0)
+        [aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
+
+    enumerator = [[aMenu itemArray] objectEnumerator];
+    while ((menuItem = [enumerator nextObject]))
+    {
+        aRange = [[menuItem title] rangeOfString:@"SDL App"];
+        if (aRange.length != 0)
+            [menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
+        if ([menuItem hasSubmenu])
+            [self fixMenu:[menuItem submenu] withAppName:appName];
+    }
+    [ aMenu sizeToFit ];
+}
+
+#else
+
+static void setApplicationMenu(void)
+{
+    /* warning: this code is very odd */
+    NSMenu *appleMenu;
+    NSMenuItem *menuItem;
+    NSString *title;
+    NSString *appName;
+
+    appName = getApplicationName();
+    appleMenu = [[NSMenu alloc] initWithTitle:@""];
+
+    /* Add menu items */
+    title = [@"About " stringByAppendingString:appName];
+    [appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
+
+    [appleMenu addItem:[NSMenuItem separatorItem]];
+
+    title = [@"Hide " stringByAppendingString:appName];
+    [appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"];
+
+    menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
+    [menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
+
+    [appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
+
+    [appleMenu addItem:[NSMenuItem separatorItem]];
+
+    title = [@"Quit " stringByAppendingString:appName];
+    [appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
+
+
+    /* Put menu into the menubar */
+    menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
+    [menuItem setSubmenu:appleMenu];
+    [[NSApp mainMenu] addItem:menuItem];
+
+    /* Tell the application object that this is now the application menu */
+    [NSApp setAppleMenu:appleMenu];
+
+    /* Finally give up our references to the objects */
+    [appleMenu release];
+    [menuItem release];
+}
+
+/* Create a window menu */
+static void setupWindowMenu(void)
+{
+    NSMenu      *windowMenu;
+    NSMenuItem  *windowMenuItem;
+    NSMenuItem  *menuItem;
+
+    windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
+
+    /* "Minimize" item */
+    menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
+    [windowMenu addItem:menuItem];
+    [menuItem release];
+
+    /* Put menu into the menubar */
+    windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
+    [windowMenuItem setSubmenu:windowMenu];
+    [[NSApp mainMenu] addItem:windowMenuItem];
+
+    /* Tell the application object that this is now the window menu */
+    [NSApp setWindowsMenu:windowMenu];
+
+    /* Finally give up our references to the objects */
+    [windowMenu release];
+    [windowMenuItem release];
+}
+
+/* Replacement for NSApplicationMain */
+static void CustomApplicationMain (int argc, char **argv)
+{
+#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
+    (void)argc;
+    (void)argv;
+#endif
+    NSAutoreleasePool	*pool = [[NSAutoreleasePool alloc] init];
+    SDLMain				*sdlMain;
+
+    /* Ensure the application object is initialised */
+    [SDLApplication sharedApplication];
+
+#if SDL_USE_CPS
+    {
+        CPSProcessSerNum PSN;
+        /* Tell the dock about us */
+        if (!CPSGetCurrentProcess(&PSN))
+            if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103))
+                if (!CPSSetFrontProcess(&PSN))
+                    [SDLApplication sharedApplication];
+    }
+#endif /* SDL_USE_CPS */
+
+    /* Set up the menubar */
+    [NSApp setMainMenu:[[NSMenu alloc] init]];
+    setApplicationMenu();
+    setupWindowMenu();
+
+    /* Create SDLMain and make it the app delegate */
+    sdlMain = [[SDLMain alloc] init];
+    [NSApp setDelegate:sdlMain];
+
+    /* Start the main event loop */
+    [NSApp run];
+
+    [sdlMain release];
+    [pool release];
+}
+
+#endif
+
+- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
+{
+#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
+    (void)theApplication;
+#endif
+    addArgument("-iwad");
+    addArgument([filename UTF8String]);
+    return YES;
+}
+
+/* Called when the internal event loop has just started running */
+- (void) applicationDidFinishLaunching: (NSNotification *) note
+{
+#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
+    (void)note;
+#endif
+    int status;
+
+    /* Set the working directory to the .app's parent directory */
+    [self setupWorkingDirectory:gFinderLaunch];
+
+#if SDL_USE_NIB_FILE
+    /* Set the main menu to contain the real app name instead of "SDL App" */
+    [self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()];
+#endif
+
+    if (!getenv("SRB2WADDIR"))
+        setenv("SRB2WADDIR", [[[NSBundle mainBundle] resourcePath] UTF8String], 1);
+
+    /* Hand off to main application code */
+    status = SDL_main (gArgc, gArgv);
+
+    /* We're done, thank you for playing */
+    exit(status);
+}
+@end
+
+
+@implementation NSString (ReplaceSubString)
+
+- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
+{
+    size_t bufferSize;
+    size_t selfLen = [self length];
+    size_t aStringLen = [aString length];
+    unichar *buffer;
+    NSRange localRange;
+    NSString *result;
+
+    bufferSize = selfLen + aStringLen - aRange.length;
+    buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar));
+
+    /* Get first part into buffer */
+    localRange.location = 0;
+    localRange.length = aRange.location;
+    [self getCharacters:buffer range:localRange];
+
+    /* Get middle part into buffer */
+    localRange.location = 0;
+    localRange.length = aStringLen;
+    [aString getCharacters:(buffer+aRange.location) range:localRange];
+
+    /* Get last part into buffer */
+    localRange.location = aRange.location + aRange.length;
+    localRange.length = selfLen - localRange.location;
+    [self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
+
+    /* Build output string */
+    result = [NSString stringWithCharacters:buffer length:bufferSize];
+
+    NSDeallocateMemoryPages(buffer, bufferSize);
+
+    return result;
+}
+
+@end
+
+
+
+#ifdef main
+#  undef main
+#endif
+
+
+/* Main entry point to executable - should *not* be SDL_main! */
+int main (int argc, char **argv)
+{
+
+    /* Copy the arguments into a global variable */
+
+    /* This is passed if we are launched by double-clicking */
+    if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
+        gArgc = 1;
+        gFinderLaunch = YES;
+    } else {
+        gArgc = argc;
+        gFinderLaunch = NO;
+    }
+    gArgv = argv;
+
+    /* Some additional arguments we always want to run with. */
+    //addArgument("-opengl");
+
+#if SDL_USE_NIB_FILE
+    [SDLApplication poseAsClass:[NSApplication class]];
+    NSApplicationMain (argc, argv);
+#else
+    CustomApplicationMain (argc, argv);
+#endif
+    return 0;
+}
diff --git a/src/sdl2/SDL_main/SDL_openxdk_main.c b/src/sdl2/SDL_main/SDL_openxdk_main.c
new file mode 100644
index 000000000..63db8da2d
--- /dev/null
+++ b/src/sdl2/SDL_main/SDL_openxdk_main.c
@@ -0,0 +1,7 @@
+/* Include the SDL main definition header */
+#include "SDL_main.h"
+
+void XBoxStartup()
+{
+	SDL_main(0, NULL); /// \todo ?
+}
diff --git a/src/sdl2/SDL_main/SDL_win32_main.c b/src/sdl2/SDL_main/SDL_win32_main.c
new file mode 100644
index 000000000..46b20d0bd
--- /dev/null
+++ b/src/sdl2/SDL_main/SDL_win32_main.c
@@ -0,0 +1,406 @@
+/*
+    SDL_main.c, placed in the public domain by Sam Lantinga  4/13/98
+
+    The WinMain function -- calls your program's main() function
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+#define RPC_NO_WINDOWS_H
+#include <windows.h>
+#include <malloc.h>			/* For _alloca() */
+
+#include <tchar.h>
+
+#ifdef _WIN32_WCE
+# define DIR_SEPERATOR TEXT("\\")
+# define _tgetcwd(str,len)	wcscpy(str,TEXT(""))
+# define setbuf(f,b)
+# define setvbuf(w,x,y,z)
+# define _tremove(x)	DeleteFile(x)
+#else
+# define DIR_SEPERATOR TEXT("/")
+# include <direct.h>
+#endif
+
+/* Include the SDL main definition header */
+#ifdef _MSC_VER
+#pragma warning(disable : 4214 4244)
+#endif
+#include "SDL.h"
+#include "SDL_main.h"
+#ifdef _MSC_VER
+#pragma warning(default : 4214 4244)
+#endif
+#include "../../win32/win_dbg.h"
+#define USE_MESSAGEBOX
+
+#ifdef main
+# ifndef _WIN32_WCE_EMULATION
+#  undef main
+# endif /* _WIN32_WCE_EMULATION */
+#endif /* main */
+
+/* The standard output files */
+//#ifdef _WIN32_WCE
+//#define STDOUT_FILE	TEXT("/Storage Card/SRB2DEMO/stdout.txt")
+//#define STDERR_FILE	TEXT("/Storage Card/SRB2DEMO/stderr.txt")
+//#else
+#define STDOUT_FILE	TEXT("stdout.txt")
+#define STDERR_FILE	TEXT("stderr.txt")
+//#endif
+
+#ifndef NO_STDIO_REDIRECT
+  static TCHAR stdoutPath[MAX_PATH];
+  static TCHAR stderrPath[MAX_PATH];
+#endif
+
+#if defined(_WIN32_WCE) && _WIN32_WCE < 300
+/* seems to be undefined in Win CE although in online help */
+#define isspace(a) (((CHAR)a == ' ') || ((CHAR)a == '\t'))
+
+/* seems to be undefined in Win CE although in online help */
+char *strrchr(char *str, int c)
+{
+	char *p;
+
+	/* Skip to the end of the string */
+	p=str;
+	while (*p)
+		p++;
+
+	/* Look for the given character */
+	while ( (p >= str) && (*p != (CHAR)c) )
+		p--;
+
+	/* Return NULL if character not found */
+	if ( p < str ) {
+		p = NULL;
+	}
+	return p;
+}
+#endif /* _WIN32_WCE < 300 */
+
+/* Parse a command line buffer into arguments */
+static int ParseCommandLine(char *cmdline, char **argv)
+{
+	char *bufp;
+	int argc;
+
+	argc = 0;
+	for ( bufp = cmdline; *bufp; ) {
+		/* Skip leading whitespace */
+		while ( isspace(*bufp) ) {
+			++bufp;
+		}
+		/* Skip over argument */
+		if ( *bufp == '"' ) {
+			++bufp;
+			if ( *bufp ) {
+				if ( argv ) {
+					argv[argc] = bufp;
+				}
+				++argc;
+			}
+			/* Skip over word */
+			while ( *bufp && (*bufp != '"') ) {
+				++bufp;
+			}
+		} else {
+			if ( *bufp ) {
+				if ( argv ) {
+					argv[argc] = bufp;
+				}
+				++argc;
+			}
+			/* Skip over word */
+			while ( *bufp && ! isspace(*bufp) ) {
+				++bufp;
+			}
+		}
+		if ( *bufp ) {
+			if ( argv ) {
+				*bufp = '\0';
+			}
+			++bufp;
+		}
+	}
+	if ( argv ) {
+		argv[argc] = NULL;
+	}
+	return(argc);
+}
+
+/* Show an error message */
+static void ShowError(const char *title, const char *message)
+{
+/* If USE_MESSAGEBOX is defined, you need to link with user32.lib */
+#ifdef USE_MESSAGEBOX
+	MessageBoxA(NULL,
+		message,
+		title,
+		MB_ICONEXCLAMATION|MB_OK);
+#else
+	fprintf(stderr, "%s: %s\n", title, message);
+#endif
+}
+
+/* Pop up an out of memory message, returns to Windows */
+static BOOL OutOfMemory(void)
+{
+	ShowError("Fatal Error", "Out of memory - aborting");
+	return FALSE;
+}
+
+/* Remove the output files if there was no output written */
+static void __cdecl cleanup_output(void)
+{
+#ifndef NO_STDIO_REDIRECT
+	FILE *file;
+	int empty;
+#endif
+
+	/* Flush the output in case anything is queued */
+	fclose(stdout);
+	fclose(stderr);
+
+#ifndef NO_STDIO_REDIRECT
+	/* See if the files have any output in them */
+	if ( stdoutPath[0] ) {
+		file = _tfopen(stdoutPath, TEXT("rb"));
+		if ( file ) {
+			empty = (fgetc(file) == EOF) ? 1 : 0;
+			fclose(file);
+			if ( empty ) {
+				_tremove(stdoutPath);
+			}
+		}
+	}
+	if ( stderrPath[0] ) {
+		file = _tfopen(stderrPath, TEXT("rb"));
+		if ( file ) {
+			empty = (fgetc(file) == EOF) ? 1 : 0;
+			fclose(file);
+			if ( empty ) {
+				_tremove(stderrPath);
+			}
+		}
+	}
+#endif
+}
+
+#if defined(_MSC_VER) && !defined(_WIN32_WCE)
+/* The VC++ compiler needs main defined */
+#define console_main main
+#endif
+
+/* This is where execution begins [console apps] */
+int console_main(int argc, char *argv[])
+{
+	size_t n;
+	int st;
+	char *bufp, *appname;
+
+	/* Get the class name from argv[0] */
+	appname = argv[0];
+	if ( (bufp=strrchr(argv[0], '\\')) != NULL ) {
+		appname = bufp+1;
+	} else
+	if ( (bufp=strrchr(argv[0], '/')) != NULL ) {
+		appname = bufp+1;
+	}
+
+	if ( (bufp=strrchr(appname, '.')) == NULL )
+		n = strlen(appname);
+	else
+		n = (bufp-appname);
+
+	bufp = (char *)alloca(n+1);
+	if ( bufp == NULL ) {
+		return OutOfMemory();
+	}
+	strncpy(bufp, appname, n);
+	bufp[n] = '\0';
+	appname = bufp;
+
+	/* Load SDL dynamic link library */
+	if ( SDL_Init(SDL_INIT_NOPARACHUTE) < 0 ) {
+		ShowError("WinMain() error", SDL_GetError());
+		return(FALSE);
+	}
+	atexit(cleanup_output);
+	atexit(SDL_Quit);
+
+#ifndef DISABLE_VIDEO
+#if 0
+	/* Create and register our class *
+	   DJM: If we do this here, the user nevers gets a chance to
+	   putenv(SDL_WINDOWID).  This is already called later by
+	   the (DIB|DX5)_CreateWindow function, so it should be
+	   safe to comment it out here.
+	if ( SDL_RegisterApp(appname, CS_BYTEALIGNCLIENT,
+	                     GetModuleHandle(NULL)) < 0 ) {
+		ShowError("WinMain() error", SDL_GetError());
+		exit(1);
+	}*/
+#else
+	/* Sam:
+	   We still need to pass in the application handle so that
+	   DirectInput will initialize properly when SDL_RegisterApp()
+	   is called later in the video initialization.
+	 */
+	SDL_SetModuleHandle(GetModuleHandle(NULL));
+#endif /* 0 */
+#endif /* !DISABLE_VIDEO */
+
+	/* Run the application main() code */
+	st = SDL_main(argc, argv);
+
+	/* Exit cleanly, calling atexit() functions */
+	//exit(0);
+	cleanup_output();
+	SDL_Quit();
+
+	/* Hush little compiler, don't you cry... */
+	return st;
+}
+
+/* This is where execution begins [windowed apps] */
+#ifdef _WIN32_WCE
+int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPWSTR szCmdLine, int sw)
+#else
+int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw)
+#endif
+{
+	HINSTANCE handle;
+	int Result = -1;
+	char **argv;
+	int argc;
+	LPSTR cmdline;
+#ifdef _WIN32_WCE
+	size_t nLen;
+	LPTSTR bufp;
+#else
+	LPSTR bufp;
+#endif
+#ifndef NO_STDIO_REDIRECT
+	FILE *newfp;
+#endif
+
+	/* Start up DDHELP.EXE before opening any files, so DDHELP doesn't
+	   keep them open.  This is a hack.. hopefully it will be fixed
+	   someday.  DDHELP.EXE starts up the first time DDRAW.DLL is loaded.
+	 */
+	hPrev = hInst = NULL;
+	sw = 0;
+	handle = LoadLibrary(TEXT("DDRAW.DLL"));
+	if ( handle != NULL ) {
+		FreeLibrary(handle);
+	}
+
+#ifndef NO_STDIO_REDIRECT
+	_tgetcwd( stdoutPath, sizeof( stdoutPath ) );
+	_tcscat( stdoutPath, DIR_SEPERATOR STDOUT_FILE );
+
+	/* Redirect standard input and standard output */
+	newfp = _tfreopen(stdoutPath, TEXT("w"), stdout);
+
+#ifndef _WIN32_WCE
+	if ( newfp == NULL ) {	/* This happens on NT */
+#if !defined(stdout)
+		stdout = _tfopen(stdoutPath, TEXT("w"));
+#else
+		newfp = _tfopen(stdoutPath, TEXT("w"));
+		if ( newfp ) {
+			*stdout = *newfp;
+		}
+#endif
+	}
+#endif /* _WIN32_WCE */
+
+	_tgetcwd( stderrPath, sizeof( stderrPath ) );
+	_tcscat( stderrPath, DIR_SEPERATOR STDERR_FILE );
+
+	newfp = _tfreopen(stderrPath, TEXT("w"), stderr);
+#ifndef _WIN32_WCE
+	if ( newfp == NULL ) {	/* This happens on NT */
+#if !defined(stderr)
+		stderr = _tfopen(stderrPath, TEXT("w"));
+#else
+		newfp = _tfopen(stderrPath, TEXT("w"));
+		if ( newfp ) {
+			*stderr = *newfp;
+		}
+#endif
+	}
+#endif /* _WIN32_WCE */
+
+	setvbuf(stdout, NULL, _IOLBF, BUFSIZ);	/* Line buffered */
+	setbuf(stderr, NULL);			/* No buffering */
+#endif /* !NO_STDIO_REDIRECT */
+
+#ifdef _WIN32_WCE
+	nLen = wcslen(szCmdLine)+128+1;
+	bufp = (wchar_t *)alloca(nLen*2);
+	wcscpy (bufp, TEXT("\""));
+	GetModuleFileName(NULL, bufp+1, 128-3);
+	wcscpy (bufp+wcslen(bufp), TEXT("\" "));
+	wcsncpy(bufp+wcslen(bufp), szCmdLine,nLen-wcslen(bufp));
+	nLen = wcslen(bufp)+1;
+	cmdline = (char *)alloca(nLen);
+	if ( cmdline == NULL ) {
+		return OutOfMemory();
+	}
+	WideCharToMultiByte(CP_ACP, 0, bufp, -1, cmdline, nLen, NULL, NULL);
+#else
+	szCmdLine = NULL;
+	/* Grab the command line (use alloca() on Windows) */
+	bufp = GetCommandLineA();
+	cmdline = (LPSTR)alloca(strlen(bufp)+1);
+	if ( cmdline == NULL ) {
+		return OutOfMemory();
+	}
+	strcpy(cmdline, bufp);
+#endif
+
+	/* Parse it into argv and argc */
+	argc = ParseCommandLine(cmdline, NULL);
+	argv = (char **)alloca((argc+1)*(sizeof *argv));
+	if ( argv == NULL ) {
+		return OutOfMemory();
+	}
+	ParseCommandLine(cmdline, argv);
+
+#ifdef BUGTRAP
+	/* Try BugTrap. */
+	if(InitBugTrap())
+		Result = console_main(argc, argv);
+	else
+	{
+#endif
+
+		/* Run the main program (after a little SDL initialization) */
+#ifndef _WIN32_WCE
+		 __try
+#endif
+		{
+			Result = console_main(argc, argv);
+		}
+#ifndef _WIN32_WCE
+		__except ( RecordExceptionInfo(GetExceptionInformation()))
+		{
+			SetUnhandledExceptionFilter(EXCEPTION_CONTINUE_SEARCH); //Do nothing here.
+		}
+#endif
+
+#ifdef BUGTRAP
+	}	/* BT failure clause. */
+
+	/* This is safe even if BT didn't start. */
+	ShutdownBugTrap();
+#endif
+
+	return Result;
+}
diff --git a/src/sdl2/SRB2CE/Makefile.cfg b/src/sdl2/SRB2CE/Makefile.cfg
new file mode 100644
index 000000000..8d4ae3e48
--- /dev/null
+++ b/src/sdl2/SRB2CE/Makefile.cfg
@@ -0,0 +1,12 @@
+#
+# Makefile.cfg for WinCE with GCC
+#
+
+OPTS+=-D_WIN32_WCE -D_UNICODE
+SDL_CFLAGS?=
+SDL_LDFLAGS?=
+NOHS=1
+NOHW=1
+NONET=1
+NOMIXER=1
+NOPNG=1
diff --git a/src/sdl2/SRB2CE/SRB2CE.zip b/src/sdl2/SRB2CE/SRB2CE.zip
new file mode 100644
index 0000000000000000000000000000000000000000..3ac8530dcb124cbda512a7d469da933c3fc974bf
GIT binary patch
literal 34234
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
CQd6)1

literal 0
HcmV?d00001

diff --git a/src/sdl2/SRB2CE/cehelp.c b/src/sdl2/SRB2CE/cehelp.c
new file mode 100644
index 000000000..b9fafd040
--- /dev/null
+++ b/src/sdl2/SRB2CE/cehelp.c
@@ -0,0 +1,447 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 2004 by Sonic Team Jr.
+//
+// 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.
+//
+// DESCRIPTION:
+//      stub and replacement "ANSI" C functions for use under Windows CE
+//
+//-----------------------------------------------------------------------------
+
+#include "../../doomdef.h"
+#include "cehelp.h"
+
+#define _SEC_IN_MINUTE 60
+#define _SEC_IN_HOUR 3600
+#define _SEC_IN_DAY 86400
+
+static const int DAYS_IN_MONTH[12] =
+{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
+
+#define _DAYS_IN_MONTH(x) ((x == 1) ? days_in_feb : DAYS_IN_MONTH[x])
+
+static const int _DAYS_BEFORE_MONTH[12] =
+{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
+
+#define _ISLEAP(y) (((y) % 4) == 0 && (((y) % 100) != 0 || (((y)+1900) % 400) == 0))
+#define _DAYS_IN_YEAR(year) (_ISLEAP(year) ? 366 : 365)
+
+char *strerror(int ecode)
+{
+	static char buff[1024 + 1];
+	DWORD dwMsgLen = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, NULL,
+		ecode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), &buff[0], 1024, NULL);
+	return buff;
+}
+
+int unlink( const char *filename )
+{
+	return remove(filename);
+}
+
+int remove( const char *path )
+{
+	return DeleteFileA(path)-1;
+}
+
+int rename( const char *oldname, const char *newname )
+{
+	return MoveFileA(oldname, newname)!=0;
+}
+
+static inline void STToTM(const SYSTEMTIME *st, struct tm *tm)
+{
+	if (!st || !tm) return;
+	tm->tm_sec   = st->wSecond;
+	tm->tm_min   = st->wMinute;
+	tm->tm_hour  = st->wHour;
+	tm->tm_mday  = st->wDay;
+	tm->tm_mon   = st->wMonth - 1;
+	tm->tm_year  = st->wYear - 1900;
+	tm->tm_wday  = st->wDayOfWeek;
+	tm->tm_yday  = 0;
+	tm->tm_isdst = 0;
+}
+
+time_t time(time_t *T)
+{
+	time_t returntime;
+	SYSTEMTIME st;
+	struct tm stft;
+	GetSystemTime(&st);
+	STToTM(&st,&stft);
+	returntime = mktime(&stft);
+	if (T) *T = returntime;
+	return returntime;
+}
+
+static inline UINT64 TTtoFT(const time_t wt, FILETIME *ft)
+{
+	UINT64 temptime = wt; // FILETIME: 1/(10^7) secs since January 1, 1601
+	temptime *= 10000000; // time_t  : 1 secs since January 1, 1970
+	// 369 years * 365 days * 24 hours * 60 mins * 60 secs * 10
+	//       123 leaps days * 24 hours * 60 mins * 60 secs * 10
+	temptime += 116444736000000000;
+	if (ft) CopyMemory(ft,&temptime,sizeof (ULARGE_INTEGER));
+	return temptime;
+}
+
+static struct tm cehelptm;
+
+struct tm * localtime(const time_t *CLOCK)
+{
+	SYSTEMTIME st;
+	FILETIME stft;
+	UINT64 ftli = 0;
+	if (CLOCK) ftli = TTtoFT(*CLOCK, &stft);
+	if (ftli)
+		FileTimeToSystemTime(&stft,&st);
+	else
+		GetSystemTime(&st);
+	STToTM(&st,&cehelptm);
+	if (st.wYear >= 1970)
+		return &cehelptm;
+	else
+		return NULL;
+}
+
+static void validate_structure (struct tm *tim_p) // from newlib
+{
+  div_t res;
+  int days_in_feb = 28;
+
+  /* calculate time & date to account for out of range values */
+  if (tim_p->tm_sec < 0 || tim_p->tm_sec > 59)
+    {
+      res = div (tim_p->tm_sec, 60);
+      tim_p->tm_min += res.quot;
+      if ((tim_p->tm_sec = res.rem) < 0)
+	{
+	  tim_p->tm_sec += 60;
+	  --tim_p->tm_min;
+	}
+    }
+
+  if (tim_p->tm_min < 0 || tim_p->tm_min > 59)
+    {
+      res = div (tim_p->tm_min, 60);
+      tim_p->tm_hour += res.quot;
+      if ((tim_p->tm_min = res.rem) < 0)
+	{
+	  tim_p->tm_min += 60;
+	  --tim_p->tm_hour;
+        }
+    }
+
+  if (tim_p->tm_hour < 0 || tim_p->tm_hour > 23)
+    {
+      res = div (tim_p->tm_hour, 24);
+      tim_p->tm_mday += res.quot;
+      if ((tim_p->tm_hour = res.rem) < 0)
+	{
+	  tim_p->tm_hour += 24;
+	  --tim_p->tm_mday;
+        }
+    }
+
+  if (tim_p->tm_mon > 11)
+    {
+      res = div (tim_p->tm_mon, 12);
+      tim_p->tm_year += res.quot;
+      if ((tim_p->tm_mon = res.rem) < 0)
+        {
+	  tim_p->tm_mon += 12;
+	  --tim_p->tm_year;
+        }
+    }
+
+  if (_DAYS_IN_YEAR (tim_p->tm_year) == 366)
+    days_in_feb = 29;
+
+  if (tim_p->tm_mday <= 0)
+    {
+      while (tim_p->tm_mday <= 0)
+	{
+	  if (--tim_p->tm_mon == -1)
+	    {
+	      tim_p->tm_year--;
+	      tim_p->tm_mon = 11;
+	      days_in_feb =
+		((_DAYS_IN_YEAR (tim_p->tm_year) == 366) ?
+		 29 : 28);
+	    }
+	  tim_p->tm_mday += _DAYS_IN_MONTH (tim_p->tm_mon);
+	}
+    }
+  else
+    {
+      while (tim_p->tm_mday > _DAYS_IN_MONTH (tim_p->tm_mon))
+	{
+	  tim_p->tm_mday -= _DAYS_IN_MONTH (tim_p->tm_mon);
+	  if (++tim_p->tm_mon == 12)
+	    {
+	      tim_p->tm_year++;
+	      tim_p->tm_mon = 0;
+	      days_in_feb =
+		((_DAYS_IN_YEAR (tim_p->tm_year) == 366) ?
+		 29 : 28);
+	    }
+	}
+    }
+}
+
+time_t mktime (struct tm *tim_p) // from newlib
+{
+  time_t tim = 0;
+  long days = 0;
+  int year;
+
+  /* validate structure */
+  validate_structure (tim_p);
+
+  /* compute hours, minutes, seconds */
+  tim += tim_p->tm_sec + (tim_p->tm_min * _SEC_IN_MINUTE) +
+    (tim_p->tm_hour * _SEC_IN_HOUR);
+
+  /* compute days in year */
+  days += tim_p->tm_mday - 1;
+  days += _DAYS_BEFORE_MONTH[tim_p->tm_mon];
+  if (tim_p->tm_mon > 1 && _DAYS_IN_YEAR (tim_p->tm_year) == 366)
+    days++;
+
+  /* compute day of the year */
+  tim_p->tm_yday = days;
+
+  if (tim_p->tm_year > 10000
+      || tim_p->tm_year < -10000)
+    {
+      return (time_t) -1;
+    }
+
+  /* compute days in other years */
+  if (tim_p->tm_year > 70)
+    {
+      for (year = 70; year < tim_p->tm_year; year++)
+	days += _DAYS_IN_YEAR (year);
+    }
+  else if (tim_p->tm_year < 70)
+    {
+      for (year = 69; year > tim_p->tm_year; year--)
+	days -= _DAYS_IN_YEAR (year);
+      days -= _DAYS_IN_YEAR (year);
+    }
+
+  /* compute day of the week */
+  if ((tim_p->tm_wday = (days + 4) % 7) < 0)
+    tim_p->tm_wday += 7;
+
+  /* compute total seconds */
+  tim += (days * _SEC_IN_DAY);
+
+  return tim;
+}
+
+#undef WINAPI
+#define WINAPI __stdcall //__delcspec(dllexport)
+
+#ifdef _MSC_VER
+//#pragma warning(disable : 4273)
+#endif
+
+
+static __forceinline int STRtoWSTR(LPCSTR lpMultiByteStr, int cchMultiByte,
+	LPWSTR lpWideCharStr, int cchWideChar)
+{
+	return MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,lpMultiByteStr,
+		cchMultiByte,lpWideCharStr,cchWideChar);
+}
+
+static __forceinline int WSTRtoSTR(LPCWSTR lpWideCharStr, int cchWideChar,
+	LPSTR lpMultiByteStr, int cbMultiByte)
+{
+	return WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK|WC_SEPCHARS,
+		lpWideCharStr,cchWideChar,lpMultiByteStr,cbMultiByte,NULL,NULL);
+}
+
+DWORD WINAPI FormatMessageA(
+    DWORD dwFlags,
+    LPCVOID lpSource,
+    DWORD dwMessageId,
+    DWORD dwLanguageId,
+    LPSTR lpBuffer,
+    DWORD nSize,
+    va_list *Arguments)
+{
+	const int nSizeW = STRtoWSTR(lpBuffer,nSize,NULL,0);
+	int nSizeF = 0;
+	LPWSTR lpBufferW = alloca(sizeof (wchar_t)*nSizeW);
+	LPWSTR lpSourceW = NULL;
+
+	if (!lpBufferW)
+	{
+		SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+		ZeroMemory(lpBuffer,nSize);
+		return nSizeF;
+	}
+
+	if (dwFlags & FORMAT_MESSAGE_FROM_STRING)
+	{
+		const int sLen = STRtoWSTR(lpSource, -1, NULL, 0);
+		lpSourceW = alloca(sizeof (wchar_t)*sLen);
+
+		if (lpSourceW)
+			STRtoWSTR(lpSource, -1, lpSourceW, sLen);
+		else
+		{
+			SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+			return nSizeF;
+		}
+	}
+
+	if (lpSourceW)
+		nSizeF = FormatMessageW(dwFlags, lpSourceW, dwMessageId, dwLanguageId,
+			lpBufferW, nSizeW, Arguments);
+	else
+		nSizeF = FormatMessageW(dwFlags, lpSource, dwMessageId, dwLanguageId,
+			lpBufferW, nSizeW, Arguments);
+
+	return WSTRtoSTR(lpBufferW, nSizeF, lpBuffer, nSize);
+}
+
+BOOL WINAPI DeleteFileA(
+    LPCSTR lpFileName)
+{
+	const int sLen = STRtoWSTR(lpFileName, -1, NULL, 0);
+	LPWSTR lpFileNameW = alloca(sizeof (wchar_t)*sLen);
+
+	if (lpFileNameW)
+		STRtoWSTR(lpFileName, -1, lpFileNameW, sLen);
+	else
+	{
+		SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+		return 0;
+	}
+
+	return DeleteFileW(lpFileNameW);
+}
+
+BOOL WINAPI MoveFileA(
+  LPCSTR lpExistingFileName,
+  LPCSTR lpNewFileName
+)
+{
+	const int sLen1 = STRtoWSTR(lpExistingFileName, -1, NULL, 0);
+	LPWSTR lpExistingFileNameW = alloca(sizeof (wchar_t)*sLen1);
+
+	const int sLen2 = STRtoWSTR(lpNewFileName, -1, NULL, 0);
+	LPWSTR lpNewFileNameW = alloca(sizeof (wchar_t)*sLen2);
+
+
+	if (!lpExistingFileNameW  || !lpNewFileNameW)
+	{
+		SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+		return 0;
+	}
+
+	STRtoWSTR(lpExistingFileName, -1, lpExistingFileNameW, sLen1);
+	STRtoWSTR(lpNewFileName, -1, lpNewFileNameW, sLen2);
+
+	return MoveFileW(lpExistingFileNameW, lpNewFileNameW);
+}
+
+
+HANDLE WINAPI CreateFileA(
+    LPCSTR lpFileName,
+    DWORD dwDesiredAccess,
+    DWORD dwShareMode,
+    LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+    DWORD dwCreationDisposition,
+    DWORD dwFlagsAndAttributes,
+    HANDLE hTemplateFile)
+{
+	const int sLen = STRtoWSTR(lpFileName, -1, NULL, 0);
+	LPWSTR lpFileNameW = alloca(sizeof (wchar_t)*sLen);
+
+	if (lpFileNameW)
+		STRtoWSTR(lpFileName, -1, lpFileNameW, sLen);
+	else
+	{
+		SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+		return INVALID_HANDLE_VALUE;
+	}
+
+	return CreateFileW(lpFileNameW, dwDesiredAccess, dwShareMode,
+		lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes,
+		hTemplateFile);
+}
+
+BOOL WINAPI CreateDirectoryA(
+    LPCSTR lpPathName,
+    LPSECURITY_ATTRIBUTES lpSecurityAttributes)
+{
+	const int sLen = STRtoWSTR(lpPathName, -1, NULL, 0);
+	LPWSTR lpPathNameW = alloca(sizeof (wchar_t)*sLen);
+
+	if (lpPathNameW)
+		STRtoWSTR(lpPathName, -1, lpPathNameW, sLen);
+	else
+	{
+		SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+		return 0;
+	}
+
+	return CreateDirectoryW(lpPathNameW, lpSecurityAttributes);
+}
+
+int WINAPI MessageBoxA(
+    HWND hWnd ,
+    LPCSTR lpText,
+    LPCSTR lpCaption,
+    UINT uType)
+{
+	const int sLen1 = STRtoWSTR(lpText, -1, NULL, 0);
+	LPWSTR lpTextW = alloca(sizeof (wchar_t)*sLen1);
+
+	const int sLen2 = STRtoWSTR(lpCaption, -1, NULL, 0);
+	LPWSTR lpCaptionW = alloca(sizeof (wchar_t)*sLen2);
+
+
+	if (!lpTextW || !lpCaptionW)
+	{
+		SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+		return 0;
+	}
+
+	STRtoWSTR(lpText, -1, lpTextW, sLen1);
+	STRtoWSTR(lpCaption, -1, lpCaptionW, sLen2);
+
+	return MessageBoxW(hWnd, lpTextW, lpCaptionW, uType);
+}
+
+VOID WINAPI OutputDebugStringA(
+    LPCSTR lpOutputString)
+{
+	const int sLen = STRtoWSTR(lpOutputString, -1, NULL, 0);
+	LPWSTR lpOutputStringW = alloca(sizeof (wchar_t)*sLen);
+
+	if (lpOutputStringW)
+		STRtoWSTR(lpOutputString, -1, lpOutputStringW, sLen);
+	else
+	{
+		SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+		return;
+	}
+
+	OutputDebugStringW(lpOutputStringW);
+}
+
diff --git a/src/sdl2/SRB2CE/cehelp.h b/src/sdl2/SRB2CE/cehelp.h
new file mode 100644
index 000000000..bc265b058
--- /dev/null
+++ b/src/sdl2/SRB2CE/cehelp.h
@@ -0,0 +1,63 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 2004 by Sonic Team Jr.
+//
+// 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.
+//
+// DESCRIPTION:
+//      stub and replacement "ANSI" C functions for use under Windows CE
+//
+//-----------------------------------------------------------------------------
+
+#ifndef __I_WINCE__
+#define __I_WINCE__
+
+#ifdef USEASMCE
+#define USEASM // Remline if NASM doesn't work on x86 targets
+#endif
+
+char *strerror(int ecode);
+int access(const char *path, int amode);
+int unlink( const char *filename );
+int remove( const char *path );
+int rename( const char *oldname, const char *newname );
+//CreateDirectoryEx( const char *currectpath, const char *path,SECURITY_ATTRIBUTES)
+
+#ifndef _TIME_T_DEFINED
+typedef long time_t;        /* time value */
+#define _TIME_T_DEFINED     /* avoid multiple def's of time_t */
+#endif
+
+time_t time(time_t *T);
+
+#ifndef __GNUC__
+#ifndef _TM_DEFINED
+struct tm {
+        int tm_sec;     /* seconds after the minute - [0,59] */
+        int tm_min;     /* minutes after the hour - [0,59] */
+        int tm_hour;    /* hours since midnight - [0,23] */
+        int tm_mday;    /* day of the month - [1,31] */
+        int tm_mon;     /* months since January - [0,11] */
+        int tm_year;    /* years since 1900 */
+        int tm_wday;    /* days since Sunday - [0,6] */
+        int tm_yday;    /* days since January 1 - [0,365] */
+        int tm_isdst;   /* daylight savings time flag */
+        };
+#define _TM_DEFINED
+#endif
+
+struct tm * localtime(const time_t *CLOCK);
+
+time_t mktime (struct tm *tim_p);
+#endif
+
+#endif
diff --git a/src/sdl2/SRB2DC/.gitignore b/src/sdl2/SRB2DC/.gitignore
new file mode 100644
index 000000000..a966585d4
--- /dev/null
+++ b/src/sdl2/SRB2DC/.gitignore
@@ -0,0 +1 @@
+/scramble
diff --git a/src/sdl2/SRB2DC/IP.BIN b/src/sdl2/SRB2DC/IP.BIN
new file mode 100644
index 0000000000000000000000000000000000000000..c3366213bde1c6b5dc03db4cfdab85c1c74ef5fc
GIT binary patch
literal 32768
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
W8UmvsFd71*Aut*OqaiS4LI42zdCRi^

literal 0
HcmV?d00001

diff --git a/src/sdl2/SRB2DC/Makefile.cfg b/src/sdl2/SRB2DC/Makefile.cfg
new file mode 100644
index 000000000..3edaf8a16
--- /dev/null
+++ b/src/sdl2/SRB2DC/Makefile.cfg
@@ -0,0 +1,53 @@
+#
+# Makefile.cfg for SRB2/Dreamcast
+#
+
+#include $(KOS_BASE)/Makefile.rules
+
+#
+#hmmm, the Dreamcast
+#
+
+	HOSTCC:=$(CC)
+	CC=$(KOS_CC)
+	PREFIX=$(KOS_CC_BASE)/bin/$(KOS_CC_PREFIX)
+	OBJDUMP=$(PREFIX)-objdump
+	OBJCOPY=$(PREFIX)-objcopy
+
+	#NOHW=1      #No working MiniGL right now
+	NOHS=1      #No HWSound right now
+ifndef LWIP
+	NONET=1     #No LWIP
+endif
+	#i_net_o=$(OBJDIR)/i_udp.o #use KOS's UDP
+	#NOMIXER=1  #Basic sound only
+	NOIPX=1    #No IPX network code
+	NOPNG=1    #No Screenshot
+
+	OPTS=$(KOS_CFLAGS) -DUNIXCOMMON -DDC
+ifndef NOHW
+	OPTS+=-DSTATIC_OPENGL -DMINI_GL_COMPATIBILITY -DKOS_GL_COMPATIBILITY
+endif
+	SDL_CFLAGS?=-I$(KOS_BASE)/addons/include/SDL
+	SDL_LDFLAGS?=-lSDL
+	LDFLAGS=$(KOS_LDFLAGS)
+	LIBS:=$(KOS_LIBS) -lconio -lm
+ifndef NOMIXER
+	LIBS:=-loggvorbisplay -lSDL $(LIBS)
+endif
+
+ifdef LWIP
+	OPTS+=-I$(KOS_BASE)/../kos-ports/lwip/kos/include -I$(KOS_BASE)/../kos-ports/lwip/lwip/src/include/ipv4 -I$(KOS_BASE)/../kos-ports/lwip/lwip/src/include -DIPv4
+	LIBS:=-llwip4 -lkosutils $(LIBS)
+	OPTS+=-DHAVE_LWIP
+endif
+ifndef NOHW
+	LIBS+=-lgl
+endif
+
+	i_system_o+=$(OBJDIR)/dchelp.o
+	i_main_o=$(KOS_START) $(OBJDIR)/i_main.o $(OBJEXTRA)
+
+	# name of the exefile
+	EXENAME?=SRB2.elf
+	BINNAME?=SRB2.BIN
diff --git a/src/sdl2/SRB2DC/SELFBOOT.BIN b/src/sdl2/SRB2DC/SELFBOOT.BIN
new file mode 100644
index 0000000000000000000000000000000000000000..a87ee386927e4dd72d947aa08faecd1b94677c93
GIT binary patch
literal 1408808
zcmZP=1*0J_8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*U^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
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
N)jr~2U|`^20063ZYBB%-

literal 0
HcmV?d00001

diff --git a/src/sdl2/SRB2DC/VMU.xbm b/src/sdl2/SRB2DC/VMU.xbm
new file mode 100644
index 000000000..0d56985f3
--- /dev/null
+++ b/src/sdl2/SRB2DC/VMU.xbm
@@ -0,0 +1,19 @@
+#define VMU_width 48
+#define VMU_height 32
+static unsigned char VMU_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00,
+   0x00, 0x00, 0x58, 0x75, 0x00, 0x00, 0x00, 0x00, 0xee, 0xaa, 0x00, 0x00,
+   0x00, 0x86, 0x55, 0x55, 0x01, 0x00, 0x00, 0xda, 0xc8, 0xaf, 0x00, 0x00,
+   0x00, 0x62, 0x55, 0x54, 0x00, 0x00, 0x00, 0x32, 0xa2, 0x6c, 0x00, 0x00,
+   0x00, 0x5c, 0x55, 0xfd, 0x01, 0x00, 0x00, 0xac, 0x88, 0xaa, 0x02, 0x00,
+   0x00, 0x54, 0x75, 0x55, 0x05, 0x00, 0x00, 0xac, 0xbf, 0xaa, 0x0a, 0x00,
+   0x00, 0xd6, 0x61, 0x55, 0x15, 0x00, 0x00, 0xe9, 0xc0, 0xaa, 0x2a, 0x00,
+   0x00, 0x39, 0x40, 0x55, 0x55, 0x00, 0x00, 0x6d, 0xc0, 0xaa, 0xbe, 0x00,
+   0x00, 0x6d, 0x40, 0xd5, 0xc3, 0x00, 0x00, 0x6d, 0xc0, 0xea, 0x00, 0x00,
+   0x00, 0x29, 0x60, 0xf5, 0x00, 0x00, 0x00, 0x26, 0xe0, 0xfa, 0x00, 0x00,
+   0x00, 0x58, 0xb8, 0xbd, 0x00, 0x00, 0x00, 0x84, 0x07, 0xdf, 0x00, 0x00,
+   0x00, 0x08, 0x20, 0xae, 0x00, 0x00, 0x00, 0x30, 0xc0, 0x5f, 0x01, 0x00,
+   0x00, 0xc0, 0x3f, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/src/sdl2/SRB2DC/dchelp.c b/src/sdl2/SRB2DC/dchelp.c
new file mode 100644
index 000000000..5fdf04bc2
--- /dev/null
+++ b/src/sdl2/SRB2DC/dchelp.c
@@ -0,0 +1,134 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 2006 by Sonic Team Jr.
+//
+// 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.
+//
+// DESCRIPTION:
+//      stub and replacement "ANSI" C functions for use on Dreamcast/KOS
+//
+//-----------------------------------------------------------------------------
+#include <kos/fs.h>
+#include <errno.h>
+#ifndef HAVE_LWIP
+#include <sys/socket.h>
+#endif
+#include "../../doomdef.h"
+#include "dchelp.h"
+
+int access(const char *path, int amode)
+{
+	file_t handle = FILEHND_INVALID;
+
+	if (amode == F_OK || amode == R_OK)
+		handle=fs_open(path,O_RDONLY);
+	else if (amode == (R_OK|W_OK))
+		handle=fs_open(path,O_RDWR);
+	else if (amode == W_OK)
+		handle=fs_open(path,O_WRONLY);
+
+	if (handle != FILEHND_INVALID)
+	{
+		fs_close(handle);
+		return 0;
+	}
+
+	return -1;
+}
+
+double hypot(double x, double y)
+{
+	double ax, yx, yx2, yx1;
+	if (abs(y) > abs(x)) // |y|>|x|
+	{
+		ax = abs(y); // |y| => ax
+		yx = (x/y);
+	}
+	else // |x|>|y|
+	{
+		ax = abs(x); // |x| => ax
+		yx = (x/y);
+	}
+	yx2 = yx*yx; // (x/y)^2
+	yx1 = sqrt(1+yx2); // (1 + (x/y)^2)^1/2
+	return ax*yx1; // |x|*((1 + (x/y)^2)^1/2)
+}
+
+#if !(defined (NONET) || defined (NOMD5))
+#ifdef HAVE_LWIP
+
+#include <lwip/lwip.h>
+
+static uint8 ip[4];
+static char *h_addr_listtmp[2] = {ip, NULL};
+static struct hostent hostenttmp = {NULL, NULL, 0, 1, h_addr_listtmp};
+
+struct hostent *gethostbyname(const char *name)
+{
+	struct sockaddr_in dnssrv;
+	dnssrv.sin_family = AF_INET;
+	dnssrv.sin_port = htons(53);
+	dnssrv.sin_addr.s_addr = htonl(0x0a030202); ///< what?
+	if (lwip_gethostbyname(&dnssrv, name, ip) < 0)
+		return NULL;
+	else
+		return &hostenttmp;
+}
+#else
+
+struct hostent *gethostbyname(const char *name)
+{
+	(void)name;
+	return NULL;
+}
+
+int ioctl(int s, long cmd, void *argp)
+{
+	return fs_ioctl(s, argp, cmd); //FIONBIO?
+}
+
+int select(int maxfdp1, void *readset, void *writeset, void *exceptset,
+                void *timeout)
+{
+	(void)maxfdp1;
+	(void)readset;
+	(void)writeset;
+	(void)exceptset;
+	(void)timeout;
+	errno = EAFNOSUPPORT;
+	return -1;
+}
+
+int getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen)
+{
+	(void)s;
+	(void)level; //SOL_SOCKET
+	(void)optname; //SO_RCVBUF, SO_ERROR
+	(void)optval;
+	(void)optlen;
+	errno = EAFNOSUPPORT;
+	return -1;
+}
+
+int setsockopt (int s, int level, int optname, void *optval, socklen_t optlen)
+{
+	(void)s;
+	(void)level; //SOL_SOCKET
+	(void)optname; //SO_REUSEADDR, SO_BROADCAST, SO_RCVBUF
+	(void)optval;
+	(void)optlen;
+	errno = EAFNOSUPPORT;
+	return -1;
+}
+
+#endif
+#endif
diff --git a/src/sdl2/SRB2DC/dchelp.h b/src/sdl2/SRB2DC/dchelp.h
new file mode 100644
index 000000000..236f31110
--- /dev/null
+++ b/src/sdl2/SRB2DC/dchelp.h
@@ -0,0 +1,51 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 2006 by Sonic Team Jr.
+//
+// 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.
+//
+// DESCRIPTION:
+//       stub and replacement "ANSI" C functions for use on Dreamcast/KOS
+//
+//-----------------------------------------------------------------------------
+
+#ifndef __I_DREAMCAST__
+#define __I_DREAMCAST__
+
+struct hostent
+{
+	char *h_name;			/* Official name of host.  */
+	char **h_aliases;		/* Alias list.  */
+	int h_addrtype;		/* Host address type.  */
+	int h_length;			/* Length of address.  */
+	char **h_addr_list;		/* List of addresses from name server.  */
+#define	h_addr	h_addr_list[0]	/* Address, for backward compatibility.  */
+};
+
+struct hostent *gethostbyname(const char *name);
+
+#ifndef HAVE_LWIP
+#define INADDR_NONE     ((uint32) 0xffffffff)
+#define INADDR_LOOPBACK ((uint32) 0x7f000001)
+#define SOCK_STREAM     1
+#define FIONBIO         0
+#define SOL_SOCKET      0
+#define SO_ERROR        0
+#define SO_REUSEADDR    0
+#define SO_BROADCAST    0
+#define SO_RCVBUF       0
+int ioctl(int s, long cmd, void *argp);
+int select(int maxfdp1, void *readset, void *writeset, void *exceptset, void *timeout);
+int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
+int setsockopt(int s, int level, int optname, void *optval, socklen_t optlen);
+#endif
+#endif
diff --git a/src/sdl2/SRB2DC/i_udp.c b/src/sdl2/SRB2DC/i_udp.c
new file mode 100644
index 000000000..ec5e305fc
--- /dev/null
+++ b/src/sdl2/SRB2DC/i_udp.c
@@ -0,0 +1,455 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+// Copyright (C) 1993-1996 by id Software, Inc.
+// Portions Copyright (C) 2005 by Sonic Team Jr.
+//
+// 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.
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief KOS UDP network interface
+
+#include "../../doomdef.h"
+
+#include "../../i_system.h"
+#include "../../d_event.h"
+#include "../../d_net.h"
+#include "../../m_argv.h"
+
+#include "../../doomstat.h"
+
+#include "../../i_net.h"
+
+#include "../../z_zone.h"
+
+#include "../../i_tcp.h"
+
+#include <kos/net.h>
+//#include <net/net_ipv4.h>
+#define NET_NONE  0x00000000
+#define NET_LOCAL 0x0100007F
+#define NET_ANY   0xFFFFFFFF
+
+#define MAXBANS 20
+
+typedef struct
+{
+	uint32 host;
+	uint16 port;
+} IPaddress;
+
+static IPaddress clientaddress[MAXNETNODES+1];
+static boolean nodeconnected[MAXNETNODES+1];
+
+static int mysocket = 0;
+static boolean init_KOSUDP_driver = false;
+
+static size_t numbans = 0;
+static IPaddress banned[MAXBANS];
+static boolean KOSUDP_bannednode[MAXNETNODES+1]; /// \note do we really need the +1?
+
+static inline int net_udp_sendto(int sock, const uint8 *data, int size, uint16 rem_port, uint32 rem_addr)
+{
+	uint8 dst_ip[4] = {((uint8*)(&(rem_addr)))[0],
+			((uint8*)(&(rem_addr)))[1],
+			((uint8*)(&(rem_addr)))[2],
+			((uint8*)(&(rem_addr)))[3]};
+	return net_udp_send_raw(net_default_dev, clientaddress[0].port, rem_port, dst_ip, data, size);
+	(void)sock;
+}
+
+static inline int net_udp_recvfrom(int sock, uint8 *buf, int size, uint16 *rem_port, uint32 *rem_addr)
+{
+	return net_udp_recv(sock, buf, size);
+	(void)rem_port;
+	(void)rem_addr;
+}
+
+static const char *KOSUDP_AddrToStr(IPaddress* sk)
+{
+	static char s[22]; // 255.255.255.255:65535
+	sprintf(s,"%d.%d.%d.%d:%d",
+			((uint8*)(&(sk->host)))[3],
+			((uint8*)(&(sk->host)))[2],
+			((uint8*)(&(sk->host)))[1],
+			((uint8*)(&(sk->host)))[0],
+			net_ntohs(sk->port));
+	return s;
+}
+
+static const char *KOSUDP_GetNodeAddress(int node)
+{
+	if (!nodeconnected[node])
+		return NULL;
+	return KOSUDP_AddrToStr(&clientaddress[node]);
+}
+
+static const char *KOSUDP_GetBanAddress(size_t ban)
+{
+	if (ban > numbans)
+		return NULL;
+	return KOSUDP_AddrToStr(&banned[ban]);
+}
+
+static boolean KOSUDP_cmpaddr(IPaddress* a, IPaddress* b)
+{
+	return (a->host == b->host && (b->port == 0 || a->port == b->port));
+}
+
+static SINT8 getfreenode(void)
+{
+	SINT8 j;
+
+	for (j = 0; j < MAXNETNODES; j++)
+		if (!nodeconnected[j])
+		{
+			nodeconnected[j] = true;
+			return j;
+		}
+	return -1;
+}
+
+static void KOSUDP_Get(void)
+{
+	int size;
+	size_t i;
+	SINT8 j;
+	IPaddress temp = {clientaddress[BROADCASTADDR].host,clientaddress[BROADCASTADDR].port};
+
+	size = net_udp_recvfrom(mysocket,(char *)&doomcom->data, MAXPACKETLENGTH, &temp.port, &temp.host);
+	if (size == 0)
+	{
+		doomcom->remotenode = -1; // no packet
+		return;
+	}
+
+	// find remote node number
+	for (i = 0; i < MAXNETNODES; i++)
+		if (KOSUDP_cmpaddr(&temp, &(clientaddress[i])))
+		{
+			doomcom->remotenode = (INT16)i; // good packet from a game player
+			doomcom->datalength = (INT16)size;
+			return;
+		}
+
+	// not found
+
+	// find a free slot
+	j = getfreenode();
+	if (j > 0)
+	{
+		M_Memcpy(&clientaddress[j], &temp, sizeof (temp));
+		DEBFILE(va("New node detected: node:%d address:%s\n", j,
+				KOSUDP_GetNodeAddress(j)));
+		doomcom->remotenode = (INT16)j; // good packet from a game player
+		doomcom->datalength = (INT16)size;
+		// check if it's a banned dude so we can send a refusal later
+		for (i = 0; i < numbans; i++)
+			if (KOSUDP_cmpaddr(&temp, &banned[i]))
+			{
+				KOSUDP_bannednode[j] = true;
+				DEBFILE("This dude has been banned\n");
+				break;
+			}
+		if (i == numbans)
+			KOSUDP_bannednode[j] = false;
+		return;
+	}
+
+	DEBFILE("New node detected: No more free slots\n");
+	doomcom->remotenode = -1; // no packet
+}
+
+#if 0
+static boolean KOSUDP_CanSend(void)
+{
+	return true;
+}
+#endif
+
+static void KOSUDP_Send(void)
+{
+	const IPaddress *nodeinfo;
+
+	if (!doomcom->remotenode || !nodeconnected[doomcom->remotenode])
+		return;
+
+	nodeinfo = clientaddress + doomcom->remotenode;
+
+	if (net_udp_sendto(mysocket, (char *)&doomcom->data, doomcom->datalength, nodeinfo->port, nodeinfo->host) == -1)
+	{
+		CONS_Printf("KOSUDP: error sending data\n");
+	}
+}
+
+static void KOSUDP_FreeNodenum(int numnode)
+{
+	// can't disconnect from self :)
+	if (!numnode)
+		return;
+
+	DEBFILE(va("Free node %d (%s)\n", numnode, KOSUDP_GetNodeAddress(numnode)));
+
+	nodeconnected[numnode] = false;
+
+	memset(&clientaddress[numnode], 0, sizeof (IPaddress));
+}
+
+static int KOSUDP_Socket(void)
+{
+	int temp = 0;
+	uint16 portnum = 0;
+	const uint32 hostip = net_default_dev?net_ntohl(net_ipv4_address(net_default_dev->ip_addr)):NET_LOCAL;
+	//Hurdler: I'd like to put a server and a client on the same computer
+	//Logan: Me too
+	//BP: in fact for client we can use any free port we want i have read
+	//    in some doc that connect in udp can do it for us...
+	//Alam: where?
+	if (M_CheckParm("-clientport"))
+	{
+		if (!M_IsNextParm())
+			I_Error("syntax: -clientport <portnum>");
+		portnum = net_ntohs(atoi(M_GetNextParm()));
+	}
+	else
+		portnum = net_ntohs(sock_port);
+
+	temp = net_udp_sock_open(portnum, hostip, portnum, NET_NONE);
+	if (temp)
+	{
+		int btemp = net_udp_sock_open(portnum, hostip, portnum, NET_ANY);
+		clientaddress[0].port = portnum;
+		clientaddress[0].host = NET_NONE;
+		if (btemp)
+		{
+			clientaddress[BROADCASTADDR].port = net_ntohs(sock_port);
+			clientaddress[BROADCASTADDR].host = NET_ANY;
+		}
+		else
+		{
+			CONS_Printf("KOSUDP: can't setup broadcast sock\n");
+			net_udp_sock_close(temp);
+			return 0;
+		}
+	}
+	else
+	{
+		CONS_Printf("KOSUDP: can't setup main sock\n");
+		return 0;
+	}
+
+	doomcom->extratics = 1; // internet is very high ping
+
+	return temp;
+}
+
+static void I_ShutdownKOSUDPDriver(void)
+{
+	//net_shutdown();
+	init_KOSUDP_driver = false;
+}
+
+static void I_InitKOSUDPDriver(void)
+{
+	if (init_KOSUDP_driver)
+		I_ShutdownKOSUDPDriver();
+	else
+		net_init();
+	D_SetDoomcom();
+	memset(&clientaddress,0,sizeof (clientaddress));
+	init_KOSUDP_driver = true;
+}
+
+static void KOSUDP_CloseSocket(void)
+{
+	if (mysocket)
+		net_udp_sock_close(mysocket);
+	mysocket = 0;
+}
+
+static SINT8 KOSUDP_NetMakeNodewPort(const char *hostname, const char* port)
+{
+	SINT8 newnode;
+	uint16 portnum = net_ntohs(sock_port);
+
+	if (port && !port[0])
+		portnum = net_ntohs((UINT16)atoi(port));
+
+	newnode = getfreenode();
+	if (newnode == -1)
+		return -1;
+	// find ip of the server
+	clientaddress[newnode].port = portnum;
+	clientaddress[newnode].host = inet_addr(hostname);
+
+	if (clientaddress[newnode].host == NET_NONE)
+	{
+		free(hostname);
+		return -1;
+	}
+	return newnode;
+}
+
+static boolean KOSUDP_OpenSocket(void)
+{
+	size_t i;
+
+	memset(clientaddress, 0, sizeof (clientaddress));
+
+	for (i = 0; i < MAXNETNODES; i++)
+		nodeconnected[i] = false;
+
+	//CONS_Printf("KOSUDP Code starting up\n");
+
+	nodeconnected[0] = true; // always connected to self
+	nodeconnected[BROADCASTADDR] = true;
+	I_NetSend = KOSUDP_Send;
+	I_NetGet = KOSUDP_Get;
+	I_NetCloseSocket = KOSUDP_CloseSocket;
+	I_NetFreeNodenum = KOSUDP_FreeNodenum;
+	I_NetMakeNodewPort = KOSUDP_NetMakeNodewPort;
+
+	//I_NetCanSend = KOSUDP_CanSend;
+
+	// build the socket but close it first
+	KOSUDP_CloseSocket();
+	mysocket = KOSUDP_Socket();
+
+	if (mysocket)
+	{
+#if 0
+		// for select
+		myset = SDLNet_AllocSocketSet(1);
+		if (!myset)
+		{
+			CONS_Printf("SDL_Net: %s",SDLNet_GetError());
+			return false;
+		}
+		if (SDLNet_UDP_AddSocket(myset,mysocket) == -1)
+		{
+			CONS_Printf("SDL_Net: %s",SDLNet_GetError());
+			return false;
+		}
+#endif
+		return true;
+	}
+	return false;
+}
+
+static boolean KOSUDP_Ban(int node)
+{
+	if (numbans == MAXBANS)
+		return false;
+
+	M_Memcpy(&banned[numbans], &clientaddress[node], sizeof (IPaddress));
+	banned[numbans].port = 0'
+	numbans++;
+	return true;
+}
+
+static void KOSUDP_ClearBans(void)
+{
+	numbans = 0;
+}
+
+//
+// I_InitNetwork
+// Only required for DOS, so this is more a dummy
+//
+boolean I_InitNetwork(void)
+{
+	char serverhostname[255];
+	boolean ret = false;
+	//if (!M_CheckParm ("-kosnet"))
+	//	return false;
+	// initilize the driver
+	I_InitKOSUDPDriver();
+	I_AddExitFunc(I_ShutdownKOSUDPDriver);
+	if (!init_KOSUDP_driver)
+		return false;
+
+	if (M_CheckParm("-udpport"))
+	{
+		if (M_IsNextParm())
+			sock_port = (UINT16)atoi(M_GetNextParm());
+		else
+			sock_port = 0;
+	}
+
+	// parse network game options,
+	if (M_CheckParm("-server") || dedicated)
+	{
+		server = true;
+
+		// If a number of clients (i.e. nodes) is specified, the server will wait for the clients
+		// to connect before starting.
+		// If no number is specified here, the server starts with 1 client, and others can join
+		// in-game.
+		// Since Boris has implemented join in-game, there is no actual need for specifying a
+		// particular number here.
+		// FIXME: for dedicated server, numnodes needs to be set to 0 upon start
+/*		if (M_IsNextParm())
+			doomcom->numnodes = (INT16)atoi(M_GetNextParm());
+		else */if (dedicated)
+			doomcom->numnodes = 0;
+		else
+			doomcom->numnodes = 1;
+
+		if (doomcom->numnodes < 0)
+			doomcom->numnodes = 0;
+		if (doomcom->numnodes > MAXNETNODES)
+			doomcom->numnodes = MAXNETNODES;
+
+		// server
+		servernode = 0;
+		// FIXME:
+		// ??? and now ?
+		// server on a big modem ??? 4*isdn
+		net_bandwidth = 16000;
+		hardware_MAXPACKETLENGTH = INETPACKETLENGTH;
+
+		ret = true;
+	}
+	else if (M_CheckParm("-connect"))
+	{
+		if (M_IsNextParm())
+			strcpy(serverhostname, M_GetNextParm());
+		else
+			serverhostname[0] = 0; // assuming server in the LAN, use broadcast to detect it
+
+		// server address only in ip
+		if (serverhostname[0])
+		{
+			COM_BufAddText("connect \"");
+			COM_BufAddText(serverhostname);
+			COM_BufAddText("\"\n");
+
+			// probably modem
+			hardware_MAXPACKETLENGTH = INETPACKETLENGTH;
+		}
+		else
+		{
+			// so we're on a LAN
+			COM_BufAddText("connect any\n");
+
+			net_bandwidth = 800000;
+			hardware_MAXPACKETLENGTH = MAXPACKETLENGTH;
+		}
+	}
+
+	I_NetOpenSocket = KOSUDP_OpenSocket;
+	I_Ban = KOSUDP_Ban;
+	I_ClearBans = KOSUDP_ClearBans;
+	I_GetNodeAddress = KOSUDP_GetNodeAddress;
+	I_GetBanAddress = KOSUDP_GetBanAddress;
+	bannednode = KOSUDP_bannednode;
+
+	return ret;
+}
diff --git a/src/sdl2/SRB2DC/scramble.c b/src/sdl2/SRB2DC/scramble.c
new file mode 100644
index 000000000..a3483b00d
--- /dev/null
+++ b/src/sdl2/SRB2DC/scramble.c
@@ -0,0 +1,259 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#define MAXCHUNK (2048*1024)
+
+static unsigned int seed;
+
+void my_srand(unsigned int n)
+{
+  seed = n & 0xffff;
+}
+
+unsigned int my_rand()
+{
+  seed = (seed * 2109 + 9273) & 0x7fff;
+  return (seed + 0xc000) & 0xffff;
+}
+
+void load(FILE *fh, unsigned char *ptr, unsigned long sz)
+{
+  if (fread(ptr, 1, sz, fh) != sz)
+    {
+      fprintf(stderr, "Read error!\n");
+      exit(1);
+    }
+}
+
+void load_chunk(FILE *fh, unsigned char *ptr, unsigned long sz)
+{
+  static int idx[MAXCHUNK/32];
+  int i;
+
+  /* Convert chunk size to number of slices */
+  sz /= 32;
+
+  /* Initialize index table with unity,
+     so that each slice gets loaded exactly once */
+  for (i = 0; i < sz; i++)
+    idx[i] = i;
+
+  for (i = sz-1; i >= 0; --i)
+    {
+      /* Select a replacement index */
+      int x = (my_rand() * i) >> 16;
+
+      /* Swap */
+      int tmp = idx[i];
+      idx[i] = idx[x];
+      idx[x] = tmp;
+
+      /* Load resulting slice */
+      load(fh, ptr+32*idx[i], 32);
+    }
+}
+
+void load_file(FILE *fh, unsigned char *ptr, unsigned long filesz)
+{
+  unsigned long chunksz;
+
+  my_srand(filesz);
+
+  /* Descramble 2 meg blocks for as long as possible, then
+     gradually reduce the window down to 32 bytes (1 slice) */
+  for (chunksz = MAXCHUNK; chunksz >= 32; chunksz >>= 1)
+    while (filesz >= chunksz)
+      {
+	load_chunk(fh, ptr, chunksz);
+	filesz -= chunksz;
+	ptr += chunksz;
+      }
+
+  /* Load final incomplete slice */
+  if (filesz)
+    load(fh, ptr, filesz);
+}
+
+void read_file(char *filename, unsigned char **ptr, unsigned long *sz)
+{
+  FILE *fh = fopen(filename, "rb");
+  if (fh == NULL)
+    {
+      fprintf(stderr, "Can't open \"%s\".\n", filename);
+      exit(1);
+    }
+  if (fseek(fh, 0, SEEK_END)<0)
+    {
+      fprintf(stderr, "Seek error.\n");
+      exit(1);
+    }
+  *sz = ftell(fh);
+  *ptr = malloc(*sz);
+  if ( *ptr == NULL )
+    {
+      fprintf(stderr, "Out of memory.\n");
+      exit(1);
+    }
+  if (fseek(fh, 0, SEEK_SET)<0)
+    {
+      fprintf(stderr, "Seek error.\n");
+      exit(1);
+    }
+  load_file(fh, *ptr, *sz);
+  fclose(fh);
+}
+
+void save(FILE *fh, unsigned char *ptr, unsigned long sz)
+{
+  if (fwrite(ptr, 1, sz, fh) != sz)
+    {
+      fprintf(stderr, "Write error!\n");
+      exit(1);
+    }
+}
+
+void save_chunk(FILE *fh, unsigned char *ptr, unsigned long sz)
+{
+  static int idx[MAXCHUNK/32];
+  int i;
+
+  /* Convert chunk size to number of slices */
+  sz /= 32;
+
+  /* Initialize index table with unity,
+     so that each slice gets saved exactly once */
+  for (i = 0; i < sz; i++)
+    idx[i] = i;
+
+  for (i = sz-1; i >= 0; --i)
+    {
+      /* Select a replacement index */
+      int x = (my_rand() * i) >> 16;
+
+      /* Swap */
+      int tmp = idx[i];
+      idx[i] = idx[x];
+      idx[x] = tmp;
+
+      /* Save resulting slice */
+      save(fh, ptr+32*idx[i], 32);
+    }
+}
+
+void save_file(FILE *fh, unsigned char *ptr, unsigned long filesz)
+{
+  unsigned long chunksz;
+
+  my_srand(filesz);
+
+  /* Descramble 2 meg blocks for as long as possible, then
+     gradually reduce the window down to 32 bytes (1 slice) */
+  for (chunksz = MAXCHUNK; chunksz >= 32; chunksz >>= 1)
+    while (filesz >= chunksz)
+      {
+	save_chunk(fh, ptr, chunksz);
+	filesz -= chunksz;
+	ptr += chunksz;
+      }
+
+  /* Save final incomplete slice */
+  if (filesz)
+    save(fh, ptr, filesz);
+}
+
+void write_file(char *filename, unsigned char *ptr, unsigned long sz)
+{
+  FILE *fh = fopen(filename, "wb");
+  if (fh == NULL)
+    {
+      fprintf(stderr, "Can't open \"%s\".\n", filename);
+      exit(1);
+    }
+  save_file(fh, ptr, sz);
+  fclose(fh);
+}
+
+void descramble(char *src, char *dst)
+{
+  unsigned char *ptr = NULL;
+  unsigned long sz = 0;
+  FILE *fh;
+
+  read_file(src, &ptr, &sz);
+
+  fh = fopen(dst, "wb");
+  if (fh == NULL)
+    {
+      fprintf(stderr, "Can't open \"%s\".\n", dst);
+      exit(1);
+    }
+  if ( fwrite(ptr, 1, sz, fh) != sz )
+    {
+      fprintf(stderr, "Write error.\n");
+      exit(1);
+    }
+  fclose(fh);
+  free(ptr);
+}
+
+void scramble(char *src, char *dst)
+{
+  unsigned char *ptr = NULL;
+  unsigned long sz = 0;
+  FILE *fh;
+
+  fh = fopen(src, "rb");
+  if (fh == NULL)
+    {
+      fprintf(stderr, "Can't open \"%s\".\n", src);
+      exit(1);
+    }
+  if (fseek(fh, 0, SEEK_END)<0)
+    {
+      fprintf(stderr, "Seek error.\n");
+      exit(1);
+    }
+  sz = ftell(fh);
+  ptr = malloc(sz);
+  if ( ptr == NULL )
+    {
+      fprintf(stderr, "Out of memory.\n");
+      exit(1);
+    }
+  if (fseek(fh, 0, SEEK_SET)<0)
+    {
+      fprintf(stderr, "Seek error.\n");
+      exit(1);
+    }
+  if ( fread(ptr, 1, sz, fh) != sz )
+    {
+      fprintf(stderr, "Read error.\n");
+      exit(1);
+    }
+  fclose(fh);
+
+  write_file(dst, ptr, sz);
+
+  free(ptr);
+}
+
+int main(int argc, char *argv[])
+{
+  int opt = 0;
+
+  if (argc > 1 && !strcmp(argv[1], "-d"))
+    opt ++;
+
+  if (argc != 3+opt)
+    {
+      fprintf(stderr, "Usage: %s [-d] from to\n", argv[0]);
+      exit(1);
+    }
+
+  if (opt)
+    descramble(argv[2], argv[3]);
+  else
+    scramble(argv[1], argv[2]);
+
+  return 0;
+}
diff --git a/src/sdl2/SRB2PS3/ICON0.png b/src/sdl2/SRB2PS3/ICON0.png
new file mode 100644
index 0000000000000000000000000000000000000000..140230c1e17bcf341498374ede7feea16ac5b54c
GIT binary patch
literal 3678
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
XZL<1$ZvW%AK@De5S3j3^P6<r_Z<|=?

literal 0
HcmV?d00001

diff --git a/src/sdl2/SRB2PS3/Makefile.cfg b/src/sdl2/SRB2PS3/Makefile.cfg
new file mode 100644
index 000000000..a4a01714a
--- /dev/null
+++ b/src/sdl2/SRB2PS3/Makefile.cfg
@@ -0,0 +1,139 @@
+#
+# Makefile.cfg for SRB2 for the PlayStation 3 using PSL1GHT
+#
+
+# Check if PS3DEV and PSL1GHT is set in the environment. If so, continue with compilation.
+.SUFFIXES:
+
+ifeq ($(strip $(PS3DEV)),)
+$(error "Please set PS3DEV in your environment. export PS3DEV=<path to>ps3dev-toolchain")
+endif
+
+ifeq ($(strip $(PSL1GHT)),)
+$(error "Please set PSL1GHT in your environment. export PSL1GHT=<path to>PSL1GHT")
+endif
+
+# Set compiler flags
+
+# Disable same warning flags
+WFLAGS+=-Wno-shadow -Wno-char-subscripts -Wno-format
+
+ifdef JAILBREAK
+EXENAME?=SRB2PS3-jb.elf
+PKGNAME?=SRB2PS3-jb.pkg
+else
+EXENAME?=SRB2PS3.elf
+PKGNAME?=SRB2PS3.pkg
+endif
+DGBNAME?=$(EXENAME).debug
+
+SRB2PS3DIR=sdl/SRB2PS3
+ICON0?=$(SRB2PS3DIR)/ICON0.png
+SFOXML?=sfo.xml
+SRB2TTF?=sdl/srb2.ttf
+
+TITLE=Sonic Robo Blast 2 v2.0.6
+APPID=SRB2-PS3
+CONTENTID=UP0001-$(APPID)_00-0000000000000000
+
+FSELF=$(PS3DEV)/bin/fself.py
+MAKE_SELF_NPDRM=$(PS3DEV)/ps3publictools/make_self_npdrm
+FINALIZE=$(PS3DEV)/ps3publictools/package_finalize
+SFO=$(PS3DEV)/bin/sfo.py
+PKG=$(PS3DEV)/bin/pkg.py
+PS3LOADEXE=$(PS3DEV)/ps3tools/ps3load
+SED=sed
+MV=mv
+XARGS=xargs
+FOR=for
+SHXARGS:=$(XARGS)
+SHSED:=$(SED)
+SPRXLINKER=$(PS3DEV)/bin/sprxlinker
+
+ifdef JAILBREAK
+PKGDIR=$(BIN)/pkg-jb
+else
+PKGDIR=$(BIN)/pkg
+endif
+USRDIR=$(PKGDIR)/USRDIR
+ETCDIR=$(USRDIR)/etc
+WGET=wget -P $(ETCDIR) -c -nc
+
+ifndef ECHO
+	FSELF:=@$(FSELF)
+	MAKE_SELF_NPDRM:=@$(MAKE_SELF_NPDRM)
+	FINALIZE:=@$(FINALIZE)
+	SFO:=@$(SFO)
+	PKG:=@$(PKG)
+	PS3LOADEXE:=@$(PS3LOADEXE)
+	SED:=@$(SED)
+	MV:=@$(MV)
+	SPRXLINKER:=@$(SPRXLINKER)
+	XARGS:=@$(XARGS)
+	FOR:=@(FOR)
+endif
+
+# SRB2PS3 needs SDL_ttf to display any console text
+SDL_TTF=1
+
+# newlib has no support for networking
+#NONET=1
+
+# use absolute paths because changing PATH variable breaks distcc
+PREFIX := $(PS3DEV)/ppu/bin/$(PREFIX)
+
+# PS3DEV toolchain libdir and includedir
+PS3DEV_INC := $(PS3DEV)/ppu/include
+PS3DEV_LIB := $(PS3DEV)/ppu/lib
+
+# PSL1GHT libdir and includedir
+PSL1GHT_INC := $(PSL1GHT)/ppu/include
+PSL1GHT_LIB := $(PSL1GHT)/ppu/lib
+
+PS3PORTS := $(PS3DEV)/portlibs
+PS3PORTS_BIN := $(PS3PORTS)/ppu/bin
+PS3PORTS_INC := $(PS3PORTS)/ppu/include
+
+PNG_CONFIG := $(PS3PORTS_BIN)/libpng-config
+# static compilation
+PNG_STATIC=1
+
+SDL_CONFIG := $(PS3PORTS_BIN)/sdl-config
+
+INCLUDE := -I$(PSL1GHT_INC) -I$(PS3DEV_INC) -I$(PS3PORTS_INC)
+
+OPTS+=-D_PS3 -DUNIXCOMMON
+CFLAGS+= -g $(INCLUDE) -L$(PSL1GHT_LIB) -L$(PS3DEV_LIB) -L$(PS3DEV)/lib
+CXXFLAGS+=$(CFLAGS)
+LDFLAGS+= -B$(PSL1GHT_LIB) -B$(PS3DEV_LIB) -B$(PS3DEV)/lib
+LIBS+=-lrsx
+ifndef NONET
+LIBS+=-lnet -lsysmodule
+endif
+
+$(BIN)/$(PKGNAME): $(OBJS) $(BIN)/$(EXENAME)
+	@echo Linking $(PKGNAME)...
+	-$(MKDIR) $(ETCDIR)
+	$(CP) $(ICON0) $(PKGDIR)
+	$(CP) $(SRB2TTF) $(ETCDIR)
+ifdef WITHDATA
+	$(FOR) datafile in $(shell echo $(D_FILES) | $(SHSED) 's/\.srb/\.wad/' | $(SHXARGS) -n 1 basename); do \
+		$(WGET) http://alam.srb2.org/SRB2/2.0.6-Final/Resources/$$datafile; \
+	done
+endif
+	$(SPRXLINKER) $(BIN)/$(EXENAME)
+ifdef JAILBREAK
+	$(SED) 's/@@PS3_SYSTEM_VER@@/3.41/' $(SRB2PS3DIR)/$(SFOXML) > $(BIN)/$(SFOXML)
+	$(FSELF) -n $(BIN)/$(EXENAME) $(USRDIR)/EBOOT.BIN
+else
+	$(SED) 's/@@PS3_SYSTEM_VER@@/3.55/' $(SRB2PS3DIR)/$(SFOXML) > $(BIN)/$(SFOXML)
+	$(MAKE_SELF_NPDRM) $(BIN)/$(EXENAME) $(USRDIR)/EBOOT.BIN $(CONTENTID)
+endif
+	$(SFO) --title "$(TITLE)" --appid "$(APPID)" -f $(BIN)/$(SFOXML) $(PKGDIR)/PARAM.SFO
+	$(PKG) --contentid $(CONTENTID) $(PKGDIR)/ $(BIN)/$(PKGNAME)
+ifndef JAILBREAK
+	$(FINALIZE) $(BIN)/$(PKGNAME)
+endif
+
+run: $(BIN)/$(EXENAME)
+	$(PS3LOADEXE) $(USRDIR)/EBOOT.BIN
diff --git a/src/sdl2/SRB2PS3/sfo.xml b/src/sdl2/SRB2PS3/sfo.xml
new file mode 100644
index 000000000..d7719b540
--- /dev/null
+++ b/src/sdl2/SRB2PS3/sfo.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" ?>
+<sfo>
+	<value name="APP_VER" type="string">
+		02.06
+	</value>
+	<value name="ATTRIBUTE" type="integer">
+		0
+	</value>
+	<value name="BOOTABLE" type="integer">
+		1
+	</value>
+	<value name="CATEGORY" type="string">
+		HG
+	</value>
+	<value name="LICENSE" type="string">
+		This application was created with the official non-official SDK called PSL1GHT, for more information visit http://www.psl1ght.com/ . This is in no way associated with Sony Computer Entertainment Inc., please do not contact them for help, they will not be able to provide it.
+	</value>
+	<value name="PARENTAL_LEVEL" type="integer">
+		0
+	</value>
+	<value name="PS3_SYSTEM_VER" type="string">
+		0@@PS3_SYSTEM_VER@@00
+	</value>
+	<value name="RESOLUTION" type="integer">
+		63
+	</value>
+	<value name="SOUND_FORMAT" type="integer">
+		279
+	</value>
+	<value name="TITLE" type="string">
+		Sonic Robo Blast 2
+	</value>
+	<value name="TITLE_ID" type="string">
+		SRB200000
+	</value>
+	<value name="VERSION" type="string">
+		02.06
+	</value>
+</sfo>
diff --git a/src/sdl2/SRB2PSP/ICON0.png b/src/sdl2/SRB2PSP/ICON0.png
new file mode 100644
index 0000000000000000000000000000000000000000..140230c1e17bcf341498374ede7feea16ac5b54c
GIT binary patch
literal 3678
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
XZL<1$ZvW%AK@De5S3j3^P6<r_Z<|=?

literal 0
HcmV?d00001

diff --git a/src/sdl2/SRB2PSP/Makefile.cfg b/src/sdl2/SRB2PSP/Makefile.cfg
new file mode 100644
index 000000000..f9ec6416b
--- /dev/null
+++ b/src/sdl2/SRB2PSP/Makefile.cfg
@@ -0,0 +1,126 @@
+#
+# Makefile.cfg for SRB2/PSP
+#
+
+#
+#hmmm, the PSP
+#
+
+	PSPSDK=$(shell psp-config -p)
+	PSPDEV=$(shell psp-config -d)
+	PSPPREFIX=$(shell psp-config -P)
+	STRIP=psp-strip
+	MKSFO?=mksfoex -d MEMSIZE=1
+	#MKSFO=mksfo
+	PACK_PBP=pack-pbp
+	FIXUP=psp-fixup-imports
+	HOSTCC:=$(CC)
+	CC=$(PSPDEV)/bin/psp-gcc
+	OBJCOPY=psp-objcopy
+	OBJDUMP=psp-objdump
+ifdef FIXEDPRX
+	PRXGEN=psp-prxgen
+else
+	PRXGEN=$(OBJCOPY)
+endif
+ifndef PRXSIGN
+	SIGNER:=$(PSPDEV)/bin/$(OBJCOPY)
+endif
+
+ifndef ECHO
+	MKSFO:=@$(MKSFO)
+	PACK_PBP:=@$(PACK_PBP)
+	FIXUP:=@$(FIXUP)
+	PRXGEN:=@$(PRXGEN)
+endif
+
+	PSP_EBOOT_TITLE=SRB2-PSP vME
+	PSP_EBOOT_SFO=$(BIN)/PARAM.SFO
+	PSP_EBOOT_ICON=sdl/SRB2PSP/ICON0.png
+	PSP_EBOOT_ICON1=NULL
+	PSP_EBOOT_UNKPNG=NULL
+	PSP_EBOOT_PIC1=sdl/SRB2PSP/PIC1.png
+	PSP_EBOOT_SND0=NULL
+	PSP_EBOOT_PSAR=NULL
+
+	SIGNER?=sdl/SRB2PSP/psp-prxsign/psp-prxsign
+
+	SDL=1
+	PREFIX=psp
+	NONX86=1
+	#NOHW=1
+	NOHS=1
+	NOMD5=1
+	NONET=1       #No TCPIP code
+	NOPNG=1       #No Screenshot
+
+	OPTS=-I$(PSPPREFIX)/include -I$(PSPSDK)/include
+	OPTS+=-DUNIXCOMMON -DFORCESDLMAIN -G0
+	WFLAGS+=-Wno-undef
+	WFLAGS+=-O1
+	LIBS=-lm
+	SDL_CONFIG?=$(PSPPREFIX)/bin/sdl-config
+	#SDL_CFLAGS?=-I$(PSPDEV)/psp/include/SDL
+	#SDL_LDFLAGS?=-lSDLmain -lSDL -lglut -lGLU -lGL -lpspgu -lpspaudiolib -lpspaudio -lpsphprm -lpspvfpu -lpsprtc
+ifndef NOMIXER
+	LIBS:=-liberty -lvorbisfile -lvorbis -logg -lSDL $(LIBS)
+endif
+ifndef NOHW
+	OPTS+=-DSTATIC_OPENGL -DMINI_GL_COMPATIBILITY
+	LIBS+=-lGLU -lGL -lm
+endif
+	#PSPSDK_LIBS=-L$(PSPSDK)/lib -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk
+	#LIBS+=$(PSPSDK_LIBS) -lc -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser -lpspkernel
+ifdef FIXEDPRX
+	LDFLAGS := -specs=$(PSPSDK)/lib/prxspecs -Wl,-q,-T$(PSPSDK)/lib/linkfile.prx $(LDFLAGS)
+	LIBS+=$(PSPSDK)/lib/prxexports.o
+endif
+
+ifeq ($(PSP_FW_VERSION),)
+PSP_FW_VERSION=150
+endif
+
+	CPPFLAGS:=-D_PSP_FW_VERSION=$(PSP_FW_VERSION) $(CPPFLAGS)
+
+
+	# name of the exefile
+	EXENAME?=SRB2PSP.elf
+	PRXNAME?=SRB2PSP.prx
+	DBGNAME?=SRB2PSP.debug
+
+post-build: $(BIN)/EBOOT.PBP
+
+kxploit: $(BIN)/$(EXENAME) $(PSP_EBOOT_SFO)
+	-$(MKDIR) "$(BIN)/kxploit/srb2"
+	@echo emitting kxploit/srb2/
+	$(STRIP) $(BIN)/$(EXENAME) -o $(BIN)/kxploit/srb2/EBOOT.PBP
+	@echo emitting kxploit/srb2%
+	-$(MKDIR) "$(BIN)/kxploit/srb2%/"
+	$(PACK_PBP) "$(BIN)/kxploit/srb2%/EBOOT.PBP" $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON)  \
+		$(PSP_EBOOT_ICON1) $(PSP_EBOOT_UNKPNG) $(PSP_EBOOT_PIC1)  \
+		$(PSP_EBOOT_SND0) NULL $(PSP_EBOOT_PSAR)
+
+sdl/SRB2PSP/psp-prxsign/psp-prxsign:
+	-$(MAKE) -C sdl/SRB2PSP/psp-prxsign CFLAGS=-pipe CC="$(HOSTCC)"
+
+fix-up: $(BIN)/$(EXENAME)
+	@echo Running psp-fixup-imports on $(EXENAME)
+	$(FIXUP) $(BIN)/$(EXENAME)
+
+$(BIN)/$(PRXNAME): $(BIN)/$(EXENAME) fix-up
+	@echo Building $(PRXNAME) out of $(EXENAME)
+	$(PRXGEN) $(BIN)/$(EXENAME) $@
+
+$(BIN)/EBOOT.PBP: $(BIN)/$(PRXNAME) $(SIGNER) $(PSP_EBOOT_SFO)
+	@echo Signing and running pack-pbp to make PBP
+	$(SIGNER) $(BIN)/$(PRXNAME) $(BIN)/$(PRXNAME).sign
+	$(PACK_PBP) $@ $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON)  \
+		$(PSP_EBOOT_ICON1) $(PSP_EBOOT_UNKPNG) $(PSP_EBOOT_PIC1)  \
+		$(PSP_EBOOT_SND0)  $(BIN)/$(PRXNAME).sign $(PSP_EBOOT_PSAR)
+	$(REMOVE) $(BIN)/$(PRXNAME).sign
+
+$(PSP_EBOOT_SFO):
+	-$(MKDIR) $(BIN)
+	$(MKSFO) '$(PSP_EBOOT_TITLE)' $@
+
+#include $(PSPSDK)/lib/build.mak
diff --git a/src/sdl2/SRB2PSP/PIC1.png b/src/sdl2/SRB2PSP/PIC1.png
new file mode 100644
index 0000000000000000000000000000000000000000..0722a96bc78ce4c82edaed348bc6f86826e5690a
GIT binary patch
literal 20300
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
Qz`(%Z>FVdQ&MBb@046C+&j0`b

literal 0
HcmV?d00001

diff --git a/src/sdl2/SRB2PSP/psp-prxsign/.gitignore b/src/sdl2/SRB2PSP/psp-prxsign/.gitignore
new file mode 100644
index 000000000..6a07f1a5a
--- /dev/null
+++ b/src/sdl2/SRB2PSP/psp-prxsign/.gitignore
@@ -0,0 +1,2 @@
+/psp-prxsign
+/psp-prxsign.exe
diff --git a/src/sdl2/SRB2PSP/psp-prxsign/Makefile b/src/sdl2/SRB2PSP/psp-prxsign/Makefile
new file mode 100644
index 000000000..4a9b7da0f
--- /dev/null
+++ b/src/sdl2/SRB2PSP/psp-prxsign/Makefile
@@ -0,0 +1,22 @@
+EXE=psp-prxsign
+SRC=main.c cmac.c
+OBJ=$(SRC:.c=.o)# replaces the .c from SRC with .o
+
+OPENSSL_PKGCONFIG?=openssl
+OPENSSL_CFLAGS?=$(shell pkg-config $(OPENSSL_PKGCONFIG) --cflags)
+OPENSSL_LDFLAGS?=$(shell pkg-config $(OPENSSL_PKGCONFIG) --libs)
+
+CFLAGS+=$(OPENSSL_CFLAGS)
+LDFLAGS+=$(OPENSSL_LDFLAGS)
+
+.PHONY : all     # .PHONY ignores files named all
+
+all: $(EXE)      # all is dependent on $(BIN) to be complete
+
+
+$(EXE): $(OBJ) # $(EXE) is dependent on all of the files in $(OBJ) to exist
+	$(CC) $^ $(LDFLAGS) -o $@
+
+.PHONY : clean   # .PHONY ignores files named clean
+clean:
+	-$(RM) $(OBJ) $(EXE)
diff --git a/src/sdl2/SRB2PSP/psp-prxsign/cmac.c b/src/sdl2/SRB2PSP/psp-prxsign/cmac.c
new file mode 100644
index 000000000..f527f7a71
--- /dev/null
+++ b/src/sdl2/SRB2PSP/psp-prxsign/cmac.c
@@ -0,0 +1,130 @@
+#include "cmac.h"
+
+#define AES_128 0
+unsigned char const_Rb[16] = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87
+};
+unsigned char const_Zero[16] = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+void xor_128(unsigned char *a, unsigned char *b, unsigned char *out)
+{
+	int i;
+	for (i=0;i<16; i++)
+	{
+		out[i] = a[i] ^ b[i];
+	}
+}
+
+/* AES-CMAC Generation Function */
+
+static inline void leftshift_onebit(unsigned char *input,unsigned char *output)
+{
+	int i;
+    unsigned char overflow = 0;
+
+	for ( i=15; i>=0; i-- )
+	{
+		output[i] = input[i] << 1;
+		output[i] |= overflow;
+		overflow = (input[i] & 0x80)?1:0;
+	}
+}
+
+void generate_subkey(unsigned char *key, unsigned char *K1, unsigned char *K2)
+{
+	unsigned char L[16];
+	unsigned char Z[16];
+	unsigned char tmp[16];
+	int i;
+
+	for ( i=0; i<16; i++ ) Z[i] = 0;
+
+	AES_KEY aes;
+	AES_set_encrypt_key(key, 128, &aes);
+
+	AES_encrypt(Z, L, &aes);
+
+	if ( (L[0] & 0x80) == 0 ) /* If MSB(L) = 0, then K1 = L << 1 */
+	{
+		leftshift_onebit(L,K1);
+	} else {    /* Else K1 = ( L << 1 ) (+) Rb */
+        leftshift_onebit(L,tmp);
+        xor_128(tmp,const_Rb,K1);
+    }
+
+	if ( (K1[0] & 0x80) == 0 )
+	{
+        leftshift_onebit(K1,K2);
+    } else {
+        leftshift_onebit(K1,tmp);
+        xor_128(tmp,const_Rb,K2);
+    }
+}
+
+static inline void padding ( unsigned char *lastb, unsigned char *pad, int length )
+{
+	int j;
+
+	/* original last block */
+	for ( j=0; j<16; j++ )
+	{
+		if ( j < length )
+		{
+            pad[j] = lastb[j];
+        } else if ( j == length ) {
+            pad[j] = 0x80;
+        } else {
+            pad[j] = 0x00;
+        }
+	}
+}
+
+void AES_CMAC ( unsigned char *key, unsigned char *input, int length, unsigned char *mac )
+{
+    unsigned char X[16],Y[16], M_last[16], padded[16];
+    unsigned char K1[16], K2[16];
+    int n, i, flag;
+    generate_subkey(key,K1,K2);
+
+    n = (length+15) / 16;       /* n is number of rounds */
+
+    if ( n == 0 )
+	{
+        n = 1;
+        flag = 0;
+    } else {
+		if ( (length%16) == 0 ) { /* last block is a complete block */
+            flag = 1;
+        } else { /* last block is not complete block */
+            flag = 0;
+        }
+
+    }
+
+    if ( flag ) { /* last block is complete block */
+        xor_128(&input[16*(n-1)],K1,M_last);
+    } else {
+        padding(&input[16*(n-1)],padded,length%16);
+        xor_128(padded,K2,M_last);
+    }
+    AES_KEY aes;
+    AES_set_encrypt_key(key, 128, &aes);
+
+    for ( i=0; i<16; i++ ) X[i] = 0;
+    for ( i=0; i<n-1; i++ )
+    {
+        xor_128(X,&input[16*i],Y); /* Y := Mi (+) X  */
+        AES_encrypt(Y, X, &aes); /* X := AES-128(KEY, Y); */
+    }
+
+    xor_128(X,M_last,Y);
+    AES_encrypt(Y, X, &aes);
+
+    for ( i=0; i<16; i++ ) {
+        mac[i] = X[i];
+    }
+}
diff --git a/src/sdl2/SRB2PSP/psp-prxsign/cmac.h b/src/sdl2/SRB2PSP/psp-prxsign/cmac.h
new file mode 100644
index 000000000..563045841
--- /dev/null
+++ b/src/sdl2/SRB2PSP/psp-prxsign/cmac.h
@@ -0,0 +1,38 @@
+/*
+ ---------------------------------------------------------------------------
+ Copyright (c) 1998-2008, Brian Gladman, Worcester, UK. All rights reserved.
+
+ LICENSE TERMS
+
+ The redistribution and use of this software (with or without changes)
+ is allowed without the payment of fees or royalties provided that:
+
+  1. source code distributions include the above copyright notice, this
+     list of conditions and the following disclaimer;
+
+  2. binary distributions include the above copyright notice, this list
+     of conditions and the following disclaimer in their documentation;
+
+  3. the name of the copyright holder is not used to endorse products
+     built using this software without specific written permission.
+
+ DISCLAIMER
+
+ This software is provided 'as is' with no explicit or implied warranties
+ in respect of its properties, including, but not limited to, correctness
+ and/or fitness for purpose.
+ ---------------------------------------------------------------------------
+ Issue Date: 6/10/2008
+*/
+
+#ifndef CMAC_AES_H
+#define CMAC_AES_H
+
+#include <string.h>
+#include <openssl/aes.h>
+
+void xor_128(unsigned char *a, unsigned char *b, unsigned char *out);
+void generate_subkey(unsigned char *key, unsigned char *K1, unsigned char *K2);
+void AES_CMAC(unsigned char *key, unsigned char *input, int length, unsigned char *mac);
+
+#endif
diff --git a/src/sdl2/SRB2PSP/psp-prxsign/kirk_header.h b/src/sdl2/SRB2PSP/psp-prxsign/kirk_header.h
new file mode 100644
index 000000000..76c921ef0
--- /dev/null
+++ b/src/sdl2/SRB2PSP/psp-prxsign/kirk_header.h
@@ -0,0 +1,25 @@
+#ifndef __kirk_header__
+#define __kirk_header__
+
+static unsigned int size_kirk_header = 272;
+static unsigned char kirk_header[] __attribute__((aligned(16))) = {
+	0x2a, 0x4f, 0x3c, 0x49, 0x8a, 0x73, 0x4e, 0xd1, 0xf4, 0x55, 0x93, 0x0b, 0x9b, 0x69, 0xdc, 0x65,
+	0x73, 0x22, 0x69, 0xd3, 0x73, 0x96, 0x7a, 0x60, 0x66, 0x8c, 0x88, 0xcf, 0x2f, 0x83, 0x58, 0xbc,
+	0xb2, 0x00, 0x0a, 0x11, 0x72, 0x43, 0xc5, 0xde, 0xef, 0xbb, 0x2c, 0xbf, 0x97, 0x79, 0x6b, 0x9c,
+	0x10, 0x1e, 0x7c, 0x57, 0x0e, 0xdb, 0x1d, 0x61, 0x6e, 0xb5, 0xf9, 0x3d, 0x35, 0xe9, 0x5c, 0xd8,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x33, 0x55, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x7e, 0x50, 0x53, 0x50, 0x00, 0x02, 0x00, 0x00, 0x01, 0x01, 0x22, 0x74, 0x69, 0x66, 0x70, 0x73,
+	0x70, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x33, 0x55, 0x00, 0x50, 0x34, 0x55, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x40, 0x67, 0x3d, 0x00, 0x50, 0x55, 0x0a, 0x01, 0x10, 0x00, 0x40, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x6b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x4c, 0x6b, 0x3d, 0x00, 0xcc, 0xbb, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+};
+
+#endif
diff --git a/src/sdl2/SRB2PSP/psp-prxsign/main.c b/src/sdl2/SRB2PSP/psp-prxsign/main.c
new file mode 100644
index 000000000..a970ae6c1
--- /dev/null
+++ b/src/sdl2/SRB2PSP/psp-prxsign/main.c
@@ -0,0 +1,190 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <openssl/aes.h>
+#include <openssl/sha.h>
+#include <elf.h>
+#include "cmac.h"
+#include "kirk_header.h"
+#include "psp_header.h"
+
+typedef unsigned char byte;
+
+typedef struct {
+	byte key[16];
+	byte ckey[16];
+	byte head_hash[16];
+	byte data_hash[16];
+	byte unused[32];
+	int unk1; // 1
+	int unk2; // 0
+	int unk3[2];
+	int datasize;
+	int dataoffset;
+	int unk4[6];
+} kirk1head_t;
+
+// secret kirk command 1 key
+byte kirk_key[] = {
+	0x98, 0xc9, 0x40, 0x97, 0x5c, 0x1d, 0x10, 0xe8, 0x7f, 0xe6, 0x0e, 0xa3, 0xfd, 0x03, 0xa8, 0xba
+};
+
+int main(int argc, char **argv)
+{
+	int i, relrem, size, fullsize, blocks, datasize;
+	size_t j;
+	kirk1head_t kirk;
+	byte iv[16];
+	byte cmac[32];
+	byte subk[32];
+	byte psph[0x150];
+	byte *datablob;
+	byte *filebuff;
+	FILE *f;
+	AES_KEY aesKey;
+	Elf32_Ehdr *ehdr;
+	Elf32_Shdr *shdr;
+	Elf32_Rel *relo;
+
+	if(argc < 3) {
+		printf("Usage: %s unsigned.prx signed.prx\n", argv[0]);
+		return 1;
+	}
+
+	// clean kirk header, use modified PRXdecrypter to get it
+	/*f = fopen(argv[1], "rb");
+	if(!f) {
+		printf("failed to open %s\n", argv[1]);
+		return 1;
+	}
+	fread(&kirk, 1, sizeof(kirk1head_t), f);
+	fclose(f);*/
+	//memcpy(&kirk, kirk_header, size_kirk_header);
+	memcpy(&kirk, kirk_header, sizeof(kirk1head_t));
+
+	datasize = kirk.datasize;
+	if(datasize % 16) datasize += 16 - (datasize % 16);
+
+	// original ~PSP header
+	/*f = fopen(argv[2], "rb");
+	if(!f) {
+		free(datablob);
+		printf("failed to open %s\n", argv[2]);
+		return 1;
+	}
+	fread(psph, 1, 0x150, f);
+	fclose(f);*/
+	memcpy(&psph, psp_header, size_psp_header);
+
+	// file to encrypt
+	f = fopen(argv[1], "rb");
+	if(!f) {
+		printf("psp-prxsign: Unable to open PRX\n");
+		return 1;
+	}
+	fseek(f, 0, SEEK_END);
+	size = ftell(f);
+	if(size > datasize - 16) {
+		fclose(f);
+		printf("psp-prxsign: PRX is too large\n");
+		return 1;
+	}
+	printf("%s : %i\n", argv[1], size);
+	fseek(f, 0, SEEK_SET);
+
+	fullsize = datasize + 0x30 + kirk.dataoffset;
+
+	// datablob holds everything needed to calculate data HASH
+	datablob = malloc(fullsize);
+	if(!datablob) {
+		fclose(f);
+		printf("psp-prxsign: Failed to allocate memory for blob\n");
+		return 1;
+	}
+	memset(datablob, 0, fullsize);
+	memcpy(datablob, &kirk.unk1, 0x30);
+	memcpy(datablob + 0x30, psph, kirk.dataoffset);
+	filebuff = datablob + 0x30 + kirk.dataoffset;
+
+	int whocares = fread(filebuff, 1, size, f);
+	(void)whocares;
+	fclose(f);
+
+	// remove relocations type 7
+	relrem = 0;
+	ehdr = (void *)filebuff;
+	if(!memcmp(ehdr->e_ident, ELFMAG, 4) && ehdr->e_shnum) {
+		shdr = (void *)(filebuff + ehdr->e_shoff);
+		for(i = 0; i < ehdr->e_shnum; i++) {
+			if(shdr[i].sh_type == 0x700000A0) {
+				relo = (void *)(filebuff + shdr[i].sh_offset);
+				for(j = 0; j < shdr[i].sh_size / sizeof(Elf32_Rel); j++) {
+					if((relo[j].r_info & 0xFF) == 7) {
+						relo[j].r_info = 0;
+						relrem++;
+					}
+				}
+			}
+		}
+	}
+	//printf("%i relocations type 7 removed\ncalculating ...\n", relrem);
+
+	// get AES/CMAC key
+	AES_set_decrypt_key(kirk_key, 128, &aesKey);
+	memset(iv, 0, 16);
+	AES_cbc_encrypt(kirk.key, kirk.key, 32, &aesKey, iv, AES_DECRYPT);
+
+	// check header hash, optional
+	// if you take correct kirk header, hash is always correct
+/*	AES_CMAC(kirk.ckey, datablob, 0x30, cmac);
+	if(memcmp(cmac, kirk.head_hash, 16)) {
+		free(datablob);
+		printf("header hash invalid\n");
+		return 1;
+	}
+*/
+
+	// encrypt input file
+	AES_set_encrypt_key(kirk.key, 128, &aesKey);
+	memset(iv, 0, 16);
+	AES_cbc_encrypt(filebuff, filebuff, datasize, &aesKey, iv, AES_ENCRYPT);
+
+	// make CMAC correct
+	generate_subkey(kirk.ckey, subk, subk + 16);
+	AES_set_encrypt_key(kirk.ckey, 128, &aesKey);
+	blocks = fullsize / 16;
+	memset(cmac, 0, 16);
+	for(i = 0; i < blocks - 1; i++) {
+		xor_128(cmac, &datablob[16 * i], cmac + 16);
+		AES_encrypt(cmac + 16, cmac, &aesKey);
+	}
+
+	AES_set_decrypt_key(kirk.ckey, 128, &aesKey);
+	AES_decrypt(kirk.data_hash, iv, &aesKey);
+	xor_128(cmac, iv, iv);
+	xor_128(iv, subk, &datablob[16 * (blocks-1)]);
+	// check it, optional
+	// it works, this is only if you want to change something
+/*	AES_CMAC(kirk.ckey, datablob, fullsize, cmac);
+	if(memcmp(cmac, kirk.data_hash, 16)) {
+		fclose(f);
+		free(datablob);
+		printf("data hash calculation error\n");
+		return 1;
+	}
+*/
+	f = fopen(argv[2], "wb");
+	if(!f) {
+		free(datablob);
+		printf("psp-prxsign: Failed to write signed PRX\n");
+		return 1;
+	}
+	//printf("saving ...\n");
+	// save ~PSP header
+	fwrite(psph, 1, 0x150, f);
+	// save encrypted file
+	fwrite(filebuff, 1, fullsize - 0x30 - kirk.dataoffset, f);
+	fclose(f);
+	free(datablob);
+	//printf("everything done\n");
+	return 0;
+}
diff --git a/src/sdl2/SRB2PSP/psp-prxsign/psp_header.h b/src/sdl2/SRB2PSP/psp-prxsign/psp_header.h
new file mode 100644
index 000000000..7faef832c
--- /dev/null
+++ b/src/sdl2/SRB2PSP/psp-prxsign/psp_header.h
@@ -0,0 +1,29 @@
+#ifndef __psp_header__
+#define __psp_header__
+
+static unsigned int size_psp_header = 336;
+static unsigned char psp_header[] __attribute__((aligned(16))) = {
+	0x7e, 0x50, 0x53, 0x50, 0x00, 0x02, 0x00, 0x00, 0x01, 0x01, 0x22, 0x74, 0x69, 0x66, 0x70, 0x73,
+	0x70, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x33, 0x55, 0x00, 0x50, 0x34, 0x55, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x40, 0x67, 0x3d, 0x00, 0x50, 0x55, 0x0a, 0x01, 0x10, 0x00, 0x40, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x6b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x4c, 0x6b, 0x3d, 0x00, 0xcc, 0xbb, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+	0x90, 0x82, 0x4c, 0x48, 0xa3, 0x53, 0xb2, 0x1b, 0x13, 0x95, 0x2f, 0xf1, 0x0b, 0x90, 0x9c, 0x11,
+	0x61, 0x40, 0x20, 0x67, 0xf8, 0xdb, 0xfc, 0x95, 0x5c, 0xbe, 0x8c, 0x80, 0xf3, 0x92, 0x03, 0x01,
+	0xb0, 0xbe, 0xf5, 0xf8, 0xa1, 0xaf, 0xaf, 0xa8, 0x38, 0x26, 0x63, 0x09, 0x26, 0x0e, 0xb7, 0xd5,
+	0x00, 0x33, 0x55, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x5c, 0x3e, 0x03, 0x22, 0xe5, 0x7d, 0xb9, 0xd1, 0x13, 0x67, 0x97, 0xa3, 0x5b, 0xd8, 0x77, 0x1f,
+	0xf0, 0x05, 0xf3, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x4a, 0xd7, 0x37,
+	0xc2, 0x8f, 0x15, 0x43, 0x33, 0x93, 0x4d, 0x5b, 0xc0, 0x6e, 0xe4, 0x00, 0xc6, 0x0a, 0x71, 0x11,
+	0x98, 0xb6, 0xc3, 0xb7, 0x59, 0x66, 0x21, 0xa8, 0x65, 0xf6, 0x53, 0xa9, 0x7a, 0x48, 0x17, 0xb6,
+};
+
+#endif
diff --git a/src/sdl2/SRB2Pandora/Makefile.cfg b/src/sdl2/SRB2Pandora/Makefile.cfg
new file mode 100644
index 000000000..c7f0f8449
--- /dev/null
+++ b/src/sdl2/SRB2Pandora/Makefile.cfg
@@ -0,0 +1,39 @@
+# Quick Pandora target to make a compliant SRB2 PND file.
+
+PNDNAME=SRB2.pnd
+PNDDIR=$(BIN)/pnd
+ICON=sdl/SRB2Pandora/icon.png
+PXML=sdl/SRB2Pandora/PXML.xml
+
+SED=sed
+CAT=cat
+CP=cp
+XARGS=xargs
+FOR=for
+WGET=wget -P $(PNDDIR) -c -nc
+
+SHXARGS:=$(XARGS)
+SHSED:=$(SED)
+
+ifndef ECHO
+	CP:=@$(CP)
+	CAT:=@$(CAT)
+	SED:=@$(SED)
+	XARGS:=@$(XARGS)
+	FOR:=@(FOR)
+endif
+
+$(BIN)/$(PNDNAME): $(BIN)/$(EXENAME)
+	@echo Linking $(PNDNAME)...
+	$(MKDIR) $(PNDDIR)
+	$(CP) $(BIN)/$(EXENAME) $(PNDDIR)
+	$(CP) $(ICON) $(PNDDIR)
+	$(CP) $(PXML) $(PNDDIR)
+ifdef WITHDATA
+	$(FOR) datafile in $(shell echo $(D_FILES) | $(SHSED) 's/\.srb/\.wad/' | $(SHXARGS) -n 1 basename); do \
+		$(WGET) http://alam.srb2.org/SRB2/2.0.6-Final/Resources/$$datafile; \
+	done
+endif
+	$(MKISOFS) -l -r -o $@ $(PNDDIR)
+	$(CAT) $(PXML) >> $@
+	$(REMOVE) -r $(PNDDIR)
diff --git a/src/sdl2/SRB2Pandora/PXML.xml b/src/sdl2/SRB2Pandora/PXML.xml
new file mode 100644
index 000000000..33a9587db
--- /dev/null
+++ b/src/sdl2/SRB2Pandora/PXML.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<PXML xmlns="http://openpandora.org/namespaces/PXML">
+  <application id="srb2.pandora.v20" appdata="srb2">
+  <title lang="en_US">Sonic Robo Blast 2</title>
+  <title lang="ja_JA">ソニック・ロボ・ブラスト・2</title>
+  <description lang="en_US">A 3D Sonic fangame with a huge fanbase developing custom content, including characters, levels, and even large-scale modifications</description>
+  <version major="2" minor="0" release="6" build="1" />
+  <exec command="lsdlsrb2" background="true" standalone="true" x11="ignore"/>
+  <author name="Sonic Team Junior" website="http://www.srb2.org/" email="stjr@srb2.org"/>
+  <icon src="icon.png"/>
+  <categories>
+  <category name="Game">
+  <subcategory name="ActionGame" />
+  </category>
+  </categories>
+  </application>
+</PXML>
diff --git a/src/sdl2/SRB2Pandora/icon.png b/src/sdl2/SRB2Pandora/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..63af73ac3a4e3046783312465aec2d985172f726
GIT binary patch
literal 1690
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
Ib4q9e07=*pUjP6A

literal 0
HcmV?d00001

diff --git a/src/sdl2/SRB2WII/Makefile.cfg b/src/sdl2/SRB2WII/Makefile.cfg
new file mode 100644
index 000000000..1b1863042
--- /dev/null
+++ b/src/sdl2/SRB2WII/Makefile.cfg
@@ -0,0 +1,124 @@
+#
+# Makefile.cfg for SRB2Wii native using libogc
+#
+
+# Check if DEVKITPPC is set in the environment. If so, continue with compilation.
+.SUFFIXES:
+
+ifeq ($(strip $(DEVKITPPC)),)
+$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPPC")
+endif
+
+# Set compiler flags
+
+SRB2NAME?=srb2wii
+EXENAME?=$(SRB2NAME).elf
+DBGNAME?=$(SRB2NAME).elf.debug
+DOLNAME?=$(SRB2NAME).dol
+
+ICONPNG?=sdl/SRB2WII/icon.png
+METAXML?=sdl/SRB2WII/meta.xml
+
+APPDIR=apps/$(SRB2NAME)
+ZIPNAME=$(SRB2NAME).zip
+
+ELF2DOL=$(DEVKITPPC)/bin/elf2dol
+WIILOADEXE=$(DEVKITPPC)/bin/wiiload
+ZIP=zip -r -9
+WGET=wget -P srb2wii -c -nc
+SED=sed
+XARGS=xargs
+SHXARGS:=$(XARGS)
+SHSED:=$(SED)
+FOR=for
+
+ifndef ECHO
+	ELF2DOL:=@$(ELF2DOL)
+	WIILOADEXE:=@$(WIILOADEXE)
+	ZIP:=@$(ZIP)
+	SED:=@$(SED)
+	XARGS:=@$(XARGS)
+	FOR:=@$(FOR)
+endif
+
+# Disable same warning flags
+WFLAGS+=-Wno-shadow -Wno-char-subscripts -Wno-old-style-definition -Wno-unsuffixed-float-constants
+
+# newlib has no support for networking
+NONET=1
+
+# use pkgconfig for PKG
+PNG_PKGCONFIG=libpng
+
+# use absolute paths because changing PATH variable breaks distcc
+PREFIX := $(DEVKITPPC)/bin/$(PREFIX)
+
+# FIXME: DevkitPPC and ready-compiled SDL Wii require these things to be in a silly order
+# libogc/DevkitPro required stuff
+LIBOGC := $(DEVKITPRO)/libogc
+LIBOGC_INC := $(LIBOGC)/include
+LIBOGC_LIB := $(LIBOGC)/lib
+
+PORTLIBS := $(DEVKITPRO)/portlibs/ppc
+PORTLIBS_INC := $(PORTLIBS)/include
+PORTLIBS_LIB := $(PORTLIBS)/lib
+
+SDL_CPPFLAGS := -I$(LIBOGC_INC)/SDL
+SDL_LIB := $(DEVKITPRO)/libogc/lib/wii
+INCLUDE := -I$(LIBOGC_INC) $(SDL_CPPFLAGS) -I$(PORTLIBS_INC)
+
+PKG_CONFIG_PATH := $(PORTLIBS)/lib/pkgconfig
+PKG_BROKEN_SWTICH := --static --define-variable=DEVKITPRO=$(DEVKITPRO)
+PNG_PKGCONFIG := $(PKG_CONFIG_PATH)/libpng.pc $(PKG_BROKEN_SWTICH)
+ZLIB_PKGCONFIG := $(PKG_CONFIG_PATH)/zlib.pc $(PKG_BROKEN_SWTICH)
+
+ZLIB_CFLAGS?=$(shell $(PKG_CONFIG) $(ZLIB_PKGCONFIG) --cflags)
+ZLIB_LDFLAGS?=$(shell $(PKG_CONFIG) $(ZLIB_PKGCONFIG) --libs)
+
+ifdef RDB
+	LIBS+=-ldb
+	OPTS+=-DREMOTE_DEBUGGING=$(RDB)
+endif
+
+LIBS+= -L$(SDL_LIB)
+ifndef NOMIXER
+	LD=$(CXX)
+	LIBS+=-lSDL_mixer -lvorbisidec -lsmpeg
+endif
+LIBS+=-lSDL
+
+LIBS+=$(ZLIB_LDFLAGS) -lfat -lwiiuse -lbte -logc -lm -lwiikeyboard -L$(LIBOGC_LIB)
+
+MACHDEP = -DGEKKO -mrvl -mcpu=750 -meabi -mhard-float
+OPTS+=-DWII -D_WII -DUNIXCOMMON
+CFLAGS+=-D__BIG_ENDIAN__ -g -O3 -fsigned-char $(MACHDEP) $(INCLUDE)
+CXXFLAGS+=$(CFLAGS)
+LDFLAGS+=-g $(MACHDEP) -Wl,-Map,$(notdir $@).map
+
+SDL_CONFIG=/bin/true
+SDL_CFLAGS=
+SDL_LDFLAGS=
+
+$(BIN)/$(DOLNAME): $(BIN)/$(EXENAME)
+	@echo Linking $(DOLNAME)...
+	$(ELF2DOL) $(BIN)/$(EXENAME) $(BIN)/$(DOLNAME)
+	@echo Creating /apps/$(SRB2NAME)...
+	$(MKDIR) $(APPDIR)
+	$(CP) $(BIN)/$(DOLNAME) $(APPDIR)/boot.dol
+	$(CP) $(ICONPNG) $(APPDIR)
+	$(CP) $(METAXML) $(APPDIR)
+ifdef WITHDATA
+	$(MKDIR) srb2wii
+	$(FOR) datafile in $(shell echo $(D_FILES) | $(SHSED) -e 's/\.srb/\.wad/' -e 's/music.dta//' | $(SHXARGS) -n 1 basename); do \
+		$(WGET) http://alam.srb2.org/SRB2/2.0.6-Final/Resources/$$datafile; \
+	done
+	# downsampled music.dta specially for SRB2Wii
+	$(WGET) http://repos.srb2.org/srb2ports/music.dta
+	$(ZIP) $(BIN)/$(ZIPNAME) $(APPDIR) srb2wii
+else
+	$(ZIP) $(BIN)/$(ZIPNAME) $(APPDIR)
+endif
+	$(REMOVE) -r $(APPDIR)
+
+run: $(BIN)/$(EXENAME)
+	$(WIILOADEXE) $(BIN)/$(DBGNAME)
diff --git a/src/sdl2/SRB2WII/icon.png b/src/sdl2/SRB2WII/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..d22324bc6a9e51dac5c2e82cb2d78ca73d277c23
GIT binary patch
literal 11247
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

literal 0
HcmV?d00001

diff --git a/src/sdl2/SRB2WII/meta.xml b/src/sdl2/SRB2WII/meta.xml
new file mode 100644
index 000000000..843176d3a
--- /dev/null
+++ b/src/sdl2/SRB2WII/meta.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<app version="1">
+  <name>SRB2Wii</name>
+  <coder>Callum</coder>
+  <version>2.0.6</version>
+  <release_date>20101207</release_date>
+  <short_description>A 3D Sonic fangame</short_description>
+  <long_description>Sonic Robo Blast 2 is a 3D fangame by a small group called
+Sonic Team Junior, using the Doom engine as a base.
+The game has been worked on for almost 11 years so far, and
+it is still being very much developed today, with a huge
+fanbase developing custom content, including characters,
+levels, and even large-scale modifications that play out
+a brand new adventure.
+Based on the Doom II engine, SRB2's system requirements
+are very low, even the oldest computers can play it at a
+decent speed.</long_description>
+</app>
diff --git a/src/sdl2/SRB2XBOX/Makefile.cfg b/src/sdl2/SRB2XBOX/Makefile.cfg
new file mode 100644
index 000000000..56966d438
--- /dev/null
+++ b/src/sdl2/SRB2XBOX/Makefile.cfg
@@ -0,0 +1,44 @@
+#
+# Makefile.cfg for SRB2/XBOX
+#
+
+#
+#hmmm, the XBOX
+#
+
+	NOHW=1    #No working OpenGL right now
+	NOHS=1    #No HWSound right now
+	NOASM=1   #No Fast code
+	NONET=1   #No network code
+	NOMD5=1   #No Slow MD5
+	NOPNG=1   #No Screenshot
+	#SDLMAIN=1 #SDLMain!
+
+ifndef OPENXDK
+	OPENXDK=/usr/local/openxdk
+endif
+
+	CXBE=$(OPENXDK)/bin/cxbe
+
+ifdef ECHO
+	CXBE:=@$(CXBE)
+endif
+
+ifndef NOHW
+	OPTS+=-DMINI_GL_COMPATIBILITY
+endif
+
+	BUILTLM=-fno-builtin
+	CFLAGS+=-D_XBOX -std=gnu99 -ffreestanding $(BUILTLM) -fno-exceptions
+	CFLAGS+=-I$(OPENXDK)/i386-pc-xbox/include -I$(OPENXDK)/include
+	OPTS+=-nostdlib -mno-cygwin -march=i386
+	LDFLAGS+=-nostdlib -Wl,--file-alignment,0x20 -Wl,--section-alignment,0x20 -shared -Wl,--entry,_WinMainCRTStartup -Wl,--strip-all -L$(OPENXDK)/i386-pc-xbox/lib -L$(OPENXDK)/lib
+	LIBS=-lg -lc -lm
+	SDL_CFLAGS?=-I$(OPENXDK)/include/SDL
+	SDL_LDFLAGS?=-lSDL -lopenxdk -lhal -lc -lhal -lusb -lhal -lc -lxboxkrnl
+
+	i_system_o+=$(OBJDIR)/xboxhelp.o
+
+	# name of the exefile
+	EXENAME?=SRB2XBOX.EXE
+	BINNAME?=default.xbe
diff --git a/src/sdl2/SRB2XBOX/xboxhelp.c b/src/sdl2/SRB2XBOX/xboxhelp.c
new file mode 100644
index 000000000..9de01712f
--- /dev/null
+++ b/src/sdl2/SRB2XBOX/xboxhelp.c
@@ -0,0 +1,91 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 2004 by Sonic Team Jr.
+//
+// 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.
+//
+// DESCRIPTION:
+//      stub and replacement "ANSI" C functions for use under OpenXDK
+//
+//-----------------------------------------------------------------------------
+
+#include "../../doomdef.h"
+#include "xboxhelp.h"
+#ifdef __GNUC__
+#include <unistd.h>
+#else
+#include <stdlib.h>
+#endif
+
+char *getcwd(char *_buf, size_t _size )
+{
+	(void)_buf;
+	(void)_size;
+	return _buf;
+}
+
+#ifdef _MSC_VER
+int mkdir(const char *path)
+{
+	(void)path;
+	return 0;
+}
+#elif 0 //__GNUC__?
+int mkdir(const char *path, mode_t _mode)
+{
+	(void)path;
+	(void)_mode;
+	return 0;
+}
+#endif
+
+int chdir (const char *__path )
+{
+	(void)__path;
+	return 0;
+}
+
+time_t time(time_t *T)
+{
+	long returntime = 0;
+	(void)T;
+/*
+	SYSTEMTIME st;
+	FILETIME stft;
+	INT64 ftli;
+	if (!T) return returntime;
+	GetSystemTime(&st);
+	SystemTimeToFileTime(&st,&stft);
+	CopyMemory(&ftli,&stft,sizeof (LARGE_INTEGER));
+	returntime = (long)ftli;
+	*T = returntime;
+*/
+	return returntime;
+}
+
+#ifdef _MSC_VER
+#include <RtcApi.h>
+void __cdecl _RTC_Initialize(void)
+{
+}
+char *getenv(const char *__env)
+{
+	__env = NULL;
+	return NULL;
+}
+
+int putenv(const char *__env)
+{
+	__env = NULL;
+	return 0;
+}
+#endif
diff --git a/src/sdl2/SRB2XBOX/xboxhelp.h b/src/sdl2/SRB2XBOX/xboxhelp.h
new file mode 100644
index 000000000..97ef0a3be
--- /dev/null
+++ b/src/sdl2/SRB2XBOX/xboxhelp.h
@@ -0,0 +1,6 @@
+#if defined (_MSC_VER)
+int access(const char *path, int amode);
+char *getcwd(char *_buf, size_t _size );
+int mkdir(const char *path);
+int chdir (const char *__path );
+#endif
diff --git a/src/sdl2/Srb2SDL-vc10.vcxproj b/src/sdl2/Srb2SDL-vc10.vcxproj
new file mode 100644
index 000000000..192f19156
--- /dev/null
+++ b/src/sdl2/Srb2SDL-vc10.vcxproj
@@ -0,0 +1,1464 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>Srb2SDL</ProjectName>
+    <ProjectGuid>{61BA7D3C-F77D-4D31-B718-1177FE482CF2}</ProjectGuid>
+    <RootNamespace>Srb2SDL</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\..\..\bin\VC10\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\..\..\objs\VC10\$(Platform)\$(Configuration)\SDL\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\..\..\bin\VC10\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\..\..\objs\VC10\$(Platform)\$(Configuration)\SDL\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\..\..\bin\VC10\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\..\..\objs\VC10\$(Platform)\$(Configuration)\SDL\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\..\..\bin\VC10\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\..\..\objs\VC10\$(Platform)\$(Configuration)\SDL\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SDL12_PREFIX)\include;$(SDL12_MIXER_PREFIX)\include;$(FMOD3_PREFIX)api\inc;$(IncludePath)</IncludePath>
+    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SDL12_PREFIX)\include;$(SDL12_MIXER_PREFIX)\include;$(FMOD3_PREFIX)api\inc;$(IncludePath)</IncludePath>
+    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SDL12_PREFIX)\include;$(SDL12_MIXER_PREFIX)\include;$(FMOD3_PREFIX)api\inc;$(IncludePath)</IncludePath>
+    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SDL12_PREFIX)\include;$(SDL12_MIXER_PREFIX)\include;$(FMOD3_PREFIX)api\inc;$(IncludePath)</IncludePath>
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SDL12_PREFIX)\lib;$(SDL12_MIXER_PREFIX)\lib;$(LibraryPath)</LibraryPath>
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SDL12_PREFIX)\lib;$(SDL12_MIXER_PREFIX)\lib;$(LibraryPath)</LibraryPath>
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SDL12_PREFIX)\lib\x64;$(SDL12_MIXER_PREFIX)\lib\x64;$(LibraryPath)</LibraryPath>
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SDL12_PREFIX)\lib\x64;$(SDL12_MIXER_PREFIX)\lib\x64;$(LibraryPath)</LibraryPath>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <PreBuildEvent>
+      <Message>Getting revision number from the SCM system</Message>
+      <Command>"$(ProjectDir)..\..\comptime.bat" "$(ProjectDir).."</Command>
+    </PreBuildEvent>
+    <Midl>
+      <TypeLibraryName>.\..\..\bin\VC10\$(Platform)\$(Configuration)\SDL\Srb2SDL-vc9.tlb</TypeLibraryName>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(ProjectDir)..\..\libs\libpng-src;$(ProjectDir)..\..\libs\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_DEBUG;USE_WGL_SWAP;DIRECTFULLSCREEN;SDL;HWRENDER;HW3SOUND;HAVE_FILTER;HAVE_MIXER;USEASM;HAVE_PNG;COMPVERSION;HAVE_BLUA;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+      <ProgramDataBaseFileName>$(IntDir)Srb2SDL.pdb</ProgramDataBaseFileName>
+      <BrowseInformation>true</BrowseInformation>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <CompileAs>CompileAsC</CompileAs>
+      <DisableSpecificWarnings>4121;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>SDL.lib;SDL_mixer.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)srb2sdl.exe</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)srb2sdl.pdb</ProgramDatabaseFile>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <Bscmake>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <OutputFile>$(OutDir)Srb2sdl.bsc</OutputFile>
+    </Bscmake>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <PreBuildEvent>
+      <Message>Getting revision number from the SCM system</Message>
+      <Command>"$(ProjectDir)..\..\comptime.bat" "$(ProjectDir).."</Command>
+    </PreBuildEvent>
+    <Midl>
+      <TargetEnvironment>X64</TargetEnvironment>
+      <TypeLibraryName>.\..\..\bin\VC10\$(Platform)\$(Configuration)\SDL\Srb2SDL-vc9.tlb</TypeLibraryName>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>$(ProjectDir)..\..\libs\libpng-src;$(ProjectDir)..\..\libs\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_DEBUG;USE_WGL_SWAP;DIRECTFULLSCREEN;SDL;HWRENDER;HW3SOUND;HAVE_FILTER;HAVE_MIXER;HAVE_PNG;COMPVERSION;HAVE_BLUA;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+      <ProgramDataBaseFileName>$(IntDir)Srb2SDL.pdb</ProgramDataBaseFileName>
+      <BrowseInformation>true</BrowseInformation>
+      <WarningLevel>Level4</WarningLevel>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <CompileAs>CompileAsC</CompileAs>
+      <DisableSpecificWarnings>4121;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>SDL.lib;SDL_mixer.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)srb2sdl.exe</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)srb2sdl.pdb</ProgramDatabaseFile>
+      <SubSystem>Console</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <Bscmake>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <OutputFile>$(OutDir)Srb2sdl.bsc</OutputFile>
+    </Bscmake>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <PreBuildEvent>
+      <Message>Getting revision number from the SCM system</Message>
+      <Command>"$(ProjectDir)..\..\comptime.bat" "$(ProjectDir).."</Command>
+    </PreBuildEvent>
+    <Midl>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>Win32</TargetEnvironment>
+      <TypeLibraryName>.\..\..\bin\VC10\$(Platform)\$(Configuration)\SDL\Srb2SDL-vc9.tlb</TypeLibraryName>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <AdditionalIncludeDirectories>$(ProjectDir)..\..\libs\libpng-src;$(ProjectDir)..\..\libs\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>NDEBUG;SDLMAIN;NO_STDIO_REDIRECT;USE_WGL_SWAP;DIRECTFULLSCREEN;SDL;HWRENDER;HW3SOUND;HAVE_FILTER;HAVE_MIXER;USEASM;HAVE_PNG;COMPVERSION;HAVE_BLUA;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <PrecompiledHeaderOutputFile>.\..\..\objs\VC10\$(Platform)\$(Configuration)\SDL\Srb2SDL-vc9.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+      <ProgramDataBaseFileName>$(IntDir)Srb2SDL.pdb</ProgramDataBaseFileName>
+      <BrowseInformation>true</BrowseInformation>
+      <WarningLevel>Level3</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <CompileAs>CompileAsC</CompileAs>
+      <DisableSpecificWarnings>4121;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>SDL.lib;SDL_mixer.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)srb2sdl.exe</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)srb2sdl.pdb</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+    <Bscmake>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <OutputFile>$(OutDir)Srb2sdl.bsc</OutputFile>
+    </Bscmake>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <PreBuildEvent>
+      <Message>Getting revision number from the SCM system</Message>
+      <Command>"$(ProjectDir)..\..\comptime.bat" "$(ProjectDir).."</Command>
+    </PreBuildEvent>
+    <Midl>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>X64</TargetEnvironment>
+      <TypeLibraryName>.\..\..\bin\VC10\$(Platform)\$(Configuration)\SDL\Srb2SDL-vc9.tlb</TypeLibraryName>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
+      <Optimization>Disabled</Optimization>
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <AdditionalIncludeDirectories>$(ProjectDir)..\..\libs\libpng-src;$(ProjectDir)..\..\libs\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>NDEBUG;SDLMAIN;NO_STDIO_REDIRECT;USE_WGL_SWAP;DIRECTFULLSCREEN;SDL;HWRENDER;HW3SOUND;HAVE_FILTER;HAVE_MIXER;HAVE_PNG;COMPVERSION;HAVE_BLUA;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <PrecompiledHeaderOutputFile>.\..\..\objs\VC10\$(Platform)\$(Configuration)\SDL\Srb2SDL-vc9.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+      <ProgramDataBaseFileName>$(IntDir)Srb2SDL.pdb</ProgramDataBaseFileName>
+      <BrowseInformation>true</BrowseInformation>
+      <WarningLevel>Level3</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <CompileAs>CompileAsC</CompileAs>
+      <DisableSpecificWarnings>4121;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>SDL.lib;SDL_mixer.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)srb2sdl.exe</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)srb2sdl.pdb</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <Bscmake>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <OutputFile>$(OutDir)Srb2sdl.bsc</OutputFile>
+    </Bscmake>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\blua\lapi.c" />
+    <ClCompile Include="..\blua\lauxlib.c" />
+    <ClCompile Include="..\blua\lbaselib.c" />
+    <ClCompile Include="..\blua\lcode.c" />
+    <ClCompile Include="..\blua\ldebug.c" />
+    <ClCompile Include="..\blua\ldo.c" />
+    <ClCompile Include="..\blua\ldump.c" />
+    <ClCompile Include="..\blua\lfunc.c" />
+    <ClCompile Include="..\blua\lgc.c" />
+    <ClCompile Include="..\blua\linit.c" />
+    <ClCompile Include="..\blua\llex.c" />
+    <ClCompile Include="..\blua\lmem.c" />
+    <ClCompile Include="..\blua\lobject.c" />
+    <ClCompile Include="..\blua\lopcodes.c" />
+    <ClCompile Include="..\blua\lparser.c" />
+    <ClCompile Include="..\blua\lstate.c" />
+    <ClCompile Include="..\blua\lstring.c" />
+    <ClCompile Include="..\blua\lstrlib.c" />
+    <ClCompile Include="..\blua\ltable.c" />
+    <ClCompile Include="..\blua\ltablib.c" />
+    <ClCompile Include="..\blua\ltm.c" />
+    <ClCompile Include="..\blua\lundump.c" />
+    <ClCompile Include="..\blua\lvm.c" />
+    <ClCompile Include="..\blua\lzio.c" />
+    <ClCompile Include="..\b_bot.c" />
+    <ClCompile Include="..\m_cond.c" />
+    <ClCompile Include="dosstr.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="endtxt.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\filesrch.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="hwsym_sdl.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="i_cdmus.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="i_main.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="i_net.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="i_sound.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="i_system.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="i_video.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="IMG_xpm.c">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="ogl_sdl.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\hardware\r_opengl\r_opengl.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="SDL_main\SDL_win32_main.c">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\win32\win_dbg.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="filter\filters.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="filter\hq2x.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="filter\lq2x.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\comptime.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\d_clisrv.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\d_main.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\d_net.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\d_netcmd.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\d_netfil.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\dehacked.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\z_zone.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\f_finale.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\f_wipe.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\g_game.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\g_input.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\am_map.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\command.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\console.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\hu_stuff.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\st_stuff.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\y_inter.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\hardware\hw3sound.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\hardware\hw_bsp.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\hardware\hw_cache.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\hardware\hw_draw.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\hardware\hw_light.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\hardware\hw_main.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\hardware\hw_md2.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\hardware\hw_trick.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\i_tcp.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\mserv.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\m_argv.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\m_bbox.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\m_cheat.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\m_fixed.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\m_menu.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\m_misc.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\m_queue.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\m_random.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\string.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\info.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_ceilng.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_enemy.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_fab.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_floor.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_inter.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_lights.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_map.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_maputl.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_mobj.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_polyobj.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_saveg.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_setup.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_sight.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_spec.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_telept.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_tick.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\p_user.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\tables.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\r_bsp.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\r_data.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\r_draw.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\r_draw16.c">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\r_draw8.c">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\r_main.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\r_plane.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\r_segs.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\r_sky.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\r_splats.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\r_things.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\screen.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\v_video.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\s_sound.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\sounds.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\lzf.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\md5.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <ClCompile Include="..\w_wad.c">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\blua\lapi.h" />
+    <ClInclude Include="..\blua\lauxlib.h" />
+    <ClInclude Include="..\blua\lcode.h" />
+    <ClInclude Include="..\blua\ldebug.h" />
+    <ClInclude Include="..\blua\ldo.h" />
+    <ClInclude Include="..\blua\lfunc.h" />
+    <ClInclude Include="..\blua\lgc.h" />
+    <ClInclude Include="..\blua\llex.h" />
+    <ClInclude Include="..\blua\llimits.h" />
+    <ClInclude Include="..\blua\lmem.h" />
+    <ClInclude Include="..\blua\lobject.h" />
+    <ClInclude Include="..\blua\lopcodes.h" />
+    <ClInclude Include="..\blua\lparser.h" />
+    <ClInclude Include="..\blua\lstate.h" />
+    <ClInclude Include="..\blua\lstring.h" />
+    <ClInclude Include="..\blua\ltable.h" />
+    <ClInclude Include="..\blua\ltm.h" />
+    <ClInclude Include="..\blua\lua.h" />
+    <ClInclude Include="..\blua\luaconf.h" />
+    <ClInclude Include="..\blua\lualib.h" />
+    <ClInclude Include="..\blua\lundump.h" />
+    <ClInclude Include="..\blua\lvm.h" />
+    <ClInclude Include="..\blua\lzio.h" />
+    <ClInclude Include="..\b_bot.h" />
+    <ClInclude Include="..\m_cond.h" />
+    <ClInclude Include="endtxt.h" />
+    <ClInclude Include="..\filesrch.h" />
+    <ClInclude Include="hwsym_sdl.h" />
+    <ClInclude Include="ogl_sdl.h" />
+    <ClInclude Include="..\hardware\r_opengl\r_opengl.h" />
+    <ClInclude Include="sdlmain.h" />
+    <ClInclude Include="..\win32\win_dbg.h" />
+    <ClInclude Include="..\win32\win_main.h" />
+    <ClInclude Include="filter\filters.h" />
+    <ClInclude Include="filter\hq2x.h" />
+    <ClInclude Include="filter\interp.h" />
+    <ClInclude Include="filter\lq2x.h" />
+    <ClInclude Include="..\p5prof.h" />
+    <ClInclude Include="..\d_clisrv.h" />
+    <ClInclude Include="..\d_event.h" />
+    <ClInclude Include="..\d_main.h" />
+    <ClInclude Include="..\d_net.h" />
+    <ClInclude Include="..\d_netcmd.h" />
+    <ClInclude Include="..\d_netfil.h" />
+    <ClInclude Include="..\d_player.h" />
+    <ClInclude Include="..\d_think.h" />
+    <ClInclude Include="..\d_ticcmd.h" />
+    <ClInclude Include="..\dehacked.h" />
+    <ClInclude Include="..\doomdata.h" />
+    <ClInclude Include="..\doomdef.h" />
+    <ClInclude Include="..\doomstat.h" />
+    <ClInclude Include="..\doomtype.h" />
+    <ClInclude Include="..\z_zone.h" />
+    <ClInclude Include="..\f_finale.h" />
+    <ClInclude Include="..\g_game.h" />
+    <ClInclude Include="..\g_input.h" />
+    <ClInclude Include="..\g_state.h" />
+    <ClInclude Include="..\am_map.h" />
+    <ClInclude Include="..\command.h" />
+    <ClInclude Include="..\console.h" />
+    <ClInclude Include="..\hu_stuff.h" />
+    <ClInclude Include="..\st_stuff.h" />
+    <ClInclude Include="..\y_inter.h" />
+    <ClInclude Include="..\hardware\hw3dsdrv.h" />
+    <ClInclude Include="..\hardware\hw3sound.h" />
+    <ClInclude Include="..\hardware\hw_data.h" />
+    <ClInclude Include="..\hardware\hw_defs.h" />
+    <ClInclude Include="..\hardware\hw_dll.h" />
+    <ClInclude Include="..\hardware\hw_drv.h" />
+    <ClInclude Include="..\hardware\hw_glide.h" />
+    <ClInclude Include="..\hardware\hw_glob.h" />
+    <ClInclude Include="..\hardware\hw_light.h" />
+    <ClInclude Include="..\hardware\hw_main.h" />
+    <ClInclude Include="..\hardware\hw_md2.h" />
+    <ClInclude Include="..\hardware\hws_data.h" />
+    <ClInclude Include="..\byteptr.h" />
+    <ClInclude Include="..\i_joy.h" />
+    <ClInclude Include="..\i_net.h" />
+    <ClInclude Include="..\i_sound.h" />
+    <ClInclude Include="..\i_system.h" />
+    <ClInclude Include="..\i_tcp.h" />
+    <ClInclude Include="..\i_video.h" />
+    <ClInclude Include="..\keys.h" />
+    <ClInclude Include="..\mserv.h" />
+    <ClInclude Include="..\m_argv.h" />
+    <ClInclude Include="..\m_bbox.h" />
+    <ClInclude Include="..\m_cheat.h" />
+    <ClInclude Include="..\m_dllist.h" />
+    <ClInclude Include="..\m_fixed.h" />
+    <ClInclude Include="..\m_menu.h" />
+    <ClInclude Include="..\m_misc.h" />
+    <ClInclude Include="..\m_queue.h" />
+    <ClInclude Include="..\m_random.h" />
+    <ClInclude Include="..\m_swap.h" />
+    <ClInclude Include="..\info.h" />
+    <ClInclude Include="..\p_local.h" />
+    <ClInclude Include="..\p_maputl.h" />
+    <ClInclude Include="..\p_mobj.h" />
+    <ClInclude Include="..\p_polyobj.h" />
+    <ClInclude Include="..\p_pspr.h" />
+    <ClInclude Include="..\p_saveg.h" />
+    <ClInclude Include="..\p_setup.h" />
+    <ClInclude Include="..\p_spec.h" />
+    <ClInclude Include="..\p_tick.h" />
+    <ClInclude Include="..\tables.h" />
+    <ClInclude Include="..\r_bsp.h" />
+    <ClInclude Include="..\r_data.h" />
+    <ClInclude Include="..\r_defs.h" />
+    <ClInclude Include="..\r_draw.h" />
+    <ClInclude Include="..\r_local.h" />
+    <ClInclude Include="..\r_main.h" />
+    <ClInclude Include="..\r_plane.h" />
+    <ClInclude Include="..\r_segs.h" />
+    <ClInclude Include="..\r_sky.h" />
+    <ClInclude Include="..\r_splats.h" />
+    <ClInclude Include="..\r_state.h" />
+    <ClInclude Include="..\r_things.h" />
+    <ClInclude Include="..\screen.h" />
+    <ClInclude Include="..\v_video.h" />
+    <ClInclude Include="..\s_sound.h" />
+    <ClInclude Include="..\sounds.h" />
+    <ClInclude Include="..\lzf.h" />
+    <ClInclude Include="..\md5.h" />
+    <ClInclude Include="..\w_wad.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="SDL_icon.xpm" />
+    <CustomBuild Include="..\tmap.nas">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Compiling %(Filename).nas with NASM...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">nasm -g -o $(IntDir)%(Filename).obj -f win32 "%(FullPath)"</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling %(Filename).nas with NASM...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">nasm -g -o $(IntDir)%(Filename).obj -f win32 "%(FullPath)"</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Compiling %(Filename).nas with NASM...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">nasm -g -o $(IntDir)%(Filename).obj -f win32 "%(FullPath)"</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling %(Filename).nas with NASM...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">nasm -g -o $(IntDir)%(Filename).obj -f win32 "%(FullPath)"</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\tmap_mmx.nas">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Compiling %(Filename).nas with NASM...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">nasm -g -o $(IntDir)%(Filename).obj -f win32 "%(FullPath)"</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling %(Filename).nas with NASM...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">nasm -g -o $(IntDir)%(Filename).obj -f win32 "%(FullPath)"</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Compiling %(Filename).nas with NASM...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">nasm -g -o $(IntDir)%(Filename).obj -f win32 "%(FullPath)"</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling %(Filename).nas with NASM...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">nasm -g -o $(IntDir)%(Filename).obj -f win32 "%(FullPath)"</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="..\tmap_vc.nas">
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Compiling %(Filename).nas with NASM...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">nasm -g -o $(IntDir)%(Filename).obj -f win32 "%(FullPath)"</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling %(Filename).nas with NASM...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">nasm -g -o $(IntDir)%(Filename).obj -f win32 "%(FullPath)"</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Compiling %(Filename).nas with NASM...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">nasm -g -o $(IntDir)%(Filename).obj -f win32 "%(FullPath)"</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling %(Filename).nas with NASM...</Message>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">nasm -g -o $(IntDir)%(Filename).obj -f win32 "%(FullPath)"</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs>
+    </CustomBuild>
+    <None Include="..\..\doc\copying" />
+    <None Include="..\..\doc\faq.txt" />
+    <None Include="..\..\readme.txt" />
+    <None Include="..\..\doc\source.txt" />
+    <None Include="..\win32\Srb2win.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\win32\Srb2win.rc">
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\Users\alam\svn\srb2mods\SRB2\branches\ALAM\src\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\Users\alam\svn\srb2mods\SRB2\branches\ALAM\src\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\Users\alam\svn\srb2mods\SRB2\branches\ALAM\src\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\Users\alam\svn\srb2mods\SRB2\branches\ALAM\src\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\libs\libpng-src\projects\visualc10\libpng.vcxproj">
+      <Project>{72b01aca-7a1a-4f7b-acef-2607299cf052}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+    <ProjectReference Include="..\..\libs\zlib\projects\visualc10\zlib.vcxproj">
+      <Project>{73a5729c-7323-41d4-ab48-8a03c9f81603}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/src/sdl2/Srb2SDL-vc9.vcproj b/src/sdl2/Srb2SDL-vc9.vcproj
new file mode 100644
index 000000000..620202bdf
--- /dev/null
+++ b/src/sdl2/Srb2SDL-vc9.vcproj
@@ -0,0 +1,5845 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="Srb2SDL"
+	ProjectGUID="{61BA7D3C-F77D-4D31-B718-1177FE482CF2}"
+	RootNamespace="Srb2SDL"
+	TargetFrameworkVersion="0"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\..\..\bin\VC9\$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory=".\..\..\objs\VC9\$(PlatformName)\$(ConfigurationName)\SDL"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				Description="Getting revision number from the SCM system"
+				CommandLine="&quot;$(ProjectDir)..\..\comptime.bat&quot; &quot;$(ProjectDir)..&quot;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TypeLibraryName=".\..\..\bin\VC9\$(Platform)\$(Configuration)\SDL\Srb2SDL-vc9.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="&quot;$(ProjectDir)..\..\libs\libpng-src&quot;;&quot;$(ProjectDir)..\..\libs\zlib&quot;"
+				PreprocessorDefinitions="_DEBUG;USE_WGL_SWAP;DIRECTFULLSCREEN;SDL;HWRENDER;HW3SOUND;HAVE_FILTER;HAVE_MIXER;USEASM;HAVE_PNG;HAVE_BLUA;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				AssemblerListingLocation="$(IntDir)\"
+				ProgramDataBaseFileName="$(IntDir)\Srb2SDL.pdb"
+				BrowseInformation="1"
+				WarningLevel="4"
+				WarnAsError="true"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="4"
+				CompileAs="1"
+				DisableSpecificWarnings="4121"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="SDL.lib SDL_mixer.lib ws2_32.lib"
+				OutputFile="$(OutDir)\srb2sdl.exe"
+				LinkIncremental="2"
+				SuppressStartupBanner="true"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(OutDir)\srb2sdl.pdb"
+				SubSystem="1"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile="$(OutDir)\Srb2sdl.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			OutputDirectory=".\..\..\bin\VC9\$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory=".\..\..\objs\VC9\$(PlatformName)\$(ConfigurationName)\SDL"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				Description="Getting revision number from the SCM system"
+				CommandLine="&quot;$(ProjectDir)..\..\comptime.bat&quot; &quot;$(ProjectDir)..&quot;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+				TypeLibraryName=".\..\..\bin\VC9\$(Platform)\$(Configuration)\SDL\Srb2SDL-vc9.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="&quot;$(ProjectDir)..\..\libs\libpng-src&quot;;&quot;$(ProjectDir)..\..\libs\zlib&quot;"
+				PreprocessorDefinitions="_DEBUG;USE_WGL_SWAP;DIRECTFULLSCREEN;SDL;HWRENDER;HW3SOUND;HAVE_FILTER;HAVE_MIXER;HAVE_PNG;HAVE_BLUA;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				AssemblerListingLocation="$(IntDir)\"
+				ProgramDataBaseFileName="$(IntDir)\Srb2SDL.pdb"
+				BrowseInformation="1"
+				WarningLevel="4"
+				WarnAsError="true"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="3"
+				CompileAs="1"
+				DisableSpecificWarnings="4121"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="SDL.lib SDL_mixer.lib ws2_32.lib"
+				OutputFile="$(OutDir)\srb2sdl.exe"
+				LinkIncremental="2"
+				SuppressStartupBanner="true"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(OutDir)\srb2sdl.pdb"
+				SubSystem="1"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile="$(OutDir)\Srb2sdl.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\..\..\bin\VC9\$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory=".\..\..\objs\VC9\$(PlatformName)\$(ConfigurationName)\SDL"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				Description="Getting revision number from the SCM system"
+				CommandLine="&quot;$(ProjectDir)..\..\comptime.bat&quot; &quot;$(ProjectDir)..&quot;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\..\..\bin\VC9\$(Platform)\$(Configuration)\SDL\Srb2SDL-vc9.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/MP"
+				Optimization="4"
+				InlineFunctionExpansion="1"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				AdditionalIncludeDirectories="&quot;$(ProjectDir)..\..\libs\libpng-src&quot;;&quot;$(ProjectDir)..\..\libs\zlib&quot;"
+				PreprocessorDefinitions="NDEBUG;SDLMAIN;NO_STDIO_REDIRECT;USE_WGL_SWAP;DIRECTFULLSCREEN;SDL;HWRENDER;HW3SOUND;HAVE_FILTER;HAVE_MIXER;USEASM;HAVE_PNG;HAVE_BLUA;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				PrecompiledHeaderFile=".\..\..\objs\VC9\$(Platform)\$(Configuration)\SDL\Srb2SDL-vc9.pch"
+				AssemblerListingLocation="$(IntDir)\"
+				ProgramDataBaseFileName="$(IntDir)\Srb2SDL.pdb"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="3"
+				CompileAs="1"
+				DisableSpecificWarnings="4121"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="SDL.lib SDL_mixer.lib ws2_32.lib"
+				OutputFile="$(OutDir)\srb2sdl.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(OutDir)\srb2sdl.pdb"
+				SubSystem="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile="$(OutDir)\Srb2sdl.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory=".\..\..\bin\VC9\$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory=".\..\..\objs\VC9\$(PlatformName)\$(ConfigurationName)\SDL"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				Description="Getting revision number from the SCM system"
+				CommandLine="&quot;$(ProjectDir)..\..\comptime.bat&quot; &quot;$(ProjectDir)..&quot;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="3"
+				TypeLibraryName=".\..\..\bin\VC9\$(Platform)\$(Configuration)\SDL\Srb2SDL-vc9.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/MP"
+				Optimization="4"
+				InlineFunctionExpansion="1"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				AdditionalIncludeDirectories="&quot;$(ProjectDir)..\..\libs\libpng-src&quot;;&quot;$(ProjectDir)..\..\libs\zlib&quot;"
+				PreprocessorDefinitions="NDEBUG;SDLMAIN;NO_STDIO_REDIRECT;USE_WGL_SWAP;DIRECTFULLSCREEN;SDL;HWRENDER;HW3SOUND;HAVE_FILTER;HAVE_MIXER;HAVE_PNG;HAVE_BLUA;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				PrecompiledHeaderFile=".\..\..\objs\VC9\$(Platform)\$(Configuration)\SDL\Srb2SDL-vc9.pch"
+				AssemblerListingLocation="$(IntDir)\"
+				ProgramDataBaseFileName="$(IntDir)\Srb2SDL.pdb"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="3"
+				CompileAs="1"
+				DisableSpecificWarnings="4121"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="SDL.lib SDL_mixer.lib ws2_32.lib"
+				OutputFile="$(OutDir)\srb2sdl.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(OutDir)\srb2sdl.pdb"
+				SubSystem="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile="$(OutDir)\Srb2sdl.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="SDLapp"
+			>
+			<File
+				RelativePath="dosstr.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="endtxt.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="endtxt.h"
+				>
+			</File>
+			<File
+				RelativePath="..\filesrch.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\filesrch.h"
+				>
+			</File>
+			<File
+				RelativePath="hwsym_sdl.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="hwsym_sdl.h"
+				>
+			</File>
+			<File
+				RelativePath="i_cdmus.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="i_main.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="i_net.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="i_sound.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="i_system.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="i_video.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="IMG_xpm.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="ogl_sdl.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="ogl_sdl.h"
+				>
+			</File>
+			<File
+				RelativePath="..\hardware\r_opengl\r_opengl.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\hardware\r_opengl\r_opengl.h"
+				>
+			</File>
+			<File
+				RelativePath="SDL_icon.xpm"
+				>
+			</File>
+			<File
+				RelativePath="SDL_main\SDL_win32_main.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="sdlmain.h"
+				>
+			</File>
+			<File
+				RelativePath="..\win32\Srb2win.rc"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+						AdditionalIncludeDirectories="\Users\alam\svn\srb2mods\SRB2\branches\ALAM\src\win32"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+						AdditionalIncludeDirectories="\Users\alam\svn\srb2mods\SRB2\branches\ALAM\src\win32"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+						AdditionalIncludeDirectories="\Users\alam\svn\srb2mods\SRB2\branches\ALAM\src\win32"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+						AdditionalIncludeDirectories="\Users\alam\svn\srb2mods\SRB2\branches\ALAM\src\win32"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\win32\win_dbg.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\win32\win_dbg.h"
+				>
+			</File>
+			<File
+				RelativePath="..\win32\win_main.h"
+				>
+			</File>
+			<Filter
+				Name="filter"
+				>
+				<File
+					RelativePath="filter\filters.c"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug|x64"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|x64"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="filter\filters.h"
+					>
+				</File>
+				<File
+					RelativePath="filter\hq2x.c"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug|x64"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|x64"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="filter\hq2x.h"
+					>
+				</File>
+				<File
+					RelativePath="filter\interp.h"
+					>
+				</File>
+				<File
+					RelativePath="filter\lq2x.c"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug|x64"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|x64"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="filter\lq2x.h"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="A_Asm"
+			>
+			<File
+				RelativePath="..\p5prof.h"
+				>
+			</File>
+			<File
+				RelativePath="..\tmap.nas"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Compiling $(InputName).nas with NASM..."
+						CommandLine="nasm -g -o $(IntDir)/$(InputName).obj -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)/$(InputName).obj"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Compiling $(InputName).nas with NASM..."
+						CommandLine="nasm -g -o $(IntDir)/$(InputName).obj -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)/$(InputName).obj"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Compiling $(InputName).nas with NASM..."
+						CommandLine="nasm -g -o $(IntDir)/$(InputName).obj -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)/$(InputName).obj"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Compiling $(InputName).nas with NASM..."
+						CommandLine="nasm -g -o $(IntDir)/$(InputName).obj -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)/$(InputName).obj"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\tmap_mmx.nas"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Compiling $(InputName).nas with NASM..."
+						CommandLine="nasm -g -o $(IntDir)/$(InputName).obj -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)/$(InputName).obj"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Compiling $(InputName).nas with NASM..."
+						CommandLine="nasm -g -o $(IntDir)/$(InputName).obj -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)/$(InputName).obj"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Compiling $(InputName).nas with NASM..."
+						CommandLine="nasm -g -o $(IntDir)/$(InputName).obj -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)/$(InputName).obj"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Compiling $(InputName).nas with NASM..."
+						CommandLine="nasm -g -o $(IntDir)/$(InputName).obj -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)/$(InputName).obj"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\tmap_vc.nas"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Compiling $(InputName).nas with NASM..."
+						CommandLine="nasm -g -o $(IntDir)/$(InputName).obj -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)/$(InputName).obj"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Compiling $(InputName).nas with NASM..."
+						CommandLine="nasm -g -o $(IntDir)/$(InputName).obj -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)/$(InputName).obj"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Compiling $(InputName).nas with NASM..."
+						CommandLine="nasm -g -o $(IntDir)/$(InputName).obj -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)/$(InputName).obj"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Compiling $(InputName).nas with NASM..."
+						CommandLine="nasm -g -o $(IntDir)/$(InputName).obj -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+						Outputs="$(IntDir)/$(InputName).obj"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+		<Filter
+			Name="D_Doom"
+			>
+			<File
+				RelativePath="..\comptime.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\d_clisrv.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\d_clisrv.h"
+				>
+			</File>
+			<File
+				RelativePath="..\d_event.h"
+				>
+			</File>
+			<File
+				RelativePath="..\d_main.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\d_main.h"
+				>
+			</File>
+			<File
+				RelativePath="..\d_net.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\d_net.h"
+				>
+			</File>
+			<File
+				RelativePath="..\d_netcmd.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\d_netcmd.h"
+				>
+			</File>
+			<File
+				RelativePath="..\d_netfil.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\d_netfil.h"
+				>
+			</File>
+			<File
+				RelativePath="..\d_player.h"
+				>
+			</File>
+			<File
+				RelativePath="..\d_think.h"
+				>
+			</File>
+			<File
+				RelativePath="..\d_ticcmd.h"
+				>
+			</File>
+			<File
+				RelativePath="..\dehacked.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\dehacked.h"
+				>
+			</File>
+			<File
+				RelativePath="..\doomdata.h"
+				>
+			</File>
+			<File
+				RelativePath="..\doomdef.h"
+				>
+			</File>
+			<File
+				RelativePath="..\doomstat.h"
+				>
+			</File>
+			<File
+				RelativePath="..\doomtype.h"
+				>
+			</File>
+			<File
+				RelativePath="..\z_zone.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\z_zone.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="F_Frame"
+			>
+			<File
+				RelativePath="..\f_finale.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\f_finale.h"
+				>
+			</File>
+			<File
+				RelativePath="..\f_wipe.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+		<Filter
+			Name="G_Game"
+			>
+			<File
+				RelativePath="..\g_game.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\g_game.h"
+				>
+			</File>
+			<File
+				RelativePath="..\g_input.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\g_input.h"
+				>
+			</File>
+			<File
+				RelativePath="..\g_state.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="H_Hud"
+			>
+			<File
+				RelativePath="..\am_map.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\am_map.h"
+				>
+			</File>
+			<File
+				RelativePath="..\command.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\command.h"
+				>
+			</File>
+			<File
+				RelativePath="..\console.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\console.h"
+				>
+			</File>
+			<File
+				RelativePath="..\hu_stuff.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\hu_stuff.h"
+				>
+			</File>
+			<File
+				RelativePath="..\st_stuff.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\st_stuff.h"
+				>
+			</File>
+			<File
+				RelativePath="..\y_inter.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\y_inter.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Hw_Hardware"
+			>
+			<File
+				RelativePath="..\hardware\hw3dsdrv.h"
+				>
+			</File>
+			<File
+				RelativePath="..\hardware\hw3sound.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\hardware\hw3sound.h"
+				>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_bsp.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_cache.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_data.h"
+				>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_defs.h"
+				>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_dll.h"
+				>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_draw.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_drv.h"
+				>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_glide.h"
+				>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_glob.h"
+				>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_light.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_light.h"
+				>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_main.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_main.h"
+				>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_md2.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_md2.h"
+				>
+			</File>
+			<File
+				RelativePath="..\hardware\hw_trick.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\hardware\hws_data.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="I_Interface"
+			>
+			<File
+				RelativePath="..\byteptr.h"
+				>
+			</File>
+			<File
+				RelativePath="..\i_addrinfo.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\i_addrinfo.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\i_joy.h"
+				>
+			</File>
+			<File
+				RelativePath="..\i_net.h"
+				>
+			</File>
+			<File
+				RelativePath="..\i_sound.h"
+				>
+			</File>
+			<File
+				RelativePath="..\i_system.h"
+				>
+			</File>
+			<File
+				RelativePath="..\i_tcp.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\i_tcp.h"
+				>
+			</File>
+			<File
+				RelativePath="..\i_video.h"
+				>
+			</File>
+			<File
+				RelativePath="..\keys.h"
+				>
+			</File>
+			<File
+				RelativePath="..\mserv.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\mserv.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="M_Misc"
+			>
+			<File
+				RelativePath="..\m_argv.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\m_argv.h"
+				>
+			</File>
+			<File
+				RelativePath="..\m_bbox.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\m_bbox.h"
+				>
+			</File>
+			<File
+				RelativePath="..\m_cheat.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\m_cheat.h"
+				>
+			</File>
+			<File
+				RelativePath="..\m_cond.c"
+				>
+			</File>
+			<File
+				RelativePath="..\m_cond.h"
+				>
+			</File>
+			<File
+				RelativePath="..\m_dllist.h"
+				>
+			</File>
+			<File
+				RelativePath="..\m_fixed.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\m_fixed.h"
+				>
+			</File>
+			<File
+				RelativePath="..\m_menu.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\m_menu.h"
+				>
+			</File>
+			<File
+				RelativePath="..\m_misc.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\m_misc.h"
+				>
+			</File>
+			<File
+				RelativePath="..\m_queue.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\m_queue.h"
+				>
+			</File>
+			<File
+				RelativePath="..\m_random.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\m_random.h"
+				>
+			</File>
+			<File
+				RelativePath="..\m_swap.h"
+				>
+			</File>
+			<File
+				RelativePath="..\string.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+		<Filter
+			Name="P_Play"
+			>
+			<File
+				RelativePath="..\info.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\info.h"
+				>
+			</File>
+			<File
+				RelativePath="..\p_ceilng.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_enemy.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_fab.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_floor.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_inter.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_lights.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_local.h"
+				>
+			</File>
+			<File
+				RelativePath="..\p_map.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_maputl.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_maputl.h"
+				>
+			</File>
+			<File
+				RelativePath="..\p_mobj.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_mobj.h"
+				>
+			</File>
+			<File
+				RelativePath="..\p_polyobj.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_polyobj.h"
+				>
+			</File>
+			<File
+				RelativePath="..\p_pspr.h"
+				>
+			</File>
+			<File
+				RelativePath="..\p_saveg.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_saveg.h"
+				>
+			</File>
+			<File
+				RelativePath="..\p_setup.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_setup.h"
+				>
+			</File>
+			<File
+				RelativePath="..\p_sight.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_spec.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_spec.h"
+				>
+			</File>
+			<File
+				RelativePath="..\p_telept.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_tick.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\p_tick.h"
+				>
+			</File>
+			<File
+				RelativePath="..\p_user.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\tables.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\tables.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="R_Rend"
+			>
+			<File
+				RelativePath="..\r_bsp.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\r_bsp.h"
+				>
+			</File>
+			<File
+				RelativePath="..\r_data.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\r_data.h"
+				>
+			</File>
+			<File
+				RelativePath="..\r_defs.h"
+				>
+			</File>
+			<File
+				RelativePath="..\r_draw.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\r_draw.h"
+				>
+			</File>
+			<File
+				RelativePath="..\r_draw16.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\r_draw8.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\r_local.h"
+				>
+			</File>
+			<File
+				RelativePath="..\r_main.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\r_main.h"
+				>
+			</File>
+			<File
+				RelativePath="..\r_plane.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\r_plane.h"
+				>
+			</File>
+			<File
+				RelativePath="..\r_segs.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\r_segs.h"
+				>
+			</File>
+			<File
+				RelativePath="..\r_sky.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\r_sky.h"
+				>
+			</File>
+			<File
+				RelativePath="..\r_splats.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\r_splats.h"
+				>
+			</File>
+			<File
+				RelativePath="..\r_state.h"
+				>
+			</File>
+			<File
+				RelativePath="..\r_things.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\r_things.h"
+				>
+			</File>
+			<File
+				RelativePath="..\screen.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\screen.h"
+				>
+			</File>
+			<File
+				RelativePath="..\v_video.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\v_video.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="S_Sounds"
+			>
+			<File
+				RelativePath="..\s_sound.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\s_sound.h"
+				>
+			</File>
+			<File
+				RelativePath="..\sounds.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\sounds.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="W_Wad"
+			>
+			<File
+				RelativePath="..\lzf.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\lzf.h"
+				>
+			</File>
+			<File
+				RelativePath="..\md5.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\md5.h"
+				>
+			</File>
+			<File
+				RelativePath="..\w_wad.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\w_wad.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Docs"
+			>
+			<File
+				RelativePath="..\..\doc\copying"
+				>
+			</File>
+			<File
+				RelativePath="..\..\doc\faq.txt"
+				>
+			</File>
+			<File
+				RelativePath="..\..\readme.txt"
+				>
+			</File>
+			<File
+				RelativePath="..\..\doc\source.txt"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="B_Bot"
+			>
+			<File
+				RelativePath="..\b_bot.c"
+				>
+			</File>
+			<File
+				RelativePath="..\b_bot.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="LUA"
+			>
+			<File
+				RelativePath="..\fastcmp.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\lua_baselib.c"
+				>
+			</File>
+			<File
+				RelativePath="..\lua_consolelib.c"
+				>
+			</File>
+			<File
+				RelativePath="..\lua_hook.h"
+				>
+			</File>
+			<File
+				RelativePath="..\lua_hooklib.c"
+				>
+			</File>
+			<File
+				RelativePath="..\lua_infolib.c"
+				>
+			</File>
+			<File
+				RelativePath="..\lua_libs.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\lua_maplib.c"
+				>
+			</File>
+			<File
+				RelativePath="..\lua_mathlib.c"
+				>
+			</File>
+			<File
+				RelativePath="..\lua_mobjlib.c"
+				>
+			</File>
+			<File
+				RelativePath="..\lua_playerlib.c"
+				>
+			</File>
+			<File
+				RelativePath="..\lua_script.c"
+				>
+			</File>
+			<File
+				RelativePath="..\lua_script.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\lua_thinkerlib.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="BLUA"
+			>
+			<File
+				RelativePath="..\blua\lapi.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lapi.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\lauxlib.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lauxlib.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\lbaselib.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lcode.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lcode.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\ldebug.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\ldebug.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\ldo.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\ldo.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\ldump.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lfunc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lfunc.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\lgc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lgc.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\linit.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\llex.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\llex.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\llimits.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\lmem.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lmem.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\lobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lobject.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\lopcodes.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lopcodes.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\lparser.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lparser.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\lstate.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lstate.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\lstring.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lstring.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\lstrlib.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\ltable.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\ltable.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\ltablib.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\ltm.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\ltm.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\lua.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\luaconf.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\lualib.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\lundump.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lundump.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\lvm.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lvm.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\blua\lzio.c"
+				>
+			</File>
+			<File
+				RelativePath="..\blua\lzio.h"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+		<File
+			RelativePath="..\win32\Srb2win.ico"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/src/sdl2/Srb2SDL.dsp b/src/sdl2/Srb2SDL.dsp
new file mode 100644
index 000000000..02c3b2701
--- /dev/null
+++ b/src/sdl2/Srb2SDL.dsp
@@ -0,0 +1,1057 @@
+# Microsoft Developer Studio Project File - Name="Srb2SDL" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Srb2SDL - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "Srb2SDL.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "Srb2SDL.mak" CFG="Srb2SDL - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "Srb2SDL - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Srb2SDL - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "Srb2SDL - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\bin\VC\Release\SDL"
+# PROP Intermediate_Dir "..\..\objs\VC\Release\SDL"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+MTL=midl.exe
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /G5 /W3 /GX /Zi /Ot /Og /Oi /Op /Oy /Ob1 /I "..\..\libs\libpng-src" /I "..\..\libs\zlib" /D "NDEBUG" /D "SDLMAIN" /D "NO_STDIO_REDIRECT" /D "USE_WGL_SWAP" /D "DIRECTFULLSCREEN" /D "SDL" /D "HWRENDER" /D "HW3SOUND" /D "HAVE_FILTER" /D "HAVE_MIXER" /D "USEASM" /D "HAVE_PNG" /FR /FD /GF /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+# SUBTRACT RSC /x
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo /o"..\..\objs\SDL\Release\SRB2.bsc"
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# ADD LINK32 SDL.lib SDL_mixer.lib user32.lib advapi32.lib ws2_32.lib /nologo /subsystem:windows /pdb:"C:\srb2demo2\srb2sdl.pdb" /debug /machine:I386 /out:"C:\srb2demo2\srb2sdl.exe"
+# SUBTRACT LINK32 /profile /pdb:none /incremental:yes
+
+!ELSEIF  "$(CFG)" == "Srb2SDL - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\bin\VC\Debug\SDL"
+# PROP Intermediate_Dir "..\..\objs\VC\Debug\SDL"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+MTL=midl.exe
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /G6 /W4 /WX /Gm /GX /ZI /Od /Op /I "..\..\libs\libpng-src" /I "..\..\libs\zlib" /D "_DEBUG" /D "USE_WGL_SWAP" /D "DIRECTFULLSCREEN" /D "SDL" /D "HWRENDER" /D "HW3SOUND" /D "HAVE_FILTER" /D "HAVE_MIXER" /D "USEASM" /D "HAVE_PNG" /FR /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+# SUBTRACT RSC /x
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo /o"..\..\objs\SDL\Debug\SRB2.bsc"
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 SDL.lib SDL_mixer.lib user32.lib advapi32.lib ws2_32.lib /nologo /subsystem:console /pdb:"C:\srb2demo2\srb2sdldebug.pdb" /debug /machine:I386 /out:"C:\srb2demo2\srb2sdldebug.exe" /pdbtype:sept
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF 
+
+# Begin Target
+
+# Name "Srb2SDL - Win32 Release"
+# Name "Srb2SDL - Win32 Debug"
+# Begin Group "SDLapp"
+
+# PROP Default_Filter ""
+# Begin Group "filter"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\filter\filters.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\filter\filters.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\filter\hq2x.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\filter\hq2x.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\filter\interp.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\filter\lq2x.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\filter\lq2x.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\dosstr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\endtxt.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\endtxt.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\filesrch.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\filesrch.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\hwsym_sdl.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\hwsym_sdl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\i_cdmus.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\i_main.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\i_net.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\i_sound.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\i_system.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\i_video.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\IMG_xpm.c
+# PROP Exclude_From_Build 1
+# End Source File
+# Begin Source File
+
+SOURCE=.\ogl_sdl.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\ogl_sdl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\r_opengl\r_opengl.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\r_opengl\r_opengl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\SDL_icon.xpm
+# End Source File
+# Begin Source File
+
+SOURCE=.\SDL_main\SDL_win32_main.c
+
+!IF  "$(CFG)" == "Srb2SDL - Win32 Release"
+
+!ELSEIF  "$(CFG)" == "Srb2SDL - Win32 Debug"
+
+# PROP Exclude_From_Build 1
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\sdlmain.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\win32\Srb2win.rc
+# End Source File
+# Begin Source File
+
+SOURCE=..\win32\win_dbg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\win32\win_dbg.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\win32\win_main.h
+# End Source File
+# End Group
+# Begin Group "A_Asm"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\p5prof.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\tmap.nas
+
+!IF  "$(CFG)" == "Srb2SDL - Win32 Release"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Compiling $(InputName).nas with NASM...
+IntDir=.\..\..\objs\VC\Release\SDL
+InputPath=..\tmap.nas
+InputName=tmap
+
+"$(IntDir)/$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	nasm -g -o $(IntDir)/$(InputName).obj -f win32 $(InputPath)
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "Srb2SDL - Win32 Debug"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Compiling $(InputName).nas with NASM...
+IntDir=.\..\..\objs\VC\Debug\SDL
+InputPath=..\tmap.nas
+InputName=tmap
+
+"$(IntDir)/$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	nasm -g -o $(IntDir)/$(InputName).obj -f win32 $(InputPath)
+
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\tmap_mmx.nas
+
+!IF  "$(CFG)" == "Srb2SDL - Win32 Release"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Compiling $(InputName).nas with NASM...
+IntDir=.\..\..\objs\VC\Release\SDL
+InputPath=..\tmap_mmx.nas
+InputName=tmap_mmx
+
+"$(IntDir)/$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	nasm -g -o $(IntDir)/$(InputName).obj -f win32 $(InputPath)
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "Srb2SDL - Win32 Debug"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Compiling $(InputName).nas with NASM...
+
+IntDir=.\..\..\objs\VC\Debug\SDL
+InputPath=..\tmap_mmx.nas
+InputName=tmap_mmx
+
+"$(IntDir)/$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	nasm -g -o $(IntDir)/$(InputName).obj -f win32 $(InputPath)
+
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\tmap_vc.nas
+
+!IF  "$(CFG)" == "Srb2SDL - Win32 Release"
+
+# Begin Custom Build - Compiling $(InputName).nas with NASM...
+IntDir=.\..\..\objs\VC\Release\SDL
+InputPath=..\tmap_vc.nas
+InputName=tmap_vc
+
+"$(IntDir)/$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	nasm -g -o $(IntDir)/$(InputName).obj -f win32 $(InputPath)
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "Srb2SDL - Win32 Debug"
+
+# Begin Custom Build - Compiling $(InputName).nas with NASM...
+IntDir=.\..\..\objs\VC\Debug\SDL
+InputPath=..\tmap_vc.nas
+InputName=tmap_vc
+
+"$(IntDir)/$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	nasm -g -o $(IntDir)/$(InputName).obj -f win32 $(InputPath)
+
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# End Group
+# Begin Group "D_Doom"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\comptime.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\d_clisrv.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\d_clisrv.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\d_event.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\d_main.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\d_main.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\d_net.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\d_net.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\d_netcmd.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\d_netcmd.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\d_netfil.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\d_netfil.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\d_player.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\d_think.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\d_ticcmd.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\dehacked.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\dehacked.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\doomdata.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\doomdef.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\doomstat.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\doomtype.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\z_zone.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\z_zone.h
+# End Source File
+# End Group
+# Begin Group "F_Frame"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\f_finale.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\f_finale.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\f_wipe.c
+# End Source File
+# End Group
+# Begin Group "G_Game"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\g_game.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\g_game.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\g_input.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\g_input.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\g_state.h
+# End Source File
+# End Group
+# Begin Group "H_Hud"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\am_map.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\am_map.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\command.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\command.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\console.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\console.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\hu_stuff.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hu_stuff.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\st_stuff.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\st_stuff.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\y_inter.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\y_inter.h
+# End Source File
+# End Group
+# Begin Group "Hw_Hardware"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\hardware\hw3dsdrv.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw3sound.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw3sound.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_bsp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_cache.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_data.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_defs.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_dll.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_draw.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_drv.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_glide.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_glob.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_light.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_light.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_main.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_main.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_md2.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_md2.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hw_trick.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hardware\hws_data.h
+# End Source File
+# End Group
+# Begin Group "I_Interface"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\byteptr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\i_joy.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\i_net.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\i_sound.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\i_system.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\i_tcp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\i_tcp.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\i_video.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\keys.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\mserv.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mserv.h
+# End Source File
+# End Group
+# Begin Group "M_Misc"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\m_argv.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_argv.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_bbox.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_bbox.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_cheat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_cheat.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_dllist.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_fixed.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_fixed.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_menu.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_menu.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_misc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_misc.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_queue.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_queue.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_random.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_random.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\m_swap.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\string.c
+# End Source File
+# End Group
+# Begin Group "P_Play"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\info.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\info.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_ceilng.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_enemy.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_fab.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_floor.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_inter.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_lights.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_local.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_map.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_maputl.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_maputl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_mobj.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_mobj.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_polyobj.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_polyobj.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_pspr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_saveg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_saveg.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_setup.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_setup.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_sight.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_spec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_spec.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_telept.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_tick.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_tick.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\p_user.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\tables.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\tables.h
+# End Source File
+# End Group
+# Begin Group "R_Rend"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\r_bsp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_bsp.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_data.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_data.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_defs.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_draw.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_draw.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_draw16.c
+# PROP Exclude_From_Build 1
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_draw8.c
+# PROP Exclude_From_Build 1
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_local.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_main.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_main.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_plane.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_plane.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_segs.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_segs.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_sky.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_sky.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_splats.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_splats.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_state.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_things.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\r_things.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\screen.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\screen.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\v_video.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\v_video.h
+# End Source File
+# End Group
+# Begin Group "S_Sounds"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\s_sound.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\s_sound.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\sounds.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\sounds.h
+# End Source File
+# End Group
+# Begin Group "W_Wad"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\lzf.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lzf.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\md5.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\md5.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\w_wad.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\w_wad.h
+# End Source File
+# End Group
+# Begin Group "Docs"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\doc\copying
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\doc\faq.txt
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\readme.txt
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\doc\source.txt
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\win32\Srb2win.ico
+# End Source File
+# End Target
+# End Project
diff --git a/src/sdl2/Srb2SDL.dsw b/src/sdl2/Srb2SDL.dsw
new file mode 100644
index 000000000..4f8f7bdce
--- /dev/null
+++ b/src/sdl2/Srb2SDL.dsw
@@ -0,0 +1,74 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "Srb2SDL"=.\Srb2SDL.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name libpng
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name zlib
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "libpng"="..\..\libs\libpng-src\projects\visualc6\libpng.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name zlib
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "s_openal"=..\hardware\s_openal\s_openal.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "zlib"=..\..\libs\zlib\projects\visualc6\zlib.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/src/sdl2/Srb2SDL.ico b/src/sdl2/Srb2SDL.ico
new file mode 100644
index 0000000000000000000000000000000000000000..5ab791af37f815c0164e6053c34879ecf0c3fff0
GIT binary patch
literal 2238
zcmZQzU}RuqP*7k1gB2VM3}Orn3>pj!3?Lx~29P`lSgwHuOhE`n2n8Y=7(kGLp`n3+
zfdP!c1jB&?2N(|AIl%DY)G~&Kh6aZJV93Dm|33o*0~mt|hX4QnGko~{pJB;@1q@d{
z{Abws=s!c>mH!Oc$Nn>T?D)^1y6Qgz0|-yL!@y9rlYt>=8Uuq@F$0590K=8X{~0zO
z|Ig63`aeT<|9=LL;{Ob);r|&JLjN-`c-~=Pu-(bPU^tC|LA98HK{9~h%9Z~N8#n%E
z=<EB>ke&UX!NcP}gQ_aT9SjV27#J9KGB7YqV_;w?W?*0lV0e7xKg02j{~1>I{b%UU
z{?AbC@t+}F^*=)>!+!=(hC2+l3_BSN8KyC)G88jNG6XPuxbmOj(Z>G_SNi@l9LxUC
zu*2g&!z$JP467LaGfZN*!%)SrlOc&=8iN-@F@q690K@+){~7*o{Lk>e??1!;?Eeh^
zJ^nNNSA~Ss9fms$I~jH|Ok<eFP|Q%w5CB&Hf#LtgM-2b_t}y)1KF09hV+X^3Rgmec
z8167kV%W)0#W0N_iJ_Rmiy?r)h~fX0#|-~B9%uO9x0>O9c0a>^k79=Zs^JVEAKYQ^
zWZ21I%P@_>kfE4Cl_7vZlHvcAD-8cPZe;l1*T?WbJDcIZhX=!dRaJ0wVTKL^!~e%u
z82%sM$nbx4AH)CtY=-~E9t{7(RT=(=GBDinWMJ57%fK+rkb$9Cm4P8Zl7Zp>hbs*K
zA8lm#f2EJ%|FLX_|2sSw{;yJH_`iyQ;m#xmhMiRm4AYVr7>d0Z7y^tyY2^yT|Nk2q
z{{Qb|`2Rnf;s1XRhX4On!D;Bu9R`M-I~f?JO=DmvE@of|2w-6N@c#<KqyHNjuKe#~
zIQBoAVaI<DhE@MnaU~yy$N#S|9RI(OVfFt$hW`KA48{LF7{dRn;z~XYSN>mN*!X`V
zL*M^ChV1{@3?BbI7*zkOLeevq0J`%3F~i3H#~J$muV%>p-_PLjznDSwe>elK0J`%3
z1H;Duj~M#?Ut!4pe~iK7{|*LKP~d<tmH@i)|3AaV|Nj~K{{Lsl{{NrB<NtpKRZs>4
zVJrdk>C-2MXV0E7+`4s(;oP}%42KRKV%WBA8^fwqs~G0Zo5wI|(j<nqwl;>Usw#%O
zygY`aq$Gy0urLNMFE0i=J39s=BO?YiH8ln)DJcd%K0Z+P9}xUS7}eVMA3w6chY5ZB
zURjAEucRyv0$)FW7XI?%Pj^9OW#vbhVg?3wF&Gg4*4^D*SP23MX(gDf*jF*J?_Ci2
z0=WD~ki3$T5{MEL`(D}I4bol?lmGae;lI+ScW>Ul{qRXiOst@?vb(FYvhov5{{7n@
zpFRshz?ZM7m6es9AO$e#w{JiEdCTw?BL5a-a%E+4ci}gf{Ch$6|DPE?LgWQ2U<zQ;
z4D5pJ48IvZLFLOK@|Bf^h2Ot@`CeX8_)+j(aU}ygRK5%*52Js65PVl#Sqn2i3nmVu
z8Q29sRaRDhhdK~$K2-h_!<%>CLF_N@KsLMwF_G|h1_p*tpvb7K{LcRF9Xo^xSMU?$
zi}z5$Z^B>8D=I20Yv9scAZZ2$aCB9amwhZPFE1~z1Y1{GSqYDz@`B3B3Xl{Se^sif
z00F3G28NI2<%N}CDG>2ROsS@_pc8B}#Q1OJ<rOgf6+e{4m6$p^I}0Il3}EdQmESAC
z7E}~erhb<#>I4Cpf*<AOpr|efD=4ohsH`mP?Ck95=!7YN(GVlxo-2ciBj}2Xa%lWk
zRv<)?S>**4AirYKi>!*O?Ek31{y+N<`#%f}_8%A+>K`yL)E{7AsBeH^XeG-CqG4_T
wwIV>6xq*R!y@7#&{{RDnJwy-V{{{xI+W&kE4E6sT80!B&VEq682Rn+501#2s+5i9m

literal 0
HcmV?d00001

diff --git a/src/sdl2/dosstr.c b/src/sdl2/dosstr.c
new file mode 100644
index 000000000..f9bbee9b4
--- /dev/null
+++ b/src/sdl2/dosstr.c
@@ -0,0 +1,38 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// This file is in the public domain.
+// (Re)written by Graue in 2006.
+//
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief String uppercasing/lowercasing functions for non-DOS non-Win32
+///        systems
+
+#include "../doomtype.h"
+
+#ifndef HAVE_DOSSTR_FUNCS
+
+#include <ctype.h>
+
+int strupr(char *n)
+{
+	while (*n != '\0')
+	{
+		*n = toupper(*n);
+		n++;
+	}
+	return 1;
+}
+
+int strlwr(char *n)
+{
+	while (*n != '\0')
+	{
+		*n = tolower(*n);
+		n++;
+	}
+	return 1;
+}
+
+#endif
diff --git a/src/sdl2/endtxt.c b/src/sdl2/endtxt.c
new file mode 100644
index 000000000..1d7756b4d
--- /dev/null
+++ b/src/sdl2/endtxt.c
@@ -0,0 +1,236 @@
+/*
+ * Function to write the SRB2 end message text
+ *
+ * Copyright (C) 1998 by Udo Munk <udo@umserver.umnet.de>
+ *
+ * This code is provided AS IS and there are no guarantees, none.
+ * Feel free to share and modify.
+ */
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief Support to show ENDOOM text
+///
+/// Loads the lump ENDOOM, set up the console to print
+/// out the colors and text
+
+#include <stdio.h>
+#include <stdlib.h>
+
+// need this 19990118 by Kin
+#include "../doomdef.h"
+#include "../w_wad.h"
+#include "../z_zone.h"
+#include "endtxt.h"
+/**	\brief	The ShowEndTxt function
+
+
+  Prints out the ENDOOM the way DOOM.EXE/DOOM2.EXE did for Win32 or Linux/GNU
+
+	\return	void
+
+
+*/
+
+void ShowEndTxt(void)
+{
+#if !(defined (_WIN32_WCE) || defined (_XBOX) || defined (_arch_dreamcast))
+	INT32 i;
+	UINT16 j, att = 0;
+	INT32 nlflag = 1;
+#ifdef _WIN32
+	HANDLE co = GetStdHandle(STD_OUTPUT_HANDLE);
+	DWORD mode, bytesWritten;
+	CONSOLE_SCREEN_BUFFER_INFO backupcon;
+	COORD resizewin = {80,-1};
+	CHAR let = 0;
+#endif
+	UINT16 *ptext;
+	void *data;
+	lumpnum_t endoomnum = W_GetNumForName("ENDOOM");
+	//char *col;
+
+	/* if the xterm has more then 80 columns we need to add nl's */
+	/* doesn't work, COLUMNS is not in the environment at this time ???
+	col = I_getenv("COLUMNS");
+	if (col) {
+		if (atoi(col) > 80)
+			nlflag++;
+	}
+	*/
+
+	/* get the lump with the text */
+	data = ptext = W_CacheLumpNum(endoomnum, PU_CACHE);
+
+#ifdef _WIN32
+	if (co == INVALID_HANDLE_VALUE || GetFileType(co) != FILE_TYPE_CHAR || !GetConsoleMode(co, &mode)) // test if it a good handle
+	{
+		Z_Free(data);
+		return;
+	}
+
+	backupcon.wAttributes = FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE; // Just in case
+	GetConsoleScreenBufferInfo(co, &backupcon); //Store old state
+	resizewin.Y = backupcon.dwSize.Y;
+	if (backupcon.dwSize.X < resizewin.X)
+		SetConsoleScreenBufferSize(co, resizewin);
+
+	for (i=1; i<=80*25; i++) // print 80x25 text and deal with the attributes too
+	{
+		j = (UINT16)(*ptext >> 8); // attribute first
+		let = (char)(*ptext & 0xff); // text second
+		if (j != att) // attribute changed?
+		{
+			att = j; // save current attribute
+			SetConsoleTextAttribute(co, j); //set fg and bg color for buffer
+		}
+
+		WriteConsoleA(co, &let,  1, &bytesWritten, NULL); // now the text
+
+		if (nlflag && !(i % 80) && backupcon.dwSize.X > resizewin.X) // do we need a nl?
+		{
+			att = backupcon.wAttributes;
+			SetConsoleTextAttribute(co, att); // all attributes off
+			WriteConsoleA(co, "\n",  1, &bytesWritten, NULL); // newline to console
+		}
+		ptext++;
+	}
+	SetConsoleTextAttribute(co, backupcon.wAttributes); // all attributes off
+#else
+	/* print 80x25 text and deal with the attributes too */
+	for (i=1; i<=80*25; i++) {
+		/* attribute first */
+		/* attribute changed? */
+		if ((j = *ptext >> 8) != att) {
+			/* save current attribute */
+			att = j;
+			/* set new attribute, forground color first */
+			printf("\033[");
+			switch (j & 0x0f) {
+			case 0:		/* black */
+				printf("30");
+				break;
+			case 1:		/* blue */
+				printf("34");
+				break;
+			case 2:		/* green */
+				printf("32");
+				break;
+			case 3:		/* cyan */
+				printf("36");
+				break;
+			case 4:		/* red */
+				printf("31");
+				break;
+			case 5:		/* magenta */
+				printf("35");
+				break;
+			case 6:		/* brown */
+				printf("33");
+				break;
+			case 7:		/* bright grey */
+				printf("37");
+				break;
+			case 8:		/* dark grey */
+				printf("1;30");
+				break;
+			case 9:		/* bright blue */
+				printf("1;34");
+				break;
+			case 10:	/* bright green */
+				printf("1;32");
+				break;
+			case 11:	/* bright cyan */
+				printf("1;36");
+				break;
+			case 12:	/* bright red */
+				printf("1;31");
+				break;
+			case 13:	/* bright magenta */
+				printf("1;35");
+				break;
+			case 14:	/* yellow */
+				printf("1;33");
+				break;
+			case 15:	/* white */
+				printf("1;37");
+				break;
+			}
+			printf("m");
+			/* now background color */
+			printf("\033[");
+			switch ((j >> 4) & 0x0f) {
+			case 0:		/* black */
+				printf("40");
+				break;
+			case 1:		/* blue */
+				printf("44");
+				break;
+			case 2:		/* green */
+				printf("42");
+				break;
+			case 3:		/* cyan */
+				printf("46");
+				break;
+			case 4:		/* red */
+				printf("41");
+				break;
+			case 5:		/* magenta */
+				printf("45");
+				break;
+			case 6:		/* brown */
+				printf("43");
+				break;
+			case 7:		/* bright grey */
+				printf("47");
+				break;
+			case 8:		/* dark grey */
+				printf("1;40");
+				break;
+			case 9:		/* bright blue */
+				printf("1;44");
+				break;
+			case 10:	/* bright green */
+				printf("1;42");
+				break;
+			case 11:	/* bright cyan */
+				printf("1;46");
+				break;
+			case 12:	/* bright red */
+				printf("1;41");
+				break;
+			case 13:	/* bright magenta */
+				printf("1;45");
+				break;
+			case 14:	/* yellow */
+				printf("1;43");
+				break;
+			case 15:	/* white */
+				printf("1;47");
+				break;
+			}
+			printf("m");
+		}
+
+		/* now the text */
+		printf("%c",*ptext++ & 0xff);
+
+		/* do we need a nl? */
+		if (nlflag)
+		{
+			if (!(i % 80))
+			{
+				printf("\033[0m");
+				att = 0;
+				printf("\n");
+			}
+		}
+	}
+	/* all attributes off */
+	printf("\033[0m");
+#endif
+	if (nlflag)
+		printf("\n");
+
+	Z_Free(data);
+#endif
+}
diff --git a/src/sdl2/endtxt.h b/src/sdl2/endtxt.h
new file mode 100644
index 000000000..41f8e51ad
--- /dev/null
+++ b/src/sdl2/endtxt.h
@@ -0,0 +1,24 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 1998-2000 by DooM Legacy Team.
+//
+// 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.
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief Support to show ENDOOM text
+
+#ifndef __ENDTXT__
+#define __ENDTXT__
+
+void ShowEndTxt (void);
+
+#endif
diff --git a/src/sdl2/filter/filters.c b/src/sdl2/filter/filters.c
new file mode 100644
index 000000000..1b2346e8e
--- /dev/null
+++ b/src/sdl2/filter/filters.c
@@ -0,0 +1,1000 @@
+#include <math.h>
+#include "filters.h"
+
+//Alam_GBC: C file based on sms_sdl's filter.c
+
+/* 2X SAI Filter */
+static Uint32 colorMask = 0xF7DEF7DE;
+static Uint32 lowPixelMask = 0x08210821;
+static Uint32 qcolorMask = 0xE79CE79C;
+static Uint32 qlowpixelMask = 0x18631863;
+static Uint32 redblueMask = 0xF81F;
+static Uint32 greenMask = 0x7E0;
+
+SDL_Surface *filter_2x(SDL_Surface *src, SDL_Rect *srcclp, filter_2 filter)
+{
+	return filter_2xe(src,srcclp,filter,0,0,0);
+}
+
+SDL_Surface *filter_2xe(SDL_Surface *src, SDL_Rect *srcclp, filter_2 filter,Uint8 R, Uint8 G, Uint8 B)
+{
+	SDL_Surface *srcfilter = NULL;
+	SDL_Rect dstclp = {0,3,0,0};
+	SDL_Surface *dstfilter = NULL;
+	Uint32 Fillcolor = 0;
+	if(!src || !filter) return NULL; // Need src and filter
+	if(srcclp) // size by clp
+	{
+		dstclp.w = srcclp->w; //clp's width
+		dstclp.h = srcclp->h; //clp's height
+	}
+	else // size by src
+	{
+		dstclp.w = (Uint16)src->w; //src's width
+		dstclp.h = (Uint16)src->h; //src's height
+	}
+	if(filter == hq2x32 || filter == lq2x32) // src 0888 surface
+		srcfilter = SDL_CreateRGBSurface(SDL_SWSURFACE,dstclp.w,dstclp.h+6,32,0x00FF0000,0x0000FF00,0x000000FF,0x00);
+	else // src 565 surface
+		srcfilter = SDL_CreateRGBSurface(SDL_SWSURFACE,dstclp.w,dstclp.h+6,16,0x0000F800,0x000007E0,0x0000001F,0x00);
+	if(!srcfilter) return NULL; //No Memory?
+	Fillcolor = SDL_MapRGB(srcfilter->format,R,G,B); //Choose color
+	SDL_FillRect(srcfilter,NULL,Fillcolor); //fill it
+	if(filter == filter_hq2x || filter == hq2x32 || filter == lq2x32) // dst 0888 surface
+		dstfilter = SDL_CreateRGBSurface(SDL_SWSURFACE,dstclp.w*2,dstclp.h*2,32,0x00FF0000,0x0000FF00,0x000000FF,0x00);
+	else // dst 565 surface
+		dstfilter = SDL_CreateRGBSurface(SDL_SWSURFACE,dstclp.w*2,dstclp.h*2,16,0x0000F800,0x000007E0,0x0000001F,0x00);
+	if(!dstfilter || SDL_BlitSurface(src,srcclp,srcfilter,&dstclp) == -1) // No dstfilter or Blit failed
+	{
+		SDL_FreeSurface(srcfilter); // Free memory
+		return NULL; //No Memory?
+	}
+	else // have dstfilter ready and srcfilter done
+	{
+		SDL_FillRect(dstfilter,NULL,Fillcolor); //fill it too
+		filter(FILTER(srcfilter,dstfilter)); //filtering
+		SDL_FreeSurface(srcfilter); //almost
+	}
+	return dstfilter; //done
+}
+
+
+int filter_init_2xsai(SDL_PixelFormat *BitFormat)
+{
+	if (!BitFormat || BitFormat->BytesPerPixel != 2 ||BitFormat->Amask != 0x0)
+	{
+		return 0;
+	}
+	else if (BitFormat->Rmask == 0xF800 && BitFormat->Gmask == 0x7E0
+		&& BitFormat->Bmask == 0x1F && BitFormat->BitsPerPixel == 16) //565
+	{
+		colorMask = 0xF7DEF7DE;
+		lowPixelMask = 0x08210821;
+		qcolorMask = 0xE79CE79C;
+		qlowpixelMask = 0x18631863;
+		redblueMask = 0xF81F;
+		greenMask = 0x7E0;
+	}
+	else if (BitFormat->Rmask == 0x7C00 && BitFormat->Gmask == 0x3E0
+		&& BitFormat->Bmask == 0x1F && BitFormat->BitsPerPixel == 15) //555
+	{
+		colorMask = 0x7BDE7BDE;
+		lowPixelMask = 0x04210421;
+		qcolorMask = 0x739C739C;
+		qlowpixelMask = 0x0C630C63;
+		redblueMask = 0x7C1F;
+		greenMask = 0x3E0;
+	}
+	else
+	{
+		return 0;
+	}
+#ifdef MMX
+	if(BitFormat->Gmask == 0x7E0) Init_2xSaIMMX(565);
+	else Init_2xSaIMMX(555);
+#endif
+	return 1;
+}
+
+
+FUNCINLINE static ATTRINLINE int GetResult1 (Uint32 A, Uint32 B, Uint32 C, Uint32 D, Uint32 E)
+{
+  int x = 0;
+  int y = 0;
+  int r = 0;
+  (void)E;
+
+  if (A == C)
+	x += 1;
+  else if (B == C)
+	  y += 1;
+  if (A == D)
+    x += 1;
+  else if (B == D)
+	  y += 1;
+  if (x <= 1)
+	  r += 1;
+  if (y <= 1)
+	  r -= 1;
+  return r;
+}
+
+FUNCINLINE static ATTRINLINE int GetResult2 (Uint32 A, Uint32 B, Uint32 C, Uint32 D, Uint32 E)
+{
+  int x = 0;
+  int y = 0;
+  int r = 0;
+  (void)E;
+
+  if (A == C)
+	  x += 1;
+  else if (B == C)
+    y += 1;
+  if (A == D)
+    x += 1;
+  else if (B == D)
+    y += 1;
+  if (x <= 1)
+    r -= 1;
+  if (y <= 1)
+    r += 1;
+  return r;
+}
+
+FUNCINLINE static ATTRINLINE int GetResult (Uint32 A, Uint32 B, Uint32 C, Uint32 D)
+{
+  int x = 0;
+  int y = 0;
+  int r = 0;
+
+  if (A == C)
+    x += 1;
+  else if (B == C)
+    y += 1;
+  if (A == D)
+    x += 1;
+  else if (B == D)
+    y += 1;
+  if (x <= 1)
+    r += 1;
+  if (y <= 1)
+    r -= 1;
+  return r;
+}
+
+FUNCINLINE static ATTRINLINE Uint32 INTERPOLATE (Uint32 A, Uint32 B)
+{
+  if (A != B)
+  {
+    return (((A & colorMask) >> 1) + ((B & colorMask) >> 1) +
+		(A & B & lowPixelMask));
+  }
+  else
+	  return A;
+}
+
+FUNCINLINE static ATTRINLINE Uint32 Q_INTERPOLATE (Uint32 A, Uint32 B, Uint32 C, Uint32 D)
+{
+  register Uint32 x = ((A & qcolorMask) >> 2) +
+	((B & qcolorMask) >> 2) +
+	((C & qcolorMask) >> 2) + ((D & qcolorMask) >> 2);
+  register Uint32 y = (A & qlowpixelMask) +
+	(B & qlowpixelMask) + (C & qlowpixelMask) + (D & qlowpixelMask);
+  y = (y >> 2) & qlowpixelMask;
+  return x + y;
+}
+
+#define BLUE_MASK565 0x001F001F
+#define RED_MASK565 0xF800F800
+#define GREEN_MASK565 0x07E007E0
+
+#define BLUE_MASK555 0x001F001F
+#define RED_MASK555 0x7C007C00
+#define GREEN_MASK555 0x03E003E0
+
+void filter_super2xsai(Uint8 *srcPtr, Uint32 srcPitch,
+		  Uint8 *dstPtr, Uint32 dstPitch,
+		 int width, int height)
+{
+	Uint16 *bP;
+    Uint8  *dP;
+    Uint32 inc_bP;
+    Uint32 Nextline = srcPitch >> 1;
+
+	Uint32 finish;
+	inc_bP = 1;
+
+	for (; height; height--)
+	{
+	    bP = (Uint16 *) srcPtr;
+	    dP = (Uint8 *) dstPtr;
+
+	    for (finish = width; finish; finish -= inc_bP)
+	    {
+		Uint32 color4, color5, color6;
+		Uint32 color1, color2, color3;
+		Uint32 colorA0, colorA1, colorA2, colorA3,
+		    colorB0, colorB1, colorB2, colorB3, colorS1, colorS2;
+		Uint32 product1a, product1b, product2a, product2b;
+
+//---------------------------------------    B1 B2
+//                                         4  5  6 S2
+//                                         1  2  3 S1
+//                                           A1 A2
+
+		colorB0 = *(bP - Nextline - 1);
+		colorB1 = *(bP - Nextline);
+		colorB2 = *(bP - Nextline + 1);
+		colorB3 = *(bP - Nextline + 2);
+
+		color4 = *(bP - 1);
+		color5 = *(bP);
+		color6 = *(bP + 1);
+		colorS2 = *(bP + 2);
+
+		color1 = *(bP + Nextline - 1);
+		color2 = *(bP + Nextline);
+		color3 = *(bP + Nextline + 1);
+		colorS1 = *(bP + Nextline + 2);
+
+		colorA0 = *(bP + Nextline + Nextline - 1);
+		colorA1 = *(bP + Nextline + Nextline);
+		colorA2 = *(bP + Nextline + Nextline + 1);
+		colorA3 = *(bP + Nextline + Nextline + 2);
+
+//--------------------------------------
+		if (color2 == color6 && color5 != color3)
+		{
+		    product2b = product1b = color2;
+		}
+		else if (color5 == color3 && color2 != color6)
+		{
+		    product2b = product1b = color5;
+		}
+		else if (color5 == color3 && color2 == color6)
+		{
+		    register int r = 0;
+
+		    r += GetResult (color6, color5, color1, colorA1);
+		    r += GetResult (color6, color5, color4, colorB1);
+		    r += GetResult (color6, color5, colorA2, colorS1);
+		    r += GetResult (color6, color5, colorB2, colorS2);
+
+		    if (r > 0)
+			product2b = product1b = color6;
+		    else if (r < 0)
+			product2b = product1b = color5;
+		    else
+		    {
+			product2b = product1b = INTERPOLATE (color5, color6);
+		    }
+		}
+		else
+		{
+		    if (color6 == color3 && color3 == colorA1
+			    && color2 != colorA2 && color3 != colorA0)
+			product2b =
+			    Q_INTERPOLATE (color3, color3, color3, color2);
+		    else if (color5 == color2 && color2 == colorA2
+			     && colorA1 != color3 && color2 != colorA3)
+			product2b =
+			    Q_INTERPOLATE (color2, color2, color2, color3);
+		    else
+			product2b = INTERPOLATE (color2, color3);
+
+		    if (color6 == color3 && color6 == colorB1
+			    && color5 != colorB2 && color6 != colorB0)
+			product1b =
+			    Q_INTERPOLATE (color6, color6, color6, color5);
+		    else if (color5 == color2 && color5 == colorB2
+			     && colorB1 != color6 && color5 != colorB3)
+			product1b =
+			    Q_INTERPOLATE (color6, color5, color5, color5);
+		    else
+			product1b = INTERPOLATE (color5, color6);
+		}
+
+		if (color5 == color3 && color2 != color6 && color4 == color5
+			&& color5 != colorA2)
+		    product2a = INTERPOLATE (color2, color5);
+		else
+		    if (color5 == color1 && color6 == color5
+			&& color4 != color2 && color5 != colorA0)
+		    product2a = INTERPOLATE (color2, color5);
+		else
+		    product2a = color2;
+
+		if (color2 == color6 && color5 != color3 && color1 == color2
+			&& color2 != colorB2)
+		    product1a = INTERPOLATE (color2, color5);
+		else
+		    if (color4 == color2 && color3 == color2
+			&& color1 != color5 && color2 != colorB0)
+		    product1a = INTERPOLATE (color2, color5);
+		else
+		    product1a = color5;
+
+#ifdef LSB_FIRST
+		product1a = product1a | (product1b << 16);
+		product2a = product2a | (product2b << 16);
+#else
+    product1a = (product1a << 16) | product1b;
+    product2a = (product2a << 16) | product2b;
+#endif
+		*((Uint32 *) dP) = product1a;
+		*((Uint32 *) (dP + dstPitch)) = product2a;
+
+		bP += inc_bP;
+		dP += sizeof (Uint32);
+	    }			// end of for ( finish= width etc..)
+
+	    srcPtr   += srcPitch;
+	    dstPtr   += dstPitch * 2;
+	}			// endof: for (; height; height--)
+}
+
+void filter_supereagle(Uint8 *srcPtr, Uint32 srcPitch, /* Uint8 *deltaPtr,  */
+		 Uint8 *dstPtr, Uint32 dstPitch, int width, int height)
+{
+    Uint8  *dP;
+    Uint16 *bP;
+    Uint32 inc_bP;
+
+
+
+	Uint32 finish;
+	Uint32 Nextline = srcPitch >> 1;
+
+	inc_bP = 1;
+
+	for (; height ; height--)
+	{
+	    bP = (Uint16 *) srcPtr;
+	    dP = dstPtr;
+	    for (finish = width; finish; finish -= inc_bP)
+	    {
+		Uint32 color4, color5, color6;
+		Uint32 color1, color2, color3;
+		Uint32 colorA1, colorA2, colorB1, colorB2, colorS1, colorS2;
+		Uint32 product1a, product1b, product2a, product2b;
+		colorB1 = *(bP - Nextline);
+		colorB2 = *(bP - Nextline + 1);
+
+		color4 = *(bP - 1);
+		color5 = *(bP);
+		color6 = *(bP + 1);
+		colorS2 = *(bP + 2);
+
+		color1 = *(bP + Nextline - 1);
+		color2 = *(bP + Nextline);
+		color3 = *(bP + Nextline + 1);
+		colorS1 = *(bP + Nextline + 2);
+
+		colorA1 = *(bP + Nextline + Nextline);
+		colorA2 = *(bP + Nextline + Nextline + 1);
+		// --------------------------------------
+		if (color2 == color6 && color5 != color3)
+		{
+		    product1b = product2a = color2;
+		    if ((color1 == color2) || (color6 == colorB2))
+		    {
+			product1a = INTERPOLATE (color2, color5);
+			product1a = INTERPOLATE (color2, product1a);
+//                       product1a = color2;
+		    }
+		    else
+		    {
+			product1a = INTERPOLATE (color5, color6);
+		    }
+
+		    if ((color6 == colorS2) || (color2 == colorA1))
+		    {
+			product2b = INTERPOLATE (color2, color3);
+			product2b = INTERPOLATE (color2, product2b);
+//                       product2b = color2;
+		    }
+		    else
+		    {
+			product2b = INTERPOLATE (color2, color3);
+		    }
+		}
+		else if (color5 == color3 && color2 != color6)
+		{
+		    product2b = product1a = color5;
+
+		    if ((colorB1 == color5) || (color3 == colorS1))
+		    {
+			product1b = INTERPOLATE (color5, color6);
+			product1b = INTERPOLATE (color5, product1b);
+//                       product1b = color5;
+		    }
+		    else
+		    {
+			product1b = INTERPOLATE (color5, color6);
+		    }
+
+		    if ((color3 == colorA2) || (color4 == color5))
+		    {
+			product2a = INTERPOLATE (color5, color2);
+			product2a = INTERPOLATE (color5, product2a);
+//                       product2a = color5;
+		    }
+		    else
+		    {
+			product2a = INTERPOLATE (color2, color3);
+		    }
+
+		}
+		else if (color5 == color3 && color2 == color6)
+		{
+		    register int r = 0;
+
+		    r += GetResult (color6, color5, color1, colorA1);
+		    r += GetResult (color6, color5, color4, colorB1);
+		    r += GetResult (color6, color5, colorA2, colorS1);
+		    r += GetResult (color6, color5, colorB2, colorS2);
+
+		    if (r > 0)
+		    {
+			product1b = product2a = color2;
+			product1a = product2b = INTERPOLATE (color5, color6);
+		    }
+		    else if (r < 0)
+		    {
+			product2b = product1a = color5;
+			product1b = product2a = INTERPOLATE (color5, color6);
+		    }
+		    else
+		    {
+			product2b = product1a = color5;
+			product1b = product2a = color2;
+		    }
+		}
+		else
+		{
+		    product2b = product1a = INTERPOLATE (color2, color6);
+		    product2b =
+			Q_INTERPOLATE (color3, color3, color3, product2b);
+		    product1a =
+			Q_INTERPOLATE (color5, color5, color5, product1a);
+
+		    product2a = product1b = INTERPOLATE (color5, color3);
+		    product2a =
+			Q_INTERPOLATE (color2, color2, color2, product2a);
+		    product1b =
+			Q_INTERPOLATE (color6, color6, color6, product1b);
+
+//                    product1a = color5;
+//                    product1b = color6;
+//                    product2a = color2;
+//                    product2b = color3;
+		}
+#ifdef LSB_FIRST
+		product1a = product1a | (product1b << 16);
+		product2a = product2a | (product2b << 16);
+#else
+    product1a = (product1a << 16) | product1b;
+    product2a = (product2a << 16) | product2b;
+#endif
+
+		*((Uint32 *) dP) = product1a;
+		*((Uint32 *) (dP + dstPitch)) = product2a;
+
+		bP += inc_bP;
+		dP += sizeof (Uint32);
+	    }			// end of for ( finish= width etc..)
+	    srcPtr += srcPitch;
+	    dstPtr += dstPitch * 2;
+	}			// endof: for (height; height; height--)
+}
+
+void filter_2xsai (Uint8 *srcPtr, Uint32 srcPitch,
+	     Uint8 *dstPtr, Uint32 dstPitch, int width, int height)
+{
+    Uint8  *dP;
+    Uint16 *bP;
+    Uint32 inc_bP;
+
+
+	Uint32 finish;
+	Uint32 Nextline = srcPitch >> 1;
+	inc_bP = 1;
+
+
+	for (; height; height--)
+	{
+	    bP = (Uint16 *) srcPtr;
+	    dP = dstPtr;
+
+	    for (finish = width; finish; finish -= inc_bP)
+	    {
+
+		register Uint32 colorA, colorB;
+		Uint32 colorC, colorD,
+		    colorE, colorF, colorG, colorH,
+		    colorI, colorJ, colorK, colorL,
+
+		    colorM, colorN, colorO, colorP;
+		Uint32 product, product1, product2;
+
+//---------------------------------------
+// Map of the pixels:                    I|E F|J
+//                                       G|A B|K
+//                                       H|C D|L
+//                                       M|N O|P
+		colorI = *(bP - Nextline - 1);
+		colorE = *(bP - Nextline);
+		colorF = *(bP - Nextline + 1);
+		colorJ = *(bP - Nextline + 2);
+
+		colorG = *(bP - 1);
+		colorA = *(bP);
+		colorB = *(bP + 1);
+		colorK = *(bP + 2);
+
+		colorH = *(bP + Nextline - 1);
+		colorC = *(bP + Nextline);
+		colorD = *(bP + Nextline + 1);
+		colorL = *(bP + Nextline + 2);
+
+		colorM = *(bP + Nextline + Nextline - 1);
+		colorN = *(bP + Nextline + Nextline);
+		colorO = *(bP + Nextline + Nextline + 1);
+		colorP = *(bP + Nextline + Nextline + 2);
+
+		if ((colorA == colorD) && (colorB != colorC))
+		{
+		    if (((colorA == colorE) && (colorB == colorL)) ||
+			    ((colorA == colorC) && (colorA == colorF)
+			     && (colorB != colorE) && (colorB == colorJ)))
+		    {
+			product = colorA;
+		    }
+		    else
+		    {
+			product = INTERPOLATE (colorA, colorB);
+		    }
+
+		    if (((colorA == colorG) && (colorC == colorO)) ||
+			    ((colorA == colorB) && (colorA == colorH)
+			     && (colorG != colorC) && (colorC == colorM)))
+		    {
+			product1 = colorA;
+		    }
+		    else
+		    {
+			product1 = INTERPOLATE (colorA, colorC);
+		    }
+		    product2 = colorA;
+		}
+		else if ((colorB == colorC) && (colorA != colorD))
+		{
+		    if (((colorB == colorF) && (colorA == colorH)) ||
+			    ((colorB == colorE) && (colorB == colorD)
+			     && (colorA != colorF) && (colorA == colorI)))
+		    {
+			product = colorB;
+		    }
+		    else
+		    {
+			product = INTERPOLATE (colorA, colorB);
+		    }
+
+		    if (((colorC == colorH) && (colorA == colorF)) ||
+			    ((colorC == colorG) && (colorC == colorD)
+			     && (colorA != colorH) && (colorA == colorI)))
+		    {
+			product1 = colorC;
+		    }
+		    else
+		    {
+			product1 = INTERPOLATE (colorA, colorC);
+		    }
+		    product2 = colorB;
+		}
+		else if ((colorA == colorD) && (colorB == colorC))
+		{
+		    if (colorA == colorB)
+		    {
+			product = colorA;
+			product1 = colorA;
+			product2 = colorA;
+		    }
+		    else
+		    {
+			register int r = 0;
+
+			product1 = INTERPOLATE (colorA, colorC);
+			product = INTERPOLATE (colorA, colorB);
+
+			r +=
+			    GetResult1 (colorA, colorB, colorG, colorE,
+					colorI);
+			r +=
+			    GetResult2 (colorB, colorA, colorK, colorF,
+					colorJ);
+			r +=
+			    GetResult2 (colorB, colorA, colorH, colorN,
+					colorM);
+			r +=
+			    GetResult1 (colorA, colorB, colorL, colorO,
+					colorP);
+
+			if (r > 0)
+			    product2 = colorA;
+			else if (r < 0)
+			    product2 = colorB;
+			else
+			{
+			    product2 =
+				Q_INTERPOLATE (colorA, colorB, colorC,
+					       colorD);
+			}
+		    }
+		}
+		else
+		{
+		    product2 = Q_INTERPOLATE (colorA, colorB, colorC, colorD);
+
+		    if ((colorA == colorC) && (colorA == colorF)
+			    && (colorB != colorE) && (colorB == colorJ))
+		    {
+			product = colorA;
+		    }
+		    else
+			if ((colorB == colorE) && (colorB == colorD)
+			    && (colorA != colorF) && (colorA == colorI))
+		    {
+			product = colorB;
+		    }
+		    else
+		    {
+			product = INTERPOLATE (colorA, colorB);
+		    }
+
+		    if ((colorA == colorB) && (colorA == colorH)
+			    && (colorG != colorC) && (colorC == colorM))
+		    {
+			product1 = colorA;
+		    }
+		    else
+			if ((colorC == colorG) && (colorC == colorD)
+			    && (colorA != colorH) && (colorA == colorI))
+		    {
+			product1 = colorC;
+		    }
+		    else
+		    {
+			product1 = INTERPOLATE (colorA, colorC);
+		    }
+		}
+#ifdef LSB_FIRST
+		product = colorA | (product << 16);
+		product1 = product1 | (product2 << 16);
+#else
+    product = (colorA << 16) | product;
+    product1 = (product1 << 16) | product2;
+#endif
+		*((Uint32 *) dP) = product;
+		*((Uint32 *) (dP + dstPitch)) = product1;
+
+		bP += inc_bP;
+		dP += sizeof (Uint32);
+	    }			// end of for ( finish= width etc..)
+
+	    srcPtr += srcPitch;
+	    dstPtr += dstPitch * 2;
+	}			// endof: for (height; height; height--)
+}
+
+#if 0
+static inline Uint32 Bilinear(Uint32 A, Uint32 B, Uint32 x)
+{
+    unsigned long areaA, areaB;
+    unsigned long result;
+
+    if (A == B)
+	return A;
+
+    areaB = (x >> 11) & 0x1f;	// reduce 16 bit fraction to 5 bits
+    areaA = 0x20 - areaB;
+
+    A = (A & redblueMask) | ((A & greenMask) << 16);
+    B = (B & redblueMask) | ((B & greenMask) << 16);
+
+    result = ((areaA * A) + (areaB * B)) >> 5;
+
+    return (result & redblueMask) | ((result >> 16) & greenMask);
+
+}
+
+static inline Uint32 Bilinear4 (Uint32 A, Uint32 B, Uint32 C, Uint32 D, Uint32 x,
+			 Uint32 y)
+{
+    unsigned long areaA, areaB, areaC, areaD;
+    unsigned long result, xy;
+
+    x = (x >> 11) & 0x1f;
+    y = (y >> 11) & 0x1f;
+    xy = (x * y) >> 5;
+
+    A = (A & redblueMask) | ((A & greenMask) << 16);
+    B = (B & redblueMask) | ((B & greenMask) << 16);
+    C = (C & redblueMask) | ((C & greenMask) << 16);
+    D = (D & redblueMask) | ((D & greenMask) << 16);
+
+    areaA = 0x20 + xy - x - y;
+    areaB = x - xy;
+    areaC = y - xy;
+    areaD = xy;
+
+    result = ((areaA * A) + (areaB * B) + (areaC * C) + (areaD * D)) >> 5;
+
+    return (result & redblueMask) | ((result >> 16) & greenMask);
+}
+#endif
+
+
+void filter_advmame2x(Uint8 *srcPtr, Uint32 srcPitch,
+                      Uint8 *dstPtr, Uint32 dstPitch,
+							        int width, int height)
+{
+	unsigned int nextlineSrc = srcPitch / sizeof(short);
+	short *p = (short *)srcPtr;
+
+	unsigned int nextlineDst = dstPitch / sizeof(short);
+	short *q = (short *)dstPtr;
+
+	while(height--) {
+    int i = 0, j = 0;
+		for(i = 0; i < width; ++i, j += 2) {
+			short B = *(p + i - nextlineSrc);
+			short D = *(p + i - 1);
+			short E = *(p + i);
+			short F = *(p + i + 1);
+			short H = *(p + i + nextlineSrc);
+
+			*(q + j) = (short)(D == B && B != F && D != H ? D : E);
+			*(q + j + 1) = (short)(B == F && B != D && F != H ? F : E);
+			*(q + j + nextlineDst) = (short)(D == H && D != B && H != F ? D : E);
+			*(q + j + nextlineDst + 1) = (short)(H == F && D != H && B != F ? F : E);
+		}
+		p += nextlineSrc;
+		q += nextlineDst << 1;
+	}
+}
+
+
+void filter_tv2x(Uint8 *srcPtr, Uint32 srcPitch,
+                 Uint8 *dstPtr, Uint32 dstPitch,
+                 int width, int height)
+{
+  unsigned int nextlineSrc = srcPitch / sizeof(Uint16);
+	Uint16 *p = (Uint16 *)srcPtr;
+
+	unsigned int nextlineDst = dstPitch / sizeof(Uint16);
+	Uint16 *q = (Uint16 *)dstPtr;
+
+	while(height--) {
+    int i = 0, j = 0;
+		for(; i < width; ++i, j += 2) {
+			Uint16 p1 = *(p + i);
+      Uint32 pi;
+
+			pi = (((p1 & redblueMask) * 7) >> 3) & redblueMask;
+			pi |= (((p1 & greenMask) * 7) >> 3) & greenMask;
+
+      *(q + j) = (Uint16)p1;
+      *(q + j + 1) = (Uint16)p1;
+			*(q + j + nextlineDst) = (Uint16)pi;
+			*(q + j + nextlineDst + 1) = (Uint16)pi;
+	  }
+	  p += nextlineSrc;
+	  q += nextlineDst << 1;
+	}
+}
+
+void filter_normal2x(Uint8 *srcPtr, Uint32 srcPitch,
+               Uint8 *dstPtr, Uint32 dstPitch,
+               int width, int height)
+{
+	unsigned int nextlineSrc = srcPitch / sizeof(Uint16);
+	Uint16 *p = (Uint16 *)srcPtr;
+
+	unsigned int nextlineDst = dstPitch / sizeof(Uint16);
+	Uint16 *q = (Uint16 *)dstPtr;
+
+	while(height--) {
+	int i = 0, j = 0;
+		for(; i < width; ++i, j += 2) {
+			Uint16 color = *(p + i);
+
+			*(q + j) = color;
+			*(q + j + 1) = color;
+			*(q + j + nextlineDst) = color;
+			*(q + j + nextlineDst + 1) = color;
+		}
+		p += nextlineSrc;
+		q += nextlineDst << 1;
+	}
+}
+
+void filter_scan50(Uint8 *srcPtr, Uint32 srcPitch,
+                   Uint8 *dstPtr, Uint32 dstPitch,
+                   int width, int height)
+{
+
+  unsigned int nextlineSrc = srcPitch / sizeof(Uint16);
+	Uint16 *p = (Uint16 *)srcPtr;
+
+	unsigned int nextlineDst = dstPitch / sizeof(Uint16);
+	Uint16 *q = (Uint16 *)dstPtr;
+
+  while(height--) {
+    int i = 0, j = 0;
+    for(; i < width; ++i, j += 2) {
+	    Uint16 p1 = *(p + i);
+	    Uint16 p2 = *(p + i + nextlineSrc);
+	    // 0111 1011 1110 1111 == 0x7BEF
+      Uint16 pm = (Uint16)(((p1 + p2) >> 2) & 0x7BEF);
+
+      *(q + j) = p1;
+      *(q + j + 1) = p1;
+			*(q + j + nextlineDst) = pm;
+			*(q + j + nextlineDst + 1) = pm;
+
+    }
+		p += nextlineSrc;
+		q += nextlineDst << 1;
+  }
+}
+
+
+void filter_scan100(Uint8 *srcPtr, Uint32 srcPitch,
+                    Uint8 *dstPtr, Uint32 dstPitch,
+                    int width, int height)
+{
+  unsigned int nextlineSrc = srcPitch / sizeof(Uint16);
+	Uint16 *p = (Uint16 *)srcPtr;
+
+	unsigned int nextlineDst = dstPitch / sizeof(Uint16);
+	Uint16 *q = (Uint16 *)dstPtr;
+
+  while(height--) {
+    int i = 0, j = 0;
+    for(; i < width; ++i, j += 2) {
+      *(q + j) = *(q + j + 1) = *(p + i);
+    }
+		p += nextlineSrc;
+		q += nextlineDst << 1;
+  }
+}
+
+
+FUNCINLINE static ATTRINLINE Uint16 DOT_16(Uint16 c, int j, int i) {
+  static const Uint16 dotmatrix[16] = {
+	  0x01E0, 0x0007, 0x3800, 0x0000,
+	  0x39E7, 0x0000, 0x39E7, 0x0000,
+	  0x3800, 0x0000, 0x01E0, 0x0007,
+	  0x39E7, 0x0000, 0x39E7, 0x0000
+  };
+  return (Uint16)(c - ((c >> 2) & *(dotmatrix + ((j & 3) << 2) + (i & 3))));
+}
+
+void filter_dotmatrix(Uint8 *srcPtr, Uint32 srcPitch,
+                      Uint8 *dstPtr, Uint32 dstPitch,
+					            int width, int height)
+{
+	unsigned int nextlineSrc = srcPitch / sizeof(Uint16);
+	Uint16 *p = (Uint16 *)srcPtr;
+
+	unsigned int nextlineDst = dstPitch / sizeof(Uint16);
+	Uint16 *q = (Uint16 *)dstPtr;
+
+  int i, ii, j, jj;
+	for(j = 0, jj = 0; j < height; ++j, jj += 2) {
+		for(i = 0, ii = 0; i < width; ++i, ii += 2) {
+			Uint16 c = *(p + i);
+			*(q + ii) = DOT_16(c, jj, ii);
+			*(q + ii + 1) = DOT_16(c, jj, ii + 1);
+			*(q + ii + nextlineDst) = DOT_16(c, jj + 1, ii);
+			*(q + ii + nextlineDst + 1) = DOT_16(c, jj + 1, ii + 1);
+		}
+		p += nextlineSrc;
+		q += nextlineDst << 1;
+	}
+}
+
+
+void filter_bilinear(Uint8 *srcPtr, Uint32 srcPitch,
+                     Uint8 *dstPtr, Uint32 dstPitch,
+                     int width, int height)
+{
+  unsigned int nextlineSrc = srcPitch / sizeof(Uint16);
+  Uint16 *p = (Uint16 *)srcPtr;
+  unsigned int nextlineDst = dstPitch / sizeof(Uint16);
+  Uint16 *q = (Uint16 *)dstPtr;
+
+  while(height--) {
+    int i, ii;
+    for(i = 0, ii = 0; i < width; ++i, ii += 2) {
+      Uint16 A = *(p + i);
+      Uint16 B = *(p + i + 1);
+      Uint16 C = *(p + i + nextlineSrc);
+      Uint16 D = *(p + i + nextlineSrc + 1);
+      *(q + ii) = A;
+      *(q + ii + 1) = (Uint16)INTERPOLATE(A, B);
+      *(q + ii + nextlineDst) = (Uint16)INTERPOLATE(A, C);
+      *(q + ii + nextlineDst + 1) = (Uint16)Q_INTERPOLATE(A, B, C, D);
+    }
+    p += nextlineSrc;
+    q += nextlineDst << 1;
+  }
+}
+
+
+// NEED_OPTIMIZE
+static void MULT(Uint16 c, float* r, float* g, float* b, float alpha) {
+  *r += alpha * ((c & RED_MASK565  ) >> 11);
+  *g += alpha * ((c & GREEN_MASK565) >>  5);
+  *b += alpha * ((c & BLUE_MASK565 ) >>  0);
+}
+
+static Uint16 MAKE_RGB565(float r, float g, float b) {
+  return (Uint16)
+  (((((Uint8)r) << 11) & RED_MASK565  ) |
+  ((((Uint8)g) <<  5) & GREEN_MASK565) |
+  ((((Uint8)b) <<  0) & BLUE_MASK565 ));
+}
+
+FUNCINLINE static ATTRINLINE float CUBIC_WEIGHT(float x) {
+  // P(x) = { x, x>0 | 0, x<=0 }
+  // P(x + 2) ^ 3 - 4 * P(x + 1) ^ 3 + 6 * P(x) ^ 3 - 4 * P(x - 1) ^ 3
+  double r = 0.;
+  if(x + 2 > 0) r +=      pow(x + 2, 3);
+  if(x + 1 > 0) r += -4 * pow(x + 1, 3);
+  if(x     > 0) r +=  6 * pow(x    , 3);
+  if(x - 1 > 0) r += -4 * pow(x - 1, 3);
+  return (float)r / 6;
+}
+
+void filter_bicubic(Uint8 *srcPtr, Uint32 srcPitch,
+                    Uint8 *dstPtr, Uint32 dstPitch,
+                    int width, int height)
+{
+  unsigned int nextlineSrc = srcPitch / sizeof(Uint16);
+  Uint16 *p = (Uint16 *)srcPtr;
+  unsigned int nextlineDst = dstPitch / sizeof(Uint16);
+  Uint16 *q = (Uint16 *)dstPtr;
+  int dx = width << 1, dy = height << 1;
+  float fsx = (float)width / dx;
+	float fsy = (float)height / dy;
+	float v = 0.0f;
+	int j = 0;
+	for(; j < dy; ++j) {
+	  float u = 0.0f;
+	  int iv = (int)v;
+    float decy = v - iv;
+    int i = 0;
+	  for(; i < dx; ++i) {
+		  int iu = (int)u;
+		  float decx = u - iu;
+      float r, g, b;
+      int m;
+      r = g = b = 0.;
+      for(m = -1; m <= 2; ++m) {
+        float r1 = CUBIC_WEIGHT(decy - m);
+        int n;
+        for(n = -1; n <= 2; ++n) {
+          float r2 = CUBIC_WEIGHT(n - decx);
+          Uint16* pIn = p + (iu  + n) + (iv + m) * nextlineSrc;
+          MULT(*pIn, &r, &g, &b, r1 * r2);
+        }
+      }
+      *(q + i) = MAKE_RGB565(r, g, b);
+      u += fsx;
+	  }
+    q += nextlineDst;
+	  v += fsy;
+  }
+}
diff --git a/src/sdl2/filter/filters.h b/src/sdl2/filter/filters.h
new file mode 100644
index 000000000..c4a84b4c9
--- /dev/null
+++ b/src/sdl2/filter/filters.h
@@ -0,0 +1,212 @@
+#ifndef __FILTERS_H__
+#define __FILTERS_H__
+
+#ifdef _MSC_VER
+#pragma warning(disable : 4514 4214 4244)
+#endif
+
+#include "SDL.h"
+
+#ifdef _MSC_VER
+#pragma warning(default : 4214 4244)
+#endif
+
+typedef enum {
+  FILTER_2XSAI  = 0,
+  FILTER_SUPER2XSAI,
+  FILTER_SUPEREAGLE,
+  FILTER_ADVMAME2X ,
+  FILTER_TV2X      ,
+  FILTER_NORMAL2X  ,
+  FILTER_BILINEAR  ,
+  FILTER_DOTMATRIX ,
+  FILTER_NUM       ,
+} t_filter;
+
+typedef void (*filter_2)(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+SDL_Surface *filter_2x(SDL_Surface *src, SDL_Rect *srcclp, filter_2 filter);
+SDL_Surface *filter_2xe(SDL_Surface *src, SDL_Rect *srcclp, filter_2 filter,Uint8 R, Uint8 G, Uint8 B);
+//Alam_GBC: Header file based on sms_sdl's filter.h
+//Note: need 3 lines at the bottom and top?
+
+//int filter_init_2xsai(SDL_PixelFormat *BitFormat);
+#define FILTER(src,dst) (Uint8 *)(src->pixels)+src->pitch*3, (Uint32)src->pitch, (Uint8 *)dst->pixels, (Uint32)dst->pitch, src->w, src->h-6
+#define SDLFILTER(src,dst) (Uint8 *)src->pixels, (Uint32)src->pitch, (Uint8 *)dst->pixels, (Uint32)dst->pitch, src->w, src->h
+int filter_init_2xsai(SDL_PixelFormat *BitFormat); //unless?
+void filter_scan50(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+void filter_scan100(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch,  int width, int height);
+
+void filter_2xsai(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+void filter_super2xsai(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+void filter_supereagle(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+void filter_advmame2x(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+void filter_tv2x(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+void filter_normal2x(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+void filter_bilinear(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+void filter_dotmatrix(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+void filter_bicubic(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+void lq2x16(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+void hq2x16(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+
+void filter_hq2x(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+void lq2x32(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+void hq2x32(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height);
+
+#ifdef FILTERS
+typedef struct filter_s {  filter_2 filter; int bpp; } filter_t;
+#define NUMFILTERS 13
+static filter_t filtermode[NUMFILTERS+1] = {
+	{NULL             ,  0}, //None
+	{filter_normal2x  , 16}, //2xNormal
+	{filter_advmame2x , 16}, //AdvMAME2x
+	{filter_tv2x      , 16}, //TV2x
+	{filter_bilinear  , 16}, //Bilinear
+	{filter_dotmatrix , 16}, //DotMatrix
+	{lq2x16           , 16}, //16LQ2x
+	{hq2x16           , 16}, //16HQ2x
+	{lq2x32           , 32}, //32LQ2x
+	{hq2x32           , 32}, //32HQ2x
+// {filter_bicubic   , 16}, //Slow Bicubic
+	// BAD
+	{filter_2xsai     , 16}, //2xSAI
+	{filter_super2xsai, 16}, //Super2xSAI
+	{filter_supereagle, 16}, //SuperEagle
+};
+CV_PossibleValue_t CV_Filters[] = {{ 0, "None"}, { 1, "2xNormal"},
+ { 2, "AdvMAME2x"}, { 3, "TV2x"},       { 4, "Bilinear"}  , { 5, "DotMatrix"},
+ { 6, "16LQ2x"},    { 7, "16HQ2x"},     { 8, "32LQ2x"}    , { 9, "32HQ2x"},
+ {10, "2xSAI"},     {11, "Super2xSAI"}, {12, "SuperEagle"}, {0, NULL},};
+static void Filterchange(void);
+consvar_t cv_filter = {"filter", "None", CV_CALL|CV_NOINIT, CV_Filters,Filterchange,0,NULL,NULL,0,0,NULL};
+static filter_2 blitfilter = NULL;
+static SDL_Surface *preSurface = NULL;
+static SDL_Surface *f2xSurface = NULL;
+
+static void Filterchange(void)
+{
+	if(blitfilter) // only filtering?
+	{
+		int i=0;
+		for(;i < NUMFILTERS; i++)//find old filter
+		{
+			if(filtermode[i].filter == blitfilter) //Found it
+				break; //Stop
+		}
+		if(i < NUMFILTERS && filtermode[i].bpp == filtermode[cv_filter.value].bpp) //Easy to swap?
+			blitfilter = filtermode[cv_filter.value].filter; // Swap with new filter
+	}
+}
+
+FUNCINLINE static ATTRINLINE void FilterBlit(SDL_Surface *froSurface)
+{
+	if(froSurface && blitfilter && preSurface && f2xSurface)
+	{
+		SDL_Rect dstclp = {0,3,0,0};
+		int lockedpre = 0, lockedf2x = 0, blitpre = 0;
+		blitpre = SDL_BlitSurface(froSurface,NULL,preSurface,&dstclp);
+		if(SDL_MUSTLOCK(preSurface)) lockedpre = SDL_LockSurface(preSurface);
+		if(SDL_MUSTLOCK(f2xSurface)) lockedf2x = SDL_LockSurface(f2xSurface);
+		if(lockedpre == 0 && preSurface->pixels && lockedf2x == 0 && f2xSurface->pixels && blitpre == 0)
+		{
+			blitfilter(FILTER(preSurface,f2xSurface));
+			if(SDL_MUSTLOCK(preSurface)) SDL_UnlockSurface(preSurface);
+			if(SDL_MUSTLOCK(f2xSurface)) SDL_UnlockSurface(f2xSurface);
+		}
+	}
+	else
+	{
+		blitfilter = NULL;
+		if(preSurface) SDL_FreeSurface(preSurface);
+		preSurface = NULL;
+		if(f2xSurface) SDL_FreeSurface(f2xSurface);
+		f2xSurface = NULL;
+	}
+}
+
+FUNCINLINE static ATTRINLINE int Setupf2x(int width, int height, int bpp)
+{
+	blitfilter = NULL;
+	if(preSurface) SDL_FreeSurface(preSurface);
+	preSurface = NULL;
+	if(f2xSurface) SDL_FreeSurface(f2xSurface);
+	f2xSurface = NULL;
+	if( !(width%2) && !(height%2) && width >= BASEVIDWIDTH*2 && height >=  BASEVIDHEIGHT*2 && cv_filter.value
+	 && cv_filter.value <= NUMFILTERS && filtermode[cv_filter.value].filter && filtermode[cv_filter.value].bpp)
+	{
+		int hwidth  =  width/2 + 6;
+		int heighth = height/2 + 6;
+		int hbpp = filtermode[cv_filter.value].bpp;
+		switch(hbpp)
+		{
+			case 8:
+				preSurface = SDL_CreateRGBSurface(SDL_SWSURFACE,hwidth,heighth, 8,0x00000000,0x00000000,0x00000000,0x00);
+				f2xSurface = SDL_CreateRGBSurface(SDL_HWSURFACE, width,height , 8,0x00000000,0x00000000,0x00000000,0x00);
+			case 15:
+				preSurface = SDL_CreateRGBSurface(SDL_SWSURFACE,hwidth,heighth,15,0x00007C00,0x000003E0,0x0000001F,0x00);
+				f2xSurface = SDL_CreateRGBSurface(SDL_HWSURFACE, width,height ,15,0x00007C00,0x000003E0,0x0000001F,0x00);
+				break;
+			case 16:
+				preSurface = SDL_CreateRGBSurface(SDL_SWSURFACE,hwidth,heighth,16,0x0000F800,0x000007E0,0x0000001F,0x00);
+				f2xSurface = SDL_CreateRGBSurface(SDL_HWSURFACE, width,height ,16,0x0000F800,0x000007E0,0x0000001F,0x00);
+				break;
+			case 24:
+				preSurface = SDL_CreateRGBSurface(SDL_SWSURFACE,hwidth,heighth,24,0x00FF0000,0x0000FF00,0x000000FF,0x00);
+				f2xSurface = SDL_CreateRGBSurface(SDL_HWSURFACE, width,height ,24,0x00FF0000,0x0000FF00,0x000000FF,0x00);
+				break;
+			case 32:
+				preSurface = SDL_CreateRGBSurface(SDL_SWSURFACE,hwidth,heighth,32,0x00FF0000,0x0000FF00,0x000000FF,0x00);
+				f2xSurface = SDL_CreateRGBSurface(SDL_HWSURFACE, width,height ,32,0x00FF0000,0x0000FF00,0x000000FF,0x00);
+				break;
+			default:
+				//I_Error("Filter help");
+				break;
+		}
+		if(preSurface && f2xSurface)
+		{
+			blitfilter = filtermode[cv_filter.value].filter;
+			if(bpp < hbpp) bpp = hbpp;
+		}
+		else
+		{
+			if(preSurface) SDL_FreeSurface(preSurface);
+			preSurface = NULL;
+			if(f2xSurface) SDL_FreeSurface(f2xSurface);
+			f2xSurface = NULL;
+		}
+	}
+	return bpp;
+}
+#else
+
+#ifdef __GNUC__ // __attribute__ ((X))
+#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
+#define FUNCINLINE __attribute__((always_inline))
+#endif
+#define FUNCNOINLINE __attribute__((noinline))
+#elif defined(_MSC_VER)
+#define inline __inline
+#define ATTRNORETURN   __declspec(noreturn)
+#define ATTRINLINE __forceinline
+#if _MSC_VER > 1200
+#define ATTRNOINLINE __declspec(noinline)
+#endif
+#endif
+
+
+
+#ifndef FUNCINLINE
+#define FUNCINLINE
+#endif
+#ifndef FUNCNOINLINE
+#define FUNCNOINLINE
+#endif
+#ifndef ATTRINLINE
+#define ATTRINLINE inline
+#endif
+#ifndef ATTRNOINLINE
+#define ATTRNOINLINE
+#endif
+
+#endif
+
+#endif
diff --git a/src/sdl2/filter/hq2x.c b/src/sdl2/filter/hq2x.c
new file mode 100644
index 000000000..acdbcb168
--- /dev/null
+++ b/src/sdl2/filter/hq2x.c
@@ -0,0 +1,3125 @@
+//hq2x filter demo program
+//----------------------------------------------------------
+//Copyright (C) 2003 MaxSt ( maxst@hiend3d.com )
+
+//This program is free software; you can redistribute it and/or
+//modify it under the terms of the GNU Lesser General Public
+//License as published by the Free Software Foundation; either
+//version 2.1 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
+//Lesser General Public License for more details.
+//
+//You should have received a copy of the GNU Lesser 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 "filters.h"
+#include <math.h>
+#ifdef __GNUC__
+#include <stdlib.h>
+#endif
+
+
+#if (defined(__GNUC__) && defined(__i386__)) || (defined(_MSC_VER) && defined(_X86_))
+#define HQ2XASM
+#endif
+
+#ifdef _MSC_VER
+//#define HQ2XMMXASM
+#endif
+
+static int   LUT16to32[65536];
+static int   RGBtoYUV[65536];
+#ifdef HQ2XMMXASM
+#include "SDL_cpuinfo.h"
+static SDL_bool hasMMX = 0;
+const Sint64 reg_blank = 0;
+const Sint64 const3    = 0x0000000300030003;
+const Sint64 const5    = 0x0000000500050005;
+const Sint64 const6    = 0x0000000600060006;
+const Sint64 const14   = 0x0000000E000E000E;
+const Sint64 tr3eshold = 0x0000000000300706;
+#endif
+static int   YUV1, YUV2;
+const  int   Ymask = 0x00FF0000;
+const  int   Umask = 0x0000FF00;
+const  int   Vmask = 0x000000FF;
+const  int   trY   = 0x00300000;
+const  int   trU   = 0x00000700;
+const  int   trV   = 0x00000006;
+
+FUNCINLINE static ATTRINLINE void Interp1(Uint8 * pc, int c1, int c2)
+{
+#ifdef HQ2XASM
+  //*((int*)pc) = (c1*3+c2)/4;
+#ifdef __GNUC__
+  int c3 = c1;
+  __asm__("shl $2, %1; add %2, %1; sub %3, %1; shr $2, %1":"=d"(*((int*)pc)):"d"(c1),"r"(c2),"r"(c3):"memory");
+#else
+  __asm
+  {
+    mov        eax, pc
+    mov        edx, c1
+    shl        edx, 2
+    add        edx, c2
+    sub        edx, c1
+    shr        edx, 2
+    mov        [eax], edx
+  }
+#endif
+#else
+  *((int*)pc) = (c1*3+c2) >> 2;
+#endif
+}
+
+FUNCINLINE static ATTRINLINE void Interp2(Uint8 * pc, int c1, int c2, int c3)
+{
+#ifdef HQ2XASM
+//  *((int*)pc) = (c1*2+c2+c3) >> 2;
+#ifdef __GNUC__
+  __asm__("shl $1, %1; add %2, %1; add %3, %1; shr $2, %1":"=d"(*((int*)pc)):"d"(c1),"r"(c2),"r"(c3):"memory");
+#else
+  __asm
+  {
+    mov        eax, pc
+    mov        edx, c1
+    shl        edx, 1
+    add        edx, c2
+    add        edx, c3
+    shr        edx, 2
+    mov        [eax], edx
+  }
+#endif
+#else
+  *((int*)pc) = (c1*2+c2+c3) >> 2;
+#endif
+}
+
+#if 0
+static inline void Interp5(Uint8 * pc, int c1, int c2)
+{
+#ifdef HQ2XASM
+  //*((int*)pc) = (c1+c2)/2;
+#ifdef __GNUC__
+  __asm__("add %2, %1; shr $1, %1":"=d"(*((int*)pc)):"d"(c1),"r"(c2):"memory");
+#else
+  __asm
+  {
+    mov        eax, pc
+    mov        edx, c1
+    add        edx, c2
+    shr        edx, 1
+    mov        [eax], edx
+  }
+#endif
+#else
+  *((int*)pc) = (c1+c2) >> 1;
+#endif
+}
+#endif
+
+FUNCINLINE static ATTRINLINE void Interp6(Uint8 * pc, int c1, int c2, int c3)
+{
+#ifdef HQ2XMMXASM
+ //*((int*)pc) = (c1*5+c2*2+c3)/8;
+ if(hasMMX)
+#ifdef __GNUC__
+  __asm__("movd %1, %%mm1; movd %2, %%mm2, movd %3, %%mm3; punpcklbw $_reg_blank, %%mm1; punpcklbw $_reg_blank, %%mm2; punpcklbw $_reg_blank, %%mm3; pmullw $_const5, %%mm1; psllw $1, %%mm2; paddw %%mm3, %%mm1; paddw %%mm2, %%mm1; psrlw $3, %%mm1; packuswb $_reg_blank, %%mm1; movd %%mm1, %0" : "=r"(*((int*)pc)) : "r" (c1),"r" (c2),"r" (c3) : "memory");
+#else
+  __asm
+  {
+    mov        eax, pc
+    movd       mm1, c1
+    movd       mm2, c2
+    movd       mm3, c3
+    punpcklbw  mm1, reg_blank
+    punpcklbw  mm2, reg_blank
+    punpcklbw  mm3, reg_blank
+    pmullw     mm1, const5
+    psllw      mm2, 1
+    paddw      mm1, mm3
+    paddw      mm1, mm2
+    psrlw      mm1, 3
+    packuswb   mm1, reg_blank
+    movd       [eax], mm1
+  }
+#endif
+ else
+#endif
+  *((int*)pc) = ((((c1 & 0x00FF00)*5 + (c2 & 0x00FF00)*2 + (c3 & 0x00FF00) ) & 0x0007F800) +
+                 (((c1 & 0xFF00FF)*5 + (c2 & 0xFF00FF)*2 + (c3 & 0xFF00FF) ) & 0x07F807F8)) >> 3;
+}
+
+FUNCINLINE static ATTRINLINE void Interp7(Uint8 * pc, int c1, int c2, int c3)
+{
+#ifdef HQ2XMMXASM
+ //*((int*)pc) = (c1*6+c2+c3)/8;
+ if(hasMMX)
+#ifdef __GNUC__
+  __asm__("movd %1, %%mm1; movd %2, %%mm2, movd %3, %%mm3; punpcklbw $_reg_blank, %%mm1; punpcklbw $_reg_blank, %%mm2; punpcklbw $_reg_blank, %%mm3; pmull2 $_const6, %%mm1; padw %%mm3, %%mm2; paddw %%mm2, %%mm1; psrlw $3, %%mm1; packuswb $_reg_blank, %%mm1; movd %%mm1, %0 " : "=r" (*((int*)pc)): "r"(c1), "r"(c2), "r"(c3) : "memory");
+#else
+  __asm
+  {
+    mov        eax, pc
+    movd       mm1, c1
+    movd       mm2, c2
+    movd       mm3, c3
+    punpcklbw  mm1, reg_blank
+    punpcklbw  mm2, reg_blank
+    punpcklbw  mm3, reg_blank
+    pmullw     mm1, const6
+    paddw      mm2, mm3
+    paddw      mm1, mm2
+    psrlw      mm1, 3
+    packuswb   mm1, reg_blank
+    movd       [eax], mm1
+  }
+#endif
+ else
+#endif
+  *((int*)pc) = ((((c1 & 0x00FF00)*6 + (c2 & 0x00FF00) + (c3 & 0x00FF00) ) & 0x0007F800) +
+                 (((c1 & 0xFF00FF)*6 + (c2 & 0xFF00FF) + (c3 & 0xFF00FF) ) & 0x07F807F8)) >> 3;
+}
+
+FUNCINLINE static ATTRINLINE void Interp9(Uint8 * pc, int c1, int c2, int c3)
+{
+#ifdef HQ2XMMXASM
+ //*((int*)pc) = (c1*2+(c2+c3)*3)/8;
+ if(hasMMX)
+#ifdef __GNUC__
+  __asm__("movd %1, %%mm1; movd %2, %%mm2, movd %3, %%mm3; punpcklbw $_reg_blank, %%mm1; punpcklbw $_reg_blank, %%mm2; punpcklbw $_reg_blank, %%mm3; psllw $1, %%mm1; paddw %%mm3, %%mm2; pmullw $_const3, %%mm2; padw %%mm2, %%mm1; psrlw $3, %%mm1; packuswb $_reg_blank, %%mm1; movd %%mm1, %0;" : "=r"(*((int*)pc)) : "r" (c1),"r" (c2),"r" (c3) : "memory");
+#else
+  __asm
+  {
+    mov        eax, pc
+    movd       mm1, c1
+    movd       mm2, c2
+    movd       mm3, c3
+    punpcklbw  mm1, reg_blank
+    punpcklbw  mm2, reg_blank
+    punpcklbw  mm3, reg_blank
+    psllw      mm1, 1
+    paddw      mm2, mm3
+    pmullw     mm2, const3
+    paddw      mm1, mm2
+    psrlw      mm1, 3
+    packuswb   mm1, reg_blank
+    movd       [eax], mm1
+  }
+#endif
+ else
+#endif
+  *((int*)pc) = ((((c1 & 0x00FF00)*2 + ((c2 & 0x00FF00) + (c3 & 0x00FF00))*3 ) & 0x0007F800) +
+                 (((c1 & 0xFF00FF)*2 + ((c2 & 0xFF00FF) + (c3 & 0xFF00FF))*3 ) & 0x07F807F8)) >> 3;
+}
+
+FUNCINLINE static ATTRINLINE void Interp10(Uint8 * pc, int c1, int c2, int c3)
+{
+#ifdef HQ2XMMXASM
+ //*((int*)pc) = (c1*14+c2+c3)/16;
+ if(hasMMX)
+#ifdef __GNUC__
+  __asm__("movd %1, %%mm1; movd %2, %%mm2, movd %3, %%mm3; punpcklbw $_reg_blank, %%mm1; punpcklbw $_reg_blank, %%mm2; punpcklbw $_reg_blank, %%mm3; pmullw $_const14, %%mm1; paddw %%mm3, %%mm2; paddw %%mm2, %%mm1; psrlw $4, %%mm1; packuswb $_req_blank, %%mm1; movd %%mm1, %0;" : "=r"(*((int*)pc)) : "r" (c1),"r" (c2),"r" (c3) : "memory");
+#else
+  __asm
+  {
+    mov        eax, pc
+    movd       mm1, c1
+    movd       mm2, c2
+    movd       mm3, c3
+    punpcklbw  mm1, reg_blank
+    punpcklbw  mm2, reg_blank
+    punpcklbw  mm3, reg_blank
+    pmullw     mm1, const14
+    paddw      mm2, mm3
+    paddw      mm1, mm2
+    psrlw      mm1, 4
+    packuswb   mm1, reg_blank
+    movd       [eax], mm1
+  }
+#endif
+ else
+#endif
+  *((int*)pc) = ((((c1 & 0x00FF00)*14 + (c2 & 0x00FF00) + (c3 & 0x00FF00) ) & 0x000FF000) +
+                 (((c1 & 0xFF00FF)*14 + (c2 & 0xFF00FF) + (c3 & 0xFF00FF) ) & 0x0FF00FF0)) >> 4;
+}
+#define PIXEL00_0     *((int*)(pOut)) = c[5];
+#define PIXEL00_10    Interp1(pOut, c[5], c[1]);
+#define PIXEL00_11    Interp1(pOut, c[5], c[4]);
+#define PIXEL00_12    Interp1(pOut, c[5], c[2]);
+#define PIXEL00_20    Interp2(pOut, c[5], c[4], c[2]);
+#define PIXEL00_21    Interp2(pOut, c[5], c[1], c[2]);
+#define PIXEL00_22    Interp2(pOut, c[5], c[1], c[4]);
+#define PIXEL00_60    Interp6(pOut, c[5], c[2], c[4]);
+#define PIXEL00_61    Interp6(pOut, c[5], c[4], c[2]);
+#define PIXEL00_70    Interp7(pOut, c[5], c[4], c[2]);
+#define PIXEL00_90    Interp9(pOut, c[5], c[4], c[2]);
+#define PIXEL00_100   Interp10(pOut, c[5], c[4], c[2]);
+#define PIXEL01_0     *((int*)(pOut+4)) = c[5];
+#define PIXEL01_10    Interp1(pOut+4, c[5], c[3]);
+#define PIXEL01_11    Interp1(pOut+4, c[5], c[2]);
+#define PIXEL01_12    Interp1(pOut+4, c[5], c[6]);
+#define PIXEL01_20    Interp2(pOut+4, c[5], c[2], c[6]);
+#define PIXEL01_21    Interp2(pOut+4, c[5], c[3], c[6]);
+#define PIXEL01_22    Interp2(pOut+4, c[5], c[3], c[2]);
+#define PIXEL01_60    Interp6(pOut+4, c[5], c[6], c[2]);
+#define PIXEL01_61    Interp6(pOut+4, c[5], c[2], c[6]);
+#define PIXEL01_70    Interp7(pOut+4, c[5], c[2], c[6]);
+#define PIXEL01_90    Interp9(pOut+4, c[5], c[2], c[6]);
+#define PIXEL01_100   Interp10(pOut+4, c[5], c[2], c[6]);
+#define PIXEL10_0     *((int*)(pOut+BpL)) = c[5];
+#define PIXEL10_10    Interp1(pOut+BpL, c[5], c[7]);
+#define PIXEL10_11    Interp1(pOut+BpL, c[5], c[8]);
+#define PIXEL10_12    Interp1(pOut+BpL, c[5], c[4]);
+#define PIXEL10_20    Interp2(pOut+BpL, c[5], c[8], c[4]);
+#define PIXEL10_21    Interp2(pOut+BpL, c[5], c[7], c[4]);
+#define PIXEL10_22    Interp2(pOut+BpL, c[5], c[7], c[8]);
+#define PIXEL10_60    Interp6(pOut+BpL, c[5], c[4], c[8]);
+#define PIXEL10_61    Interp6(pOut+BpL, c[5], c[8], c[4]);
+#define PIXEL10_70    Interp7(pOut+BpL, c[5], c[8], c[4]);
+#define PIXEL10_90    Interp9(pOut+BpL, c[5], c[8], c[4]);
+#define PIXEL10_100   Interp10(pOut+BpL, c[5], c[8], c[4]);
+#define PIXEL11_0     *((int*)(pOut+BpL+4)) = c[5];
+#define PIXEL11_10    Interp1(pOut+BpL+4, c[5], c[9]);
+#define PIXEL11_11    Interp1(pOut+BpL+4, c[5], c[6]);
+#define PIXEL11_12    Interp1(pOut+BpL+4, c[5], c[8]);
+#define PIXEL11_20    Interp2(pOut+BpL+4, c[5], c[6], c[8]);
+#define PIXEL11_21    Interp2(pOut+BpL+4, c[5], c[9], c[8]);
+#define PIXEL11_22    Interp2(pOut+BpL+4, c[5], c[9], c[6]);
+#define PIXEL11_60    Interp6(pOut+BpL+4, c[5], c[8], c[6]);
+#define PIXEL11_61    Interp6(pOut+BpL+4, c[5], c[6], c[8]);
+#define PIXEL11_70    Interp7(pOut+BpL+4, c[5], c[6], c[8]);
+#define PIXEL11_90    Interp9(pOut+BpL+4, c[5], c[6], c[8]);
+#define PIXEL11_100   Interp10(pOut+BpL+4, c[5], c[6], c[8]);
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4035)
+#endif
+
+FUNCINLINE static ATTRINLINE int Diff(Uint32 w1, Uint32 w2)
+{
+#ifdef HQ2XMMXASM
+ if(hasMMX)
+ {
+#ifdef __GNUC__
+  int diffresult = 0;
+  if(w1 != w2)
+   __asm__("movd %3+%1*4, %%mm1; movq %%mm1, %%mm5; movd %3+%2*4, %%mm2; psubusb %%mm2, %%mm1; psubusb %%mm5, %%mm2; por %%mm2, %%mm1; psubusb $_treshold, %%mm1; movd %%mm1, %0" : "=c" (diffresult):"d" (w1),"q" (w2),"c" (RGBtoYUV) : "memory");
+  return diffresult;
+#else
+  __asm
+  {
+    xor     eax,eax
+    mov     ebx,w1
+    mov     edx,w2
+    cmp     ebx,edx
+    je      FIN
+    mov     ecx,offset RGBtoYUV
+    movd    mm1,[ecx + ebx*4]
+    movq    mm5,mm1
+    movd    mm2,[ecx + edx*4]
+    psubusb mm1,mm2
+    psubusb mm2,mm5
+    por     mm1,mm2
+    psubusb mm1,treshold
+    movd    eax,mm1
+FIN:
+  }// returns result in eax register
+#endif
+ }
+ else
+#endif
+ {
+  YUV1 = RGBtoYUV[w1];
+  YUV2 = RGBtoYUV[w2];
+  return ( ( abs((YUV1 & Ymask) - (YUV2 & Ymask)) > trY ) ||
+           ( abs((YUV1 & Umask) - (YUV2 & Umask)) > trU ) ||
+           ( abs((YUV1 & Vmask) - (YUV2 & Vmask)) > trV ) );
+ }
+}
+
+
+#ifdef _MSC_VER
+#pragma warning(default: 4035)
+#endif
+
+
+static void hq2x_32( Uint8 * pIn, Uint8 * pOut, int Xres, int Yres, int BpL )
+{
+  int  i, j, k;
+  int  prevline, nextline;
+  int  w[10];
+  int  c[10];
+
+  //   +----+----+----+
+  //   |    |    |    |
+  //   | w1 | w2 | w3 |
+  //   +----+----+----+
+  //   |    |    |    |
+  //   | w4 | w5 | w6 |
+  //   +----+----+----+
+  //   |    |    |    |
+  //   | w7 | w8 | w9 |
+  //   +----+----+----+
+
+  for (j=0; j<Yres; j++)
+  {
+    if (j>0)      prevline = -Xres*2; else prevline = 0;
+    if (j<Yres-1) nextline =  Xres*2; else nextline = 0;
+
+    for (i=0; i<Xres; i++)
+    {
+      int pattern = 0;
+      int flag = 1;
+
+      w[2] = *((Uint16*)(pIn + prevline));
+      w[5] = *((Uint16*)pIn);
+      w[8] = *((Uint16*)(pIn + nextline));
+
+      if (i>0)
+      {
+        w[1] = *((Uint16*)(pIn + prevline - 2));
+        w[4] = *((Uint16*)(pIn - 2));
+        w[7] = *((Uint16*)(pIn + nextline - 2));
+      }
+      else
+      {
+        w[1] = w[2];
+        w[4] = w[5];
+        w[7] = w[8];
+      }
+
+      if (i<Xres-1)
+      {
+        w[3] = *((Uint16*)(pIn + prevline + 2));
+        w[6] = *((Uint16*)(pIn + 2));
+        w[9] = *((Uint16*)(pIn + nextline + 2));
+      }
+      else
+      {
+        w[3] = w[2];
+        w[6] = w[5];
+        w[9] = w[8];
+      }
+
+#ifdef HQ2XMMXASM
+      if(hasMMX)
+      {
+        if ( Diff(w[5],w[1]) ) pattern |= 0x0001;
+        if ( Diff(w[5],w[2]) ) pattern |= 0x0002;
+        if ( Diff(w[5],w[3]) ) pattern |= 0x0004;
+        if ( Diff(w[5],w[4]) ) pattern |= 0x0008;
+        if ( Diff(w[5],w[6]) ) pattern |= 0x0010;
+        if ( Diff(w[5],w[7]) ) pattern |= 0x0020;
+        if ( Diff(w[5],w[8]) ) pattern |= 0x0040;
+        if ( Diff(w[5],w[9]) ) pattern |= 0x0080;
+      }
+      else
+#endif
+      {
+        YUV1 = RGBtoYUV[w[5]];
+
+        for (k=1; k<=9; k++)
+        {
+          if (k==5) continue;
+
+          if ( w[k] != w[5] )
+          {
+            YUV2 = RGBtoYUV[w[k]];
+            if ( ( abs((YUV1 & Ymask) - (YUV2 & Ymask)) > trY ) ||
+                 ( abs((YUV1 & Umask) - (YUV2 & Umask)) > trU ) ||
+                 ( abs((YUV1 & Vmask) - (YUV2 & Vmask)) > trV ) )
+              pattern |= flag;
+          }
+          flag <<= 1;
+        }
+      }
+
+      for (k=1; k<=9; k++)
+        c[k] = LUT16to32[w[k]];
+
+      switch (pattern)
+      {
+        case 0:
+        case 1:
+        case 4:
+        case 32:
+        case 128:
+        case 5:
+        case 132:
+        case 160:
+        case 33:
+        case 129:
+        case 36:
+        case 133:
+        case 164:
+        case 161:
+        case 37:
+        case 165:
+        {
+          PIXEL00_20
+          PIXEL01_20
+          PIXEL10_20
+          PIXEL11_20
+          break;
+        }
+        case 2:
+        case 34:
+        case 130:
+        case 162:
+        {
+          PIXEL00_22
+          PIXEL01_21
+          PIXEL10_20
+          PIXEL11_20
+          break;
+        }
+        case 16:
+        case 17:
+        case 48:
+        case 49:
+        {
+          PIXEL00_20
+          PIXEL01_22
+          PIXEL10_20
+          PIXEL11_21
+          break;
+        }
+        case 64:
+        case 65:
+        case 68:
+        case 69:
+        {
+          PIXEL00_20
+          PIXEL01_20
+          PIXEL10_21
+          PIXEL11_22
+          break;
+        }
+        case 8:
+        case 12:
+        case 136:
+        case 140:
+        {
+          PIXEL00_21
+          PIXEL01_20
+          PIXEL10_22
+          PIXEL11_20
+          break;
+        }
+        case 3:
+        case 35:
+        case 131:
+        case 163:
+        {
+          PIXEL00_11
+          PIXEL01_21
+          PIXEL10_20
+          PIXEL11_20
+          break;
+        }
+        case 6:
+        case 38:
+        case 134:
+        case 166:
+        {
+          PIXEL00_22
+          PIXEL01_12
+          PIXEL10_20
+          PIXEL11_20
+          break;
+        }
+        case 20:
+        case 21:
+        case 52:
+        case 53:
+        {
+          PIXEL00_20
+          PIXEL01_11
+          PIXEL10_20
+          PIXEL11_21
+          break;
+        }
+        case 144:
+        case 145:
+        case 176:
+        case 177:
+        {
+          PIXEL00_20
+          PIXEL01_22
+          PIXEL10_20
+          PIXEL11_12
+          break;
+        }
+        case 192:
+        case 193:
+        case 196:
+        case 197:
+        {
+          PIXEL00_20
+          PIXEL01_20
+          PIXEL10_21
+          PIXEL11_11
+          break;
+        }
+        case 96:
+        case 97:
+        case 100:
+        case 101:
+        {
+          PIXEL00_20
+          PIXEL01_20
+          PIXEL10_12
+          PIXEL11_22
+          break;
+        }
+        case 40:
+        case 44:
+        case 168:
+        case 172:
+        {
+          PIXEL00_21
+          PIXEL01_20
+          PIXEL10_11
+          PIXEL11_20
+          break;
+        }
+        case 9:
+        case 13:
+        case 137:
+        case 141:
+        {
+          PIXEL00_12
+          PIXEL01_20
+          PIXEL10_22
+          PIXEL11_20
+          break;
+        }
+        case 18:
+        case 50:
+        {
+          PIXEL00_22
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_10
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          PIXEL10_20
+          PIXEL11_21
+          break;
+        }
+        case 80:
+        case 81:
+        {
+          PIXEL00_20
+          PIXEL01_22
+          PIXEL10_21
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 72:
+        case 76:
+        {
+          PIXEL00_21
+          PIXEL01_20
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_10
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          PIXEL11_22
+          break;
+        }
+        case 10:
+        case 138:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          PIXEL01_21
+          PIXEL10_22
+          PIXEL11_20
+          break;
+        }
+        case 66:
+        {
+          PIXEL00_22
+          PIXEL01_21
+          PIXEL10_21
+          PIXEL11_22
+          break;
+        }
+        case 24:
+        {
+          PIXEL00_21
+          PIXEL01_22
+          PIXEL10_22
+          PIXEL11_21
+          break;
+        }
+        case 7:
+        case 39:
+        case 135:
+        {
+          PIXEL00_11
+          PIXEL01_12
+          PIXEL10_20
+          PIXEL11_20
+          break;
+        }
+        case 148:
+        case 149:
+        case 180:
+        {
+          PIXEL00_20
+          PIXEL01_11
+          PIXEL10_20
+          PIXEL11_12
+          break;
+        }
+        case 224:
+        case 228:
+        case 225:
+        {
+          PIXEL00_20
+          PIXEL01_20
+          PIXEL10_12
+          PIXEL11_11
+          break;
+        }
+        case 41:
+        case 169:
+        case 45:
+        {
+          PIXEL00_12
+          PIXEL01_20
+          PIXEL10_11
+          PIXEL11_20
+          break;
+        }
+        case 22:
+        case 54:
+        {
+          PIXEL00_22
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          PIXEL10_20
+          PIXEL11_21
+          break;
+        }
+        case 208:
+        case 209:
+        {
+          PIXEL00_20
+          PIXEL01_22
+          PIXEL10_21
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 104:
+        case 108:
+        {
+          PIXEL00_21
+          PIXEL01_20
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          PIXEL11_22
+          break;
+        }
+        case 11:
+        case 139:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          PIXEL01_21
+          PIXEL10_22
+          PIXEL11_20
+          break;
+        }
+        case 19:
+        case 51:
+        {
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL00_11
+            PIXEL01_10
+          }
+          else
+          {
+            PIXEL00_60
+            PIXEL01_90
+          }
+          PIXEL10_20
+          PIXEL11_21
+          break;
+        }
+        case 146:
+        case 178:
+        {
+          PIXEL00_22
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_10
+            PIXEL11_12
+          }
+          else
+          {
+            PIXEL01_90
+            PIXEL11_61
+          }
+          PIXEL10_20
+          break;
+        }
+        case 84:
+        case 85:
+        {
+          PIXEL00_20
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL01_11
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL01_60
+            PIXEL11_90
+          }
+          PIXEL10_21
+          break;
+        }
+        case 112:
+        case 113:
+        {
+          PIXEL00_20
+          PIXEL01_22
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL10_12
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL10_61
+            PIXEL11_90
+          }
+          break;
+        }
+        case 200:
+        case 204:
+        {
+          PIXEL00_21
+          PIXEL01_20
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_10
+            PIXEL11_11
+          }
+          else
+          {
+            PIXEL10_90
+            PIXEL11_60
+          }
+          break;
+        }
+        case 73:
+        case 77:
+        {
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL00_12
+            PIXEL10_10
+          }
+          else
+          {
+            PIXEL00_61
+            PIXEL10_90
+          }
+          PIXEL01_20
+          PIXEL11_22
+          break;
+        }
+        case 42:
+        case 170:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+            PIXEL10_11
+          }
+          else
+          {
+            PIXEL00_90
+            PIXEL10_60
+          }
+          PIXEL01_21
+          PIXEL11_20
+          break;
+        }
+        case 14:
+        case 142:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+            PIXEL01_12
+          }
+          else
+          {
+            PIXEL00_90
+            PIXEL01_61
+          }
+          PIXEL10_22
+          PIXEL11_20
+          break;
+        }
+        case 67:
+        {
+          PIXEL00_11
+          PIXEL01_21
+          PIXEL10_21
+          PIXEL11_22
+          break;
+        }
+        case 70:
+        {
+          PIXEL00_22
+          PIXEL01_12
+          PIXEL10_21
+          PIXEL11_22
+          break;
+        }
+        case 28:
+        {
+          PIXEL00_21
+          PIXEL01_11
+          PIXEL10_22
+          PIXEL11_21
+          break;
+        }
+        case 152:
+        {
+          PIXEL00_21
+          PIXEL01_22
+          PIXEL10_22
+          PIXEL11_12
+          break;
+        }
+        case 194:
+        {
+          PIXEL00_22
+          PIXEL01_21
+          PIXEL10_21
+          PIXEL11_11
+          break;
+        }
+        case 98:
+        {
+          PIXEL00_22
+          PIXEL01_21
+          PIXEL10_12
+          PIXEL11_22
+          break;
+        }
+        case 56:
+        {
+          PIXEL00_21
+          PIXEL01_22
+          PIXEL10_11
+          PIXEL11_21
+          break;
+        }
+        case 25:
+        {
+          PIXEL00_12
+          PIXEL01_22
+          PIXEL10_22
+          PIXEL11_21
+          break;
+        }
+        case 26:
+        case 31:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          PIXEL10_22
+          PIXEL11_21
+          break;
+        }
+        case 82:
+        case 214:
+        {
+          PIXEL00_22
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          PIXEL10_21
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 88:
+        case 248:
+        {
+          PIXEL00_21
+          PIXEL01_22
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 74:
+        case 107:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          PIXEL01_21
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          PIXEL11_22
+          break;
+        }
+        case 27:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          PIXEL01_10
+          PIXEL10_22
+          PIXEL11_21
+          break;
+        }
+        case 86:
+        {
+          PIXEL00_22
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          PIXEL10_21
+          PIXEL11_10
+          break;
+        }
+        case 216:
+        {
+          PIXEL00_21
+          PIXEL01_22
+          PIXEL10_10
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 106:
+        {
+          PIXEL00_10
+          PIXEL01_21
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          PIXEL11_22
+          break;
+        }
+        case 30:
+        {
+          PIXEL00_10
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          PIXEL10_22
+          PIXEL11_21
+          break;
+        }
+        case 210:
+        {
+          PIXEL00_22
+          PIXEL01_10
+          PIXEL10_21
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 120:
+        {
+          PIXEL00_21
+          PIXEL01_22
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          PIXEL11_10
+          break;
+        }
+        case 75:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          PIXEL01_21
+          PIXEL10_10
+          PIXEL11_22
+          break;
+        }
+        case 29:
+        {
+          PIXEL00_12
+          PIXEL01_11
+          PIXEL10_22
+          PIXEL11_21
+          break;
+        }
+        case 198:
+        {
+          PIXEL00_22
+          PIXEL01_12
+          PIXEL10_21
+          PIXEL11_11
+          break;
+        }
+        case 184:
+        {
+          PIXEL00_21
+          PIXEL01_22
+          PIXEL10_11
+          PIXEL11_12
+          break;
+        }
+        case 99:
+        {
+          PIXEL00_11
+          PIXEL01_21
+          PIXEL10_12
+          PIXEL11_22
+          break;
+        }
+        case 57:
+        {
+          PIXEL00_12
+          PIXEL01_22
+          PIXEL10_11
+          PIXEL11_21
+          break;
+        }
+        case 71:
+        {
+          PIXEL00_11
+          PIXEL01_12
+          PIXEL10_21
+          PIXEL11_22
+          break;
+        }
+        case 156:
+        {
+          PIXEL00_21
+          PIXEL01_11
+          PIXEL10_22
+          PIXEL11_12
+          break;
+        }
+        case 226:
+        {
+          PIXEL00_22
+          PIXEL01_21
+          PIXEL10_12
+          PIXEL11_11
+          break;
+        }
+        case 60:
+        {
+          PIXEL00_21
+          PIXEL01_11
+          PIXEL10_11
+          PIXEL11_21
+          break;
+        }
+        case 195:
+        {
+          PIXEL00_11
+          PIXEL01_21
+          PIXEL10_21
+          PIXEL11_11
+          break;
+        }
+        case 102:
+        {
+          PIXEL00_22
+          PIXEL01_12
+          PIXEL10_12
+          PIXEL11_22
+          break;
+        }
+        case 153:
+        {
+          PIXEL00_12
+          PIXEL01_22
+          PIXEL10_22
+          PIXEL11_12
+          break;
+        }
+        case 58:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+          }
+          else
+          {
+            PIXEL00_70
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_10
+          }
+          else
+          {
+            PIXEL01_70
+          }
+          PIXEL10_11
+          PIXEL11_21
+          break;
+        }
+        case 83:
+        {
+          PIXEL00_11
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_10
+          }
+          else
+          {
+            PIXEL01_70
+          }
+          PIXEL10_21
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL11_70
+          }
+          break;
+        }
+        case 92:
+        {
+          PIXEL00_21
+          PIXEL01_11
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_10
+          }
+          else
+          {
+            PIXEL10_70
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL11_70
+          }
+          break;
+        }
+        case 202:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+          }
+          else
+          {
+            PIXEL00_70
+          }
+          PIXEL01_21
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_10
+          }
+          else
+          {
+            PIXEL10_70
+          }
+          PIXEL11_11
+          break;
+        }
+        case 78:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+          }
+          else
+          {
+            PIXEL00_70
+          }
+          PIXEL01_12
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_10
+          }
+          else
+          {
+            PIXEL10_70
+          }
+          PIXEL11_22
+          break;
+        }
+        case 154:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+          }
+          else
+          {
+            PIXEL00_70
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_10
+          }
+          else
+          {
+            PIXEL01_70
+          }
+          PIXEL10_22
+          PIXEL11_12
+          break;
+        }
+        case 114:
+        {
+          PIXEL00_22
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_10
+          }
+          else
+          {
+            PIXEL01_70
+          }
+          PIXEL10_12
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL11_70
+          }
+          break;
+        }
+        case 89:
+        {
+          PIXEL00_12
+          PIXEL01_22
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_10
+          }
+          else
+          {
+            PIXEL10_70
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL11_70
+          }
+          break;
+        }
+        case 90:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+          }
+          else
+          {
+            PIXEL00_70
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_10
+          }
+          else
+          {
+            PIXEL01_70
+          }
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_10
+          }
+          else
+          {
+            PIXEL10_70
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL11_70
+          }
+          break;
+        }
+        case 55:
+        case 23:
+        {
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL00_11
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL00_60
+            PIXEL01_90
+          }
+          PIXEL10_20
+          PIXEL11_21
+          break;
+        }
+        case 182:
+        case 150:
+        {
+          PIXEL00_22
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+            PIXEL11_12
+          }
+          else
+          {
+            PIXEL01_90
+            PIXEL11_61
+          }
+          PIXEL10_20
+          break;
+        }
+        case 213:
+        case 212:
+        {
+          PIXEL00_20
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL01_11
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL01_60
+            PIXEL11_90
+          }
+          PIXEL10_21
+          break;
+        }
+        case 241:
+        case 240:
+        {
+          PIXEL00_20
+          PIXEL01_22
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL10_12
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL10_61
+            PIXEL11_90
+          }
+          break;
+        }
+        case 236:
+        case 232:
+        {
+          PIXEL00_21
+          PIXEL01_20
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+            PIXEL11_11
+          }
+          else
+          {
+            PIXEL10_90
+            PIXEL11_60
+          }
+          break;
+        }
+        case 109:
+        case 105:
+        {
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL00_12
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL00_61
+            PIXEL10_90
+          }
+          PIXEL01_20
+          PIXEL11_22
+          break;
+        }
+        case 171:
+        case 43:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+            PIXEL10_11
+          }
+          else
+          {
+            PIXEL00_90
+            PIXEL10_60
+          }
+          PIXEL01_21
+          PIXEL11_20
+          break;
+        }
+        case 143:
+        case 15:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+            PIXEL01_12
+          }
+          else
+          {
+            PIXEL00_90
+            PIXEL01_61
+          }
+          PIXEL10_22
+          PIXEL11_20
+          break;
+        }
+        case 124:
+        {
+          PIXEL00_21
+          PIXEL01_11
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          PIXEL11_10
+          break;
+        }
+        case 203:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          PIXEL01_21
+          PIXEL10_10
+          PIXEL11_11
+          break;
+        }
+        case 62:
+        {
+          PIXEL00_10
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          PIXEL10_11
+          PIXEL11_21
+          break;
+        }
+        case 211:
+        {
+          PIXEL00_11
+          PIXEL01_10
+          PIXEL10_21
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 118:
+        {
+          PIXEL00_22
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          PIXEL10_12
+          PIXEL11_10
+          break;
+        }
+        case 217:
+        {
+          PIXEL00_12
+          PIXEL01_22
+          PIXEL10_10
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 110:
+        {
+          PIXEL00_10
+          PIXEL01_12
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          PIXEL11_22
+          break;
+        }
+        case 155:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          PIXEL01_10
+          PIXEL10_22
+          PIXEL11_12
+          break;
+        }
+        case 188:
+        {
+          PIXEL00_21
+          PIXEL01_11
+          PIXEL10_11
+          PIXEL11_12
+          break;
+        }
+        case 185:
+        {
+          PIXEL00_12
+          PIXEL01_22
+          PIXEL10_11
+          PIXEL11_12
+          break;
+        }
+        case 61:
+        {
+          PIXEL00_12
+          PIXEL01_11
+          PIXEL10_11
+          PIXEL11_21
+          break;
+        }
+        case 157:
+        {
+          PIXEL00_12
+          PIXEL01_11
+          PIXEL10_22
+          PIXEL11_12
+          break;
+        }
+        case 103:
+        {
+          PIXEL00_11
+          PIXEL01_12
+          PIXEL10_12
+          PIXEL11_22
+          break;
+        }
+        case 227:
+        {
+          PIXEL00_11
+          PIXEL01_21
+          PIXEL10_12
+          PIXEL11_11
+          break;
+        }
+        case 230:
+        {
+          PIXEL00_22
+          PIXEL01_12
+          PIXEL10_12
+          PIXEL11_11
+          break;
+        }
+        case 199:
+        {
+          PIXEL00_11
+          PIXEL01_12
+          PIXEL10_21
+          PIXEL11_11
+          break;
+        }
+        case 220:
+        {
+          PIXEL00_21
+          PIXEL01_11
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_10
+          }
+          else
+          {
+            PIXEL10_70
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 158:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+          }
+          else
+          {
+            PIXEL00_70
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          PIXEL10_22
+          PIXEL11_12
+          break;
+        }
+        case 234:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+          }
+          else
+          {
+            PIXEL00_70
+          }
+          PIXEL01_21
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          PIXEL11_11
+          break;
+        }
+        case 242:
+        {
+          PIXEL00_22
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_10
+          }
+          else
+          {
+            PIXEL01_70
+          }
+          PIXEL10_12
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 59:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_10
+          }
+          else
+          {
+            PIXEL01_70
+          }
+          PIXEL10_11
+          PIXEL11_21
+          break;
+        }
+        case 121:
+        {
+          PIXEL00_12
+          PIXEL01_22
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL11_70
+          }
+          break;
+        }
+        case 87:
+        {
+          PIXEL00_11
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          PIXEL10_21
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL11_70
+          }
+          break;
+        }
+        case 79:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          PIXEL01_12
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_10
+          }
+          else
+          {
+            PIXEL10_70
+          }
+          PIXEL11_22
+          break;
+        }
+        case 122:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+          }
+          else
+          {
+            PIXEL00_70
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_10
+          }
+          else
+          {
+            PIXEL01_70
+          }
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL11_70
+          }
+          break;
+        }
+        case 94:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+          }
+          else
+          {
+            PIXEL00_70
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_10
+          }
+          else
+          {
+            PIXEL10_70
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL11_70
+          }
+          break;
+        }
+        case 218:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+          }
+          else
+          {
+            PIXEL00_70
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_10
+          }
+          else
+          {
+            PIXEL01_70
+          }
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_10
+          }
+          else
+          {
+            PIXEL10_70
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 91:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_10
+          }
+          else
+          {
+            PIXEL01_70
+          }
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_10
+          }
+          else
+          {
+            PIXEL10_70
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL11_70
+          }
+          break;
+        }
+        case 229:
+        {
+          PIXEL00_20
+          PIXEL01_20
+          PIXEL10_12
+          PIXEL11_11
+          break;
+        }
+        case 167:
+        {
+          PIXEL00_11
+          PIXEL01_12
+          PIXEL10_20
+          PIXEL11_20
+          break;
+        }
+        case 173:
+        {
+          PIXEL00_12
+          PIXEL01_20
+          PIXEL10_11
+          PIXEL11_20
+          break;
+        }
+        case 181:
+        {
+          PIXEL00_20
+          PIXEL01_11
+          PIXEL10_20
+          PIXEL11_12
+          break;
+        }
+        case 186:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+          }
+          else
+          {
+            PIXEL00_70
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_10
+          }
+          else
+          {
+            PIXEL01_70
+          }
+          PIXEL10_11
+          PIXEL11_12
+          break;
+        }
+        case 115:
+        {
+          PIXEL00_11
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_10
+          }
+          else
+          {
+            PIXEL01_70
+          }
+          PIXEL10_12
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL11_70
+          }
+          break;
+        }
+        case 93:
+        {
+          PIXEL00_12
+          PIXEL01_11
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_10
+          }
+          else
+          {
+            PIXEL10_70
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL11_70
+          }
+          break;
+        }
+        case 206:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+          }
+          else
+          {
+            PIXEL00_70
+          }
+          PIXEL01_12
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_10
+          }
+          else
+          {
+            PIXEL10_70
+          }
+          PIXEL11_11
+          break;
+        }
+        case 205:
+        case 201:
+        {
+          PIXEL00_12
+          PIXEL01_20
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_10
+          }
+          else
+          {
+            PIXEL10_70
+          }
+          PIXEL11_11
+          break;
+        }
+        case 174:
+        case 46:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_10
+          }
+          else
+          {
+            PIXEL00_70
+          }
+          PIXEL01_12
+          PIXEL10_11
+          PIXEL11_20
+          break;
+        }
+        case 179:
+        case 147:
+        {
+          PIXEL00_11
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_10
+          }
+          else
+          {
+            PIXEL01_70
+          }
+          PIXEL10_20
+          PIXEL11_12
+          break;
+        }
+        case 117:
+        case 116:
+        {
+          PIXEL00_20
+          PIXEL01_11
+          PIXEL10_12
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_10
+          }
+          else
+          {
+            PIXEL11_70
+          }
+          break;
+        }
+        case 189:
+        {
+          PIXEL00_12
+          PIXEL01_11
+          PIXEL10_11
+          PIXEL11_12
+          break;
+        }
+        case 231:
+        {
+          PIXEL00_11
+          PIXEL01_12
+          PIXEL10_12
+          PIXEL11_11
+          break;
+        }
+        case 126:
+        {
+          PIXEL00_10
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          PIXEL11_10
+          break;
+        }
+        case 219:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          PIXEL01_10
+          PIXEL10_10
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 125:
+        {
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL00_12
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL00_61
+            PIXEL10_90
+          }
+          PIXEL01_11
+          PIXEL11_10
+          break;
+        }
+        case 221:
+        {
+          PIXEL00_12
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL01_11
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL01_60
+            PIXEL11_90
+          }
+          PIXEL10_10
+          break;
+        }
+        case 207:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+            PIXEL01_12
+          }
+          else
+          {
+            PIXEL00_90
+            PIXEL01_61
+          }
+          PIXEL10_10
+          PIXEL11_11
+          break;
+        }
+        case 238:
+        {
+          PIXEL00_10
+          PIXEL01_12
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+            PIXEL11_11
+          }
+          else
+          {
+            PIXEL10_90
+            PIXEL11_60
+          }
+          break;
+        }
+        case 190:
+        {
+          PIXEL00_10
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+            PIXEL11_12
+          }
+          else
+          {
+            PIXEL01_90
+            PIXEL11_61
+          }
+          PIXEL10_11
+          break;
+        }
+        case 187:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+            PIXEL10_11
+          }
+          else
+          {
+            PIXEL00_90
+            PIXEL10_60
+          }
+          PIXEL01_10
+          PIXEL11_12
+          break;
+        }
+        case 243:
+        {
+          PIXEL00_11
+          PIXEL01_10
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL10_12
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL10_61
+            PIXEL11_90
+          }
+          break;
+        }
+        case 119:
+        {
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL00_11
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL00_60
+            PIXEL01_90
+          }
+          PIXEL10_12
+          PIXEL11_10
+          break;
+        }
+        case 237:
+        case 233:
+        {
+          PIXEL00_12
+          PIXEL01_20
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_100
+          }
+          PIXEL11_11
+          break;
+        }
+        case 175:
+        case 47:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_100
+          }
+          PIXEL01_12
+          PIXEL10_11
+          PIXEL11_20
+          break;
+        }
+        case 183:
+        case 151:
+        {
+          PIXEL00_11
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_100
+          }
+          PIXEL10_20
+          PIXEL11_12
+          break;
+        }
+        case 245:
+        case 244:
+        {
+          PIXEL00_20
+          PIXEL01_11
+          PIXEL10_12
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_100
+          }
+          break;
+        }
+        case 250:
+        {
+          PIXEL00_10
+          PIXEL01_10
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 123:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          PIXEL01_10
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          PIXEL11_10
+          break;
+        }
+        case 95:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          PIXEL10_10
+          PIXEL11_10
+          break;
+        }
+        case 222:
+        {
+          PIXEL00_10
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          PIXEL10_10
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 252:
+        {
+          PIXEL00_21
+          PIXEL01_11
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_100
+          }
+          break;
+        }
+        case 249:
+        {
+          PIXEL00_12
+          PIXEL01_22
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_100
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 235:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          PIXEL01_21
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_100
+          }
+          PIXEL11_11
+          break;
+        }
+        case 111:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_100
+          }
+          PIXEL01_12
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          PIXEL11_22
+          break;
+        }
+        case 63:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_100
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          PIXEL10_11
+          PIXEL11_21
+          break;
+        }
+        case 159:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_100
+          }
+          PIXEL10_22
+          PIXEL11_12
+          break;
+        }
+        case 215:
+        {
+          PIXEL00_11
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_100
+          }
+          PIXEL10_21
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 246:
+        {
+          PIXEL00_22
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          PIXEL10_12
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_100
+          }
+          break;
+        }
+        case 254:
+        {
+          PIXEL00_10
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_100
+          }
+          break;
+        }
+        case 253:
+        {
+          PIXEL00_12
+          PIXEL01_11
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_100
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_100
+          }
+          break;
+        }
+        case 251:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          PIXEL01_10
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_100
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 239:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_100
+          }
+          PIXEL01_12
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_100
+          }
+          PIXEL11_11
+          break;
+        }
+        case 127:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_100
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_20
+          }
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_20
+          }
+          PIXEL11_10
+          break;
+        }
+        case 191:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_100
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_100
+          }
+          PIXEL10_11
+          PIXEL11_12
+          break;
+        }
+        case 223:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_20
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_100
+          }
+          PIXEL10_10
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_20
+          }
+          break;
+        }
+        case 247:
+        {
+          PIXEL00_11
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_100
+          }
+          PIXEL10_12
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_100
+          }
+          break;
+        }
+        case 255:
+        {
+          if (Diff(w[4], w[2]))
+          {
+            PIXEL00_0
+          }
+          else
+          {
+            PIXEL00_100
+          }
+          if (Diff(w[2], w[6]))
+          {
+            PIXEL01_0
+          }
+          else
+          {
+            PIXEL01_100
+          }
+          if (Diff(w[8], w[4]))
+          {
+            PIXEL10_0
+          }
+          else
+          {
+            PIXEL10_100
+          }
+          if (Diff(w[6], w[8]))
+          {
+            PIXEL11_0
+          }
+          else
+          {
+            PIXEL11_100
+          }
+          break;
+        }
+      }
+      pIn+=2;
+      pOut+=8;
+    }
+    pOut+=BpL;
+  }
+}
+
+FUNCINLINE static ATTRINLINE void InitLUTs(void)
+{
+  int i, j, k, r, g, b, Y, u, v;
+
+#ifdef HQ2XMMXASM
+  hasMMX = SDL_HasMMX();
+#endif
+
+  for (i=0; i<65536; i++)
+    LUT16to32[i] = ((i & 0xF800) << 8) + ((i & 0x07E0) << 5) + ((i & 0x001F) << 3);
+
+  for (i=0; i<32; i++)
+  for (j=0; j<64; j++)
+  for (k=0; k<32; k++)
+  {
+    r = i << 3;
+    g = j << 2;
+    b = k << 3;
+    Y = (r + g + b) >> 2;
+    u = 128 + ((r - b) >> 2);
+    v = 128 + ((-r + 2*g -b)>>3);
+    RGBtoYUV[ (i << 11) + (j << 5) + k ] = (Y<<16) + (u<<8) + v;
+  }
+}
+
+void filter_hq2x(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr, Uint32 dstPitch, int width, int height)
+{
+	static Uint8 doneLUT = 1;
+	(void)srcPitch;
+	if(doneLUT) InitLUTs();
+	else doneLUT = 0;
+	hq2x_32( srcPtr, dstPtr, width, height, dstPitch );
+}
diff --git a/src/sdl2/filter/hq2x.h b/src/sdl2/filter/hq2x.h
new file mode 100644
index 000000000..49c0b2687
--- /dev/null
+++ b/src/sdl2/filter/hq2x.h
@@ -0,0 +1,1824 @@
+case 0 :
+case 1 :
+case 4 :
+case 5 :
+case 32 :
+case 33 :
+case 36 :
+case 37 :
+case 128 :
+case 129 :
+case 132 :
+case 133 :
+case 160 :
+case 161 :
+case 164 :
+case 165 :
+{
+  P0 = I211(4, 1, 3);
+  P1 = I211(4, 1, 5);
+  P2 = I211(4, 3, 7);
+  P3 = I211(4, 5, 7);
+} break;
+case 2 :
+case 34 :
+case 130 :
+case 162 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 2);
+  P2 = I211(4, 3, 7);
+  P3 = I211(4, 5, 7);
+} break;
+case 3 :
+case 35 :
+case 131 :
+case 163 :
+{
+  P0 = I31(4, 3);
+  P1 = I31(4, 2);
+  P2 = I211(4, 3, 7);
+  P3 = I211(4, 5, 7);
+} break;
+case 6 :
+case 38 :
+case 134 :
+case 166 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 5);
+  P2 = I211(4, 3, 7);
+  P3 = I211(4, 5, 7);
+} break;
+case 7 :
+case 39 :
+case 135 :
+case 167 :
+{
+  P0 = I31(4, 3);
+  P1 = I31(4, 5);
+  P2 = I211(4, 3, 7);
+  P3 = I211(4, 5, 7);
+} break;
+case 8 :
+case 12 :
+case 136 :
+case 140 :
+{
+  P0 = I31(4, 0);
+  P1 = I211(4, 1, 5);
+  P2 = I31(4, 6);
+  P3 = I211(4, 5, 7);
+} break;
+case 9 :
+case 13 :
+case 137 :
+case 141 :
+{
+  P0 = I31(4, 1);
+  P1 = I211(4, 1, 5);
+  P2 = I31(4, 6);
+  P3 = I211(4, 5, 7);
+} break;
+case 10 :
+case 138 :
+{
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  P3 = I211(4, 5, 7);
+  if (MUL) {
+    P0 = I31(4, 0);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+} break;
+case 11 :
+case 139 :
+{
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  P3 = I211(4, 5, 7);
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+} break;
+case 14 :
+case 142 :
+{
+  P2 = I31(4, 6);
+  P3 = I211(4, 5, 7);
+  if (MUL) {
+    P0 = I31(4, 0);
+    P1 = I31(4, 5);
+  } else {
+    P0 = I332(1, 3, 4);
+    P1 = I521(4, 1, 5);
+  }
+} break;
+case 15 :
+case 143 :
+{
+  P2 = I31(4, 6);
+  P3 = I211(4, 5, 7);
+  if (MUL) {
+    P0 = IC(4);
+    P1 = I31(4, 5);
+  } else {
+    P0 = I332(1, 3, 4);
+    P1 = I521(4, 1, 5);
+  }
+} break;
+case 16 :
+case 17 :
+case 48 :
+case 49 :
+{
+  P0 = I211(4, 1, 3);
+  P1 = I31(4, 2);
+  P2 = I211(4, 3, 7);
+  P3 = I31(4, 8);
+} break;
+case 18 :
+case 50 :
+{
+  P0 = I31(4, 0);
+  P2 = I211(4, 3, 7);
+  P3 = I31(4, 8);
+  if (MUR) {
+    P1 = I31(4, 2);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 19 :
+case 51 :
+{
+  P2 = I211(4, 3, 7);
+  P3 = I31(4, 8);
+  if (MUR) {
+    P0 = I31(4, 3);
+    P1 = I31(4, 2);
+  } else {
+    P0 = I521(4, 1, 3);
+    P1 = I332(1, 5, 4);
+  }
+} break;
+case 20 :
+case 21 :
+case 52 :
+case 53 :
+{
+  P0 = I211(4, 1, 3);
+  P1 = I31(4, 1);
+  P2 = I211(4, 3, 7);
+  P3 = I31(4, 8);
+} break;
+case 22 :
+case 54 :
+{
+  P0 = I31(4, 0);
+  P2 = I211(4, 3, 7);
+  P3 = I31(4, 8);
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 23 :
+case 55 :
+{
+  P2 = I211(4, 3, 7);
+  P3 = I31(4, 8);
+  if (MUR) {
+    P0 = I31(4, 3);
+    P1 = IC(4);
+  } else {
+    P0 = I521(4, 1, 3);
+    P1 = I332(1, 5, 4);
+  }
+} break;
+case 24 :
+case 66 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  P3 = I31(4, 8);
+} break;
+case 25 :
+{
+  P0 = I31(4, 1);
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  P3 = I31(4, 8);
+} break;
+case 26 :
+case 31 :
+case 95 :
+{
+  P2 = I31(4, 6);
+  P3 = I31(4, 8);
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 27 :
+case 75 :
+{
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  P3 = I31(4, 8);
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+} break;
+case 28 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 1);
+  P2 = I31(4, 6);
+  P3 = I31(4, 8);
+} break;
+case 29 :
+{
+  P0 = I31(4, 1);
+  P1 = I31(4, 1);
+  P2 = I31(4, 6);
+  P3 = I31(4, 8);
+} break;
+case 30 :
+case 86 :
+{
+  P0 = I31(4, 0);
+  P2 = I31(4, 6);
+  P3 = I31(4, 8);
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 40 :
+case 44 :
+case 168 :
+case 172 :
+{
+  P0 = I31(4, 0);
+  P1 = I211(4, 1, 5);
+  P2 = I31(4, 7);
+  P3 = I211(4, 5, 7);
+} break;
+case 41 :
+case 45 :
+case 169 :
+case 173 :
+{
+  P0 = I31(4, 1);
+  P1 = I211(4, 1, 5);
+  P2 = I31(4, 7);
+  P3 = I211(4, 5, 7);
+} break;
+case 42 :
+case 170 :
+{
+  P1 = I31(4, 2);
+  P3 = I211(4, 5, 7);
+  if (MUL) {
+    P0 = I31(4, 0);
+    P2 = I31(4, 7);
+  } else {
+    P0 = I332(1, 3, 4);
+    P2 = I521(4, 3, 7);
+  }
+} break;
+case 43 :
+case 171 :
+{
+  P1 = I31(4, 2);
+  P3 = I211(4, 5, 7);
+  if (MUL) {
+    P0 = IC(4);
+    P2 = I31(4, 7);
+  } else {
+    P0 = I332(1, 3, 4);
+    P2 = I521(4, 3, 7);
+  }
+} break;
+case 46 :
+case 174 :
+{
+  P1 = I31(4, 5);
+  P2 = I31(4, 7);
+  P3 = I211(4, 5, 7);
+  if (MUL) {
+    P0 = I31(4, 0);
+  } else {
+    P0 = I611(4, 1, 3);
+  }
+} break;
+case 47 :
+case 175 :
+{
+  P1 = I31(4, 5);
+  P2 = I31(4, 7);
+  P3 = I211(4, 5, 7);
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I1411(4, 1, 3);
+  }
+} break;
+case 56 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 2);
+  P2 = I31(4, 7);
+  P3 = I31(4, 8);
+} break;
+case 57 :
+{
+  P0 = I31(4, 1);
+  P1 = I31(4, 2);
+  P2 = I31(4, 7);
+  P3 = I31(4, 8);
+} break;
+case 58 :
+{
+  P2 = I31(4, 7);
+  P3 = I31(4, 8);
+  if (MUL) {
+    P0 = I31(4, 0);
+  } else {
+    P0 = I611(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = I31(4, 2);
+  } else {
+    P1 = I611(4, 1, 5);
+  }
+} break;
+case 59 :
+{
+  P2 = I31(4, 7);
+  P3 = I31(4, 8);
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = I31(4, 2);
+  } else {
+    P1 = I611(4, 1, 5);
+  }
+} break;
+case 60 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 1);
+  P2 = I31(4, 7);
+  P3 = I31(4, 8);
+} break;
+case 61 :
+{
+  P0 = I31(4, 1);
+  P1 = I31(4, 1);
+  P2 = I31(4, 7);
+  P3 = I31(4, 8);
+} break;
+case 62 :
+{
+  P0 = I31(4, 0);
+  P2 = I31(4, 7);
+  P3 = I31(4, 8);
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 63 :
+{
+  P2 = I31(4, 7);
+  P3 = I31(4, 8);
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I1411(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 64 :
+case 65 :
+case 68 :
+case 69 :
+{
+  P0 = I211(4, 1, 3);
+  P1 = I211(4, 1, 5);
+  P2 = I31(4, 6);
+  P3 = I31(4, 8);
+} break;
+case 67 :
+{
+  P0 = I31(4, 3);
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  P3 = I31(4, 8);
+} break;
+case 70 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 5);
+  P2 = I31(4, 6);
+  P3 = I31(4, 8);
+} break;
+case 71 :
+{
+  P0 = I31(4, 3);
+  P1 = I31(4, 5);
+  P2 = I31(4, 6);
+  P3 = I31(4, 8);
+} break;
+case 72 :
+case 76 :
+{
+  P0 = I31(4, 0);
+  P1 = I211(4, 1, 5);
+  P3 = I31(4, 8);
+  if (MDL) {
+    P2 = I31(4, 6);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+} break;
+case 73 :
+case 77 :
+{
+  P1 = I211(4, 1, 5);
+  P3 = I31(4, 8);
+  if (MDL) {
+    P0 = I31(4, 1);
+    P2 = I31(4, 6);
+  } else {
+    P0 = I521(4, 3, 1);
+    P2 = I332(3, 7, 4);
+  }
+} break;
+case 74 :
+case 107 :
+case 123 :
+{
+  P1 = I31(4, 2);
+  P3 = I31(4, 8);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+} break;
+case 78 :
+{
+  P1 = I31(4, 5);
+  P3 = I31(4, 8);
+  if (MDL) {
+    P2 = I31(4, 6);
+  } else {
+    P2 = I611(4, 3, 7);
+  }
+  if (MUL) {
+    P0 = I31(4, 0);
+  } else {
+    P0 = I611(4, 1, 3);
+  }
+} break;
+case 79 :
+{
+  P1 = I31(4, 5);
+  P3 = I31(4, 8);
+  if (MDL) {
+    P2 = I31(4, 6);
+  } else {
+    P2 = I611(4, 3, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+} break;
+case 80 :
+case 81 :
+{
+  P0 = I211(4, 1, 3);
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  if (MDR) {
+    P3 = I31(4, 8);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+} break;
+case 82 :
+case 214 :
+case 222 :
+{
+  P0 = I31(4, 0);
+  P2 = I31(4, 6);
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 83 :
+{
+  P0 = I31(4, 3);
+  P2 = I31(4, 6);
+  if (MDR) {
+    P3 = I31(4, 8);
+  } else {
+    P3 = I611(4, 5, 7);
+  }
+  if (MUR) {
+    P1 = I31(4, 2);
+  } else {
+    P1 = I611(4, 1, 5);
+  }
+} break;
+case 84 :
+case 85 :
+{
+  P0 = I211(4, 1, 3);
+  P2 = I31(4, 6);
+  if (MDR) {
+    P1 = I31(4, 1);
+    P3 = I31(4, 8);
+  } else {
+    P1 = I521(4, 5, 1);
+    P3 = I332(5, 7, 4);
+  }
+} break;
+case 87 :
+{
+  P0 = I31(4, 3);
+  P2 = I31(4, 6);
+  if (MDR) {
+    P3 = I31(4, 8);
+  } else {
+    P3 = I611(4, 5, 7);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 88 :
+case 248 :
+case 250 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 2);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+} break;
+case 89 :
+{
+  P0 = I31(4, 1);
+  P1 = I31(4, 2);
+  if (MDL) {
+    P2 = I31(4, 6);
+  } else {
+    P2 = I611(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = I31(4, 8);
+  } else {
+    P3 = I611(4, 5, 7);
+  }
+} break;
+case 90 :
+{
+  if (MDL) {
+    P2 = I31(4, 6);
+  } else {
+    P2 = I611(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = I31(4, 8);
+  } else {
+    P3 = I611(4, 5, 7);
+  }
+  if (MUL) {
+    P0 = I31(4, 0);
+  } else {
+    P0 = I611(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = I31(4, 2);
+  } else {
+    P1 = I611(4, 1, 5);
+  }
+} break;
+case 91 :
+{
+  if (MDL) {
+    P2 = I31(4, 6);
+  } else {
+    P2 = I611(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = I31(4, 8);
+  } else {
+    P3 = I611(4, 5, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = I31(4, 2);
+  } else {
+    P1 = I611(4, 1, 5);
+  }
+} break;
+case 92 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 1);
+  if (MDL) {
+    P2 = I31(4, 6);
+  } else {
+    P2 = I611(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = I31(4, 8);
+  } else {
+    P3 = I611(4, 5, 7);
+  }
+} break;
+case 93 :
+{
+  P0 = I31(4, 1);
+  P1 = I31(4, 1);
+  if (MDL) {
+    P2 = I31(4, 6);
+  } else {
+    P2 = I611(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = I31(4, 8);
+  } else {
+    P3 = I611(4, 5, 7);
+  }
+} break;
+case 94 :
+{
+  if (MDL) {
+    P2 = I31(4, 6);
+  } else {
+    P2 = I611(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = I31(4, 8);
+  } else {
+    P3 = I611(4, 5, 7);
+  }
+  if (MUL) {
+    P0 = I31(4, 0);
+  } else {
+    P0 = I611(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 96 :
+case 97 :
+case 100 :
+case 101 :
+{
+  P0 = I211(4, 1, 3);
+  P1 = I211(4, 1, 5);
+  P2 = I31(4, 3);
+  P3 = I31(4, 8);
+} break;
+case 98 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 2);
+  P2 = I31(4, 3);
+  P3 = I31(4, 8);
+} break;
+case 99 :
+{
+  P0 = I31(4, 3);
+  P1 = I31(4, 2);
+  P2 = I31(4, 3);
+  P3 = I31(4, 8);
+} break;
+case 102 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 5);
+  P2 = I31(4, 3);
+  P3 = I31(4, 8);
+} break;
+case 103 :
+{
+  P0 = I31(4, 3);
+  P1 = I31(4, 5);
+  P2 = I31(4, 3);
+  P3 = I31(4, 8);
+} break;
+case 104 :
+case 108 :
+{
+  P0 = I31(4, 0);
+  P1 = I211(4, 1, 5);
+  P3 = I31(4, 8);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+} break;
+case 105 :
+case 109 :
+{
+  P1 = I211(4, 1, 5);
+  P3 = I31(4, 8);
+  if (MDL) {
+    P0 = I31(4, 1);
+    P2 = IC(4);
+  } else {
+    P0 = I521(4, 3, 1);
+    P2 = I332(3, 7, 4);
+  }
+} break;
+case 106 :
+case 120 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 2);
+  P3 = I31(4, 8);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+} break;
+case 110 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 5);
+  P3 = I31(4, 8);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+} break;
+case 111 :
+{
+  P1 = I31(4, 5);
+  P3 = I31(4, 8);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I1411(4, 1, 3);
+  }
+} break;
+case 112 :
+case 113 :
+{
+  P0 = I211(4, 1, 3);
+  P1 = I31(4, 2);
+  if (MDR) {
+    P2 = I31(4, 3);
+    P3 = I31(4, 8);
+  } else {
+    P2 = I521(4, 7, 3);
+    P3 = I332(5, 7, 4);
+  }
+} break;
+case 114 :
+{
+  P0 = I31(4, 0);
+  P2 = I31(4, 3);
+  if (MDR) {
+    P3 = I31(4, 8);
+  } else {
+    P3 = I611(4, 5, 7);
+  }
+  if (MUR) {
+    P1 = I31(4, 2);
+  } else {
+    P1 = I611(4, 1, 5);
+  }
+} break;
+case 115 :
+{
+  P0 = I31(4, 3);
+  P2 = I31(4, 3);
+  if (MDR) {
+    P3 = I31(4, 8);
+  } else {
+    P3 = I611(4, 5, 7);
+  }
+  if (MUR) {
+    P1 = I31(4, 2);
+  } else {
+    P1 = I611(4, 1, 5);
+  }
+} break;
+case 116 :
+case 117 :
+{
+  P0 = I211(4, 1, 3);
+  P1 = I31(4, 1);
+  P2 = I31(4, 3);
+  if (MDR) {
+    P3 = I31(4, 8);
+  } else {
+    P3 = I611(4, 5, 7);
+  }
+} break;
+case 118 :
+{
+  P0 = I31(4, 0);
+  P2 = I31(4, 3);
+  P3 = I31(4, 8);
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 119 :
+{
+  P2 = I31(4, 3);
+  P3 = I31(4, 8);
+  if (MUR) {
+    P0 = I31(4, 3);
+    P1 = IC(4);
+  } else {
+    P0 = I521(4, 1, 3);
+    P1 = I332(1, 5, 4);
+  }
+} break;
+case 121 :
+{
+  P0 = I31(4, 1);
+  P1 = I31(4, 2);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = I31(4, 8);
+  } else {
+    P3 = I611(4, 5, 7);
+  }
+} break;
+case 122 :
+{
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = I31(4, 8);
+  } else {
+    P3 = I611(4, 5, 7);
+  }
+  if (MUL) {
+    P0 = I31(4, 0);
+  } else {
+    P0 = I611(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = I31(4, 2);
+  } else {
+    P1 = I611(4, 1, 5);
+  }
+} break;
+case 124 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 1);
+  P3 = I31(4, 8);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+} break;
+case 125 :
+{
+  P1 = I31(4, 1);
+  P3 = I31(4, 8);
+  if (MDL) {
+    P0 = I31(4, 1);
+    P2 = IC(4);
+  } else {
+    P0 = I521(4, 3, 1);
+    P2 = I332(3, 7, 4);
+  }
+} break;
+case 126 :
+{
+  P0 = I31(4, 0);
+  P3 = I31(4, 8);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 127 :
+{
+  P3 = I31(4, 8);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I1411(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 144 :
+case 145 :
+case 176 :
+case 177 :
+{
+  P0 = I211(4, 1, 3);
+  P1 = I31(4, 2);
+  P2 = I211(4, 3, 7);
+  P3 = I31(4, 7);
+} break;
+case 146 :
+case 178 :
+{
+  P0 = I31(4, 0);
+  P2 = I211(4, 3, 7);
+  if (MUR) {
+    P1 = I31(4, 2);
+    P3 = I31(4, 7);
+  } else {
+    P1 = I332(1, 5, 4);
+    P3 = I521(4, 5, 7);
+  }
+} break;
+case 147 :
+case 179 :
+{
+  P0 = I31(4, 3);
+  P2 = I211(4, 3, 7);
+  P3 = I31(4, 7);
+  if (MUR) {
+    P1 = I31(4, 2);
+  } else {
+    P1 = I611(4, 1, 5);
+  }
+} break;
+case 148 :
+case 149 :
+case 180 :
+case 181 :
+{
+  P0 = I211(4, 1, 3);
+  P1 = I31(4, 1);
+  P2 = I211(4, 3, 7);
+  P3 = I31(4, 7);
+} break;
+case 150 :
+case 182 :
+{
+  P0 = I31(4, 0);
+  P2 = I211(4, 3, 7);
+  if (MUR) {
+    P1 = IC(4);
+    P3 = I31(4, 7);
+  } else {
+    P1 = I332(1, 5, 4);
+    P3 = I521(4, 5, 7);
+  }
+} break;
+case 151 :
+case 183 :
+{
+  P0 = I31(4, 3);
+  P2 = I211(4, 3, 7);
+  P3 = I31(4, 7);
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I1411(4, 1, 5);
+  }
+} break;
+case 152 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  P3 = I31(4, 7);
+} break;
+case 153 :
+{
+  P0 = I31(4, 1);
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  P3 = I31(4, 7);
+} break;
+case 154 :
+{
+  P2 = I31(4, 6);
+  P3 = I31(4, 7);
+  if (MUL) {
+    P0 = I31(4, 0);
+  } else {
+    P0 = I611(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = I31(4, 2);
+  } else {
+    P1 = I611(4, 1, 5);
+  }
+} break;
+case 155 :
+{
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  P3 = I31(4, 7);
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+} break;
+case 156 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 1);
+  P2 = I31(4, 6);
+  P3 = I31(4, 7);
+} break;
+case 157 :
+{
+  P0 = I31(4, 1);
+  P1 = I31(4, 1);
+  P2 = I31(4, 6);
+  P3 = I31(4, 7);
+} break;
+case 158 :
+{
+  P2 = I31(4, 6);
+  P3 = I31(4, 7);
+  if (MUL) {
+    P0 = I31(4, 0);
+  } else {
+    P0 = I611(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 159 :
+{
+  P2 = I31(4, 6);
+  P3 = I31(4, 7);
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I1411(4, 1, 5);
+  }
+} break;
+case 184 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 2);
+  P2 = I31(4, 7);
+  P3 = I31(4, 7);
+} break;
+case 185 :
+{
+  P0 = I31(4, 1);
+  P1 = I31(4, 2);
+  P2 = I31(4, 7);
+  P3 = I31(4, 7);
+} break;
+case 186 :
+{
+  P2 = I31(4, 7);
+  P3 = I31(4, 7);
+  if (MUL) {
+    P0 = I31(4, 0);
+  } else {
+    P0 = I611(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = I31(4, 2);
+  } else {
+    P1 = I611(4, 1, 5);
+  }
+} break;
+case 187 :
+{
+  P1 = I31(4, 2);
+  P3 = I31(4, 7);
+  if (MUL) {
+    P0 = IC(4);
+    P2 = I31(4, 7);
+  } else {
+    P0 = I332(1, 3, 4);
+    P2 = I521(4, 3, 7);
+  }
+} break;
+case 188 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 1);
+  P2 = I31(4, 7);
+  P3 = I31(4, 7);
+} break;
+case 189 :
+{
+  P0 = I31(4, 1);
+  P1 = I31(4, 1);
+  P2 = I31(4, 7);
+  P3 = I31(4, 7);
+} break;
+case 190 :
+{
+  P0 = I31(4, 0);
+  P2 = I31(4, 7);
+  if (MUR) {
+    P1 = IC(4);
+    P3 = I31(4, 7);
+  } else {
+    P1 = I332(1, 5, 4);
+    P3 = I521(4, 5, 7);
+  }
+} break;
+case 191 :
+{
+  P2 = I31(4, 7);
+  P3 = I31(4, 7);
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I1411(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I1411(4, 1, 5);
+  }
+} break;
+case 192 :
+case 193 :
+case 196 :
+case 197 :
+{
+  P0 = I211(4, 1, 3);
+  P1 = I211(4, 1, 5);
+  P2 = I31(4, 6);
+  P3 = I31(4, 5);
+} break;
+case 194 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  P3 = I31(4, 5);
+} break;
+case 195 :
+{
+  P0 = I31(4, 3);
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  P3 = I31(4, 5);
+} break;
+case 198 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 5);
+  P2 = I31(4, 6);
+  P3 = I31(4, 5);
+} break;
+case 199 :
+{
+  P0 = I31(4, 3);
+  P1 = I31(4, 5);
+  P2 = I31(4, 6);
+  P3 = I31(4, 5);
+} break;
+case 200 :
+case 204 :
+{
+  P0 = I31(4, 0);
+  P1 = I211(4, 1, 5);
+  if (MDL) {
+    P2 = I31(4, 6);
+    P3 = I31(4, 5);
+  } else {
+    P2 = I332(3, 7, 4);
+    P3 = I521(4, 7, 5);
+  }
+} break;
+case 201 :
+case 205 :
+{
+  P0 = I31(4, 1);
+  P1 = I211(4, 1, 5);
+  P3 = I31(4, 5);
+  if (MDL) {
+    P2 = I31(4, 6);
+  } else {
+    P2 = I611(4, 3, 7);
+  }
+} break;
+case 202 :
+{
+  P1 = I31(4, 2);
+  P3 = I31(4, 5);
+  if (MDL) {
+    P2 = I31(4, 6);
+  } else {
+    P2 = I611(4, 3, 7);
+  }
+  if (MUL) {
+    P0 = I31(4, 0);
+  } else {
+    P0 = I611(4, 1, 3);
+  }
+} break;
+case 203 :
+{
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  P3 = I31(4, 5);
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+} break;
+case 206 :
+{
+  P1 = I31(4, 5);
+  P3 = I31(4, 5);
+  if (MDL) {
+    P2 = I31(4, 6);
+  } else {
+    P2 = I611(4, 3, 7);
+  }
+  if (MUL) {
+    P0 = I31(4, 0);
+  } else {
+    P0 = I611(4, 1, 3);
+  }
+} break;
+case 207 :
+{
+  P2 = I31(4, 6);
+  P3 = I31(4, 5);
+  if (MUL) {
+    P0 = IC(4);
+    P1 = I31(4, 5);
+  } else {
+    P0 = I332(1, 3, 4);
+    P1 = I521(4, 1, 5);
+  }
+} break;
+case 208 :
+case 209 :
+{
+  P0 = I211(4, 1, 3);
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+} break;
+case 210 :
+case 216 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+} break;
+case 211 :
+{
+  P0 = I31(4, 3);
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+} break;
+case 212 :
+case 213 :
+{
+  P0 = I211(4, 1, 3);
+  P2 = I31(4, 6);
+  if (MDR) {
+    P1 = I31(4, 1);
+    P3 = IC(4);
+  } else {
+    P1 = I521(4, 5, 1);
+    P3 = I332(5, 7, 4);
+  }
+} break;
+case 215 :
+{
+  P0 = I31(4, 3);
+  P2 = I31(4, 6);
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I1411(4, 1, 5);
+  }
+} break;
+case 217 :
+{
+  P0 = I31(4, 1);
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+} break;
+case 218 :
+{
+  if (MDL) {
+    P2 = I31(4, 6);
+  } else {
+    P2 = I611(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+  if (MUL) {
+    P0 = I31(4, 0);
+  } else {
+    P0 = I611(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = I31(4, 2);
+  } else {
+    P1 = I611(4, 1, 5);
+  }
+} break;
+case 219 :
+{
+  P1 = I31(4, 2);
+  P2 = I31(4, 6);
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+} break;
+case 220 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 1);
+  if (MDL) {
+    P2 = I31(4, 6);
+  } else {
+    P2 = I611(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+} break;
+case 221 :
+{
+  P0 = I31(4, 1);
+  P2 = I31(4, 6);
+  if (MDR) {
+    P1 = I31(4, 1);
+    P3 = IC(4);
+  } else {
+    P1 = I521(4, 5, 1);
+    P3 = I332(5, 7, 4);
+  }
+} break;
+case 223 :
+{
+  P2 = I31(4, 6);
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I1411(4, 1, 5);
+  }
+} break;
+case 224 :
+case 225 :
+case 228 :
+case 229 :
+{
+  P0 = I211(4, 1, 3);
+  P1 = I211(4, 1, 5);
+  P2 = I31(4, 3);
+  P3 = I31(4, 5);
+} break;
+case 226 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 2);
+  P2 = I31(4, 3);
+  P3 = I31(4, 5);
+} break;
+case 227 :
+{
+  P0 = I31(4, 3);
+  P1 = I31(4, 2);
+  P2 = I31(4, 3);
+  P3 = I31(4, 5);
+} break;
+case 230 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 5);
+  P2 = I31(4, 3);
+  P3 = I31(4, 5);
+} break;
+case 231 :
+{
+  P0 = I31(4, 3);
+  P1 = I31(4, 5);
+  P2 = I31(4, 3);
+  P3 = I31(4, 5);
+} break;
+case 232 :
+case 236 :
+{
+  P0 = I31(4, 0);
+  P1 = I211(4, 1, 5);
+  if (MDL) {
+    P2 = IC(4);
+    P3 = I31(4, 5);
+  } else {
+    P2 = I332(3, 7, 4);
+    P3 = I521(4, 7, 5);
+  }
+} break;
+case 233 :
+case 237 :
+{
+  P0 = I31(4, 1);
+  P1 = I211(4, 1, 5);
+  P3 = I31(4, 5);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I1411(4, 3, 7);
+  }
+} break;
+case 234 :
+{
+  P1 = I31(4, 2);
+  P3 = I31(4, 5);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+  if (MUL) {
+    P0 = I31(4, 0);
+  } else {
+    P0 = I611(4, 1, 3);
+  }
+} break;
+case 235 :
+{
+  P1 = I31(4, 2);
+  P3 = I31(4, 5);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I1411(4, 3, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+} break;
+case 238 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 5);
+  if (MDL) {
+    P2 = IC(4);
+    P3 = I31(4, 5);
+  } else {
+    P2 = I332(3, 7, 4);
+    P3 = I521(4, 7, 5);
+  }
+} break;
+case 239 :
+{
+  P1 = I31(4, 5);
+  P3 = I31(4, 5);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I1411(4, 3, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I1411(4, 1, 3);
+  }
+} break;
+case 240 :
+case 241 :
+{
+  P0 = I211(4, 1, 3);
+  P1 = I31(4, 2);
+  if (MDR) {
+    P2 = I31(4, 3);
+    P3 = IC(4);
+  } else {
+    P2 = I521(4, 7, 3);
+    P3 = I332(5, 7, 4);
+  }
+} break;
+case 242 :
+{
+  P0 = I31(4, 0);
+  P2 = I31(4, 3);
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+  if (MUR) {
+    P1 = I31(4, 2);
+  } else {
+    P1 = I611(4, 1, 5);
+  }
+} break;
+case 243 :
+{
+  P0 = I31(4, 3);
+  P1 = I31(4, 2);
+  if (MDR) {
+    P2 = I31(4, 3);
+    P3 = IC(4);
+  } else {
+    P2 = I521(4, 7, 3);
+    P3 = I332(5, 7, 4);
+  }
+} break;
+case 244 :
+case 245 :
+{
+  P0 = I211(4, 1, 3);
+  P1 = I31(4, 1);
+  P2 = I31(4, 3);
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I1411(4, 5, 7);
+  }
+} break;
+case 246 :
+{
+  P0 = I31(4, 0);
+  P2 = I31(4, 3);
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I1411(4, 5, 7);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 247 :
+{
+  P0 = I31(4, 3);
+  P2 = I31(4, 3);
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I1411(4, 5, 7);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I1411(4, 1, 5);
+  }
+} break;
+case 249 :
+{
+  P0 = I31(4, 1);
+  P1 = I31(4, 2);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I1411(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+} break;
+case 251 :
+{
+  P1 = I31(4, 2);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I1411(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+} break;
+case 252 :
+{
+  P0 = I31(4, 0);
+  P1 = I31(4, 1);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I1411(4, 5, 7);
+  }
+} break;
+case 253 :
+{
+  P0 = I31(4, 1);
+  P1 = I31(4, 1);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I1411(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I1411(4, 5, 7);
+  }
+} break;
+case 254 :
+{
+  P0 = I31(4, 0);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I1411(4, 5, 7);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 255 :
+{
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I1411(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I1411(4, 5, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I1411(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I1411(4, 1, 5);
+  }
+} break;
diff --git a/src/sdl2/filter/interp.h b/src/sdl2/filter/interp.h
new file mode 100644
index 000000000..e994387fb
--- /dev/null
+++ b/src/sdl2/filter/interp.h
@@ -0,0 +1,306 @@
+/*
+ * This file is part of the Advance project.
+ *
+ * Copyright (C) 2003 Andrea Mazzoleni
+ *
+ * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * In addition, as a special exception, Andrea Mazzoleni
+ * gives permission to link the code of this program with
+ * the MAME library (or with modified versions of MAME that use the
+ * same license as MAME), and distribute linked combinations including
+ * the two.  You must obey the GNU General Public License in all
+ * respects for all of the code used other than MAME.  If you modify
+ * this file, you may extend this exception to your version of the
+ * file, but you are not obligated to do so.  If you do not wish to
+ * do so, delete this exception statement from your version.
+ */
+
+#ifndef __INTERP_H
+#define __INTERP_H
+
+/***************************************************************************/
+/* Basic types */
+
+/***************************************************************************/
+/* interpolation */
+
+static Uint32 interp_mask[2] = {0xF81F,0x07E0};
+static Uint32 interp_bits_per_pixel = 16;
+
+#define INTERP_16_MASK_1(v) (v & interp_mask[0])
+#define INTERP_16_MASK_2(v) (v & interp_mask[1])
+
+FUNCINLINE static ATTRINLINE Uint16 interp_16_521(Uint16 p1, Uint16 p2, Uint16 p3)
+{
+  return (Uint16)(INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*5 + INTERP_16_MASK_1(p2)*2 + INTERP_16_MASK_1(p3)*1) / 8)
+    | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*5 + INTERP_16_MASK_2(p2)*2 + INTERP_16_MASK_2(p3)*1) / 8));
+}
+
+FUNCINLINE static ATTRINLINE Uint16 interp_16_332(Uint16 p1, Uint16 p2, Uint16 p3)
+{
+  return (Uint16)(INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*3 + INTERP_16_MASK_1(p2)*3 + INTERP_16_MASK_1(p3)*2) / 8)
+    | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*3 + INTERP_16_MASK_2(p2)*3 + INTERP_16_MASK_2(p3)*2) / 8));
+}
+
+FUNCINLINE static ATTRINLINE Uint16 interp_16_611(Uint16 p1, Uint16 p2, Uint16 p3)
+{
+  return (Uint16)(INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*6 + INTERP_16_MASK_1(p2) + INTERP_16_MASK_1(p3)) / 8)
+    | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*6 + INTERP_16_MASK_2(p2) + INTERP_16_MASK_2(p3)) / 8));
+}
+
+/*
+FUNCINLINE static ATTRINLINE Uint16 interp_16_71(Uint16 p1, Uint16 p2)
+{
+  return (Uint16)(INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*7 + INTERP_16_MASK_1(p2)) / 8)
+    | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*7 + INTERP_16_MASK_2(p2)) / 8));
+}
+*/
+
+FUNCINLINE static ATTRINLINE Uint16 interp_16_211(Uint16 p1, Uint16 p2, Uint16 p3)
+{
+  return (Uint16)(INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*2 + INTERP_16_MASK_1(p2) + INTERP_16_MASK_1(p3)) / 4)
+    | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*2 + INTERP_16_MASK_2(p2) + INTERP_16_MASK_2(p3)) / 4));
+}
+
+/*
+FUNCINLINE static ATTRINLINE Uint16 interp_16_772(Uint16 p1, Uint16 p2, Uint16 p3)
+{
+  return (Uint16)(INTERP_16_MASK_1(((INTERP_16_MASK_1(p1) + INTERP_16_MASK_1(p2))*7 + INTERP_16_MASK_1(p3)*2) / 16)
+    | INTERP_16_MASK_2(((INTERP_16_MASK_2(p1) + INTERP_16_MASK_2(p2))*7 + INTERP_16_MASK_2(p3)*2) / 16));
+}
+
+FUNCINLINE static ATTRINLINE Uint16 interp_16_11(Uint16 p1, Uint16 p2)
+{
+  return (Uint16)(INTERP_16_MASK_1((INTERP_16_MASK_1(p1) + INTERP_16_MASK_1(p2)) / 2)
+    | INTERP_16_MASK_2((INTERP_16_MASK_2(p1) + INTERP_16_MASK_2(p2)) / 2));
+}
+*/
+
+FUNCINLINE static ATTRINLINE Uint16 interp_16_31(Uint16 p1, Uint16 p2)
+{
+  return (Uint16)(INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*3 + INTERP_16_MASK_1(p2)) / 4)
+    | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*3 + INTERP_16_MASK_2(p2)) / 4));
+}
+
+FUNCINLINE static ATTRINLINE Uint16 interp_16_1411(Uint16 p1, Uint16 p2, Uint16 p3)
+{
+  return (Uint16)(INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*14 + INTERP_16_MASK_1(p2) + INTERP_16_MASK_1(p3)) / 16)
+    | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*14 + INTERP_16_MASK_2(p2) + INTERP_16_MASK_2(p3)) / 16));
+}
+
+/*
+FUNCINLINE static ATTRINLINE Uint16 interp_16_431(Uint16 p1, Uint16 p2, Uint16 p3)
+{
+  return (Uint16)(INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*4 + INTERP_16_MASK_1(p2)*3 + INTERP_16_MASK_1(p3)) / 8)
+    | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*4 + INTERP_16_MASK_2(p2)*3 + INTERP_16_MASK_2(p3)) / 8));
+}
+
+FUNCINLINE static ATTRINLINE Uint16 interp_16_53(Uint16 p1, Uint16 p2)
+{
+  return (Uint16)(INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*5 + INTERP_16_MASK_1(p2)*3) / 8)
+    | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*5 + INTERP_16_MASK_2(p2)*3) / 8));
+}
+
+FUNCINLINE static ATTRINLINE Uint16 interp_16_151(Uint16 p1, Uint16 p2)
+{
+  return (Uint16)(INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*15 + INTERP_16_MASK_1(p2)) / 16)
+    | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*15 + INTERP_16_MASK_2(p2)) / 16));
+}
+
+FUNCINLINE static ATTRINLINE Uint16 interp_16_97(Uint16 p1, Uint16 p2)
+{
+  return (Uint16)(INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*9 + INTERP_16_MASK_1(p2)*7) / 16)
+    | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*9 + INTERP_16_MASK_2(p2)*7) / 16));
+}
+*/
+
+#define INTERP_32_MASK_1(v) (v & 0xFF00FF)
+#define INTERP_32_MASK_2(v) (v & 0x00FF00)
+
+FUNCINLINE static ATTRINLINE Uint32 interp_32_521(Uint32 p1, Uint32 p2, Uint32 p3)
+{
+  return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*5 + INTERP_32_MASK_1(p2)*2 + INTERP_32_MASK_1(p3)*1) / 8)
+    | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*5 + INTERP_32_MASK_2(p2)*2 + INTERP_32_MASK_2(p3)*1) / 8);
+}
+
+FUNCINLINE static ATTRINLINE Uint32 interp_32_332(Uint32 p1, Uint32 p2, Uint32 p3)
+{
+  return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*3 + INTERP_32_MASK_1(p2)*3 + INTERP_32_MASK_1(p3)*2) / 8)
+    | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*3 + INTERP_32_MASK_2(p2)*3 + INTERP_32_MASK_2(p3)*2) / 8);
+}
+
+FUNCINLINE static ATTRINLINE Uint32 interp_32_211(Uint32 p1, Uint32 p2, Uint32 p3)
+{
+  return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*2 + INTERP_32_MASK_1(p2) + INTERP_32_MASK_1(p3)) / 4)
+    | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*2 + INTERP_32_MASK_2(p2) + INTERP_32_MASK_2(p3)) / 4);
+}
+
+FUNCINLINE static ATTRINLINE Uint32 interp_32_611(Uint32 p1, Uint32 p2, Uint32 p3)
+{
+  return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*6 + INTERP_32_MASK_1(p2) + INTERP_32_MASK_1(p3)) / 8)
+    | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*6 + INTERP_32_MASK_2(p2) + INTERP_32_MASK_2(p3)) / 8);
+}
+
+/*
+FUNCINLINE static ATTRINLINE Uint32 interp_32_71(Uint32 p1, Uint32 p2)
+{
+  return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*7 + INTERP_32_MASK_1(p2)) / 8)
+    | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*7 + INTERP_32_MASK_2(p2)) / 8);
+}
+
+FUNCINLINE static ATTRINLINE Uint32 interp_32_772(Uint32 p1, Uint32 p2, Uint32 p3)
+{
+  return INTERP_32_MASK_1(((INTERP_32_MASK_1(p1) + INTERP_32_MASK_1(p2))*7 + INTERP_32_MASK_1(p3)*2) / 16)
+    | INTERP_32_MASK_2(((INTERP_32_MASK_2(p1) + INTERP_32_MASK_2(p2))*7 + INTERP_32_MASK_2(p3)*2) / 16);
+}
+
+FUNCINLINE static ATTRINLINE Uint32 interp_32_11(Uint32 p1, Uint32 p2)
+{
+  return INTERP_32_MASK_1((INTERP_32_MASK_1(p1) + INTERP_32_MASK_1(p2)) / 2)
+    | INTERP_32_MASK_2((INTERP_32_MASK_2(p1) + INTERP_32_MASK_2(p2)) / 2);
+}
+*/
+
+FUNCINLINE static ATTRINLINE Uint32 interp_32_31(Uint32 p1, Uint32 p2)
+{
+  return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*3 + INTERP_32_MASK_1(p2)) / 4)
+    | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*3 + INTERP_32_MASK_2(p2)) / 4);
+}
+
+FUNCINLINE static ATTRINLINE Uint32 interp_32_1411(Uint32 p1, Uint32 p2, Uint32 p3)
+{
+  return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*14 + INTERP_32_MASK_1(p2) + INTERP_32_MASK_1(p3)) / 16)
+    | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*14 + INTERP_32_MASK_2(p2) + INTERP_32_MASK_2(p3)) / 16);
+}
+
+/*
+FUNCINLINE static ATTRINLINE Uint32 interp_32_431(Uint32 p1, Uint32 p2, Uint32 p3)
+{
+  return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*4 + INTERP_32_MASK_1(p2)*3 + INTERP_32_MASK_1(p3)) / 8)
+    | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*4 + INTERP_32_MASK_2(p2)*3 + INTERP_32_MASK_2(p3)) / 8);
+}
+
+FUNCINLINE static ATTRINLINE Uint32 interp_32_53(Uint32 p1, Uint32 p2)
+{
+  return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*5 + INTERP_32_MASK_1(p2)*3) / 8)
+    | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*5 + INTERP_32_MASK_2(p2)*3) / 8);
+}
+
+FUNCINLINE static ATTRINLINE Uint32 interp_32_151(Uint32 p1, Uint32 p2)
+{
+  return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*15 + INTERP_32_MASK_1(p2)) / 16)
+    | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*15 + INTERP_32_MASK_2(p2)) / 16);
+}
+
+FUNCINLINE static ATTRINLINE Uint32 interp_32_97(Uint32 p1, Uint32 p2)
+{
+  return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*9 + INTERP_32_MASK_1(p2)*7) / 16)
+    | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*9 + INTERP_32_MASK_2(p2)*7) / 16);
+}
+*/
+
+/***************************************************************************/
+/* diff */
+
+#define INTERP_Y_LIMIT (0x30*4)
+#define INTERP_U_LIMIT (0x07*4)
+#define INTERP_V_LIMIT (0x06*8)
+
+static int interp_16_diff(Uint16 p1, Uint16 p2)
+{
+  int r, g, b;
+  int y, u, v;
+
+  if (p1 == p2)
+    return 0;
+
+  if (interp_bits_per_pixel == 16) {
+    b = (int)((p1 & 0x1F) - (p2 & 0x1F)) << 3;
+    g = (int)((p1 & 0x7E0) - (p2 & 0x7E0)) >> 3;
+    r = (int)((p1 & 0xF800) - (p2 & 0xF800)) >> 8;
+  } else {
+    b = (int)((p1 & 0x1F) - (p2 & 0x1F)) << 3;
+    g = (int)((p1 & 0x3E0) - (p2 & 0x3E0)) >> 2;
+    r = (int)((p1 & 0x7C00) - (p2 & 0x7C00)) >> 7;
+  }
+
+  y = r + g + b;
+  u = r - b;
+  v = -r + 2*g - b;
+
+  if (y < -INTERP_Y_LIMIT || y > INTERP_Y_LIMIT)
+    return 1;
+
+  if (u < -INTERP_U_LIMIT || u > INTERP_U_LIMIT)
+    return 1;
+
+  if (v < -INTERP_V_LIMIT || v > INTERP_V_LIMIT)
+    return 1;
+
+  return 0;
+}
+
+static int interp_32_diff(Uint32 p1, Uint32 p2)
+{
+  int r, g, b;
+  int y, u, v;
+
+  if ((p1 & 0xF8F8F8) == (p2 & 0xF8F8F8))
+    return 0;
+
+  b = (int)((p1 & 0xFF) - (p2 & 0xFF));
+  g = (int)((p1 & 0xFF00) - (p2 & 0xFF00)) >> 8;
+  r = (int)((p1 & 0xFF0000) - (p2 & 0xFF0000)) >> 16;
+
+  y = r + g + b;
+  u = r - b;
+  v = -r + 2*g - b;
+
+  if (y < -INTERP_Y_LIMIT || y > INTERP_Y_LIMIT)
+    return 1;
+
+  if (u < -INTERP_U_LIMIT || u > INTERP_U_LIMIT)
+    return 1;
+
+  if (v < -INTERP_V_LIMIT || v > INTERP_V_LIMIT)
+    return 1;
+
+  return 0;
+}
+
+/*
+static void interp_set(Uint32 bits_per_pixel)
+{
+  interp_bits_per_pixel = bits_per_pixel;
+
+  switch (bits_per_pixel) {
+  case 15 :
+    interp_mask[0] = 0x7C1F;
+    interp_mask[1] = 0x03E0;
+    break;
+  case 16 :
+    interp_mask[0] = 0xF81F;
+    interp_mask[1] = 0x07E0;
+    break;
+  case 32 :
+    interp_mask[0] = 0xFF00FF;
+    interp_mask[1] = 0x00FF00;
+    break;
+  }
+}
+*/
+
+#endif
diff --git a/src/sdl2/filter/lq2x.c b/src/sdl2/filter/lq2x.c
new file mode 100644
index 000000000..8d06fa8cc
--- /dev/null
+++ b/src/sdl2/filter/lq2x.c
@@ -0,0 +1,564 @@
+#include "filters.h"
+#include "interp.h"
+
+static void hq2x_16_def(Uint16* dst0, Uint16* dst1, const Uint16* src0, const Uint16* src1, const Uint16* src2, Uint32 count)
+{
+  Uint32 i;
+
+  for(i=0;i<count;++i) {
+    Uint8 mask;
+
+    Uint16 c[9];
+
+    c[1] = src0[0];
+    c[4] = src1[0];
+    c[7] = src2[0];
+
+    if (i>0) {
+      c[0] = src0[-1];
+      c[3] = src1[-1];
+      c[6] = src2[-1];
+    } else {
+      c[0] = c[1];
+      c[3] = c[4];
+      c[6] = c[7];
+    }
+
+    if (i<count-1) {
+      c[2] = src0[1];
+      c[5] = src1[1];
+      c[8] = src2[1];
+    } else {
+      c[2] = c[1];
+      c[5] = c[4];
+      c[8] = c[7];
+    }
+
+    mask = 0;
+
+    if (interp_16_diff(c[0], c[4]))
+      mask |= 1 << 0;
+    if (interp_16_diff(c[1], c[4]))
+      mask |= 1 << 1;
+    if (interp_16_diff(c[2], c[4]))
+      mask |= 1 << 2;
+    if (interp_16_diff(c[3], c[4]))
+      mask |= 1 << 3;
+    if (interp_16_diff(c[5], c[4]))
+      mask |= 1 << 4;
+    if (interp_16_diff(c[6], c[4]))
+      mask |= 1 << 5;
+    if (interp_16_diff(c[7], c[4]))
+      mask |= 1 << 6;
+    if (interp_16_diff(c[8], c[4]))
+      mask |= 1 << 7;
+
+#define P0 dst0[0]
+#define P1 dst0[1]
+#define P2 dst1[0]
+#define P3 dst1[1]
+#define MUR interp_16_diff(c[1], c[5])
+#define MDR interp_16_diff(c[5], c[7])
+#define MDL interp_16_diff(c[7], c[3])
+#define MUL interp_16_diff(c[3], c[1])
+#define IC(p0) c[p0]
+#define I11(p0,p1) interp_16_11(c[p0], c[p1])
+#define I211(p0,p1,p2) interp_16_211(c[p0], c[p1], c[p2])
+#define I31(p0,p1) interp_16_31(c[p0], c[p1])
+#define I332(p0,p1,p2) interp_16_332(c[p0], c[p1], c[p2])
+#define I431(p0,p1,p2) interp_16_431(c[p0], c[p1], c[p2])
+#define I521(p0,p1,p2) interp_16_521(c[p0], c[p1], c[p2])
+#define I53(p0,p1) interp_16_53(c[p0], c[p1])
+#define I611(p0,p1,p2) interp_16_611(c[p0], c[p1], c[p2])
+#define I71(p0,p1) interp_16_71(c[p0], c[p1])
+#define I772(p0,p1,p2) interp_16_772(c[p0], c[p1], c[p2])
+#define I97(p0,p1) interp_16_97(c[p0], c[p1])
+#define I1411(p0,p1,p2) interp_16_1411(c[p0], c[p1], c[p2])
+#define I151(p0,p1) interp_16_151(c[p0], c[p1])
+
+    switch (mask) {
+#include "hq2x.h"
+    }
+
+#undef P0
+#undef P1
+#undef P2
+#undef P3
+#undef MUR
+#undef MDR
+#undef MDL
+#undef MUL
+#undef IC
+#undef I11
+#undef I211
+#undef I31
+#undef I332
+#undef I431
+#undef I521
+#undef I53
+#undef I611
+#undef I71
+#undef I772
+#undef I97
+#undef I1411
+#undef I151
+
+    src0 += 1;
+    src1 += 1;
+    src2 += 1;
+    dst0 += 2;
+    dst1 += 2;
+  }
+}
+
+static void hq2x_32_def(Uint32* dst0, Uint32* dst1, const Uint32* src0, const Uint32* src1, const Uint32* src2, Uint32 count)
+{
+  Uint32 i;
+
+  for(i=0;i<count;++i) {
+    Uint8 mask;
+
+    Uint32 c[9];
+
+    c[1] = src0[0];
+    c[4] = src1[0];
+    c[7] = src2[0];
+
+    if (i>0) {
+      c[0] = src0[-1];
+      c[3] = src1[-1];
+      c[6] = src2[-1];
+    } else {
+      c[0] = c[1];
+      c[3] = c[4];
+      c[6] = c[7];
+    }
+
+    if (i<count-1) {
+      c[2] = src0[1];
+      c[5] = src1[1];
+      c[8] = src2[1];
+    } else {
+      c[2] = c[1];
+      c[5] = c[4];
+      c[8] = c[7];
+    }
+
+    mask = 0;
+
+    if (interp_32_diff(c[0], c[4]))
+      mask |= 1 << 0;
+    if (interp_32_diff(c[1], c[4]))
+      mask |= 1 << 1;
+    if (interp_32_diff(c[2], c[4]))
+      mask |= 1 << 2;
+    if (interp_32_diff(c[3], c[4]))
+      mask |= 1 << 3;
+    if (interp_32_diff(c[5], c[4]))
+      mask |= 1 << 4;
+    if (interp_32_diff(c[6], c[4]))
+      mask |= 1 << 5;
+    if (interp_32_diff(c[7], c[4]))
+      mask |= 1 << 6;
+    if (interp_32_diff(c[8], c[4]))
+      mask |= 1 << 7;
+
+#define P0 dst0[0]
+#define P1 dst0[1]
+#define P2 dst1[0]
+#define P3 dst1[1]
+#define MUR interp_32_diff(c[1], c[5])
+#define MDR interp_32_diff(c[5], c[7])
+#define MDL interp_32_diff(c[7], c[3])
+#define MUL interp_32_diff(c[3], c[1])
+#define IC(p0) c[p0]
+#define I11(p0,p1) interp_32_11(c[p0], c[p1])
+#define I211(p0,p1,p2) interp_32_211(c[p0], c[p1], c[p2])
+#define I31(p0,p1) interp_32_31(c[p0], c[p1])
+#define I332(p0,p1,p2) interp_32_332(c[p0], c[p1], c[p2])
+#define I431(p0,p1,p2) interp_32_431(c[p0], c[p1], c[p2])
+#define I521(p0,p1,p2) interp_32_521(c[p0], c[p1], c[p2])
+#define I53(p0,p1) interp_32_53(c[p0], c[p1])
+#define I611(p0,p1,p2) interp_32_611(c[p0], c[p1], c[p2])
+#define I71(p0,p1) interp_32_71(c[p0], c[p1])
+#define I772(p0,p1,p2) interp_32_772(c[p0], c[p1], c[p2])
+#define I97(p0,p1) interp_32_97(c[p0], c[p1])
+#define I1411(p0,p1,p2) interp_32_1411(c[p0], c[p1], c[p2])
+#define I151(p0,p1) interp_32_151(c[p0], c[p1])
+
+    switch (mask) {
+#include "hq2x.h"
+    }
+
+#undef P0
+#undef P1
+#undef P2
+#undef P3
+#undef MUR
+#undef MDR
+#undef MDL
+#undef MUL
+#undef IC
+#undef I11
+#undef I211
+#undef I31
+#undef I332
+#undef I431
+#undef I521
+#undef I53
+#undef I611
+#undef I71
+#undef I772
+#undef I97
+#undef I1411
+#undef I151
+
+    src0 += 1;
+    src1 += 1;
+    src2 += 1;
+    dst0 += 2;
+    dst1 += 2;
+  }
+}
+
+/***************************************************************************/
+/* LQ2x C implementation */
+
+/*
+ * This effect is derived from the hq2x effect made by Maxim Stepin
+ */
+
+static void lq2x_16_def(Uint16* dst0, Uint16* dst1, const Uint16* src0, const Uint16* src1, const Uint16* src2, Uint32 count)
+{
+  Uint32 i;
+
+  for(i=0;i<count;++i) {
+    Uint8 mask;
+
+    Uint16 c[9];
+
+    c[1] = src0[0];
+    c[4] = src1[0];
+    c[7] = src2[0];
+
+    if (i>0) {
+      c[0] = src0[-1];
+      c[3] = src1[-1];
+      c[6] = src2[-1];
+    } else {
+      c[0] = c[1];
+      c[3] = c[4];
+      c[6] = c[7];
+    }
+
+    if (i<count-1) {
+      c[2] = src0[1];
+      c[5] = src1[1];
+      c[8] = src2[1];
+    } else {
+      c[2] = c[1];
+      c[5] = c[4];
+      c[8] = c[7];
+    }
+
+    mask = 0;
+
+    if (c[0] != c[4])
+      mask |= 1 << 0;
+    if (c[1] != c[4])
+      mask |= 1 << 1;
+    if (c[2] != c[4])
+      mask |= 1 << 2;
+    if (c[3] != c[4])
+      mask |= 1 << 3;
+    if (c[5] != c[4])
+      mask |= 1 << 4;
+    if (c[6] != c[4])
+      mask |= 1 << 5;
+    if (c[7] != c[4])
+      mask |= 1 << 6;
+    if (c[8] != c[4])
+      mask |= 1 << 7;
+
+#define P0 dst0[0]
+#define P1 dst0[1]
+#define P2 dst1[0]
+#define P3 dst1[1]
+#define MUR (c[1] != c[5])
+#define MDR (c[5] != c[7])
+#define MDL (c[7] != c[3])
+#define MUL (c[3] != c[1])
+#define IC(p0) c[p0]
+#define I11(p0,p1) interp_16_11(c[p0], c[p1])
+#define I211(p0,p1,p2) interp_16_211(c[p0], c[p1], c[p2])
+#define I31(p0,p1) interp_16_31(c[p0], c[p1])
+#define I332(p0,p1,p2) interp_16_332(c[p0], c[p1], c[p2])
+#define I431(p0,p1,p2) interp_16_431(c[p0], c[p1], c[p2])
+#define I521(p0,p1,p2) interp_16_521(c[p0], c[p1], c[p2])
+#define I53(p0,p1) interp_16_53(c[p0], c[p1])
+#define I611(p0,p1,p2) interp_16_611(c[p0], c[p1], c[p2])
+#define I71(p0,p1) interp_16_71(c[p0], c[p1])
+#define I772(p0,p1,p2) interp_16_772(c[p0], c[p1], c[p2])
+#define I97(p0,p1) interp_16_97(c[p0], c[p1])
+#define I1411(p0,p1,p2) interp_16_1411(c[p0], c[p1], c[p2])
+#define I151(p0,p1) interp_16_151(c[p0], c[p1])
+
+    switch (mask) {
+#include "lq2x.h"
+    }
+
+#undef P0
+#undef P1
+#undef P2
+#undef P3
+#undef MUR
+#undef MDR
+#undef MDL
+#undef MUL
+#undef IC
+#undef I11
+#undef I211
+#undef I31
+#undef I332
+#undef I431
+#undef I521
+#undef I53
+#undef I611
+#undef I71
+#undef I772
+#undef I97
+#undef I1411
+#undef I151
+
+    src0 += 1;
+    src1 += 1;
+    src2 += 1;
+    dst0 += 2;
+    dst1 += 2;
+  }
+}
+
+static void lq2x_32_def(Uint32* dst0, Uint32* dst1, const Uint32* src0, const Uint32* src1, const Uint32* src2, Uint32 count)
+{
+  Uint32 i;
+
+  for(i=0;i<count;++i) {
+    Uint8 mask;
+
+    Uint32 c[9];
+
+    c[1] = src0[0];
+    c[4] = src1[0];
+    c[7] = src2[0];
+
+    if (i>0) {
+      c[0] = src0[-1];
+      c[3] = src1[-1];
+      c[6] = src2[-1];
+    } else {
+      c[0] = c[1];
+      c[3] = c[4];
+      c[6] = c[7];
+    }
+
+    if (i<count-1) {
+      c[2] = src0[1];
+      c[5] = src1[1];
+      c[8] = src2[1];
+    } else {
+      c[2] = c[1];
+      c[5] = c[4];
+      c[8] = c[7];
+    }
+
+    mask = 0;
+
+    if (c[0] != c[4])
+      mask |= 1 << 0;
+    if (c[1] != c[4])
+      mask |= 1 << 1;
+    if (c[2] != c[4])
+      mask |= 1 << 2;
+    if (c[3] != c[4])
+      mask |= 1 << 3;
+    if (c[5] != c[4])
+      mask |= 1 << 4;
+    if (c[6] != c[4])
+      mask |= 1 << 5;
+    if (c[7] != c[4])
+      mask |= 1 << 6;
+    if (c[8] != c[4])
+      mask |= 1 << 7;
+
+#define P0 dst0[0]
+#define P1 dst0[1]
+#define P2 dst1[0]
+#define P3 dst1[1]
+#define MUR (c[1] != c[5])
+#define MDR (c[5] != c[7])
+#define MDL (c[7] != c[3])
+#define MUL (c[3] != c[1])
+#define IC(p0) c[p0]
+#define I11(p0,p1) interp_32_11(c[p0], c[p1])
+#define I211(p0,p1,p2) interp_32_211(c[p0], c[p1], c[p2])
+#define I31(p0,p1) interp_32_31(c[p0], c[p1])
+#define I332(p0,p1,p2) interp_32_332(c[p0], c[p1], c[p2])
+#define I431(p0,p1,p2) interp_32_431(c[p0], c[p1], c[p2])
+#define I521(p0,p1,p2) interp_32_521(c[p0], c[p1], c[p2])
+#define I53(p0,p1) interp_32_53(c[p0], c[p1])
+#define I611(p0,p1,p2) interp_32_611(c[p0], c[p1], c[p2])
+#define I71(p0,p1) interp_32_71(c[p0], c[p1])
+#define I772(p0,p1,p2) interp_32_772(c[p0], c[p1], c[p2])
+#define I97(p0,p1) interp_32_97(c[p0], c[p1])
+#define I1411(p0,p1,p2) interp_32_1411(c[p0], c[p1], c[p2])
+#define I151(p0,p1) interp_32_151(c[p0], c[p1])
+
+    switch (mask) {
+#include "lq2x.h"
+    }
+
+#undef P0
+#undef P1
+#undef P2
+#undef P3
+#undef MUR
+#undef MDR
+#undef MDL
+#undef MUL
+#undef IC
+#undef I11
+#undef I211
+#undef I31
+#undef I332
+#undef I431
+#undef I521
+#undef I53
+#undef I611
+#undef I71
+#undef I772
+#undef I97
+#undef I1411
+#undef I151
+
+    src0 += 1;
+    src1 += 1;
+    src2 += 1;
+    dst0 += 2;
+    dst1 += 2;
+  }
+}
+
+void hq2x16(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr,
+           Uint32 dstPitch, int width, int height)
+{
+  Uint16 *dst0 = (Uint16 *)dstPtr;
+  Uint16 *dst1 = dst0 + (dstPitch >> 1);
+
+  Uint16 *src0 = (Uint16 *)srcPtr;
+  Uint16 *src1 = src0 + (srcPitch >> 1);
+  Uint16 *src2 = src1 + (srcPitch >> 1);
+  int count = height-2;
+
+  hq2x_16_def(dst0, dst1, src0, src0, src1, width);
+
+  while(count) {
+    dst0 += dstPitch;
+    dst1 += dstPitch;
+    hq2x_16_def(dst0, dst1, src0, src1, src2, width);
+    src0 = src1;
+    src1 = src2;
+    src2 += srcPitch >> 1;
+    --count;
+  }
+  dst0 += dstPitch;
+  dst1 += dstPitch;
+  hq2x_16_def(dst0, dst1, src0, src1, src1, width);
+}
+
+void hq2x32(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr,
+             Uint32 dstPitch, int width, int height)
+{
+  Uint32 *dst0 = (Uint32 *)dstPtr;
+  Uint32 *dst1 = dst0 + (dstPitch >> 2);
+
+  Uint32 *src0 = (Uint32 *)srcPtr;
+  Uint32 *src1 = src0 + (srcPitch >> 2);
+  Uint32 *src2 = src1 + (srcPitch >> 2);
+  int count = height-2;
+
+  hq2x_32_def(dst0, dst1, src0, src0, src1, width);
+
+  while(count) {
+    dst0 += dstPitch >> 1;
+    dst1 += dstPitch >> 1;
+    hq2x_32_def(dst0, dst1, src0, src1, src2, width);
+    src0 = src1;
+    src1 = src2;
+    src2 += srcPitch >> 2;
+    --count;
+  }
+  dst0 += dstPitch >> 1;
+  dst1 += dstPitch >> 1;
+  hq2x_32_def(dst0, dst1, src0, src1, src1, width);
+}
+
+void lq2x16(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr,
+           Uint32 dstPitch, int width, int height)
+{
+  Uint16 *dst0 = (Uint16 *)dstPtr;
+  Uint16 *dst1 = dst0 + (dstPitch >> 1);
+
+  Uint16 *src0 = (Uint16 *)srcPtr;
+  Uint16 *src1 = src0 + (srcPitch >> 1);
+  Uint16 *src2 = src1 + (srcPitch >> 1);
+  int count = height-2;
+
+  lq2x_16_def(dst0, dst1, src0, src0, src1, width);
+
+  while(count) {
+    dst0 += dstPitch;
+    dst1 += dstPitch;
+    lq2x_16_def(dst0, dst1, src0, src1, src2, width);
+    src0 = src1;
+    src1 = src2;
+    src2 += srcPitch >> 1;
+    --count;
+  }
+  dst0 += dstPitch;
+  dst1 += dstPitch;
+  lq2x_16_def(dst0, dst1, src0, src1, src1, width);
+}
+
+void lq2x32(Uint8 *srcPtr, Uint32 srcPitch, Uint8 *dstPtr,
+             Uint32 dstPitch, int width, int height)
+{
+  Uint32 *dst0 = (Uint32 *)dstPtr;
+  Uint32 *dst1 = dst0 + (dstPitch >> 2);
+
+  Uint32 *src0 = (Uint32 *)srcPtr;
+  Uint32 *src1 = src0 + (srcPitch >> 2);
+  Uint32 *src2 = src1 + (srcPitch >> 2);
+  int count = height-2;
+
+  lq2x_32_def(dst0, dst1, src0, src0, src1, width);
+
+  while(count) {
+    dst0 += dstPitch >> 1;
+    dst1 += dstPitch >> 1;
+    lq2x_32_def(dst0, dst1, src0, src1, src2, width);
+    src0 = src1;
+    src1 = src2;
+    src2 += srcPitch >> 2;
+    --count;
+  }
+  dst0 += dstPitch >> 1;
+  dst1 += dstPitch >> 1;
+  lq2x_32_def(dst0, dst1, src0, src1, src1, width);
+}
+
+/*
+static inline void hq2x_init(Uint32 bits_per_pixel)
+{
+  interp_set(bits_per_pixel);
+}
+*/
diff --git a/src/sdl2/filter/lq2x.h b/src/sdl2/filter/lq2x.h
new file mode 100644
index 000000000..094c2b5ae
--- /dev/null
+++ b/src/sdl2/filter/lq2x.h
@@ -0,0 +1,1284 @@
+case 0 :
+case 2 :
+case 4 :
+case 6 :
+case 8 :
+case 12 :
+case 16 :
+case 20 :
+case 24 :
+case 28 :
+case 32 :
+case 34 :
+case 36 :
+case 38 :
+case 40 :
+case 44 :
+case 48 :
+case 52 :
+case 56 :
+case 60 :
+case 64 :
+case 66 :
+case 68 :
+case 70 :
+case 96 :
+case 98 :
+case 100 :
+case 102 :
+case 128 :
+case 130 :
+case 132 :
+case 134 :
+case 136 :
+case 140 :
+case 144 :
+case 148 :
+case 152 :
+case 156 :
+case 160 :
+case 162 :
+case 164 :
+case 166 :
+case 168 :
+case 172 :
+case 176 :
+case 180 :
+case 184 :
+case 188 :
+case 192 :
+case 194 :
+case 196 :
+case 198 :
+case 224 :
+case 226 :
+case 228 :
+case 230 :
+{
+  P0 = IC(0);
+  P1 = IC(0);
+  P2 = IC(0);
+  P3 = IC(0);
+} break;
+case 1 :
+case 5 :
+case 9 :
+case 13 :
+case 17 :
+case 21 :
+case 25 :
+case 29 :
+case 33 :
+case 37 :
+case 41 :
+case 45 :
+case 49 :
+case 53 :
+case 57 :
+case 61 :
+case 65 :
+case 69 :
+case 97 :
+case 101 :
+case 129 :
+case 133 :
+case 137 :
+case 141 :
+case 145 :
+case 149 :
+case 153 :
+case 157 :
+case 161 :
+case 165 :
+case 169 :
+case 173 :
+case 177 :
+case 181 :
+case 185 :
+case 189 :
+case 193 :
+case 197 :
+case 225 :
+case 229 :
+{
+  P0 = IC(1);
+  P1 = IC(1);
+  P2 = IC(1);
+  P3 = IC(1);
+} break;
+case 3 :
+case 35 :
+case 67 :
+case 99 :
+case 131 :
+case 163 :
+case 195 :
+case 227 :
+{
+  P0 = IC(2);
+  P1 = IC(2);
+  P2 = IC(2);
+  P3 = IC(2);
+} break;
+case 7 :
+case 39 :
+case 71 :
+case 103 :
+case 135 :
+case 167 :
+case 199 :
+case 231 :
+{
+  P0 = IC(3);
+  P1 = IC(3);
+  P2 = IC(3);
+  P3 = IC(3);
+} break;
+case 10 :
+case 138 :
+{
+  P1 = IC(0);
+  P2 = IC(0);
+  P3 = IC(0);
+  if (MUL) {
+    P0 = IC(0);
+  } else {
+    P0 = I211(0, 1, 3);
+  }
+} break;
+case 11 :
+case 27 :
+case 75 :
+case 139 :
+case 155 :
+case 203 :
+{
+  P1 = IC(2);
+  P2 = IC(2);
+  P3 = IC(2);
+  if (MUL) {
+    P0 = IC(2);
+  } else {
+    P0 = I211(2, 1, 3);
+  }
+} break;
+case 14 :
+case 142 :
+{
+  P2 = IC(0);
+  P3 = IC(0);
+  if (MUL) {
+    P0 = IC(0);
+    P1 = IC(0);
+  } else {
+    P0 = I332(1, 3, 0);
+    P1 = I31(0, 1);
+  }
+} break;
+case 15 :
+case 143 :
+case 207 :
+{
+  P2 = IC(4);
+  P3 = IC(4);
+  if (MUL) {
+    P0 = IC(4);
+    P1 = IC(4);
+  } else {
+    P0 = I332(1, 3, 4);
+    P1 = I31(4, 1);
+  }
+} break;
+case 18 :
+case 22 :
+case 30 :
+case 50 :
+case 54 :
+case 62 :
+case 86 :
+case 118 :
+{
+  P0 = IC(0);
+  P2 = IC(0);
+  P3 = IC(0);
+  if (MUR) {
+    P1 = IC(0);
+  } else {
+    P1 = I211(0, 1, 5);
+  }
+} break;
+case 19 :
+case 51 :
+{
+  P2 = IC(2);
+  P3 = IC(2);
+  if (MUR) {
+    P0 = IC(2);
+    P1 = IC(2);
+  } else {
+    P0 = I31(2, 1);
+    P1 = I332(1, 5, 2);
+  }
+} break;
+case 23 :
+case 55 :
+case 119 :
+{
+  P2 = IC(3);
+  P3 = IC(3);
+  if (MUR) {
+    P0 = IC(3);
+    P1 = IC(3);
+  } else {
+    P0 = I31(3, 1);
+    P1 = I332(1, 5, 3);
+  }
+} break;
+case 26 :
+{
+  P2 = IC(0);
+  P3 = IC(0);
+  if (MUL) {
+    P0 = IC(0);
+  } else {
+    P0 = I211(0, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(0);
+  } else {
+    P1 = I211(0, 1, 5);
+  }
+} break;
+case 31 :
+case 95 :
+{
+  P2 = IC(4);
+  P3 = IC(4);
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 42 :
+case 170 :
+{
+  P1 = IC(0);
+  P3 = IC(0);
+  if (MUL) {
+    P0 = IC(0);
+    P2 = IC(0);
+  } else {
+    P0 = I332(1, 3, 0);
+    P2 = I31(0, 3);
+  }
+} break;
+case 43 :
+case 171 :
+case 187 :
+{
+  P1 = IC(2);
+  P3 = IC(2);
+  if (MUL) {
+    P0 = IC(2);
+    P2 = IC(2);
+  } else {
+    P0 = I332(1, 3, 2);
+    P2 = I31(2, 3);
+  }
+} break;
+case 46 :
+case 174 :
+{
+  P1 = IC(0);
+  P2 = IC(0);
+  P3 = IC(0);
+  if (MUL) {
+    P0 = IC(0);
+  } else {
+    P0 = I611(0, 1, 3);
+  }
+} break;
+case 47 :
+case 175 :
+{
+  P1 = IC(4);
+  P2 = IC(4);
+  P3 = IC(4);
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I1411(4, 1, 3);
+  }
+} break;
+case 58 :
+case 154 :
+case 186 :
+{
+  P2 = IC(0);
+  P3 = IC(0);
+  if (MUL) {
+    P0 = IC(0);
+  } else {
+    P0 = I611(0, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(0);
+  } else {
+    P1 = I611(0, 1, 5);
+  }
+} break;
+case 59 :
+{
+  P2 = IC(2);
+  P3 = IC(2);
+  if (MUL) {
+    P0 = IC(2);
+  } else {
+    P0 = I211(2, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(2);
+  } else {
+    P1 = I611(2, 1, 5);
+  }
+} break;
+case 63 :
+{
+  P2 = IC(4);
+  P3 = IC(4);
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I1411(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 72 :
+case 76 :
+case 104 :
+case 106 :
+case 108 :
+case 110 :
+case 120 :
+case 124 :
+{
+  P0 = IC(0);
+  P1 = IC(0);
+  P3 = IC(0);
+  if (MDL) {
+    P2 = IC(0);
+  } else {
+    P2 = I211(0, 3, 7);
+  }
+} break;
+case 73 :
+case 77 :
+case 105 :
+case 109 :
+case 125 :
+{
+  P1 = IC(1);
+  P3 = IC(1);
+  if (MDL) {
+    P0 = IC(1);
+    P2 = IC(1);
+  } else {
+    P0 = I31(1, 3);
+    P2 = I332(3, 7, 1);
+  }
+} break;
+case 74 :
+{
+  P1 = IC(0);
+  P3 = IC(0);
+  if (MDL) {
+    P2 = IC(0);
+  } else {
+    P2 = I211(0, 3, 7);
+  }
+  if (MUL) {
+    P0 = IC(0);
+  } else {
+    P0 = I211(0, 1, 3);
+  }
+} break;
+case 78 :
+case 202 :
+case 206 :
+{
+  P1 = IC(0);
+  P3 = IC(0);
+  if (MDL) {
+    P2 = IC(0);
+  } else {
+    P2 = I611(0, 3, 7);
+  }
+  if (MUL) {
+    P0 = IC(0);
+  } else {
+    P0 = I611(0, 1, 3);
+  }
+} break;
+case 79 :
+{
+  P1 = IC(4);
+  P3 = IC(4);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I611(4, 3, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+} break;
+case 80 :
+case 208 :
+case 210 :
+case 216 :
+{
+  P0 = IC(0);
+  P1 = IC(0);
+  P2 = IC(0);
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I211(0, 5, 7);
+  }
+} break;
+case 81 :
+case 209 :
+case 217 :
+{
+  P0 = IC(1);
+  P1 = IC(1);
+  P2 = IC(1);
+  if (MDR) {
+    P3 = IC(1);
+  } else {
+    P3 = I211(1, 5, 7);
+  }
+} break;
+case 82 :
+case 214 :
+case 222 :
+{
+  P0 = IC(0);
+  P2 = IC(0);
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I211(0, 5, 7);
+  }
+  if (MUR) {
+    P1 = IC(0);
+  } else {
+    P1 = I211(0, 1, 5);
+  }
+} break;
+case 83 :
+case 115 :
+{
+  P0 = IC(2);
+  P2 = IC(2);
+  if (MDR) {
+    P3 = IC(2);
+  } else {
+    P3 = I611(2, 5, 7);
+  }
+  if (MUR) {
+    P1 = IC(2);
+  } else {
+    P1 = I611(2, 1, 5);
+  }
+} break;
+case 84 :
+case 212 :
+{
+  P0 = IC(0);
+  P2 = IC(0);
+  if (MDR) {
+    P1 = IC(0);
+    P3 = IC(0);
+  } else {
+    P1 = I31(0, 5);
+    P3 = I332(5, 7, 0);
+  }
+} break;
+case 85 :
+case 213 :
+case 221 :
+{
+  P0 = IC(1);
+  P2 = IC(1);
+  if (MDR) {
+    P1 = IC(1);
+    P3 = IC(1);
+  } else {
+    P1 = I31(1, 5);
+    P3 = I332(5, 7, 1);
+  }
+} break;
+case 87 :
+{
+  P0 = IC(3);
+  P2 = IC(3);
+  if (MDR) {
+    P3 = IC(3);
+  } else {
+    P3 = I611(3, 5, 7);
+  }
+  if (MUR) {
+    P1 = IC(3);
+  } else {
+    P1 = I211(3, 1, 5);
+  }
+} break;
+case 88 :
+case 248 :
+case 250 :
+{
+  P0 = IC(0);
+  P1 = IC(0);
+  if (MDL) {
+    P2 = IC(0);
+  } else {
+    P2 = I211(0, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I211(0, 5, 7);
+  }
+} break;
+case 89 :
+case 93 :
+{
+  P0 = IC(1);
+  P1 = IC(1);
+  if (MDL) {
+    P2 = IC(1);
+  } else {
+    P2 = I611(1, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(1);
+  } else {
+    P3 = I611(1, 5, 7);
+  }
+} break;
+case 90 :
+{
+  if (MDL) {
+    P2 = IC(0);
+  } else {
+    P2 = I611(0, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I611(0, 5, 7);
+  }
+  if (MUL) {
+    P0 = IC(0);
+  } else {
+    P0 = I611(0, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(0);
+  } else {
+    P1 = I611(0, 1, 5);
+  }
+} break;
+case 91 :
+{
+  if (MDL) {
+    P2 = IC(2);
+  } else {
+    P2 = I611(2, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(2);
+  } else {
+    P3 = I611(2, 5, 7);
+  }
+  if (MUL) {
+    P0 = IC(2);
+  } else {
+    P0 = I211(2, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(2);
+  } else {
+    P1 = I611(2, 1, 5);
+  }
+} break;
+case 92 :
+{
+  P0 = IC(0);
+  P1 = IC(0);
+  if (MDL) {
+    P2 = IC(0);
+  } else {
+    P2 = I611(0, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I611(0, 5, 7);
+  }
+} break;
+case 94 :
+{
+  if (MDL) {
+    P2 = IC(0);
+  } else {
+    P2 = I611(0, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I611(0, 5, 7);
+  }
+  if (MUL) {
+    P0 = IC(0);
+  } else {
+    P0 = I611(0, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(0);
+  } else {
+    P1 = I211(0, 1, 5);
+  }
+} break;
+case 107 :
+case 123 :
+{
+  P1 = IC(2);
+  P3 = IC(2);
+  if (MDL) {
+    P2 = IC(2);
+  } else {
+    P2 = I211(2, 3, 7);
+  }
+  if (MUL) {
+    P0 = IC(2);
+  } else {
+    P0 = I211(2, 1, 3);
+  }
+} break;
+case 111 :
+{
+  P1 = IC(4);
+  P3 = IC(4);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I1411(4, 1, 3);
+  }
+} break;
+case 112 :
+case 240 :
+{
+  P0 = IC(0);
+  P1 = IC(0);
+  if (MDR) {
+    P2 = IC(0);
+    P3 = IC(0);
+  } else {
+    P2 = I31(0, 7);
+    P3 = I332(5, 7, 0);
+  }
+} break;
+case 113 :
+case 241 :
+{
+  P0 = IC(1);
+  P1 = IC(1);
+  if (MDR) {
+    P2 = IC(1);
+    P3 = IC(1);
+  } else {
+    P2 = I31(1, 7);
+    P3 = I332(5, 7, 1);
+  }
+} break;
+case 114 :
+{
+  P0 = IC(0);
+  P2 = IC(0);
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I611(0, 5, 7);
+  }
+  if (MUR) {
+    P1 = IC(0);
+  } else {
+    P1 = I611(0, 1, 5);
+  }
+} break;
+case 116 :
+{
+  P0 = IC(0);
+  P1 = IC(0);
+  P2 = IC(0);
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I611(0, 5, 7);
+  }
+} break;
+case 117 :
+{
+  P0 = IC(1);
+  P1 = IC(1);
+  P2 = IC(1);
+  if (MDR) {
+    P3 = IC(1);
+  } else {
+    P3 = I611(1, 5, 7);
+  }
+} break;
+case 121 :
+{
+  P0 = IC(1);
+  P1 = IC(1);
+  if (MDL) {
+    P2 = IC(1);
+  } else {
+    P2 = I211(1, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(1);
+  } else {
+    P3 = I611(1, 5, 7);
+  }
+} break;
+case 122 :
+{
+  if (MDL) {
+    P2 = IC(0);
+  } else {
+    P2 = I211(0, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I611(0, 5, 7);
+  }
+  if (MUL) {
+    P0 = IC(0);
+  } else {
+    P0 = I611(0, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(0);
+  } else {
+    P1 = I611(0, 1, 5);
+  }
+} break;
+case 126 :
+{
+  P0 = IC(0);
+  P3 = IC(0);
+  if (MDL) {
+    P2 = IC(0);
+  } else {
+    P2 = I211(0, 3, 7);
+  }
+  if (MUR) {
+    P1 = IC(0);
+  } else {
+    P1 = I211(0, 1, 5);
+  }
+} break;
+case 127 :
+{
+  P3 = IC(4);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I211(4, 3, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I1411(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I211(4, 1, 5);
+  }
+} break;
+case 146 :
+case 150 :
+case 178 :
+case 182 :
+case 190 :
+{
+  P0 = IC(0);
+  P2 = IC(0);
+  if (MUR) {
+    P1 = IC(0);
+    P3 = IC(0);
+  } else {
+    P1 = I332(1, 5, 0);
+    P3 = I31(0, 5);
+  }
+} break;
+case 147 :
+case 179 :
+{
+  P0 = IC(2);
+  P2 = IC(2);
+  P3 = IC(2);
+  if (MUR) {
+    P1 = IC(2);
+  } else {
+    P1 = I611(2, 1, 5);
+  }
+} break;
+case 151 :
+case 183 :
+{
+  P0 = IC(3);
+  P2 = IC(3);
+  P3 = IC(3);
+  if (MUR) {
+    P1 = IC(3);
+  } else {
+    P1 = I1411(3, 1, 5);
+  }
+} break;
+case 158 :
+{
+  P2 = IC(0);
+  P3 = IC(0);
+  if (MUL) {
+    P0 = IC(0);
+  } else {
+    P0 = I611(0, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(0);
+  } else {
+    P1 = I211(0, 1, 5);
+  }
+} break;
+case 159 :
+{
+  P2 = IC(4);
+  P3 = IC(4);
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I1411(4, 1, 5);
+  }
+} break;
+case 191 :
+{
+  P2 = IC(4);
+  P3 = IC(4);
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I1411(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I1411(4, 1, 5);
+  }
+} break;
+case 200 :
+case 204 :
+case 232 :
+case 236 :
+case 238 :
+{
+  P0 = IC(0);
+  P1 = IC(0);
+  if (MDL) {
+    P2 = IC(0);
+    P3 = IC(0);
+  } else {
+    P2 = I332(3, 7, 0);
+    P3 = I31(0, 7);
+  }
+} break;
+case 201 :
+case 205 :
+{
+  P0 = IC(1);
+  P1 = IC(1);
+  P3 = IC(1);
+  if (MDL) {
+    P2 = IC(1);
+  } else {
+    P2 = I611(1, 3, 7);
+  }
+} break;
+case 211 :
+{
+  P0 = IC(2);
+  P1 = IC(2);
+  P2 = IC(2);
+  if (MDR) {
+    P3 = IC(2);
+  } else {
+    P3 = I211(2, 5, 7);
+  }
+} break;
+case 215 :
+{
+  P0 = IC(3);
+  P2 = IC(3);
+  if (MDR) {
+    P3 = IC(3);
+  } else {
+    P3 = I211(3, 5, 7);
+  }
+  if (MUR) {
+    P1 = IC(3);
+  } else {
+    P1 = I1411(3, 1, 5);
+  }
+} break;
+case 218 :
+{
+  if (MDL) {
+    P2 = IC(0);
+  } else {
+    P2 = I611(0, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I211(0, 5, 7);
+  }
+  if (MUL) {
+    P0 = IC(0);
+  } else {
+    P0 = I611(0, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(0);
+  } else {
+    P1 = I611(0, 1, 5);
+  }
+} break;
+case 219 :
+{
+  P1 = IC(2);
+  P2 = IC(2);
+  if (MDR) {
+    P3 = IC(2);
+  } else {
+    P3 = I211(2, 5, 7);
+  }
+  if (MUL) {
+    P0 = IC(2);
+  } else {
+    P0 = I211(2, 1, 3);
+  }
+} break;
+case 220 :
+{
+  P0 = IC(0);
+  P1 = IC(0);
+  if (MDL) {
+    P2 = IC(0);
+  } else {
+    P2 = I611(0, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I211(0, 5, 7);
+  }
+} break;
+case 223 :
+{
+  P2 = IC(4);
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I211(4, 5, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I211(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I1411(4, 1, 5);
+  }
+} break;
+case 233 :
+case 237 :
+{
+  P0 = IC(1);
+  P1 = IC(1);
+  P3 = IC(1);
+  if (MDL) {
+    P2 = IC(1);
+  } else {
+    P2 = I1411(1, 3, 7);
+  }
+} break;
+case 234 :
+{
+  P1 = IC(0);
+  P3 = IC(0);
+  if (MDL) {
+    P2 = IC(0);
+  } else {
+    P2 = I211(0, 3, 7);
+  }
+  if (MUL) {
+    P0 = IC(0);
+  } else {
+    P0 = I611(0, 1, 3);
+  }
+} break;
+case 235 :
+{
+  P1 = IC(2);
+  P3 = IC(2);
+  if (MDL) {
+    P2 = IC(2);
+  } else {
+    P2 = I1411(2, 3, 7);
+  }
+  if (MUL) {
+    P0 = IC(2);
+  } else {
+    P0 = I211(2, 1, 3);
+  }
+} break;
+case 239 :
+{
+  P1 = IC(4);
+  P3 = IC(4);
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I1411(4, 3, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I1411(4, 1, 3);
+  }
+} break;
+case 242 :
+{
+  P0 = IC(0);
+  P2 = IC(0);
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I211(0, 5, 7);
+  }
+  if (MUR) {
+    P1 = IC(0);
+  } else {
+    P1 = I611(0, 1, 5);
+  }
+} break;
+case 243 :
+{
+  P0 = IC(2);
+  P1 = IC(2);
+  if (MDR) {
+    P2 = IC(2);
+    P3 = IC(2);
+  } else {
+    P2 = I31(2, 7);
+    P3 = I332(5, 7, 2);
+  }
+} break;
+case 244 :
+{
+  P0 = IC(0);
+  P1 = IC(0);
+  P2 = IC(0);
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I1411(0, 5, 7);
+  }
+} break;
+case 245 :
+{
+  P0 = IC(1);
+  P1 = IC(1);
+  P2 = IC(1);
+  if (MDR) {
+    P3 = IC(1);
+  } else {
+    P3 = I1411(1, 5, 7);
+  }
+} break;
+case 246 :
+{
+  P0 = IC(0);
+  P2 = IC(0);
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I1411(0, 5, 7);
+  }
+  if (MUR) {
+    P1 = IC(0);
+  } else {
+    P1 = I211(0, 1, 5);
+  }
+} break;
+case 247 :
+{
+  P0 = IC(3);
+  P2 = IC(3);
+  if (MDR) {
+    P3 = IC(3);
+  } else {
+    P3 = I1411(3, 5, 7);
+  }
+  if (MUR) {
+    P1 = IC(3);
+  } else {
+    P1 = I1411(3, 1, 5);
+  }
+} break;
+case 249 :
+{
+  P0 = IC(1);
+  P1 = IC(1);
+  if (MDL) {
+    P2 = IC(1);
+  } else {
+    P2 = I1411(1, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(1);
+  } else {
+    P3 = I211(1, 5, 7);
+  }
+} break;
+case 251 :
+{
+  P1 = IC(2);
+  if (MDL) {
+    P2 = IC(2);
+  } else {
+    P2 = I1411(2, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(2);
+  } else {
+    P3 = I211(2, 5, 7);
+  }
+  if (MUL) {
+    P0 = IC(2);
+  } else {
+    P0 = I211(2, 1, 3);
+  }
+} break;
+case 252 :
+{
+  P0 = IC(0);
+  P1 = IC(0);
+  if (MDL) {
+    P2 = IC(0);
+  } else {
+    P2 = I211(0, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I1411(0, 5, 7);
+  }
+} break;
+case 253 :
+{
+  P0 = IC(1);
+  P1 = IC(1);
+  if (MDL) {
+    P2 = IC(1);
+  } else {
+    P2 = I1411(1, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(1);
+  } else {
+    P3 = I1411(1, 5, 7);
+  }
+} break;
+case 254 :
+{
+  P0 = IC(0);
+  if (MDL) {
+    P2 = IC(0);
+  } else {
+    P2 = I211(0, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(0);
+  } else {
+    P3 = I1411(0, 5, 7);
+  }
+  if (MUR) {
+    P1 = IC(0);
+  } else {
+    P1 = I211(0, 1, 5);
+  }
+} break;
+case 255 :
+{
+  if (MDL) {
+    P2 = IC(4);
+  } else {
+    P2 = I1411(4, 3, 7);
+  }
+  if (MDR) {
+    P3 = IC(4);
+  } else {
+    P3 = I1411(4, 5, 7);
+  }
+  if (MUL) {
+    P0 = IC(4);
+  } else {
+    P0 = I1411(4, 1, 3);
+  }
+  if (MUR) {
+    P1 = IC(4);
+  } else {
+    P1 = I1411(4, 1, 5);
+  }
+} break;
diff --git a/src/sdl2/filter/main.c b/src/sdl2/filter/main.c
new file mode 100644
index 000000000..98ab1541c
--- /dev/null
+++ b/src/sdl2/filter/main.c
@@ -0,0 +1,15 @@
+#include "filters.h"
+
+int main(int argc, char *argv[])
+{
+	SDL_Surface *src = NULL;
+	SDL_Surface *dst = NULL;
+	src = SDL_LoadBMP("src.bmp"); //load
+	if(!src) return -1; //check
+	dst = filter_2x(src, NULL, hq2x32); //prcoess
+	SDL_FreeSurface(src); //free
+	if(!dst) return 0; //error
+	SDL_SaveBMP(dst, "dst.bmp"); //save
+	SDL_FreeSurface(dst); //free
+	return 1; //good
+}
diff --git a/src/sdl2/hwsym_sdl.c b/src/sdl2/hwsym_sdl.c
new file mode 100644
index 000000000..43c71f7bf
--- /dev/null
+++ b/src/sdl2/hwsym_sdl.c
@@ -0,0 +1,183 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 1998-2000 by DooM Legacy Team.
+//
+// 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.
+
+/// \file
+/// \brief Tool for dynamic referencing of hardware rendering functions
+///
+///	Declaration and definition of the HW rendering
+///	functions do have the same name. Originally, the
+///	implementation was stored in a separate library.
+///	For SDL, we need some function to return the addresses,
+///	otherwise we have a conflict with the compiler.
+
+#include "hwsym_sdl.h"
+#include "../doomdef.h"
+
+#ifdef _MSC_VER
+#pragma warning(disable : 4214 4244)
+#endif
+
+#ifdef SDL
+
+#include "SDL.h"
+
+#ifdef _MSC_VER
+#pragma warning(default : 4214 4244)
+#endif
+
+#if defined (_XBOX) || defined (_arch_dreamcast) || defined(GP2X)
+#define NOLOADSO
+#endif
+
+#if SDL_VERSION_ATLEAST(1,2,6) && !defined (NOLOADSO)
+#include "SDL_loadso.h" // 1.2.6+
+#elif !defined (NOLOADSO)
+#define NOLOADSO
+#endif
+
+#define  _CREATE_DLL_  // necessary for Unix AND Windows
+
+#ifdef HWRENDER
+#include "../hardware/hw_drv.h"
+#include "ogl_sdl.h"
+#ifdef STATIC_OPENGL
+#include "../hardware/r_opengl/r_opengl.h"
+#endif
+#endif
+
+#ifdef HW3SOUND
+#include "../hardware/hw3dsdrv.h"
+#endif
+
+#define GETFUNC(func) \
+	else if (0 == strcmp(#func, funcName)) \
+		funcPointer = &func \
+//
+//
+/**	\brief	The *hwSym function
+
+	Stupid function to return function addresses
+
+	\param	funcName	the name of the function
+	\param	handle	an object to look in(NULL for self)
+
+	\return	void
+*/
+//
+void *hwSym(const char *funcName,void *handle)
+{
+	void *funcPointer = NULL;
+#ifdef HWRENDER
+	if (0 == strcmp("SetPalette", funcName))
+                funcPointer = &OglSdlSetPalette;
+	GETFUNC(Init);
+	GETFUNC(Draw2DLine);
+	GETFUNC(DrawPolygon);
+	GETFUNC(SetBlend);
+	GETFUNC(ClearBuffer);
+	GETFUNC(SetTexture);
+	GETFUNC(ReadRect);
+	GETFUNC(GClipRect);
+	GETFUNC(ClearMipMapCache);
+	GETFUNC(SetSpecialState);
+	GETFUNC(GetTextureUsed);
+	GETFUNC(DrawMD2);
+	GETFUNC(DrawMD2i);
+	GETFUNC(SetTransform);
+	GETFUNC(GetRenderVersion);
+#ifdef SHUFFLE
+	GETFUNC(PostImgRedraw);
+#endif //SHUFFLE
+	GETFUNC(StartScreenWipe);
+	GETFUNC(EndScreenWipe);
+	GETFUNC(DoScreenWipe);
+	GETFUNC(DrawIntermissionBG);
+	GETFUNC(MakeScreenTexture);
+#else //HWRENDER
+	if (0 == strcmp("FinishUpdate", funcName))
+		return funcPointer; //&FinishUpdate;
+#endif //!HWRENDER
+#ifdef STATIC3DS
+	GETFUNC(Startup);
+	GETFUNC(AddSfx);
+	GETFUNC(AddSource);
+	GETFUNC(StartSource);
+	GETFUNC(StopSource);
+	GETFUNC(GetHW3DSVersion);
+	GETFUNC(BeginFrameUpdate);
+	GETFUNC(EndFrameUpdate);
+	GETFUNC(IsPlaying);
+	GETFUNC(UpdateListener);
+	GETFUNC(UpdateSourceParms);
+	GETFUNC(SetGlobalSfxVolume);
+	GETFUNC(SetCone);
+	GETFUNC(Update3DSource);
+	GETFUNC(ReloadSource);
+	GETFUNC(KillSource);
+	GETFUNC(Shutdown);
+	GETFUNC(GetHW3DSTitle);
+#endif
+#ifdef NOLOADSO
+	else
+		funcPointer = handle;
+#else
+	else if (handle)
+		funcPointer = SDL_LoadFunction(handle,funcName);
+#endif
+	if (!funcPointer)
+		I_OutputMsg("hwSym for %s: %s\n", funcName, SDL_GetError());
+	return funcPointer;
+}
+
+/**	\brief	The *hwOpen function
+
+	\param	hwfile	Open a handle to the SO
+
+	\return	Handle to SO
+
+
+*/
+
+void *hwOpen(const char *hwfile)
+{
+#ifdef NOLOADSO
+	(void)hwfile;
+	return NULL;
+#else
+	void *tempso = NULL;
+	tempso = SDL_LoadObject(hwfile);
+	if (!tempso) I_OutputMsg("hwOpen of %s: %s\n", hwfile, SDL_GetError());
+	return tempso;
+#endif
+}
+
+/**	\brief	The hwClose function
+
+	\param	handle	Close the handle of the SO
+
+	\return	void
+
+
+*/
+
+void hwClose(void *handle)
+{
+#ifdef NOLOADSO
+	(void)handle;
+#else
+	SDL_UnloadObject(handle);
+#endif
+}
+#endif
diff --git a/src/sdl2/hwsym_sdl.h b/src/sdl2/hwsym_sdl.h
new file mode 100644
index 000000000..7297587bf
--- /dev/null
+++ b/src/sdl2/hwsym_sdl.h
@@ -0,0 +1,23 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 1998-2000 by DooM Legacy Team.
+//
+// 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.
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief Tool for dynamic referencing of hardware rendering/3D sound functions
+
+void *hwSym(const char *funcName,void *handle);
+
+void *hwOpen(const char *hwfile);
+
+void hwClose(void *handle);
diff --git a/src/sdl2/i_cdmus.c b/src/sdl2/i_cdmus.c
new file mode 100644
index 000000000..fc35eb9cf
--- /dev/null
+++ b/src/sdl2/i_cdmus.c
@@ -0,0 +1,38 @@
+#include "../command.h"
+#include "../s_sound.h"
+#include "../i_sound.h"
+
+//
+// CD MUSIC I/O
+//
+
+UINT8 cdaudio_started = 0;
+
+consvar_t cd_volume = {"cd_volume","31",CV_SAVE,soundvolume_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
+consvar_t cdUpdate  = {"cd_update","1",CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL};
+
+
+void I_InitCD(void){}
+
+void I_StopCD(void){}
+
+void I_PauseCD(void){}
+
+void I_ResumeCD(void){}
+
+void I_ShutdownCD(void){}
+
+void I_UpdateCD(void){}
+
+void I_PlayCD(UINT8 track, UINT8 looping)
+{
+	(void)track;
+	(void)looping;
+}
+
+boolean I_SetVolumeCD(int volume)
+{
+	(void)volume;
+	return false;
+}
+
diff --git a/src/sdl2/i_main.c b/src/sdl2/i_main.c
new file mode 100644
index 000000000..85abb7041
--- /dev/null
+++ b/src/sdl2/i_main.c
@@ -0,0 +1,247 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 1993-1996 by id Software, Inc.
+// Copyright (C) 1998-2000 by DooM Legacy Team.
+//
+// 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.
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief Main program, simply calls D_SRB2Main and D_SRB2Loop, the high level loop.
+
+#include "../doomdef.h"
+#include "../m_argv.h"
+#include "../d_main.h"
+#include "../i_system.h"
+
+#ifdef __GNUC__
+#include <unistd.h>
+#endif
+
+#ifdef _WII
+#include <limits.h>
+#include <network.h>
+#include <fat.h>
+#ifdef REMOTE_DEBUGGING
+#include <debug.h>
+#endif
+static char wiicwd[PATH_MAX] = "sd:/";
+static char localip[16] = {0};
+static char gateway[16] = {0};
+static char netmask[16] = {0};
+#endif
+
+#ifdef _PSP
+#include <pspmoduleinfo.h>
+#include <pspthreadman.h>
+PSP_HEAP_SIZE_KB(24*1024);
+PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER | PSP_THREAD_ATTR_VFPU);
+PSP_MAIN_THREAD_NAME("SRB2");
+PSP_MAIN_THREAD_STACK_SIZE_KB(256);
+#endif
+
+#ifdef SDL
+
+#ifdef HAVE_TTF
+#include "SDL.h"
+#include "i_ttf.h"
+#endif
+
+#ifdef SDLMAIN
+#include "SDL_main.h"
+#elif defined(FORCESDLMAIN)
+extern int SDL_main(int argc, char *argv[]);
+#endif
+
+#ifdef LOGMESSAGES
+FILE *logstream = NULL;
+#endif
+
+#ifndef DOXYGEN
+#ifndef O_TEXT
+#define O_TEXT 0
+#endif
+
+#ifndef O_SEQUENTIAL
+#define O_SEQUENTIAL 0
+#endif
+#endif
+
+#if defined (_WIN32) && !defined (_XBOX)
+#include "../win32/win_dbg.h"
+typedef BOOL (WINAPI *p_IsDebuggerPresent)(VOID);
+#endif
+
+#ifdef _arch_dreamcast
+#include <arch/arch.h>
+KOS_INIT_FLAGS(INIT_DEFAULT
+//| INIT_NET
+//| INIT_MALLOCSTATS
+//| INIT_QUIET
+//| INIT_OCRAM
+//| INIT_NO_DCLOAD
+);
+#endif
+
+#if defined (_WIN32) && !defined (_XBOX) && !defined (_WIN32_WCE)
+static inline VOID MakeCodeWritable(VOID)
+{
+#ifdef USEASM // Disable write-protection of code segment
+	DWORD OldRights;
+	const DWORD NewRights = PAGE_EXECUTE_READWRITE;
+	PBYTE pBaseOfImage = (PBYTE)GetModuleHandle(NULL);
+	PIMAGE_DOS_HEADER dosH =(PIMAGE_DOS_HEADER)pBaseOfImage;
+	PIMAGE_NT_HEADERS ntH = (PIMAGE_NT_HEADERS)(pBaseOfImage + dosH->e_lfanew);
+	PIMAGE_OPTIONAL_HEADER oH = (PIMAGE_OPTIONAL_HEADER)
+		((PBYTE)ntH + sizeof (IMAGE_NT_SIGNATURE) + sizeof (IMAGE_FILE_HEADER));
+	LPVOID pA = pBaseOfImage+oH->BaseOfCode;
+	SIZE_T pS = oH->SizeOfCode;
+#if 1 // try to find the text section
+	PIMAGE_SECTION_HEADER ntS = IMAGE_FIRST_SECTION (ntH);
+	WORD s;
+	for (s = 0; s < ntH->FileHeader.NumberOfSections; s++)
+	{
+		if (memcmp (ntS[s].Name, ".text\0\0", 8) == 0)
+		{
+			pA = pBaseOfImage+ntS[s].VirtualAddress;
+			pS = ntS[s].Misc.VirtualSize;
+			break;
+		}
+	}
+#endif
+
+	if (!VirtualProtect(pA,pS,NewRights,&OldRights))
+		I_Error("Could not make code writable\n");
+#endif
+}
+#endif
+
+
+/**	\brief	The main function
+
+	\param	argc	number of arg
+	\param	*argv	string table
+
+	\return	int
+*/
+FUNCNORETURN
+#if defined (_XBOX) && defined (__GNUC__)
+void XBoxStartup()
+{
+	const char *logdir = NULL;
+	myargc = -1;
+	myargv = NULL;
+#else
+#ifdef FORCESDLMAIN
+int SDL_main(int argc, char **argv)
+#else
+int main(int argc, char **argv)
+#endif
+{
+	const char *logdir = NULL;
+	myargc = argc;
+	myargv = argv; /// \todo pull out path to exe from this string
+#endif
+
+#ifdef HAVE_TTF
+#ifdef _PS3
+	// apparently there is a bug in SDL_PSL1GHT which needs this to be set to work around
+	SDL_setenv("SDL_VIDEODRIVER", "psl1ght", 1);
+	I_StartupTTF(FONTPOINTSIZE, SDL_INIT_VIDEO, SDL_SWSURFACE|SDL_DOUBLEBUF);
+#elif defined(_WIN32)
+	I_StartupTTF(FONTPOINTSIZE, SDL_INIT_VIDEO|SDL_INIT_AUDIO, SDL_SWSURFACE);
+#else
+	I_StartupTTF(FONTPOINTSIZE, SDL_INIT_VIDEO, SDL_SWSURFACE);
+#endif
+#endif
+
+#ifdef _PS3
+	// initialise controllers.
+	//ioPadInit(7);
+#endif
+
+// init Wii-specific stuff
+#ifdef _WII
+	// Start network
+	if_config(localip, netmask, gateway, TRUE);
+
+#ifdef REMOTE_DEBUGGING
+#if REMOTE_DEBUGGING == 0
+	DEBUG_Init(GDBSTUB_DEVICE_TCP, GDBSTUB_DEF_TCPPORT); // Port 2828
+#elif REMOTE_DEBUGGING > 2
+	DEBUG_Init(GDBSTUB_DEVICE_TCP, REMOTE_DEBUGGING); // Custom Port
+#elif REMOTE_DEBUGGING < 0
+	DEBUG_Init(GDBSTUB_DEVICE_USB, GDBSTUB_DEF_CHANNEL); // Slot 1
+#else
+	DEBUG_Init(GDBSTUB_DEVICE_USB, REMOTE_DEBUGGING-1); // Custom Slot
+#endif
+#endif
+	// Start FAT filesystem
+	fatInitDefault();
+
+	if (getcwd(wiicwd, PATH_MAX))
+		I_PutEnv(va("HOME=%ssrb2wii", wiicwd));
+#endif
+
+	logdir = D_Home();
+
+#ifdef LOGMESSAGES
+#if defined(_WIN32_WCE) || defined(GP2X)
+	logstream = fopen(va("%s.log",argv[0]), "a");
+#elif defined (_WII)
+	logstream = fopen(va("%s/srb2log.txt",logdir), "a");
+#elif defined (DEFAULTDIR)
+	if (logdir)
+		logstream = fopen(va("%s/"DEFAULTDIR"/srb2log.txt",logdir), "a");
+	else
+#endif
+		logstream = fopen("./srb2log.txt", "a");
+#endif
+
+	//I_OutputMsg("I_StartupSystem() ...\n");
+	I_StartupSystem();
+#if defined (_WIN32) && !defined (_XBOX)
+#ifndef _WIN32_WCE
+	{
+		p_IsDebuggerPresent pfnIsDebuggerPresent = (p_IsDebuggerPresent)GetProcAddress(GetModuleHandleA("kernel32.dll"), "IsDebuggerPresent");
+		if ((!pfnIsDebuggerPresent || !pfnIsDebuggerPresent())
+#ifdef BUGTRAP
+			&& !InitBugTrap()
+#endif
+			)
+		{
+			LoadLibraryA("exchndl.dll");
+		}
+	}
+#endif
+	prevExceptionFilter = SetUnhandledExceptionFilter(RecordExceptionInfo);
+#ifndef _WIN32_WCE
+	MakeCodeWritable();
+#endif
+#endif
+	// startup SRB2
+	CONS_Printf("%s", M_GetText("Setting up SRB2...\n"));
+	D_SRB2Main();
+	CONS_Printf("%s", M_GetText("Entering main game loop...\n"));
+	// never return
+	D_SRB2Loop();
+
+#ifdef BUGTRAP
+	// This is safe even if BT didn't start.
+	ShutdownBugTrap();
+#endif
+
+	// return to OS
+#ifndef __GNUC__
+	return 0;
+#endif
+}
+#endif
diff --git a/src/sdl2/i_net.c b/src/sdl2/i_net.c
new file mode 100644
index 000000000..c31935acf
--- /dev/null
+++ b/src/sdl2/i_net.c
@@ -0,0 +1,442 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 1993-1996 by id Software, Inc.
+// Portions Copyright (C) 1998-2000 by DooM Legacy Team.
+//
+// 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.
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief SDL network interface
+
+#include "../doomdef.h"
+
+#include "../i_system.h"
+#include "../d_event.h"
+#include "../d_net.h"
+#include "../m_argv.h"
+
+#include "../doomstat.h"
+
+#include "../i_net.h"
+
+#include "../z_zone.h"
+
+#include "../i_tcp.h"
+
+#ifdef SDL
+
+#ifdef HAVE_SDLNET
+
+#include "SDL_net.h"
+
+#define MAXBANS 20
+
+static IPaddress clientaddress[MAXNETNODES+1];
+static IPaddress banned[MAXBANS];
+
+static UDPpacket mypacket;
+static UDPsocket mysocket = NULL;
+static SDLNet_SocketSet myset = NULL;
+
+static size_t numbans = 0;
+static boolean NET_bannednode[MAXNETNODES+1]; /// \note do we really need the +1?
+static boolean init_SDLNet_driver = false;
+
+static const char *NET_AddrToStr(IPaddress* sk)
+{
+	static char s[22]; // 255.255.255.255:65535
+	strcpy(s, SDLNet_ResolveIP(sk));
+	if (sk->port != 0) strcat(s, va(":%d", sk->port));
+	return s;
+}
+
+static const char *NET_GetNodeAddress(INT32 node)
+{
+	if (!nodeconnected[node])
+		return NULL;
+	return NET_AddrToStr(&clientaddress[node]);
+}
+
+static const char *NET_GetBanAddress(size_t ban)
+{
+	if (ban > numbans)
+		return NULL;
+	return NET_AddrToStr(&banned[ban]);
+}
+
+static boolean NET_cmpaddr(IPaddress* a, IPaddress* b)
+{
+	return (a->host == b->host && (b->port == 0 || a->port == b->port));
+}
+
+static boolean NET_CanGet(void)
+{
+	return myset?(SDLNet_CheckSockets(myset,0)  == 1):false;
+}
+
+static void NET_Get(void)
+{
+	INT32 mystatus;
+	INT32 newnode;
+	mypacket.len = MAXPACKETLENGTH;
+	if (!NET_CanGet())
+	{
+		doomcom->remotenode = -1; // no packet
+		return;
+	}
+	mystatus = SDLNet_UDP_Recv(mysocket,&mypacket);
+	if (mystatus != -1)
+	{
+		if (mypacket.channel != -1)
+		{
+			doomcom->remotenode = mypacket.channel+1; // good packet from a game player
+			doomcom->datalength = mypacket.len;
+			return;
+		}
+		newnode = SDLNet_UDP_Bind(mysocket,-1,&mypacket.address);
+		if (newnode != -1)
+		{
+			size_t i;
+			newnode++;
+			M_Memcpy(&clientaddress[newnode], &mypacket.address, sizeof (IPaddress));
+			DEBFILE(va("New node detected: node:%d address:%s\n", newnode,
+					NET_GetNodeAddress(newnode)));
+			doomcom->remotenode = newnode; // good packet from a game player
+			doomcom->datalength = mypacket.len;
+			for (i = 0; i < numbans; i++)
+			{
+				if (NET_cmpaddr(&mypacket.address, &banned[i]))
+				{
+					DEBFILE("This dude has been banned\n");
+					NET_bannednode[newnode] = true;
+					break;
+				}
+			}
+			if (i == numbans)
+				NET_bannednode[newnode] = false;
+			return;
+		}
+		else
+			I_OutputMsg("SDL_Net: %s",SDLNet_GetError());
+	}
+	else if (mystatus == -1)
+	{
+		I_OutputMsg("SDL_Net: %s",SDLNet_GetError());
+	}
+
+	DEBFILE("New node detected: No more free slots\n");
+	doomcom->remotenode = -1; // no packet
+}
+
+#if 0
+static boolean NET_CanSend(void)
+{
+	return true;
+}
+#endif
+
+static void NET_Send(void)
+{
+	if (!doomcom->remotenode)
+		return;
+	mypacket.len = doomcom->datalength;
+	if (SDLNet_UDP_Send(mysocket,doomcom->remotenode-1,&mypacket) == 0)
+	{
+		I_OutputMsg("SDL_Net: %s",SDLNet_GetError());
+	}
+}
+
+static void NET_FreeNodenum(INT32 numnode)
+{
+	// can't disconnect from self :)
+	if (!numnode)
+		return;
+
+	DEBFILE(va("Free node %d (%s)\n", numnode, NET_GetNodeAddress(numnode)));
+
+	SDLNet_UDP_Unbind(mysocket,numnode-1);
+
+	memset(&clientaddress[numnode], 0, sizeof (IPaddress));
+}
+
+static UDPsocket NET_Socket(void)
+{
+	UDPsocket temp = NULL;
+	Uint16 portnum = 0;
+	IPaddress tempip = {INADDR_BROADCAST,0};
+	//Hurdler: I'd like to put a server and a client on the same computer
+	//Logan: Me too
+	//BP: in fact for client we can use any free port we want i have read
+	//    in some doc that connect in udp can do it for us...
+	//Alam: where?
+	if (M_CheckParm("-clientport"))
+	{
+		if (!M_IsNextParm())
+			I_Error("syntax: -clientport <portnum>");
+		portnum = atoi(M_GetNextParm());
+	}
+	else
+		portnum = sock_port;
+	temp = SDLNet_UDP_Open(portnum);
+	if (!temp)
+	{
+			I_OutputMsg("SDL_Net: %s",SDLNet_GetError());
+		return NULL;
+	}
+	if (SDLNet_UDP_Bind(temp,BROADCASTADDR-1,&tempip) == -1)
+	{
+		I_OutputMsg("SDL_Net: %s",SDLNet_GetError());
+		SDLNet_UDP_Close(temp);
+		return NULL;
+	}
+	clientaddress[BROADCASTADDR].port = sock_port;
+	clientaddress[BROADCASTADDR].host = INADDR_BROADCAST;
+
+	doomcom->extratics = 1; // internet is very high ping
+
+	return temp;
+}
+
+static void I_ShutdownSDLNetDriver(void)
+{
+	if (myset) SDLNet_FreeSocketSet(myset);
+	myset = NULL;
+	SDLNet_Quit();
+	init_SDLNet_driver = false;
+}
+
+static void I_InitSDLNetDriver(void)
+{
+	if (init_SDLNet_driver)
+		I_ShutdownSDLNetDriver();
+	if (SDLNet_Init() == -1)
+	{
+		I_OutputMsg("SDL_Net: %s",SDLNet_GetError());
+		return; // No good!
+	}
+	D_SetDoomcom();
+	mypacket.data = doomcom->data;
+	init_SDLNet_driver = true;
+}
+
+static void NET_CloseSocket(void)
+{
+	if (mysocket)
+		SDLNet_UDP_Close(mysocket);
+	mysocket = NULL;
+}
+
+static SINT8 NET_NetMakeNodewPort(const char *hostname, const char *port)
+{
+	INT32 newnode;
+	UINT16 portnum = sock_port;
+	IPaddress hostnameIP;
+
+	// retrieve portnum from address!
+	if (port && !port[0])
+		portnum = atoi(port);
+
+	if (SDLNet_ResolveHost(&hostnameIP,hostname,portnum) == -1)
+	{
+		I_OutputMsg("SDL_Net: %s",SDLNet_GetError());
+		return -1;
+	}
+	newnode = SDLNet_UDP_Bind(mysocket,-1,&hostnameIP);
+	if (newnode == -1)
+	{
+		I_OutputMsg("SDL_Net: %s",SDLNet_GetError());
+		return newnode;
+	}
+	newnode++;
+	M_Memcpy(&clientaddress[newnode],&hostnameIP,sizeof (IPaddress));
+	return (SINT8)newnode;
+}
+
+
+static boolean NET_OpenSocket(void)
+{
+	memset(clientaddress, 0, sizeof (clientaddress));
+
+	//I_OutputMsg("SDL_Net Code starting up\n");
+
+	I_NetSend = NET_Send;
+	I_NetGet = NET_Get;
+	I_NetCloseSocket = NET_CloseSocket;
+	I_NetFreeNodenum = NET_FreeNodenum;
+	I_NetMakeNodewPort = NET_NetMakeNodewPort;
+
+	//I_NetCanSend = NET_CanSend;
+
+	// build the socket but close it first
+	NET_CloseSocket();
+	mysocket = NET_Socket();
+
+	if (!mysocket)
+		return false;
+
+	// for select
+	myset = SDLNet_AllocSocketSet(1);
+	if (!myset)
+	{
+		I_OutputMsg("SDL_Net: %s",SDLNet_GetError());
+		return false;
+	}
+	if (SDLNet_UDP_AddSocket(myset,mysocket) == -1)
+	{
+		I_OutputMsg("SDL_Net: %s",SDLNet_GetError());
+		return false;
+	}
+	return true;
+}
+
+static boolean NET_Ban(INT32 node)
+{
+	if (numbans == MAXBANS)
+		return false;
+
+	M_Memcpy(&banned[numbans], &clientaddress[node], sizeof (IPaddress));
+	banned[numbans].port = 0;
+	numbans++;
+	return true;
+}
+
+static boolean NET_SetBanAddress(const char *address, const char *mask)
+{
+	(void)mask;
+	if (bans == MAXBANS)
+		return false;
+
+	if (SDLNet_ResolveHost(&banned[numbans], address, 0) == -1)
+		return false;
+	numbans++;
+	return true;
+}
+
+static void NET_ClearBans(void)
+{
+	numbans = 0;
+}
+#endif
+
+//
+// I_InitNetwork
+// Only required for DOS, so this is more a dummy
+//
+boolean I_InitNetwork(void)
+{
+#ifdef HAVE_SDLNET
+	char serverhostname[255];
+	boolean ret = false;
+	SDL_version SDLcompiled;
+	const SDL_version *SDLlinked = SDLNet_Linked_Version();
+	SDL_NET_VERSION(&SDLcompiled)
+	I_OutputMsg("Compiled for SDL_Net version: %d.%d.%d\n",
+                        SDLcompiled.major, SDLcompiled.minor, SDLcompiled.patch);
+	I_OutputMsg("Linked with SDL_Net version: %d.%d.%d\n",
+                        SDLlinked->major, SDLlinked->minor, SDLlinked->patch);
+	//if (!M_CheckParm ("-sdlnet"))
+	//	return false;
+	// initilize the driver
+	I_InitSDLNetDriver();
+	I_AddExitFunc(I_ShutdownSDLNetDriver);
+	if (!init_SDLNet_driver)
+		return false;
+
+	if (M_CheckParm("-udpport"))
+	{
+		if (M_IsNextParm())
+			sock_port = (UINT16)atoi(M_GetNextParm());
+		else
+			sock_port = 0;
+	}
+
+	// parse network game options,
+	if (M_CheckParm("-server") || dedicated)
+	{
+		server = true;
+
+		// If a number of clients (i.e. nodes) is specified, the server will wait for the clients
+		// to connect before starting.
+		// If no number is specified here, the server starts with 1 client, and others can join
+		// in-game.
+		// Since Boris has implemented join in-game, there is no actual need for specifying a
+		// particular number here.
+		// FIXME: for dedicated server, numnodes needs to be set to 0 upon start
+/*		if (M_IsNextParm())
+			doomcom->numnodes = (INT16)atoi(M_GetNextParm());
+		else */if (dedicated)
+			doomcom->numnodes = 0;
+		else
+			doomcom->numnodes = 1;
+
+		if (doomcom->numnodes < 0)
+			doomcom->numnodes = 0;
+		if (doomcom->numnodes > MAXNETNODES)
+			doomcom->numnodes = MAXNETNODES;
+
+		// server
+		servernode = 0;
+		// FIXME:
+		// ??? and now ?
+		// server on a big modem ??? 4*isdn
+		net_bandwidth = 16000;
+		hardware_MAXPACKETLENGTH = INETPACKETLENGTH;
+
+		ret = true;
+	}
+	else if (M_CheckParm("-connect"))
+	{
+		if (M_IsNextParm())
+			strcpy(serverhostname, M_GetNextParm());
+		else
+			serverhostname[0] = 0; // assuming server in the LAN, use broadcast to detect it
+
+		// server address only in ip
+		if (serverhostname[0])
+		{
+			COM_BufAddText("connect \"");
+			COM_BufAddText(serverhostname);
+			COM_BufAddText("\"\n");
+
+			// probably modem
+			hardware_MAXPACKETLENGTH = INETPACKETLENGTH;
+		}
+		else
+		{
+			// so we're on a LAN
+			COM_BufAddText("connect any\n");
+
+			net_bandwidth = 800000;
+			hardware_MAXPACKETLENGTH = MAXPACKETLENGTH;
+		}
+	}
+
+	mypacket.maxlen = hardware_MAXPACKETLENGTH;
+	I_NetOpenSocket = NET_OpenSocket;
+	I_Ban = NET_Ban;
+	I_ClearBans = NET_ClearBans;
+	I_GetNodeAddress = NET_GetNodeAddress;
+	I_GetBenAddress = NET_GetBenAddress;
+	I_SetBanAddress = NET_SetBanAddress;
+	bannednode = NET_bannednode;
+
+	return ret;
+#else
+	if ( M_CheckParm ("-net") )
+	{
+		I_Error("-net not supported, use -server and -connect\n"
+			"see docs for more\n");
+	}
+	return false;
+#endif
+}
+#endif
diff --git a/src/sdl2/i_system.c b/src/sdl2/i_system.c
new file mode 100644
index 000000000..c9d324f0a
--- /dev/null
+++ b/src/sdl2/i_system.c
@@ -0,0 +1,3115 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 1993-1996 by id Software, Inc.
+// Portions Copyright (C) 1998-2000 by DooM Legacy Team.
+//
+// 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.
+//
+// Changes by Graue <graue@oceanbase.org> are in the public domain.
+//
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief SRB2 system stuff for SDL
+
+#ifndef _WIN32_WCE
+#include <signal.h>
+#endif
+
+#ifdef _XBOX
+#include "SRB2XBOX/xboxhelp.h"
+#endif
+
+#if defined (_WIN32) && !defined (_XBOX)
+#define RPC_NO_WINDOWS_H
+#include <windows.h>
+#include "../doomtype.h"
+#ifndef _WIN32_WCE
+typedef BOOL (WINAPI *p_GetDiskFreeSpaceExA)(LPCSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER);
+typedef BOOL (WINAPI *p_IsProcessorFeaturePresent) (DWORD);
+typedef DWORD (WINAPI *p_timeGetTime) (void);
+typedef UINT (WINAPI *p_timeEndPeriod) (UINT);
+typedef HANDLE (WINAPI *p_OpenFileMappingA) (DWORD, BOOL, LPCSTR);
+typedef LPVOID (WINAPI *p_MapViewOfFile) (HANDLE, DWORD, DWORD, DWORD, SIZE_T);
+typedef HANDLE (WINAPI *p_GetCurrentProcess) (VOID);
+typedef BOOL (WINAPI *p_GetProcessAffinityMask) (HANDLE, PDWORD_PTR, PDWORD_PTR);
+typedef BOOL (WINAPI *p_SetProcessAffinityMask) (HANDLE, DWORD_PTR);
+#endif
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef __GNUC__
+#include <unistd.h>
+#elif defined (_MSC_VER)
+#include <direct.h>
+#endif
+#if defined (__unix__) || defined (UNIXCOMMON)
+#include <fcntl.h>
+#endif
+
+#ifdef _arch_dreamcast
+#include <arch/gdb.h>
+#include <arch/timer.h>
+#include <conio/conio.h>
+#include <dc/pvr.h>
+void __set_fpscr(long); // in libgcc / kernel's startup.s?
+#else
+#include <stdio.h>
+#if defined (_WIN32) && !defined (_WIN32_WCE) && !defined (_XBOX)
+#include <conio.h>
+#endif
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable : 4214 4244)
+#endif
+
+#ifdef SDL
+
+#include "SDL.h"
+
+#ifdef HAVE_TTF
+#include "i_ttf.h"
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(default : 4214 4244)
+#endif
+
+#if SDL_VERSION_ATLEAST(1,2,7) && !defined (DC)
+#include "SDL_cpuinfo.h" // 1.2.7 or greater
+#define HAVE_SDLCPUINFO
+#endif
+
+#ifdef _PSP
+//#include <pspiofilemgr.h>
+#elif !defined(_PS3)
+#if defined (__unix__) || defined(__APPLE__) || (defined (UNIXCOMMON) && !defined (_arch_dreamcast) && !defined (__HAIKU__) && !defined (_WII))
+#if defined (__linux__)
+#include <sys/vfs.h>
+#else
+#include <sys/param.h>
+#include <sys/mount.h>
+/*For meminfo*/
+#include <sys/types.h>
+#ifdef FREEBSD
+#include <kvm.h>
+#endif
+#include <nlist.h>
+#include <sys/vmmeter.h>
+#endif
+#endif
+#endif
+
+#ifndef _PS3
+#if defined (__linux__) || (defined (UNIXCOMMON) && !defined (_arch_dreamcast) && !defined (_PSP) && !defined (__HAIKU__) && !defined (_WII))
+#ifndef NOTERMIOS
+#include <termios.h>
+#include <sys/ioctl.h> // ioctl
+#define HAVE_TERMIOS
+#endif
+#endif
+#endif
+
+#ifndef NOMUMBLE
+#if defined (__linux__) && !defined(_PS3) // need -lrt
+#include <sys/mman.h>
+#ifdef MAP_FAILED
+#define HAVE_SHM
+#endif
+#include <wchar.h>
+#endif
+
+#if defined (_WIN32) && !defined (_WIN32_WCE) && !defined (_XBOX)
+#define HAVE_MUMBLE
+#define WINMUMBLE
+#elif defined (HAVE_SHM)
+#define HAVE_MUMBLE
+#endif
+#endif // NOMUMBLE
+
+#ifdef _WIN32_WCE
+#include "SRB2CE/cehelp.h"
+#endif
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+// Locations for searching the srb2.srb
+#ifdef _arch_dreamcast
+#define DEFAULTWADLOCATION1 "/cd"
+#define DEFAULTWADLOCATION2 "/pc"
+#define DEFAULTWADLOCATION3 "/pc/home/alam/srb2code/data"
+#define DEFAULTSEARCHPATH1 "/cd"
+#define DEFAULTSEARCHPATH2 "/pc"
+//#define DEFAULTSEARCHPATH3 "/pc/home/alam/srb2code/data"
+#elif defined (GP2X)
+#define DEFAULTWADLOCATION1 "/mnt/sd"
+#define DEFAULTWADLOCATION2 "/mnt/sd/SRB2"
+#define DEFAULTWADLOCATION3 "/tmp/mnt/sd"
+#define DEFAULTWADLOCATION4 "/tmp/mnt/sd/SRB2"
+#define DEFAULTSEARCHPATH1 "/mnt/sd"
+#define DEFAULTSEARCHPATH2 "/tmp/mnt/sd"
+#elif defined (_WII)
+#define NOCWD
+#define NOHOME
+#define NEED_SDL_GETENV
+#define DEFAULTWADLOCATION1 "sd:/srb2wii"
+#define DEFAULTWADLOCATION2 "usb:/srb2wii"
+#define DEFAULTSEARCHPATH1 "sd:/srb2wii"
+#define DEFAULTSEARCHPATH2 "usb:/srb2wii"
+// PS3: TODO: this will need modification most likely
+#elif defined (_PS3)
+#define NOCWD
+#define NOHOME
+#define DEFAULTWADLOCATION1 "/dev_hdd0/game/SRB2-PS3_/USRDIR/etc"
+#define DEFAULTWADLOCATION2 "/dev_usb/SRB2PS3"
+#define DEFAULTSEARCHPATH1 "/dev_hdd0/game/SRB2-PS3_/USRDIR/etc"
+#define DEFAULTSEARCHPATH2 "/dev_usb/SRB2PS3"
+#elif defined (_PSP)
+#define NOCWD
+#define NOHOME
+#define DEFAULTWADLOCATION1 "host0:/bin/Resources"
+#define DEFAULTWADLOCATION2 "ms0:/PSP/GAME/SRB2PSP"
+#define DEFAULTSEARCHPATH1 "host0:/"
+#define DEFAULTSEARCHPATH2 "ms0:/PSP/GAME/SRB2PSP"
+#elif defined (__unix__) || defined(__APPLE__) || defined (UNIXCOMMON)
+#define DEFAULTWADLOCATION1 "/usr/local/share/games/SRB2"
+#define DEFAULTWADLOCATION2 "/usr/local/games/SRB2"
+#define DEFAULTWADLOCATION3 "/usr/share/games/SRB2"
+#define DEFAULTWADLOCATION4 "/usr/games/SRB2"
+#define DEFAULTSEARCHPATH1 "/usr/local/games"
+#define DEFAULTSEARCHPATH2 "/usr/games"
+#define DEFAULTSEARCHPATH3 "/usr/local"
+#elif defined (_XBOX)
+#define NOCWD
+#ifdef __GNUC__
+#include <openxdk/debug.h>
+#endif
+#define DEFAULTWADLOCATION1 "c:\\srb2"
+#define DEFAULTWADLOCATION2 "d:\\srb2"
+#define DEFAULTWADLOCATION3 "e:\\srb2"
+#define DEFAULTWADLOCATION4 "f:\\srb2"
+#define DEFAULTWADLOCATION5 "g:\\srb2"
+#define DEFAULTWADLOCATION6 "h:\\srb2"
+#define DEFAULTWADLOCATION7 "i:\\srb2"
+#elif defined (_WIN32_WCE)
+#define NOCWD
+#define NOHOME
+#define DEFAULTWADLOCATION1 "\\Storage Card\\SRB2DEMO"
+#define DEFAULTSEARCHPATH1 "\\Storage Card"
+#elif defined (_WIN32)
+#define DEFAULTWADLOCATION1 "c:\\games\\srb2"
+#define DEFAULTWADLOCATION2 "\\games\\srb2"
+#define DEFAULTSEARCHPATH1 "c:\\games"
+#define DEFAULTSEARCHPATH2 "\\games"
+#endif
+
+/**	\brief WAD file to look for
+*/
+#define WADKEYWORD1 "srb2.srb"
+#define WADKEYWORD2 "srb2.wad"
+/**	\brief holds wad path
+*/
+static char returnWadPath[256];
+
+//Alam_GBC: SDL
+
+#include "../doomdef.h"
+#include "../m_misc.h"
+#include "../i_video.h"
+#include "../i_sound.h"
+#include "../i_system.h"
+#include "../screen.h" //vid.WndParent
+#include "../d_net.h"
+#include "../g_game.h"
+#include "../filesrch.h"
+#include "endtxt.h"
+#include "sdlmain.h"
+
+#include "../i_joy.h"
+
+#include "../m_argv.h"
+
+#ifdef MAC_ALERT
+#include "macosx/mac_alert.h"
+#endif
+
+#include "../d_main.h"
+
+#if !defined(NOMUMBLE) && defined(HAVE_MUMBLE)
+// Mumble context string
+#include "../d_clisrv.h"
+#include "../byteptr.h"
+#endif
+
+/**	\brief	The JoyReset function
+
+	\param	JoySet	Joystick info to reset
+
+	\return	void
+*/
+static void JoyReset(SDLJoyInfo_t *JoySet)
+{
+	if (JoySet->dev)
+	{
+#ifdef GP2X //GP2X's SDL does an illegal free on the 1st joystick...
+		if (SDL_JoystickIndex(JoySet->dev) != 0)
+#endif
+		SDL_JoystickClose(JoySet->dev);
+	}
+	JoySet->dev = NULL;
+	JoySet->oldjoy = -1;
+	JoySet->axises = JoySet->buttons = JoySet->hats = JoySet->balls = 0;
+	//JoySet->scale
+}
+
+/**	\brief First joystick up and running
+*/
+static INT32 joystick_started  = 0;
+
+/**	\brief SDL info about joystick 1
+*/
+SDLJoyInfo_t JoyInfo;
+
+
+/**	\brief Second joystick up and running
+*/
+static INT32 joystick2_started = 0;
+
+/**	\brief SDL inof about joystick 2
+*/
+SDLJoyInfo_t JoyInfo2;
+
+#ifdef HAVE_TERMIOS
+static INT32 fdmouse2 = -1;
+static INT32 mouse2_started = 0;
+#endif
+
+SDL_bool consolevent = SDL_FALSE;
+SDL_bool framebuffer = SDL_FALSE;
+
+UINT8 keyboard_started = false;
+
+#if 0
+static void signal_handler(INT32 num)
+{
+	//static char msg[] = "oh no! back to reality!\r\n";
+	char *      sigmsg;
+	char        sigdef[32];
+
+	switch (num)
+	{
+	case SIGINT:
+		sigmsg = "interrupt";
+		break;
+	case SIGILL:
+		sigmsg = "illegal instruction - invalid function image";
+		break;
+	case SIGFPE:
+		sigmsg = "floating point exception";
+		break;
+	case SIGSEGV:
+		sigmsg = "segment violation";
+		break;
+	case SIGTERM:
+		sigmsg = "Software termination signal from kill";
+		break;
+#if !(defined (__unix_) || defined (UNIXCOMMON))
+	case SIGBREAK:
+		sigmsg = "Ctrl-Break sequence";
+		break;
+#endif
+	case SIGABRT:
+		sigmsg = "abnormal termination triggered by abort call";
+		break;
+	default:
+		sprintf(sigdef,"signal number %d", num);
+		sigmsg = sigdef;
+	}
+
+	I_OutputMsg("signal_handler() error: %s\n", sigmsg);
+	signal(num, SIG_DFL);               //default signal action
+	raise(num);
+	I_Quit();
+}
+#endif
+
+#if defined (NDEBUG) && !defined (DC) && !defined (_WIN32_WCE)
+FUNCNORETURN static ATTRNORETURN void quit_handler(int num)
+{
+	signal(num, SIG_DFL); //default signal action
+	raise(num);
+	I_Quit();
+}
+#endif
+
+#ifdef HAVE_TERMIOS
+// TERMIOS console code from Quake3: thank you!
+SDL_bool stdin_active = SDL_TRUE;
+
+typedef struct
+{
+	size_t cursor;
+	char buffer[256];
+} feild_t;
+
+feild_t tty_con;
+
+// when printing general stuff to stdout stderr (Sys_Printf)
+//   we need to disable the tty console stuff
+// this increments so we can recursively disable
+static INT32 ttycon_hide = 0;
+// some key codes that the terminal may be using
+// TTimo NOTE: I'm not sure how relevant this is
+static INT32 tty_erase;
+static INT32 tty_eof;
+
+static struct termios tty_tc;
+
+// =============================================================
+// tty console routines
+// NOTE: if the user is editing a line when something gets printed to the early console then it won't look good
+//   so we provide tty_Clear and tty_Show to be called before and after a stdout or stderr output
+// =============================================================
+
+// flush stdin, I suspect some terminals are sending a LOT of garbage
+// FIXME TTimo relevant?
+#if 0
+static inline void tty_FlushIn(void)
+{
+	char key;
+	while (read(STDIN_FILENO, &key, 1)!=-1);
+}
+#endif
+
+// do a backspace
+// TTimo NOTE: it seems on some terminals just sending '\b' is not enough
+//   so for now, in any case we send "\b \b" .. yeah well ..
+//   (there may be a way to find out if '\b' alone would work though)
+static void tty_Back(void)
+{
+	char key;
+	ssize_t d;
+	key = '\b';
+	d = write(STDOUT_FILENO, &key, 1);
+	key = ' ';
+	d = write(STDOUT_FILENO, &key, 1);
+	key = '\b';
+	d = write(STDOUT_FILENO, &key, 1);
+	(void)d;
+}
+
+static void tty_Clear(void)
+{
+	size_t i;
+	if (tty_con.cursor>0)
+	{
+		for (i=0; i<tty_con.cursor; i++)
+		{
+			tty_Back();
+		}
+	}
+
+}
+
+// clear the display of the line currently edited
+// bring cursor back to beginning of line
+static inline void tty_Hide(void)
+{
+	//I_Assert(consolevent);
+	if (ttycon_hide)
+	{
+		ttycon_hide++;
+		return;
+	}
+	tty_Clear();
+	ttycon_hide++;
+}
+
+// show the current line
+// FIXME TTimo need to position the cursor if needed??
+static inline void tty_Show(void)
+{
+	size_t i;
+	ssize_t d;
+	//I_Assert(consolevent);
+	I_Assert(ttycon_hide>0);
+	ttycon_hide--;
+	if (ttycon_hide == 0 && tty_con.cursor)
+	{
+		for (i=0; i<tty_con.cursor; i++)
+		{
+			d = write(STDOUT_FILENO, tty_con.buffer+i, 1);
+		}
+	}
+	(void)d;
+}
+
+// never exit without calling this, or your terminal will be left in a pretty bad state
+static void I_ShutdownConsole(void)
+{
+	if (consolevent)
+	{
+		I_OutputMsg("Shutdown tty console\n");
+		consolevent = SDL_FALSE;
+		tcsetattr (STDIN_FILENO, TCSADRAIN, &tty_tc);
+	}
+}
+
+static void I_StartupConsole(void)
+{
+	struct termios tc;
+
+	// TTimo
+	// https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=390 (404)
+	// then SIGTTIN or SIGTOU is emitted, if not catched, turns into a SIGSTP
+	signal(SIGTTIN, SIG_IGN);
+	signal(SIGTTOU, SIG_IGN);
+
+#if !defined(GP2X) //read is bad on GP2X
+	consolevent = !M_CheckParm("-noconsole");
+#endif
+	framebuffer = M_CheckParm("-framebuffer");
+
+	if (framebuffer)
+		consolevent = SDL_FALSE;
+
+	if (!consolevent) return;
+
+	if (isatty(STDIN_FILENO)!=1)
+	{
+		I_OutputMsg("stdin is not a tty, tty console mode failed\n");
+		consolevent = SDL_FALSE;
+		return;
+	}
+	memset(&tty_con, 0x00, sizeof(tty_con));
+	tcgetattr (0, &tty_tc);
+	tty_erase = tty_tc.c_cc[VERASE];
+	tty_eof = tty_tc.c_cc[VEOF];
+	tc = tty_tc;
+	/*
+	 ECHO: don't echo input characters
+	 ICANON: enable canonical mode.  This  enables  the  special
+	  characters  EOF,  EOL,  EOL2, ERASE, KILL, REPRINT,
+	  STATUS, and WERASE, and buffers by lines.
+	 ISIG: when any of the characters  INTR,  QUIT,  SUSP,  or
+	  DSUSP are received, generate the corresponding signal
+	*/
+	tc.c_lflag &= ~(ECHO | ICANON);
+	/*
+	 ISTRIP strip off bit 8
+	 INPCK enable input parity checking
+	 */
+	tc.c_iflag &= ~(ISTRIP | INPCK);
+	tc.c_cc[VMIN] = 0; //1?
+	tc.c_cc[VTIME] = 0;
+	tcsetattr (0, TCSADRAIN, &tc);
+}
+
+void I_GetConsoleEvents(void)
+{
+	// we use this when sending back commands
+	event_t ev = {0,0,0,0};
+	char key = 0;
+	ssize_t d;
+
+	if (!consolevent)
+		return;
+
+	ev.type = ev_console;
+	if (read(STDIN_FILENO, &key, 1) == -1 || !key)
+		return;
+
+	// we have something
+	// backspace?
+	// NOTE TTimo testing a lot of values .. seems it's the only way to get it to work everywhere
+	if ((key == tty_erase) || (key == 127) || (key == 8))
+	{
+		if (tty_con.cursor > 0)
+		{
+			tty_con.cursor--;
+			tty_con.buffer[tty_con.cursor] = '\0';
+			tty_Back();
+		}
+		ev.data1 = KEY_BACKSPACE;
+	}
+	else if (key < ' ') // check if this is a control char
+	{
+		if (key == '\n')
+		{
+			tty_Clear();
+			tty_con.cursor = 0;
+			ev.data1 = KEY_ENTER;
+		}
+		else return;
+	}
+	else
+	{
+		// push regular character
+		ev.data1 = tty_con.buffer[tty_con.cursor] = key;
+		tty_con.cursor++;
+		// print the current line (this is differential)
+		d = write(STDOUT_FILENO, &key, 1);
+	}
+	if (ev.data1) D_PostEvent(&ev);
+	//tty_FlushIn();
+	(void)d;
+}
+
+#elif defined (_WIN32) && !(defined (_XBOX) || defined (_WIN32_WCE))
+static BOOL I_ReadyConsole(HANDLE ci)
+{
+	DWORD gotinput;
+	if (ci == INVALID_HANDLE_VALUE) return FALSE;
+	if (WaitForSingleObject(ci,0) != WAIT_OBJECT_0) return FALSE;
+	if (GetFileType(ci) != FILE_TYPE_CHAR) return FALSE;
+	if (!GetConsoleMode(ci, &gotinput)) return FALSE;
+	return (GetNumberOfConsoleInputEvents(ci, &gotinput) && gotinput);
+}
+
+static boolean entering_con_command = false;
+
+void I_GetConsoleEvents(void)
+{
+	event_t ev = {0,0,0,0};
+	HANDLE ci = GetStdHandle(STD_INPUT_HANDLE);
+	HANDLE co = GetStdHandle(STD_OUTPUT_HANDLE);
+	CONSOLE_SCREEN_BUFFER_INFO CSBI;
+	INPUT_RECORD input;
+	DWORD t;
+
+	while (I_ReadyConsole(ci) && ReadConsoleInput(ci, &input, 1, &t) && t)
+	{
+		memset(&ev,0x00,sizeof (ev));
+		switch (input.EventType)
+		{
+			case KEY_EVENT:
+				if (input.Event.KeyEvent.bKeyDown)
+				{
+					ev.type = ev_console;
+					entering_con_command = true;
+					switch (input.Event.KeyEvent.wVirtualKeyCode)
+					{
+						case VK_ESCAPE:
+						case VK_TAB:
+							ev.data1 = KEY_NULL;
+							break;
+						case VK_SHIFT:
+							ev.data1 = KEY_LSHIFT;
+							break;
+						case VK_RETURN:
+							entering_con_command = false;
+							// Fall through.
+						default:
+							ev.data1 = MapVirtualKey(input.Event.KeyEvent.wVirtualKeyCode,2); // convert in to char
+					}
+					if (co != INVALID_HANDLE_VALUE && GetFileType(co) == FILE_TYPE_CHAR && GetConsoleMode(co, &t))
+					{
+						if (ev.data1 && ev.data1 != KEY_LSHIFT && ev.data1 != KEY_RSHIFT)
+						{
+#ifdef _UNICODE
+							WriteConsole(co, &input.Event.KeyEvent.uChar.UnicodeChar, 1, &t, NULL);
+#else
+							WriteConsole(co, &input.Event.KeyEvent.uChar.AsciiChar, 1 , &t, NULL);
+#endif
+						}
+						if (input.Event.KeyEvent.wVirtualKeyCode == VK_BACK
+							&& GetConsoleScreenBufferInfo(co,&CSBI))
+						{
+							WriteConsoleOutputCharacterA(co, " ",1, CSBI.dwCursorPosition, &t);
+						}
+					}
+				}
+				else
+				{
+					ev.type = ev_keyup;
+					switch (input.Event.KeyEvent.wVirtualKeyCode)
+					{
+						case VK_SHIFT:
+							ev.data1 = KEY_LSHIFT;
+							break;
+						default:
+							break;
+					}
+				}
+				if (ev.data1) D_PostEvent(&ev);
+				break;
+			case MOUSE_EVENT:
+			case WINDOW_BUFFER_SIZE_EVENT:
+			case MENU_EVENT:
+			case FOCUS_EVENT:
+				break;
+		}
+	}
+}
+
+static void I_StartupConsole(void)
+{
+	HANDLE ci, co;
+	const INT32 ded = M_CheckParm("-dedicated");
+#ifdef SDLMAIN
+	BOOL gotConsole = FALSE;
+	if (M_CheckParm("-console") || ded)
+		gotConsole = AllocConsole();
+#else
+	BOOL gotConsole = TRUE;
+	if (M_CheckParm("-detachconsole"))
+	{
+		FreeConsole();
+		gotConsole = AllocConsole();
+	}
+#ifdef _DEBUG
+	else if (M_CheckParm("-noconsole") && !ded)
+#else
+	else if (!M_CheckParm("-console") && !ded)
+#endif
+	{
+		FreeConsole();
+		gotConsole = FALSE;
+	}
+#endif
+
+	if (gotConsole)
+	{
+		SetConsoleTitleA("SRB2 Console");
+		consolevent = SDL_TRUE;
+	}
+
+	//Let get the real console HANDLE, because Mingw's Bash is bad!
+	ci = CreateFile(TEXT("CONIN$") ,               GENERIC_READ, FILE_SHARE_READ,  NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+	co = CreateFile(TEXT("CONOUT$"), GENERIC_WRITE|GENERIC_READ, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+	if (ci != INVALID_HANDLE_VALUE)
+	{
+		const DWORD CM = ENABLE_LINE_INPUT|ENABLE_ECHO_INPUT|ENABLE_PROCESSED_INPUT;
+		SetStdHandle(STD_INPUT_HANDLE, ci);
+		if (GetFileType(ci) == FILE_TYPE_CHAR)
+			SetConsoleMode(ci, CM); //default mode but no ENABLE_MOUSE_INPUT
+	}
+	if (co != INVALID_HANDLE_VALUE)
+	{
+		SetStdHandle(STD_OUTPUT_HANDLE, co);
+		SetStdHandle(STD_ERROR_HANDLE, co);
+	}
+}
+static inline void I_ShutdownConsole(void){}
+#else
+void I_GetConsoleEvents(void){}
+static inline void I_StartupConsole(void)
+{
+#ifdef _arch_dreamcast
+	char title[] = "SRB2 for Dreamcast!\n";
+	__set_fpscr(0x00040000); /* ignore FPU underflow */
+	//printf("\nHello world!\n\n");
+	pvr_init_defaults();
+	conio_init(CONIO_TTY_PVR, CONIO_INPUT_LINE);
+	conio_set_theme(CONIO_THEME_MATRIX);
+	conio_clear();
+	conio_putstr(title);
+	//printf("\nHello world!\n\n");
+#endif
+#ifdef _DEBUG
+	consolevent = !M_CheckParm("-noconsole");
+#else
+	consolevent = M_CheckParm("-console");
+#endif
+
+	framebuffer = M_CheckParm("-framebuffer");
+
+	if (framebuffer)
+		consolevent = SDL_FALSE;
+}
+static inline void I_ShutdownConsole(void){}
+#endif
+
+//
+// StartupKeyboard
+//
+void I_StartupKeyboard (void)
+{
+#if defined (NDEBUG) && !defined (DC)
+#ifdef SIGILL
+//	signal(SIGILL , signal_handler);
+#endif
+#ifdef SIGINT
+	signal(SIGINT , quit_handler);
+#endif
+#ifdef SIGSEGV
+//	signal(SIGSEGV , signal_handler);
+#endif
+#ifdef SIGBREAK
+	signal(SIGBREAK , quit_handler);
+#endif
+#ifdef SIGABRT
+//	signal(SIGABRT , signal_handler);
+#endif
+#ifdef SIGTERM
+	signal(SIGTERM , quit_handler);
+#endif
+#endif
+}
+
+//
+//I_OutputMsg
+//
+void I_OutputMsg(const char *fmt, ...)
+{
+	size_t len;
+	XBOXSTATIC char txt[8192];
+	va_list  argptr;
+
+#ifdef _arch_dreamcast
+	if (!keyboard_started) conio_printf(fmt);
+#endif
+
+	va_start(argptr,fmt);
+	vsprintf(txt, fmt, argptr);
+	va_end(argptr);
+
+#ifdef HAVE_TTF
+	if (TTF_WasInit()) I_TTFDrawText(currentfont, solid, DEFAULTFONTFGR, DEFAULTFONTFGG, DEFAULTFONTFGB,  DEFAULTFONTFGA,
+	DEFAULTFONTBGR, DEFAULTFONTBGG, DEFAULTFONTBGB, DEFAULTFONTBGA, txt);
+#endif
+
+#if defined (_WIN32) && !defined (_XBOX) && defined (_MSC_VER)
+	OutputDebugStringA(txt);
+#endif
+
+	len = strlen(txt);
+
+#ifdef LOGMESSAGES
+	if (logstream)
+	{
+		size_t d = fwrite(txt, len, 1, logstream);
+		fflush(logstream);
+		(void)d;
+	}
+#endif
+
+#if defined (_WIN32) && !defined (_XBOX) && !defined(_WIN32_WCE)
+#ifdef DEBUGFILE
+	if (debugfile != stderr)
+#endif
+	{
+		HANDLE co = GetStdHandle(STD_OUTPUT_HANDLE);
+		DWORD bytesWritten;
+
+		if (co == INVALID_HANDLE_VALUE)
+			return;
+
+		if (GetFileType(co) == FILE_TYPE_CHAR && GetConsoleMode(co, &bytesWritten))
+		{
+			static COORD coordNextWrite = {0,0};
+			LPVOID oldLines = NULL;
+			INT oldLength;
+			CONSOLE_SCREEN_BUFFER_INFO csbi;
+
+			// Save the lines that we're going to obliterate.
+			GetConsoleScreenBufferInfo(co, &csbi);
+			oldLength = csbi.dwSize.X * (csbi.dwCursorPosition.Y - coordNextWrite.Y) + csbi.dwCursorPosition.X - coordNextWrite.X;
+
+			if (oldLength > 0)
+			{
+				LPVOID blank = malloc(oldLength);
+				if (!blank) return;
+				memset(blank, ' ', oldLength); // Blank out.
+				oldLines = malloc(oldLength*sizeof(TCHAR));
+				if (!oldLines)
+				{
+					free(blank);
+					return;
+				}
+
+				ReadConsoleOutputCharacter(co, oldLines, oldLength, coordNextWrite, &bytesWritten);
+
+				// Move to where we what to print - which is where we would've been,
+				// had console input not been in the way,
+				SetConsoleCursorPosition(co, coordNextWrite);
+
+				WriteConsoleA(co, blank, oldLength, &bytesWritten, NULL);
+				free(blank);
+
+				// And back to where we want to print again.
+				SetConsoleCursorPosition(co, coordNextWrite);
+			}
+
+			// Actually write the string now!
+			WriteConsoleA(co, txt, (DWORD)len, &bytesWritten, NULL);
+
+			// Next time, output where we left off.
+			GetConsoleScreenBufferInfo(co, &csbi);
+			coordNextWrite = csbi.dwCursorPosition;
+
+			// Restore what was overwritten.
+			if (oldLines && entering_con_command)
+				WriteConsole(co, oldLines, oldLength, &bytesWritten, NULL);
+			if (oldLines) free(oldLines);
+		}
+		else // Redirected to a file.
+			WriteFile(co, txt, (DWORD)len, &bytesWritten, NULL);
+	}
+#else
+#ifdef HAVE_TERMIOS
+	if (consolevent)
+	{
+		tty_Hide();
+	}
+#endif
+
+	if (!framebuffer)
+		fprintf(stderr, "%s", txt);
+#ifdef HAVE_TERMIOS
+	if (consolevent)
+	{
+		tty_Show();
+	}
+#endif
+
+	// 2004-03-03 AJR Since not all messages end in newline, some were getting displayed late.
+	if (!framebuffer)
+		fflush(stderr);
+
+#endif
+}
+
+//
+// I_GetKey
+//
+INT32 I_GetKey (void)
+{
+	// Warning: I_GetKey empties the event queue till next keypress
+	event_t *ev;
+	INT32 rc = 0;
+
+	// return the first keypress from the event queue
+	for (; eventtail != eventhead; eventtail = (eventtail+1)&(MAXEVENTS-1))
+	{
+		ev = &events[eventtail];
+		if (ev->type == ev_keydown || ev->type == ev_console)
+		{
+			rc = ev->data1;
+			continue;
+		}
+	}
+
+	return rc;
+}
+
+//
+// I_JoyScale
+//
+void I_JoyScale(void)
+{
+#ifdef GP2X
+	if (JoyInfo.dev && SDL_JoystickIndex(JoyInfo.dev) == 0)
+		Joystick.bGamepadStyle = true;
+	else
+#endif
+	Joystick.bGamepadStyle = cv_joyscale.value==0;
+	JoyInfo.scale = Joystick.bGamepadStyle?1:cv_joyscale.value;
+}
+
+void I_JoyScale2(void)
+{
+#ifdef GP2X
+	if (JoyInfo2.dev && SDL_JoystickIndex(JoyInfo2.dev) == 0)
+		Joystick.bGamepadStyle = true;
+	else
+#endif
+	Joystick2.bGamepadStyle = cv_joyscale2.value==0;
+	JoyInfo2.scale = Joystick2.bGamepadStyle?1:cv_joyscale2.value;
+}
+
+/**	\brief Joystick 1 buttons states
+*/
+static UINT64 lastjoybuttons = 0;
+
+/**	\brief Joystick 1 hats state
+*/
+static UINT64 lastjoyhats = 0;
+
+/**	\brief	Shuts down joystick 1
+
+
+	\return void
+
+
+*/
+static void I_ShutdownJoystick(void)
+{
+	INT32 i;
+	event_t event;
+	event.type=ev_keyup;
+	event.data2 = 0;
+	event.data3 = 0;
+
+	lastjoybuttons = lastjoyhats = 0;
+
+	// emulate the up of all joystick buttons
+	for (i=0;i<JOYBUTTONS;i++)
+	{
+		event.data1=KEY_JOY1+i;
+		D_PostEvent(&event);
+	}
+
+	// emulate the up of all joystick hats
+	for (i=0;i<JOYHATS*4;i++)
+	{
+		event.data1=KEY_HAT1+i;
+		D_PostEvent(&event);
+	}
+
+	// reset joystick position
+	event.type = ev_joystick;
+	for (i=0;i<JOYAXISSET; i++)
+	{
+		event.data1 = i;
+		D_PostEvent(&event);
+	}
+
+	joystick_started = 0;
+	JoyReset(&JoyInfo);
+	if (!joystick_started && !joystick2_started && SDL_WasInit(SDL_INIT_JOYSTICK) == SDL_INIT_JOYSTICK)
+	{
+		SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
+		if (cv_usejoystick.value == 0)
+		{
+			I_OutputMsg("I_Joystick: SDL's Joystick system has been shutdown\n");
+		}
+	}
+}
+
+void I_GetJoystickEvents(void)
+{
+	static event_t event = {0,0,0,0};
+	INT32 i = 0;
+	UINT64 joyhats = 0;
+#if 0
+	UINT64 joybuttons = 0;
+	Sint16 axisx, axisy;
+#endif
+
+	if (!joystick_started) return;
+
+	if (!JoyInfo.dev) //I_ShutdownJoystick();
+		return;
+
+#if 0
+	//faB: look for as much buttons as g_input code supports,
+	//  we don't use the others
+	for (i = JoyInfo.buttons - 1; i >= 0; i--)
+	{
+		joybuttons <<= 1;
+		if (SDL_JoystickGetButton(JoyInfo.dev,i))
+			joybuttons |= 1;
+	}
+
+	if (joybuttons != lastjoybuttons)
+	{
+		INT64 j = 1; // keep only bits that changed since last time
+		INT64 newbuttons = joybuttons ^ lastjoybuttons;
+		lastjoybuttons = joybuttons;
+
+		for (i = 0; i < JOYBUTTONS; i++, j <<= 1)
+		{
+			if (newbuttons & j) // button changed state?
+			{
+				if (joybuttons & j)
+					event.type = ev_keydown;
+				else
+					event.type = ev_keyup;
+#ifdef _PSP
+				if (i == 12)
+					event.data1 = KEY_ESCAPE;
+				else
+#endif
+				event.data1 = KEY_JOY1 + i;
+				D_PostEvent(&event);
+			}
+		}
+	}
+#endif
+
+	for (i = JoyInfo.hats - 1; i >= 0; i--)
+	{
+		Uint8 hat = SDL_JoystickGetHat(JoyInfo.dev, i);
+
+		if (hat & SDL_HAT_UP   ) joyhats|=(UINT64)0x1<<(0 + 4*i);
+		if (hat & SDL_HAT_DOWN ) joyhats|=(UINT64)0x1<<(1 + 4*i);
+		if (hat & SDL_HAT_LEFT ) joyhats|=(UINT64)0x1<<(2 + 4*i);
+		if (hat & SDL_HAT_RIGHT) joyhats|=(UINT64)0x1<<(3 + 4*i);
+	}
+
+	if (joyhats != lastjoyhats)
+	{
+		INT64 j = 1; // keep only bits that changed since last time
+		INT64 newhats = joyhats ^ lastjoyhats;
+		lastjoyhats = joyhats;
+
+		for (i = 0; i < JOYHATS*4; i++, j <<= 1)
+		{
+			if (newhats & j) // hat changed state?
+			{
+				if (joyhats & j)
+					event.type = ev_keydown;
+				else
+					event.type = ev_keyup;
+				event.data1 = KEY_HAT1 + i;
+				D_PostEvent(&event);
+			}
+		}
+	}
+
+#if 0
+	// send joystick axis positions
+	event.type = ev_joystick;
+
+	for (i = JOYAXISSET - 1; i >= 0; i--)
+	{
+		event.data1 = i;
+		if (i*2 + 1 <= JoyInfo.axises)
+			axisx = SDL_JoystickGetAxis(JoyInfo.dev, i*2 + 0);
+		else axisx = 0;
+		if (i*2 + 2 <= JoyInfo.axises)
+			axisy = SDL_JoystickGetAxis(JoyInfo.dev, i*2 + 1);
+		else axisy = 0;
+
+#ifdef _arch_dreamcast // -128 to 127
+		axisx = axisx*8;
+		axisy = axisy*8;
+#else // -32768 to 32767
+		axisx = axisx/32;
+		axisy = axisy/32;
+#endif
+
+		if (Joystick.bGamepadStyle)
+		{
+			// gamepad control type, on or off, live or die
+			if (axisx < -(JOYAXISRANGE/2))
+				event.data2 = -1;
+			else if (axisx > (JOYAXISRANGE/2))
+				event.data2 = 1;
+			else event.data2 = 0;
+			if (axisy < -(JOYAXISRANGE/2))
+				event.data3 = -1;
+			else if (axisy > (JOYAXISRANGE/2))
+				event.data3 = 1;
+			else event.data3 = 0;
+		}
+		else
+		{
+
+			axisx = JoyInfo.scale?((axisx/JoyInfo.scale)*JoyInfo.scale):axisx;
+			axisy = JoyInfo.scale?((axisy/JoyInfo.scale)*JoyInfo.scale):axisy;
+
+#ifdef SDL_JDEADZONE
+			if (-SDL_JDEADZONE <= axisx && axisx <= SDL_JDEADZONE) axisx = 0;
+			if (-SDL_JDEADZONE <= axisy && axisy <= SDL_JDEADZONE) axisy = 0;
+#endif
+
+			// analog control style , just send the raw data
+			event.data2 = axisx; // x axis
+			event.data3 = axisy; // y axis
+		}
+		D_PostEvent(&event);
+	}
+#endif
+}
+
+/**	\brief	Open joystick handle
+
+	\param	fname	name of joystick
+
+	\return	axises
+
+
+*/
+static int joy_open(const char *fname)
+{
+	return -1; // TODO SDL2 joystick overhaul
+#if 0
+	int joyindex = atoi(fname);
+	int num_joy = 0;
+	int i;
+
+	if (joystick_started == 0 && joystick2_started == 0)
+	{
+		if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) == -1)
+		{
+			CONS_Printf(M_GetText("Couldn't initialize joystick: %s\n"), SDL_GetError());
+			return -1;
+		}
+		else
+		{
+			num_joy = SDL_NumJoysticks();
+		}
+
+		if (num_joy < joyindex)
+		{
+			CONS_Printf(M_GetText("Cannot use joystick #%d/(%s), it doesn't exist\n"),joyindex,fname);
+			for (i = 0; i < num_joy; i++)
+				CONS_Printf("#%d/(%s)\n", i+1, SDL_JoystickName(i));
+			I_ShutdownJoystick();
+			return -1;
+		}
+	}
+	else
+	{
+		JoyReset(&JoyInfo);
+		//I_ShutdownJoystick();
+		//joy_open(fname);
+	}
+
+	num_joy = SDL_NumJoysticks();
+
+	if (joyindex <= 0 || num_joy == 0 || JoyInfo.oldjoy == joyindex)
+	{
+//		I_OutputMsg("Unable to use that joystick #(%s), non-number\n",fname);
+		if (num_joy != 0)
+		{
+			CONS_Printf(M_GetText("Found %d joysticks on this system\n"), num_joy);
+			for (i = 0; i < num_joy; i++)
+				CONS_Printf("#%d/(%s)\n", i+1, SDL_JoystickName(i));
+		}
+		else
+			CONS_Printf("%s", M_GetText("Found no joysticks on this system\n"));
+		if (joyindex <= 0 || num_joy == 0) return 0;
+	}
+
+	JoyInfo.dev = SDL_JoystickOpen(joyindex-1);
+	CONS_Printf(M_GetText("Joystick: %s\n"), SDL_JoystickName(joyindex-1));
+
+	if (JoyInfo.dev == NULL)
+	{
+		CONS_Printf(M_GetText("Couldn't open joystick: %s\n"), SDL_GetError());
+		I_ShutdownJoystick();
+		return -1;
+	}
+	else
+	{
+		JoyInfo.axises = SDL_JoystickNumAxes(JoyInfo.dev);
+		if (JoyInfo.axises > JOYAXISSET*2)
+			JoyInfo.axises = JOYAXISSET*2;
+/*		if (joyaxes<2)
+		{
+			I_OutputMsg("Not enought axes?\n");
+			I_ShutdownJoystick();
+			return 0;
+		}*/
+
+		JoyInfo.buttons = SDL_JoystickNumButtons(JoyInfo.dev);
+		if (JoyInfo.buttons > JOYBUTTONS)
+			JoyInfo.buttons = JOYBUTTONS;
+
+#ifdef DC
+		JoyInfo.hats = 0;
+#else
+		JoyInfo.hats = SDL_JoystickNumHats(JoyInfo.dev);
+		if (JoyInfo.hats > JOYHATS)
+			JoyInfo.hats = JOYHATS;
+
+		JoyInfo.balls = SDL_JoystickNumBalls(JoyInfo.dev);
+#endif
+
+		//Joystick.bGamepadStyle = !stricmp(SDL_JoystickName(SDL_JoystickIndex(JoyInfo.dev)), "pad");
+
+		return JoyInfo.axises;
+	}
+#endif
+}
+
+//Joystick2
+
+/**	\brief Joystick 2 buttons states
+*/
+static UINT64 lastjoy2buttons = 0;
+
+/**	\brief Joystick 2 hats state
+*/
+static UINT64 lastjoy2hats = 0;
+
+/**	\brief	Shuts down joystick 2
+
+
+	\return	void
+*/
+static void I_ShutdownJoystick2(void)
+{
+	INT32 i;
+	event_t event;
+	event.type = ev_keyup;
+	event.data2 = 0;
+	event.data3 = 0;
+
+	lastjoy2buttons = lastjoy2hats = 0;
+
+	// emulate the up of all joystick buttons
+	for (i = 0; i < JOYBUTTONS; i++)
+	{
+		event.data1 = KEY_2JOY1 + i;
+		D_PostEvent(&event);
+	}
+
+	// emulate the up of all joystick hats
+	for (i = 0; i < JOYHATS*4; i++)
+	{
+		event.data1 = KEY_2HAT1 + i;
+		D_PostEvent(&event);
+	}
+
+	// reset joystick position
+	event.type = ev_joystick2;
+	for (i = 0; i < JOYAXISSET; i++)
+	{
+		event.data1 = i;
+		D_PostEvent(&event);
+	}
+
+	JoyReset(&JoyInfo2);
+	if (!joystick_started && !joystick2_started && SDL_WasInit(SDL_INIT_JOYSTICK) == SDL_INIT_JOYSTICK)
+	{
+		SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
+		if (cv_usejoystick2.value == 0)
+		{
+			DEBFILE("I_Joystick2: SDL's Joystick system has been shutdown\n");
+		}
+	}
+}
+
+void I_GetJoystick2Events(void)
+{
+	static event_t event = {0,0,0,0};
+	INT32 i = 0;
+	UINT64 joyhats = 0;
+#if 0
+	INT64 joybuttons = 0;
+	INT32 axisx, axisy;
+#endif
+
+	if (!joystick2_started)
+		return;
+
+	if (!JoyInfo2.dev) //I_ShutdownJoystick2();
+		return;
+
+
+#if 0
+	//faB: look for as much buttons as g_input code supports,
+	//  we don't use the others
+	for (i = JoyInfo2.buttons - 1; i >= 0; i--)
+	{
+		joybuttons <<= 1;
+		if (SDL_JoystickGetButton(JoyInfo2.dev,i))
+			joybuttons |= 1;
+	}
+
+	if (joybuttons != lastjoy2buttons)
+	{
+		INT64 j = 1; // keep only bits that changed since last time
+		INT64 newbuttons = joybuttons ^ lastjoy2buttons;
+		lastjoy2buttons = joybuttons;
+
+		for (i = 0; i < JOYBUTTONS; i++, j <<= 1)
+		{
+			if (newbuttons & j) // button changed state?
+			{
+				if (joybuttons & j)
+					event.type = ev_keydown;
+				else
+					event.type = ev_keyup;
+				event.data1 = KEY_2JOY1 + i;
+				D_PostEvent(&event);
+			}
+		}
+	}
+#endif
+
+	for (i = JoyInfo2.hats - 1; i >= 0; i--)
+	{
+		Uint8 hat = SDL_JoystickGetHat(JoyInfo2.dev, i);
+
+		if (hat & SDL_HAT_UP   ) joyhats|=(UINT64)0x1<<(0 + 4*i);
+		if (hat & SDL_HAT_DOWN ) joyhats|=(UINT64)0x1<<(1 + 4*i);
+		if (hat & SDL_HAT_LEFT ) joyhats|=(UINT64)0x1<<(2 + 4*i);
+		if (hat & SDL_HAT_RIGHT) joyhats|=(UINT64)0x1<<(3 + 4*i);
+	}
+
+	if (joyhats != lastjoy2hats)
+	{
+		INT64 j = 1; // keep only bits that changed since last time
+		INT64 newhats = joyhats ^ lastjoy2hats;
+		lastjoy2hats = joyhats;
+
+		for (i = 0; i < JOYHATS*4; i++, j <<= 1)
+		{
+			if (newhats & j) // hat changed state?
+			{
+				if (joyhats & j)
+					event.type = ev_keydown;
+				else
+					event.type = ev_keyup;
+				event.data1 = KEY_2HAT1 + i;
+				D_PostEvent(&event);
+			}
+		}
+	}
+
+#if 0
+	// send joystick axis positions
+	event.type = ev_joystick2;
+
+	for (i = JOYAXISSET - 1; i >= 0; i--)
+	{
+		event.data1 = i;
+		if (i*2 + 1 <= JoyInfo2.axises)
+			axisx = SDL_JoystickGetAxis(JoyInfo2.dev, i*2 + 0);
+		else axisx = 0;
+		if (i*2 + 2 <= JoyInfo2.axises)
+			axisy = SDL_JoystickGetAxis(JoyInfo2.dev, i*2 + 1);
+		else axisy = 0;
+
+#ifdef _arch_dreamcast // -128 to 127
+		axisx = axisx*8;
+		axisy = axisy*8;
+#else // -32768 to 32767
+		axisx = axisx/32;
+		axisy = axisy/32;
+#endif
+
+		if (Joystick2.bGamepadStyle)
+		{
+			// gamepad control type, on or off, live or die
+			if (axisx < -(JOYAXISRANGE/2))
+				event.data2 = -1;
+			else if (axisx > (JOYAXISRANGE/2))
+				event.data2 = 1;
+			else
+				event.data2 = 0;
+			if (axisy < -(JOYAXISRANGE/2))
+				event.data3 = -1;
+			else if (axisy > (JOYAXISRANGE/2))
+				event.data3 = 1;
+			else
+				event.data3 = 0;
+		}
+		else
+		{
+
+			axisx = JoyInfo2.scale?((axisx/JoyInfo2.scale)*JoyInfo2.scale):axisx;
+			axisy = JoyInfo2.scale?((axisy/JoyInfo2.scale)*JoyInfo2.scale):axisy;
+
+#ifdef SDL_JDEADZONE
+			if (-SDL_JDEADZONE <= axisx && axisx <= SDL_JDEADZONE) axisx = 0;
+			if (-SDL_JDEADZONE <= axisy && axisy <= SDL_JDEADZONE) axisy = 0;
+#endif
+
+			// analog control style , just send the raw data
+			event.data2 = axisx; // x axis
+			event.data3 = axisy; // y axis
+		}
+		D_PostEvent(&event);
+	}
+#endif
+
+}
+
+/**	\brief	Open joystick handle
+
+	\param	fname	name of joystick
+
+	\return	axises
+
+
+*/
+static int joy_open2(const char *fname)
+{
+	return -1; // TODO SDL2 joystick overhaul
+#if 0
+	int joyindex = atoi(fname);
+	int num_joy = 0;
+	int i;
+
+	if (joystick_started == 0 && joystick2_started == 0)
+	{
+		if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) == -1)
+		{
+			CONS_Printf(M_GetText("Couldn't initialize joystick: %s\n"), SDL_GetError());
+			return -1;
+		}
+		else
+			num_joy = SDL_NumJoysticks();
+
+		if (num_joy < joyindex)
+		{
+			CONS_Printf(M_GetText("Cannot use joystick #%d/(%s), it doesn't exist\n"),joyindex,fname);
+			for (i = 0; i < num_joy; i++)
+				CONS_Printf("#%d/(%s)\n", i+1, SDL_JoystickName(i));
+			I_ShutdownJoystick2();
+			return -1;
+		}
+	}
+	else
+	{
+		JoyReset(&JoyInfo2);
+		//I_ShutdownJoystick();
+		//joy_open(fname);
+	}
+
+	num_joy = SDL_NumJoysticks();
+
+	if (joyindex <= 0 || num_joy == 0 || JoyInfo2.oldjoy == joyindex)
+	{
+//		I_OutputMsg("Unable to use that joystick #(%s), non-number\n",fname);
+		if (num_joy != 0)
+		{
+			CONS_Printf(M_GetText("Found %d joysticks on this system\n"), num_joy);
+			for (i = 0; i < num_joy; i++)
+				CONS_Printf("#%d/(%s)\n", i+1, SDL_JoystickName(i));
+		}
+		else
+			CONS_Printf("%s", M_GetText("Found no joysticks on this system\n"));
+		if (joyindex <= 0 || num_joy == 0) return 0;
+	}
+
+	JoyInfo2.dev = SDL_JoystickOpen(joyindex-1);
+	CONS_Printf(M_GetText("Joystick2: %s\n"), SDL_JoystickName(joyindex-1));
+
+	if (!JoyInfo2.dev)
+	{
+		CONS_Printf(M_GetText("Couldn't open joystick2: %s\n"), SDL_GetError());
+		I_ShutdownJoystick2();
+		return -1;
+	}
+	else
+	{
+		JoyInfo2.axises = SDL_JoystickNumAxes(JoyInfo2.dev);
+		if (JoyInfo2.axises > JOYAXISSET*2)
+			JoyInfo2.axises = JOYAXISSET*2;
+/*		if (joyaxes < 2)
+		{
+			I_OutputMsg("Not enought axes?\n");
+			I_ShutdownJoystick2();
+			return 0;
+		}*/
+
+		JoyInfo2.buttons = SDL_JoystickNumButtons(JoyInfo2.dev);
+		if (JoyInfo2.buttons > JOYBUTTONS)
+			JoyInfo2.buttons = JOYBUTTONS;
+
+#ifdef DC
+		JoyInfo2.hats = 0;
+#else
+		JoyInfo2.hats = SDL_JoystickNumHats(JoyInfo2.dev);
+		if (JoyInfo2.hats > JOYHATS)
+			JoyInfo2.hats = JOYHATS;
+
+		JoyInfo2.balls = SDL_JoystickNumBalls(JoyInfo2.dev);
+#endif
+
+		//Joystick.bGamepadStyle = !stricmp(SDL_JoystickName(SDL_JoystickIndex(JoyInfo2.dev)), "pad");
+
+		return JoyInfo2.axises;
+	}
+#endif
+}
+
+//
+// I_InitJoystick
+//
+void I_InitJoystick(void)
+{
+	I_ShutdownJoystick();
+	if (!strcmp(cv_usejoystick.string, "0") || M_CheckParm("-nojoy"))
+		return;
+	if (joy_open(cv_usejoystick.string) != -1)
+		JoyInfo.oldjoy = atoi(cv_usejoystick.string);
+	else
+	{
+		cv_usejoystick.value = 0;
+		return;
+	}
+	joystick_started = 1;
+}
+
+void I_InitJoystick2(void)
+{
+	I_ShutdownJoystick2();
+	if (!strcmp(cv_usejoystick2.string, "0") || M_CheckParm("-nojoy"))
+		return;
+	if (joy_open2(cv_usejoystick2.string) != -1)
+		JoyInfo2.oldjoy = atoi(cv_usejoystick2.string);
+	else
+	{
+		cv_usejoystick2.value = 0;
+		return;
+	}
+	joystick2_started = 1;
+}
+
+static void I_ShutdownInput(void)
+{
+	if (SDL_WasInit(SDL_INIT_JOYSTICK) == SDL_INIT_JOYSTICK)
+	{
+		JoyReset(&JoyInfo);
+		JoyReset(&JoyInfo2);
+		SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
+	}
+
+}
+
+INT32 I_NumJoys(void)
+{
+	INT32 numjoy = 0;
+	if (SDL_WasInit(SDL_INIT_JOYSTICK) == 0)
+	{
+		if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) != -1)
+			numjoy = SDL_NumJoysticks();
+		SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
+	}
+	else
+		numjoy = SDL_NumJoysticks();
+	return numjoy;
+}
+
+const char *I_GetJoyName(INT32 joyindex)
+{
+	const char *joyname = "NA";
+	joyindex--; //SDL's Joystick System starts at 0, not 1
+	if (SDL_WasInit(SDL_INIT_JOYSTICK) == 0)
+	{
+		if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) != -1)
+			joyname = SDL_JoystickNameForIndex(joyindex);
+		SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
+	}
+	else
+		joyname = SDL_JoystickNameForIndex(joyindex);
+	return joyname;
+}
+
+#ifndef NOMUMBLE
+#ifdef HAVE_MUMBLE
+// Best Mumble positional audio settings:
+// Minimum distance 3.0 m
+// Bloom 175%
+// Maximum distance 80.0 m
+// Minimum volume 50%
+#define DEG2RAD (0.017453292519943295769236907684883l) // TAU/360 or PI/180
+#define MUMBLEUNIT (64.0f) // FRACUNITS in a Meter
+
+static struct {
+#ifdef WINMUMBLE
+	UINT32 uiVersion;
+	DWORD uiTick;
+#else
+	Uint32 uiVersion;
+	Uint32 uiTick;
+#endif
+	float fAvatarPosition[3];
+	float fAvatarFront[3];
+	float fAvatarTop[3]; // defaults to Y-is-up (only used for leaning)
+	wchar_t name[256]; // game name
+	float fCameraPosition[3];
+	float fCameraFront[3];
+	float fCameraTop[3]; // defaults to Y-is-up (only used for leaning)
+	wchar_t identity[256]; // player id
+#ifdef WINMUMBLE
+	UINT32 context_len;
+#else
+	Uint32 context_len;
+#endif
+	unsigned char context[256]; // server/team
+	wchar_t description[2048]; // game description
+} *mumble = NULL;
+#endif // HAVE_MUMBLE
+
+static void I_SetupMumble(void)
+{
+#ifdef WINMUMBLE
+	HANDLE hMap = OpenFileMappingW(FILE_MAP_ALL_ACCESS, FALSE, L"MumbleLink");
+	if (!hMap)
+		return;
+
+	mumble = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(*mumble));
+	if (!mumble)
+		CloseHandle(hMap);
+#elif defined (HAVE_SHM)
+	int shmfd;
+	char memname[256];
+
+	snprintf(memname, 256, "/MumbleLink.%d", getuid());
+	shmfd = shm_open(memname, O_RDWR, S_IRUSR | S_IWUSR);
+
+	if(shmfd < 0)
+		return;
+
+	mumble = mmap(NULL, sizeof(*mumble), PROT_READ | PROT_WRITE, MAP_SHARED, shmfd, 0);
+	if (mumble == MAP_FAILED)
+		mumble = NULL;
+#endif
+}
+
+void I_UpdateMumble(const mobj_t *mobj, const listener_t listener)
+{
+#ifdef HAVE_MUMBLE
+	double angle;
+	fixed_t anglef;
+
+	if (!mumble)
+		return;
+
+	if(mumble->uiVersion != 2) {
+		wcsncpy(mumble->name, L"SRB2 "VERSIONSTRING, 256);
+		wcsncpy(mumble->description, L"Sonic Robo Blast 2 with integrated Mumble Link support.", 2048);
+		mumble->uiVersion = 2;
+	}
+	mumble->uiTick++;
+
+	if (!netgame || gamestate != GS_LEVEL) { // Zero out, but never delink.
+		mumble->fAvatarPosition[0] = mumble->fAvatarPosition[1] = mumble->fAvatarPosition[2] = 0.0f;
+		mumble->fAvatarFront[0] = 1.0f;
+		mumble->fAvatarFront[1] = mumble->fAvatarFront[2] = 0.0f;
+		mumble->fCameraPosition[0] = mumble->fCameraPosition[1] = mumble->fCameraPosition[2] = 0.0f;
+		mumble->fCameraFront[0] = 1.0f;
+		mumble->fCameraFront[1] = mumble->fCameraFront[2] = 0.0f;
+		return;
+	}
+
+	{
+		UINT8 *p = mumble->context;
+		WRITEMEM(p, server_context, 8);
+		WRITEINT16(p, gamemap);
+		mumble->context_len = p - mumble->context;
+	}
+
+	if (mobj) {
+		mumble->fAvatarPosition[0] = FIXED_TO_FLOAT(mobj->x) / MUMBLEUNIT;
+		mumble->fAvatarPosition[1] = FIXED_TO_FLOAT(mobj->z) / MUMBLEUNIT;
+		mumble->fAvatarPosition[2] = FIXED_TO_FLOAT(mobj->y) / MUMBLEUNIT;
+
+		anglef = AngleFixed(mobj->angle);
+		angle = FIXED_TO_FLOAT(anglef)*DEG2RAD;
+		mumble->fAvatarFront[0] = (float)cos(angle);
+		mumble->fAvatarFront[1] = 0.0f;
+		mumble->fAvatarFront[2] = (float)sin(angle);
+	} else {
+		mumble->fAvatarPosition[0] = mumble->fAvatarPosition[1] = mumble->fAvatarPosition[2] = 0.0f;
+		mumble->fAvatarFront[0] = 1.0f;
+		mumble->fAvatarFront[1] = mumble->fAvatarFront[2] = 0.0f;
+	}
+
+	mumble->fCameraPosition[0] = FIXED_TO_FLOAT(listener.x) / MUMBLEUNIT;
+	mumble->fCameraPosition[1] = FIXED_TO_FLOAT(listener.z) / MUMBLEUNIT;
+	mumble->fCameraPosition[2] = FIXED_TO_FLOAT(listener.y) / MUMBLEUNIT;
+
+	anglef = AngleFixed(listener.angle);
+	angle = FIXED_TO_FLOAT(anglef)*DEG2RAD;
+	mumble->fCameraFront[0] = (float)cos(angle);
+	mumble->fCameraFront[1] = 0.0f;
+	mumble->fCameraFront[2] = (float)sin(angle);
+#else
+	(void)mobj;
+	(void)listener;
+#endif // HAVE_MUMBLE
+}
+#undef WINMUMBLE
+#endif // NOMUMBLE
+
+#ifdef HAVE_TERMIOS
+
+void I_GetMouseEvents(void)
+{
+	static UINT8 mdata[5];
+	static INT32 i = 0,om2b = 0;
+	INT32 di, j, mlp, button;
+	event_t event;
+	const INT32 mswap[8] = {0, 4, 1, 5, 2, 6, 3, 7};
+
+	if (!mouse2_started) return;
+	for (mlp = 0; mlp < 20; mlp++)
+	{
+		for (; i < 5; i++)
+		{
+			di = read(fdmouse2, mdata+i, 1);
+			if (di == -1) return;
+		}
+		if ((mdata[0] & 0xf8) != 0x80)
+		{
+			for (j = 1; j < 5; j++)
+				if ((mdata[j] & 0xf8) == 0x80)
+					for (i = 0; i < 5-j; i++) // shift
+						mdata[i] = mdata[i+j];
+			if (i < 5) continue;
+		}
+		else
+		{
+			button = mswap[~mdata[0] & 0x07];
+			for (j = 0; j < MOUSEBUTTONS; j++)
+			{
+				if (om2b & (1<<j))
+				{
+					if (!(button & (1<<j))) //keyup
+					{
+						event.type = ev_keyup;
+						event.data1 = KEY_2MOUSE1+j;
+						D_PostEvent(&event);
+						om2b ^= 1 << j;
+					}
+				}
+				else
+				{
+					if (button & (1<<j))
+					{
+						event.type = ev_keydown;
+						event.data1 = KEY_2MOUSE1+j;
+						D_PostEvent(&event);
+						om2b ^= 1 << j;
+					}
+				}
+			}
+			event.data2 = ((SINT8)mdata[1])+((SINT8)mdata[3]);
+			event.data3 = ((SINT8)mdata[2])+((SINT8)mdata[4]);
+			if (event.data2 && event.data3)
+			{
+				event.type = ev_mouse2;
+				event.data1 = 0;
+				D_PostEvent(&event);
+			}
+		}
+		i = 0;
+	}
+}
+
+//
+// I_ShutdownMouse2
+//
+static void I_ShutdownMouse2(void)
+{
+	if (fdmouse2 != -1) close(fdmouse2);
+	mouse2_started = 0;
+}
+#elif defined (_WIN32) && !defined (_XBOX)
+
+static HANDLE mouse2filehandle = INVALID_HANDLE_VALUE;
+
+static void I_ShutdownMouse2(void)
+{
+	event_t event;
+	INT32 i;
+
+	if (mouse2filehandle == INVALID_HANDLE_VALUE)
+		return;
+
+	SetCommMask(mouse2filehandle, 0);
+
+	EscapeCommFunction(mouse2filehandle, CLRDTR);
+	EscapeCommFunction(mouse2filehandle, CLRRTS);
+
+	PurgeComm(mouse2filehandle, PURGE_TXABORT | PURGE_RXABORT |
+	          PURGE_TXCLEAR | PURGE_RXCLEAR);
+
+	CloseHandle(mouse2filehandle);
+
+	// emulate the up of all mouse buttons
+	for (i = 0; i < MOUSEBUTTONS; i++)
+	{
+		event.type = ev_keyup;
+		event.data1 = KEY_2MOUSE1+i;
+		D_PostEvent(&event);
+	}
+
+	mouse2filehandle = INVALID_HANDLE_VALUE;
+}
+
+#define MOUSECOMBUFFERSIZE 256
+static INT32 handlermouse2x,handlermouse2y,handlermouse2buttons;
+
+static void I_PoolMouse2(void)
+{
+	UINT8 buffer[MOUSECOMBUFFERSIZE];
+	COMSTAT ComStat;
+	DWORD dwErrorFlags;
+	DWORD dwLength;
+	char dx,dy;
+
+	static INT32 bytenum;
+	static UINT8 combytes[4];
+	DWORD i;
+
+	ClearCommError(mouse2filehandle, &dwErrorFlags, &ComStat);
+	dwLength = min(MOUSECOMBUFFERSIZE, ComStat.cbInQue);
+
+	if (dwLength <= 0)
+		return;
+
+	if (!ReadFile(mouse2filehandle, buffer, dwLength, &dwLength, NULL))
+	{
+		CONS_Alert(CONS_WARNING, "%s", M_GetText("Read Error on secondary mouse port\n"));
+		return;
+	}
+
+	// parse the mouse packets
+	for (i = 0; i < dwLength; i++)
+	{
+		if ((buffer[i] & 64)== 64)
+			bytenum = 0;
+
+		if (bytenum < 4)
+			combytes[bytenum] = buffer[i];
+		bytenum++;
+
+		if (bytenum == 1)
+		{
+			handlermouse2buttons &= ~3;
+			handlermouse2buttons |= ((combytes[0] & (32+16)) >> 4);
+		}
+		else if (bytenum == 3)
+		{
+			dx = (char)((combytes[0] &  3) << 6);
+			dy = (char)((combytes[0] & 12) << 4);
+			dx = (char)(dx + combytes[1]);
+			dy = (char)(dy + combytes[2]);
+			handlermouse2x+= dx;
+			handlermouse2y+= dy;
+		}
+		else if (bytenum == 4) // fourth UINT8 (logitech mouses)
+		{
+			if (buffer[i] & 32)
+				handlermouse2buttons |= 4;
+			else
+				handlermouse2buttons &= ~4;
+		}
+	}
+}
+
+void I_GetMouseEvents(void)
+{
+	static UINT8 lastbuttons2 = 0; //mouse movement
+	event_t event;
+
+	if (mouse2filehandle == INVALID_HANDLE_VALUE)
+		return;
+
+	I_PoolMouse2();
+	// post key event for buttons
+	if (handlermouse2buttons != lastbuttons2)
+	{
+		INT32 i, j = 1, k;
+		k = (handlermouse2buttons ^ lastbuttons2); // only changed bit to 1
+		lastbuttons2 = (UINT8)handlermouse2buttons;
+
+		for (i = 0; i < MOUSEBUTTONS; i++, j <<= 1)
+			if (k & j)
+			{
+				if (handlermouse2buttons & j)
+					event.type = ev_keydown;
+				else
+					event.type = ev_keyup;
+				event.data1 = KEY_2MOUSE1+i;
+				D_PostEvent(&event);
+			}
+	}
+
+	if (handlermouse2x != 0 || handlermouse2y != 0)
+	{
+		event.type = ev_mouse2;
+		event.data1 = 0;
+//		event.data1 = buttons; // not needed
+		event.data2 = handlermouse2x << 1;
+		event.data3 = -handlermouse2y << 1;
+		handlermouse2x = 0;
+		handlermouse2y = 0;
+
+		D_PostEvent(&event);
+	}
+}
+#else
+void I_GetMouseEvents(void){};
+#endif
+
+//
+// I_StartupMouse2
+//
+void I_StartupMouse2(void)
+{
+#ifdef HAVE_TERMIOS
+	struct termios m2tio;
+	size_t i;
+	INT32 dtr = -1, rts = -1;;
+	I_ShutdownMouse2();
+	if (cv_usemouse2.value == 0) return;
+	if ((fdmouse2 = open(cv_mouse2port.string, O_RDONLY|O_NONBLOCK|O_NOCTTY)) == -1)
+	{
+		CONS_Printf(M_GetText("Error opening %s!\n"), cv_mouse2port.string);
+		return;
+	}
+	tcflush(fdmouse2, TCIOFLUSH);
+	m2tio.c_iflag = IGNBRK;
+	m2tio.c_oflag = 0;
+	m2tio.c_cflag = CREAD|CLOCAL|HUPCL|CS8|CSTOPB|B1200;
+	m2tio.c_lflag = 0;
+	m2tio.c_cc[VTIME] = 0;
+	m2tio.c_cc[VMIN] = 1;
+	tcsetattr(fdmouse2, TCSANOW, &m2tio);
+	for (i = 0; i < strlen(cv_mouse2opt.string); i++)
+	{
+		if (toupper(cv_mouse2opt.string[i]) == 'D')
+		{
+			if (cv_mouse2opt.string[i+1] == '-')
+				dtr = 0;
+			else
+				dtr = 1;
+		}
+		if (toupper(cv_mouse2opt.string[i]) == 'R')
+		{
+			if (cv_mouse2opt.string[i+1] == '-')
+				rts = 0;
+			else
+				rts = 1;
+		}
+		if (dtr != -1 || rts != -1)
+		{
+			INT32 c;
+			if (!ioctl(fdmouse2, TIOCMGET, &c))
+			{
+				if (!dtr)
+					c &= ~TIOCM_DTR;
+				else if (dtr > 0)
+					c |= TIOCM_DTR;
+			}
+			if (!rts)
+				c &= ~TIOCM_RTS;
+			else if (rts > 0)
+				c |= TIOCM_RTS;
+			ioctl(fdmouse2, TIOCMSET, &c);
+		}
+	}
+	mouse2_started = 1;
+	I_AddExitFunc(I_ShutdownMouse2);
+#elif defined (_WIN32) && !defined (_XBOX)
+	DCB dcb;
+
+	if (mouse2filehandle != INVALID_HANDLE_VALUE)
+		I_ShutdownMouse2();
+
+	if (cv_usemouse2.value == 0)
+		return;
+
+	if (mouse2filehandle == INVALID_HANDLE_VALUE)
+	{
+		// COM file handle
+		mouse2filehandle = CreateFileA(cv_mouse2port.string, GENERIC_READ | GENERIC_WRITE,
+		                               0,                     // exclusive access
+		                               NULL,                  // no security attrs
+		                               OPEN_EXISTING,
+		                               FILE_ATTRIBUTE_NORMAL,
+		                               NULL);
+		if (mouse2filehandle == INVALID_HANDLE_VALUE)
+		{
+			INT32 e = GetLastError();
+			if (e == 5)
+				CONS_Alert(CONS_ERROR, M_GetText("Can't open %s: Access denied\n"), cv_mouse2port.string);
+			else
+				CONS_Alert(CONS_ERROR, M_GetText("Can't open %s: error %d\n"), cv_mouse2port.string, e);
+			return;
+		}
+	}
+
+	// getevent when somthing happens
+	//SetCommMask(mouse2filehandle, EV_RXCHAR);
+
+	// buffers
+	SetupComm(mouse2filehandle, MOUSECOMBUFFERSIZE, MOUSECOMBUFFERSIZE);
+
+	// purge buffers
+	PurgeComm(mouse2filehandle, PURGE_TXABORT | PURGE_RXABORT
+	          | PURGE_TXCLEAR | PURGE_RXCLEAR);
+
+	// setup port to 1200 7N1
+	dcb.DCBlength = sizeof (DCB);
+
+	GetCommState(mouse2filehandle, &dcb);
+
+	dcb.BaudRate = CBR_1200;
+	dcb.ByteSize = 7;
+	dcb.Parity = NOPARITY;
+	dcb.StopBits = ONESTOPBIT;
+
+	dcb.fDtrControl = DTR_CONTROL_ENABLE;
+	dcb.fRtsControl = RTS_CONTROL_ENABLE;
+
+	dcb.fBinary = TRUE;
+	dcb.fParity = TRUE;
+
+	SetCommState(mouse2filehandle, &dcb);
+	I_AddExitFunc(I_ShutdownMouse2);
+#endif
+}
+
+//
+// I_Tactile
+//
+void I_Tactile(FFType pFFType, const JoyFF_t *FFEffect)
+{
+	// UNUSED.
+	(void)pFFType;
+	(void)FFEffect;
+}
+
+void I_Tactile2(FFType pFFType, const JoyFF_t *FFEffect)
+{
+	// UNUSED.
+	(void)pFFType;
+	(void)FFEffect;
+}
+
+/**	\brief empty ticcmd for player 1
+*/
+static ticcmd_t emptycmd;
+
+ticcmd_t *I_BaseTiccmd(void)
+{
+	return &emptycmd;
+}
+
+/**	\brief empty ticcmd for player 2
+*/
+static ticcmd_t emptycmd2;
+
+ticcmd_t *I_BaseTiccmd2(void)
+{
+	return &emptycmd2;
+}
+
+#if (defined (_WIN32) && !defined (_WIN32_WCE)) && !defined (_XBOX)
+static HMODULE winmm = NULL;
+static DWORD starttickcount = 0; // hack for win2k time bug
+static p_timeGetTime pfntimeGetTime = NULL;
+
+// ---------
+// I_GetTime
+// Use the High Resolution Timer if available,
+// else use the multimedia timer which has 1 millisecond precision on Windowz 95,
+// but lower precision on Windows NT
+// ---------
+
+tic_t I_GetTime(void)
+{
+	tic_t newtics = 0;
+
+	if (!starttickcount) // high precision timer
+	{
+		LARGE_INTEGER currtime; // use only LowPart if high resolution counter is not available
+		static LARGE_INTEGER basetime = {{0, 0}};
+
+		// use this if High Resolution timer is found
+		static LARGE_INTEGER frequency;
+
+		if (!basetime.LowPart)
+		{
+			if (!QueryPerformanceFrequency(&frequency))
+				frequency.QuadPart = 0;
+			else
+				QueryPerformanceCounter(&basetime);
+		}
+
+		if (frequency.LowPart && QueryPerformanceCounter(&currtime))
+		{
+			newtics = (INT32)((currtime.QuadPart - basetime.QuadPart) * NEWTICRATE
+				/ frequency.QuadPart);
+		}
+		else if (pfntimeGetTime)
+		{
+			currtime.LowPart = pfntimeGetTime();
+			if (!basetime.LowPart)
+				basetime.LowPart = currtime.LowPart;
+			newtics = ((currtime.LowPart - basetime.LowPart)/(1000/NEWTICRATE));
+		}
+	}
+	else
+		newtics = (GetTickCount() - starttickcount)/(1000/NEWTICRATE);
+
+	return newtics;
+}
+
+static void I_ShutdownTimer(void)
+{
+	pfntimeGetTime = NULL;
+	if (winmm)
+	{
+		p_timeEndPeriod pfntimeEndPeriod = (p_timeEndPeriod)GetProcAddress(winmm, "timeEndPeriod");
+		if (pfntimeEndPeriod)
+			pfntimeEndPeriod(1);
+		FreeLibrary(winmm);
+		winmm = NULL;
+	}
+}
+#else
+//
+// I_GetTime
+// returns time in 1/TICRATE second tics
+//
+tic_t I_GetTime (void)
+{
+#ifdef _arch_dreamcast
+	static Uint64 basetime = 0;
+	       Uint64 ticks = timer_ms_gettime64(); //using timer_ms_gettime64 instand of SDL_GetTicks for the Dreamcast
+#else
+	static Uint32 basetime = 0;
+	       Uint32 ticks = SDL_GetTicks();
+#endif
+
+	if (!basetime)
+		basetime = ticks;
+
+	ticks -= basetime;
+
+	ticks = (ticks*TICRATE);
+
+#if 0 //#ifdef _WIN32_WCE
+	ticks = (ticks/10);
+#else
+	ticks = (ticks/1000);
+#endif
+
+	return (tic_t)ticks;
+}
+#endif
+
+//
+//I_StartupTimer
+//
+void I_StartupTimer(void)
+{
+#if (defined (_WIN32) && !defined (_WIN32_WCE)) && !defined (_XBOX)
+	// for win2k time bug
+	if (M_CheckParm("-gettickcount"))
+	{
+		starttickcount = GetTickCount();
+		CONS_Printf("%s", M_GetText("Using GetTickCount()\n"));
+	}
+	winmm = LoadLibraryA("winmm.dll");
+	if (winmm)
+	{
+		p_timeEndPeriod pfntimeBeginPeriod = (p_timeEndPeriod)GetProcAddress(winmm, "timeBeginPeriod");
+		if (pfntimeBeginPeriod)
+			pfntimeBeginPeriod(1);
+		pfntimeGetTime = (p_timeGetTime)GetProcAddress(winmm, "timeGetTime");
+	}
+	I_AddExitFunc(I_ShutdownTimer);
+#elif 0 //#elif !defined (_arch_dreamcast) && !defined(GP2X) // the DC have it own timer and GP2X have broken pthreads?
+	if (SDL_InitSubSystem(SDL_INIT_TIMER) < 0)
+		I_Error("SRB2: Needs SDL_Timer, Error: %s", SDL_GetError());
+#endif
+}
+
+
+
+void I_Sleep(void)
+{
+#if !(defined (_arch_dreamcast) || defined (_XBOX))
+	if (cv_sleep.value != -1)
+		SDL_Delay(cv_sleep.value);
+#endif
+}
+
+INT32 I_StartupSystem(void)
+{
+	SDL_version SDLcompiled;
+	SDL_version *SDLlinked = NULL;
+#ifdef _XBOX
+#ifdef __GNUC__
+	char DP[] ="      Sonic Robo Blast 2!\n";
+	debugPrint(DP);
+#endif
+	unlink("e:/Games/SRB2/stdout.txt");
+	freopen("e:/Games/SRB2/stdout.txt", "w+", stdout);
+	unlink("e:/Games/SRB2/stderr.txt");
+	freopen("e:/Games/SRB2/stderr.txt", "w+", stderr);
+#endif
+#ifdef _arch_dreamcast
+#ifdef _DEBUG
+	//gdb_init();
+#endif
+	printf(__FILE__":%i\n",__LINE__);
+#ifdef _DEBUG
+	//gdb_breakpoint();
+#endif
+#endif
+	SDL_VERSION(&SDLcompiled)
+	SDL_GetVersion(SDLlinked);
+	I_StartupConsole();
+	I_OutputMsg("Compiled for SDL version: %d.%d.%d\n",
+	 SDLcompiled.major, SDLcompiled.minor, SDLcompiled.patch);
+	I_OutputMsg("Linked with SDL version: %d.%d.%d\n",
+	 SDLlinked->major, SDLlinked->minor, SDLlinked->patch);
+#if 0 //#ifdef GP2X //start up everything
+	if (SDL_Init(SDL_INIT_NOPARACHUTE|SDL_INIT_EVERYTHING) < 0)
+#else
+	if (SDL_Init(SDL_INIT_NOPARACHUTE) < 0)
+#endif
+		I_Error("SRB2: SDL System Error: %s", SDL_GetError()); //Alam: Oh no....
+#ifndef NOMUMBLE
+	I_SetupMumble();
+#endif
+	return 0;
+}
+
+
+//
+// I_Quit
+//
+void I_Quit(void)
+{
+	static SDL_bool quiting = SDL_FALSE;
+
+	/* prevent recursive I_Quit() */
+	if (quiting) goto death;
+	SDLforceUngrabMouse();
+	quiting = SDL_FALSE;
+	I_ShutdownConsole();
+	M_SaveConfig(NULL); //save game config, cvars..
+#ifndef NONET
+	D_SaveBan(); // save the ban list
+#endif
+	G_SaveGameData(); // Tails 12-08-2002
+	//added:16-02-98: when recording a demo, should exit using 'q' key,
+	//        but sometimes we forget and use 'F10'.. so save here too.
+	if (demorecording || metalrecording)
+		G_CheckDemoStatus();
+	D_QuitNetGame();
+	I_ShutdownMusic();
+	I_ShutdownSound();
+	I_ShutdownCD();
+	// use this for 1.28 19990220 by Kin
+	I_ShutdownGraphics();
+	I_ShutdownInput();
+	I_ShutdownSystem();
+#ifndef _arch_dreamcast
+	SDL_Quit();
+#endif
+	/* if option -noendtxt is set, don't print the text */
+	if (!M_CheckParm("-noendtxt") && W_CheckNumForName("ENDOOM") != LUMPERROR)
+	{
+		printf("\r");
+		ShowEndTxt();
+	}
+death:
+	W_Shutdown();
+#ifdef GP2X
+	chdir("/usr/gp2x");
+	execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);
+#endif
+	exit(0);
+}
+
+void I_WaitVBL(INT32 count)
+{
+	count = 1;
+	SDL_Delay(count);
+}
+
+void I_BeginRead(void)
+{
+}
+
+void I_EndRead(void)
+{
+}
+
+//
+// I_Error
+//
+/**	\brief phuck recursive errors
+*/
+static INT32 errorcount = 0;
+
+/**	\brief recursive error detecting
+*/
+static boolean shutdowning = false;
+
+void I_Error(const char *error, ...)
+{
+	va_list argptr;
+#if (defined (MAC_ALERT) || defined (_WIN32) || (defined (_WIN32_WCE) && !defined (__GNUC__))) && !defined (_XBOX)
+	char buffer[8192];
+#endif
+
+	// recursive error detecting
+	if (shutdowning)
+	{
+		errorcount++;
+		if (errorcount == 1)
+			SDLforceUngrabMouse();
+		// try to shutdown each subsystem separately
+		if (errorcount == 2)
+			I_ShutdownMusic();
+		if (errorcount == 3)
+			I_ShutdownSound();
+		if (errorcount == 4)
+			I_ShutdownCD();
+		if (errorcount == 5)
+			I_ShutdownGraphics();
+		if (errorcount == 6)
+			I_ShutdownInput();
+		if (errorcount == 7)
+			I_ShutdownSystem();
+#ifndef _arch_dreamcast
+		if (errorcount == 8)
+			SDL_Quit();
+#endif
+		if (errorcount == 9)
+		{
+			M_SaveConfig(NULL);
+			G_SaveGameData();
+		}
+		if (errorcount > 20)
+		{
+#ifdef MAC_ALERT
+			va_start(argptr, error);
+			vsprintf(buffer, error, argptr);
+			va_end(argptr);
+			// 2004-03-03 AJR Since the Mac user is most likely double clicking to run the game, give them a panel.
+			MacShowAlert("Recursive Error", buffer, "Quit", NULL, NULL);
+#elif (defined (_WIN32) || (defined (_WIN32_WCE)) && !defined (__GNUC__)) && !defined (_XBOX)
+			va_start(argptr,error);
+			vsprintf(buffer, error, argptr);
+			va_end(argptr);
+#ifndef _WIN32_WCE
+			{
+				HANDLE co = GetStdHandle(STD_OUTPUT_HANDLE);
+				DWORD bytesWritten;
+				if (co != INVALID_HANDLE_VALUE)
+				{
+					if (GetFileType(co) == FILE_TYPE_CHAR && GetConsoleMode(co, &bytesWritten))
+						WriteConsoleA(co, buffer, (DWORD)strlen(buffer), NULL, NULL);
+					else
+						WriteFile(co, buffer, (DWORD)strlen(buffer), &bytesWritten, NULL);
+				}
+			}
+#endif
+			OutputDebugStringA(buffer);
+			MessageBoxA(vid.WndParent, buffer, "SRB2 Recursive Error", MB_OK|MB_ICONERROR);
+#else
+			// Don't print garbage
+			va_start(argptr, error);
+			if (!framebuffer)
+				vfprintf (stderr, error, argptr);
+			va_end(argptr);
+#endif
+			W_Shutdown();
+#ifdef GP2X
+			chdir("/usr/gp2x");
+			execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);
+#endif
+			exit(-1); // recursive errors detected
+		}
+	}
+	shutdowning = true;
+	I_ShutdownConsole();
+#ifndef MAC_ALERT
+	// Message first.
+	va_start(argptr,error);
+	if (!framebuffer)
+	{
+		fprintf(stderr, "Error: ");
+		vfprintf(stderr,error,argptr);
+		fprintf(stderr, "\n");
+	}
+	va_end(argptr);
+
+	if (!framebuffer)
+		fflush(stderr);
+#endif
+	M_SaveConfig(NULL); // save game config, cvars..
+#ifndef NONET
+	D_SaveBan(); // save the ban list
+#endif
+	G_SaveGameData(); // Tails 12-08-2002
+
+	// Shutdown. Here might be other errors.
+	if (demorecording || metalrecording)
+		G_CheckDemoStatus();
+
+	D_QuitNetGame();
+	I_ShutdownMusic();
+	I_ShutdownSound();
+	I_ShutdownCD();
+	// use this for 1.28 19990220 by Kin
+	I_ShutdownGraphics();
+	I_ShutdownInput();
+	I_ShutdownSystem();
+#ifndef _arch_dreamcast
+	SDL_Quit();
+#endif
+#ifdef MAC_ALERT
+	va_start(argptr, error);
+	vsprintf(buffer, error, argptr);
+	va_end(argptr);
+	// 2004-03-03 AJR Since the Mac user is most likely double clicking to run the game, give them a panel.
+	MacShowAlert("Critical Error", buffer, "Quit", NULL, NULL);
+#endif
+	W_Shutdown();
+#if defined (PARANOIA) && defined (__CYGWIN__)
+		*(INT32 *)2 = 4; //Alam: Debug!
+#endif
+#ifdef GP2X
+	chdir("/usr/gp2x");
+	execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);
+#endif
+	exit(-1);
+}
+
+/**	\brief quit function table
+*/
+static quitfuncptr quit_funcs[MAX_QUIT_FUNCS]; /* initialized to all bits 0 */
+
+//
+//  Adds a function to the list that need to be called by I_SystemShutdown().
+//
+void I_AddExitFunc(void (*func)())
+{
+	INT32 c;
+
+	for (c = 0; c < MAX_QUIT_FUNCS; c++)
+	{
+		if (!quit_funcs[c])
+		{
+			quit_funcs[c] = func;
+			break;
+		}
+	}
+}
+
+
+//
+//  Removes a function from the list that need to be called by
+//   I_SystemShutdown().
+//
+void I_RemoveExitFunc(void (*func)())
+{
+	INT32 c;
+
+	for (c = 0; c < MAX_QUIT_FUNCS; c++)
+	{
+		if (quit_funcs[c] == func)
+		{
+			while (c < MAX_QUIT_FUNCS-1)
+			{
+				quit_funcs[c] = quit_funcs[c+1];
+				c++;
+			}
+			quit_funcs[MAX_QUIT_FUNCS-1] = NULL;
+			break;
+		}
+	}
+}
+
+//
+//  Closes down everything. This includes restoring the initial
+//  palette and video mode, and removing whatever mouse, keyboard, and
+//  timer routines have been installed.
+//
+//  NOTE: Shutdown user funcs are effectively called in reverse order.
+//
+void I_ShutdownSystem(void)
+{
+	INT32 c;
+
+	for (c = MAX_QUIT_FUNCS-1; c >= 0; c--)
+		if (quit_funcs[c])
+			(*quit_funcs[c])();
+#ifdef  LOGMESSAGES
+	if (logstream)
+	{
+		fclose(logstream);
+		logstream = NULL;
+	}
+#endif
+
+}
+
+void I_GetDiskFreeSpace(INT64 *freespace)
+{
+#if defined (_arch_dreamcast) || defined (_PSP)
+	*freespace = 0;
+#elif defined (__unix__) || defined(__APPLE__) || defined (UNIXCOMMON)
+#if defined (SOLARIS) || defined (__HAIKU__) || defined (_WII) || defined (_PS3)
+	*freespace = INT32_MAX;
+	return;
+#else // Both Linux and BSD have this, apparently.
+	struct statfs stfs;
+	if (statfs(".", &stfs) == -1)
+	{
+		*freespace = INT32_MAX;
+		return;
+	}
+	*freespace = stfs.f_bavail * stfs.f_bsize;
+#endif
+#elif (defined (_WIN32) && !defined (_WIN32_WCE)) && !defined (_XBOX)
+	static p_GetDiskFreeSpaceExA pfnGetDiskFreeSpaceEx = NULL;
+	static boolean testwin95 = false;
+	ULARGE_INTEGER usedbytes, lfreespace;
+
+	if (!testwin95)
+	{
+		pfnGetDiskFreeSpaceEx = (p_GetDiskFreeSpaceExA)GetProcAddress(GetModuleHandleA("kernel32.dll"), "GetDiskFreeSpaceExA");
+		testwin95 = true;
+	}
+	if (pfnGetDiskFreeSpaceEx)
+	{
+		if (pfnGetDiskFreeSpaceEx(NULL, &lfreespace, &usedbytes, NULL))
+			*freespace = lfreespace.QuadPart;
+		else
+			*freespace = INT32_MAX;
+	}
+	else
+	{
+		DWORD SectorsPerCluster, BytesPerSector, NumberOfFreeClusters, TotalNumberOfClusters;
+		GetDiskFreeSpace(NULL, &SectorsPerCluster, &BytesPerSector,
+		                 &NumberOfFreeClusters, &TotalNumberOfClusters);
+		*freespace = BytesPerSector*SectorsPerCluster*NumberOfFreeClusters;
+	}
+#else // Dummy for platform independent; 1GB should be enough
+	*freespace = 1024*1024*1024;
+#endif
+}
+
+char *I_GetUserName(void)
+{
+#ifdef GP2X
+	static char username[MAXPLAYERNAME] = "GP2XUSER";
+	return username;
+#elif defined (PSP)
+	static char username[MAXPLAYERNAME] = "PSPUSER";
+	return username;
+#elif !(defined (_WIN32_WCE) || defined (_XBOX))
+	static char username[MAXPLAYERNAME];
+	char *p;
+#ifdef _WIN32
+	DWORD i = MAXPLAYERNAME;
+
+	if (!GetUserNameA(username, &i))
+#endif
+	{
+		p = I_GetEnv("USER");
+		if (!p)
+		{
+			p = I_GetEnv("user");
+			if (!p)
+			{
+				p = I_GetEnv("USERNAME");
+				if (!p)
+				{
+					p = I_GetEnv("username");
+					if (!p)
+					{
+						return NULL;
+					}
+				}
+			}
+		}
+		strncpy(username, p, MAXPLAYERNAME);
+	}
+
+
+	if (strcmp(username, "") != 0)
+		return username;
+#endif
+	return NULL; // dummy for platform independent version
+}
+
+INT32 I_mkdir(const char *dirname, INT32 unixright)
+{
+//[segabor]
+#if defined (__unix__) || defined(__APPLE__) || defined (UNIXCOMMON) || defined (__CYGWIN__) || defined (__OS2__)
+	return mkdir(dirname, unixright);
+#elif (defined (_WIN32) || (defined (_WIN32_WCE) && !defined (__GNUC__))) && !defined (_XBOX)
+	UNREFERENCED_PARAMETER(unixright); /// \todo should implement ntright under nt...
+	return CreateDirectoryA(dirname, NULL);
+#else
+	(void)dirname;
+	(void)unixright;
+	return false;
+#endif
+}
+
+char *I_GetEnv(const char *name)
+{
+#ifdef NEED_SDL_GETENV
+	return SDL_getenv(name);
+#elif defined(_WIN32_WCE)
+	(void)name;
+	return NULL;
+#else
+	return getenv(name);
+#endif
+}
+
+INT32 I_PutEnv(char *variable)
+{
+#ifdef NEED_SDL_GETENV
+	return SDL_putenv(variable);
+#elif defined(_WIN32_WCE)
+	return ((variable)?-1:0);
+#else
+	return putenv(variable);
+#endif
+}
+
+/**	\brief	The isWadPathOk function
+
+	\param	path	string path to check
+
+	\return if true, wad file found
+
+
+*/
+static boolean isWadPathOk(const char *path)
+{
+	char *wad3path = malloc(256);
+
+	if (!wad3path)
+		return false;
+
+	sprintf(wad3path, pandf, path, WADKEYWORD1);
+
+	if (FIL_ReadFileOK(wad3path))
+	{
+		free(wad3path);
+		return true;
+	}
+
+	sprintf(wad3path, pandf, path, WADKEYWORD2);
+
+	if (FIL_ReadFileOK(wad3path))
+	{
+		free(wad3path);
+		return true;
+	}
+
+	free(wad3path);
+	return false;
+}
+
+static void pathonly(char *s)
+{
+	size_t j;
+
+	for (j = strlen(s); j != (size_t)-1; j--)
+		if ((s[j] == '\\') || (s[j] == ':') || (s[j] == '/'))
+		{
+			if (s[j] == ':') s[j+1] = 0;
+			else s[j] = 0;
+			return;
+		}
+}
+
+/**	\brief	search for srb2.srb in the given path
+
+	\param	searchDir	starting path
+
+	\return	WAD path if not NULL
+
+
+*/
+static const char *searchWad(const char *searchDir)
+{
+	static char tempsw[256] = "";
+	filestatus_t fstemp;
+
+	strcpy(tempsw, WADKEYWORD1);
+	fstemp = filesearch(tempsw,searchDir,NULL,true,20);
+	if (fstemp == FS_FOUND)
+	{
+		pathonly(tempsw);
+		return tempsw;
+	}
+
+	strcpy(tempsw, WADKEYWORD2);
+	fstemp = filesearch(tempsw, searchDir, NULL, true, 20);
+	if (fstemp == FS_FOUND)
+	{
+		pathonly(tempsw);
+		return tempsw;
+	}
+	return NULL;
+}
+
+/**	\brief go through all possible paths and look for srb2.srb
+
+  \return path to srb2.srb if any
+*/
+static const char *locateWad(void)
+{
+	const char *envstr;
+	const char *WadPath;
+
+	I_OutputMsg("SRB2WADDIR");
+	// does SRB2WADDIR exist?
+	if (((envstr = I_GetEnv("SRB2WADDIR")) != NULL) && isWadPathOk(envstr))
+		return envstr;
+
+#if defined(_WIN32_WCE) || defined(_PS3) || defined(_PSP)
+	// examine argv[0]
+	strcpy(returnWadPath, myargv[0]);
+	pathonly(returnWadPath);
+	I_PutEnv(va("HOME=%s",returnWadPath));
+	if (isWadPathOk(returnWadPath))
+		return returnWadPath;
+#endif
+
+#ifndef NOCWD
+	I_OutputMsg(",.");
+	// examine current dir
+	strcpy(returnWadPath, ".");
+	if (isWadPathOk(returnWadPath))
+		return NULL;
+#endif
+
+	// examine default dirs
+#ifdef DEFAULTWADLOCATION1
+	I_OutputMsg(","DEFAULTWADLOCATION1);
+	strcpy(returnWadPath, DEFAULTWADLOCATION1);
+	if (isWadPathOk(returnWadPath))
+		return returnWadPath;
+#endif
+#ifdef DEFAULTWADLOCATION2
+	I_OutputMsg(","DEFAULTWADLOCATION2);
+	strcpy(returnWadPath, DEFAULTWADLOCATION2);
+	if (isWadPathOk(returnWadPath))
+		return returnWadPath;
+#endif
+#ifdef DEFAULTWADLOCATION3
+	I_OutputMsg(","DEFAULTWADLOCATION3);
+	strcpy(returnWadPath, DEFAULTWADLOCATION3);
+	if (isWadPathOk(returnWadPath))
+		return returnWadPath;
+#endif
+#ifdef DEFAULTWADLOCATION4
+	I_OutputMsg(","DEFAULTWADLOCATION4);
+	strcpy(returnWadPath, DEFAULTWADLOCATION4);
+	if (isWadPathOk(returnWadPath))
+		return returnWadPath;
+#endif
+#ifdef DEFAULTWADLOCATION5
+	I_OutputMsg(","DEFAULTWADLOCATION5);
+	strcpy(returnWadPath, DEFAULTWADLOCATION5);
+	if (isWadPathOk(returnWadPath))
+		return returnWadPath;
+#endif
+#ifdef DEFAULTWADLOCATION6
+	I_OutputMsg(","DEFAULTWADLOCATION6);
+	strcpy(returnWadPath, DEFAULTWADLOCATION6);
+	if (isWadPathOk(returnWadPath))
+		return returnWadPath;
+#endif
+#ifdef DEFAULTWADLOCATION7
+	I_OutputMsg(","DEFAULTWADLOCATION7);
+	strcpy(returnWadPath, DEFAULTWADLOCATION7);
+	if (isWadPathOk(returnWadPath))
+		return returnWadPath;
+#endif
+#ifndef NOHOME
+	// find in $HOME
+	I_OutputMsg(",HOME");
+	if ((envstr = I_GetEnv("HOME")) != NULL)
+	{
+		WadPath = searchWad(envstr);
+		if (WadPath)
+			return WadPath;
+	}
+#endif
+#ifdef DEFAULTSEARCHPATH1
+	// find in /usr/local
+	I_OutputMsg(", in:"DEFAULTSEARCHPATH1);
+	WadPath = searchWad(DEFAULTSEARCHPATH1);
+	if (WadPath)
+		return WadPath;
+#endif
+#ifdef DEFAULTSEARCHPATH2
+	// find in /usr/games
+	I_OutputMsg(", in:"DEFAULTSEARCHPATH2);
+	WadPath = searchWad(DEFAULTSEARCHPATH2);
+	if (WadPath)
+		return WadPath;
+#endif
+#ifdef DEFAULTSEARCHPATH3
+	// find in ???
+	I_OutputMsg(", in:"DEFAULTSEARCHPATH3);
+	WadPath = searchWad(DEFAULTSEARCHPATH3);
+	if (WadPath)
+		return WadPath;
+#endif
+	// if nothing was found
+	return NULL;
+}
+
+const char *I_LocateWad(void)
+{
+	const char *waddir;
+
+	I_OutputMsg("Looking for WADs in: ");
+	waddir = locateWad();
+	I_OutputMsg("\n");
+
+	if (waddir)
+	{
+		// change to the directory where we found srb2.srb
+#if (defined (_WIN32) && !defined (_WIN32_WCE)) && !defined (_XBOX)
+		SetCurrentDirectoryA(waddir);
+#elif !defined (_WIN32_WCE) && !defined (_PS3)
+		if (chdir(waddir) == -1)
+			I_OutputMsg("Couldn't change working directory\n");
+#endif
+	}
+	return waddir;
+}
+
+#ifdef LINUX
+#define MEMINFO_FILE "/proc/meminfo"
+#define MEMTOTAL "MemTotal:"
+#define MEMFREE "MemFree:"
+#endif
+
+// quick fix for compil
+UINT32 I_GetFreeMem(UINT32 *total)
+{
+#if defined (_arch_dreamcast)
+	//Dreamcast!
+	if (total)
+		*total = 16<<20;
+	return 8<<20;
+#elif defined (_PSP)
+	// PSP
+	if (total)
+		*total = 32<<20;
+	return 16<<20;
+#elif defined (FREEBSD)
+	struct vmmeter sum;
+	kvm_t *kd;
+	struct nlist namelist[] =
+	{
+#define X_SUM   0
+		{"_cnt"},
+		{NULL}
+	};
+	if ((kd = kvm_open(NULL, NULL, NULL, O_RDONLY, "kvm_open")) == NULL)
+	{
+		*total = 0L;
+		return 0;
+	}
+	if (kvm_nlist(kd, namelist) != 0)
+	{
+		kvm_close (kd);
+		*total = 0L;
+		return 0;
+	}
+	if (kvm_read(kd, namelist[X_SUM].n_value, &sum,
+		sizeof (sum)) != sizeof (sum))
+	{
+		kvm_close(kd);
+		*total = 0L;
+		return 0;
+	}
+	kvm_close(kd);
+
+	if (total)
+		*total = sum.v_page_count * sum.v_page_size;
+	return sum.v_free_count * sum.v_page_size;
+#elif defined (SOLARIS)
+	/* Just guess */
+	if (total)
+		*total = 32 << 20;
+	return 32 << 20;
+#elif defined (LINUX)
+	/* Linux */
+	char buf[1024];
+	char *memTag;
+	UINT32 freeKBytes;
+	UINT32 totalKBytes;
+	INT32 n;
+	INT32 meminfo_fd = -1;
+
+	meminfo_fd = open(MEMINFO_FILE, O_RDONLY);
+	n = read(meminfo_fd, buf, 1023);
+	close(meminfo_fd);
+
+	if (n < 0)
+	{
+		// Error
+		*total = 0L;
+		return 0;
+	}
+
+	buf[n] = '\0';
+	if (NULL == (memTag = strstr(buf, MEMTOTAL)))
+	{
+		// Error
+		*total = 0L;
+		return 0;
+	}
+
+	memTag += sizeof (MEMTOTAL);
+	totalKBytes = atoi(memTag);
+
+	if (NULL == (memTag = strstr(buf, MEMFREE)))
+	{
+		// Error
+		*total = 0L;
+		return 0;
+	}
+
+	memTag += sizeof (MEMFREE);
+	freeKBytes = atoi(memTag);
+
+	if (total)
+		*total = totalKBytes << 10;
+	return freeKBytes << 10;
+#elif (defined (_WIN32) || (defined (_WIN32_WCE) && !defined (__GNUC__))) && !defined (_XBOX)
+	MEMORYSTATUS info;
+
+	info.dwLength = sizeof (MEMORYSTATUS);
+	GlobalMemoryStatus( &info );
+	if (total)
+		*total = (UINT32)info.dwTotalPhys;
+	return (UINT32)info.dwAvailPhys;
+#elif defined (__OS2__)
+	UINT32 pr_arena;
+
+	if (total)
+		DosQuerySysInfo( QSV_TOTPHYSMEM, QSV_TOTPHYSMEM,
+							(PVOID) total, sizeof (UINT32));
+	DosQuerySysInfo( QSV_MAXPRMEM, QSV_MAXPRMEM,
+				(PVOID) &pr_arena, sizeof (UINT32));
+
+	return pr_arena;
+#else
+	// Guess 48 MB.
+	if (total)
+		*total = 48<<20;
+	return 48<<20;
+#endif /* LINUX */
+}
+
+const CPUInfoFlags *I_CPUInfo(void)
+{
+#if (defined (_WIN32) && !defined (_WIN32_WCE)) && !defined (_XBOX)
+	static CPUInfoFlags WIN_CPUInfo;
+	SYSTEM_INFO SI;
+	p_IsProcessorFeaturePresent pfnCPUID = (p_IsProcessorFeaturePresent)GetProcAddress(GetModuleHandleA("kernel32.dll"), "IsProcessorFeaturePresent");
+
+	ZeroMemory(&WIN_CPUInfo,sizeof (WIN_CPUInfo));
+	if (pfnCPUID)
+	{
+		WIN_CPUInfo.FPPE       = pfnCPUID( 0); //PF_FLOATING_POINT_PRECISION_ERRATA
+		WIN_CPUInfo.FPE        = pfnCPUID( 1); //PF_FLOATING_POINT_EMULATED
+		WIN_CPUInfo.cmpxchg    = pfnCPUID( 2); //PF_COMPARE_EXCHANGE_DOUBLE
+		WIN_CPUInfo.MMX        = pfnCPUID( 3); //PF_MMX_INSTRUCTIONS_AVAILABLE
+		WIN_CPUInfo.PPCMM64    = pfnCPUID( 4); //PF_PPC_MOVEMEM_64BIT_OK
+		WIN_CPUInfo.ALPHAbyte  = pfnCPUID( 5); //PF_ALPHA_BYTE_INSTRUCTIONS
+		WIN_CPUInfo.SSE        = pfnCPUID( 6); //PF_XMMI_INSTRUCTIONS_AVAILABLE
+		WIN_CPUInfo.AMD3DNow   = pfnCPUID( 7); //PF_3DNOW_INSTRUCTIONS_AVAILABLE
+		WIN_CPUInfo.RDTSC      = pfnCPUID( 8); //PF_RDTSC_INSTRUCTION_AVAILABLE
+		WIN_CPUInfo.PAE        = pfnCPUID( 9); //PF_PAE_ENABLED
+		WIN_CPUInfo.SSE2       = pfnCPUID(10); //PF_XMMI64_INSTRUCTIONS_AVAILABLE
+		//WIN_CPUInfo.blank    = pfnCPUID(11); //PF_SSE_DAZ_MODE_AVAILABLE
+		WIN_CPUInfo.DEP        = pfnCPUID(12); //PF_NX_ENABLED
+		WIN_CPUInfo.SSE3       = pfnCPUID(13); //PF_SSE3_INSTRUCTIONS_AVAILABLE
+		WIN_CPUInfo.cmpxchg16b = pfnCPUID(14); //PF_COMPARE_EXCHANGE128
+		WIN_CPUInfo.cmp8xchg16 = pfnCPUID(15); //PF_COMPARE64_EXCHANGE128
+		WIN_CPUInfo.PFC        = pfnCPUID(16); //PF_CHANNELS_ENABLED
+	}
+#ifdef HAVE_SDLCPUINFO
+	else
+	{
+		WIN_CPUInfo.RDTSC       = SDL_HasRDTSC();
+		WIN_CPUInfo.MMX         = SDL_HasMMX();
+		WIN_CPUInfo.AMD3DNow    = SDL_Has3DNow();
+		WIN_CPUInfo.SSE         = SDL_HasSSE();
+		WIN_CPUInfo.SSE2        = SDL_HasSSE2();
+		WIN_CPUInfo.AltiVec     = SDL_HasAltiVec();
+	}
+	WIN_CPUInfo.MMXExt      = SDL_HasMMXExt();
+	WIN_CPUInfo.AMD3DNowExt = SDL_Has3DNowExt();
+#endif
+	GetSystemInfo(&SI);
+	WIN_CPUInfo.CPUs = SI.dwNumberOfProcessors;
+	WIN_CPUInfo.IA64 = (SI.dwProcessorType == 2200); // PROCESSOR_INTEL_IA64
+	WIN_CPUInfo.AMD64 = (SI.dwProcessorType == 8664); // PROCESSOR_AMD_X8664
+	return &WIN_CPUInfo;
+#elif defined (HAVE_SDLCPUINFO)
+	static CPUInfoFlags SDL_CPUInfo;
+	memset(&SDL_CPUInfo,0,sizeof (CPUInfoFlags));
+	SDL_CPUInfo.RDTSC       = SDL_HasRDTSC();
+	SDL_CPUInfo.MMX         = SDL_HasMMX();
+	SDL_CPUInfo.MMXExt      = SDL_FALSE; //SDL_HasMMXExt(); No longer in SDL2
+	SDL_CPUInfo.AMD3DNow    = SDL_Has3DNow();
+	SDL_CPUInfo.AMD3DNowExt = SDL_FALSE; //SDL_Has3DNowExt(); No longer in SDL2
+	SDL_CPUInfo.SSE         = SDL_HasSSE();
+	SDL_CPUInfo.SSE2        = SDL_HasSSE2();
+	SDL_CPUInfo.AltiVec     = SDL_HasAltiVec();
+	return &SDL_CPUInfo;
+#else
+	return NULL; /// \todo CPUID asm
+#endif
+}
+
+#if (defined (_WIN32) && !defined (_WIN32_WCE)) && !defined (_XBOX)
+static void CPUAffinity_OnChange(void);
+static consvar_t cv_cpuaffinity = {"cpuaffinity", "-1", CV_SAVE | CV_CALL, NULL, CPUAffinity_OnChange, 0, NULL, NULL, 0, 0, NULL};
+
+static p_GetCurrentProcess pfnGetCurrentProcess = NULL;
+static p_GetProcessAffinityMask pfnGetProcessAffinityMask = NULL;
+static p_SetProcessAffinityMask pfnSetProcessAffinityMask = NULL;
+
+static inline VOID GetAffinityFuncs(VOID)
+{
+	HMODULE h = GetModuleHandleA("kernel32.dll");
+	pfnGetCurrentProcess = (p_GetCurrentProcess)GetProcAddress(h, "GetCurrentProcess");
+	pfnGetProcessAffinityMask = (p_GetProcessAffinityMask)GetProcAddress(h, "GetProcessAffinityMask");
+	pfnSetProcessAffinityMask = (p_SetProcessAffinityMask)GetProcAddress(h, "SetProcessAffinityMask");
+}
+
+static void CPUAffinity_OnChange(void)
+{
+	DWORD_PTR dwProcMask, dwSysMask;
+	HANDLE selfpid;
+
+	if (!pfnGetCurrentProcess || !pfnGetProcessAffinityMask || !pfnSetProcessAffinityMask)
+		return;
+	else
+		selfpid = pfnGetCurrentProcess();
+
+	pfnGetProcessAffinityMask(selfpid, &dwProcMask, &dwSysMask);
+
+	/* If resulting mask is zero, don't change anything and fall back to
+	 * actual mask.
+	 */
+	if(dwSysMask & cv_cpuaffinity.value)
+	{
+		pfnSetProcessAffinityMask(selfpid, dwSysMask & cv_cpuaffinity.value);
+		CV_StealthSetValue(&cv_cpuaffinity, (INT32)(dwSysMask & cv_cpuaffinity.value));
+	}
+	else
+		CV_StealthSetValue(&cv_cpuaffinity, (INT32)dwProcMask);
+}
+#endif
+
+void I_RegisterSysCommands(void)
+{
+#if (defined (_WIN32) && !defined (_WIN32_WCE)) && !defined (_XBOX)
+	GetAffinityFuncs();
+	CV_RegisterVar(&cv_cpuaffinity);
+#endif
+}
+#endif
diff --git a/src/sdl2/i_ttf.c b/src/sdl2/i_ttf.c
new file mode 100644
index 000000000..770a81d98
--- /dev/null
+++ b/src/sdl2/i_ttf.c
@@ -0,0 +1,340 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 2011 by Callum Dickinson.
+//
+// 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.
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief SDL_ttf interface code. Necessary for platforms with no framebuffer console systems.
+
+#if defined(SDL) && defined(HAVE_TTF)
+#include "SDL.h"
+#include "SDL_ttf.h"
+#include "../doomdef.h"
+#include "../doomstat.h"
+#include "../d_netfil.h"
+#include "../filesrch.h"
+#include "i_ttf.h"
+
+// Search directories to find aforementioned TTF file.
+#ifdef _PS3
+#include <sysutil/video.h>
+#define FONTSEARCHPATH1 "/dev_hdd0/game/SRB2-PS3_/USRDIR/etc"
+#elif defined (__unix__) || defined(__APPLE__) || defined (UNIXCOMMON)
+#define FONTSEARCHPATH1 "/usr/share/fonts"
+#define FONTSEARCHPATH2 "/usr/local/share/fonts"
+#define FONTSEARCHPATH3 "/usr/games/SRB2"
+#define FONTSEARCHPATH4 "/usr/local/games/SRB2"
+#define FONTSEARCHPATH5 "/usr/local/share/games/SRB2"
+#else
+#define FONTSEARCHPATH1 "."
+#endif
+
+#define FONTHANDLE -1
+
+// Renduring surfaces.
+SDL_Surface *TTFSurface = NULL;
+SDL_Surface *TTFRendSurface = NULL;
+// Text box.
+SDL_Rect TTFRect;
+// Temporary storage for the new TTFRect, used to check for
+// line wrapping.
+SDL_Rect TTFRectCheck;
+// Text rendering resolution.
+videoResolution res;
+// Text storage buffer, the contents get printed to the SDL surface.
+char textbuffer[8192];
+
+// look for default ttf file in given directory
+static char *searchFont(const char *fontsearchDir)
+{
+	static char tempsw[256] = "";
+	filestatus_t fstemp;
+
+	strcpy(tempsw, FONTFILE);
+	fstemp = filesearch(tempsw, fontsearchDir, NULL, true, 20);
+	if (fstemp == FS_FOUND)
+	{
+		return tempsw;
+	}
+	return NULL;
+}
+
+// Load TTF font from file.
+INT32 I_TTFLoadFont(const char *file, UINT32 ptsize)
+{
+	TTF_Font *tmpfont = NULL;
+	float fontsize;
+
+	// If a font is currently loaded, unload it.
+	if (currentfont)
+	{
+		TTF_CloseFont(currentfont);
+	}
+
+	// Scale the specified font point size for the current resolution.
+	fontsize = (ptsize * 0.005f) * (res.width - res.height);
+
+	tmpfont = TTF_OpenFont(file, fontsize);
+
+	if (!tmpfont)
+		return FONTHANDLE;
+
+	// set pointer for current font
+	currentfont = tmpfont;
+
+	// set current font point size
+	currentfontpoint = ptsize;
+
+	// get font properties, and set them
+	currentfontstyle = TTF_GetFontStyle(currentfont);
+	TTF_SetFontStyle(currentfont, currentfontstyle);
+
+	// these functions only exist in SDL_ttf 2.0.10 onwards
+#if SDL_TTF_VERSION_ATLEAST(2,0,10)
+	currentfontkerning = TTF_GetFontKerning(currentfont);
+	TTF_SetFontKerning(currentfont, currentfontkerning);
+
+	currentfonthinting = TTF_GetFontHinting(currentfont);
+	TTF_SetFontHinting(currentfont, currentfonthinting);
+
+	currentfontoutline = TTF_GetFontOutline(currentfont);
+	TTF_SetFontOutline(currentfont, currentfontoutline);
+#endif
+
+	return 0;
+}
+
+static void I_TTFRendSurface(const char *textmsg, TTF_Font *font, TextQuality quality, SDL_Color fontfgcolor, SDL_Color fontbgcolor)
+{
+	// Print text in the buffer.
+	// SDL_ttf has three modes to draw text.
+	// Solid rendering is quick, but dirty. Use it if you need speed more than quality.
+	switch (quality)
+	{
+		case solid:
+			TTFRendSurface = TTF_RenderText_Solid(font, textmsg, fontfgcolor);
+			break;
+		// Shaded rendering adds a background to the rendered text. Because of this, I_TTFDrawText
+		// takes an extra color more than the other styles to be a background color.
+		// Shaded is supposedly as fast as solid rendering and about as good quality as blended.
+		case shaded:
+			TTFRendSurface = TTF_RenderText_Shaded(font, textmsg, fontfgcolor, fontbgcolor);
+			break;
+		// Blended rendering is the opposite of solid. Good quality, but slow.
+		case blended:
+			TTFRendSurface = TTF_RenderText_Blended(font, textmsg, fontfgcolor);
+			break;
+	}
+
+	// Get SDL to update the main surface.
+	SDL_BlitSurface(TTFRendSurface, NULL, TTFSurface, &TTFRect);
+	SDL_Flip(TTFSurface);
+}
+
+// Draw text to screen. It will accept four colour vales (red, green, blue and alpha)
+// with foreground for draw modes Solid and Blended, and an extra four values for background
+// colour with draw type Shaded.
+void I_TTFDrawText(TTF_Font *font, TextQuality quality, INT32 fgR, INT32 fgG, INT32 fgB, INT32 fgA, INT32 bgR, INT32 bgG, INT32 bgB, INT32 bgA, const char *textmsg)
+{
+	// Temporary small buffer to store character to process.
+	// NULL pointer to prevc to kill warning
+	char c, prevc = 0x0;
+	// hack to allow TTF_SizeText to work properly.
+	char linebuffer[2];
+	// Don't need h, but TTF_SizeText needs a height parameter
+	INT32 w, h;
+
+	// Globally declare foreground and background text colours,
+	// text drawing mode and the font to draw.
+	SDL_Color fontfgcolor = {fgR, fgG, fgB, fgA};
+	SDL_Color fontbgcolor = {bgR, bgG, bgB, bgA};
+
+	// Keep on processing until the null terminator in the text buffer is reached.
+	while (*textmsg != '\0')
+	{
+		// Copy pointer for current character into the temporary buffer.
+		c = *textmsg;
+		// If c is a newline, move to the next available line.
+		if (c == '\n')
+		{
+			TTFRectCheck.x = 0;
+			TTFRectCheck.y += (currentfontpoint + 1);
+		}
+		// Otherwise...
+		else
+		{
+			// If the previous character was a newline, actually move to the next line.
+			if (prevc == '\n')
+			{
+				if (textbuffer != NULL)
+				{
+					// Render cached text to the SDL surface.
+					I_TTFRendSurface(textbuffer, font, quality, fontfgcolor, fontbgcolor);
+					// Empty text buffer.
+					memset(textbuffer, '\0', 1);
+				}
+				TTFRect.x = TTFRectCheck.x;
+				TTFRect.y = TTFRectCheck.y;
+			}
+			// Copy the character to the text buffer.
+			sprintf(textbuffer, "%s%c", textbuffer, c);
+			// Hack to allow TTF_SizeText to work properly.
+			sprintf(linebuffer, "%c", c);
+			// If we have reached the end of the screen, move to the next available line.
+			TTF_SizeText(currentfont, linebuffer, &w, &h);
+			TTFRectCheck.x += w;
+			if (TTFRectCheck.x >= res.width)
+			{
+				// Render cached text to the SDL surface.
+				I_TTFRendSurface(textbuffer, font, quality, fontfgcolor, fontbgcolor);
+				// Empty text buffer.
+				memset(textbuffer, '\0', 1);
+				// Move to the next line.
+				TTFRectCheck.x = 0;
+				TTFRectCheck.y += (currentfontpoint + 1);
+				// Set stored co-ordinates for next line.
+				TTFRect.x = TTFRectCheck.x;
+				TTFRect.y = TTFRectCheck.y;
+			}
+		}
+		// Add 1 to the pointer reference for the character to process.
+		textmsg++;
+		// Copy contents of the now-old buffer to somewhere else, so it can be referenced in next loop.
+		prevc = c;
+	}
+
+	// If the buffer was previously emptied by a line wrapping operation and
+	// no text came after that, don't print anything. Otherwise, print everything
+	// still in the buffer.
+	if (textbuffer != NULL)
+	{
+		// Render cached text to the SDL surface.
+		I_TTFRendSurface(textbuffer, font, quality, fontfgcolor, fontbgcolor);
+		// Empty text buffer.
+		memset(textbuffer, '\0', 1);
+		// Set stored co-ordinates for next line.
+		TTFRect.x = TTFRectCheck.x;
+		TTFRect.y = TTFRectCheck.y;
+	}
+}
+
+// Initialise SDL_ttf.
+void I_StartupTTF(UINT32 fontpointsize, Uint32 initflags, Uint32 vidmodeflags)
+{
+	char *fontpath = NULL;
+	INT32 fontstatus = -1;
+#ifdef _PS3
+	videoState state;
+	videoGetState(0, 0, &state);
+	videoGetResolution(state.displayMode.resolution, &res);
+	bitsperpixel = 24;
+#else
+	res.width = 320;
+	res.height = 200;
+	bitsperpixel = 8;
+#endif
+
+	// what's the point of trying to display an error?
+	// SDL_ttf is not started, can't display anything to screen (presumably)...
+	if (SDL_InitSubSystem(initflags) < 0)
+		I_Error("Couldn't initialize SDL: %s\n", SDL_GetError());
+
+	TTFSurface = SDL_SetVideoMode(res.width, res.height, bitsperpixel, vidmodeflags);
+	if (!TTFSurface)
+		I_Error("Couldn't set SDL Video resolution: %s\n", SDL_GetError());
+
+	if (TTF_Init() < 0)
+		I_Error("Couldn't start SDL_ttf: %s\n", TTF_GetError());
+
+	// look for default font in many directories
+#ifdef FONTSEARCHPATH1
+	fontpath = searchFont(FONTSEARCHPATH1);
+	if (fontpath) fontstatus = I_TTFLoadFont(fontpath, fontpointsize);
+#endif
+#ifdef FONTSEARCHPATH2
+	if (fontstatus < 0)
+	{
+		fontpath = searchFont(FONTSEARCHPATH2);
+		if (fontpath) fontstatus = I_TTFLoadFont(fontpath, fontpointsize);
+	}
+#endif
+#ifdef FONTSEARCHPATH3
+	if (fontstatus < 0)
+	{
+		fontpath = searchFont(FONTSEARCHPATH3);
+		if (fontpath) fontstatus = I_TTFLoadFont(fontpath, fontpointsize);
+	}
+#endif
+#ifdef FONTSEARCHPATH4
+	if (fontstatus < 0)
+	{
+		fontpath = searchFont(FONTSEARCHPATH4);
+		if (fontpath) fontstatus = I_TTFLoadFont(fontpath, fontpointsize);
+	}
+#endif
+#ifdef FONTSEARCHPATH5
+	if (fontstatus < 0)
+	{
+		fontpath = searchFont(FONTSEARCHPATH5);
+		if (fontpath) fontstatus = I_TTFLoadFont(fontpath, fontpointsize);
+	}
+#endif
+#ifdef FONTSEARCHPATH6
+	if (fontstatus < 0)
+	{
+		fontpath = searchFont(FONTSEARCHPATH6);
+		if (fontpath) fontstatus = I_TTFLoadFont(fontpath, fontpointsize);
+	}
+#endif
+#ifdef FONTSEARCHPATH7
+	if (fontstatus < 0)
+	{
+		fontpath = searchFont(FONTSEARCHPATH7);
+		if (fontpath) fontstatus = I_TTFLoadFont(fontpath, fontpointsize);
+	}
+#endif
+	// argh! no font file found! disable SDL_ttf code
+	if (fontstatus < 0)
+	{
+		I_ShutdownTTF();
+		CONS_Printf("Unable to find default font files! Not loading SDL_ttf\n");
+	}
+	else
+	{
+		// Get SDL_ttf compiled and linked version
+		SDL_version TTFcompiled;
+		const SDL_version *TTFlinked;
+
+		SDL_TTF_VERSION(&TTFcompiled);
+		TTFlinked = TTF_Linked_Version();
+
+		// Display it on screen
+		CONS_Printf("Compiled for SDL_ttf version: %d.%d.%d\n",
+			    TTFcompiled.major, TTFcompiled.minor, TTFcompiled.patch);
+		CONS_Printf("Linked with SDL_ttf version: %d.%d.%d\n",
+			    TTFlinked->major, TTFlinked->minor, TTFlinked->patch);
+	}
+}
+
+void I_ShutdownTTF(void)
+{
+	// close current font
+	TTF_CloseFont(currentfont);
+	// shutdown SDL_ttf
+	TTF_Quit();
+
+	// Free TTF rendering surfaces.
+	SDL_FreeSurface(TTFSurface);
+	SDL_FreeSurface(TTFRendSurface);
+}
+#endif
diff --git a/src/sdl2/i_ttf.h b/src/sdl2/i_ttf.h
new file mode 100644
index 000000000..929c8021c
--- /dev/null
+++ b/src/sdl2/i_ttf.h
@@ -0,0 +1,88 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 2011 by Callum Dickinson.
+//
+// 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.
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief SDL_ttf interface code. Necessary for platforms with SDL inits that need to run immediately.
+
+#ifndef __I_TTF__
+#define __I_TTF__
+
+#include "../doomdef.h"
+#include "SDL_ttf.h"
+
+// Default name for standard TTF file.
+#define FONTFILE "srb2.ttf"
+#define FONTPOINTSIZE 12
+
+// Default font foreground colours
+#define DEFAULTFONTFGR 255
+#define DEFAULTFONTFGG 255
+#define DEFAULTFONTFGB 255
+#define DEFAULTFONTFGA 255
+
+// Default font background colours
+#define DEFAULTFONTBGR 0
+#define DEFAULTFONTBGG 0
+#define DEFAULTFONTBGB 0
+#define DEFAULTFONTBGA 255
+
+#ifndef SDL_TTF_COMPILEDVERSION
+#define SDL_TTF_COMPILEDVERSION \
+	SDL_VERSIONNUM(TTF_MAJOR_VERSION, TTF_MINOR_VERSION, TTF_PATCHLEVEL)
+#endif
+
+#ifndef SDL_TTF_VERSION_ATLEAST
+#define SDL_TTF_VERSION_ATLEAST(X, Y, Z) \
+	(SDL_TTF_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z))
+#endif
+
+TTF_Font* currentfont;
+int currentfontpoint;
+int currentfontstyle;
+#if SDL_TTF_VERSION_ATLEAST(2,0,10)
+int currentfontkerning;
+int currentfonthinting;
+int currentfontoutline;
+#endif
+
+#ifndef _PS3
+typedef struct
+{
+	UINT16 width;
+	UINT16 height;
+} VideoResolution;
+#endif
+UINT8 bitsperpixel;
+
+typedef enum
+{
+	solid,
+	shaded,
+	blended
+} TextQuality;
+
+// Load TTF font from file.
+INT32 I_TTFLoadFont(const char *file, UINT32 ptsize);
+
+// Draw TTF text to screen. It will accept four colour vales (red, green, blue and alpha)
+// with foreground for draw modes Solid and Blended, and an extra four values for background
+// colour with draw type Shaded.
+void I_TTFDrawText(TTF_Font *font, TextQuality quality, INT32 fgR, INT32 fgG, INT32 fgB, INT32 fgA, INT32 bgR, INT32 bgG, INT32 bgB, INT32 bgA, const char *textmsg);
+
+// Initialise SDL_ttf.
+void I_StartupTTF(UINT32 fontpointsize, Uint32 initflags, Uint32 vidmodeflags);
+
+void I_ShutdownTTF(void);
+#endif
diff --git a/src/sdl2/i_video.c b/src/sdl2/i_video.c
new file mode 100644
index 000000000..ce74f537c
--- /dev/null
+++ b/src/sdl2/i_video.c
@@ -0,0 +1,186 @@
+#include "../doomdef.h"
+#include "../command.h"
+#include "../i_video.h"
+#include "../d_clisrv.h"
+
+#include <SDL.h>
+
+typedef struct sdlmode_s
+{
+	Uint16 w;
+	Uint16 h;
+} sdlmode_t;
+
+rendermode_t rendermode = render_soft;
+
+boolean highcolor = true;
+
+boolean allow_fullscreen = true;
+
+consvar_t cv_vidwait = {"vid_wait", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
+
+static SDL_bool graphicsInitialized = SDL_FALSE;
+
+// SDL2 vars
+static SDL_Window     *window;
+static SDL_Renderer   *renderer;
+static Uint16          logicalWidth; // real for windowed
+static Uint16          logicalHeight; // real for windowed
+
+#define SDLI_MAX_MODES 32
+static int numVidModes = 0;
+static sdlmode_t sdlmodes[SDLI_MAX_MODES];
+
+static SDL_bool Impl_CreateWindow()
+{
+	window = SDL_CreateWindow("Sonic Robo Blast 2", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 320, 200, 0);
+	renderer = SDL_CreateRenderer(window, -1, 0);
+	if (window == NULL || renderer == NULL)
+	{
+		return SDL_FALSE;
+	}
+	else
+	{
+		return SDL_TRUE;
+	}
+}
+
+static SDL_bool Impl_DestroyWindow()
+{
+	if (window != NULL)
+	{
+		SDL_DestroyWindow(window);
+	}
+	window = NULL;
+	if (renderer != NULL)
+	{
+		SDL_DestroyRenderer(renderer);
+	}
+	renderer = NULL;
+	return SDL_TRUE;
+}
+
+static SDL_bool Impl_SetMode(Uint16 width, Uint16 height, SDL_bool fullscreen)
+{
+	logicalWidth = width;
+	logicalHeight = height;
+	return SDL_TRUE;
+}
+
+static SDL_bool Impl_AddSDLMode(Uint16 width, Uint16 height)
+{
+	if (numVidModes >= SDLI_MAX_MODES)
+	{
+		return SDL_FALSE;
+	}
+
+	numVidModes += 1;
+	sdlmodes[numVidModes].w = width;
+	sdlmodes[numVidModes].h = height;
+
+	return SDL_TRUE;
+}
+
+void I_StartupGraphics(void)
+{
+	if (graphicsInitialized)
+	{
+		return;
+	}
+
+	if (dedicated)
+	{
+		rendermode = render_none;
+		return;
+	}
+	if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
+	{
+		if (!SDL_WasInit(SDL_INIT_VIDEO))
+		{
+			CONS_Printf(M_GetText("Failed to initialize SDL video: %s\n"), SDL_GetError());
+			return;
+		}
+	}
+
+	// Add 'supported' modes
+#ifdef ANDROID
+	Impl_AddSDLMode(640, 400);
+#else
+	Impl_AddSDLMode(320, 200);
+	Impl_AddSDLMode(640, 400);
+	Impl_AddSDLMode(1280, 800);
+#endif
+
+	if (!Impl_CreateWindow() || !Impl_SetMode(640, 400, SDL_FALSE))
+	{
+		CONS_Printf(M_GetText("SDL: Could not create window and set initial mode: %s\n"), SDL_GetError());
+		return;
+	}
+
+	graphicsInitialized = SDL_TRUE;
+
+	return;
+}
+
+void I_ShutdownGraphics(void)
+{
+	if (!graphicsInitialized)
+	{
+		return;
+	}
+
+	Impl_DestroyWindow();
+	return;
+}
+
+void I_SetPalette(RGBA_t *palette)
+{
+	(void)palette;
+}
+
+INT32 VID_NumModes(void)
+{
+	return 0;
+}
+
+INT32 VID_GetModeForSize(INT32 w, INT32 h)
+{
+	(void)w;
+	(void)h;
+	return 0;
+}
+
+void VID_PrepareModeList(void){}
+
+INT32 VID_SetMode(INT32 modenum)
+{
+	(void)modenum;
+	return 0;
+}
+
+const char *VID_GetModeName(INT32 modenum)
+{
+	(void)modenum;
+	return NULL;
+}
+
+void I_UpdateNoBlit(void){}
+
+void I_FinishUpdate(void){}
+
+void I_UpdateNoVsync(void) {}
+
+void I_WaitVBL(INT32 count)
+{
+	(void)count;
+}
+
+void I_ReadScreen(UINT8 *scr)
+{
+	(void)scr;
+}
+
+void I_BeginRead(void){}
+
+void I_EndRead(void){}
+
diff --git a/src/sdl2/macosx/English.lproj/InfoPlist.strings b/src/sdl2/macosx/English.lproj/InfoPlist.strings
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/sdl2/macosx/Info.plist b/src/sdl2/macosx/Info.plist
new file mode 100644
index 000000000..ae0ce24de
--- /dev/null
+++ b/src/sdl2/macosx/Info.plist
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>${EXECUTABLE_NAME}</string>
+	<key>CFBundleIconFile</key>
+	<string>Srb2mac.icns</string>
+	<key>CFBundleIdentifier</key>
+	<string>com.yourcompany.Srb2mac</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1.0</string>
+	<key>NSMainNibFile</key>
+	<string>SDLMain</string>
+	<key>NSPrincipalClass</key>
+	<string>NSApplication</string>
+</dict>
+</plist>
diff --git a/src/sdl2/macosx/Srb2mac.icns b/src/sdl2/macosx/Srb2mac.icns
new file mode 100644
index 0000000000000000000000000000000000000000..4baedc1c5a091a3917d2a33bc3780da5b1b5e996
GIT binary patch
literal 79787
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
D?5qEO

literal 0
HcmV?d00001

diff --git a/src/sdl2/macosx/Srb2mac.pbproj/project.pbxproj b/src/sdl2/macosx/Srb2mac.pbproj/project.pbxproj
new file mode 100644
index 000000000..de12201f5
--- /dev/null
+++ b/src/sdl2/macosx/Srb2mac.pbproj/project.pbxproj
@@ -0,0 +1,3546 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 38;
+	objects = {
+		6726EB5E10190F860074DCBA = {
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 7;
+			files = (
+				6755C8D0101802C300A80195,
+				6755C8D1101802C300A80195,
+				6755C8D2101802C300A80195,
+				6755C8D3101802C300A80195,
+				6755C8D4101802C300A80195,
+				6755C8D5101802C300A80195,
+				6755C8D6101802C300A80195,
+				6755C8D7101802C300A80195,
+				6755C8D8101802C300A80195,
+			);
+			isa = PBXCopyFilesBuildPhase;
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		6726EB5F10190FFC0074DCBA = {
+			buildActionMask = 2147483647;
+			files = (
+			);
+			generatedFileNames = (
+			);
+			isa = PBXShellScriptBuildPhase;
+			neededFileNames = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "touch -c $SRCROOT/../../comptime.c";
+		};
+		6755C7A91017FE2500A80195 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = lzf.c;
+			path = ../../lzf.c;
+			refType = 2;
+		};
+		6755C7AA1017FE2500A80195 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = lzf.h;
+			path = ../../lzf.h;
+			refType = 2;
+		};
+		6755C7AB1017FE2500A80195 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_dllist.h;
+			path = ../../m_dllist.h;
+			refType = 2;
+		};
+		6755C7AC1017FE2500A80195 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_queue.c;
+			path = ../../m_queue.c;
+			refType = 2;
+		};
+		6755C7AD1017FE2500A80195 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_queue.h;
+			path = ../../m_queue.h;
+			refType = 2;
+		};
+		6755C7AE1017FE2500A80195 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_polyobj.c;
+			path = ../../p_polyobj.c;
+			refType = 2;
+		};
+		6755C7AF1017FE2500A80195 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_polyobj.h;
+			path = ../../p_polyobj.h;
+			refType = 2;
+		};
+		6755C7B11017FE2500A80195 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = string.c;
+			path = ../../string.c;
+			refType = 2;
+		};
+		6755C7B21017FE2500A80195 = {
+			fileRef = 6755C7A91017FE2500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C7B31017FE2500A80195 = {
+			fileRef = 6755C7AA1017FE2500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C7B51017FE2500A80195 = {
+			fileRef = 6755C7AC1017FE2500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C7B71017FE2500A80195 = {
+			fileRef = 6755C7AE1017FE2500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C7B81017FE2500A80195 = {
+			fileRef = 6755C7AF1017FE2500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C7BB1017FE2500A80195 = {
+			fileRef = 6755C7A91017FE2500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C7BC1017FE2500A80195 = {
+			fileRef = 6755C7AA1017FE2500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C7BD1017FE2500A80195 = {
+			fileRef = 6755C7AB1017FE2500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C7BE1017FE2500A80195 = {
+			fileRef = 6755C7AC1017FE2500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C7BF1017FE2500A80195 = {
+			fileRef = 6755C7AD1017FE2500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C7C01017FE2500A80195 = {
+			fileRef = 6755C7AE1017FE2500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C7C11017FE2500A80195 = {
+			fileRef = 6755C7AF1017FE2500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C7C41017FE4400A80195 = {
+			children = (
+				6755C7FA1017FE4500A80195,
+				6755C7FB1017FE4500A80195,
+			);
+			isa = PBXGroup;
+			name = macosx;
+			path = "";
+			refType = 2;
+		};
+		6755C7FA1017FE4500A80195 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = mac_alert.c;
+			refType = 2;
+		};
+		6755C7FB1017FE4500A80195 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = mac_alert.h;
+			refType = 2;
+		};
+		6755C82A1017FE4500A80195 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = sdlmain.h;
+			path = ../sdlmain.h;
+			refType = 2;
+		};
+		6755C84B1017FE4500A80195 = {
+			fileRef = 6755C7FA1017FE4500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8651017FE4500A80195 = {
+			fileRef = 6755C82A1017FE4500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8861017FE4500A80195 = {
+			fileRef = 6755C7FA1017FE4500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8871017FE4500A80195 = {
+			fileRef = 6755C7FB1017FE4500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8A01017FE4500A80195 = {
+			fileRef = 6755C82A1017FE4500A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8A41017FE8000A80195 = {
+			children = (
+				84177748085A1097000C01D8,
+				84177749085A1097000C01D8,
+				8417774A085A1097000C01D8,
+				8417774B085A1097000C01D8,
+				8417774C085A1097000C01D8,
+				8417774D085A1097000C01D8,
+				8417774E085A1097000C01D8,
+				8417774F085A1097000C01D8,
+				84177750085A1097000C01D8,
+				84177751085A1097000C01D8,
+				84177752085A1097000C01D8,
+				84177753085A1097000C01D8,
+				84177754085A1097000C01D8,
+				84177755085A10AA000C01D8,
+				84177756085A10AA000C01D8,
+				6755C82A1017FE4500A80195,
+				84177757085A10AA000C01D8,
+				6755C7C41017FE4400A80195,
+			);
+			isa = PBXGroup;
+			name = SDL;
+			path = "";
+			refType = 2;
+		};
+		6755C8BE101802C300A80195 = {
+			isa = PBXFileReference;
+			name = drill.dta;
+			path = ../../../bin/Resources/drill.dta;
+			refType = 2;
+		};
+		6755C8BF101802C300A80195 = {
+			isa = PBXFileReference;
+			name = fmod.dll;
+			path = ../../../bin/Resources/fmod.dll;
+			refType = 2;
+		};
+		6755C8C0101802C300A80195 = {
+			isa = PBXFileReference;
+			name = knux.plr;
+			path = ../../../bin/Resources/knux.plr;
+			refType = 2;
+		};
+		6755C8C1101802C300A80195 = {
+			isa = PBXFileReference;
+			name = music.dta;
+			path = ../../../bin/Resources/music.dta;
+			refType = 2;
+		};
+		6755C8C2101802C300A80195 = {
+			isa = PBXFileReference;
+			name = rings.wpn;
+			path = ../../../bin/Resources/rings.wpn;
+			refType = 2;
+		};
+		6755C8C3101802C300A80195 = {
+			isa = PBXFileReference;
+			name = soar.dta;
+			path = ../../../bin/Resources/soar.dta;
+			refType = 2;
+		};
+		6755C8C4101802C300A80195 = {
+			isa = PBXFileReference;
+			name = sonic.plr;
+			path = ../../../bin/Resources/sonic.plr;
+			refType = 2;
+		};
+		6755C8C5101802C300A80195 = {
+			isa = PBXFileReference;
+			name = srb2.wad;
+			path = ../../../bin/Resources/srb2.wad;
+			refType = 2;
+		};
+		6755C8C6101802C300A80195 = {
+			isa = PBXFileReference;
+			name = tails.plr;
+			path = ../../../bin/Resources/tails.plr;
+			refType = 2;
+		};
+		6755C8C7101802C300A80195 = {
+			fileRef = 6755C8BE101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8C8101802C300A80195 = {
+			fileRef = 6755C8BF101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8C9101802C300A80195 = {
+			fileRef = 6755C8C0101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8CA101802C300A80195 = {
+			fileRef = 6755C8C1101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8CB101802C300A80195 = {
+			fileRef = 6755C8C2101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8CC101802C300A80195 = {
+			fileRef = 6755C8C3101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8CD101802C300A80195 = {
+			fileRef = 6755C8C4101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8CE101802C300A80195 = {
+			fileRef = 6755C8C5101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8CF101802C300A80195 = {
+			fileRef = 6755C8C6101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8D0101802C300A80195 = {
+			fileRef = 6755C8BE101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8D1101802C300A80195 = {
+			fileRef = 6755C8BF101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8D2101802C300A80195 = {
+			fileRef = 6755C8C0101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8D3101802C300A80195 = {
+			fileRef = 6755C8C1101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8D4101802C300A80195 = {
+			fileRef = 6755C8C2101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8D5101802C300A80195 = {
+			fileRef = 6755C8C3101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8D6101802C300A80195 = {
+			fileRef = 6755C8C4101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8D7101802C300A80195 = {
+			fileRef = 6755C8C5101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6755C8D8101802C300A80195 = {
+			fileRef = 6755C8C6101802C300A80195;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		677B5EC810180D4E00A80195 = {
+			fileRef = 84177758085A10D2000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		677B5EC910180D6600A80195 = {
+			children = (
+				84177758085A10D2000C01D8,
+			);
+			isa = PBXGroup;
+			name = r_opengl;
+			refType = 4;
+		};
+		677B5ECA10180D7100A80195 = {
+			children = (
+				84F202CA08A92AA0000C01D8,
+			);
+			isa = PBXGroup;
+			name = s_openal;
+			refType = 4;
+		};
+		67B2D0C91018779900A80195 = {
+			fileRef = 84177748085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		67B2D0CA1018779D00A80195 = {
+			fileRef = 84177748085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+//670
+//671
+//672
+//673
+//674
+//840
+//841
+//842
+//843
+//844
+		840CE6B009198AA7000C01D8 = {
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				840CE6B309198ABB000C01D8,
+				840CE6B409198ABB000C01D8,
+				849BD32D0A7E471D000C01D8,
+			);
+			isa = PBXCopyFilesBuildPhase;
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		840CE6B309198ABB000C01D8 = {
+			fileRef = 84C4E04B08620A46000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		840CE6B409198ABB000C01D8 = {
+			fileRef = 84C4E04C08620A46000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		841776FE085A0C64000C01D8 = {
+			children = (
+				84C4E00D0862063C000C01D8,
+				84177705085A0CDB000C01D8,
+				84177706085A0D9D000C01D8,
+				84177708085A0DB5000C01D8,
+				84177709085A0DD1000C01D8,
+				84177712085A0EB5000C01D8,
+				8417770B085A0E17000C01D8,
+				8417770C085A0E40000C01D8,
+				8417770D085A0E4E000C01D8,
+				8417770E085A0E5B000C01D8,
+				8417770F085A0E66000C01D8,
+				84177710085A0E71000C01D8,
+				84177711085A0E77000C01D8,
+				841779E2085A138F000C01D8,
+				84F202C708A92A5D000C01D8,
+				84C4E03F0862096F000C01D8,
+				84C4E0420862098A000C01D8,
+				84C4E045086209D3000C01D8,
+				84C4E048086209FF000C01D8,
+				84C4E04C08620A46000C01D8,
+				84C4E04B08620A46000C01D8,
+				849BD31C0A7E45B3000C01D8,
+			);
+			isa = PBXGroup;
+			refType = 4;
+		};
+		84177700085A0C64000C01D8 = {
+			buildRules = (
+			);
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+			};
+			isa = PBXBuildStyle;
+			name = Development;
+		};
+		84177701085A0C64000C01D8 = {
+			buildRules = (
+			);
+			buildSettings = {
+				COPY_PHASE_STRIP = YES;
+			};
+			isa = PBXBuildStyle;
+			name = Deployment;
+		};
+		84177702085A0C64000C01D8 = {
+			buildStyles = (
+				84177700085A0C64000C01D8,
+				84177701085A0C64000C01D8,
+			);
+			hasScannedForEncodings = 1;
+			isa = PBXProject;
+			mainGroup = 841776FE085A0C64000C01D8;
+			productRefGroup = 841779E2085A138F000C01D8;
+			projectDirPath = "";
+			targets = (
+				841779E0085A138F000C01D8,
+				841779E9085A13B1000C01D8,
+			);
+		};
+		84177705085A0CDB000C01D8 = {
+			children = (
+				849603A80A791C11000C01D8,
+				84177713085A0FCE000C01D8,
+				84177714085A0FCE000C01D8,
+				84177716085A0FCE000C01D8,
+				84177717085A0FCE000C01D8,
+				84177718085A0FCE000C01D8,
+				84177719085A0FCE000C01D8,
+				8417771A085A0FCE000C01D8,
+				8417771B085A0FCE000C01D8,
+				8417771C085A0FCE000C01D8,
+				8417771D085A0FCE000C01D8,
+				8417771E085A0FCE000C01D8,
+				8417771F085A0FCE000C01D8,
+				84177720085A0FCE000C01D8,
+				84177721085A0FCE000C01D8,
+				84177722085A0FCE000C01D8,
+				84177723085A0FCE000C01D8,
+				84177724085A0FF2000C01D8,
+				84177725085A0FF2000C01D8,
+				84177726085A0FF2000C01D8,
+				84177727085A0FF2000C01D8,
+				6755C7B11017FE2500A80195,
+			);
+			isa = PBXGroup;
+			name = D_SRB2;
+			path = "";
+			refType = 2;
+		};
+		84177706085A0D9D000C01D8 = {
+			children = (
+				8417772A085A100E000C01D8,
+				8417772B085A100E000C01D8,
+				8417772C085A100E000C01D8,
+			);
+			isa = PBXGroup;
+			name = F_Frame;
+			path = "";
+			refType = 2;
+		};
+		84177708085A0DB5000C01D8 = {
+			children = (
+				841779DA085A1347000C01D8,
+				841778C6085A1295000C01D8,
+				841778C4085A1295000C01D8,
+				841778C5085A1295000C01D8,
+				8417772D085A1029000C01D8,
+				8417772E085A1029000C01D8,
+				8417772F085A1029000C01D8,
+				84177730085A1029000C01D8,
+				84177731085A1029000C01D8,
+				841779D4085A1296000C01D8,
+				841779D5085A1296000C01D8,
+			);
+			isa = PBXGroup;
+			name = G_Game;
+			path = "";
+			refType = 2;
+		};
+		84177709085A0DD1000C01D8 = {
+			children = (
+				841778BE085A1295000C01D8,
+				841778BF085A1295000C01D8,
+				841778C2085A1295000C01D8,
+				841778C3085A1295000C01D8,
+				841778C0085A1295000C01D8,
+				841778C1085A1295000C01D8,
+				84177732085A1040000C01D8,
+				84177733085A1040000C01D8,
+				841779D2085A1296000C01D8,
+				841779D3085A1296000C01D8,
+				841779D8085A1296000C01D8,
+				8490D433085DF537000C01D8,
+			);
+			isa = PBXGroup;
+			name = H_Hud;
+			path = "";
+			refType = 2;
+		};
+		8417770B085A0E17000C01D8 = {
+			children = (
+				6755C8A41017FE8000A80195,
+				84177759085A10D2000C01D8,
+				841777A4085A1200000C01D8,
+				841777A5085A1200000C01D8,
+				841777A6085A1200000C01D8,
+				841777A8085A1200000C01D8,
+				841777A9085A1200000C01D8,
+				841777AA085A1200000C01D8,
+				841777AB085A1200000C01D8,
+				841777AC085A1200000C01D8,
+				841777AD085A1200000C01D8,
+				841777AE085A1200000C01D8,
+			);
+			isa = PBXGroup;
+			name = I_Interface;
+			path = "";
+			refType = 2;
+		};
+		8417770C085A0E40000C01D8 = {
+			children = (
+				8417775A085A10EB000C01D8,
+				8417775B085A10EB000C01D8,
+				8417775C085A10EB000C01D8,
+				8417775D085A10EB000C01D8,
+				8417775E085A10EB000C01D8,
+				8417775F085A10EB000C01D8,
+				6755C7AB1017FE2500A80195,
+				84177760085A10EB000C01D8,
+				84177761085A10EB000C01D8,
+				84177762085A10EB000C01D8,
+				84177763085A10EB000C01D8,
+				84177764085A10EB000C01D8,
+				84177765085A10EB000C01D8,
+				6755C7AC1017FE2500A80195,
+				6755C7AD1017FE2500A80195,
+				84177766085A10EB000C01D8,
+				84177767085A10EB000C01D8,
+				84177768085A10EB000C01D8,
+			);
+			isa = PBXGroup;
+			name = M_Misc;
+			path = "";
+			refType = 2;
+		};
+		8417770D085A0E4E000C01D8 = {
+			children = (
+				84177769085A1104000C01D8,
+				8417776A085A1104000C01D8,
+				8417776B085A1104000C01D8,
+				8417776C085A1104000C01D8,
+				8417776D085A1104000C01D8,
+				8417776E085A1104000C01D8,
+				8417776F085A1104000C01D8,
+				84177770085A1104000C01D8,
+				84177771085A1104000C01D8,
+				84177772085A1104000C01D8,
+				84177773085A1104000C01D8,
+				84177774085A1104000C01D8,
+				6755C7AE1017FE2500A80195,
+				6755C7AF1017FE2500A80195,
+				84177775085A1104000C01D8,
+				84177776085A1104000C01D8,
+				84177777085A1104000C01D8,
+				84177778085A1104000C01D8,
+				84177779085A1104000C01D8,
+				8417777A085A1104000C01D8,
+				8417777B085A1104000C01D8,
+				8417777C085A1104000C01D8,
+				8417777D085A1104000C01D8,
+				8417777E085A1104000C01D8,
+				8417777F085A1104000C01D8,
+				84177780085A1104000C01D8,
+			);
+			isa = PBXGroup;
+			name = P_Play;
+			path = "";
+			refType = 2;
+		};
+		8417770E085A0E5B000C01D8 = {
+			children = (
+				84177781085A111B000C01D8,
+				84177782085A111B000C01D8,
+				84177783085A111B000C01D8,
+				84177784085A111B000C01D8,
+				84177785085A111B000C01D8,
+				84177786085A111B000C01D8,
+				84177787085A111B000C01D8,
+				84177788085A111B000C01D8,
+				84177789085A111B000C01D8,
+				8417778A085A111B000C01D8,
+				8417778B085A111B000C01D8,
+				8417778C085A111B000C01D8,
+				8417778D085A111B000C01D8,
+				8417778E085A111B000C01D8,
+				8417778F085A111B000C01D8,
+				84177790085A111B000C01D8,
+				84177791085A111B000C01D8,
+				84177792085A111B000C01D8,
+				84177793085A111B000C01D8,
+				84177794085A111B000C01D8,
+				84177795085A111B000C01D8,
+				84177796085A111B000C01D8,
+				84177797085A111B000C01D8,
+				841777A2085A1197000C01D8,
+				841777A3085A1197000C01D8,
+				8490D436085DF57B000C01D8,
+				841779D7085A1296000C01D8,
+			);
+			isa = PBXGroup;
+			name = R_Rend;
+			path = "";
+			refType = 2;
+		};
+		8417770F085A0E66000C01D8 = {
+			children = (
+				84177798085A1138000C01D8,
+				84177799085A1138000C01D8,
+				8417779A085A1138000C01D8,
+				8417779B085A1138000C01D8,
+			);
+			isa = PBXGroup;
+			name = S_Sounds;
+			path = "";
+			refType = 2;
+		};
+		84177710085A0E71000C01D8 = {
+			children = (
+				8417779C085A114C000C01D8,
+				8417779D085A114C000C01D8,
+				8417779E085A116B000C01D8,
+				8417779F085A116B000C01D8,
+			);
+			isa = PBXGroup;
+			name = SDL_main;
+			path = "";
+			refType = 2;
+		};
+		84177711085A0E77000C01D8 = {
+			children = (
+				6755C7A91017FE2500A80195,
+				6755C7AA1017FE2500A80195,
+				841777AF085A1228000C01D8,
+				841777B0085A1228000C01D8,
+				841777A0085A117F000C01D8,
+				841777A1085A117F000C01D8,
+				841778BC085A122A000C01D8,
+				841778BD085A122A000C01D8,
+			);
+			isa = PBXGroup;
+			name = W_Wad;
+			path = "";
+			refType = 2;
+		};
+		84177712085A0EB5000C01D8 = {
+			children = (
+				677B5EC910180D6600A80195,
+				677B5ECA10180D7100A80195,
+				84177734085A106C000C01D8,
+				84177735085A106C000C01D8,
+				84177736085A106C000C01D8,
+				84177737085A106C000C01D8,
+				84177738085A106C000C01D8,
+				84177739085A106C000C01D8,
+				8417773A085A106C000C01D8,
+				8417773B085A106C000C01D8,
+				8417773C085A106C000C01D8,
+				8417773D085A106C000C01D8,
+				8417773E085A106C000C01D8,
+				8417773F085A106C000C01D8,
+				84177740085A106C000C01D8,
+				84177741085A106C000C01D8,
+				84177742085A106C000C01D8,
+				84177743085A106C000C01D8,
+				84177744085A106C000C01D8,
+				84177745085A106C000C01D8,
+				84177746085A106C000C01D8,
+				84177747085A106C000C01D8,
+			);
+			isa = PBXGroup;
+			name = Hw_Hardware;
+			path = "";
+			refType = 2;
+		};
+		84177713085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = d_clisrv.c;
+			path = ../../d_clisrv.c;
+			refType = 2;
+		};
+		84177714085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = d_clisrv.h;
+			path = ../../d_clisrv.h;
+			refType = 2;
+		};
+		84177716085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = d_event.h;
+			path = ../../d_event.h;
+			refType = 2;
+		};
+		84177717085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = d_main.c;
+			path = ../../d_main.c;
+			refType = 2;
+		};
+		84177718085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = d_main.h;
+			path = ../../d_main.h;
+			refType = 2;
+		};
+		84177719085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = d_net.c;
+			path = ../../d_net.c;
+			refType = 2;
+		};
+		8417771A085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = d_net.h;
+			path = ../../d_net.h;
+			refType = 2;
+		};
+		8417771B085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = d_netcmd.c;
+			path = ../../d_netcmd.c;
+			refType = 2;
+		};
+		8417771C085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = d_netcmd.h;
+			path = ../../d_netcmd.h;
+			refType = 2;
+		};
+		8417771D085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = d_netfil.c;
+			path = ../../d_netfil.c;
+			refType = 2;
+		};
+		8417771E085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = d_netfil.h;
+			path = ../../d_netfil.h;
+			refType = 2;
+		};
+		8417771F085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = d_player.h;
+			path = ../../d_player.h;
+			refType = 2;
+		};
+		84177720085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = d_think.h;
+			path = ../../d_think.h;
+			refType = 2;
+		};
+		84177721085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = d_ticcmd.h;
+			path = ../../d_ticcmd.h;
+			refType = 2;
+		};
+		84177722085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = dehacked.c;
+			path = ../../dehacked.c;
+			refType = 2;
+		};
+		84177723085A0FCE000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = dehacked.h;
+			path = ../../dehacked.h;
+			refType = 2;
+		};
+		84177724085A0FF2000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = doomdata.h;
+			path = ../../doomdata.h;
+			refType = 2;
+		};
+		84177725085A0FF2000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = doomdef.h;
+			path = ../../doomdef.h;
+			refType = 2;
+		};
+		84177726085A0FF2000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = doomstat.h;
+			path = ../../doomstat.h;
+			refType = 2;
+		};
+		84177727085A0FF2000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = doomtype.h;
+			path = ../../doomtype.h;
+			refType = 2;
+		};
+		8417772A085A100E000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = f_finale.c;
+			path = ../../f_finale.c;
+			refType = 2;
+		};
+		8417772B085A100E000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = f_finale.h;
+			path = ../../f_finale.h;
+			refType = 2;
+		};
+		8417772C085A100E000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = f_wipe.c;
+			path = ../../f_wipe.c;
+			refType = 2;
+		};
+		8417772D085A1029000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = g_game.c;
+			path = ../../g_game.c;
+			refType = 2;
+		};
+		8417772E085A1029000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = g_game.h;
+			path = ../../g_game.h;
+			refType = 2;
+		};
+		8417772F085A1029000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = g_input.c;
+			path = ../../g_input.c;
+			refType = 2;
+		};
+		84177730085A1029000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = g_input.h;
+			path = ../../g_input.h;
+			refType = 2;
+		};
+		84177731085A1029000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = g_state.h;
+			path = ../../g_state.h;
+			refType = 2;
+		};
+		84177732085A1040000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hu_stuff.c;
+			path = ../../hu_stuff.c;
+			refType = 2;
+		};
+		84177733085A1040000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hu_stuff.h;
+			path = ../../hu_stuff.h;
+			refType = 2;
+		};
+		84177734085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_bsp.c;
+			path = ../../hardware/hw_bsp.c;
+			refType = 2;
+		};
+		84177735085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_cache.c;
+			path = ../../hardware/hw_cache.c;
+			refType = 2;
+		};
+		84177736085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_data.h;
+			path = ../../hardware/hw_data.h;
+			refType = 2;
+		};
+		84177737085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_defs.h;
+			path = ../../hardware/hw_defs.h;
+			refType = 2;
+		};
+		84177738085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_dll.h;
+			path = ../../hardware/hw_dll.h;
+			refType = 2;
+		};
+		84177739085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_draw.c;
+			path = ../../hardware/hw_draw.c;
+			refType = 2;
+		};
+		8417773A085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_drv.h;
+			path = ../../hardware/hw_drv.h;
+			refType = 2;
+		};
+		8417773B085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_glide.h;
+			path = ../../hardware/hw_glide.h;
+			refType = 2;
+		};
+		8417773C085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_glob.h;
+			path = ../../hardware/hw_glob.h;
+			refType = 2;
+		};
+		8417773D085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_light.c;
+			path = ../../hardware/hw_light.c;
+			refType = 2;
+		};
+		8417773E085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_light.h;
+			path = ../../hardware/hw_light.h;
+			refType = 2;
+		};
+		8417773F085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_main.c;
+			path = ../../hardware/hw_main.c;
+			refType = 2;
+		};
+		84177740085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_main.h;
+			path = ../../hardware/hw_main.h;
+			refType = 2;
+		};
+		84177741085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_md2.c;
+			path = ../../hardware/hw_md2.c;
+			refType = 2;
+		};
+		84177742085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_md2.h;
+			path = ../../hardware/hw_md2.h;
+			refType = 2;
+		};
+		84177743085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw_trick.c;
+			path = ../../hardware/hw_trick.c;
+			refType = 2;
+		};
+		84177744085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw3dsdrv.h;
+			path = ../../hardware/hw3dsdrv.h;
+			refType = 2;
+		};
+		84177745085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw3sound.c;
+			path = ../../hardware/hw3sound.c;
+			refType = 2;
+		};
+		84177746085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hw3sound.h;
+			path = ../../hardware/hw3sound.h;
+			refType = 2;
+		};
+		84177747085A106C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hws_data.h;
+			path = ../../hardware/hws_data.h;
+			refType = 2;
+		};
+		84177748085A1097000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = dosstr.c;
+			path = ../dosstr.c;
+			refType = 2;
+		};
+		84177749085A1097000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = endtxt.c;
+			path = ../endtxt.c;
+			refType = 2;
+		};
+		8417774A085A1097000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = endtxt.h;
+			path = ../endtxt.h;
+			refType = 2;
+		};
+		8417774B085A1097000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = filesrch.c;
+			path = ../../filesrch.c;
+			refType = 2;
+		};
+		8417774C085A1097000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hwsym_sdl.c;
+			path = ../hwsym_sdl.c;
+			refType = 2;
+		};
+		8417774D085A1097000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = hwsym_sdl.h;
+			path = ../hwsym_sdl.h;
+			refType = 2;
+		};
+		8417774E085A1097000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = i_cdmus.c;
+			path = ../i_cdmus.c;
+			refType = 2;
+		};
+		8417774F085A1097000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = i_main.c;
+			path = ../i_main.c;
+			refType = 2;
+		};
+		84177750085A1097000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = i_net.c;
+			path = ../i_net.c;
+			refType = 2;
+		};
+		84177751085A1097000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = i_sound.c;
+			path = ../i_sound.c;
+			refType = 2;
+		};
+		84177752085A1097000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = i_system.c;
+			path = ../i_system.c;
+			refType = 2;
+		};
+		84177753085A1097000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = i_video.c;
+			path = ../i_video.c;
+			refType = 2;
+		};
+		84177754085A1097000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = IMG_xpm.c;
+			path = ../IMG_xpm.c;
+			refType = 2;
+		};
+		84177755085A10AA000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = ogl_sdl.c;
+			path = ../ogl_sdl.c;
+			refType = 2;
+		};
+		84177756085A10AA000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = ogl_sdl.h;
+			path = ../ogl_sdl.h;
+			refType = 2;
+		};
+		84177757085A10AA000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = SDL_icon.xpm;
+			path = ../SDL_icon.xpm;
+			refType = 2;
+		};
+		84177758085A10D2000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_opengl.c;
+			path = ../../hardware/r_opengl/r_opengl.c;
+			refType = 2;
+		};
+		84177759085A10D2000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_opengl.h;
+			path = ../../hardware/r_opengl/r_opengl.h;
+			refType = 2;
+		};
+		8417775A085A10EB000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_argv.c;
+			path = ../../m_argv.c;
+			refType = 2;
+		};
+		8417775B085A10EB000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_argv.h;
+			path = ../../m_argv.h;
+			refType = 2;
+		};
+		8417775C085A10EB000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_bbox.c;
+			path = ../../m_bbox.c;
+			refType = 2;
+		};
+		8417775D085A10EB000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_bbox.h;
+			path = ../../m_bbox.h;
+			refType = 2;
+		};
+		8417775E085A10EB000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_cheat.c;
+			path = ../../m_cheat.c;
+			refType = 2;
+		};
+		8417775F085A10EB000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_cheat.h;
+			path = ../../m_cheat.h;
+			refType = 2;
+		};
+		84177760085A10EB000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_fixed.c;
+			path = ../../m_fixed.c;
+			refType = 2;
+		};
+		84177761085A10EB000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_fixed.h;
+			path = ../../m_fixed.h;
+			refType = 2;
+		};
+		84177762085A10EB000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_menu.c;
+			path = ../../m_menu.c;
+			refType = 2;
+		};
+		84177763085A10EB000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_menu.h;
+			path = ../../m_menu.h;
+			refType = 2;
+		};
+		84177764085A10EB000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_misc.c;
+			path = ../../m_misc.c;
+			refType = 2;
+		};
+		84177765085A10EB000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_misc.h;
+			path = ../../m_misc.h;
+			refType = 2;
+		};
+		84177766085A10EB000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_random.c;
+			path = ../../m_random.c;
+			refType = 2;
+		};
+		84177767085A10EB000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_random.h;
+			path = ../../m_random.h;
+			refType = 2;
+		};
+		84177768085A10EB000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = m_swap.h;
+			path = ../../m_swap.h;
+			refType = 2;
+		};
+		84177769085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_ceilng.c;
+			path = ../../p_ceilng.c;
+			refType = 2;
+		};
+		8417776A085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_enemy.c;
+			path = ../../p_enemy.c;
+			refType = 2;
+		};
+		8417776B085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_fab.c;
+			path = ../../p_fab.c;
+			refType = 2;
+		};
+		8417776C085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_floor.c;
+			path = ../../p_floor.c;
+			refType = 2;
+		};
+		8417776D085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_inter.c;
+			path = ../../p_inter.c;
+			refType = 2;
+		};
+		8417776E085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_lights.c;
+			path = ../../p_lights.c;
+			refType = 2;
+		};
+		8417776F085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_local.h;
+			path = ../../p_local.h;
+			refType = 2;
+		};
+		84177770085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_map.c;
+			path = ../../p_map.c;
+			refType = 2;
+		};
+		84177771085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_maputl.c;
+			path = ../../p_maputl.c;
+			refType = 2;
+		};
+		84177772085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_maputl.h;
+			path = ../../p_maputl.h;
+			refType = 2;
+		};
+		84177773085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_mobj.c;
+			path = ../../p_mobj.c;
+			refType = 2;
+		};
+		84177774085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_mobj.h;
+			path = ../../p_mobj.h;
+			refType = 2;
+		};
+		84177775085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_pspr.h;
+			path = ../../p_pspr.h;
+			refType = 2;
+		};
+		84177776085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_saveg.c;
+			path = ../../p_saveg.c;
+			refType = 2;
+		};
+		84177777085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_saveg.h;
+			path = ../../p_saveg.h;
+			refType = 2;
+		};
+		84177778085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_setup.c;
+			path = ../../p_setup.c;
+			refType = 2;
+		};
+		84177779085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_setup.h;
+			path = ../../p_setup.h;
+			refType = 2;
+		};
+		8417777A085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_sight.c;
+			path = ../../p_sight.c;
+			refType = 2;
+		};
+		8417777B085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_spec.c;
+			path = ../../p_spec.c;
+			refType = 2;
+		};
+		8417777C085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_spec.h;
+			path = ../../p_spec.h;
+			refType = 2;
+		};
+		8417777D085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_telept.c;
+			path = ../../p_telept.c;
+			refType = 2;
+		};
+		8417777E085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_tick.c;
+			path = ../../p_tick.c;
+			refType = 2;
+		};
+		8417777F085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_tick.h;
+			path = ../../p_tick.h;
+			refType = 2;
+		};
+		84177780085A1104000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = p_user.c;
+			path = ../../p_user.c;
+			refType = 2;
+		};
+		84177781085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_bsp.c;
+			path = ../../r_bsp.c;
+			refType = 2;
+		};
+		84177782085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_bsp.h;
+			path = ../../r_bsp.h;
+			refType = 2;
+		};
+		84177783085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_data.c;
+			path = ../../r_data.c;
+			refType = 2;
+		};
+		84177784085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_data.h;
+			path = ../../r_data.h;
+			refType = 2;
+		};
+		84177785085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_defs.h;
+			path = ../../r_defs.h;
+			refType = 2;
+		};
+		84177786085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_draw.c;
+			path = ../../r_draw.c;
+			refType = 2;
+		};
+		84177787085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_draw.h;
+			path = ../../r_draw.h;
+			refType = 2;
+		};
+		84177788085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_draw8.c;
+			path = ../../r_draw8.c;
+			refType = 2;
+		};
+		84177789085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_draw16.c;
+			path = ../../r_draw16.c;
+			refType = 2;
+		};
+		8417778A085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_local.h;
+			path = ../../r_local.h;
+			refType = 2;
+		};
+		8417778B085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_main.c;
+			path = ../../r_main.c;
+			refType = 2;
+		};
+		8417778C085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_main.h;
+			path = ../../r_main.h;
+			refType = 2;
+		};
+		8417778D085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_plane.c;
+			path = ../../r_plane.c;
+			refType = 2;
+		};
+		8417778E085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_plane.h;
+			path = ../../r_plane.h;
+			refType = 2;
+		};
+		8417778F085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_segs.c;
+			path = ../../r_segs.c;
+			refType = 2;
+		};
+		84177790085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_segs.h;
+			path = ../../r_segs.h;
+			refType = 2;
+		};
+		84177791085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_sky.c;
+			path = ../../r_sky.c;
+			refType = 2;
+		};
+		84177792085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_sky.h;
+			path = ../../r_sky.h;
+			refType = 2;
+		};
+		84177793085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_splats.c;
+			path = ../../r_splats.c;
+			refType = 2;
+		};
+		84177794085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_splats.h;
+			path = ../../r_splats.h;
+			refType = 2;
+		};
+		84177795085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_state.h;
+			path = ../../r_state.h;
+			refType = 2;
+		};
+		84177796085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_things.c;
+			path = ../../r_things.c;
+			refType = 2;
+		};
+		84177797085A111B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = r_things.h;
+			path = ../../r_things.h;
+			refType = 2;
+		};
+		84177798085A1138000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = s_sound.c;
+			path = ../../s_sound.c;
+			refType = 2;
+		};
+		84177799085A1138000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = s_sound.h;
+			path = ../../s_sound.h;
+			refType = 2;
+		};
+		8417779A085A1138000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = sounds.c;
+			path = ../../sounds.c;
+			refType = 2;
+		};
+		8417779B085A1138000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = sounds.h;
+			path = ../../sounds.h;
+			refType = 2;
+		};
+		8417779C085A114C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = mac_alert.c;
+			refType = 2;
+		};
+		8417779D085A114C000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = mac_alert.h;
+			refType = 2;
+		};
+		8417779E085A116B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = SDL_macosx_main.h;
+			path = ../SDL_main/SDL_macosx_main.h;
+			refType = 2;
+		};
+		8417779F085A116B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = SDL_macosx_main.m;
+			path = ../SDL_main/SDL_macosx_main.m;
+			refType = 2;
+		};
+		841777A0085A117F000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = w_wad.c;
+			path = ../../w_wad.c;
+			refType = 2;
+		};
+		841777A1085A117F000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = w_wad.h;
+			path = ../../w_wad.h;
+			refType = 2;
+		};
+		841777A2085A1197000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = screen.c;
+			path = ../../screen.c;
+			refType = 2;
+		};
+		841777A3085A1197000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = screen.h;
+			path = ../../screen.h;
+			refType = 2;
+		};
+		841777A4085A1200000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = filesrch.h;
+			path = ../../filesrch.h;
+			refType = 2;
+		};
+		841777A5085A1200000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = i_joy.h;
+			path = ../../i_joy.h;
+			refType = 2;
+		};
+		841777A6085A1200000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = i_net.h;
+			path = ../../i_net.h;
+			refType = 2;
+		};
+		841777A8085A1200000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = i_sound.h;
+			path = ../../i_sound.h;
+			refType = 2;
+		};
+		841777A9085A1200000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = i_system.h;
+			path = ../../i_system.h;
+			refType = 2;
+		};
+		841777AA085A1200000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = i_tcp.c;
+			path = ../../i_tcp.c;
+			refType = 2;
+		};
+		841777AB085A1200000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = i_tcp.h;
+			path = ../../i_tcp.h;
+			refType = 2;
+		};
+		841777AC085A1200000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = i_video.h;
+			path = ../../i_video.h;
+			refType = 2;
+		};
+		841777AD085A1200000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = mserv.c;
+			path = ../../mserv.c;
+			refType = 2;
+		};
+		841777AE085A1200000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = mserv.h;
+			path = ../../mserv.h;
+			refType = 2;
+		};
+		841777AF085A1228000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = md5.c;
+			path = ../../md5.c;
+			refType = 2;
+		};
+		841777B0085A1228000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = md5.h;
+			path = ../../md5.h;
+			refType = 2;
+		};
+		841778BC085A122A000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = z_zone.c;
+			path = ../../z_zone.c;
+			refType = 2;
+		};
+		841778BD085A122A000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = z_zone.h;
+			path = ../../z_zone.h;
+			refType = 2;
+		};
+		841778BE085A1295000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = am_map.c;
+			path = ../../am_map.c;
+			refType = 2;
+		};
+		841778BF085A1295000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = am_map.h;
+			path = ../../am_map.h;
+			refType = 2;
+		};
+		841778C0085A1295000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = command.c;
+			path = ../../command.c;
+			refType = 2;
+		};
+		841778C1085A1295000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = command.h;
+			path = ../../command.h;
+			refType = 2;
+		};
+		841778C2085A1295000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = console.c;
+			path = ../../console.c;
+			refType = 2;
+		};
+		841778C3085A1295000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = console.h;
+			path = ../../console.h;
+			refType = 2;
+		};
+		841778C4085A1295000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = info.c;
+			path = ../../info.c;
+			refType = 2;
+		};
+		841778C5085A1295000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = info.h;
+			path = ../../info.h;
+			refType = 2;
+		};
+		841778C6085A1295000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = keys.h;
+			path = ../../keys.h;
+			refType = 2;
+		};
+		841779D2085A1296000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = st_stuff.c;
+			path = ../../st_stuff.c;
+			refType = 2;
+		};
+		841779D3085A1296000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = st_stuff.h;
+			path = ../../st_stuff.h;
+			refType = 2;
+		};
+		841779D4085A1296000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = tables.c;
+			path = ../../tables.c;
+			refType = 2;
+		};
+		841779D5085A1296000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = tables.h;
+			path = ../../tables.h;
+			refType = 2;
+		};
+		841779D7085A1296000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = v_video.h;
+			path = ../../v_video.h;
+			refType = 2;
+		};
+		841779D8085A1296000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = y_inter.c;
+			path = ../../y_inter.c;
+			refType = 2;
+		};
+		841779DA085A1347000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = byteptr.h;
+			path = ../../byteptr.h;
+			refType = 2;
+		};
+		841779DC085A138F000C01D8 = {
+			buildActionMask = 2147483647;
+			files = (
+				6755C8C7101802C300A80195,
+				6755C8C8101802C300A80195,
+				6755C8C9101802C300A80195,
+				6755C8CA101802C300A80195,
+				6755C8CB101802C300A80195,
+				6755C8CC101802C300A80195,
+				6755C8CD101802C300A80195,
+				6755C8CE101802C300A80195,
+				6755C8CF101802C300A80195,
+			);
+			isa = PBXResourcesBuildPhase;
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		841779DD085A138F000C01D8 = {
+			buildActionMask = 2147483647;
+			files = (
+				84177A2A085A18A8000C01D8,
+				84177A2E085A18D2000C01D8,
+				84177A30085A18D3000C01D8,
+				84177A32085A18D4000C01D8,
+				84177A34085A18D5000C01D8,
+				84177A39085A18D8000C01D8,
+				84177A3F085A18DC000C01D8,
+				84177A41085A18E0000C01D8,
+				84177A43085A18E1000C01D8,
+				84177A46085A18E8000C01D8,
+				84177A4A085A18EA000C01D8,
+				84177A4E085A18EC000C01D8,
+				84177A50085A18F2000C01D8,
+				84177A52085A193F000C01D8,
+				84177A53085A1940000C01D8,
+				84177A54085A1942000C01D8,
+				84177A55085A1943000C01D8,
+				84177A56085A195A000C01D8,
+				84177A57085A195B000C01D8,
+				84177A58085A1968000C01D8,
+				84177A59085A1969000C01D8,
+				84177A5A085A196B000C01D8,
+				84177A5B085A197A000C01D8,
+				84177A5C085A197C000C01D8,
+				84177A5D085A197D000C01D8,
+				84177A5E085A197E000C01D8,
+				84177A5F085A1980000C01D8,
+				84177A61085A1985000C01D8,
+				84177A62085A1986000C01D8,
+				84177A63085A1988000C01D8,
+				84177A64085A1989000C01D8,
+				84177A65085A198A000C01D8,
+				84177A66085A198A000C01D8,
+				84177A67085A198B000C01D8,
+				84177A68085A198C000C01D8,
+				84177A69085A198E000C01D8,
+				84177A6B085A1994000C01D8,
+				84177A6C085A1995000C01D8,
+				84177A6D085A199D000C01D8,
+				84177A6E085A19A0000C01D8,
+				84177A6F085A19A1000C01D8,
+				84177A70085A19A2000C01D8,
+				84177A71085A19A4000C01D8,
+				84177A72085A19A5000C01D8,
+				84177A73085A19A6000C01D8,
+				84177A74085A19A7000C01D8,
+				84177A75085A19AC000C01D8,
+				84177A76085A19AD000C01D8,
+				84177A77085A19AE000C01D8,
+				84177A78085A19AE000C01D8,
+				84177A79085A19AF000C01D8,
+				84177A7A085A19B0000C01D8,
+				84177A7B085A19B3000C01D8,
+				84177A7C085A19B4000C01D8,
+				84177A7D085A19B5000C01D8,
+				84177A7E085A19B7000C01D8,
+				84177A7F085A19B8000C01D8,
+				84177A80085A19B9000C01D8,
+				84177A81085A19BA000C01D8,
+				84177A82085A19BB000C01D8,
+				84177A83085A19BB000C01D8,
+				84177A84085A19BC000C01D8,
+				84177A85085A19C1000C01D8,
+				84177A86085A19C2000C01D8,
+				84177A87085A19C3000C01D8,
+				84177A88085A19C6000C01D8,
+				84177A89085A19C7000C01D8,
+				84177A8A085A19C9000C01D8,
+				84177A8B085A19CC000C01D8,
+				84177A8C085A19CD000C01D8,
+				84177A8D085A19CF000C01D8,
+				84177A8E085A19D0000C01D8,
+				84177A90085A19D8000C01D8,
+				84177A91085A19D9000C01D8,
+				84177A92085A19DD000C01D8,
+				84177A93085A19DF000C01D8,
+				84177A94085A19E1000C01D8,
+				84177A95085A19E3000C01D8,
+				84177A96085A19E6000C01D8,
+				8490D438085DF57B000C01D8,
+				849603AA0A791C11000C01D8,
+				6755C7B21017FE2500A80195,
+				6755C7B31017FE2500A80195,
+				6755C7B51017FE2500A80195,
+				6755C7B71017FE2500A80195,
+				6755C7B81017FE2500A80195,
+				6755C84B1017FE4500A80195,
+				6755C8651017FE4500A80195,
+				677B5EC810180D4E00A80195,
+				67B2D0C91018779900A80195,
+			);
+			isa = PBXSourcesBuildPhase;
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		841779DE085A138F000C01D8 = {
+			buildActionMask = 2147483647;
+			files = (
+				84C4E0410862096F000C01D8,
+				84C4E0440862098A000C01D8,
+				84C4E047086209D3000C01D8,
+				84C4E04A086209FF000C01D8,
+				84C4E04F08620A46000C01D8,
+				84C4E05008620A46000C01D8,
+				849BD31E0A7E45B3000C01D8,
+			);
+			isa = PBXFrameworksBuildPhase;
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		841779E0085A138F000C01D8 = {
+			buildPhases = (
+				841779DC085A138F000C01D8,
+				841779DD085A138F000C01D8,
+				841779DE085A138F000C01D8,
+			);
+			buildSettings = {
+				DEBUGGING_SYMBOLS = NO;
+				FRAMEWORK_SEARCH_PATHS = "\"$(LOCAL_LIBRARY_DIR)/Frameworks\"";
+				HEADER_SEARCH_PATHS = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/SDL.framework/Headers\" \"$(LOCAL_LIBRARY_DIR)/Frameworks/SDL_mixer.framework/Headers\" \"$(LOCAL_LIBRARY_DIR)/Frameworks/OpenAL.framework/Headers\" \"$(LOCAL_LIBRARY_DIR)/Frameworks/libpng.framework/Headers\"";
+				INSTALL_PATH = "$(HOME)/Applications";
+				JAVA_COMPILER_DEBUGGING_SYMBOLS = NO;
+				OPTIMIZATION_CFLAGS = "-O2";
+				OTHER_CFLAGS = "-DMAC_ALERT -DUNIXCOMMON -DSDLMAIN -DHAVE_MIXER -DHAVE_PNG -D_BIG_ENDIAN -DSTDC_HEADERS -DSDL -Wall -Winline -fno-strict-aliasing";
+				OTHER_REZFLAGS = "";
+				PREBINDING = NO;
+				PRODUCT_NAME = Srb2;
+				SECTORDER_FLAGS = "";
+				USE_GCC3_PFE_SUPPORT = NO;
+				WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas -Wno-long-double";
+				WRAPPER_EXTENSION = app;
+			};
+			dependencies = (
+			);
+			isa = PBXApplicationTarget;
+			name = Srb2;
+			productInstallPath = "$(HOME)/Applications";
+			productName = Srb2;
+			productReference = 841779E1085A138F000C01D8;
+			productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
+<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
+<plist version=\"1.0\">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>Srb2</string>
+	<key>CFBundleGetInfoString</key>
+	<string></string>
+	<key>CFBundleIconFile</key>
+	<string>Srb2mac</string>
+	<key>CFBundleIdentifier</key>
+	<string></string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>Sonic Robo Blast 2</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.09</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1.09</string>
+	<key>NSMainNibFile</key>
+	<string>SDL_Main.nib</string>
+	<key>NSPrincipalClass</key>
+	<string>NSApplication</string>
+</dict>
+</plist>
+";
+		};
+		841779E1085A138F000C01D8 = {
+			isa = PBXApplicationReference;
+			path = Srb2.app;
+			refType = 3;
+		};
+		841779E2085A138F000C01D8 = {
+			children = (
+				841779E1085A138F000C01D8,
+				841779EA085A13B1000C01D8,
+			);
+			isa = PBXGroup;
+			name = Products;
+			refType = 4;
+		};
+		841779E6085A13B1000C01D8 = {
+			buildActionMask = 2147483647;
+			files = (
+				84177A98085A1A0B000C01D8,
+				84177A99085A1A0E000C01D8,
+				84177A9A085A1A0F000C01D8,
+				84177A9B085A1A11000C01D8,
+				84177A9C085A1A12000C01D8,
+				84177A9D085A1A14000C01D8,
+				84177A9E085A1A16000C01D8,
+				84177A9F085A1A1E000C01D8,
+				84177AA0085A1A1F000C01D8,
+				84177AA1085A1A24000C01D8,
+				84177AA2085A1A25000C01D8,
+				84177AA3085A1A27000C01D8,
+				84177AA4085A1A28000C01D8,
+				84177AA5085A1A2B000C01D8,
+				84177AA6085A1A2C000C01D8,
+				84177AA7085A1A2D000C01D8,
+				84177AA8085A1A2F000C01D8,
+				84177AA9085A1A30000C01D8,
+				84177AAA085A1A31000C01D8,
+				84177AB4085A1A5E000C01D8,
+				84177AB5085A1A60000C01D8,
+				84177AB8085A1A65000C01D8,
+				84177AB9085A1A65000C01D8,
+				84177ABA085A1A66000C01D8,
+				84177ABB085A1A67000C01D8,
+				84177ABC085A1A67000C01D8,
+				84177ABD085A1A68000C01D8,
+				84177AC1085A1A70000C01D8,
+				84177AC2085A1A72000C01D8,
+				84177AC3085A1A77000C01D8,
+				84177AC4085A1A78000C01D8,
+				84177AC5085A1A7A000C01D8,
+				84177AC6085A1A7B000C01D8,
+				84177AC7085A1A7C000C01D8,
+				84177AC8085A1A7D000C01D8,
+				84177AC9085A1A7F000C01D8,
+				84177ACA085A1A87000C01D8,
+				84177ACB085A1A88000C01D8,
+				84177ACC085A1A88000C01D8,
+				84177ACD085A1A89000C01D8,
+				84177ACE085A1A8A000C01D8,
+				84177ACF085A1A8B000C01D8,
+				84177AD0085A1A8C000C01D8,
+				84177AD1085A1A8D000C01D8,
+				84177AD2085A1A90000C01D8,
+				84177AD4085A1A92000C01D8,
+				84177AD5085A1A93000C01D8,
+				84177AD6085A1A94000C01D8,
+				84177AD7085A1A97000C01D8,
+				84177AD8085A1A97000C01D8,
+				84177AD9085A1A99000C01D8,
+				84177ADA085A1A9F000C01D8,
+				84177ADB085A1AA0000C01D8,
+				84177ADC085A1AA2000C01D8,
+				84177ADF085A1AA4000C01D8,
+				84177AE0085A1AA6000C01D8,
+				84177AE1085A1AA7000C01D8,
+				84177AE2085A1AA8000C01D8,
+				84177AE3085A1AA9000C01D8,
+				84177AE4085A1AAA000C01D8,
+				84177AE5085A1AAE000C01D8,
+				84177AE7085A1AB5000C01D8,
+				84177AE8085A1AB6000C01D8,
+				84177AEB085A1ABD000C01D8,
+				84177AEC085A1ABF000C01D8,
+				84177AED085A1ABF000C01D8,
+				8490D432085DF3D6000C01D8,
+				8490D437085DF57B000C01D8,
+				8490D43C085E0518000C01D8,
+				8490D43D085E05F6000C01D8,
+				8490D43E085E05F7000C01D8,
+				8490D43F085E05F8000C01D8,
+				8490D440085E05FA000C01D8,
+				8490D441085E05FB000C01D8,
+				8490D442085E05FC000C01D8,
+				8490D443085E05FE000C01D8,
+				8490D444085E05FF000C01D8,
+				8490D445085E0606000C01D8,
+				8490D446085E060A000C01D8,
+				8490D447085E060B000C01D8,
+				8490D448085E067E000C01D8,
+				849603A90A791C11000C01D8,
+				6755C7BB1017FE2500A80195,
+				6755C7BC1017FE2500A80195,
+				6755C7BD1017FE2500A80195,
+				6755C7BE1017FE2500A80195,
+				6755C7BF1017FE2500A80195,
+				6755C7C01017FE2500A80195,
+				6755C7C11017FE2500A80195,
+				6755C8861017FE4500A80195,
+				6755C8871017FE4500A80195,
+				6755C8A01017FE4500A80195,
+				67B2D0CA1018779D00A80195,
+			);
+			isa = PBXSourcesBuildPhase;
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		841779E7085A13B1000C01D8 = {
+			buildActionMask = 2147483647;
+			files = (
+				84C4E0400862096F000C01D8,
+				84C4E0430862098A000C01D8,
+				84C4E046086209D3000C01D8,
+				84C4E049086209FF000C01D8,
+				84C4E04E08620A46000C01D8,
+				8494DFE80886EA0D000C01D8,
+				849BD31D0A7E45B3000C01D8,
+			);
+			isa = PBXFrameworksBuildPhase;
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		841779E9085A13B1000C01D8 = {
+			buildPhases = (
+				840CE6B009198AA7000C01D8,
+				6726EB5E10190F860074DCBA,
+				6726EB5F10190FFC0074DCBA,
+				841779E6085A13B1000C01D8,
+				841779E7085A13B1000C01D8,
+			);
+			buildSettings = {
+				FRAMEWORK_SEARCH_PATHS = "\"$(LOCAL_LIBRARY_DIR)/Frameworks\"";
+				HEADER_SEARCH_PATHS = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/SDL.framework/Headers\" \"$(LOCAL_LIBRARY_DIR)/Frameworks/SDL_mixer.framework/Headers\" \"$(LOCAL_LIBRARY_DIR)/Frameworks/OpenAL.framework/Headers\" \"$(LOCAL_LIBRARY_DIR)/Frameworks/libpng.framework/Headers\"";
+				INSTALL_PATH = "$(HOME)/Applications";
+				OPTIMIZATION_CFLAGS = "-O0";
+				OTHER_CFLAGS = "-DMAC_ALERT -DUNIXCOMMON  -DSDLMAIN -DHAVE_MIXER -DHAVE_PNG -D_BIG_ENDIAN -DSTDC_HEADERS -DSDL -Wall -W -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -fno-strict-aliasing -fno-exceptions -D_DEBUG";
+				OTHER_REZFLAGS = "";
+				PREBINDING = NO;
+				PRODUCT_NAME = Srb2Debug;
+				SECTORDER_FLAGS = "";
+				USE_GCC3_PFE_SUPPORT = NO;
+				WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas -Wno-long-double";
+				WRAPPER_EXTENSION = app;
+			};
+			dependencies = (
+			);
+			isa = PBXApplicationTarget;
+			name = Srb2Debug;
+			productInstallPath = "$(HOME)/Applications";
+			productName = Srb2Debug;
+			productReference = 841779EA085A13B1000C01D8;
+			productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
+<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
+<plist version=\"1.0\">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>Srb2Debug</string>
+	<key>CFBundleGetInfoString</key>
+	<string></string>
+	<key>CFBundleIconFile</key>
+	<string>srb2mac</string>
+	<key>CFBundleIdentifier</key>
+	<string></string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>Sonic Robo Blast 2</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.09</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1.09 Debug</string>
+	<key>NSMainNibFile</key>
+	<string>SDL_Main.nib</string>
+	<key>NSPrincipalClass</key>
+	<string>NSApplication</string>
+</dict>
+</plist>
+";
+		};
+		841779EA085A13B1000C01D8 = {
+			isa = PBXApplicationReference;
+			path = Srb2Debug.app;
+			refType = 3;
+		};
+		84177A2A085A18A8000C01D8 = {
+			fileRef = 84177713085A0FCE000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A2E085A18D2000C01D8 = {
+			fileRef = 84177717085A0FCE000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A30085A18D3000C01D8 = {
+			fileRef = 84177719085A0FCE000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A32085A18D4000C01D8 = {
+			fileRef = 8417771B085A0FCE000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A34085A18D5000C01D8 = {
+			fileRef = 8417771D085A0FCE000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A39085A18D8000C01D8 = {
+			fileRef = 84177722085A0FCE000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A41085A18E0000C01D8 = {
+			fileRef = 8417772A085A100E000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A43085A18E1000C01D8 = {
+			fileRef = 8417772C085A100E000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A46085A18E8000C01D8 = {
+			fileRef = 841778C4085A1295000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A4A085A18EA000C01D8 = {
+			fileRef = 8417772D085A1029000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A4E085A18EC000C01D8 = {
+			fileRef = 841779D4085A1296000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A50085A18F2000C01D8 = {
+			fileRef = 8417772F085A1029000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A52085A193F000C01D8 = {
+			fileRef = 841778C2085A1295000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A53085A1940000C01D8 = {
+			fileRef = 841778C0085A1295000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A54085A1942000C01D8 = {
+			fileRef = 841778BE085A1295000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A55085A1943000C01D8 = {
+			fileRef = 84177732085A1040000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A56085A195A000C01D8 = {
+			fileRef = 841779D2085A1296000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A57085A195B000C01D8 = {
+			fileRef = 841779D8085A1296000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A58085A1968000C01D8 = {
+			fileRef = 84177734085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A59085A1969000C01D8 = {
+			fileRef = 84177735085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A5A085A196B000C01D8 = {
+			fileRef = 84177739085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A5B085A197A000C01D8 = {
+			fileRef = 8417773D085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A5C085A197C000C01D8 = {
+			fileRef = 8417773F085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A5D085A197D000C01D8 = {
+			fileRef = 84177741085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A5E085A197E000C01D8 = {
+			fileRef = 84177743085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A5F085A1980000C01D8 = {
+			fileRef = 84177745085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A61085A1985000C01D8 = {
+			fileRef = 84177749085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A62085A1986000C01D8 = {
+			fileRef = 8417774B085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A63085A1988000C01D8 = {
+			fileRef = 8417774E085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A64085A1989000C01D8 = {
+			fileRef = 8417774F085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A65085A198A000C01D8 = {
+			fileRef = 84177750085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A66085A198A000C01D8 = {
+			fileRef = 84177751085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A67085A198B000C01D8 = {
+			fileRef = 84177752085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A68085A198C000C01D8 = {
+			fileRef = 84177753085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A69085A198E000C01D8 = {
+			fileRef = 84177755085A10AA000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A6B085A1994000C01D8 = {
+			fileRef = 841777AA085A1200000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A6C085A1995000C01D8 = {
+			fileRef = 841777AD085A1200000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A6D085A199D000C01D8 = {
+			fileRef = 8417774C085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A6E085A19A0000C01D8 = {
+			fileRef = 8417775A085A10EB000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A6F085A19A1000C01D8 = {
+			fileRef = 8417775C085A10EB000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A70085A19A2000C01D8 = {
+			fileRef = 8417775E085A10EB000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A71085A19A4000C01D8 = {
+			fileRef = 84177760085A10EB000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A72085A19A5000C01D8 = {
+			fileRef = 84177762085A10EB000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A73085A19A6000C01D8 = {
+			fileRef = 84177764085A10EB000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A74085A19A7000C01D8 = {
+			fileRef = 84177766085A10EB000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A75085A19AC000C01D8 = {
+			fileRef = 84177769085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A76085A19AD000C01D8 = {
+			fileRef = 8417776A085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A77085A19AE000C01D8 = {
+			fileRef = 8417776B085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A78085A19AE000C01D8 = {
+			fileRef = 8417776C085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A79085A19AF000C01D8 = {
+			fileRef = 8417776D085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A7A085A19B0000C01D8 = {
+			fileRef = 8417776E085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A7B085A19B3000C01D8 = {
+			fileRef = 84177770085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A7C085A19B4000C01D8 = {
+			fileRef = 84177771085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A7D085A19B5000C01D8 = {
+			fileRef = 84177773085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A7E085A19B7000C01D8 = {
+			fileRef = 84177776085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A7F085A19B8000C01D8 = {
+			fileRef = 84177778085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A80085A19B9000C01D8 = {
+			fileRef = 8417777A085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A81085A19BA000C01D8 = {
+			fileRef = 8417777B085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A82085A19BB000C01D8 = {
+			fileRef = 8417777D085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A83085A19BB000C01D8 = {
+			fileRef = 8417777E085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A84085A19BC000C01D8 = {
+			fileRef = 84177780085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A85085A19C1000C01D8 = {
+			fileRef = 84177781085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A86085A19C2000C01D8 = {
+			fileRef = 84177783085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A87085A19C3000C01D8 = {
+			fileRef = 84177786085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A88085A19C6000C01D8 = {
+			fileRef = 8417778B085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A89085A19C7000C01D8 = {
+			fileRef = 8417778D085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A8A085A19C9000C01D8 = {
+			fileRef = 8417778F085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A8B085A19CC000C01D8 = {
+			fileRef = 84177791085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A8C085A19CD000C01D8 = {
+			fileRef = 84177793085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A8D085A19CF000C01D8 = {
+			fileRef = 84177796085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A8E085A19D0000C01D8 = {
+			fileRef = 841777A2085A1197000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A90085A19D8000C01D8 = {
+			fileRef = 84177798085A1138000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A91085A19D9000C01D8 = {
+			fileRef = 8417779A085A1138000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A92085A19DD000C01D8 = {
+			fileRef = 8417779C085A114C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A93085A19DF000C01D8 = {
+			fileRef = 8417779F085A116B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A94085A19E1000C01D8 = {
+			fileRef = 841777A0085A117F000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A95085A19E3000C01D8 = {
+			fileRef = 841777AF085A1228000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A96085A19E6000C01D8 = {
+			fileRef = 841778BC085A122A000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A98085A1A0B000C01D8 = {
+			fileRef = 84177713085A0FCE000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A99085A1A0E000C01D8 = {
+			fileRef = 84177717085A0FCE000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A9A085A1A0F000C01D8 = {
+			fileRef = 84177719085A0FCE000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A9B085A1A11000C01D8 = {
+			fileRef = 8417771B085A0FCE000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A9C085A1A12000C01D8 = {
+			fileRef = 8417771D085A0FCE000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A9D085A1A14000C01D8 = {
+			fileRef = 84177722085A0FCE000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177A9F085A1A1E000C01D8 = {
+			fileRef = 8417772A085A100E000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AA0085A1A1F000C01D8 = {
+			fileRef = 8417772C085A100E000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AA1085A1A24000C01D8 = {
+			fileRef = 841778C4085A1295000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AA2085A1A25000C01D8 = {
+			fileRef = 8417772D085A1029000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AA3085A1A27000C01D8 = {
+			fileRef = 8417772F085A1029000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AA4085A1A28000C01D8 = {
+			fileRef = 841779D4085A1296000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AA5085A1A2B000C01D8 = {
+			fileRef = 841778BE085A1295000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AA6085A1A2C000C01D8 = {
+			fileRef = 841778C2085A1295000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AA7085A1A2D000C01D8 = {
+			fileRef = 841778C0085A1295000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AA8085A1A2F000C01D8 = {
+			fileRef = 84177732085A1040000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AA9085A1A30000C01D8 = {
+			fileRef = 841779D2085A1296000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AAA085A1A31000C01D8 = {
+			fileRef = 841779D8085A1296000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AB4085A1A5E000C01D8 = {
+			fileRef = 84177749085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AB5085A1A60000C01D8 = {
+			fileRef = 8417774B085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AB8085A1A65000C01D8 = {
+			fileRef = 8417774E085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AB9085A1A65000C01D8 = {
+			fileRef = 8417774F085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177ABA085A1A66000C01D8 = {
+			fileRef = 84177750085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177ABB085A1A67000C01D8 = {
+			fileRef = 84177751085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177ABC085A1A67000C01D8 = {
+			fileRef = 84177752085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177ABD085A1A68000C01D8 = {
+			fileRef = 84177753085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AC1085A1A70000C01D8 = {
+			fileRef = 841777AA085A1200000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AC2085A1A72000C01D8 = {
+			fileRef = 841777AD085A1200000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AC3085A1A77000C01D8 = {
+			fileRef = 8417775A085A10EB000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AC4085A1A78000C01D8 = {
+			fileRef = 8417775C085A10EB000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AC5085A1A7A000C01D8 = {
+			fileRef = 8417775E085A10EB000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AC6085A1A7B000C01D8 = {
+			fileRef = 84177760085A10EB000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AC7085A1A7C000C01D8 = {
+			fileRef = 84177762085A10EB000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AC8085A1A7D000C01D8 = {
+			fileRef = 84177764085A10EB000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AC9085A1A7F000C01D8 = {
+			fileRef = 84177766085A10EB000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177ACA085A1A87000C01D8 = {
+			fileRef = 84177769085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177ACB085A1A88000C01D8 = {
+			fileRef = 8417776A085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177ACC085A1A88000C01D8 = {
+			fileRef = 8417776B085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177ACD085A1A89000C01D8 = {
+			fileRef = 8417776C085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177ACE085A1A8A000C01D8 = {
+			fileRef = 8417776D085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177ACF085A1A8B000C01D8 = {
+			fileRef = 8417776E085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AD0085A1A8C000C01D8 = {
+			fileRef = 84177770085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AD1085A1A8D000C01D8 = {
+			fileRef = 84177771085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AD2085A1A90000C01D8 = {
+			fileRef = 84177773085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AD4085A1A92000C01D8 = {
+			fileRef = 84177778085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AD5085A1A93000C01D8 = {
+			fileRef = 8417777A085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AD6085A1A94000C01D8 = {
+			fileRef = 8417777B085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AD7085A1A97000C01D8 = {
+			fileRef = 8417777D085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AD8085A1A97000C01D8 = {
+			fileRef = 8417777E085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AD9085A1A99000C01D8 = {
+			fileRef = 84177780085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177ADA085A1A9F000C01D8 = {
+			fileRef = 84177781085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177ADB085A1AA0000C01D8 = {
+			fileRef = 84177783085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177ADC085A1AA2000C01D8 = {
+			fileRef = 84177786085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177ADF085A1AA4000C01D8 = {
+			fileRef = 8417778B085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AE0085A1AA6000C01D8 = {
+			fileRef = 8417778D085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AE1085A1AA7000C01D8 = {
+			fileRef = 8417778F085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AE2085A1AA8000C01D8 = {
+			fileRef = 84177791085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AE3085A1AA9000C01D8 = {
+			fileRef = 84177793085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AE4085A1AAA000C01D8 = {
+			fileRef = 84177796085A111B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AE5085A1AAE000C01D8 = {
+			fileRef = 841777A2085A1197000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AE7085A1AB5000C01D8 = {
+			fileRef = 84177798085A1138000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AE8085A1AB6000C01D8 = {
+			fileRef = 8417779A085A1138000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AEB085A1ABD000C01D8 = {
+			fileRef = 841777AF085A1228000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AEC085A1ABF000C01D8 = {
+			fileRef = 841777A0085A117F000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84177AED085A1ABF000C01D8 = {
+			fileRef = 841778BC085A122A000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D432085DF3D6000C01D8 = {
+			fileRef = 84177776085A1104000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D433085DF537000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = y_inter.h;
+			path = ../../y_inter.h;
+			refType = 2;
+		};
+		8490D436085DF57B000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = v_video.c;
+			path = ../../v_video.c;
+			refType = 2;
+		};
+		8490D437085DF57B000C01D8 = {
+			fileRef = 8490D436085DF57B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D438085DF57B000C01D8 = {
+			fileRef = 8490D436085DF57B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D43C085E0518000C01D8 = {
+			fileRef = 8417779F085A116B000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D43D085E05F6000C01D8 = {
+			fileRef = 84177734085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D43E085E05F7000C01D8 = {
+			fileRef = 84177735085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D43F085E05F8000C01D8 = {
+			fileRef = 84177739085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D440085E05FA000C01D8 = {
+			fileRef = 8417773D085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D441085E05FB000C01D8 = {
+			fileRef = 8417773F085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D442085E05FC000C01D8 = {
+			fileRef = 84177741085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D443085E05FE000C01D8 = {
+			fileRef = 84177743085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D444085E05FF000C01D8 = {
+			fileRef = 84177745085A106C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D445085E0606000C01D8 = {
+			fileRef = 8417774C085A1097000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D446085E060A000C01D8 = {
+			fileRef = 84177755085A10AA000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D447085E060B000C01D8 = {
+			fileRef = 84177758085A10D2000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8490D448085E067E000C01D8 = {
+			fileRef = 8417779C085A114C000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		8494DFE80886EA0D000C01D8 = {
+			fileRef = 84C4E04B08620A46000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		849603A80A791C11000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = comptime.c;
+			path = ../../comptime.c;
+			refType = 2;
+		};
+		849603A90A791C11000C01D8 = {
+			fileRef = 849603A80A791C11000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		849603AA0A791C11000C01D8 = {
+			fileRef = 849603A80A791C11000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		849BD31C0A7E45B3000C01D8 = {
+			isa = PBXFrameworkReference;
+			name = libpng.framework;
+			path = /Library/Frameworks/libpng.framework;
+			refType = 0;
+		};
+		849BD31D0A7E45B3000C01D8 = {
+			fileRef = 849BD31C0A7E45B3000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		849BD31E0A7E45B3000C01D8 = {
+			fileRef = 849BD31C0A7E45B3000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		849BD32D0A7E471D000C01D8 = {
+			fileRef = 849BD31C0A7E45B3000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84C4E00D0862063C000C01D8 = {
+			children = (
+				6755C8BE101802C300A80195,
+				6755C8BF101802C300A80195,
+				6755C8C0101802C300A80195,
+				6755C8C1101802C300A80195,
+				6755C8C2101802C300A80195,
+				6755C8C3101802C300A80195,
+				6755C8C4101802C300A80195,
+				6755C8C5101802C300A80195,
+				6755C8C6101802C300A80195,
+			);
+			isa = PBXGroup;
+			name = Data;
+			refType = 4;
+		};
+		84C4E03F0862096F000C01D8 = {
+			isa = PBXFrameworkReference;
+			name = AppKit.framework;
+			path = /System/Library/Frameworks/AppKit.framework;
+			refType = 0;
+		};
+		84C4E0400862096F000C01D8 = {
+			fileRef = 84C4E03F0862096F000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84C4E0410862096F000C01D8 = {
+			fileRef = 84C4E03F0862096F000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84C4E0420862098A000C01D8 = {
+			isa = PBXFrameworkReference;
+			name = Foundation.framework;
+			path = /System/Library/Frameworks/Foundation.framework;
+			refType = 0;
+		};
+		84C4E0430862098A000C01D8 = {
+			fileRef = 84C4E0420862098A000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84C4E0440862098A000C01D8 = {
+			fileRef = 84C4E0420862098A000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84C4E045086209D3000C01D8 = {
+			isa = PBXFrameworkReference;
+			name = CoreFoundation.framework;
+			path = /System/Library/Frameworks/CoreFoundation.framework;
+			refType = 0;
+		};
+		84C4E046086209D3000C01D8 = {
+			fileRef = 84C4E045086209D3000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84C4E047086209D3000C01D8 = {
+			fileRef = 84C4E045086209D3000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84C4E048086209FF000C01D8 = {
+			isa = PBXFrameworkReference;
+			name = ApplicationServices.framework;
+			path = /System/Library/Frameworks/ApplicationServices.framework;
+			refType = 0;
+		};
+		84C4E049086209FF000C01D8 = {
+			fileRef = 84C4E048086209FF000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84C4E04A086209FF000C01D8 = {
+			fileRef = 84C4E048086209FF000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84C4E04B08620A46000C01D8 = {
+			isa = PBXFrameworkReference;
+			name = SDL_mixer.framework;
+			path = /Library/Frameworks/SDL_mixer.framework;
+			refType = 0;
+		};
+		84C4E04C08620A46000C01D8 = {
+			isa = PBXFrameworkReference;
+			name = SDL.framework;
+			path = /Library/Frameworks/SDL.framework;
+			refType = 0;
+		};
+		84C4E04E08620A46000C01D8 = {
+			fileRef = 84C4E04C08620A46000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84C4E04F08620A46000C01D8 = {
+			fileRef = 84C4E04B08620A46000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84C4E05008620A46000C01D8 = {
+			fileRef = 84C4E04C08620A46000C01D8;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		84F202C708A92A5D000C01D8 = {
+			isa = PBXFrameworkReference;
+			name = OpenAL.framework;
+			path = /Library/Frameworks/OpenAL.framework;
+			refType = 0;
+		};
+		84F202CA08A92AA0000C01D8 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = s_openal.c;
+			path = ../../hardware/s_openal/s_openal.c;
+			refType = 2;
+		};
+	};
+	rootObject = 84177702085A0C64000C01D8;
+}
diff --git a/src/sdl2/macosx/Srb2mac.xcodeproj/project.pbxproj b/src/sdl2/macosx/Srb2mac.xcodeproj/project.pbxproj
new file mode 100644
index 000000000..f898a9934
--- /dev/null
+++ b/src/sdl2/macosx/Srb2mac.xcodeproj/project.pbxproj
@@ -0,0 +1,1508 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 44;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		002F39FA09D0881F00EBEB88 /* SDL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002F39F909D0881F00EBEB88 /* SDL.framework */; };
+		002F3A0009D0884600EBEB88 /* SDL.framework in Copy Frameworks into .app bundle */ = {isa = PBXBuildFile; fileRef = 002F39F909D0881F00EBEB88 /* SDL.framework */; };
+		1E308E720B71172D0015728C /* lzf.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44B2240B67EADE00BAD059 /* lzf.c */; };
+		1E32C4290B6E6D5D0029E058 /* libpng.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E32C4140B6E6D5D0029E058 /* libpng.framework */; };
+		1E32C42B0B6E6D6E0029E058 /* libpng.framework in Copy Frameworks into .app bundle */ = {isa = PBXBuildFile; fileRef = 1E32C4140B6E6D5D0029E058 /* libpng.framework */; };
+		1E44AE750B67CC2B00BAD059 /* hw_bsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AE610B67CC2B00BAD059 /* hw_bsp.c */; };
+		1E44AE770B67CC2B00BAD059 /* hw3sound.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AE630B67CC2B00BAD059 /* hw3sound.c */; };
+		1E44AE780B67CC2B00BAD059 /* hw_cache.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AE640B67CC2B00BAD059 /* hw_cache.c */; };
+		1E44AE7C0B67CC2B00BAD059 /* hw_light.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AE680B67CC2B00BAD059 /* hw_light.c */; };
+		1E44AE800B67CC2B00BAD059 /* hw_draw.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AE6C0B67CC2B00BAD059 /* hw_draw.c */; };
+		1E44AE820B67CC2B00BAD059 /* hw_main.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AE6E0B67CC2B00BAD059 /* hw_main.c */; };
+		1E44AE840B67CC2B00BAD059 /* hw_md2.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AE700B67CC2B00BAD059 /* hw_md2.c */; };
+		1E44AE860B67CC2B00BAD059 /* hw_trick.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AE720B67CC2B00BAD059 /* hw_trick.c */; };
+		1E44AEA40B67CC8500BAD059 /* d_clisrv.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AE8D0B67CC8400BAD059 /* d_clisrv.c */; };
+		1E44AEA70B67CC8500BAD059 /* d_main.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AE900B67CC8400BAD059 /* d_main.c */; };
+		1E44AEA80B67CC8500BAD059 /* d_net.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AE910B67CC8500BAD059 /* d_net.c */; };
+		1E44AEAB0B67CC8500BAD059 /* d_netfil.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AE940B67CC8500BAD059 /* d_netfil.c */; };
+		1E44AEAF0B67CC8500BAD059 /* d_netcmd.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AE980B67CC8500BAD059 /* d_netcmd.c */; };
+		1E44AEB30B67CC8500BAD059 /* dehacked.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AE9C0B67CC8500BAD059 /* dehacked.c */; };
+		1E44AEBF0B67CCA900BAD059 /* f_wipe.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEBC0B67CCA900BAD059 /* f_wipe.c */; };
+		1E44AEC00B67CCA900BAD059 /* f_finale.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEBD0B67CCA900BAD059 /* f_finale.c */; };
+		1E44AEC80B67CCC600BAD059 /* g_game.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEC30B67CCC600BAD059 /* g_game.c */; };
+		1E44AECC0B67CCC600BAD059 /* g_input.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEC70B67CCC600BAD059 /* g_input.c */; };
+		1E44AED00B67CCEE00BAD059 /* hu_stuff.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AECE0B67CCEE00BAD059 /* hu_stuff.c */; };
+		1E44AEDC0B67CD1300BAD059 /* i_tcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AED50B67CD1200BAD059 /* i_tcp.c */; };
+		1E44AEE30B67CD2B00BAD059 /* am_map.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEE10B67CD2B00BAD059 /* am_map.c */; };
+		1E44AEE90B67CD3F00BAD059 /* command.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEE70B67CD3F00BAD059 /* command.c */; };
+		1E44AEEC0B67CD4400BAD059 /* comptime.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEEB0B67CD4400BAD059 /* comptime.c */; };
+		1E44AEEF0B67CD5400BAD059 /* console.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEED0B67CD5400BAD059 /* console.c */; };
+		1E44AEF30B67CD7F00BAD059 /* filesrch.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEF10B67CD7F00BAD059 /* filesrch.c */; };
+		1E44AF070B67CDE900BAD059 /* m_argv.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEF80B67CDE900BAD059 /* m_argv.c */; };
+		1E44AF0A0B67CDE900BAD059 /* m_cheat.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEFB0B67CDE900BAD059 /* m_cheat.c */; };
+		1E44AF0B0B67CDE900BAD059 /* m_bbox.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEFC0B67CDE900BAD059 /* m_bbox.c */; };
+		1E44AF0D0B67CDE900BAD059 /* m_fixed.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AEFE0B67CDE900BAD059 /* m_fixed.c */; };
+		1E44AF0F0B67CDE900BAD059 /* m_menu.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF000B67CDE900BAD059 /* m_menu.c */; };
+		1E44AF110B67CDE900BAD059 /* m_misc.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF020B67CDE900BAD059 /* m_misc.c */; };
+		1E44AF130B67CDE900BAD059 /* m_random.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF040B67CDE900BAD059 /* m_random.c */; };
+		1E44AF1A0B67CE2A00BAD059 /* info.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF180B67CE2A00BAD059 /* info.c */; };
+		1E44AF1E0B67CE3600BAD059 /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF1C0B67CE3600BAD059 /* md5.c */; };
+		1E44AF220B67CE4100BAD059 /* mserv.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF200B67CE4100BAD059 /* mserv.c */; };
+		1E44AF3C0B67CE5F00BAD059 /* p_enemy.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF240B67CE5F00BAD059 /* p_enemy.c */; };
+		1E44AF3D0B67CE5F00BAD059 /* p_inter.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF250B67CE5F00BAD059 /* p_inter.c */; };
+		1E44AF3E0B67CE5F00BAD059 /* p_fab.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF260B67CE5F00BAD059 /* p_fab.c */; };
+		1E44AF3F0B67CE5F00BAD059 /* p_lights.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF270B67CE5F00BAD059 /* p_lights.c */; };
+		1E44AF400B67CE5F00BAD059 /* p_map.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF280B67CE5F00BAD059 /* p_map.c */; };
+		1E44AF410B67CE5F00BAD059 /* p_maputl.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF290B67CE5F00BAD059 /* p_maputl.c */; };
+		1E44AF430B67CE5F00BAD059 /* p_mobj.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF2B0B67CE5F00BAD059 /* p_mobj.c */; };
+		1E44AF450B67CE5F00BAD059 /* p_floor.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF2D0B67CE5F00BAD059 /* p_floor.c */; };
+		1E44AF480B67CE5F00BAD059 /* p_saveg.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF300B67CE5F00BAD059 /* p_saveg.c */; };
+		1E44AF4A0B67CE5F00BAD059 /* p_setup.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF320B67CE5F00BAD059 /* p_setup.c */; };
+		1E44AF4C0B67CE5F00BAD059 /* p_sight.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF340B67CE5F00BAD059 /* p_sight.c */; };
+		1E44AF4D0B67CE5F00BAD059 /* p_spec.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF350B67CE5F00BAD059 /* p_spec.c */; };
+		1E44AF4F0B67CE5F00BAD059 /* p_telept.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF370B67CE5F00BAD059 /* p_telept.c */; };
+		1E44AF500B67CE5F00BAD059 /* p_tick.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF380B67CE5F00BAD059 /* p_tick.c */; };
+		1E44AF520B67CE5F00BAD059 /* p_user.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF3A0B67CE5F00BAD059 /* p_user.c */; };
+		1E44AF530B67CE5F00BAD059 /* p_ceilng.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF3B0B67CE5F00BAD059 /* p_ceilng.c */; };
+		1E44AF6C0B67CEC200BAD059 /* r_bsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF550B67CEC100BAD059 /* r_bsp.c */; };
+		1E44AF6F0B67CEC200BAD059 /* r_data.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF580B67CEC100BAD059 /* r_data.c */; };
+		1E44AF700B67CEC200BAD059 /* r_draw.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF590B67CEC100BAD059 /* r_draw.c */; };
+		1E44AF730B67CEC200BAD059 /* r_main.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF5C0B67CEC100BAD059 /* r_main.c */; };
+		1E44AF780B67CEC200BAD059 /* r_plane.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF610B67CEC100BAD059 /* r_plane.c */; };
+		1E44AF7A0B67CEC200BAD059 /* r_segs.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF630B67CEC100BAD059 /* r_segs.c */; };
+		1E44AF7C0B67CEC200BAD059 /* r_sky.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF650B67CEC200BAD059 /* r_sky.c */; };
+		1E44AF7E0B67CEC200BAD059 /* r_splats.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF670B67CEC200BAD059 /* r_splats.c */; };
+		1E44AF810B67CEC200BAD059 /* r_things.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF6A0B67CEC200BAD059 /* r_things.c */; };
+		1E44AF870B67CEE000BAD059 /* s_sound.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF850B67CEE000BAD059 /* s_sound.c */; };
+		1E44AF8B0B67CEE900BAD059 /* screen.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF890B67CEE900BAD059 /* screen.c */; };
+		1E44AF8F0B67CEF000BAD059 /* sounds.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF8D0B67CEF000BAD059 /* sounds.c */; };
+		1E44AF930B67CEFF00BAD059 /* st_stuff.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF910B67CEFF00BAD059 /* st_stuff.c */; };
+		1E44AF9B0B67CF2E00BAD059 /* tables.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AF990B67CF2E00BAD059 /* tables.c */; };
+		1E44AFA50B67CF5D00BAD059 /* v_video.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AFA30B67CF5D00BAD059 /* v_video.c */; };
+		1E44AFA90B67CF6400BAD059 /* w_wad.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AFA70B67CF6400BAD059 /* w_wad.c */; };
+		1E44AFAD0B67CF6F00BAD059 /* y_inter.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AFAB0B67CF6F00BAD059 /* y_inter.c */; };
+		1E44AFB10B67CF7A00BAD059 /* z_zone.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AFAF0B67CF7A00BAD059 /* z_zone.c */; };
+		1E44AFC40B67CFDC00BAD059 /* dosstr.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AFB40B67CFDC00BAD059 /* dosstr.c */; };
+		1E44AFC50B67CFDC00BAD059 /* endtxt.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AFB50B67CFDC00BAD059 /* endtxt.c */; };
+		1E44AFC70B67CFDC00BAD059 /* hwsym_sdl.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AFB70B67CFDC00BAD059 /* hwsym_sdl.c */; };
+		1E44AFC90B67CFDC00BAD059 /* i_cdmus.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AFB90B67CFDC00BAD059 /* i_cdmus.c */; };
+		1E44AFCA0B67CFDC00BAD059 /* i_main.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AFBA0B67CFDC00BAD059 /* i_main.c */; };
+		1E44AFCB0B67CFDC00BAD059 /* i_net.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AFBB0B67CFDC00BAD059 /* i_net.c */; };
+		1E44AFCD0B67CFDC00BAD059 /* i_system.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AFBD0B67CFDC00BAD059 /* i_system.c */; };
+		1E44AFCE0B67CFDC00BAD059 /* i_video.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AFBE0B67CFDC00BAD059 /* i_video.c */; };
+		1E44AFD00B67CFDC00BAD059 /* ogl_sdl.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AFC00B67CFDC00BAD059 /* ogl_sdl.c */; };
+		1E44AFEA0B67D06200BAD059 /* Srb2mac.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1E44AFE70B67D06200BAD059 /* Srb2mac.icns */; };
+		1E44AFEB0B67D06200BAD059 /* mac_alert.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AFE80B67D06200BAD059 /* mac_alert.c */; };
+		1E44AFED0B67D0AB00BAD059 /* r_opengl.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E44AFEC0B67D0AB00BAD059 /* r_opengl.c */; };
+		1E44B0590B67D81E00BAD059 /* SDL_macosx_main.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E44B0570B67D81E00BAD059 /* SDL_macosx_main.m */; };
+		1E66921C0B690C5B00B7313A /* SDL_mixer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E66921B0B690C5B00B7313A /* SDL_mixer.framework */; };
+		1E66921D0B690C6B00B7313A /* SDL_mixer.framework in Copy Frameworks into .app bundle */ = {isa = PBXBuildFile; fileRef = 1E66921B0B690C5B00B7313A /* SDL_mixer.framework */; };
+		67259DFD18D2687D00F02971 /* lua_hudlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 67259DFB18D2687D00F02971 /* lua_hudlib.c */; };
+		67259DFE18D2687D00F02971 /* lua_skinlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 67259DFC18D2687D00F02971 /* lua_skinlib.c */; };
+		67259E0118D268AE00F02971 /* m_anigif.c in Sources */ = {isa = PBXBuildFile; fileRef = 67259DFF18D268AE00F02971 /* m_anigif.c */; };
+		67259E0618D268F700F02971 /* i_ttf.c in Sources */ = {isa = PBXBuildFile; fileRef = 67259E0218D268F600F02971 /* i_ttf.c */; };
+		67259E0718D268F700F02971 /* mixer_sound.c in Sources */ = {isa = PBXBuildFile; fileRef = 67259E0418D268F600F02971 /* mixer_sound.c */; };
+		67259E0818D268F700F02971 /* sdl_sound.c in Sources */ = {isa = PBXBuildFile; fileRef = 67259E0518D268F600F02971 /* sdl_sound.c */; };
+		67259E2E18D26D5700F02971 /* patch.dta in Resources */ = {isa = PBXBuildFile; fileRef = 67259E2B18D26D5700F02971 /* patch.dta */; };
+		67259E2F18D26D5700F02971 /* rings.dta in Resources */ = {isa = PBXBuildFile; fileRef = 67259E2C18D26D5700F02971 /* rings.dta */; };
+		67259E3018D26D5700F02971 /* srb2.srb in Resources */ = {isa = PBXBuildFile; fileRef = 67259E2D18D26D5700F02971 /* srb2.srb */; };
+		67259E3218D26DD200F02971 /* music.dta in Resources */ = {isa = PBXBuildFile; fileRef = 1E44AE440B67CBE800BAD059 /* music.dta */; };
+		67259E3318D26DD300F02971 /* player.dta in Resources */ = {isa = PBXBuildFile; fileRef = 67A1F91813FAD026009FA3E5 /* player.dta */; };
+		67259E3518D26DD500F02971 /* zones.dta in Resources */ = {isa = PBXBuildFile; fileRef = 6766C0AE11B057E50065F389 /* zones.dta */; };
+		676BB5200E0DE06100C95963 /* m_queue.c in Sources */ = {isa = PBXBuildFile; fileRef = 676BB51C0E0DE06100C95963 /* m_queue.c */; };
+		676BB5220E0DE06100C95963 /* p_polyobj.c in Sources */ = {isa = PBXBuildFile; fileRef = 676BB51E0E0DE06100C95963 /* p_polyobj.c */; };
+		67B83BFA14F57EAB00AAAE4E /* lapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BCB14F57EAB00AAAE4E /* lapi.c */; };
+		67B83BFB14F57EAB00AAAE4E /* lauxlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BCD14F57EAB00AAAE4E /* lauxlib.c */; };
+		67B83BFC14F57EAB00AAAE4E /* lbaselib.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BCF14F57EAB00AAAE4E /* lbaselib.c */; };
+		67B83BFD14F57EAB00AAAE4E /* lcode.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BD014F57EAB00AAAE4E /* lcode.c */; };
+		67B83BFE14F57EAB00AAAE4E /* ldebug.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BD214F57EAB00AAAE4E /* ldebug.c */; };
+		67B83BFF14F57EAB00AAAE4E /* ldo.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BD414F57EAB00AAAE4E /* ldo.c */; };
+		67B83C0014F57EAB00AAAE4E /* ldump.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BD614F57EAB00AAAE4E /* ldump.c */; };
+		67B83C0114F57EAB00AAAE4E /* lfunc.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BD714F57EAB00AAAE4E /* lfunc.c */; };
+		67B83C0214F57EAB00AAAE4E /* lgc.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BD914F57EAB00AAAE4E /* lgc.c */; };
+		67B83C0314F57EAB00AAAE4E /* linit.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BDB14F57EAB00AAAE4E /* linit.c */; };
+		67B83C0414F57EAB00AAAE4E /* llex.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BDC14F57EAB00AAAE4E /* llex.c */; };
+		67B83C0514F57EAB00AAAE4E /* lmem.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BDF14F57EAB00AAAE4E /* lmem.c */; };
+		67B83C0614F57EAB00AAAE4E /* lobject.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BE114F57EAB00AAAE4E /* lobject.c */; };
+		67B83C0714F57EAB00AAAE4E /* lopcodes.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BE314F57EAB00AAAE4E /* lopcodes.c */; };
+		67B83C0814F57EAB00AAAE4E /* lparser.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BE514F57EAB00AAAE4E /* lparser.c */; };
+		67B83C0914F57EAB00AAAE4E /* lstate.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BE714F57EAB00AAAE4E /* lstate.c */; };
+		67B83C0A14F57EAB00AAAE4E /* lstring.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BE914F57EAB00AAAE4E /* lstring.c */; };
+		67B83C0B14F57EAB00AAAE4E /* lstrlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BEB14F57EAB00AAAE4E /* lstrlib.c */; };
+		67B83C0C14F57EAB00AAAE4E /* ltable.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BEC14F57EAB00AAAE4E /* ltable.c */; };
+		67B83C0D14F57EAB00AAAE4E /* ltablib.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BEE14F57EAB00AAAE4E /* ltablib.c */; };
+		67B83C0E14F57EAB00AAAE4E /* ltm.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BEF14F57EAB00AAAE4E /* ltm.c */; };
+		67B83C0F14F57EAB00AAAE4E /* lundump.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BF414F57EAB00AAAE4E /* lundump.c */; };
+		67B83C1014F57EAB00AAAE4E /* lvm.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BF614F57EAB00AAAE4E /* lvm.c */; };
+		67B83C1114F57EAB00AAAE4E /* lzio.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83BF814F57EAB00AAAE4E /* lzio.c */; };
+		67B83C1414F57ECA00AAAE4E /* b_bot.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83C1214F57ECA00AAAE4E /* b_bot.c */; };
+		67B83C2214F57EE600AAAE4E /* lua_baselib.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83C1514F57EE600AAAE4E /* lua_baselib.c */; };
+		67B83C2314F57EE600AAAE4E /* lua_consolelib.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83C1614F57EE600AAAE4E /* lua_consolelib.c */; };
+		67B83C2414F57EE600AAAE4E /* lua_hooklib.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83C1814F57EE600AAAE4E /* lua_hooklib.c */; };
+		67B83C2514F57EE600AAAE4E /* lua_infolib.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83C1914F57EE600AAAE4E /* lua_infolib.c */; };
+		67B83C2614F57EE600AAAE4E /* lua_maplib.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83C1B14F57EE600AAAE4E /* lua_maplib.c */; };
+		67B83C2714F57EE600AAAE4E /* lua_mathlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83C1C14F57EE600AAAE4E /* lua_mathlib.c */; };
+		67B83C2814F57EE600AAAE4E /* lua_mobjlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83C1D14F57EE600AAAE4E /* lua_mobjlib.c */; };
+		67B83C2914F57EE600AAAE4E /* lua_playerlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83C1E14F57EE600AAAE4E /* lua_playerlib.c */; };
+		67B83C2A14F57EE600AAAE4E /* lua_script.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83C1F14F57EE600AAAE4E /* lua_script.c */; };
+		67B83C2B14F57EE600AAAE4E /* lua_thinkerlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83C2114F57EE600AAAE4E /* lua_thinkerlib.c */; };
+		67B83C3314F57F1500AAAE4E /* m_cond.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B83C2F14F57F1500AAAE4E /* m_cond.c */; };
+		8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
+		8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		002F39FD09D0883400EBEB88 /* Copy Frameworks into .app bundle */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 12;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				1E32C42B0B6E6D6E0029E058 /* libpng.framework in Copy Frameworks into .app bundle */,
+				1E66921D0B690C6B00B7313A /* SDL_mixer.framework in Copy Frameworks into .app bundle */,
+				002F3A0009D0884600EBEB88 /* SDL.framework in Copy Frameworks into .app bundle */,
+			);
+			name = "Copy Frameworks into .app bundle";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		002F39F909D0881F00EBEB88 /* SDL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL.framework; path = /Library/Frameworks/SDL.framework; sourceTree = "<absolute>"; };
+		089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
+		1E32C4140B6E6D5D0029E058 /* libpng.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libpng.framework; path = /Library/Frameworks/libpng.framework; sourceTree = "<absolute>"; };
+		1E44AE440B67CBE800BAD059 /* music.dta */ = {isa = PBXFileReference; lastKnownFileType = text; name = music.dta; path = ../../../bin/Resources/music.dta; sourceTree = SOURCE_ROOT; };
+		1E44AE4B0B67CBE800BAD059 /* srb2.wad */ = {isa = PBXFileReference; lastKnownFileType = text; name = srb2.wad; path = ../../../bin/Resources/srb2.wad; sourceTree = SOURCE_ROOT; };
+		1E44AE600B67CC2B00BAD059 /* hw3dsdrv.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hw3dsdrv.h; path = ../../hardware/hw3dsdrv.h; sourceTree = SOURCE_ROOT; };
+		1E44AE610B67CC2B00BAD059 /* hw_bsp.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hw_bsp.c; path = ../../hardware/hw_bsp.c; sourceTree = SOURCE_ROOT; };
+		1E44AE620B67CC2B00BAD059 /* hw_defs.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hw_defs.h; path = ../../hardware/hw_defs.h; sourceTree = SOURCE_ROOT; };
+		1E44AE630B67CC2B00BAD059 /* hw3sound.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hw3sound.c; path = ../../hardware/hw3sound.c; sourceTree = SOURCE_ROOT; };
+		1E44AE640B67CC2B00BAD059 /* hw_cache.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hw_cache.c; path = ../../hardware/hw_cache.c; sourceTree = SOURCE_ROOT; };
+		1E44AE650B67CC2B00BAD059 /* hw_dll.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hw_dll.h; path = ../../hardware/hw_dll.h; sourceTree = SOURCE_ROOT; };
+		1E44AE660B67CC2B00BAD059 /* hw_drv.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hw_drv.h; path = ../../hardware/hw_drv.h; sourceTree = SOURCE_ROOT; };
+		1E44AE670B67CC2B00BAD059 /* hw_glide.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hw_glide.h; path = ../../hardware/hw_glide.h; sourceTree = SOURCE_ROOT; };
+		1E44AE680B67CC2B00BAD059 /* hw_light.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hw_light.c; path = ../../hardware/hw_light.c; sourceTree = SOURCE_ROOT; };
+		1E44AE690B67CC2B00BAD059 /* hw_light.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hw_light.h; path = ../../hardware/hw_light.h; sourceTree = SOURCE_ROOT; };
+		1E44AE6A0B67CC2B00BAD059 /* hw3sound.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hw3sound.h; path = ../../hardware/hw3sound.h; sourceTree = SOURCE_ROOT; };
+		1E44AE6B0B67CC2B00BAD059 /* hw_data.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hw_data.h; path = ../../hardware/hw_data.h; sourceTree = SOURCE_ROOT; };
+		1E44AE6C0B67CC2B00BAD059 /* hw_draw.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hw_draw.c; path = ../../hardware/hw_draw.c; sourceTree = SOURCE_ROOT; };
+		1E44AE6D0B67CC2B00BAD059 /* hw_glob.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hw_glob.h; path = ../../hardware/hw_glob.h; sourceTree = SOURCE_ROOT; };
+		1E44AE6E0B67CC2B00BAD059 /* hw_main.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hw_main.c; path = ../../hardware/hw_main.c; sourceTree = SOURCE_ROOT; };
+		1E44AE6F0B67CC2B00BAD059 /* hw_main.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hw_main.h; path = ../../hardware/hw_main.h; sourceTree = SOURCE_ROOT; };
+		1E44AE700B67CC2B00BAD059 /* hw_md2.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hw_md2.c; path = ../../hardware/hw_md2.c; sourceTree = SOURCE_ROOT; };
+		1E44AE710B67CC2B00BAD059 /* hw_md2.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hw_md2.h; path = ../../hardware/hw_md2.h; sourceTree = SOURCE_ROOT; };
+		1E44AE720B67CC2B00BAD059 /* hw_trick.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hw_trick.c; path = ../../hardware/hw_trick.c; sourceTree = SOURCE_ROOT; };
+		1E44AE730B67CC2B00BAD059 /* hws_data.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hws_data.h; path = ../../hardware/hws_data.h; sourceTree = SOURCE_ROOT; };
+		1E44AE8A0B67CC6000BAD059 /* asm_defs.inc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.pascal; name = asm_defs.inc; path = ../../asm_defs.inc; sourceTree = SOURCE_ROOT; };
+		1E44AE8D0B67CC8400BAD059 /* d_clisrv.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = d_clisrv.c; path = ../../d_clisrv.c; sourceTree = SOURCE_ROOT; };
+		1E44AE8E0B67CC8400BAD059 /* d_clisrv.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = d_clisrv.h; path = ../../d_clisrv.h; sourceTree = SOURCE_ROOT; };
+		1E44AE8F0B67CC8400BAD059 /* d_event.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = d_event.h; path = ../../d_event.h; sourceTree = SOURCE_ROOT; };
+		1E44AE900B67CC8400BAD059 /* d_main.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = d_main.c; path = ../../d_main.c; sourceTree = SOURCE_ROOT; };
+		1E44AE910B67CC8500BAD059 /* d_net.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = d_net.c; path = ../../d_net.c; sourceTree = SOURCE_ROOT; };
+		1E44AE920B67CC8500BAD059 /* d_net.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = d_net.h; path = ../../d_net.h; sourceTree = SOURCE_ROOT; };
+		1E44AE930B67CC8500BAD059 /* d_netcmd.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = d_netcmd.h; path = ../../d_netcmd.h; sourceTree = SOURCE_ROOT; };
+		1E44AE940B67CC8500BAD059 /* d_netfil.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = d_netfil.c; path = ../../d_netfil.c; sourceTree = SOURCE_ROOT; };
+		1E44AE950B67CC8500BAD059 /* d_player.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = d_player.h; path = ../../d_player.h; sourceTree = SOURCE_ROOT; };
+		1E44AE960B67CC8500BAD059 /* d_think.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = d_think.h; path = ../../d_think.h; sourceTree = SOURCE_ROOT; };
+		1E44AE980B67CC8500BAD059 /* d_netcmd.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = d_netcmd.c; path = ../../d_netcmd.c; sourceTree = SOURCE_ROOT; };
+		1E44AE990B67CC8500BAD059 /* d_ticcmd.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = d_ticcmd.h; path = ../../d_ticcmd.h; sourceTree = SOURCE_ROOT; };
+		1E44AE9A0B67CC8500BAD059 /* d_main.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = d_main.h; path = ../../d_main.h; sourceTree = SOURCE_ROOT; };
+		1E44AE9B0B67CC8500BAD059 /* d_netfil.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = d_netfil.h; path = ../../d_netfil.h; sourceTree = SOURCE_ROOT; };
+		1E44AE9C0B67CC8500BAD059 /* dehacked.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dehacked.c; path = ../../dehacked.c; sourceTree = SOURCE_ROOT; };
+		1E44AE9D0B67CC8500BAD059 /* dehacked.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = dehacked.h; path = ../../dehacked.h; sourceTree = SOURCE_ROOT; };
+		1E44AE9E0B67CC8500BAD059 /* doomdata.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = doomdata.h; path = ../../doomdata.h; sourceTree = SOURCE_ROOT; };
+		1E44AE9F0B67CC8500BAD059 /* doomdef.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = doomdef.h; path = ../../doomdef.h; sourceTree = SOURCE_ROOT; };
+		1E44AEA00B67CC8500BAD059 /* doomstat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = doomstat.h; path = ../../doomstat.h; sourceTree = SOURCE_ROOT; };
+		1E44AEA10B67CC8500BAD059 /* doomtype.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = doomtype.h; path = ../../doomtype.h; sourceTree = SOURCE_ROOT; };
+		1E44AEBC0B67CCA900BAD059 /* f_wipe.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = f_wipe.c; path = ../../f_wipe.c; sourceTree = SOURCE_ROOT; };
+		1E44AEBD0B67CCA900BAD059 /* f_finale.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = f_finale.c; path = ../../f_finale.c; sourceTree = SOURCE_ROOT; };
+		1E44AEBE0B67CCA900BAD059 /* f_finale.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = f_finale.h; path = ../../f_finale.h; sourceTree = SOURCE_ROOT; };
+		1E44AEC30B67CCC600BAD059 /* g_game.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = g_game.c; path = ../../g_game.c; sourceTree = SOURCE_ROOT; };
+		1E44AEC40B67CCC600BAD059 /* g_game.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = g_game.h; path = ../../g_game.h; sourceTree = SOURCE_ROOT; };
+		1E44AEC50B67CCC600BAD059 /* g_input.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = g_input.h; path = ../../g_input.h; sourceTree = SOURCE_ROOT; };
+		1E44AEC60B67CCC600BAD059 /* g_state.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = g_state.h; path = ../../g_state.h; sourceTree = SOURCE_ROOT; };
+		1E44AEC70B67CCC600BAD059 /* g_input.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = g_input.c; path = ../../g_input.c; sourceTree = SOURCE_ROOT; };
+		1E44AECE0B67CCEE00BAD059 /* hu_stuff.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hu_stuff.c; path = ../../hu_stuff.c; sourceTree = SOURCE_ROOT; };
+		1E44AECF0B67CCEE00BAD059 /* hu_stuff.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hu_stuff.h; path = ../../hu_stuff.h; sourceTree = SOURCE_ROOT; };
+		1E44AED30B67CD1200BAD059 /* i_net.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = i_net.h; path = ../../i_net.h; sourceTree = SOURCE_ROOT; };
+		1E44AED40B67CD1200BAD059 /* i_sound.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = i_sound.h; path = ../../i_sound.h; sourceTree = SOURCE_ROOT; };
+		1E44AED50B67CD1200BAD059 /* i_tcp.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = i_tcp.c; path = ../../i_tcp.c; sourceTree = SOURCE_ROOT; };
+		1E44AED60B67CD1200BAD059 /* i_tcp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = i_tcp.h; path = ../../i_tcp.h; sourceTree = SOURCE_ROOT; };
+		1E44AED70B67CD1200BAD059 /* i_system.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = i_system.h; path = ../../i_system.h; sourceTree = SOURCE_ROOT; };
+		1E44AED80B67CD1200BAD059 /* i_video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = i_video.h; path = ../../i_video.h; sourceTree = SOURCE_ROOT; };
+		1E44AED90B67CD1300BAD059 /* i_joy.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = i_joy.h; path = ../../i_joy.h; sourceTree = SOURCE_ROOT; };
+		1E44AEE10B67CD2B00BAD059 /* am_map.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = am_map.c; path = ../../am_map.c; sourceTree = SOURCE_ROOT; };
+		1E44AEE20B67CD2B00BAD059 /* am_map.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = am_map.h; path = ../../am_map.h; sourceTree = SOURCE_ROOT; };
+		1E44AEE50B67CD3200BAD059 /* byteptr.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = byteptr.h; path = ../../byteptr.h; sourceTree = SOURCE_ROOT; };
+		1E44AEE70B67CD3F00BAD059 /* command.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = command.c; path = ../../command.c; sourceTree = SOURCE_ROOT; };
+		1E44AEE80B67CD3F00BAD059 /* command.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = command.h; path = ../../command.h; sourceTree = SOURCE_ROOT; };
+		1E44AEEB0B67CD4400BAD059 /* comptime.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = comptime.c; path = ../../comptime.c; sourceTree = SOURCE_ROOT; };
+		1E44AEED0B67CD5400BAD059 /* console.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = console.c; path = ../../console.c; sourceTree = SOURCE_ROOT; };
+		1E44AEEE0B67CD5400BAD059 /* console.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = console.h; path = ../../console.h; sourceTree = SOURCE_ROOT; };
+		1E44AEF10B67CD7F00BAD059 /* filesrch.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = filesrch.c; path = ../../filesrch.c; sourceTree = SOURCE_ROOT; };
+		1E44AEF20B67CD7F00BAD059 /* filesrch.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = filesrch.h; path = ../../filesrch.h; sourceTree = SOURCE_ROOT; };
+		1E44AEF50B67CD9F00BAD059 /* keys.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = keys.h; path = ../../keys.h; sourceTree = SOURCE_ROOT; };
+		1E44AEF80B67CDE900BAD059 /* m_argv.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_argv.c; path = ../../m_argv.c; sourceTree = SOURCE_ROOT; };
+		1E44AEF90B67CDE900BAD059 /* m_bbox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_bbox.h; path = ../../m_bbox.h; sourceTree = SOURCE_ROOT; };
+		1E44AEFA0B67CDE900BAD059 /* m_argv.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_argv.h; path = ../../m_argv.h; sourceTree = SOURCE_ROOT; };
+		1E44AEFB0B67CDE900BAD059 /* m_cheat.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_cheat.c; path = ../../m_cheat.c; sourceTree = SOURCE_ROOT; };
+		1E44AEFC0B67CDE900BAD059 /* m_bbox.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_bbox.c; path = ../../m_bbox.c; sourceTree = SOURCE_ROOT; };
+		1E44AEFD0B67CDE900BAD059 /* m_cheat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_cheat.h; path = ../../m_cheat.h; sourceTree = SOURCE_ROOT; };
+		1E44AEFE0B67CDE900BAD059 /* m_fixed.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_fixed.c; path = ../../m_fixed.c; sourceTree = SOURCE_ROOT; };
+		1E44AEFF0B67CDE900BAD059 /* m_fixed.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_fixed.h; path = ../../m_fixed.h; sourceTree = SOURCE_ROOT; };
+		1E44AF000B67CDE900BAD059 /* m_menu.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_menu.c; path = ../../m_menu.c; sourceTree = SOURCE_ROOT; };
+		1E44AF010B67CDE900BAD059 /* m_menu.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_menu.h; path = ../../m_menu.h; sourceTree = SOURCE_ROOT; };
+		1E44AF020B67CDE900BAD059 /* m_misc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_misc.c; path = ../../m_misc.c; sourceTree = SOURCE_ROOT; };
+		1E44AF030B67CDE900BAD059 /* m_misc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_misc.h; path = ../../m_misc.h; sourceTree = SOURCE_ROOT; };
+		1E44AF040B67CDE900BAD059 /* m_random.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = m_random.c; path = ../../m_random.c; sourceTree = SOURCE_ROOT; };
+		1E44AF050B67CDE900BAD059 /* m_random.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_random.h; path = ../../m_random.h; sourceTree = SOURCE_ROOT; };
+		1E44AF060B67CDE900BAD059 /* m_swap.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = m_swap.h; path = ../../m_swap.h; sourceTree = SOURCE_ROOT; };
+		1E44AF180B67CE2A00BAD059 /* info.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = info.c; path = ../../info.c; sourceTree = SOURCE_ROOT; };
+		1E44AF190B67CE2A00BAD059 /* info.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = info.h; path = ../../info.h; sourceTree = SOURCE_ROOT; };
+		1E44AF1C0B67CE3600BAD059 /* md5.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = md5.c; path = ../../md5.c; sourceTree = SOURCE_ROOT; };
+		1E44AF1D0B67CE3600BAD059 /* md5.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = md5.h; path = ../../md5.h; sourceTree = SOURCE_ROOT; };
+		1E44AF200B67CE4100BAD059 /* mserv.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = mserv.c; path = ../../mserv.c; sourceTree = SOURCE_ROOT; };
+		1E44AF210B67CE4100BAD059 /* mserv.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = mserv.h; path = ../../mserv.h; sourceTree = SOURCE_ROOT; };
+		1E44AF240B67CE5F00BAD059 /* p_enemy.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_enemy.c; path = ../../p_enemy.c; sourceTree = SOURCE_ROOT; };
+		1E44AF250B67CE5F00BAD059 /* p_inter.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_inter.c; path = ../../p_inter.c; sourceTree = SOURCE_ROOT; };
+		1E44AF260B67CE5F00BAD059 /* p_fab.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_fab.c; path = ../../p_fab.c; sourceTree = SOURCE_ROOT; };
+		1E44AF270B67CE5F00BAD059 /* p_lights.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_lights.c; path = ../../p_lights.c; sourceTree = SOURCE_ROOT; };
+		1E44AF280B67CE5F00BAD059 /* p_map.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_map.c; path = ../../p_map.c; sourceTree = SOURCE_ROOT; };
+		1E44AF290B67CE5F00BAD059 /* p_maputl.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_maputl.c; path = ../../p_maputl.c; sourceTree = SOURCE_ROOT; };
+		1E44AF2A0B67CE5F00BAD059 /* p_maputl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = p_maputl.h; path = ../../p_maputl.h; sourceTree = SOURCE_ROOT; };
+		1E44AF2B0B67CE5F00BAD059 /* p_mobj.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_mobj.c; path = ../../p_mobj.c; sourceTree = SOURCE_ROOT; };
+		1E44AF2C0B67CE5F00BAD059 /* p_mobj.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = p_mobj.h; path = ../../p_mobj.h; sourceTree = SOURCE_ROOT; };
+		1E44AF2D0B67CE5F00BAD059 /* p_floor.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_floor.c; path = ../../p_floor.c; sourceTree = SOURCE_ROOT; };
+		1E44AF2E0B67CE5F00BAD059 /* p_local.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = p_local.h; path = ../../p_local.h; sourceTree = SOURCE_ROOT; };
+		1E44AF2F0B67CE5F00BAD059 /* p_pspr.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = p_pspr.h; path = ../../p_pspr.h; sourceTree = SOURCE_ROOT; };
+		1E44AF300B67CE5F00BAD059 /* p_saveg.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_saveg.c; path = ../../p_saveg.c; sourceTree = SOURCE_ROOT; };
+		1E44AF310B67CE5F00BAD059 /* p_saveg.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = p_saveg.h; path = ../../p_saveg.h; sourceTree = SOURCE_ROOT; };
+		1E44AF320B67CE5F00BAD059 /* p_setup.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_setup.c; path = ../../p_setup.c; sourceTree = SOURCE_ROOT; };
+		1E44AF330B67CE5F00BAD059 /* p_setup.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = p_setup.h; path = ../../p_setup.h; sourceTree = SOURCE_ROOT; };
+		1E44AF340B67CE5F00BAD059 /* p_sight.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_sight.c; path = ../../p_sight.c; sourceTree = SOURCE_ROOT; };
+		1E44AF350B67CE5F00BAD059 /* p_spec.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_spec.c; path = ../../p_spec.c; sourceTree = SOURCE_ROOT; };
+		1E44AF360B67CE5F00BAD059 /* p_spec.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = p_spec.h; path = ../../p_spec.h; sourceTree = SOURCE_ROOT; };
+		1E44AF370B67CE5F00BAD059 /* p_telept.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_telept.c; path = ../../p_telept.c; sourceTree = SOURCE_ROOT; };
+		1E44AF380B67CE5F00BAD059 /* p_tick.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_tick.c; path = ../../p_tick.c; sourceTree = SOURCE_ROOT; };
+		1E44AF390B67CE5F00BAD059 /* p_tick.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = p_tick.h; path = ../../p_tick.h; sourceTree = SOURCE_ROOT; };
+		1E44AF3A0B67CE5F00BAD059 /* p_user.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_user.c; path = ../../p_user.c; sourceTree = SOURCE_ROOT; };
+		1E44AF3B0B67CE5F00BAD059 /* p_ceilng.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = p_ceilng.c; path = ../../p_ceilng.c; sourceTree = SOURCE_ROOT; };
+		1E44AF550B67CEC100BAD059 /* r_bsp.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = r_bsp.c; path = ../../r_bsp.c; sourceTree = SOURCE_ROOT; };
+		1E44AF560B67CEC100BAD059 /* r_bsp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = r_bsp.h; path = ../../r_bsp.h; sourceTree = SOURCE_ROOT; };
+		1E44AF570B67CEC100BAD059 /* r_defs.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = r_defs.h; path = ../../r_defs.h; sourceTree = SOURCE_ROOT; };
+		1E44AF580B67CEC100BAD059 /* r_data.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = r_data.c; path = ../../r_data.c; sourceTree = SOURCE_ROOT; };
+		1E44AF590B67CEC100BAD059 /* r_draw.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = r_draw.c; path = ../../r_draw.c; sourceTree = SOURCE_ROOT; };
+		1E44AF5A0B67CEC100BAD059 /* r_draw16.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = r_draw16.c; path = ../../r_draw16.c; sourceTree = SOURCE_ROOT; };
+		1E44AF5B0B67CEC100BAD059 /* r_draw8.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = r_draw8.c; path = ../../r_draw8.c; sourceTree = SOURCE_ROOT; };
+		1E44AF5C0B67CEC100BAD059 /* r_main.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = r_main.c; path = ../../r_main.c; sourceTree = SOURCE_ROOT; };
+		1E44AF5D0B67CEC100BAD059 /* r_main.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = r_main.h; path = ../../r_main.h; sourceTree = SOURCE_ROOT; };
+		1E44AF5E0B67CEC100BAD059 /* r_data.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = r_data.h; path = ../../r_data.h; sourceTree = SOURCE_ROOT; };
+		1E44AF5F0B67CEC100BAD059 /* r_draw.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = r_draw.h; path = ../../r_draw.h; sourceTree = SOURCE_ROOT; };
+		1E44AF600B67CEC100BAD059 /* r_local.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = r_local.h; path = ../../r_local.h; sourceTree = SOURCE_ROOT; };
+		1E44AF610B67CEC100BAD059 /* r_plane.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = r_plane.c; path = ../../r_plane.c; sourceTree = SOURCE_ROOT; };
+		1E44AF620B67CEC100BAD059 /* r_plane.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = r_plane.h; path = ../../r_plane.h; sourceTree = SOURCE_ROOT; };
+		1E44AF630B67CEC100BAD059 /* r_segs.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = r_segs.c; path = ../../r_segs.c; sourceTree = SOURCE_ROOT; };
+		1E44AF640B67CEC100BAD059 /* r_segs.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = r_segs.h; path = ../../r_segs.h; sourceTree = SOURCE_ROOT; };
+		1E44AF650B67CEC200BAD059 /* r_sky.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = r_sky.c; path = ../../r_sky.c; sourceTree = SOURCE_ROOT; };
+		1E44AF660B67CEC200BAD059 /* r_sky.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = r_sky.h; path = ../../r_sky.h; sourceTree = SOURCE_ROOT; };
+		1E44AF670B67CEC200BAD059 /* r_splats.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = r_splats.c; path = ../../r_splats.c; sourceTree = SOURCE_ROOT; };
+		1E44AF680B67CEC200BAD059 /* r_splats.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = r_splats.h; path = ../../r_splats.h; sourceTree = SOURCE_ROOT; };
+		1E44AF690B67CEC200BAD059 /* r_state.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = r_state.h; path = ../../r_state.h; sourceTree = SOURCE_ROOT; };
+		1E44AF6A0B67CEC200BAD059 /* r_things.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = r_things.c; path = ../../r_things.c; sourceTree = SOURCE_ROOT; };
+		1E44AF6B0B67CEC200BAD059 /* r_things.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = r_things.h; path = ../../r_things.h; sourceTree = SOURCE_ROOT; };
+		1E44AF850B67CEE000BAD059 /* s_sound.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = s_sound.c; path = ../../s_sound.c; sourceTree = SOURCE_ROOT; };
+		1E44AF860B67CEE000BAD059 /* s_sound.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = s_sound.h; path = ../../s_sound.h; sourceTree = SOURCE_ROOT; };
+		1E44AF890B67CEE900BAD059 /* screen.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = screen.c; path = ../../screen.c; sourceTree = SOURCE_ROOT; };
+		1E44AF8A0B67CEE900BAD059 /* screen.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = screen.h; path = ../../screen.h; sourceTree = SOURCE_ROOT; };
+		1E44AF8D0B67CEF000BAD059 /* sounds.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = sounds.c; path = ../../sounds.c; sourceTree = SOURCE_ROOT; };
+		1E44AF8E0B67CEF000BAD059 /* sounds.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sounds.h; path = ../../sounds.h; sourceTree = SOURCE_ROOT; };
+		1E44AF910B67CEFF00BAD059 /* st_stuff.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = st_stuff.c; path = ../../st_stuff.c; sourceTree = SOURCE_ROOT; };
+		1E44AF920B67CEFF00BAD059 /* st_stuff.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = st_stuff.h; path = ../../st_stuff.h; sourceTree = SOURCE_ROOT; };
+		1E44AF950B67CF1300BAD059 /* string.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = string.c; path = ../../string.c; sourceTree = SOURCE_ROOT; };
+		1E44AF990B67CF2E00BAD059 /* tables.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = tables.c; path = ../../tables.c; sourceTree = SOURCE_ROOT; };
+		1E44AF9A0B67CF2E00BAD059 /* tables.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = tables.h; path = ../../tables.h; sourceTree = SOURCE_ROOT; };
+		1E44AF9D0B67CF3D00BAD059 /* tmap.nas */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = tmap.nas; path = ../../tmap.nas; sourceTree = SOURCE_ROOT; };
+		1E44AF9F0B67CF4900BAD059 /* tmap_mmx.nas */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = tmap_mmx.nas; path = ../../tmap_mmx.nas; sourceTree = SOURCE_ROOT; };
+		1E44AFA00B67CF4900BAD059 /* tmap_vc.nas */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = tmap_vc.nas; path = ../../tmap_vc.nas; sourceTree = SOURCE_ROOT; };
+		1E44AFA30B67CF5D00BAD059 /* v_video.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = v_video.c; path = ../../v_video.c; sourceTree = SOURCE_ROOT; };
+		1E44AFA40B67CF5D00BAD059 /* v_video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = v_video.h; path = ../../v_video.h; sourceTree = SOURCE_ROOT; };
+		1E44AFA70B67CF6400BAD059 /* w_wad.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = w_wad.c; path = ../../w_wad.c; sourceTree = SOURCE_ROOT; };
+		1E44AFA80B67CF6400BAD059 /* w_wad.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = w_wad.h; path = ../../w_wad.h; sourceTree = SOURCE_ROOT; };
+		1E44AFAB0B67CF6F00BAD059 /* y_inter.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = y_inter.c; path = ../../y_inter.c; sourceTree = SOURCE_ROOT; };
+		1E44AFAC0B67CF6F00BAD059 /* y_inter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = y_inter.h; path = ../../y_inter.h; sourceTree = SOURCE_ROOT; };
+		1E44AFAF0B67CF7A00BAD059 /* z_zone.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = z_zone.c; path = ../../z_zone.c; sourceTree = SOURCE_ROOT; };
+		1E44AFB00B67CF7A00BAD059 /* z_zone.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = z_zone.h; path = ../../z_zone.h; sourceTree = SOURCE_ROOT; };
+		1E44AFB40B67CFDC00BAD059 /* dosstr.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dosstr.c; path = ../dosstr.c; sourceTree = SOURCE_ROOT; };
+		1E44AFB50B67CFDC00BAD059 /* endtxt.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = endtxt.c; path = ../endtxt.c; sourceTree = SOURCE_ROOT; };
+		1E44AFB60B67CFDC00BAD059 /* endtxt.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = endtxt.h; path = ../endtxt.h; sourceTree = SOURCE_ROOT; };
+		1E44AFB70B67CFDC00BAD059 /* hwsym_sdl.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hwsym_sdl.c; path = ../hwsym_sdl.c; sourceTree = SOURCE_ROOT; };
+		1E44AFB80B67CFDC00BAD059 /* hwsym_sdl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hwsym_sdl.h; path = ../hwsym_sdl.h; sourceTree = SOURCE_ROOT; };
+		1E44AFB90B67CFDC00BAD059 /* i_cdmus.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = i_cdmus.c; path = ../i_cdmus.c; sourceTree = SOURCE_ROOT; };
+		1E44AFBA0B67CFDC00BAD059 /* i_main.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = i_main.c; path = ../i_main.c; sourceTree = SOURCE_ROOT; };
+		1E44AFBB0B67CFDC00BAD059 /* i_net.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = i_net.c; path = ../i_net.c; sourceTree = SOURCE_ROOT; };
+		1E44AFBD0B67CFDC00BAD059 /* i_system.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = i_system.c; path = ../i_system.c; sourceTree = SOURCE_ROOT; };
+		1E44AFBE0B67CFDC00BAD059 /* i_video.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = i_video.c; path = ../i_video.c; sourceTree = SOURCE_ROOT; };
+		1E44AFBF0B67CFDC00BAD059 /* IMG_xpm.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = IMG_xpm.c; path = ../IMG_xpm.c; sourceTree = SOURCE_ROOT; };
+		1E44AFC00B67CFDC00BAD059 /* ogl_sdl.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ogl_sdl.c; path = ../ogl_sdl.c; sourceTree = SOURCE_ROOT; };
+		1E44AFC10B67CFDC00BAD059 /* ogl_sdl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ogl_sdl.h; path = ../ogl_sdl.h; sourceTree = SOURCE_ROOT; };
+		1E44AFC20B67CFDC00BAD059 /* SDL_icon.xpm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = SDL_icon.xpm; path = ../SDL_icon.xpm; sourceTree = SOURCE_ROOT; };
+		1E44AFC30B67CFDC00BAD059 /* sdlmain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sdlmain.h; path = ../sdlmain.h; sourceTree = SOURCE_ROOT; };
+		1E44AFD50B67D03100BAD059 /* filters.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = filters.c; path = ../filter/filters.c; sourceTree = SOURCE_ROOT; };
+		1E44AFD60B67D03100BAD059 /* filters.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = filters.h; path = ../filter/filters.h; sourceTree = SOURCE_ROOT; };
+		1E44AFD70B67D03100BAD059 /* hq2x.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hq2x.c; path = ../filter/hq2x.c; sourceTree = SOURCE_ROOT; };
+		1E44AFD80B67D03100BAD059 /* hq2x.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = hq2x.h; path = ../filter/hq2x.h; sourceTree = SOURCE_ROOT; };
+		1E44AFD90B67D03100BAD059 /* interp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = interp.h; path = ../filter/interp.h; sourceTree = SOURCE_ROOT; };
+		1E44AFDA0B67D03100BAD059 /* lq2x.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lq2x.c; path = ../filter/lq2x.c; sourceTree = SOURCE_ROOT; };
+		1E44AFDB0B67D03100BAD059 /* lq2x.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = lq2x.h; path = ../filter/lq2x.h; sourceTree = SOURCE_ROOT; };
+		1E44AFDC0B67D03100BAD059 /* main.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = main.c; path = ../filter/main.c; sourceTree = SOURCE_ROOT; };
+		1E44AFE60B67D06200BAD059 /* mac_alert.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = mac_alert.h; sourceTree = SOURCE_ROOT; };
+		1E44AFE70B67D06200BAD059 /* Srb2mac.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Srb2mac.icns; sourceTree = SOURCE_ROOT; };
+		1E44AFE80B67D06200BAD059 /* mac_alert.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = mac_alert.c; sourceTree = SOURCE_ROOT; };
+		1E44AFEC0B67D0AB00BAD059 /* r_opengl.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = r_opengl.c; path = ../../hardware/r_opengl/r_opengl.c; sourceTree = SOURCE_ROOT; };
+		1E44B0560B67D81E00BAD059 /* SDL_macosx_main.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SDL_macosx_main.h; path = ../SDL_main/SDL_macosx_main.h; sourceTree = SOURCE_ROOT; };
+		1E44B0570B67D81E00BAD059 /* SDL_macosx_main.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = SDL_macosx_main.m; path = ../SDL_main/SDL_macosx_main.m; sourceTree = SOURCE_ROOT; };
+		1E44B2240B67EADE00BAD059 /* lzf.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lzf.c; path = ../../lzf.c; sourceTree = SOURCE_ROOT; };
+		1E44B2250B67EADE00BAD059 /* lzf.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = lzf.h; path = ../../lzf.h; sourceTree = SOURCE_ROOT; };
+		1E66921B0B690C5B00B7313A /* SDL_mixer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL_mixer.framework; path = /Library/Frameworks/SDL_mixer.framework; sourceTree = "<absolute>"; };
+		29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
+		29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
+		67259DFA18D2687D00F02971 /* lua_hud.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lua_hud.h; path = ../../lua_hud.h; sourceTree = SOURCE_ROOT; };
+		67259DFB18D2687D00F02971 /* lua_hudlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_hudlib.c; path = ../../lua_hudlib.c; sourceTree = SOURCE_ROOT; };
+		67259DFC18D2687D00F02971 /* lua_skinlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_skinlib.c; path = ../../lua_skinlib.c; sourceTree = SOURCE_ROOT; };
+		67259DFF18D268AE00F02971 /* m_anigif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = m_anigif.c; path = ../../m_anigif.c; sourceTree = SOURCE_ROOT; };
+		67259E0018D268AE00F02971 /* m_anigif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = m_anigif.h; path = ../../m_anigif.h; sourceTree = SOURCE_ROOT; };
+		67259E0218D268F600F02971 /* i_ttf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = i_ttf.c; path = ../i_ttf.c; sourceTree = SOURCE_ROOT; };
+		67259E0318D268F600F02971 /* i_ttf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = i_ttf.h; path = ../i_ttf.h; sourceTree = SOURCE_ROOT; };
+		67259E0418D268F600F02971 /* mixer_sound.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mixer_sound.c; path = ../mixer_sound.c; sourceTree = SOURCE_ROOT; };
+		67259E0518D268F600F02971 /* sdl_sound.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sdl_sound.c; path = ../sdl_sound.c; sourceTree = SOURCE_ROOT; };
+		67259E2B18D26D5700F02971 /* patch.dta */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = patch.dta; path = ../../../bin/Resources/patch.dta; sourceTree = SOURCE_ROOT; };
+		67259E2C18D26D5700F02971 /* rings.dta */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = rings.dta; path = ../../../bin/Resources/rings.dta; sourceTree = SOURCE_ROOT; };
+		67259E2D18D26D5700F02971 /* srb2.srb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = srb2.srb; path = ../../../bin/Resources/srb2.srb; sourceTree = SOURCE_ROOT; };
+		6766C0AE11B057E50065F389 /* zones.dta */ = {isa = PBXFileReference; lastKnownFileType = text; name = zones.dta; path = ../../../bin/Resources/zones.dta; sourceTree = SOURCE_ROOT; };
+		676BB51C0E0DE06100C95963 /* m_queue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = m_queue.c; path = ../../m_queue.c; sourceTree = SOURCE_ROOT; };
+		676BB51D0E0DE06100C95963 /* m_queue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = m_queue.h; path = ../../m_queue.h; sourceTree = SOURCE_ROOT; };
+		676BB51E0E0DE06100C95963 /* p_polyobj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_polyobj.c; path = ../../p_polyobj.c; sourceTree = SOURCE_ROOT; };
+		676BB51F0E0DE06100C95963 /* p_polyobj.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = p_polyobj.h; path = ../../p_polyobj.h; sourceTree = SOURCE_ROOT; };
+		67A1F91813FAD026009FA3E5 /* player.dta */ = {isa = PBXFileReference; lastKnownFileType = text; name = player.dta; path = ../../../bin/Resources/player.dta; sourceTree = SOURCE_ROOT; };
+		67B2071C1180FA8200E93654 /* vid_copy.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = vid_copy.s; path = ../../vid_copy.s; sourceTree = SOURCE_ROOT; };
+		67B83BCB14F57EAB00AAAE4E /* lapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lapi.c; path = ../../blua/lapi.c; sourceTree = SOURCE_ROOT; };
+		67B83BCC14F57EAB00AAAE4E /* lapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lapi.h; path = ../../blua/lapi.h; sourceTree = SOURCE_ROOT; };
+		67B83BCD14F57EAB00AAAE4E /* lauxlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lauxlib.c; path = ../../blua/lauxlib.c; sourceTree = SOURCE_ROOT; };
+		67B83BCE14F57EAB00AAAE4E /* lauxlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lauxlib.h; path = ../../blua/lauxlib.h; sourceTree = SOURCE_ROOT; };
+		67B83BCF14F57EAB00AAAE4E /* lbaselib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lbaselib.c; path = ../../blua/lbaselib.c; sourceTree = SOURCE_ROOT; };
+		67B83BD014F57EAB00AAAE4E /* lcode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lcode.c; path = ../../blua/lcode.c; sourceTree = SOURCE_ROOT; };
+		67B83BD114F57EAB00AAAE4E /* lcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lcode.h; path = ../../blua/lcode.h; sourceTree = SOURCE_ROOT; };
+		67B83BD214F57EAB00AAAE4E /* ldebug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ldebug.c; path = ../../blua/ldebug.c; sourceTree = SOURCE_ROOT; };
+		67B83BD314F57EAB00AAAE4E /* ldebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ldebug.h; path = ../../blua/ldebug.h; sourceTree = SOURCE_ROOT; };
+		67B83BD414F57EAB00AAAE4E /* ldo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ldo.c; path = ../../blua/ldo.c; sourceTree = SOURCE_ROOT; };
+		67B83BD514F57EAB00AAAE4E /* ldo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ldo.h; path = ../../blua/ldo.h; sourceTree = SOURCE_ROOT; };
+		67B83BD614F57EAB00AAAE4E /* ldump.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ldump.c; path = ../../blua/ldump.c; sourceTree = SOURCE_ROOT; };
+		67B83BD714F57EAB00AAAE4E /* lfunc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lfunc.c; path = ../../blua/lfunc.c; sourceTree = SOURCE_ROOT; };
+		67B83BD814F57EAB00AAAE4E /* lfunc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lfunc.h; path = ../../blua/lfunc.h; sourceTree = SOURCE_ROOT; };
+		67B83BD914F57EAB00AAAE4E /* lgc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lgc.c; path = ../../blua/lgc.c; sourceTree = SOURCE_ROOT; };
+		67B83BDA14F57EAB00AAAE4E /* lgc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lgc.h; path = ../../blua/lgc.h; sourceTree = SOURCE_ROOT; };
+		67B83BDB14F57EAB00AAAE4E /* linit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = linit.c; path = ../../blua/linit.c; sourceTree = SOURCE_ROOT; };
+		67B83BDC14F57EAB00AAAE4E /* llex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = llex.c; path = ../../blua/llex.c; sourceTree = SOURCE_ROOT; };
+		67B83BDD14F57EAB00AAAE4E /* llex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = llex.h; path = ../../blua/llex.h; sourceTree = SOURCE_ROOT; };
+		67B83BDE14F57EAB00AAAE4E /* llimits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = llimits.h; path = ../../blua/llimits.h; sourceTree = SOURCE_ROOT; };
+		67B83BDF14F57EAB00AAAE4E /* lmem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lmem.c; path = ../../blua/lmem.c; sourceTree = SOURCE_ROOT; };
+		67B83BE014F57EAB00AAAE4E /* lmem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lmem.h; path = ../../blua/lmem.h; sourceTree = SOURCE_ROOT; };
+		67B83BE114F57EAB00AAAE4E /* lobject.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lobject.c; path = ../../blua/lobject.c; sourceTree = SOURCE_ROOT; };
+		67B83BE214F57EAB00AAAE4E /* lobject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lobject.h; path = ../../blua/lobject.h; sourceTree = SOURCE_ROOT; };
+		67B83BE314F57EAB00AAAE4E /* lopcodes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lopcodes.c; path = ../../blua/lopcodes.c; sourceTree = SOURCE_ROOT; };
+		67B83BE414F57EAB00AAAE4E /* lopcodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lopcodes.h; path = ../../blua/lopcodes.h; sourceTree = SOURCE_ROOT; };
+		67B83BE514F57EAB00AAAE4E /* lparser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lparser.c; path = ../../blua/lparser.c; sourceTree = SOURCE_ROOT; };
+		67B83BE614F57EAB00AAAE4E /* lparser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lparser.h; path = ../../blua/lparser.h; sourceTree = SOURCE_ROOT; };
+		67B83BE714F57EAB00AAAE4E /* lstate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lstate.c; path = ../../blua/lstate.c; sourceTree = SOURCE_ROOT; };
+		67B83BE814F57EAB00AAAE4E /* lstate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lstate.h; path = ../../blua/lstate.h; sourceTree = SOURCE_ROOT; };
+		67B83BE914F57EAB00AAAE4E /* lstring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lstring.c; path = ../../blua/lstring.c; sourceTree = SOURCE_ROOT; };
+		67B83BEA14F57EAB00AAAE4E /* lstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lstring.h; path = ../../blua/lstring.h; sourceTree = SOURCE_ROOT; };
+		67B83BEB14F57EAB00AAAE4E /* lstrlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lstrlib.c; path = ../../blua/lstrlib.c; sourceTree = SOURCE_ROOT; };
+		67B83BEC14F57EAB00AAAE4E /* ltable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ltable.c; path = ../../blua/ltable.c; sourceTree = SOURCE_ROOT; };
+		67B83BED14F57EAB00AAAE4E /* ltable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ltable.h; path = ../../blua/ltable.h; sourceTree = SOURCE_ROOT; };
+		67B83BEE14F57EAB00AAAE4E /* ltablib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ltablib.c; path = ../../blua/ltablib.c; sourceTree = SOURCE_ROOT; };
+		67B83BEF14F57EAB00AAAE4E /* ltm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ltm.c; path = ../../blua/ltm.c; sourceTree = SOURCE_ROOT; };
+		67B83BF014F57EAB00AAAE4E /* ltm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ltm.h; path = ../../blua/ltm.h; sourceTree = SOURCE_ROOT; };
+		67B83BF114F57EAB00AAAE4E /* lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lua.h; path = ../../blua/lua.h; sourceTree = SOURCE_ROOT; };
+		67B83BF214F57EAB00AAAE4E /* luaconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = luaconf.h; path = ../../blua/luaconf.h; sourceTree = SOURCE_ROOT; };
+		67B83BF314F57EAB00AAAE4E /* lualib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lualib.h; path = ../../blua/lualib.h; sourceTree = SOURCE_ROOT; };
+		67B83BF414F57EAB00AAAE4E /* lundump.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lundump.c; path = ../../blua/lundump.c; sourceTree = SOURCE_ROOT; };
+		67B83BF514F57EAB00AAAE4E /* lundump.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lundump.h; path = ../../blua/lundump.h; sourceTree = SOURCE_ROOT; };
+		67B83BF614F57EAB00AAAE4E /* lvm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lvm.c; path = ../../blua/lvm.c; sourceTree = SOURCE_ROOT; };
+		67B83BF714F57EAB00AAAE4E /* lvm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lvm.h; path = ../../blua/lvm.h; sourceTree = SOURCE_ROOT; };
+		67B83BF814F57EAB00AAAE4E /* lzio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lzio.c; path = ../../blua/lzio.c; sourceTree = SOURCE_ROOT; };
+		67B83BF914F57EAB00AAAE4E /* lzio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lzio.h; path = ../../blua/lzio.h; sourceTree = SOURCE_ROOT; };
+		67B83C1214F57ECA00AAAE4E /* b_bot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = b_bot.c; path = ../../b_bot.c; sourceTree = SOURCE_ROOT; };
+		67B83C1314F57ECA00AAAE4E /* b_bot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = b_bot.h; path = ../../b_bot.h; sourceTree = SOURCE_ROOT; };
+		67B83C1514F57EE600AAAE4E /* lua_baselib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_baselib.c; path = ../../lua_baselib.c; sourceTree = SOURCE_ROOT; };
+		67B83C1614F57EE600AAAE4E /* lua_consolelib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_consolelib.c; path = ../../lua_consolelib.c; sourceTree = SOURCE_ROOT; };
+		67B83C1714F57EE600AAAE4E /* lua_hook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lua_hook.h; path = ../../lua_hook.h; sourceTree = SOURCE_ROOT; };
+		67B83C1814F57EE600AAAE4E /* lua_hooklib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_hooklib.c; path = ../../lua_hooklib.c; sourceTree = SOURCE_ROOT; };
+		67B83C1914F57EE600AAAE4E /* lua_infolib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_infolib.c; path = ../../lua_infolib.c; sourceTree = SOURCE_ROOT; };
+		67B83C1A14F57EE600AAAE4E /* lua_libs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lua_libs.h; path = ../../lua_libs.h; sourceTree = SOURCE_ROOT; };
+		67B83C1B14F57EE600AAAE4E /* lua_maplib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_maplib.c; path = ../../lua_maplib.c; sourceTree = SOURCE_ROOT; };
+		67B83C1C14F57EE600AAAE4E /* lua_mathlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_mathlib.c; path = ../../lua_mathlib.c; sourceTree = SOURCE_ROOT; };
+		67B83C1D14F57EE600AAAE4E /* lua_mobjlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_mobjlib.c; path = ../../lua_mobjlib.c; sourceTree = SOURCE_ROOT; };
+		67B83C1E14F57EE600AAAE4E /* lua_playerlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_playerlib.c; path = ../../lua_playerlib.c; sourceTree = SOURCE_ROOT; };
+		67B83C1F14F57EE600AAAE4E /* lua_script.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_script.c; path = ../../lua_script.c; sourceTree = SOURCE_ROOT; };
+		67B83C2014F57EE600AAAE4E /* lua_script.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lua_script.h; path = ../../lua_script.h; sourceTree = SOURCE_ROOT; };
+		67B83C2114F57EE600AAAE4E /* lua_thinkerlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_thinkerlib.c; path = ../../lua_thinkerlib.c; sourceTree = SOURCE_ROOT; };
+		67B83C2C14F57F1500AAAE4E /* fastcmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fastcmp.h; path = ../../fastcmp.h; sourceTree = SOURCE_ROOT; };
+		67B83C2D14F57F1500AAAE4E /* i_addrinfo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = i_addrinfo.c; path = ../../i_addrinfo.c; sourceTree = SOURCE_ROOT; };
+		67B83C2E14F57F1500AAAE4E /* i_addrinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = i_addrinfo.h; path = ../../i_addrinfo.h; sourceTree = SOURCE_ROOT; };
+		67B83C2F14F57F1500AAAE4E /* m_cond.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = m_cond.c; path = ../../m_cond.c; sourceTree = SOURCE_ROOT; };
+		67B83C3014F57F1500AAAE4E /* m_cond.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = m_cond.h; path = ../../m_cond.h; sourceTree = SOURCE_ROOT; };
+		67B83C3114F57F1500AAAE4E /* m_dllist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = m_dllist.h; path = ../../m_dllist.h; sourceTree = SOURCE_ROOT; };
+		8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
+		8D1107320486CEB800E47090 /* Srb2mac.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Srb2mac.app; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8D11072E0486CEB800E47090 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				002F39FA09D0881F00EBEB88 /* SDL.framework in Frameworks */,
+				8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
+				1E66921C0B690C5B00B7313A /* SDL_mixer.framework in Frameworks */,
+				1E32C4290B6E6D5D0029E058 /* libpng.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		080E96DDFE201D6D7F000001 /* Classes */ = {
+			isa = PBXGroup;
+			children = (
+				1E44AE890B67CC4E00BAD059 /* A_Asm */,
+				67B83BCA14F57DD400AAAE4E /* B_Bot */,
+				67B83BC914F57D7F00AAAE4E /* BLUA */,
+				1E44AE8C0B67CC6500BAD059 /* D_Doom */,
+				1E44AEBB0B67CC9800BAD059 /* F_Frame */,
+				1E44AEC20B67CCB500BAD059 /* G_Game */,
+				1E44AECD0B67CCD200BAD059 /* H_Hud */,
+				1E44AE5C0B67CC0F00BAD059 /* Hw_Hardware */,
+				1E44AED20B67CCF600BAD059 /* I_Interface */,
+				67B83BC814F57D6E00AAAE4E /* LUA */,
+				1E44AEF70B67CDA900BAD059 /* M_Misc */,
+				1E44AF160B67CDFB00BAD059 /* P_Play */,
+				1E44AF540B67CE8C00BAD059 /* R_Render */,
+				1E44AF830B67CEC900BAD059 /* S_Sound */,
+				1E44AF170B67CE1000BAD059 /* W_Wad */,
+			);
+			name = Classes;
+			sourceTree = "<group>";
+		};
+		1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				1E32C4140B6E6D5D0029E058 /* libpng.framework */,
+				1E66921B0B690C5B00B7313A /* SDL_mixer.framework */,
+				002F39F909D0881F00EBEB88 /* SDL.framework */,
+				1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
+			);
+			name = "Linked Frameworks";
+			sourceTree = "<group>";
+		};
+		1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				29B97324FDCFA39411CA2CEA /* AppKit.framework */,
+				29B97325FDCFA39411CA2CEA /* Foundation.framework */,
+			);
+			name = "Other Frameworks";
+			sourceTree = "<group>";
+		};
+		19C28FACFE9D520D11CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8D1107320486CEB800E47090 /* Srb2mac.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		1E44AE5C0B67CC0F00BAD059 /* Hw_Hardware */ = {
+			isa = PBXGroup;
+			children = (
+				1E44AE600B67CC2B00BAD059 /* hw3dsdrv.h */,
+				1E44AE610B67CC2B00BAD059 /* hw_bsp.c */,
+				1E44AE620B67CC2B00BAD059 /* hw_defs.h */,
+				1E44AE630B67CC2B00BAD059 /* hw3sound.c */,
+				1E44AE640B67CC2B00BAD059 /* hw_cache.c */,
+				1E44AE650B67CC2B00BAD059 /* hw_dll.h */,
+				1E44AE660B67CC2B00BAD059 /* hw_drv.h */,
+				1E44AE670B67CC2B00BAD059 /* hw_glide.h */,
+				1E44AE680B67CC2B00BAD059 /* hw_light.c */,
+				1E44AE690B67CC2B00BAD059 /* hw_light.h */,
+				1E44AE6A0B67CC2B00BAD059 /* hw3sound.h */,
+				1E44AE6B0B67CC2B00BAD059 /* hw_data.h */,
+				1E44AE6C0B67CC2B00BAD059 /* hw_draw.c */,
+				1E44AE6D0B67CC2B00BAD059 /* hw_glob.h */,
+				1E44AE6E0B67CC2B00BAD059 /* hw_main.c */,
+				1E44AE6F0B67CC2B00BAD059 /* hw_main.h */,
+				1E44AE700B67CC2B00BAD059 /* hw_md2.c */,
+				1E44AE710B67CC2B00BAD059 /* hw_md2.h */,
+				1E44AE720B67CC2B00BAD059 /* hw_trick.c */,
+				1E44AE730B67CC2B00BAD059 /* hws_data.h */,
+			);
+			name = Hw_Hardware;
+			sourceTree = "<group>";
+		};
+		1E44AE890B67CC4E00BAD059 /* A_Asm */ = {
+			isa = PBXGroup;
+			children = (
+				67B2071C1180FA8200E93654 /* vid_copy.s */,
+				1E44AE8A0B67CC6000BAD059 /* asm_defs.inc */,
+				1E44AF9D0B67CF3D00BAD059 /* tmap.nas */,
+				1E44AF9F0B67CF4900BAD059 /* tmap_mmx.nas */,
+				1E44AFA00B67CF4900BAD059 /* tmap_vc.nas */,
+			);
+			name = A_Asm;
+			sourceTree = "<group>";
+		};
+		1E44AE8C0B67CC6500BAD059 /* D_Doom */ = {
+			isa = PBXGroup;
+			children = (
+				1E44AEEB0B67CD4400BAD059 /* comptime.c */,
+				1E44AE8D0B67CC8400BAD059 /* d_clisrv.c */,
+				1E44AE8E0B67CC8400BAD059 /* d_clisrv.h */,
+				1E44AE8F0B67CC8400BAD059 /* d_event.h */,
+				1E44AE900B67CC8400BAD059 /* d_main.c */,
+				1E44AE910B67CC8500BAD059 /* d_net.c */,
+				1E44AE920B67CC8500BAD059 /* d_net.h */,
+				1E44AE930B67CC8500BAD059 /* d_netcmd.h */,
+				1E44AE940B67CC8500BAD059 /* d_netfil.c */,
+				1E44AE950B67CC8500BAD059 /* d_player.h */,
+				1E44AE960B67CC8500BAD059 /* d_think.h */,
+				1E44AE980B67CC8500BAD059 /* d_netcmd.c */,
+				1E44AE990B67CC8500BAD059 /* d_ticcmd.h */,
+				1E44AE9A0B67CC8500BAD059 /* d_main.h */,
+				1E44AE9B0B67CC8500BAD059 /* d_netfil.h */,
+				1E44AE9C0B67CC8500BAD059 /* dehacked.c */,
+				1E44AE9D0B67CC8500BAD059 /* dehacked.h */,
+				1E44AE9E0B67CC8500BAD059 /* doomdata.h */,
+				1E44AE9F0B67CC8500BAD059 /* doomdef.h */,
+				1E44AEA00B67CC8500BAD059 /* doomstat.h */,
+				1E44AEA10B67CC8500BAD059 /* doomtype.h */,
+				1E44AFAF0B67CF7A00BAD059 /* z_zone.c */,
+				1E44AFB00B67CF7A00BAD059 /* z_zone.h */,
+			);
+			name = D_Doom;
+			sourceTree = "<group>";
+		};
+		1E44AEBB0B67CC9800BAD059 /* F_Frame */ = {
+			isa = PBXGroup;
+			children = (
+				1E44AEBC0B67CCA900BAD059 /* f_wipe.c */,
+				1E44AEBD0B67CCA900BAD059 /* f_finale.c */,
+				1E44AEBE0B67CCA900BAD059 /* f_finale.h */,
+				1E44AFAB0B67CF6F00BAD059 /* y_inter.c */,
+				1E44AFAC0B67CF6F00BAD059 /* y_inter.h */,
+			);
+			name = F_Frame;
+			sourceTree = "<group>";
+		};
+		1E44AEC20B67CCB500BAD059 /* G_Game */ = {
+			isa = PBXGroup;
+			children = (
+				1E44AEC30B67CCC600BAD059 /* g_game.c */,
+				1E44AEC40B67CCC600BAD059 /* g_game.h */,
+				1E44AEC50B67CCC600BAD059 /* g_input.h */,
+				1E44AEC60B67CCC600BAD059 /* g_state.h */,
+				1E44AEC70B67CCC600BAD059 /* g_input.c */,
+			);
+			name = G_Game;
+			sourceTree = "<group>";
+		};
+		1E44AECD0B67CCD200BAD059 /* H_Hud */ = {
+			isa = PBXGroup;
+			children = (
+				1E44AEE10B67CD2B00BAD059 /* am_map.c */,
+				1E44AEE20B67CD2B00BAD059 /* am_map.h */,
+				1E44AEE70B67CD3F00BAD059 /* command.c */,
+				1E44AEE80B67CD3F00BAD059 /* command.h */,
+				1E44AEED0B67CD5400BAD059 /* console.c */,
+				1E44AEEE0B67CD5400BAD059 /* console.h */,
+				1E44AECE0B67CCEE00BAD059 /* hu_stuff.c */,
+				1E44AECF0B67CCEE00BAD059 /* hu_stuff.h */,
+				1E44AF000B67CDE900BAD059 /* m_menu.c */,
+				1E44AF010B67CDE900BAD059 /* m_menu.h */,
+				1E44AF910B67CEFF00BAD059 /* st_stuff.c */,
+				1E44AF920B67CEFF00BAD059 /* st_stuff.h */,
+			);
+			name = H_Hud;
+			sourceTree = "<group>";
+		};
+		1E44AED20B67CCF600BAD059 /* I_Interface */ = {
+			isa = PBXGroup;
+			children = (
+				67259E0218D268F600F02971 /* i_ttf.c */,
+				67259E0318D268F600F02971 /* i_ttf.h */,
+				67259E0418D268F600F02971 /* mixer_sound.c */,
+				67259E0518D268F600F02971 /* sdl_sound.c */,
+				1E44AFB30B67CF8500BAD059 /* SDL */,
+				67B83C2D14F57F1500AAAE4E /* i_addrinfo.c */,
+				67B83C2E14F57F1500AAAE4E /* i_addrinfo.h */,
+				1E44AEE50B67CD3200BAD059 /* byteptr.h */,
+				1E44AEF10B67CD7F00BAD059 /* filesrch.c */,
+				1E44AEF20B67CD7F00BAD059 /* filesrch.h */,
+				1E44AED30B67CD1200BAD059 /* i_net.h */,
+				1E44AED40B67CD1200BAD059 /* i_sound.h */,
+				1E44AED50B67CD1200BAD059 /* i_tcp.c */,
+				1E44AED60B67CD1200BAD059 /* i_tcp.h */,
+				1E44AED70B67CD1200BAD059 /* i_system.h */,
+				1E44AED80B67CD1200BAD059 /* i_video.h */,
+				1E44AED90B67CD1300BAD059 /* i_joy.h */,
+				1E44AEF50B67CD9F00BAD059 /* keys.h */,
+				1E44AF200B67CE4100BAD059 /* mserv.c */,
+				1E44AF210B67CE4100BAD059 /* mserv.h */,
+			);
+			name = I_Interface;
+			sourceTree = "<group>";
+		};
+		1E44AEF70B67CDA900BAD059 /* M_Misc */ = {
+			isa = PBXGroup;
+			children = (
+				67259DFF18D268AE00F02971 /* m_anigif.c */,
+				67259E0018D268AE00F02971 /* m_anigif.h */,
+				1E44AEF80B67CDE900BAD059 /* m_argv.c */,
+				1E44AEFA0B67CDE900BAD059 /* m_argv.h */,
+				1E44AEFC0B67CDE900BAD059 /* m_bbox.c */,
+				1E44AEF90B67CDE900BAD059 /* m_bbox.h */,
+				1E44AEFB0B67CDE900BAD059 /* m_cheat.c */,
+				1E44AEFD0B67CDE900BAD059 /* m_cheat.h */,
+				67B83C2F14F57F1500AAAE4E /* m_cond.c */,
+				67B83C3014F57F1500AAAE4E /* m_cond.h */,
+				67B83C3114F57F1500AAAE4E /* m_dllist.h */,
+				1E44AEFE0B67CDE900BAD059 /* m_fixed.c */,
+				1E44AEFF0B67CDE900BAD059 /* m_fixed.h */,
+				1E44AF020B67CDE900BAD059 /* m_misc.c */,
+				1E44AF030B67CDE900BAD059 /* m_misc.h */,
+				676BB51C0E0DE06100C95963 /* m_queue.c */,
+				676BB51D0E0DE06100C95963 /* m_queue.h */,
+				1E44AF040B67CDE900BAD059 /* m_random.c */,
+				1E44AF050B67CDE900BAD059 /* m_random.h */,
+				1E44AF060B67CDE900BAD059 /* m_swap.h */,
+				1E44AF950B67CF1300BAD059 /* string.c */,
+			);
+			name = M_Misc;
+			sourceTree = "<group>";
+		};
+		1E44AF160B67CDFB00BAD059 /* P_Play */ = {
+			isa = PBXGroup;
+			children = (
+				1E44AF180B67CE2A00BAD059 /* info.c */,
+				1E44AF190B67CE2A00BAD059 /* info.h */,
+				1E44AF3B0B67CE5F00BAD059 /* p_ceilng.c */,
+				1E44AF240B67CE5F00BAD059 /* p_enemy.c */,
+				1E44AF250B67CE5F00BAD059 /* p_inter.c */,
+				1E44AF260B67CE5F00BAD059 /* p_fab.c */,
+				1E44AF270B67CE5F00BAD059 /* p_lights.c */,
+				1E44AF280B67CE5F00BAD059 /* p_map.c */,
+				1E44AF290B67CE5F00BAD059 /* p_maputl.c */,
+				1E44AF2A0B67CE5F00BAD059 /* p_maputl.h */,
+				1E44AF2B0B67CE5F00BAD059 /* p_mobj.c */,
+				1E44AF2C0B67CE5F00BAD059 /* p_mobj.h */,
+				1E44AF2D0B67CE5F00BAD059 /* p_floor.c */,
+				1E44AF2E0B67CE5F00BAD059 /* p_local.h */,
+				676BB51E0E0DE06100C95963 /* p_polyobj.c */,
+				676BB51F0E0DE06100C95963 /* p_polyobj.h */,
+				1E44AF2F0B67CE5F00BAD059 /* p_pspr.h */,
+				1E44AF300B67CE5F00BAD059 /* p_saveg.c */,
+				1E44AF310B67CE5F00BAD059 /* p_saveg.h */,
+				1E44AF320B67CE5F00BAD059 /* p_setup.c */,
+				1E44AF330B67CE5F00BAD059 /* p_setup.h */,
+				1E44AF340B67CE5F00BAD059 /* p_sight.c */,
+				1E44AF350B67CE5F00BAD059 /* p_spec.c */,
+				1E44AF360B67CE5F00BAD059 /* p_spec.h */,
+				1E44AF370B67CE5F00BAD059 /* p_telept.c */,
+				1E44AF380B67CE5F00BAD059 /* p_tick.c */,
+				1E44AF390B67CE5F00BAD059 /* p_tick.h */,
+				1E44AF3A0B67CE5F00BAD059 /* p_user.c */,
+				1E44AF990B67CF2E00BAD059 /* tables.c */,
+				1E44AF9A0B67CF2E00BAD059 /* tables.h */,
+			);
+			name = P_Play;
+			sourceTree = "<group>";
+		};
+		1E44AF170B67CE1000BAD059 /* W_Wad */ = {
+			isa = PBXGroup;
+			children = (
+				1E44B2240B67EADE00BAD059 /* lzf.c */,
+				1E44B2250B67EADE00BAD059 /* lzf.h */,
+				1E44AF1C0B67CE3600BAD059 /* md5.c */,
+				1E44AF1D0B67CE3600BAD059 /* md5.h */,
+				1E44AFA70B67CF6400BAD059 /* w_wad.c */,
+				1E44AFA80B67CF6400BAD059 /* w_wad.h */,
+			);
+			name = W_Wad;
+			sourceTree = "<group>";
+		};
+		1E44AF540B67CE8C00BAD059 /* R_Render */ = {
+			isa = PBXGroup;
+			children = (
+				1E44AF550B67CEC100BAD059 /* r_bsp.c */,
+				1E44AF560B67CEC100BAD059 /* r_bsp.h */,
+				1E44AF570B67CEC100BAD059 /* r_defs.h */,
+				1E44AF580B67CEC100BAD059 /* r_data.c */,
+				1E44AF590B67CEC100BAD059 /* r_draw.c */,
+				1E44AF5A0B67CEC100BAD059 /* r_draw16.c */,
+				1E44AF5B0B67CEC100BAD059 /* r_draw8.c */,
+				1E44AF5C0B67CEC100BAD059 /* r_main.c */,
+				1E44AF5D0B67CEC100BAD059 /* r_main.h */,
+				1E44AF5E0B67CEC100BAD059 /* r_data.h */,
+				1E44AF5F0B67CEC100BAD059 /* r_draw.h */,
+				1E44AF600B67CEC100BAD059 /* r_local.h */,
+				1E44AF610B67CEC100BAD059 /* r_plane.c */,
+				1E44AF620B67CEC100BAD059 /* r_plane.h */,
+				1E44AF630B67CEC100BAD059 /* r_segs.c */,
+				1E44AF640B67CEC100BAD059 /* r_segs.h */,
+				1E44AF650B67CEC200BAD059 /* r_sky.c */,
+				1E44AF660B67CEC200BAD059 /* r_sky.h */,
+				1E44AF670B67CEC200BAD059 /* r_splats.c */,
+				1E44AF680B67CEC200BAD059 /* r_splats.h */,
+				1E44AF690B67CEC200BAD059 /* r_state.h */,
+				1E44AF6A0B67CEC200BAD059 /* r_things.c */,
+				1E44AF6B0B67CEC200BAD059 /* r_things.h */,
+				1E44AF890B67CEE900BAD059 /* screen.c */,
+				1E44AF8A0B67CEE900BAD059 /* screen.h */,
+				1E44AFA30B67CF5D00BAD059 /* v_video.c */,
+				1E44AFA40B67CF5D00BAD059 /* v_video.h */,
+			);
+			name = R_Render;
+			sourceTree = "<group>";
+		};
+		1E44AF830B67CEC900BAD059 /* S_Sound */ = {
+			isa = PBXGroup;
+			children = (
+				1E44AF850B67CEE000BAD059 /* s_sound.c */,
+				1E44AF860B67CEE000BAD059 /* s_sound.h */,
+				1E44AF8D0B67CEF000BAD059 /* sounds.c */,
+				1E44AF8E0B67CEF000BAD059 /* sounds.h */,
+			);
+			name = S_Sound;
+			sourceTree = "<group>";
+		};
+		1E44AFB30B67CF8500BAD059 /* SDL */ = {
+			isa = PBXGroup;
+			children = (
+				1E44AFE50B67D04900BAD059 /* macosx */,
+				1E44AFD40B67D03100BAD059 /* filter */,
+				1E44AFB40B67CFDC00BAD059 /* dosstr.c */,
+				1E44AFB50B67CFDC00BAD059 /* endtxt.c */,
+				1E44AFB60B67CFDC00BAD059 /* endtxt.h */,
+				1E44AFB70B67CFDC00BAD059 /* hwsym_sdl.c */,
+				1E44AFB80B67CFDC00BAD059 /* hwsym_sdl.h */,
+				1E44AFB90B67CFDC00BAD059 /* i_cdmus.c */,
+				1E44AFBA0B67CFDC00BAD059 /* i_main.c */,
+				1E44AFBB0B67CFDC00BAD059 /* i_net.c */,
+				1E44AFBD0B67CFDC00BAD059 /* i_system.c */,
+				1E44AFBE0B67CFDC00BAD059 /* i_video.c */,
+				1E44AFBF0B67CFDC00BAD059 /* IMG_xpm.c */,
+				1E44AFEC0B67D0AB00BAD059 /* r_opengl.c */,
+				1E44AFC00B67CFDC00BAD059 /* ogl_sdl.c */,
+				1E44AFC10B67CFDC00BAD059 /* ogl_sdl.h */,
+				1E44AFC20B67CFDC00BAD059 /* SDL_icon.xpm */,
+				1E44AFC30B67CFDC00BAD059 /* sdlmain.h */,
+			);
+			name = SDL;
+			sourceTree = "<group>";
+		};
+		1E44AFD40B67D03100BAD059 /* filter */ = {
+			isa = PBXGroup;
+			children = (
+				1E44AFD50B67D03100BAD059 /* filters.c */,
+				1E44AFD60B67D03100BAD059 /* filters.h */,
+				1E44AFD70B67D03100BAD059 /* hq2x.c */,
+				1E44AFD80B67D03100BAD059 /* hq2x.h */,
+				1E44AFD90B67D03100BAD059 /* interp.h */,
+				1E44AFDA0B67D03100BAD059 /* lq2x.c */,
+				1E44AFDB0B67D03100BAD059 /* lq2x.h */,
+				1E44AFDC0B67D03100BAD059 /* main.c */,
+			);
+			name = filter;
+			path = ../filter;
+			sourceTree = SOURCE_ROOT;
+		};
+		1E44AFE50B67D04900BAD059 /* macosx */ = {
+			isa = PBXGroup;
+			children = (
+				1E44AFE60B67D06200BAD059 /* mac_alert.h */,
+				1E44AFE70B67D06200BAD059 /* Srb2mac.icns */,
+				1E44AFE80B67D06200BAD059 /* mac_alert.c */,
+				1E44B0560B67D81E00BAD059 /* SDL_macosx_main.h */,
+				1E44B0570B67D81E00BAD059 /* SDL_macosx_main.m */,
+			);
+			name = macosx;
+			sourceTree = "<group>";
+		};
+		29B97314FDCFA39411CA2CEA /* Srb2mac */ = {
+			isa = PBXGroup;
+			children = (
+				080E96DDFE201D6D7F000001 /* Classes */,
+				29B97315FDCFA39411CA2CEA /* Other Sources */,
+				29B97317FDCFA39411CA2CEA /* Resources */,
+				29B97323FDCFA39411CA2CEA /* Frameworks */,
+				19C28FACFE9D520D11CA2CBB /* Products */,
+			);
+			name = Srb2mac;
+			sourceTree = "<group>";
+		};
+		29B97315FDCFA39411CA2CEA /* Other Sources */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			name = "Other Sources";
+			sourceTree = "<group>";
+		};
+		29B97317FDCFA39411CA2CEA /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				67259E2B18D26D5700F02971 /* patch.dta */,
+				67259E2C18D26D5700F02971 /* rings.dta */,
+				67259E2D18D26D5700F02971 /* srb2.srb */,
+				67A1F91813FAD026009FA3E5 /* player.dta */,
+				6766C0AE11B057E50065F389 /* zones.dta */,
+				1E44AE440B67CBE800BAD059 /* music.dta */,
+				1E44AE4B0B67CBE800BAD059 /* srb2.wad */,
+				8D1107310486CEB800E47090 /* Info.plist */,
+				089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
+			);
+			name = Resources;
+			sourceTree = "<group>";
+		};
+		29B97323FDCFA39411CA2CEA /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
+				1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		67B83BC814F57D6E00AAAE4E /* LUA */ = {
+			isa = PBXGroup;
+			children = (
+				67259DFA18D2687D00F02971 /* lua_hud.h */,
+				67259DFB18D2687D00F02971 /* lua_hudlib.c */,
+				67259DFC18D2687D00F02971 /* lua_skinlib.c */,
+				67B83C2C14F57F1500AAAE4E /* fastcmp.h */,
+				67B83C1514F57EE600AAAE4E /* lua_baselib.c */,
+				67B83C1614F57EE600AAAE4E /* lua_consolelib.c */,
+				67B83C1714F57EE600AAAE4E /* lua_hook.h */,
+				67B83C1814F57EE600AAAE4E /* lua_hooklib.c */,
+				67B83C1914F57EE600AAAE4E /* lua_infolib.c */,
+				67B83C1A14F57EE600AAAE4E /* lua_libs.h */,
+				67B83C1B14F57EE600AAAE4E /* lua_maplib.c */,
+				67B83C1C14F57EE600AAAE4E /* lua_mathlib.c */,
+				67B83C1D14F57EE600AAAE4E /* lua_mobjlib.c */,
+				67B83C1E14F57EE600AAAE4E /* lua_playerlib.c */,
+				67B83C1F14F57EE600AAAE4E /* lua_script.c */,
+				67B83C2014F57EE600AAAE4E /* lua_script.h */,
+				67B83C2114F57EE600AAAE4E /* lua_thinkerlib.c */,
+			);
+			name = LUA;
+			sourceTree = "<group>";
+		};
+		67B83BC914F57D7F00AAAE4E /* BLUA */ = {
+			isa = PBXGroup;
+			children = (
+				67B83BCB14F57EAB00AAAE4E /* lapi.c */,
+				67B83BCC14F57EAB00AAAE4E /* lapi.h */,
+				67B83BCD14F57EAB00AAAE4E /* lauxlib.c */,
+				67B83BCE14F57EAB00AAAE4E /* lauxlib.h */,
+				67B83BCF14F57EAB00AAAE4E /* lbaselib.c */,
+				67B83BD014F57EAB00AAAE4E /* lcode.c */,
+				67B83BD114F57EAB00AAAE4E /* lcode.h */,
+				67B83BD214F57EAB00AAAE4E /* ldebug.c */,
+				67B83BD314F57EAB00AAAE4E /* ldebug.h */,
+				67B83BD414F57EAB00AAAE4E /* ldo.c */,
+				67B83BD514F57EAB00AAAE4E /* ldo.h */,
+				67B83BD614F57EAB00AAAE4E /* ldump.c */,
+				67B83BD714F57EAB00AAAE4E /* lfunc.c */,
+				67B83BD814F57EAB00AAAE4E /* lfunc.h */,
+				67B83BD914F57EAB00AAAE4E /* lgc.c */,
+				67B83BDA14F57EAB00AAAE4E /* lgc.h */,
+				67B83BDB14F57EAB00AAAE4E /* linit.c */,
+				67B83BDC14F57EAB00AAAE4E /* llex.c */,
+				67B83BDD14F57EAB00AAAE4E /* llex.h */,
+				67B83BDE14F57EAB00AAAE4E /* llimits.h */,
+				67B83BDF14F57EAB00AAAE4E /* lmem.c */,
+				67B83BE014F57EAB00AAAE4E /* lmem.h */,
+				67B83BE114F57EAB00AAAE4E /* lobject.c */,
+				67B83BE214F57EAB00AAAE4E /* lobject.h */,
+				67B83BE314F57EAB00AAAE4E /* lopcodes.c */,
+				67B83BE414F57EAB00AAAE4E /* lopcodes.h */,
+				67B83BE514F57EAB00AAAE4E /* lparser.c */,
+				67B83BE614F57EAB00AAAE4E /* lparser.h */,
+				67B83BE714F57EAB00AAAE4E /* lstate.c */,
+				67B83BE814F57EAB00AAAE4E /* lstate.h */,
+				67B83BE914F57EAB00AAAE4E /* lstring.c */,
+				67B83BEA14F57EAB00AAAE4E /* lstring.h */,
+				67B83BEB14F57EAB00AAAE4E /* lstrlib.c */,
+				67B83BEC14F57EAB00AAAE4E /* ltable.c */,
+				67B83BED14F57EAB00AAAE4E /* ltable.h */,
+				67B83BEE14F57EAB00AAAE4E /* ltablib.c */,
+				67B83BEF14F57EAB00AAAE4E /* ltm.c */,
+				67B83BF014F57EAB00AAAE4E /* ltm.h */,
+				67B83BF114F57EAB00AAAE4E /* lua.h */,
+				67B83BF214F57EAB00AAAE4E /* luaconf.h */,
+				67B83BF314F57EAB00AAAE4E /* lualib.h */,
+				67B83BF414F57EAB00AAAE4E /* lundump.c */,
+				67B83BF514F57EAB00AAAE4E /* lundump.h */,
+				67B83BF614F57EAB00AAAE4E /* lvm.c */,
+				67B83BF714F57EAB00AAAE4E /* lvm.h */,
+				67B83BF814F57EAB00AAAE4E /* lzio.c */,
+				67B83BF914F57EAB00AAAE4E /* lzio.h */,
+			);
+			name = BLUA;
+			sourceTree = "<group>";
+		};
+		67B83BCA14F57DD400AAAE4E /* B_Bot */ = {
+			isa = PBXGroup;
+			children = (
+				67B83C1214F57ECA00AAAE4E /* b_bot.c */,
+				67B83C1314F57ECA00AAAE4E /* b_bot.h */,
+			);
+			name = B_Bot;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		8D1107260486CEB800E47090 /* Srb2mac */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Srb2mac" */;
+			buildPhases = (
+				8D1107290486CEB800E47090 /* Resources */,
+				677E4CB30E1765500034519D /* ShellScript */,
+				8D11072C0486CEB800E47090 /* Sources */,
+				8D11072E0486CEB800E47090 /* Frameworks */,
+				002F39FD09D0883400EBEB88 /* Copy Frameworks into .app bundle */,
+				679B708A102B872300AA9E4C /* ShellScript */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = Srb2mac;
+			productInstallPath = "$(HOME)/Applications";
+			productName = Srb2mac;
+			productReference = 8D1107320486CEB800E47090 /* Srb2mac.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		29B97313FDCFA39411CA2CEA /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Srb2mac" */;
+			compatibilityVersion = "Xcode 2.4";
+			hasScannedForEncodings = 1;
+			mainGroup = 29B97314FDCFA39411CA2CEA /* Srb2mac */;
+			projectDirPath = "";
+			projectRoot = ../../..;
+			targets = (
+				8D1107260486CEB800E47090 /* Srb2mac */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		8D1107290486CEB800E47090 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
+				1E44AFEA0B67D06200BAD059 /* Srb2mac.icns in Resources */,
+				67259E2E18D26D5700F02971 /* patch.dta in Resources */,
+				67259E2F18D26D5700F02971 /* rings.dta in Resources */,
+				67259E3018D26D5700F02971 /* srb2.srb in Resources */,
+				67259E3218D26DD200F02971 /* music.dta in Resources */,
+				67259E3318D26DD300F02971 /* player.dta in Resources */,
+				67259E3518D26DD500F02971 /* zones.dta in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		677E4CB30E1765500034519D /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			comments = "update the time and date stamps in src/comptime.c";
+			files = (
+			);
+			inputPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "PATH=\"/usr/local/bin:$PATH\" $SRCROOT/../../../comptime.sh $SRCROOT/../../";
+		};
+		679B708A102B872300AA9E4C /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			comments = "make DMG file for Release builds";
+			files = (
+			);
+			inputPaths = (
+				$BUILT_PRODUCTS_DIR/$WRAPPER_NAME,
+			);
+			outputPaths = (
+				$BUILT_PRODUCTS_DIR/$TARGET_NAME.nodata.dmg,
+				$BUILT_PRODUCTS_DIR/$TARGET_NAME.dmg,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "set -ex\n\n[ \"$ACTION\" = build ] || exit 0\n[ \"$CURRENT_VARIANT\" = \"normal\" ] || exit 0\n[ \"$BUILD_STYLE\" = \"Release\" ] || exit 0\n\ndir=\"$TEMP_FILES_DIR/$TARGET_NAME.disk\"\ndmg=\"$BUILT_PRODUCTS_DIR/$TARGET_NAME.dmg\"\ndmg_nodata=\"$BUILT_PRODUCTS_DIR/$TARGET_NAME.nodata.dmg\"\n\nrm -rf -- \"$dir\"\nmkdir \"$dir\"\ncp -R \"$BUILT_PRODUCTS_DIR/$WRAPPER_NAME\" \"$dir\"\nrm -f -- \"$dmg\"\nhdiutil create -ov -fs HFS+ -srcfolder \"$dir\" -volname \"$TARGET_NAME\" \"$dmg\"\nhdiutil internet-enable -yes \"$dmg\"\ncd \"$dir/$WRAPPER_NAME/Contents/Resources\"\nrm -f -- *.wad\nrm -f -- *.dta\nrm -f -- *.plr\nrm -f -- *.wpn\ncd \"$OLDPWD\"\nrm -f -- \"$dmg_nodata\"\nhdiutil create -ov -fs HFS+ -srcfolder \"$dir\" -volname \"$TARGET_NAME Lite\" \"$dmg_nodata\"\nhdiutil internet-enable -yes \"$dmg_nodata\"\nrm -rf -- \"$dir\"";
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8D11072C0486CEB800E47090 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				1E44AE750B67CC2B00BAD059 /* hw_bsp.c in Sources */,
+				1E44AE770B67CC2B00BAD059 /* hw3sound.c in Sources */,
+				1E44AE780B67CC2B00BAD059 /* hw_cache.c in Sources */,
+				1E44AE7C0B67CC2B00BAD059 /* hw_light.c in Sources */,
+				1E44AE800B67CC2B00BAD059 /* hw_draw.c in Sources */,
+				1E44AE820B67CC2B00BAD059 /* hw_main.c in Sources */,
+				1E44AE840B67CC2B00BAD059 /* hw_md2.c in Sources */,
+				1E44AE860B67CC2B00BAD059 /* hw_trick.c in Sources */,
+				1E44AEA40B67CC8500BAD059 /* d_clisrv.c in Sources */,
+				1E44AEA70B67CC8500BAD059 /* d_main.c in Sources */,
+				1E44AEA80B67CC8500BAD059 /* d_net.c in Sources */,
+				1E44AEAB0B67CC8500BAD059 /* d_netfil.c in Sources */,
+				1E44AEAF0B67CC8500BAD059 /* d_netcmd.c in Sources */,
+				1E44AEB30B67CC8500BAD059 /* dehacked.c in Sources */,
+				1E44AEBF0B67CCA900BAD059 /* f_wipe.c in Sources */,
+				1E44AEC00B67CCA900BAD059 /* f_finale.c in Sources */,
+				1E44AEC80B67CCC600BAD059 /* g_game.c in Sources */,
+				1E44AECC0B67CCC600BAD059 /* g_input.c in Sources */,
+				1E44AED00B67CCEE00BAD059 /* hu_stuff.c in Sources */,
+				1E44AEDC0B67CD1300BAD059 /* i_tcp.c in Sources */,
+				1E44AEE30B67CD2B00BAD059 /* am_map.c in Sources */,
+				1E44AEE90B67CD3F00BAD059 /* command.c in Sources */,
+				1E44AEEC0B67CD4400BAD059 /* comptime.c in Sources */,
+				1E44AEEF0B67CD5400BAD059 /* console.c in Sources */,
+				1E44AEF30B67CD7F00BAD059 /* filesrch.c in Sources */,
+				1E44AF070B67CDE900BAD059 /* m_argv.c in Sources */,
+				1E44AF0A0B67CDE900BAD059 /* m_cheat.c in Sources */,
+				1E44AF0B0B67CDE900BAD059 /* m_bbox.c in Sources */,
+				1E44AF0D0B67CDE900BAD059 /* m_fixed.c in Sources */,
+				1E44AF0F0B67CDE900BAD059 /* m_menu.c in Sources */,
+				1E44AF110B67CDE900BAD059 /* m_misc.c in Sources */,
+				1E44AF130B67CDE900BAD059 /* m_random.c in Sources */,
+				1E44AF1A0B67CE2A00BAD059 /* info.c in Sources */,
+				1E44AF1E0B67CE3600BAD059 /* md5.c in Sources */,
+				1E44AF220B67CE4100BAD059 /* mserv.c in Sources */,
+				1E44AF3C0B67CE5F00BAD059 /* p_enemy.c in Sources */,
+				1E44AF3D0B67CE5F00BAD059 /* p_inter.c in Sources */,
+				1E44AF3E0B67CE5F00BAD059 /* p_fab.c in Sources */,
+				1E44AF3F0B67CE5F00BAD059 /* p_lights.c in Sources */,
+				1E44AF400B67CE5F00BAD059 /* p_map.c in Sources */,
+				1E44AF410B67CE5F00BAD059 /* p_maputl.c in Sources */,
+				1E44AF430B67CE5F00BAD059 /* p_mobj.c in Sources */,
+				1E44AF450B67CE5F00BAD059 /* p_floor.c in Sources */,
+				1E44AF480B67CE5F00BAD059 /* p_saveg.c in Sources */,
+				1E44AF4A0B67CE5F00BAD059 /* p_setup.c in Sources */,
+				1E44AF4C0B67CE5F00BAD059 /* p_sight.c in Sources */,
+				1E44AF4D0B67CE5F00BAD059 /* p_spec.c in Sources */,
+				1E44AF4F0B67CE5F00BAD059 /* p_telept.c in Sources */,
+				1E44AF500B67CE5F00BAD059 /* p_tick.c in Sources */,
+				1E44AF520B67CE5F00BAD059 /* p_user.c in Sources */,
+				1E44AF530B67CE5F00BAD059 /* p_ceilng.c in Sources */,
+				1E44AF6C0B67CEC200BAD059 /* r_bsp.c in Sources */,
+				1E44AF6F0B67CEC200BAD059 /* r_data.c in Sources */,
+				1E44AF700B67CEC200BAD059 /* r_draw.c in Sources */,
+				1E44AF730B67CEC200BAD059 /* r_main.c in Sources */,
+				1E44AF780B67CEC200BAD059 /* r_plane.c in Sources */,
+				1E44AF7A0B67CEC200BAD059 /* r_segs.c in Sources */,
+				1E44AF7C0B67CEC200BAD059 /* r_sky.c in Sources */,
+				1E44AF7E0B67CEC200BAD059 /* r_splats.c in Sources */,
+				1E44AF810B67CEC200BAD059 /* r_things.c in Sources */,
+				1E44AF870B67CEE000BAD059 /* s_sound.c in Sources */,
+				1E44AF8B0B67CEE900BAD059 /* screen.c in Sources */,
+				1E44AF8F0B67CEF000BAD059 /* sounds.c in Sources */,
+				1E44AF930B67CEFF00BAD059 /* st_stuff.c in Sources */,
+				1E44AF9B0B67CF2E00BAD059 /* tables.c in Sources */,
+				1E44AFA50B67CF5D00BAD059 /* v_video.c in Sources */,
+				1E44AFA90B67CF6400BAD059 /* w_wad.c in Sources */,
+				1E44AFAD0B67CF6F00BAD059 /* y_inter.c in Sources */,
+				1E44AFB10B67CF7A00BAD059 /* z_zone.c in Sources */,
+				1E44AFC40B67CFDC00BAD059 /* dosstr.c in Sources */,
+				1E44AFC50B67CFDC00BAD059 /* endtxt.c in Sources */,
+				1E44AFC70B67CFDC00BAD059 /* hwsym_sdl.c in Sources */,
+				1E44AFC90B67CFDC00BAD059 /* i_cdmus.c in Sources */,
+				1E44AFCA0B67CFDC00BAD059 /* i_main.c in Sources */,
+				1E44AFCB0B67CFDC00BAD059 /* i_net.c in Sources */,
+				1E44AFCD0B67CFDC00BAD059 /* i_system.c in Sources */,
+				1E44AFCE0B67CFDC00BAD059 /* i_video.c in Sources */,
+				1E44AFD00B67CFDC00BAD059 /* ogl_sdl.c in Sources */,
+				1E44AFEB0B67D06200BAD059 /* mac_alert.c in Sources */,
+				1E44AFED0B67D0AB00BAD059 /* r_opengl.c in Sources */,
+				1E44B0590B67D81E00BAD059 /* SDL_macosx_main.m in Sources */,
+				1E308E720B71172D0015728C /* lzf.c in Sources */,
+				676BB5200E0DE06100C95963 /* m_queue.c in Sources */,
+				676BB5220E0DE06100C95963 /* p_polyobj.c in Sources */,
+				67B83BFA14F57EAB00AAAE4E /* lapi.c in Sources */,
+				67B83BFB14F57EAB00AAAE4E /* lauxlib.c in Sources */,
+				67B83BFC14F57EAB00AAAE4E /* lbaselib.c in Sources */,
+				67B83BFD14F57EAB00AAAE4E /* lcode.c in Sources */,
+				67B83BFE14F57EAB00AAAE4E /* ldebug.c in Sources */,
+				67B83BFF14F57EAB00AAAE4E /* ldo.c in Sources */,
+				67B83C0014F57EAB00AAAE4E /* ldump.c in Sources */,
+				67B83C0114F57EAB00AAAE4E /* lfunc.c in Sources */,
+				67B83C0214F57EAB00AAAE4E /* lgc.c in Sources */,
+				67B83C0314F57EAB00AAAE4E /* linit.c in Sources */,
+				67B83C0414F57EAB00AAAE4E /* llex.c in Sources */,
+				67B83C0514F57EAB00AAAE4E /* lmem.c in Sources */,
+				67B83C0614F57EAB00AAAE4E /* lobject.c in Sources */,
+				67B83C0714F57EAB00AAAE4E /* lopcodes.c in Sources */,
+				67B83C0814F57EAB00AAAE4E /* lparser.c in Sources */,
+				67B83C0914F57EAB00AAAE4E /* lstate.c in Sources */,
+				67B83C0A14F57EAB00AAAE4E /* lstring.c in Sources */,
+				67B83C0B14F57EAB00AAAE4E /* lstrlib.c in Sources */,
+				67B83C0C14F57EAB00AAAE4E /* ltable.c in Sources */,
+				67B83C0D14F57EAB00AAAE4E /* ltablib.c in Sources */,
+				67B83C0E14F57EAB00AAAE4E /* ltm.c in Sources */,
+				67B83C0F14F57EAB00AAAE4E /* lundump.c in Sources */,
+				67B83C1014F57EAB00AAAE4E /* lvm.c in Sources */,
+				67B83C1114F57EAB00AAAE4E /* lzio.c in Sources */,
+				67B83C1414F57ECA00AAAE4E /* b_bot.c in Sources */,
+				67B83C2214F57EE600AAAE4E /* lua_baselib.c in Sources */,
+				67B83C2314F57EE600AAAE4E /* lua_consolelib.c in Sources */,
+				67B83C2414F57EE600AAAE4E /* lua_hooklib.c in Sources */,
+				67B83C2514F57EE600AAAE4E /* lua_infolib.c in Sources */,
+				67B83C2614F57EE600AAAE4E /* lua_maplib.c in Sources */,
+				67B83C2714F57EE600AAAE4E /* lua_mathlib.c in Sources */,
+				67B83C2814F57EE600AAAE4E /* lua_mobjlib.c in Sources */,
+				67B83C2914F57EE600AAAE4E /* lua_playerlib.c in Sources */,
+				67B83C2A14F57EE600AAAE4E /* lua_script.c in Sources */,
+				67B83C2B14F57EE600AAAE4E /* lua_thinkerlib.c in Sources */,
+				67B83C3314F57F1500AAAE4E /* m_cond.c in Sources */,
+				67259DFD18D2687D00F02971 /* lua_hudlib.c in Sources */,
+				67259DFE18D2687D00F02971 /* lua_skinlib.c in Sources */,
+				67259E0118D268AE00F02971 /* m_anigif.c in Sources */,
+				67259E0618D268F700F02971 /* i_ttf.c in Sources */,
+				67259E0718D268F700F02971 /* mixer_sound.c in Sources */,
+				67259E0818D268F700F02971 /* sdl_sound.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				089C165DFE840E0CC02AAC07 /* English */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		C01FCF4B08A954540054247B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CURRENT_PROJECT_VERSION = 2.1.2;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"$(inherited)",
+					NORMALSRB2,
+				);
+				PRODUCT_NAME = Srb2mac;
+			};
+			name = Debug;
+		};
+		C01FCF4C08A954540054247B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CURRENT_PROJECT_VERSION = 2.1.2;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"$(inherited)",
+					NORMALSRB2,
+				);
+				PRODUCT_NAME = Srb2mac;
+			};
+			name = Release;
+		};
+		C01FCF4F08A954540054247B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = (
+					i386,
+					ppc,
+				);
+				COPY_PHASE_STRIP = NO;
+				CURRENT_PROJECT_VERSION = 0.0.0;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				DSTROOT = "$(HOME)/Applications";
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(HOME)/Library/Frameworks",
+					/Library/Frameworks,
+					"$(FRAMEWORK_SEARCH_PATHS)",
+				);
+				GCC_ENABLE_CPP_EXCEPTIONS = NO;
+				GCC_ENABLE_CPP_RTTI = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_ENABLE_OBJC_EXCEPTIONS = NO;
+				GCC_ENABLE_PASCAL_STRINGS = NO;
+				GCC_FAST_OBJC_DISPATCH = NO;
+				"GCC_MODEL_TUNING[arch=ppc]" = G3;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					MAC_ALERT,
+					SDLMAIN,
+					SDL,
+					HAVE_MIXER,
+					HAVE_PNG,
+					HAVE_BLUA,
+					LUA_USE_POSIX,
+					COMPVERSION,
+				);
+				GCC_THREADSAFE_STATICS = NO;
+				GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
+				GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS = YES;
+				GCC_TREAT_WARNINGS_AS_ERRORS = YES;
+				GCC_VERSION_i386 = 4.0;
+				GCC_VERSION_ppc0 = 3.3;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_GLOBAL_CONSTRUCTORS = YES;
+				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
+				GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
+				GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES;
+				GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
+				GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = YES;
+				GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
+				GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
+				GCC_WARN_INHIBIT_ALL_WARNINGS = NO;
+				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
+				GCC_WARN_MISSING_PARENTHESES = YES;
+				GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO;
+				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
+				GCC_WARN_PEDANTIC = NO;
+				GCC_WARN_PROTOTYPE_CONVERSION = NO;
+				GCC_WARN_SHADOW = NO;
+				GCC_WARN_SIGN_COMPARE = YES;
+				GCC_WARN_STRICT_SELECTOR_MATCH = YES;
+				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = NO;
+				GCC_WARN_UNKNOWN_PRAGMAS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_LABEL = YES;
+				GCC_WARN_UNUSED_PARAMETER = YES;
+				GCC_WARN_UNUSED_VALUE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				GGG_MODEL_TUNING_ppc = G3;
+				HEADER_SEARCH_PATHS = (
+					"$(HOME)/Library/Frameworks/SDL.framework/Headers",
+					/Library/Frameworks/SDL.framework/Headers,
+					"$(HOME)/Library/Frameworks/SDL_mixer.framework/Headers",
+					/Library/Frameworks/SDL_mixer.framework/Headers,
+					"$(HOME)/Library/Frameworks/libz.framework/Headers",
+					/Library/Frameworks/libz.framework/Headers,
+					"$(HOME)/Library/Frameworks/libpng.framework/Headers",
+					/Library/Frameworks/libpng.framework/Headers,
+					"$(HEADER_SEARCH_PATHS)",
+				);
+				INFOPLIST_FILE = Info.plist;
+				MACH_O_TYPE = mh_execute;
+				MACOSX_DEPLOYMENT_TARGET = 10.4;
+				"MACOSX_DEPLOYMENT_TARGET[arch=i386]" = 10.4;
+				"MACOSX_DEPLOYMENT_TARGET[arch=ppc64]" = 10.5;
+				"MACOSX_DEPLOYMENT_TARGET[arch=ppc]" = 10.2;
+				"MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.5;
+				MACOSX_DEPLOYMENT_TARGET_i386 = 10.4;
+				MACOSX_DEPLOYMENT_TARGET_ppc = 10.2;
+				OBJROOT = "$(inherited)/$(PRODUCT_NAME)/$(CURRENT_PROJECT_VERSION)";
+				OTHER_CFLAGS_normal = "-D_DEBUG -DPARANOIA -DRANGECHECK";
+				PREBINDING = NO;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				PRODUCT_NAME = SRB2dummy;
+				SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
+				"SDKROOT[arch=i386]" = macosx10.4;
+				"SDKROOT[arch=ppc]" = macosx10.3.9;
+				SDKROOT_i386 = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
+				SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
+				STRIP_INSTALLED_PRODUCT = NO;
+				SYMROOT = "$(inherited)/$(PRODUCT_NAME)/$(CURRENT_PROJECT_VERSION)";
+				WARNING_CFLAGS = (
+					"-Wall",
+					"-W",
+					"-Wno-undef",
+					"-Wpointer-arith",
+					"-Wbad-function-cast",
+					"-Wno-cast-qual",
+					"-Wcast-align",
+					"-Wwrite-strings",
+					"-Waggregate-return",
+					"-Wmissing-prototypes",
+					"-Wmissing-declarations",
+					"-Wno-missing-noreturn",
+					"-Wnested-externs",
+					"-Winline",
+				);
+				WRAPPER_EXTENSION = app;
+			};
+			name = Debug;
+		};
+		C01FCF5008A954540054247B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = (
+					i386,
+					ppc,
+				);
+				COPY_PHASE_STRIP = NO;
+				CURRENT_PROJECT_VERSION = 0.0.0;
+				DSTROOT = "$(HOME)/Applications";
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(HOME)/Library/Frameworks",
+					/Library/Frameworks,
+					"$(FRAMEWORK_SEARCH_PATHS)",
+				);
+				GCC_ENABLE_CPP_EXCEPTIONS = NO;
+				GCC_ENABLE_CPP_RTTI = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = NO;
+				GCC_ENABLE_PASCAL_STRINGS = NO;
+				GCC_FAST_OBJC_DISPATCH = NO;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				"GCC_MODEL_TUNING[arch=ppc]" = G3;
+				GCC_OPTIMIZATION_LEVEL = 2;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					MAC_ALERT,
+					SDLMAIN,
+					SDL,
+					HAVE_MIXER,
+					HAVE_PNG,
+					HAVE_BLUA,
+					LUA_USE_POSIX,
+					COMPVERSION,
+				);
+				GCC_THREADSAFE_STATICS = NO;
+				GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
+				GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS = YES;
+				GCC_TREAT_WARNINGS_AS_ERRORS = YES;
+				GCC_VERSION_i386 = 4.0;
+				GCC_VERSION_ppc0 = 3.3;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_GLOBAL_CONSTRUCTORS = YES;
+				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
+				GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
+				GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES;
+				GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
+				GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = YES;
+				GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
+				GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
+				GCC_WARN_INHIBIT_ALL_WARNINGS = NO;
+				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
+				GCC_WARN_MISSING_PARENTHESES = YES;
+				GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO;
+				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
+				GCC_WARN_PEDANTIC = NO;
+				GCC_WARN_PROTOTYPE_CONVERSION = NO;
+				GCC_WARN_SHADOW = NO;
+				GCC_WARN_SIGN_COMPARE = YES;
+				GCC_WARN_STRICT_SELECTOR_MATCH = YES;
+				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNKNOWN_PRAGMAS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_LABEL = YES;
+				GCC_WARN_UNUSED_PARAMETER = YES;
+				GCC_WARN_UNUSED_VALUE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				GGG_MODEL_TUNING_ppc = G3;
+				HEADER_SEARCH_PATHS = (
+					"$(HOME)/Library/Frameworks/SDL.framework/Headers",
+					/Library/Frameworks/SDL.framework/Headers,
+					"$(HOME)/Library/Frameworks/SDL_mixer.framework/Headers",
+					/Library/Frameworks/SDL_mixer.framework/Headers,
+					"$(HOME)/Library/Frameworks/libz.framework/Headers",
+					/Library/Frameworks/libz.framework/Headers,
+					"$(HOME)/Library/Frameworks/libpng.framework/Headers",
+					/Library/Frameworks/libpng.framework/Headers,
+					"$(HEADER_SEARCH_PATHS)",
+				);
+				INFOPLIST_FILE = Info.plist;
+				MACH_O_TYPE = mh_execute;
+				MACOSX_DEPLOYMENT_TARGET = 10.4;
+				"MACOSX_DEPLOYMENT_TARGET[arch=i386]" = 10.4;
+				"MACOSX_DEPLOYMENT_TARGET[arch=ppc64]" = 10.5;
+				"MACOSX_DEPLOYMENT_TARGET[arch=ppc]" = 10.2;
+				"MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.5;
+				MACOSX_DEPLOYMENT_TARGET_i386 = 10.4;
+				MACOSX_DEPLOYMENT_TARGET_ppc = 10.2;
+				OBJROOT = "$(inherited)/$(PRODUCT_NAME)/$(CURRENT_PROJECT_VERSION)";
+				OTHER_CFLAGS_normal = "-DNDEBUG";
+				PREBINDING = NO;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				PRODUCT_NAME = SRB2dummy;
+				SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
+				"SDKROOT[arch=i386]" = macosx10.4;
+				"SDKROOT[arch=ppc]" = macosx10.3.9;
+				SDKROOT_i386 = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
+				SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
+				STRIP_INSTALLED_PRODUCT = NO;
+				SYMROOT = "$(inherited)/$(PRODUCT_NAME)/$(CURRENT_PROJECT_VERSION)";
+				WARNING_CFLAGS = (
+					"-Wall",
+					"-W",
+					"-Wno-undef",
+					"-Wpointer-arith",
+					"-Wbad-function-cast",
+					"-Wno-cast-qual",
+					"-Wcast-align",
+					"-Wwrite-strings",
+					"-Waggregate-return",
+					"-Wmissing-prototypes",
+					"-Wmissing-declarations",
+					"-Wno-missing-noreturn",
+					"-Wnested-externs",
+					"-Winline",
+					"-Wno-aggregate-return",
+				);
+				WRAPPER_EXTENSION = app;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Srb2mac" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C01FCF4B08A954540054247B /* Debug */,
+				C01FCF4C08A954540054247B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Debug;
+		};
+		C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Srb2mac" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C01FCF4F08A954540054247B /* Debug */,
+				C01FCF5008A954540054247B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Debug;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
+}
diff --git a/src/sdl2/macosx/mac_alert.c b/src/sdl2/macosx/mac_alert.c
new file mode 100644
index 000000000..455e36509
--- /dev/null
+++ b/src/sdl2/macosx/mac_alert.c
@@ -0,0 +1,45 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 1993-1996 by id Software, Inc.
+// Portions Copyright (C) 1998-2000 by DooM Legacy Team.
+//
+// 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.
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief Graphical Alerts for MacOSX
+///
+///	Shows alerts, since we can't just print these to the screen when
+///	launched graphically on a mac.
+
+#ifdef __APPLE_CC__
+
+#include "mac_alert.h"
+#include <CoreFoundation/CoreFoundation.h>
+
+int MacShowAlert(const char *title, const char *message, const char *button1, const char *button2, const char *button3)
+{
+	CFOptionFlags results;
+
+	CFUserNotificationDisplayAlert(0,
+	 kCFUserNotificationStopAlertLevel | kCFUserNotificationNoDefaultButtonFlag,
+	 NULL, NULL, NULL,
+	 CFStringCreateWithCString(NULL, title, kCFStringEncodingASCII),
+	 CFStringCreateWithCString(NULL, message, kCFStringEncodingASCII),
+	 button1 != NULL ? CFStringCreateWithCString(NULL, button1, kCFStringEncodingASCII) : NULL,
+	 button2 != NULL ? CFStringCreateWithCString(NULL, button2, kCFStringEncodingASCII) : NULL,
+	 button3 != NULL ? CFStringCreateWithCString(NULL, button3, kCFStringEncodingASCII) : NULL,
+	 &results);
+
+	return (int)results;
+}
+
+#endif
diff --git a/src/sdl2/macosx/mac_alert.h b/src/sdl2/macosx/mac_alert.h
new file mode 100644
index 000000000..82a28d120
--- /dev/null
+++ b/src/sdl2/macosx/mac_alert.h
@@ -0,0 +1,27 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 1993-1996 by id Software, Inc.
+// Portions Copyright (C) 1998-2000 by DooM Legacy Team.
+//
+// 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.
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief Graphical Alerts for MacOSX
+///
+///	Shows alerts, since we can't just print these to the screen when
+///	launched graphically on a mac.
+
+#ifdef __APPLE_CC__
+
+extern int MacShowAlert(const char *title, const char *message, const char *button1, const char *button2, const char *button3);
+
+#endif
diff --git a/src/sdl2/mixer_sound.c b/src/sdl2/mixer_sound.c
new file mode 100644
index 000000000..6888331de
--- /dev/null
+++ b/src/sdl2/mixer_sound.c
@@ -0,0 +1,824 @@
+/// \file
+/// \brief SDL Mixer interface for sound
+
+#include "../doomdef.h"
+
+#if defined(SDL) && defined(HAVE_MIXER) && SOUND==SOUND_MIXER
+
+#include "../sounds.h"
+#include "../s_sound.h"
+#include "../i_sound.h"
+#include "../w_wad.h"
+#include "../z_zone.h"
+#include "../byteptr.h"
+
+#ifdef _MSC_VER
+#pragma warning(disable : 4214 4244)
+#endif
+#include "SDL.h"
+#ifdef _MSC_VER
+#pragma warning(default : 4214 4244)
+#endif
+
+#include "SDL_mixer.h"
+
+/* This is the version number macro for the current SDL_mixer version: */
+#ifndef SDL_MIXER_COMPILEDVERSION
+#define SDL_MIXER_COMPILEDVERSION \
+	SDL_VERSIONNUM(MIX_MAJOR_VERSION, MIX_MINOR_VERSION, MIX_PATCHLEVEL)
+#endif
+
+/* This macro will evaluate to true if compiled with SDL_mixer at least X.Y.Z */
+#ifndef SDL_MIXER_VERSION_ATLEAST
+#define SDL_MIXER_VERSION_ATLEAST(X, Y, Z) \
+	(SDL_MIXER_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z))
+#endif
+
+#ifdef HAVE_LIBGME
+#include "gme/gme.h"
+#define GME_TREBLE 5.0
+#define GME_BASS 1.0
+#ifdef HAVE_PNG /// TODO: compile with zlib support without libpng
+
+#define HAVE_ZLIB
+
+#ifndef _MSC_VER
+#ifndef _WII
+#ifndef _LARGEFILE64_SOURCE
+#define _LARGEFILE64_SOURCE
+#endif
+#endif
+#endif
+
+#ifndef _LFS64_LARGEFILE
+#define _LFS64_LARGEFILE
+#endif
+
+#ifndef _FILE_OFFSET_BITS
+#define _FILE_OFFSET_BITS 0
+#endif
+
+#include "zlib.h"
+#endif
+#endif
+
+UINT8 sound_started = false;
+
+static boolean midimode;
+static Mix_Music *music;
+static UINT8 music_volume, midi_volume, sfx_volume;
+static float loop_point;
+
+#ifdef HAVE_LIBGME
+static Music_Emu *gme;
+static INT32 current_track;
+#endif
+
+void I_StartupSound(void)
+{
+	I_Assert(!sound_started);
+	sound_started = true;
+
+	midimode = false;
+	music = NULL;
+	music_volume = midi_volume = sfx_volume = 0;
+
+#if SDL_MIXER_VERSION_ATLEAST(1,2,11)
+	Mix_Init(MIX_INIT_FLAC|MIX_INIT_MOD|MIX_INIT_MP3|MIX_INIT_OGG);
+#endif
+	Mix_OpenAudio(44100, AUDIO_S16LSB, 2, 2048);
+	Mix_AllocateChannels(256);
+}
+
+void I_ShutdownSound(void)
+{
+	I_Assert(sound_started);
+	sound_started = false;
+
+	Mix_CloseAudio();
+#if SDL_MIXER_VERSION_ATLEAST(1,2,11)
+	Mix_Quit();
+#endif
+#ifdef HAVE_LIBGME
+	if (gme)
+		gme_delete(gme);
+#endif
+}
+
+void I_UpdateSound(void)
+{
+}
+
+// this is as fast as I can possibly make it.
+// sorry. more asm needed.
+static Mix_Chunk *ds2chunk(void *stream)
+{
+	UINT16 ver,freq;
+	UINT32 samples, i, newsamples;
+	UINT8 *sound;
+
+	SINT8 *s;
+	INT16 *d;
+	INT16 o;
+	fixed_t step, frac;
+
+	// lump header
+	ver = READUINT16(stream); // sound version format?
+	if (ver != 3) // It should be 3 if it's a doomsound...
+		return NULL; // onos! it's not a doomsound!
+	freq = READUINT16(stream);
+	samples = READUINT32(stream);
+
+	// convert from signed 8bit ???hz to signed 16bit 44100hz.
+	switch(freq)
+	{
+	case 44100:
+		if (samples >= UINT32_MAX>>2)
+			return NULL; // would wrap, can't store.
+		newsamples = samples;
+		break;
+	case 22050:
+		if (samples >= UINT32_MAX>>3)
+			return NULL; // would wrap, can't store.
+		newsamples = samples<<1;
+		break;
+	case 11025:
+		if (samples >= UINT32_MAX>>4)
+			return NULL; // would wrap, can't store.
+		newsamples = samples<<2;
+		break;
+	default:
+		frac = (44100 << FRACBITS) / (UINT32)freq;
+		if (!(frac & 0xFFFF)) // other solid multiples (change if FRACBITS != 16)
+			newsamples = samples * (frac >> FRACBITS);
+		else // strange and unusual fractional frequency steps, plus anything higher than 44100hz.
+			newsamples = FixedMul(frac, samples) + 1; // add 1 sample for security! the code below rounds up.
+		if (newsamples >= UINT32_MAX>>2)
+			return NULL; // would and/or did wrap, can't store.
+		break;
+	}
+	sound = Z_Malloc(newsamples<<2, PU_SOUND, NULL); // samples * frequency shift * bytes per sample * channels
+
+	s = (SINT8 *)stream;
+	d = (INT16 *)sound;
+
+	i = 0;
+	switch(freq)
+	{
+	case 44100: // already at the same rate? well that makes it simple.
+		while(i++ < samples)
+		{
+			o = ((INT16)(*s++)+0x80)<<8; // changed signedness and shift up to 16 bits
+			*d++ = o; // left channel
+			*d++ = o; // right channel
+		}
+		break;
+	case 22050: // unwrap 2x
+		while(i++ < samples)
+		{
+			o = ((INT16)(*s++)+0x80)<<8; // changed signedness and shift up to 16 bits
+			*d++ = o; // left channel
+			*d++ = o; // right channel
+			*d++ = o; // left channel
+			*d++ = o; // right channel
+		}
+		break;
+	case 11025: // unwrap 4x
+		while(i++ < samples)
+		{
+			o = ((INT16)(*s++)+0x80)<<8; // changed signedness and shift up to 16 bits
+			*d++ = o; // left channel
+			*d++ = o; // right channel
+			*d++ = o; // left channel
+			*d++ = o; // right channel
+			*d++ = o; // left channel
+			*d++ = o; // right channel
+			*d++ = o; // left channel
+			*d++ = o; // right channel
+		}
+		break;
+	default: // convert arbitrary hz to 44100.
+		step = 0;
+		frac = ((UINT32)freq << FRACBITS) / 44100;
+		while (i < samples)
+		{
+			o = (INT16)(*s+0x80)<<8; // changed signedness and shift up to 16 bits
+			while (step < FRACUNIT) // this is as fast as I can make it.
+			{
+				*d++ = o; // left channel
+				*d++ = o; // right channel
+				step += frac;
+			}
+			do {
+				i++; s++;
+				step -= FRACUNIT;
+			} while (step >= FRACUNIT);
+		}
+		break;
+	}
+
+	// return Mixer Chunk.
+	return Mix_QuickLoad_RAW(sound, (UINT8*)d-sound);
+}
+
+void *I_GetSfx(sfxinfo_t *sfx)
+{
+	void *lump;
+	Mix_Chunk *chunk;
+#ifdef HAVE_LIBGME
+	Music_Emu *emu;
+	gme_info_t *info;
+#endif
+
+	if (sfx->lumpnum == LUMPERROR)
+		sfx->lumpnum = S_GetSfxLumpNum(sfx);
+	sfx->length = W_LumpLength(sfx->lumpnum);
+
+	lump = W_CacheLumpNum(sfx->lumpnum, PU_SOUND);
+
+	// convert from standard DoomSound format.
+	chunk = ds2chunk(lump);
+	if (chunk)
+	{
+		Z_Free(lump);
+		return chunk;
+	}
+
+	// Not a doom sound? Try something else.
+#ifdef HAVE_LIBGME
+	// VGZ format
+	if (((UINT8 *)lump)[0] == 0x1F
+		&& ((UINT8 *)lump)[1] == 0x8B)
+	{
+#ifdef HAVE_ZLIB
+		UINT8 *inflatedData;
+		size_t inflatedLen;
+		z_stream stream;
+		int zErr; // Somewhere to handle any error messages zlib tosses out
+
+		memset(&stream, 0x00, sizeof (z_stream)); // Init zlib stream
+		// Begin the inflation process
+		inflatedLen = *(UINT32 *)lump + (sfx->length-4); // Last 4 bytes are the decompressed size, typically
+		inflatedData = (UINT8 *)Z_Malloc(inflatedLen, PU_SOUND, NULL); // Make room for the decompressed data
+		stream.total_in = stream.avail_in = sfx->length;
+		stream.total_out = stream.avail_out = inflatedLen;
+		stream.next_in = (UINT8 *)lump;
+		stream.next_out = inflatedData;
+
+		zErr = inflateInit2(&stream, 32 + MAX_WBITS);
+		if (zErr == Z_OK) // We're good to go
+		{
+			zErr = inflate(&stream, Z_FINISH);
+			if (zErr == Z_STREAM_END) {
+				// Run GME on new data
+				if (!gme_open_data(inflatedData, inflatedLen, &emu, 44100))
+				{
+					short *mem;
+					UINT32 len;
+					gme_equalizer_t eq = {GME_TREBLE, GME_BASS, 0,0,0,0,0,0,0,0};
+
+					Z_Free(inflatedData); // GME supposedly makes a copy for itself, so we don't need this lying around
+					Z_Free(lump); // We're done with the uninflated lump now, too.
+
+					gme_start_track(emu, 0);
+					gme_set_equalizer(emu, &eq);
+					gme_track_info(emu, &info, 0);
+
+					len = (info->play_length * 441 / 10) << 2;
+					mem = Z_Malloc(len, PU_SOUND, NULL);
+					gme_play(emu, len >> 1, mem);
+					gme_delete(emu);
+
+					return Mix_QuickLoad_RAW((Uint8 *)mem, len);
+				}
+			}
+			else
+			{
+				const char *errorType;
+				switch (zErr)
+				{
+					case Z_ERRNO:
+						errorType = "Z_ERRNO"; break;
+					case Z_STREAM_ERROR:
+						errorType = "Z_STREAM_ERROR"; break;
+					case Z_DATA_ERROR:
+						errorType = "Z_DATA_ERROR"; break;
+					case Z_MEM_ERROR:
+						errorType = "Z_MEM_ERROR"; break;
+					case Z_BUF_ERROR:
+						errorType = "Z_BUF_ERROR"; break;
+					case Z_VERSION_ERROR:
+						errorType = "Z_VERSION_ERROR"; break;
+					default:
+						errorType = "unknown error";
+				}
+				CONS_Alert(CONS_ERROR,"Encountered %s when running inflate: %s\n", errorType, stream.msg);
+			}
+			(void)inflateEnd(&stream);
+		}
+		else // Hold up, zlib's got a problem
+		{
+			const char *errorType;
+			switch (zErr)
+			{
+				case Z_ERRNO:
+					errorType = "Z_ERRNO"; break;
+				case Z_STREAM_ERROR:
+					errorType = "Z_STREAM_ERROR"; break;
+				case Z_DATA_ERROR:
+					errorType = "Z_DATA_ERROR"; break;
+				case Z_MEM_ERROR:
+					errorType = "Z_MEM_ERROR"; break;
+				case Z_BUF_ERROR:
+					errorType = "Z_BUF_ERROR"; break;
+				case Z_VERSION_ERROR:
+					errorType = "Z_VERSION_ERROR"; break;
+				default:
+					errorType = "unknown error";
+			}
+			CONS_Alert(CONS_ERROR,"Encountered %s when running inflateInit: %s\n", errorType, stream.msg);
+		}
+		Z_Free(inflatedData); // GME didn't open jack, but don't let that stop us from freeing this up
+#else
+		//CONS_Alert(CONS_ERROR,"Cannot decompress VGZ; no zlib support\n");
+#endif
+	}
+	// Try to read it as a GME sound
+	else if (!gme_open_data(lump, sfx->length, &emu, 44100))
+	{
+		short *mem;
+		UINT32 len;
+		gme_equalizer_t eq = {GME_TREBLE, GME_BASS, 0,0,0,0,0,0,0,0};
+
+		Z_Free(lump);
+
+		gme_start_track(emu, 0);
+		gme_set_equalizer(emu, &eq);
+		gme_track_info(emu, &info, 0);
+
+		len = (info->play_length * 441 / 10) << 2;
+		mem = Z_Malloc(len, PU_SOUND, NULL);
+		gme_play(emu, len >> 1, mem);
+		gme_delete(emu);
+
+		return Mix_QuickLoad_RAW((Uint8 *)mem, len);
+	}
+#endif
+
+	// Try to load it as a WAVE or OGG using Mixer.
+	return Mix_LoadWAV_RW(SDL_RWFromMem(lump, sfx->length), 1);
+}
+
+void I_FreeSfx(sfxinfo_t *sfx)
+{
+	if (sfx->data)
+		Mix_FreeChunk(sfx->data);
+	sfx->data = NULL;
+}
+
+INT32 I_StartSound(sfxenum_t id, UINT8 vol, UINT8 sep, UINT8 pitch, UINT8 priority)
+{
+	UINT8 volume = (((UINT16)vol + 1) * (UINT16)sfx_volume) / 62; // (256 * 31) / 62 == 127
+	INT32 handle = Mix_PlayChannel(-1, S_sfx[id].data, 0);
+	Mix_Volume(handle, volume);
+	Mix_SetPanning(handle, min((UINT16)sep<<1, 0xff), min((UINT16)(0xff-sep)<<1, 0xff));
+	(void)pitch; // Mixer can't handle pitch
+	(void)priority; // priority and channel management is handled by SRB2...
+	return handle;
+}
+
+void I_StopSound(INT32 handle)
+{
+	Mix_HaltChannel(handle);
+}
+
+boolean I_SoundIsPlaying(INT32 handle)
+{
+	return Mix_Playing(handle);
+}
+
+void I_UpdateSoundParams(INT32 handle, UINT8 vol, UINT8 sep, UINT8 pitch)
+{
+	UINT8 volume = (((UINT16)vol + 1) * (UINT16)sfx_volume) / 62; // (256 * 31) / 62 == 127
+	Mix_Volume(handle, volume);
+	Mix_SetPanning(handle, min((UINT16)sep<<1, 0xff), min((UINT16)(0xff-sep)<<1, 0xff));
+	(void)pitch;
+}
+
+void I_SetSfxVolume(UINT8 volume)
+{
+	sfx_volume = volume;
+}
+
+//
+// Music
+//
+
+// Music hooks
+static void music_loop(void)
+{
+	Mix_PlayMusic(music, 0);
+	Mix_SetMusicPosition(loop_point);
+}
+
+#ifdef HAVE_LIBGME
+static void mix_gme(void *udata, Uint8 *stream, int len)
+{
+	int i;
+	short *p;
+
+	(void)udata;
+
+	// no gme? no music.
+	if (!gme || gme_track_ended(gme))
+		return;
+
+	// play gme into stream
+	gme_play(gme, len/2, (short *)stream);
+
+	// apply volume to stream
+	for (i = 0, p = (short *)stream; i < len/2; i++, p++)
+		*p = ((INT32)*p) * music_volume / 31;
+}
+#endif
+
+void I_InitMusic(void)
+{
+}
+
+void I_ShutdownMusic(void)
+{
+	I_ShutdownDigMusic();
+	I_ShutdownMIDIMusic();
+}
+
+void I_PauseSong(INT32 handle)
+{
+	(void)handle;
+	Mix_PauseMusic();
+}
+
+void I_ResumeSong(INT32 handle)
+{
+	(void)handle;
+	Mix_ResumeMusic();
+}
+
+//
+// Digital Music
+//
+
+void I_InitDigMusic(void)
+{
+#ifdef HAVE_LIBGME
+	gme = NULL;
+	current_track = -1;
+#endif
+}
+
+void I_ShutdownDigMusic(void)
+{
+	if (midimode)
+		return;
+#ifdef HAVE_LIBGME
+	if (gme)
+	{
+		Mix_HookMusic(NULL, NULL);
+		gme_delete(gme);
+		gme = NULL;
+	}
+#endif
+	if (!music)
+		return;
+	Mix_HookMusicFinished(NULL);
+	Mix_FreeMusic(music);
+	music = NULL;
+}
+
+boolean I_StartDigSong(const char *musicname, boolean looping)
+{
+	char *data;
+	size_t len;
+	lumpnum_t lumpnum = W_CheckNumForName(va("O_%s",musicname));
+
+	I_Assert(!music);
+#ifdef HAVE_LIBGME
+	I_Assert(!gme);
+#endif
+
+	if (lumpnum == LUMPERROR)
+	{
+		lumpnum = W_CheckNumForName(va("D_%s",musicname));
+		if (lumpnum == LUMPERROR)
+			return false;
+		midimode = true;
+	}
+	else
+		midimode = false;
+
+	data = (char *)W_CacheLumpNum(lumpnum, PU_MUSIC);
+	len = W_LumpLength(lumpnum);
+
+#ifdef HAVE_LIBGME
+	if ((UINT8)data[0] == 0x1F
+		&& (UINT8)data[1] == 0x8B)
+	{
+#ifdef HAVE_ZLIB
+		UINT8 *inflatedData;
+		size_t inflatedLen;
+		z_stream stream;
+		int zErr; // Somewhere to handle any error messages zlib tosses out
+
+		memset(&stream, 0x00, sizeof (z_stream)); // Init zlib stream
+		// Begin the inflation process
+		inflatedLen = *(UINT32 *)(data + (len-4)); // Last 4 bytes are the decompressed size, typically
+		inflatedData = (UINT8 *)Z_Calloc(inflatedLen, PU_MUSIC, NULL); // Make room for the decompressed data
+		stream.total_in = stream.avail_in = len;
+		stream.total_out = stream.avail_out = inflatedLen;
+		stream.next_in = (UINT8 *)data;
+		stream.next_out = inflatedData;
+
+		zErr = inflateInit2(&stream, 32 + MAX_WBITS);
+		if (zErr == Z_OK) // We're good to go
+		{
+			zErr = inflate(&stream, Z_FINISH);
+			if (zErr == Z_STREAM_END) {
+				// Run GME on new data
+				if (!gme_open_data(inflatedData, inflatedLen, &gme, 44100))
+				{
+					gme_equalizer_t eq = {GME_TREBLE, GME_BASS, 0,0,0,0,0,0,0,0};
+					gme_start_track(gme, 0);
+					current_track = 0;
+					gme_set_equalizer(gme, &eq);
+					Mix_HookMusic(mix_gme, gme);
+					Z_Free(inflatedData); // GME supposedly makes a copy for itself, so we don't need this lying around
+					return true;
+				}
+			}
+			else
+			{
+				const char *errorType;
+				switch (zErr)
+				{
+					case Z_ERRNO:
+						errorType = "Z_ERRNO"; break;
+					case Z_STREAM_ERROR:
+						errorType = "Z_STREAM_ERROR"; break;
+					case Z_DATA_ERROR:
+						errorType = "Z_DATA_ERROR"; break;
+					case Z_MEM_ERROR:
+						errorType = "Z_MEM_ERROR"; break;
+					case Z_BUF_ERROR:
+						errorType = "Z_BUF_ERROR"; break;
+					case Z_VERSION_ERROR:
+						errorType = "Z_VERSION_ERROR"; break;
+					default:
+						errorType = "unknown error";
+				}
+				CONS_Alert(CONS_ERROR,"Encountered %s when running inflate: %s\n", errorType, stream.msg);
+			}
+			(void)inflateEnd(&stream);
+		}
+		else // Hold up, zlib's got a problem
+		{
+			const char *errorType;
+			switch (zErr)
+			{
+				case Z_ERRNO:
+					errorType = "Z_ERRNO"; break;
+				case Z_STREAM_ERROR:
+					errorType = "Z_STREAM_ERROR"; break;
+				case Z_DATA_ERROR:
+					errorType = "Z_DATA_ERROR"; break;
+				case Z_MEM_ERROR:
+					errorType = "Z_MEM_ERROR"; break;
+				case Z_BUF_ERROR:
+					errorType = "Z_BUF_ERROR"; break;
+				case Z_VERSION_ERROR:
+					errorType = "Z_VERSION_ERROR"; break;
+				default:
+					errorType = "unknown error";
+			}
+			CONS_Alert(CONS_ERROR,"Encountered %s when running inflateInit: %s\n", errorType, stream.msg);
+		}
+		Z_Free(inflatedData); // GME didn't open jack, but don't let that stop us from freeing this up
+#else
+		//CONS_Alert(CONS_ERROR,"Cannot decompress VGZ; no zlib support\n");
+#endif
+	}
+	else if (!gme_open_data(data, len, &gme, 44100))
+	{
+		gme_equalizer_t eq = {GME_TREBLE, GME_BASS, 0,0,0,0,0,0,0,0};
+		gme_start_track(gme, 0);
+		current_track = 0;
+		gme_set_equalizer(gme, &eq);
+		Mix_HookMusic(mix_gme, gme);
+		return true;
+	}
+#endif
+
+	music = Mix_LoadMUS_RW(SDL_RWFromMem(data, len));
+	if (!music)
+	{
+		CONS_Alert(CONS_ERROR, "Mix_LoadMUS_RW: %s\n", Mix_GetError());
+		return true;
+	}
+
+	// Find the OGG loop point.
+	loop_point = 0.0f;
+	if (looping)
+	{
+		const char *key1 = "LOOP";
+		const char *key2 = "POINT=";
+		const char *key3 = "MS=";
+		const UINT8 key1len = strlen(key1);
+		const UINT8 key2len = strlen(key2);
+		const UINT8 key3len = strlen(key3);
+		char *p = data;
+		while ((UINT32)(p - data) < len)
+		{
+			if (strncmp(p++, key1, key1len))
+				continue;
+			p += key1len-1; // skip OOP (the L was skipped in strncmp)
+			if (!strncmp(p, key2, key2len)) // is it LOOPPOINT=?
+			{
+				p += key2len; // skip POINT=
+				loop_point = (float)((44.1L+atoi(p)) / 44100.0L); // LOOPPOINT works by sample count.
+				// because SDL_Mixer is USELESS and can't even tell us
+				// something simple like the frequency of the streaming music,
+				// we are unfortunately forced to assume that ALL MUSIC is 44100hz.
+				// This means a lot of tracks that are only 22050hz for a reasonable downloadable file size will loop VERY badly.
+			}
+			else if (!strncmp(p, key3, key3len)) // is it LOOPMS=?
+			{
+				p += key3len; // skip MS=
+				loop_point = atoi(p) / 1000.0L; // LOOPMS works by real time, as miliseconds.
+				// Everything that uses LOOPMS will work perfectly with SDL_Mixer.
+			}
+			// Neither?! Continue searching.
+		}
+	}
+
+	if (Mix_PlayMusic(music, looping && loop_point == 0.0f ? -1 : 0) == -1)
+	{
+		CONS_Alert(CONS_ERROR, "Mix_PlayMusic: %s\n", Mix_GetError());
+		return true;
+	}
+	if (midimode)
+		Mix_VolumeMusic((UINT32)midi_volume*128/31);
+	else
+		Mix_VolumeMusic((UINT32)music_volume*128/31);
+
+	if (loop_point != 0.0f)
+		Mix_HookMusicFinished(music_loop);
+	return true;
+}
+
+void I_StopDigSong(void)
+{
+	if (midimode)
+		return;
+#ifdef HAVE_LIBGME
+	if (gme)
+	{
+		Mix_HookMusic(NULL, NULL);
+		gme_delete(gme);
+		gme = NULL;
+		current_track = -1;
+		return;
+	}
+#endif
+	if (!music)
+		return;
+	Mix_HookMusicFinished(NULL);
+	Mix_FreeMusic(music);
+	music = NULL;
+}
+
+void I_SetDigMusicVolume(UINT8 volume)
+{
+	music_volume = volume;
+	if (midimode || !music)
+		return;
+	Mix_VolumeMusic((UINT32)volume*128/31);
+}
+
+boolean I_SetSongSpeed(float speed)
+{
+	if (speed > 250.0f)
+		speed = 250.0f; //limit speed up to 250x
+#ifdef HAVE_LIBGME
+	if (gme)
+	{
+		SDL_LockAudio();
+		gme_set_tempo(gme, speed);
+		SDL_UnlockAudio();
+		return true;
+	}
+#else
+	(void)speed;
+#endif
+	return false;
+}
+
+boolean I_SetSongTrack(int track)
+{
+#ifdef HAVE_LIBGME
+	if (current_track == track)
+		return false;
+
+	// If the specified track is within the number of tracks playing, then change it
+	if (gme)
+	{
+		SDL_LockAudio();
+		if (track >= 0
+			&& track < gme_track_count(gme))
+		{
+			gme_err_t gme_e = gme_start_track(gme, track);
+			if (gme_e != NULL)
+			{
+				CONS_Alert(CONS_ERROR, "GME error: %s\n", gme_e);
+				return false;
+			}
+			current_track = track;
+			SDL_UnlockAudio();
+			return true;
+		}
+		SDL_UnlockAudio();
+		return false;
+	}
+#endif
+	(void)track;
+	return false;
+}
+
+//
+// MIDI Music
+//
+
+void I_InitMIDIMusic(void)
+{
+}
+
+void I_ShutdownMIDIMusic(void)
+{
+	if (!midimode || !music)
+		return;
+	Mix_FreeMusic(music);
+	music = NULL;
+}
+
+void I_SetMIDIMusicVolume(UINT8 volume)
+{
+	midi_volume = volume;
+	if (!midimode || !music)
+		return;
+	Mix_VolumeMusic((UINT32)volume*128/31);
+}
+
+INT32 I_RegisterSong(void *data, size_t len)
+{
+	music = Mix_LoadMUS_RW(SDL_RWFromMem(data, len));
+	if (!music)
+	{
+		CONS_Alert(CONS_ERROR, "Mix_LoadMUS_RW: %s\n", Mix_GetError());
+		return -1;
+	}
+	return 1337;
+}
+
+boolean I_PlaySong(INT32 handle, boolean looping)
+{
+	(void)handle;
+
+	midimode = true;
+
+	if (Mix_PlayMusic(music, looping ? -1 : 0) == -1)
+	{
+		CONS_Alert(CONS_ERROR, "Mix_PlayMusic: %s\n", Mix_GetError());
+		return false;
+	}
+	Mix_VolumeMusic((UINT32)music_volume*128/31);
+	return true;
+}
+
+void I_StopSong(INT32 handle)
+{
+	if (!midimode || !music)
+		return;
+
+	(void)handle;
+	Mix_HaltMusic();
+}
+
+void I_UnRegisterSong(INT32 handle)
+{
+	if (!midimode || !music)
+		return;
+
+	(void)handle;
+	Mix_FreeMusic(music);
+	music = NULL;
+}
+
+#endif
diff --git a/src/sdl2/ogl_sdl.c b/src/sdl2/ogl_sdl.c
new file mode 100644
index 000000000..9427d3317
--- /dev/null
+++ b/src/sdl2/ogl_sdl.c
@@ -0,0 +1,315 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 1998-2000 by DooM Legacy Team.
+//
+// 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.
+//
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief SDL specific part of the OpenGL API for SRB2
+
+#ifdef _MSC_VER
+#pragma warning(disable : 4214 4244)
+#endif
+
+#ifdef SDL
+
+#include "SDL.h"
+
+#ifdef _MSC_VER
+#pragma warning(default : 4214 4244)
+#endif
+
+#include "../doomdef.h"
+
+#ifdef HWRENDER
+#include "../hardware/r_opengl/r_opengl.h"
+#include "ogl_sdl.h"
+#include "../i_system.h"
+#include "hwsym_sdl.h"
+#include "../m_argv.h"
+
+#ifdef DEBUG_TO_FILE
+#include <stdarg.h>
+#if defined (_WIN32) && !defined (__CYGWIN__)
+#include <direct.h>
+#else
+#include <unistd.h>
+#endif
+#include <sys/types.h>
+#include <sys/stat.h>
+#endif
+
+#ifdef USE_WGL_SWAP
+PFNWGLEXTSWAPCONTROLPROC wglSwapIntervalEXT = NULL;
+#else
+typedef int (*PFNGLXSWAPINTERVALPROC) (int);
+PFNGLXSWAPINTERVALPROC glXSwapIntervalSGIEXT = NULL;
+#endif
+
+#ifndef STATIC_OPENGL
+PFNglClear pglClear;
+PFNglGetIntegerv pglGetIntegerv;
+PFNglGetString pglGetString;
+#endif
+
+#ifdef _PSP
+static const Uint32 WOGLFlags = SDL_HWSURFACE|SDL_OPENGL/*|SDL_RESIZABLE*/;
+static const Uint32 FOGLFlags = SDL_HWSURFACE|SDL_OPENGL|SDL_FULLSCREEN;
+#else
+static const Uint32 WOGLFlags = SDL_OPENGL/*|SDL_RESIZABLE*/;
+static const Uint32 FOGLFlags = SDL_OPENGL|SDL_FULLSCREEN;
+#endif
+
+/**	\brief SDL video display surface
+*/
+SDL_Surface *vidSurface = NULL;
+INT32 oglflags = 0;
+void *GLUhandle = NULL;
+
+#ifndef STATIC_OPENGL
+void *GetGLFunc(const char *proc)
+{
+	if (strncmp(proc, "glu", 3) == 0)
+	{
+		if (GLUhandle)
+			return hwSym(proc, GLUhandle);
+		else
+			return NULL;
+	}
+	return SDL_GL_GetProcAddress(proc);
+}
+#endif
+
+boolean LoadGL(void)
+{
+#ifndef STATIC_OPENGL
+	const char *OGLLibname = NULL;
+	const char *GLULibname = NULL;
+
+	if (M_CheckParm ("-OGLlib") && M_IsNextParm())
+		OGLLibname = M_GetNextParm();
+
+	if (SDL_GL_LoadLibrary(OGLLibname) != 0)
+	{
+		I_OutputMsg("Could not load OpenGL Library: %s\n"
+					"Falling back to Software mode.\n", SDL_GetError());
+		if (!M_CheckParm ("-OGLlib"))
+			I_OutputMsg("If you know what is the OpenGL library's name, use -OGLlib\n");
+		return 0;
+	}
+
+#if 0
+	GLULibname = "/proc/self/exe";
+#elif defined (_WIN32)
+	GLULibname = "GLU32.DLL";
+#elif defined (__MACH__)
+	GLULibname = "/System/Library/Frameworks/OpenGL.framework/Libraries/libGLU.dylib";
+#elif defined (macintos)
+	GLULibname = "OpenGLLibrary";
+#elif defined (__unix__)
+	GLULibname = "libGLU.so.1";
+#elif defined (__HAIKU__)
+	GLULibname = "libGLU.so";
+#else
+	GLULibname = NULL;
+#endif
+
+	if (M_CheckParm ("-GLUlib") && M_IsNextParm())
+		GLULibname = M_GetNextParm();
+
+	if (GLULibname)
+	{
+		GLUhandle = hwOpen(GLULibname);
+		if (GLUhandle)
+			return SetupGLfunc();
+		else
+		{
+			I_OutputMsg("Could not load GLU Library: %s\n", GLULibname);
+			if (!M_CheckParm ("-GLUlib"))
+				I_OutputMsg("If you know what is the GLU library's name, use -GLUlib\n");
+		}
+	}
+	else
+	{
+		I_OutputMsg("Could not load GLU Library\n");
+		I_OutputMsg("If you know what is the GLU library's name, use -GLUlib\n");
+	}
+#endif
+	return SetupGLfunc();
+}
+
+/**	\brief	The OglSdlSurface function
+
+	\param	w	width
+	\param	h	height
+	\param	isFullscreen	if true, go fullscreen
+
+	\return	if true, changed video mode
+*/
+boolean OglSdlSurface(INT32 w, INT32 h, boolean isFullscreen)
+{
+	INT32 cbpp;
+	Uint32 OGLFlags;
+	const GLvoid *glvendor = NULL, *glrenderer = NULL, *glversion = NULL;
+
+	cbpp = cv_scr_depth.value < 16 ? 16 : cv_scr_depth.value;
+
+	if (vidSurface)
+	{
+		//Alam: SDL_Video system free vidSurface for me
+#ifdef VOODOOSAFESWITCHING
+		SDL_QuitSubSystem(SDL_INIT_VIDEO);
+		SDL_InitSubSystem(SDL_INIT_VIDEO);
+#endif
+	}
+
+	if (isFullscreen)
+		OGLFlags = FOGLFlags;
+	else
+		OGLFlags = WOGLFlags;
+
+	cbpp = SDL_VideoModeOK(w, h, cbpp, OGLFlags);
+	if (cbpp < 16)
+		return true; //Alam: Let just say we did, ok?
+
+	vidSurface = SDL_SetVideoMode(w, h, cbpp, OGLFlags);
+	if (!vidSurface)
+		return false;
+
+	glvendor = pglGetString(GL_VENDOR);
+	// Get info and extensions.
+	//BP: why don't we make it earlier ?
+	//Hurdler: we cannot do that before intialising gl context
+	glrenderer = pglGetString(GL_RENDERER);
+	glversion = pglGetString(GL_VERSION);
+	gl_extensions = pglGetString(GL_EXTENSIONS);
+
+	DBG_Printf("Vendor     : %s\n", glvendor);
+	DBG_Printf("Renderer   : %s\n", glrenderer);
+	DBG_Printf("Version    : %s\n", glversion);
+	DBG_Printf("Extensions : %s\n", gl_extensions);
+	oglflags = 0;
+
+#ifdef _WIN32
+	// BP: disable advenced feature that don't work on somes hardware
+	// Hurdler: Now works on G400 with bios 1.6 and certified drivers 6.04
+	if (strstr(glrenderer, "810")) oglflags |= GLF_NOZBUFREAD;
+#elif defined (unix) || defined (UNIXCOMMON)
+	// disable advanced features not working on somes hardware
+	if (strstr(glrenderer, "G200")) oglflags |= GLF_NOTEXENV;
+	if (strstr(glrenderer, "G400")) oglflags |= GLF_NOTEXENV;
+#endif
+	DBG_Printf("oglflags   : 0x%X\n", oglflags );
+
+#ifdef USE_PALETTED_TEXTURE
+	if (isExtAvailable("GL_EXT_paletted_texture", gl_extensions))
+		glColorTableEXT = SDL_GL_GetProcAddress("glColorTableEXT");
+	else
+		glColorTableEXT = NULL;
+#endif
+
+#ifdef USE_WGL_SWAP
+	if (isExtAvailable("WGL_EXT_swap_control", gl_extensions))
+		wglSwapIntervalEXT = SDL_GL_GetProcAddress("wglSwapIntervalEXT");
+	else
+		wglSwapIntervalEXT = NULL;
+#else
+	if (isExtAvailable("GLX_SGI_swap_control", gl_extensions))
+		glXSwapIntervalSGIEXT = SDL_GL_GetProcAddress("glXSwapIntervalSGI");
+	else
+		glXSwapIntervalSGIEXT = NULL;
+#endif
+
+#ifndef KOS_GL_COMPATIBILITY
+	if (isExtAvailable("GL_EXT_texture_filter_anisotropic", gl_extensions))
+		pglGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maximumAnisotropy);
+	else
+#endif
+		maximumAnisotropy = 0;
+
+	granisotropicmode_cons_t[1].value = maximumAnisotropy;
+
+	SetModelView(w, h);
+	SetStates();
+	pglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
+
+	HWR_Startup();
+#ifdef KOS_GL_COMPATIBILITY
+	textureformatGL = GL_ARGB4444;
+#else
+	textureformatGL = cbpp > 16 ? GL_RGBA : GL_RGB5_A1;
+#endif
+
+	return true;
+}
+
+/**	\brief	The OglSdlFinishUpdate function
+
+	\param	vidwait	wait for video sync
+
+	\return	void
+*/
+void OglSdlFinishUpdate(boolean waitvbl)
+{
+	static boolean oldwaitvbl = false;
+	if (oldwaitvbl != waitvbl)
+	{
+#ifdef USE_WGL_SWAP
+		if (wglSwapIntervalEXT)
+			wglSwapIntervalEXT(waitvbl);
+#else
+		if (glXSwapIntervalSGIEXT)
+			glXSwapIntervalSGIEXT(waitvbl);
+#endif
+	}
+	oldwaitvbl = waitvbl;
+
+	SDL_GL_SwapBuffers();
+}
+
+EXPORT void HWRAPI( OglSdlSetPalette) (RGBA_t *palette, RGBA_t *pgamma)
+{
+	INT32 i = -1;
+	UINT32 redgamma = pgamma->s.red, greengamma = pgamma->s.green,
+		bluegamma = pgamma->s.blue;
+
+#if 0 // changing the gamma to 127 is a bad idea
+	i = SDL_SetGamma(byteasfloat(redgamma), byteasfloat(greengamma), byteasfloat(bluegamma));
+#endif
+	if (i == 0) redgamma = greengamma = bluegamma = 0x7F; //Alam: cool
+	for (i = 0; i < 256; i++)
+	{
+		myPaletteData[i].s.red   = (UINT8)MIN((palette[i].s.red   * redgamma)  /127, 255);
+		myPaletteData[i].s.green = (UINT8)MIN((palette[i].s.green * greengamma)/127, 255);
+		myPaletteData[i].s.blue  = (UINT8)MIN((palette[i].s.blue  * bluegamma) /127, 255);
+		myPaletteData[i].s.alpha = palette[i].s.alpha;
+	}
+#ifdef USE_PALETTED_TEXTURE
+	if (glColorTableEXT)
+	{
+		for (i = 0; i < 256; i++)
+		{
+			palette_tex[(3*i)+0] = palette[i].s.red;
+			palette_tex[(3*i)+1] = palette[i].s.green;
+			palette_tex[(3*i)+2] = palette[i].s.blue;
+		}
+		glColorTableEXT(GL_TEXTURE_2D, GL_RGB8, 256, GL_RGB, GL_UNSIGNED_BYTE, palette_tex);
+	}
+#endif
+	// on a chang�de palette, il faut recharger toutes les textures
+	// jaja, und noch viel mehr ;-)
+	Flush();
+}
+
+#endif //HWRENDER
+#endif //SDL
diff --git a/src/sdl2/ogl_sdl.h b/src/sdl2/ogl_sdl.h
new file mode 100644
index 000000000..43c28fa42
--- /dev/null
+++ b/src/sdl2/ogl_sdl.h
@@ -0,0 +1,30 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 1998-2000 by DooM Legacy Team.
+//
+// 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.
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief SDL specific part of the OpenGL API for SRB2
+
+#include "../v_video.h"
+
+extern SDL_Surface *vidSurface;
+extern void *GLUhandle;
+
+boolean OglSdlSurface(INT32 w, INT32 h, boolean isFullscreen);
+
+void OglSdlFinishUpdate(boolean vidwait);
+
+#ifdef _CREATE_DLL_
+EXPORT void HWRAPI( OglSdlSetPalette ) (RGBA_t *palette, RGBA_t *pgamma);
+#endif
diff --git a/src/sdl2/sdl_sound.c b/src/sdl2/sdl_sound.c
new file mode 100644
index 000000000..3750e6778
--- /dev/null
+++ b/src/sdl2/sdl_sound.c
@@ -0,0 +1,2030 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 1993-1996 by id Software, Inc.
+//
+// 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.
+//
+// The source 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.
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief SDL interface for sound
+
+#include <math.h>
+#include "../doomdef.h"
+
+#ifdef _MSC_VER
+#pragma warning(disable : 4214 4244)
+#endif
+
+#if defined(SDL) && SOUND==SOUND_SDL
+
+#include "SDL.h"
+
+#ifdef _MSC_VER
+#pragma warning(default : 4214 4244)
+#endif
+
+#ifdef HAVE_MIXER
+#include "SDL_mixer.h"
+/* This is the version number macro for the current SDL_mixer version: */
+#ifndef SDL_MIXER_COMPILEDVERSION
+#define SDL_MIXER_COMPILEDVERSION \
+	SDL_VERSIONNUM(MIX_MAJOR_VERSION, MIX_MINOR_VERSION, MIX_PATCHLEVEL)
+#endif
+
+/* This macro will evaluate to true if compiled with SDL_mixer at least X.Y.Z */
+#ifndef SDL_MIXER_VERSION_ATLEAST
+#define SDL_MIXER_VERSION_ATLEAST(X, Y, Z) \
+	(SDL_MIXER_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z))
+#endif
+
+#else
+#define MIX_CHANNELS 8
+#endif
+
+#if defined (_WIN32) && !defined (_WIN32_WCE) && !defined (_XBOX)
+#include <direct.h>
+#elif defined (__GNUC__)
+#include <unistd.h>
+#endif
+#include "../z_zone.h"
+
+#include "../m_swap.h"
+#include "../i_system.h"
+#include "../i_sound.h"
+#include "../m_argv.h"
+#include "../m_misc.h"
+#include "../w_wad.h"
+#include "../screen.h" //vid.WndParent
+#include "../doomdef.h"
+#include "../doomstat.h"
+#include "../s_sound.h"
+
+#include "../d_main.h"
+
+#ifdef HW3SOUND
+#include "../hardware/hw3dsdrv.h"
+#include "../hardware/hw3sound.h"
+#include "hwsym_sdl.h"
+#endif
+
+#ifdef HAVE_LIBGME
+#include "gme/gme.h"
+#endif
+
+// The number of internal mixing channels,
+//  the samples calculated for each mixing step,
+//  the size of the 16bit, 2 hardware channel (stereo)
+//  mixing buffer, and the samplerate of the raw data.
+
+// Needed for calling the actual sound output.
+#if defined (_WIN32_WCE) || defined (DC) || defined (PSP) || defined(GP2X)
+#define NUM_CHANNELS            MIX_CHANNELS
+#else
+#define NUM_CHANNELS            MIX_CHANNELS*4
+#endif
+
+#define INDEXOFSFX(x) ((sfxinfo_t *)x - S_sfx)
+
+#if defined (_WIN32_WCE) || defined (DC) || defined (PSP)
+static Uint16 samplecount = 512; //Alam: .5KB samplecount at 11025hz is 46.439909297052154195011337868481ms of buffer
+#elif defined(GP2X)
+static Uint16 samplecount = 128;
+#else
+static Uint16 samplecount = 1024; //Alam: 1KB samplecount at 22050hz is 46.439909297052154195011337868481ms of buffer
+#endif
+
+typedef struct chan_struct
+{
+	// The channel data pointers, start and end.
+	Uint8 *data; //static unsigned char *channels[NUM_CHANNELS];
+	Uint8 *end; //static unsigned char *channelsend[NUM_CHANNELS];
+
+	// pitch
+	Uint32 realstep; // The channel step amount...
+	Uint32 step;          //static UINT32 channelstep[NUM_CHANNELS];
+	Uint32 stepremainder; //static UINT32 channelstepremainder[NUM_CHANNELS];
+	Uint32 samplerate; // ... and a 0.16 bit remainder of last step.
+
+	// Time/gametic that the channel started playing,
+	//  used to determine oldest, which automatically
+	//  has lowest priority.
+	tic_t starttic; //static INT32 channelstart[NUM_CHANNELS];
+
+	// The sound handle, determined on registration,
+	//  used to unregister/stop/modify,
+	INT32 handle; //static INT32 channelhandles[NUM_CHANNELS];
+
+	// SFX id of the playing sound effect.
+	void *id; // Used to catch duplicates (like chainsaw).
+	sfxenum_t sfxid; //static INT32 channelids[NUM_CHANNELS];
+	INT32 vol; //the channel volume
+	INT32 sep; //the channel pan
+
+	// Hardware left and right channel volume lookup.
+	Sint16* leftvol_lookup; //static INT32 *channelleftvol_lookup[NUM_CHANNELS];
+	Sint16* rightvol_lookup; //static INT32 *channelrightvol_lookup[NUM_CHANNELS];
+} chan_t;
+
+static chan_t channels[NUM_CHANNELS];
+
+// Pitch to stepping lookup
+static INT32 steptable[256];
+
+// Volume lookups.
+static Sint16 vol_lookup[128 * 256];
+
+UINT8 sound_started = false;
+static SDL_mutex *Snd_Mutex = NULL;
+
+//SDL's Audio
+static SDL_AudioSpec audio;
+
+static SDL_bool musicStarted = SDL_FALSE;
+#ifdef HAVE_MIXER
+static SDL_mutex *Msc_Mutex = NULL;
+/* FIXME: Make this file instance-specific */
+#ifdef _arch_dreamcast
+#define MIDI_PATH     "/ram"
+#elif defined(GP2X)
+#define MIDI_PATH     "/mnt/sd/srb2"
+#define MIDI_PATH2    "/tmp/mnt/sd/srb2"
+#else
+#define MIDI_PATH     srb2home
+#if defined (__unix__) || defined(__APPLE__) || defined (UNIXCOMMON)
+#define MIDI_PATH2    "/tmp"
+#endif
+#endif
+#define MIDI_TMPFILE  "srb2music"
+#define MIDI_TMPFILE2 "srb2wav"
+static INT32 musicvol = 62;
+
+#if SDL_MIXER_VERSION_ATLEAST(1,2,2)
+#define MIXER_POS //Mix_FadeInMusicPos in 1.2.2+
+static void SDLCALL I_FinishMusic(void);
+static double loopstartDig = 0.0l;
+static SDL_bool loopingDig = SDL_FALSE;
+static SDL_bool canlooping = SDL_TRUE;
+#endif
+
+#if SDL_MIXER_VERSION_ATLEAST(1,2,7)
+#define USE_RWOPS // ok, USE_RWOPS is in here
+#if defined (DC) || defined (_WIN32_WCE) || defined (_XBOX) //|| defined(_WIN32) || defined(GP2X)
+#undef USE_RWOPS
+#endif
+#endif
+
+#if SDL_MIXER_VERSION_ATLEAST(1,2,10)
+//#define MIXER_INIT
+#endif
+
+#ifdef USE_RWOPS
+static void * Smidi[2] = { NULL, NULL };
+static SDL_bool canuseRW = SDL_TRUE;
+#endif
+static const char *fmidi[2] = { MIDI_TMPFILE, MIDI_TMPFILE2};
+
+static const INT32 MIDIfade = 500;
+static const INT32 Digfade = 0;
+
+static Mix_Music *music[2] = { NULL, NULL };
+#endif
+
+typedef struct srb2audio_s {
+	void *userdata;
+#ifdef HAVE_LIBGME
+	Music_Emu *gme_emu;
+	UINT8 gme_pause;
+	UINT8 gme_loop;
+#endif
+} srb2audio_t;
+
+static srb2audio_t localdata;
+
+static void Snd_LockAudio(void) //Alam: Lock audio data and uninstall audio callback
+{
+	if (Snd_Mutex) SDL_LockMutex(Snd_Mutex);
+	else if (nosound) return;
+	else if (nomidimusic && nodigimusic
+#ifdef HW3SOUND
+	         && hws_mode == HWS_DEFAULT_MODE
+#endif
+	        ) SDL_LockAudio();
+#ifdef HAVE_MIXER
+	else if (musicStarted) Mix_SetPostMix(NULL, NULL);
+#endif
+}
+
+static void Snd_UnlockAudio(void) //Alam: Unlock audio data and reinstall audio callback
+{
+	if (Snd_Mutex) SDL_UnlockMutex(Snd_Mutex);
+	else if (nosound) return;
+	else if (nomidimusic && nodigimusic
+#ifdef HW3SOUND
+	         && hws_mode == HWS_DEFAULT_MODE
+#endif
+	        ) SDL_UnlockAudio();
+#ifdef HAVE_MIXER
+	else if (musicStarted) Mix_SetPostMix(audio.callback, audio.userdata);
+#endif
+}
+
+FUNCMATH static inline Uint16 Snd_LowerRate(Uint16 sr)
+{
+	if (sr <= audio.freq) // already lowered rate?
+		return sr; // good then
+	for (;sr > audio.freq;) // not good?
+	{ // then let see...
+		if (sr % 2) // can we div by half?
+			return sr; // no, just use the currect rate
+		sr /= 2; // we can? wonderful
+	} // let start over again
+	if (sr == audio.freq) // did we drop to the desired rate?
+		return sr; // perfect! but if not
+	return sr*2; // just keep it just above the output sample rate
+}
+
+#ifdef _MSC_VER
+#pragma warning(disable :  4200)
+#pragma pack(1)
+#endif
+
+typedef struct
+{
+	Uint16 header;     // 3?
+	Uint16 samplerate; // 11025+
+	Uint16 samples;    // number of samples
+	Uint16 dummy;      // 0
+	Uint8  data[0];    // data;
+} ATTRPACK dssfx_t;
+
+#ifdef _MSC_VER
+#pragma pack()
+#pragma warning(default : 4200)
+#endif
+
+//
+// This function loads the sound data from the WAD lump,
+//  for single sound.
+//
+static void *getsfx(lumpnum_t sfxlump, size_t *len)
+{
+	dssfx_t *sfx, *paddedsfx;
+	Uint16 sr , csr;
+	size_t size = *len;
+	SDL_AudioCVT sfxcvt;
+
+	sfx = (dssfx_t *)malloc(size);
+	if (sfx) W_ReadLump(sfxlump, (void *)sfx);
+	else return NULL;
+	sr = SHORT(sfx->samplerate);
+	csr = Snd_LowerRate(sr);
+
+	if (sr > csr && SDL_BuildAudioCVT(&sfxcvt, AUDIO_U8, 1, sr, AUDIO_U8, 1, csr))
+	{//Alam: Setup the AudioCVT for the SFX
+
+		sfxcvt.len = (INT32)size-8; //Alam: Chop off the header
+		sfxcvt.buf = malloc(sfxcvt.len * sfxcvt.len_mult); //Alam: make room
+		if (sfxcvt.buf) M_Memcpy(sfxcvt.buf, &(sfx->data), sfxcvt.len); //Alam: copy the sfx sample
+
+		if (sfxcvt.buf && SDL_ConvertAudio(&sfxcvt) == 0) //Alam: let convert it!
+		{
+				size = sfxcvt.len_cvt + 8;
+				*len = sfxcvt.len_cvt;
+
+				// Allocate from zone memory.
+				paddedsfx = (dssfx_t *) Z_Malloc(size, PU_SOUND, NULL);
+
+				// Now copy and pad.
+				M_Memcpy(paddedsfx->data, sfxcvt.buf, sfxcvt.len_cvt);
+				free(sfxcvt.buf);
+				M_Memcpy(paddedsfx,sfx,8);
+				paddedsfx->samplerate = SHORT(csr); // new freq
+		}
+		else //Alam: the convert failed, not needed or I couldn't malloc the buf
+		{
+			if (sfxcvt.buf) free(sfxcvt.buf);
+			*len = size - 8;
+
+			// Allocate from zone memory then copy and pad
+			paddedsfx = (dssfx_t *)M_Memcpy(Z_Malloc(size, PU_SOUND, NULL), sfx, size);
+		}
+	}
+	else
+	{
+		// Pads the sound effect out to the mixing buffer size.
+		// The original realloc would interfere with zone memory.
+		*len = size - 8;
+
+		// Allocate from zone memory then copy and pad
+		paddedsfx = (dssfx_t *)M_Memcpy(Z_Malloc(size, PU_SOUND, NULL), sfx, size);
+	}
+
+	// Remove the cached lump.
+	free(sfx);
+
+	// Return allocated padded data.
+	return paddedsfx;
+}
+
+// used to (re)calculate channel params based on vol, sep, pitch
+static void I_SetChannelParams(chan_t *c, INT32 vol, INT32 sep, INT32 step)
+{
+	INT32 leftvol;
+	INT32 rightvol;
+	c->vol = vol;
+	c->sep = sep;
+	c->step = c->realstep = step;
+
+	if (step != steptable[128])
+		c->step += (((c->samplerate<<16)/audio.freq)-65536);
+	else if (c->samplerate != (unsigned)audio.freq)
+		c->step = ((c->samplerate<<16)/audio.freq);
+	// x^2 separation, that is, orientation/stereo.
+	//  range is: 0 (left) - 255 (right)
+
+	// Volume arrives in range 0..255 and it must be in 0..cv_soundvolume...
+	vol = (vol * cv_soundvolume.value) >> 7;
+	// note: >> 6 would use almost the entire dynamical range, but
+	// then there would be no "dynamical room" for other sounds :-/
+
+	leftvol  = vol - ((vol*sep*sep) >> 16); ///(256*256);
+	sep = 255 - sep;
+	rightvol = vol - ((vol*sep*sep) >> 16);
+
+	// Sanity check, clamp volume.
+	if (rightvol < 0)
+		rightvol = 0;
+	else if (rightvol > 127)
+		rightvol = 127;
+	if (leftvol < 0)
+		leftvol = 0;
+	else if (leftvol > 127)
+		leftvol = 127;
+
+	// Get the proper lookup table piece
+	//  for this volume level
+	c->leftvol_lookup = &vol_lookup[leftvol*256];
+	c->rightvol_lookup = &vol_lookup[rightvol*256];
+}
+
+static INT32 FindChannel(INT32 handle)
+{
+	INT32 i;
+
+	for (i = 0; i < NUM_CHANNELS; i++)
+		if (channels[i].handle == handle)
+			return i;
+
+	// not found
+	return -1;
+}
+
+//
+// This function adds a sound to the
+//  list of currently active sounds,
+//  which is maintained as a given number
+//  (eight, usually) of internal channels.
+// Returns a handle.
+//
+static INT32 addsfx(sfxenum_t sfxid, INT32 volume, INT32 step, INT32 seperation)
+{
+	static UINT16 handlenums = 0;
+	INT32 i, slot, oldestnum = 0;
+	tic_t oldest = gametic;
+
+	// Play these sound effects only one at a time.
+#if 1
+	if (
+#if 0
+	sfxid == sfx_stnmov || sfxid == sfx_sawup || sfxid == sfx_sawidl || sfxid == sfx_sawful || sfxid == sfx_sawhit || sfxid == sfx_pistol
+#else
+	    ( sfx_litng1 <= sfxid && sfxid >= sfx_litng4 )
+	    || sfxid == sfx_trfire || sfxid == sfx_alarm || sfxid == sfx_spin
+	    || sfxid == sfx_athun1 || sfxid == sfx_athun2 || sfxid == sfx_rainin
+#endif
+	   )
+	{
+		// Loop all channels, check.
+		for (i = 0; i < NUM_CHANNELS; i++)
+		{
+			// Active, and using the same SFX?
+			if ((channels[i].end) && (channels[i].sfxid == sfxid))
+			{
+				// Reset.
+				channels[i].end = NULL;
+				// We are sure that iff,
+				//  there will only be one.
+				break;
+			}
+		}
+	}
+#endif
+
+	// Loop all channels to find oldest SFX.
+	for (i = 0; (i < NUM_CHANNELS) && (channels[i].end); i++)
+	{
+		if (channels[i].starttic < oldest)
+		{
+			oldestnum = i;
+			oldest = channels[i].starttic;
+		}
+	}
+
+	// Tales from the cryptic.
+	// If we found a channel, fine.
+	// If not, we simply overwrite the first one, 0.
+	// Probably only happens at startup.
+	if (i == NUM_CHANNELS)
+		slot = oldestnum;
+	else
+		slot = i;
+
+	channels[slot].end = NULL;
+	// Okay, in the less recent channel,
+	//  we will handle the new SFX.
+	// Set pointer to raw data.
+	channels[slot].data = (Uint8 *)S_sfx[sfxid].data;
+	channels[slot].samplerate = (channels[slot].data[3]<<8)+channels[slot].data[2];
+	channels[slot].data += 8; //Alam: offset of the sound header
+
+	while (FindChannel(handlenums)!=-1)
+	{
+		handlenums++;
+		// Reset current handle number, limited to 0..65535.
+		if (handlenums == UINT16_MAX)
+			handlenums = 0;
+	}
+
+	// Assign current handle number.
+	// Preserved so sounds could be stopped.
+	channels[slot].handle = handlenums;
+
+	// Restart steper
+	channels[slot].stepremainder = 0;
+	// Should be gametic, I presume.
+	channels[slot].starttic = gametic;
+
+	I_SetChannelParams(&channels[slot], volume, seperation, step);
+
+	// Preserve sound SFX id,
+	//  e.g. for avoiding duplicates of chainsaw.
+	channels[slot].id = S_sfx[sfxid].data;
+
+	channels[slot].sfxid = sfxid;
+
+	// Set pointer to end of raw data.
+	channels[slot].end = channels[slot].data + S_sfx[sfxid].length;
+
+
+	// You tell me.
+	return handlenums;
+}
+
+//
+// SFX API
+// Note: this was called by S_Init.
+// However, whatever they did in the
+// old DPMS based DOS version, this
+// were simply dummies in the Linux
+// version.
+// See soundserver initdata().
+//
+// Well... To keep compatibility with legacy doom, I have to call this in
+// I_InitSound since it is not called in S_Init... (emanne@absysteme.fr)
+
+static inline void I_SetChannels(void)
+{
+	// Init internal lookups (raw data, mixing buffer, channels).
+	// This function sets up internal lookups used during
+	//  the mixing process.
+	INT32 i;
+	INT32 j;
+
+	INT32 *steptablemid = steptable + 128;
+
+	if (nosound)
+		return;
+
+	// This table provides step widths for pitch parameters.
+	for (i = -128; i < 128; i++)
+	{
+		const double po = pow((double)(2.0l), (double)(i / 64.0l));
+		steptablemid[i] = (INT32)(po * 65536.0l);
+	}
+
+	// Generates volume lookup tables
+	//  which also turn the unsigned samples
+	//  into signed samples.
+	for (i = 0; i < 128; i++)
+		for (j = 0; j < 256; j++)
+		{
+			//From PrDoom
+			// proff - made this a little bit softer, because with
+			// full volume the sound clipped badly
+			vol_lookup[i * 256 + j] = (Sint16)((i * (j - 128) * 256) / 127);
+		}
+}
+
+void I_SetSfxVolume(UINT8 volume)
+{
+	INT32 i;
+
+	(void)volume;
+	//Snd_LockAudio();
+
+	for (i = 0; i < NUM_CHANNELS; i++)
+		if (channels[i].end) I_SetChannelParams(&channels[i], channels[i].vol, channels[i].sep, channels[i].realstep);
+
+	//Snd_UnlockAudio();
+}
+
+void *I_GetSfx(sfxinfo_t *sfx)
+{
+	if (sfx->lumpnum == LUMPERROR)
+		sfx->lumpnum = S_GetSfxLumpNum(sfx);
+//	else if (sfx->lumpnum != S_GetSfxLumpNum(sfx))
+//		I_FreeSfx(sfx);
+
+#ifdef HW3SOUND
+	if (hws_mode != HWS_DEFAULT_MODE)
+		return HW3S_GetSfx(sfx);
+#endif
+
+	if (sfx->data)
+		return sfx->data; //Alam: I have it done!
+
+	sfx->length = W_LumpLength(sfx->lumpnum);
+
+	return getsfx(sfx->lumpnum, &sfx->length);
+
+}
+
+void I_FreeSfx(sfxinfo_t * sfx)
+{
+//	if (sfx->lumpnum<0)
+//		return;
+
+#ifdef HW3SOUND
+	if (hws_mode != HWS_DEFAULT_MODE)
+	{
+		HW3S_FreeSfx(sfx);
+	}
+	else
+#endif
+	{
+		size_t i;
+
+		for (i = 1; i < NUMSFX; i++)
+		{
+			// Alias? Example is the chaingun sound linked to pistol.
+			if (S_sfx[i].data == sfx->data)
+			{
+				if (S_sfx+i != sfx) S_sfx[i].data = NULL;
+				S_sfx[i].lumpnum = LUMPERROR;
+				S_sfx[i].length = 0;
+			}
+		}
+		//Snd_LockAudio(); //Alam: too much?
+		// Loop all channels, check.
+		for (i = 0; i < NUM_CHANNELS; i++)
+		{
+			// Active, and using the same SFX?
+			if (channels[i].end && channels[i].id == sfx->data)
+			{
+				channels[i].end = NULL; // Reset.
+			}
+		}
+		//Snd_UnlockAudio(); //Alam: too much?
+		Z_Free(sfx->data);
+	}
+	sfx->data = NULL;
+	sfx->lumpnum = LUMPERROR;
+}
+
+//
+// Starting a sound means adding it
+//  to the current list of active sounds
+//  in the internal channels.
+// As the SFX info struct contains
+//  e.g. a pointer to the raw data,
+//  it is ignored.
+// As our sound handling does not handle
+//  priority, it is ignored.
+// Pitching (that is, increased speed of playback)
+//  is set, but currently not used by mixing.
+//
+INT32 I_StartSound(sfxenum_t id, UINT8 vol, UINT8 sep, UINT8 pitch, UINT8 priority)
+{
+	(void)priority;
+	(void)pitch;
+
+	if (nosound)
+		return 0;
+
+	if (S_sfx[id].data == NULL) return -1;
+
+	Snd_LockAudio();
+	id = addsfx(id, vol, steptable[pitch], sep);
+	Snd_UnlockAudio();
+
+	return id; // Returns a handle (not used).
+}
+
+void I_StopSound(INT32 handle)
+{
+	// You need the handle returned by StartSound.
+	// Would be looping all channels,
+	//  tracking down the handle,
+	//  an setting the channel to zero.
+	INT32 i;
+
+	i = FindChannel(handle);
+
+	if (i != -1)
+	{
+		//Snd_LockAudio(); //Alam: too much?
+		channels[i].end = NULL;
+		//Snd_UnlockAudio(); //Alam: too much?
+		channels[i].handle = -1;
+		channels[i].starttic = 0;
+	}
+
+}
+
+boolean I_SoundIsPlaying(INT32 handle)
+{
+	boolean isplaying = false;
+	int chan = FindChannel(handle);
+	if (chan != -1)
+		isplaying = (channels[chan].end != NULL);
+	return isplaying;
+}
+
+FUNCINLINE static ATTRINLINE void I_UpdateStream8S(Uint8 *stream, int len)
+{
+	// Mix current sound data.
+	// Data, from raw sound
+	register Sint16 dr; // Right 8bit stream
+	register Uint8 sample; // Center 8bit sfx
+	register Sint16 dl; // Left 8bit stream
+
+	// Pointers in audio stream
+	Sint8 *rightout = (Sint8 *)stream; // currect right
+	Sint8 *leftout = rightout + 1;// currect left
+	const Uint8 step = 2; // Step in stream, left and right, thus two.
+
+	INT32 chan; // Mixing channel index.
+
+	// Determine end of the stream
+	len /= 2; // not 8bit mono samples, 8bit stereo ones
+
+	if (Snd_Mutex) SDL_LockMutex(Snd_Mutex);
+
+	// Mix sounds into the mixing buffer.
+	// Loop over len
+	while (len--)
+	{
+		// Reset left/right value.
+		dl = *leftout;
+		dr = *rightout;
+
+		// Love thy L2 cache - made this a loop.
+		// Now more channels could be set at compile time
+		//  as well. Thus loop those channels.
+		for (chan = 0; chan < NUM_CHANNELS; chan++)
+		{
+			// Check channel, if active.
+			if (channels[chan].end)
+			{
+#if 1
+				// Get the raw data from the channel.
+				sample = channels[chan].data[0];
+#else
+				// linear filtering from PrDoom
+				sample = (((Uint32)channels[chan].data[0] *(0x10000 - channels[chan].stepremainder))
+					+ ((Uint32)channels[chan].data[1]) * (channels[chan].stepremainder))) >> 16;
+#endif
+				// Add left and right part
+				//  for this channel (sound)
+				//  to the current data.
+				// Adjust volume accordingly.
+				dl = (Sint16)(dl+(channels[chan].leftvol_lookup[sample]>>8));
+				dr = (Sint16)(dr+(channels[chan].rightvol_lookup[sample]>>8));
+				// Increment stepage
+				channels[chan].stepremainder += channels[chan].step;
+				// Check whether we are done.
+				if (channels[chan].data + (channels[chan].stepremainder >> 16) >= channels[chan].end)
+					channels[chan].end = NULL;
+				else
+				{
+					// step to next sample
+					channels[chan].data += (channels[chan].stepremainder >> 16);
+					// Limit to LSB???
+					channels[chan].stepremainder &= 0xffff;
+				}
+			}
+		}
+
+		// Clamp to range. Left hardware channel.
+		// Has been char instead of short.
+
+		if (dl > 0x7f)
+			*leftout = 0x7f;
+		else if (dl < -0x80)
+			*leftout = -0x80;
+		else
+			*leftout = (Sint8)dl;
+
+		// Same for right hardware channel.
+		if (dr > 0x7f)
+			*rightout = 0x7f;
+		else if (dr < -0x80)
+			*rightout = -0x80;
+		else
+			*rightout = (Sint8)dr;
+
+		// Increment current pointers in stream
+		leftout += step;
+		rightout += step;
+
+	}
+	if (Snd_Mutex) SDL_UnlockMutex(Snd_Mutex);
+}
+
+FUNCINLINE static ATTRINLINE void I_UpdateStream8M(Uint8 *stream, int len)
+{
+	// Mix current sound data.
+	// Data, from raw sound
+	register Sint16 d; // Mono 8bit stream
+	register Uint8 sample; // Center 8bit sfx
+
+	// Pointers in audio stream
+	Sint8 *monoout = (Sint8 *)stream; // currect mono
+	const Uint8 step = 1; // Step in stream, left and right, thus two.
+
+	INT32 chan; // Mixing channel index.
+
+	// Determine end of the stream
+	//len /= 1; // not 8bit mono samples, 8bit mono ones?
+
+	if (Snd_Mutex) SDL_LockMutex(Snd_Mutex);
+
+	// Mix sounds into the mixing buffer.
+	// Loop over len
+	while (len--)
+	{
+		// Reset left/right value.
+		d = *monoout;
+
+		// Love thy L2 cache - made this a loop.
+		// Now more channels could be set at compile time
+		//  as well. Thus loop those channels.
+		for (chan = 0; chan < NUM_CHANNELS; chan++)
+		{
+			// Check channel, if active.
+			if (channels[chan].end)
+			{
+#if 1
+				// Get the raw data from the channel.
+				sample = channels[chan].data[0];
+#else
+				// linear filtering from PrDoom
+				sample = (((Uint32)channels[chan].data[0] *(0x10000 - channels[chan].stepremainder))
+					+ ((Uint32)channels[chan].data[1]) * (channels[chan].stepremainder))) >> 16;
+#endif
+				// Add left and right part
+				//  for this channel (sound)
+				//  to the current data.
+				// Adjust volume accordingly.
+				d = (Sint16)(d+((channels[chan].leftvol_lookup[sample] + channels[chan].rightvol_lookup[sample])>>9));
+				// Increment stepage
+				channels[chan].stepremainder += channels[chan].step;
+				// Check whether we are done.
+				if (channels[chan].data + (channels[chan].stepremainder >> 16) >= channels[chan].end)
+					channels[chan].end = NULL;
+				else
+				{
+					// step to next sample
+					channels[chan].data += (channels[chan].stepremainder >> 16);
+					// Limit to LSB???
+					channels[chan].stepremainder &= 0xffff;
+				}
+			}
+		}
+
+		// Clamp to range. Left hardware channel.
+		// Has been char instead of short.
+
+		if (d > 0x7f)
+			*monoout = 0x7f;
+		else if (d < -0x80)
+			*monoout = -0x80;
+		else
+			*monoout = (Sint8)d;
+
+		// Increment current pointers in stream
+		monoout += step;
+	}
+	if (Snd_Mutex) SDL_UnlockMutex(Snd_Mutex);
+}
+
+FUNCINLINE static ATTRINLINE void I_UpdateStream16S(Uint8 *stream, int len)
+{
+	// Mix current sound data.
+	// Data, from raw sound
+	register Sint32 dr; // Right 16bit stream
+	register Uint8 sample; // Center 8bit sfx
+	register Sint32 dl; // Left 16bit stream
+
+	// Pointers in audio stream
+	Sint16 *rightout = (Sint16 *)(void *)stream; // currect right
+	Sint16 *leftout = rightout + 1;// currect left
+	const Uint8 step = 2; // Step in stream, left and right, thus two.
+
+	INT32 chan; // Mixing channel index.
+
+	// Determine end of the stream
+	len /= 4; // not 8bit mono samples, 16bit stereo ones
+
+	if (Snd_Mutex) SDL_LockMutex(Snd_Mutex);
+
+	// Mix sounds into the mixing buffer.
+	// Loop over len
+	while (len--)
+	{
+		// Reset left/right value.
+		dl = *leftout;
+		dr = *rightout;
+
+		// Love thy L2 cache - made this a loop.
+		// Now more channels could be set at compile time
+		//  as well. Thus loop those channels.
+		for (chan = 0; chan < NUM_CHANNELS; chan++)
+		{
+			// Check channel, if active.
+			if (channels[chan].end)
+			{
+#if 1
+				// Get the raw data from the channel.
+				sample = channels[chan].data[0];
+#else
+				// linear filtering from PrDoom
+				sample = (((Uint32)channels[chan].data[0] *(0x10000 - channels[chan].stepremainder))
+					+ ((Uint32)channels[chan].data[1]) * (channels[chan].stepremainder))) >> 16;
+#endif
+				// Add left and right part
+				//  for this channel (sound)
+				//  to the current data.
+				// Adjust volume accordingly.
+				dl += channels[chan].leftvol_lookup[sample];
+				dr += channels[chan].rightvol_lookup[sample];
+				// Increment stepage
+				channels[chan].stepremainder += channels[chan].step;
+				// Check whether we are done.
+				if (channels[chan].data + (channels[chan].stepremainder >> 16) >= channels[chan].end)
+					channels[chan].end = NULL;
+				else
+				{
+					// step to next sample
+					channels[chan].data += (channels[chan].stepremainder >> 16);
+					// Limit to LSB???
+					channels[chan].stepremainder &= 0xffff;
+				}
+			}
+		}
+
+		// Clamp to range. Left hardware channel.
+		// Has been char instead of short.
+
+		if (dl > 0x7fff)
+			*leftout = 0x7fff;
+		else if (dl < -0x8000)
+			*leftout = -0x8000;
+		else
+			*leftout = (Sint16)dl;
+
+		// Same for right hardware channel.
+		if (dr > 0x7fff)
+			*rightout = 0x7fff;
+		else if (dr < -0x8000)
+			*rightout = -0x8000;
+		else
+			*rightout = (Sint16)dr;
+
+		// Increment current pointers in stream
+		leftout += step;
+		rightout += step;
+
+	}
+	if (Snd_Mutex) SDL_UnlockMutex(Snd_Mutex);
+}
+
+FUNCINLINE static ATTRINLINE void I_UpdateStream16M(Uint8 *stream, int len)
+{
+	// Mix current sound data.
+	// Data, from raw sound
+	register Sint32 d; // Mono 16bit stream
+	register Uint8 sample; // Center 8bit sfx
+
+	// Pointers in audio stream
+	Sint16 *monoout = (Sint16 *)(void *)stream; // currect mono
+	const Uint8 step = 1; // Step in stream, left and right, thus two.
+
+	INT32 chan; // Mixing channel index.
+
+	// Determine end of the stream
+	len /= 2; // not 8bit mono samples, 16bit mono ones
+
+	if (Snd_Mutex) SDL_LockMutex(Snd_Mutex);
+
+	// Mix sounds into the mixing buffer.
+	// Loop over len
+	while (len--)
+	{
+		// Reset left/right value.
+		d = *monoout;
+
+		// Love thy L2 cache - made this a loop.
+		// Now more channels could be set at compile time
+		//  as well. Thus loop those channels.
+		for (chan = 0; chan < NUM_CHANNELS; chan++)
+		{
+			// Check channel, if active.
+			if (channels[chan].end)
+			{
+#if 1
+				// Get the raw data from the channel.
+				sample = channels[chan].data[0];
+#else
+				// linear filtering from PrDoom
+				sample = (((Uint32)channels[chan].data[0] *(0x10000 - channels[chan].stepremainder))
+					+ ((Uint32)channels[chan].data[1]) * (channels[chan].stepremainder))) >> 16;
+#endif
+				// Add left and right part
+				//  for this channel (sound)
+				//  to the current data.
+				// Adjust volume accordingly.
+				d += (channels[chan].leftvol_lookup[sample] + channels[chan].rightvol_lookup[sample])>>1;
+				// Increment stepage
+				channels[chan].stepremainder += channels[chan].step;
+				// Check whether we are done.
+				if (channels[chan].data + (channels[chan].stepremainder >> 16) >= channels[chan].end)
+					channels[chan].end = NULL;
+				else
+				{
+					// step to next sample
+					channels[chan].data += (channels[chan].stepremainder >> 16);
+					// Limit to LSB???
+					channels[chan].stepremainder &= 0xffff;
+				}
+			}
+		}
+
+		// Clamp to range. Left hardware channel.
+		// Has been char instead of short.
+
+		if (d > 0x7fff)
+			*monoout = 0x7fff;
+		else if (d < -0x8000)
+			*monoout = -0x8000;
+		else
+			*monoout = (Sint16)d;
+
+		// Increment current pointers in stream
+		monoout += step;
+	}
+	if (Snd_Mutex) SDL_UnlockMutex(Snd_Mutex);
+}
+
+#ifdef HAVE_LIBGME
+static void I_UpdateSteamGME(Music_Emu *emu, INT16 *stream, int len, UINT8 looping)
+{
+	#define GME_BUFFER_LEN 44100*2048
+	// Mix current sound data.
+	// Data, from raw sound
+	register Sint32 da;
+
+	static short gme_buffer[GME_BUFFER_LEN]; // a large buffer for gme
+	Sint16 *in = gme_buffer;
+
+	do
+	{
+		int out = min(GME_BUFFER_LEN, len);
+		if ( gme_play( emu, len, gme_buffer ) ) { } // ignore error
+		len -= out;
+		while (out--)
+		{
+			//Left
+			da = *in;
+			in++;
+			da += *stream;
+			stream++;
+			//Right
+			da = *in;
+			in++;
+			da += *stream;
+			stream++;
+		}
+		if (gme_track_ended( emu ))
+		{
+			if (looping)
+				gme_seek( emu, 0);
+			else
+				break;
+		}
+	} while ( len );
+	#undef GME_BUFFER_LEN
+}
+#endif
+
+static void SDLCALL I_UpdateStream(void *userdata, Uint8 *stream, int len)
+{
+	if (!sound_started || !userdata)
+		return;
+
+#if SDL_VERSION_ATLEAST(1,3,0)
+	if (musicStarted)
+		memset(stream, 0x00, len); // only work in !AUDIO_U8, that needs 0x80
+#endif
+
+	if ((audio.channels != 1 && audio.channels != 2) ||
+	    (audio.format != AUDIO_S8 && audio.format != AUDIO_S16SYS))
+		; // no function to encode this type of stream
+	else if (audio.channels == 1 && audio.format == AUDIO_S8)
+		I_UpdateStream8M(stream, len);
+	else if (audio.channels == 2 && audio.format == AUDIO_S8)
+		I_UpdateStream8S(stream, len);
+	else if (audio.channels == 1 && audio.format == AUDIO_S16SYS)
+		I_UpdateStream16M(stream, len);
+	else if (audio.channels == 2 && audio.format == AUDIO_S16SYS)
+	{
+		I_UpdateStream16S(stream, len);
+#ifdef HAVE_LIBGME
+		if (userdata)
+		{
+			srb2audio_t *sa_userdata = userdata;
+			if (!sa_userdata->gme_pause)
+				I_UpdateSteamGME(sa_userdata->gme_emu, (INT16 *)stream, len/4, sa_userdata->gme_loop);
+		}
+#endif
+
+	}
+}
+
+void I_UpdateSoundParams(INT32 handle, UINT8 vol, UINT8 sep, UINT8 pitch)
+{
+	// Would be using the handle to identify
+	//  on which channel the sound might be active,
+	//  and resetting the channel parameters.
+
+	INT32 i = FindChannel(handle);
+
+	if (i != -1 && channels[i].end)
+	{
+		//Snd_LockAudio(); //Alam: too much?
+		I_SetChannelParams(&channels[i], vol, sep, steptable[pitch]);
+		//Snd_UnlockAudio(); //Alam: too much?
+	}
+
+}
+
+#ifdef HW3SOUND
+
+static void *soundso = NULL;
+
+static INT32 Init3DSDriver(const char *soName)
+{
+	if (soName) soundso = hwOpen(soName);
+#if defined (_WIN32) && defined (_X86_) && !defined (STATIC3DS)
+	HW3DS.pfnStartup            = hwSym("Startup@8",soundso);
+	HW3DS.pfnShutdown           = hwSym("Shutdown@0",soundso);
+	HW3DS.pfnAddSfx             = hwSym("AddSfx@4",soundso);
+	HW3DS.pfnAddSource          = hwSym("AddSource@8",soundso);
+	HW3DS.pfnStartSource        = hwSym("StartSource@4",soundso);
+	HW3DS.pfnStopSource         = hwSym("StopSource@4",soundso);
+	HW3DS.pfnGetHW3DSVersion    = hwSym("GetHW3DSVersion@0",soundso);
+	HW3DS.pfnBeginFrameUpdate   = hwSym("BeginFrameUpdate@0",soundso);
+	HW3DS.pfnEndFrameUpdate     = hwSym("EndFrameUpdate@0",soundso);
+	HW3DS.pfnIsPlaying          = hwSym("IsPlaying@4",soundso);
+	HW3DS.pfnUpdateListener     = hwSym("UpdateListener@8",soundso);
+	HW3DS.pfnUpdateSourceParms  = hwSym("UpdateSourceParms@12",soundso);
+	HW3DS.pfnSetCone            = hwSym("SetCone@8",soundso);
+	HW3DS.pfnSetGlobalSfxVolume = hwSym("SetGlobalSfxVolume@4",soundso);
+	HW3DS.pfnUpdate3DSource     = hwSym("Update3DSource@8",soundso);
+	HW3DS.pfnReloadSource       = hwSym("ReloadSource@8",soundso);
+	HW3DS.pfnKillSource         = hwSym("KillSource@4",soundso);
+	HW3DS.pfnKillSfx            = hwSym("KillSfx@4",soundso);
+	HW3DS.pfnGetHW3DSTitle      = hwSym("GetHW3DSTitle@8",soundso);
+#else
+	HW3DS.pfnStartup            = hwSym("Startup",soundso);
+	HW3DS.pfnShutdown           = hwSym("Shutdown",soundso);
+	HW3DS.pfnAddSfx             = hwSym("AddSfx",soundso);
+	HW3DS.pfnAddSource          = hwSym("AddSource",soundso);
+	HW3DS.pfnStartSource        = hwSym("StartSource",soundso);
+	HW3DS.pfnStopSource         = hwSym("StopSource",soundso);
+	HW3DS.pfnGetHW3DSVersion    = hwSym("GetHW3DSVersion",soundso);
+	HW3DS.pfnBeginFrameUpdate   = hwSym("BeginFrameUpdate",soundso);
+	HW3DS.pfnEndFrameUpdate     = hwSym("EndFrameUpdate",soundso);
+	HW3DS.pfnIsPlaying          = hwSym("IsPlaying",soundso);
+	HW3DS.pfnUpdateListener     = hwSym("UpdateListener",soundso);
+	HW3DS.pfnUpdateSourceParms  = hwSym("UpdateSourceParms",soundso);
+	HW3DS.pfnSetCone            = hwSym("SetCone",soundso);
+	HW3DS.pfnSetGlobalSfxVolume = hwSym("SetGlobalSfxVolume",soundso);
+	HW3DS.pfnUpdate3DSource     = hwSym("Update3DSource",soundso);
+	HW3DS.pfnReloadSource       = hwSym("ReloadSource",soundso);
+	HW3DS.pfnKillSource         = hwSym("KillSource",soundso);
+	HW3DS.pfnKillSfx            = hwSym("KillSfx",soundso);
+	HW3DS.pfnGetHW3DSTitle      = hwSym("GetHW3DSTitle",soundso);
+#endif
+
+//	if (HW3DS.pfnUpdateListener2 && HW3DS.pfnUpdateListener2 != soundso)
+		return true;
+//	else
+//		return false;
+}
+#endif
+
+void I_ShutdownSound(void)
+{
+	if (nosound || !sound_started)
+		return;
+
+	CONS_Printf("I_ShutdownSound: ");
+
+#ifdef HW3SOUND
+	if (hws_mode != HWS_DEFAULT_MODE)
+	{
+		HW3S_Shutdown();
+		hwClose(soundso);
+		return;
+	}
+#endif
+
+	if (nomidimusic && nodigimusic)
+		SDL_CloseAudio();
+	CONS_Printf("%s", M_GetText("shut down\n"));
+	sound_started = false;
+	SDL_QuitSubSystem(SDL_INIT_AUDIO);
+	if (Snd_Mutex)
+		SDL_DestroyMutex(Snd_Mutex);
+	Snd_Mutex = NULL;
+}
+
+void I_UpdateSound(void)
+{
+}
+
+void I_StartupSound(void)
+{
+#ifdef HW3SOUND
+	const char *sdrv_name = NULL;
+#endif
+#ifndef HAVE_MIXER
+	nomidimusic = nodigimusic = true;
+#endif
+#ifdef DC
+	//nosound = true;
+#ifdef HAVE_MIXER
+	nomidimusic = true;
+	nodigimusic = true;
+#endif
+#endif
+
+	memset(channels, 0, sizeof (channels)); //Alam: Clean it
+
+	audio.format = AUDIO_S16SYS;
+	audio.channels = 2;
+	audio.callback = I_UpdateStream;
+	audio.userdata = &localdata;
+
+	if (dedicated)
+	{
+		nosound = nomidimusic = nodigimusic = true;
+		return;
+	}
+
+	// Configure sound device
+	CONS_Printf("I_StartupSound:\n");
+
+	// Open the audio device
+	if (M_CheckParm ("-freq") && M_IsNextParm())
+	{
+		audio.freq = atoi(M_GetNextParm());
+		if (!audio.freq) audio.freq = cv_samplerate.value;
+		audio.samples = (Uint16)((samplecount/2)*(INT32)(audio.freq/11025)); //Alam: to keep it around the same XX ms
+		CONS_Printf (M_GetText(" requested frequency of %d hz\n"), audio.freq);
+	}
+	else
+	{
+		audio.samples = samplecount;
+		audio.freq = cv_samplerate.value;
+	}
+
+	if (M_CheckParm ("-mono"))
+	{
+		audio.channels = 1;
+		audio.samples /= 2;
+	}
+
+#if defined (_PSP)  && defined (HAVE_MIXER) // Bug in PSP's SDL_OpenAudio, can not open twice
+	I_SetChannels();
+	sound_started = true;
+	Snd_Mutex = SDL_CreateMutex();
+#else
+	if (nosound)
+#endif
+		return;
+
+#ifdef HW3SOUND
+#ifdef STATIC3DS
+	if (M_CheckParm("-3dsound") || M_CheckParm("-ds3d"))
+	{
+		hws_mode = HWS_OPENAL;
+	}
+#elif defined (_WIN32)
+	if (M_CheckParm("-ds3d"))
+	{
+		hws_mode = HWS_DS3D;
+		sdrv_name = "s_ds3d.dll";
+	}
+	else if (M_CheckParm("-fmod3d"))
+	{
+		hws_mode = HWS_FMOD3D;
+		sdrv_name = "s_fmod.dll";
+	}
+	else if (M_CheckParm("-openal"))
+	{
+		hws_mode = HWS_OPENAL;
+		sdrv_name = "s_openal.dll";
+	}
+#else
+	if (M_CheckParm("-fmod3d"))
+	{
+		hws_mode = HWS_FMOD3D;
+		sdrv_name = "./s_fmod.so";
+	}
+	else if (M_CheckParm("-openal"))
+	{
+		hws_mode = HWS_OPENAL;
+		sdrv_name = "./s_openal.so";
+	}
+#endif
+	else if (M_CheckParm("-sounddriver") &&  M_IsNextParm())
+	{
+		hws_mode = HWS_OTHER;
+		sdrv_name = M_GetNextParm();
+	}
+	if (hws_mode != HWS_DEFAULT_MODE)
+	{
+		if (Init3DSDriver(sdrv_name))
+		{
+			snddev_t            snddev;
+
+			//nosound = true;
+			//I_AddExitFunc(I_ShutdownSound);
+			snddev.bps = 16;
+			snddev.sample_rate = audio.freq;
+			snddev.numsfxs = NUMSFX;
+#if defined (_WIN32) && !defined (_XBOX)
+			snddev.cooplevel = 0x00000002;
+			snddev.hWnd = vid.WndParent;
+#endif
+			if (HW3S_Init(I_Error, &snddev))
+			{
+				audio.userdata = NULL;
+				CONS_Printf("%s", M_GetText(" Using 3D sound driver\n"));
+				return;
+			}
+			CONS_Printf("%s", M_GetText(" Failed loading 3D sound driver\n"));
+			// Falls back to default sound system
+			HW3S_Shutdown();
+			hwClose(soundso);
+		}
+		CONS_Printf("%s", M_GetText(" Failed loading 3D sound driver\n"));
+		hws_mode = HWS_DEFAULT_MODE;
+	}
+#endif
+	if (!musicStarted && SDL_OpenAudio(&audio, &audio) < 0)
+	{
+		CONS_Printf("%s", M_GetText(" couldn't open audio with desired format\n"));
+		nosound = true;
+		return;
+	}
+	else
+	{
+		char ad[100];
+		CONS_Printf(M_GetText(" Starting up with audio driver : %s\n"), SDL_AudioDriverName(ad, (int)sizeof ad));
+	}
+	samplecount = audio.samples;
+	CV_SetValue(&cv_samplerate, audio.freq);
+	CONS_Printf(M_GetText(" configured audio device with %d samples/slice at %ikhz(%dms buffer)\n"), samplecount, audio.freq/1000, (INT32) (((float)audio.samples * 1000.0f) / audio.freq));
+	// Finished initialization.
+	CONS_Printf("%s", M_GetText(" Sound module ready\n"));
+	//[segabor]
+	if (!musicStarted) SDL_PauseAudio(0);
+	//Mix_Pause(0);
+	I_SetChannels();
+	sound_started = true;
+	Snd_Mutex = SDL_CreateMutex();
+}
+
+//
+// MUSIC API.
+//
+
+void I_ShutdownMIDIMusic(void)
+{
+	nomidimusic = false;
+	if (nodigimusic) I_ShutdownMusic();
+}
+
+#ifdef HAVE_LIBGME
+static void I_ShutdownGMEMusic(void)
+{
+	Snd_LockAudio();
+	if (localdata.gme_emu)
+		gme_delete(localdata.gme_emu);
+	localdata.gme_emu = NULL;
+	Snd_UnlockAudio();
+}
+#endif
+
+void I_ShutdownDigMusic(void)
+{
+	nodigimusic = false;
+	if (nomidimusic) I_ShutdownMusic();
+}
+
+#ifdef HAVE_MIXER
+static boolean LoadSong(void *data, size_t lumplength, size_t selectpos)
+{
+	FILE *midfile;
+	const char *tempname;
+#ifdef USE_RWOPS
+	if (canuseRW)
+	{
+		SDL_RWops *SDLRW;
+		void *olddata = Smidi[selectpos]; //quick shortcut to set
+
+		Z_Free(olddata); //free old memory
+		Smidi[selectpos] = NULL;
+
+		if (!data)
+			return olddata != NULL; //was there old data?
+
+		SDLRW = SDL_RWFromConstMem(data, (int)lumplength); //new RWops from Z_zone
+		if (!SDLRW) //ERROR while making RWops!
+		{
+			CONS_Printf(M_GetText("Couldn't load music lump: %s\n"), SDL_GetError());
+			Z_Free(data);
+			return false;
+		}
+
+		music[selectpos] = Mix_LoadMUS_RW(SDLRW); // new Mix_Chuck from RWops
+		if (music[selectpos])
+			Smidi[selectpos] = data; //all done
+		else //ERROR while making Mix_Chuck
+		{
+			CONS_Printf(M_GetText("Couldn't load music data: %s\n"), Mix_GetError());
+			Z_Free(data);
+			SDL_RWclose(SDLRW);
+			Smidi[selectpos] = NULL;
+		}
+		return true;
+	}
+#endif
+	tempname = va("%s/%s", MIDI_PATH, fmidi[selectpos]);
+
+	if (!data)
+	{
+		if (FIL_FileExists(tempname))
+			return unlink(tempname)+1;
+#ifdef MIDI_PATH2
+		else if (FIL_FileExists(tempname = va("%s/%s", MIDI_PATH2, fmidi[selectpos])))
+			return unlink(tempname)+1;
+#endif
+		else
+			return false;
+	}
+
+	midfile = fopen(tempname, "wb");
+
+#ifdef MIDI_PATH2
+	if (!midfile)
+	{
+		tempname = va("%s/%s", MIDI_PATH2, fmidi[selectpos]);
+		midfile = fopen(tempname, "wb");
+	}
+#endif
+
+	if (!midfile)
+	{
+		CONS_Printf(M_GetText("Couldn't open file %s to write music in\n"), tempname);
+		Z_Free(data);
+		return false;
+	}
+
+	if (fwrite(data, lumplength, 1, midfile) == 0)
+	{
+		CONS_Printf(M_GetText("Couldn't write music into file %s because %s\n"), tempname, strerror(ferror(midfile)));
+		Z_Free(data);
+		fclose(midfile);
+		return false;
+	}
+
+	fclose(midfile);
+
+	Z_Free(data);
+
+	music[selectpos] = Mix_LoadMUS(tempname);
+	if (!music[selectpos]) //ERROR while making Mix_Chuck
+	{
+		CONS_Printf(M_GetText("Couldn't load music file %s: %s\n"), tempname, Mix_GetError());
+		return false;
+	}
+	return true;
+}
+#endif
+
+
+void I_ShutdownMusic(void)
+{
+#ifdef HAVE_MIXER
+	if ((nomidimusic && nodigimusic) || !musicStarted)
+		return;
+
+	CONS_Printf("%s", M_GetText("I_ShutdownMusic: "));
+
+	I_UnRegisterSong(0);
+	I_StopDigSong();
+	Mix_CloseAudio();
+#ifdef MIX_INIT
+	Mix_Quit();
+#endif
+	CONS_Printf("%s", M_GetText("shut down\n"));
+	musicStarted = SDL_FALSE;
+	if (Msc_Mutex)
+		SDL_DestroyMutex(Msc_Mutex);
+	Msc_Mutex = NULL;
+#endif
+}
+
+void I_InitMIDIMusic(void)
+{
+	if (nodigimusic) I_InitMusic();
+}
+
+void I_InitDigMusic(void)
+{
+	if (nomidimusic) I_InitMusic();
+}
+
+void I_InitMusic(void)
+{
+#ifdef HAVE_MIXER
+	char ad[100];
+	SDL_version MIXcompiled;
+	const SDL_version *MIXlinked;
+#ifdef MIXER_INIT
+	const int mixstart = MIX_INIT_OGG;
+	int mixflags;
+#endif
+#endif
+#ifdef HAVE_LIBGME
+	I_AddExitFunc(I_ShutdownGMEMusic);
+#endif
+
+	if ((nomidimusic && nodigimusic) || dedicated)
+		return;
+
+#ifdef HAVE_MIXER
+	MIX_VERSION(&MIXcompiled)
+	MIXlinked = Mix_Linked_Version();
+	I_OutputMsg("Compiled for SDL_mixer version: %d.%d.%d\n",
+	            MIXcompiled.major, MIXcompiled.minor, MIXcompiled.patch);
+#ifdef MIXER_POS
+#ifndef _WII
+	if (MIXlinked->major == 1 && MIXlinked->minor == 2 && MIXlinked->patch < 7)
+#endif
+		canlooping = SDL_FALSE;
+#endif
+#ifdef USE_RWOPS
+	if (M_CheckParm("-noRW"))
+		canuseRW = SDL_FALSE;
+#endif
+	I_OutputMsg("Linked with SDL_mixer version: %d.%d.%d\n",
+	            MIXlinked->major, MIXlinked->minor, MIXlinked->patch);
+#if !(defined (DC) || defined (PSP) || defined(GP2X) || defined (WII))
+	if (audio.freq < 44100 && !M_CheckParm ("-freq")) //I want atleast 44Khz
+	{
+		audio.samples = (Uint16)(audio.samples*(INT32)(44100/audio.freq));
+		audio.freq = 44100; //Alam: to keep it around the same XX ms
+	}
+#endif
+
+	if (sound_started
+#ifdef HW3SOUND
+		&& hws_mode == HWS_DEFAULT_MODE
+#endif
+		)
+	{
+		I_OutputMsg("Temp Shutdown of SDL Audio System");
+		SDL_CloseAudio();
+		I_OutputMsg(" Done\n");
+	}
+
+	CONS_Printf("%s", M_GetText("I_InitMusic:"));
+
+#ifdef MIXER_INIT
+	mixflags = Mix_Init(mixstart);
+	if ((mixstart & MIX_INIT_FLAC) != (mixflags & MIX_INIT_FLAC))
+	{
+		CONS_Printf("%s", M_GetText(" Unable to load FLAC support\n"));
+	}
+	if ((mixstart & MIX_INIT_MOD ) != (mixflags & MIX_INIT_MOD ))
+	{
+		CONS_Printf("%s", M_GetText(" Unable to load MOD support\n"));
+	}
+	if ((mixstart & MIX_INIT_MP3 ) != (mixflags & MIX_INIT_MP3 ))
+	{
+		CONS_Printf("%s", M_GetText(" Unable to load MP3 support\n"));
+	}
+	if ((mixstart & MIX_INIT_OGG ) != (mixflags & MIX_INIT_OGG ))
+	{
+		CONS_Printf("%s", M_GetText(" Unable to load OGG support\n"));
+	}
+#endif
+
+	if (Mix_OpenAudio(audio.freq, audio.format, audio.channels, audio.samples) < 0) //open_music(&audio)
+	{
+		CONS_Printf(M_GetText(" Unable to open music: %s\n"), Mix_GetError());
+		nomidimusic = nodigimusic = true;
+		if (sound_started
+#ifdef HW3SOUND
+			&& hws_mode == HWS_DEFAULT_MODE
+#endif
+			)
+		{
+			if (SDL_OpenAudio(&audio, NULL) < 0) //retry
+			{
+				CONS_Printf("%s", M_GetText(" couldn't open audio with desired format\n"));
+				nosound = true;
+				sound_started = false;
+			}
+			else
+			{
+				CONS_Printf(M_GetText(" Starting with audio driver : %s\n"), SDL_AudioDriverName(ad, (int)sizeof ad));
+			}
+		}
+		return;
+	}
+	else
+		CONS_Printf(M_GetText(" Starting up with audio driver : %s with SDL_Mixer\n"), SDL_AudioDriverName(ad, (int)sizeof ad));
+
+	samplecount = audio.samples;
+	CV_SetValue(&cv_samplerate, audio.freq);
+	if (sound_started
+#ifdef HW3SOUND
+		&& hws_mode == HWS_DEFAULT_MODE
+#endif
+		)
+		I_OutputMsg(" Reconfigured SDL Audio System");
+	else I_OutputMsg(" Configured SDL_Mixer System");
+	I_OutputMsg(" with %d samples/slice at %ikhz(%dms buffer)\n", samplecount, audio.freq/1000, (INT32) ((audio.samples * 1000.0f) / audio.freq));
+	Mix_SetPostMix(audio.callback, audio.userdata);  // after mixing music, add sound effects
+	Mix_Resume(-1);
+	CONS_Printf("%s", M_GetText("Music initialized\n"));
+	musicStarted = SDL_TRUE;
+	Msc_Mutex = SDL_CreateMutex();
+#endif
+}
+
+boolean I_PlaySong(INT32 handle, boolean looping)
+{
+	(void)handle;
+#ifdef HAVE_MIXER
+	if (nomidimusic || !musicStarted || !music[handle])
+		return false;
+
+#ifdef MIXER_POS
+	if (canlooping)
+		Mix_HookMusicFinished(NULL);
+#endif
+
+	if (Mix_FadeInMusic(music[handle], looping ? -1 : 0, MIDIfade) == -1)
+		CONS_Printf(M_GetText("Couldn't play song because %s\n"), Mix_GetError());
+	else
+	{
+		Mix_VolumeMusic(musicvol);
+		return true;
+	}
+#else
+	(void)looping;
+#endif
+	return false;
+}
+
+static void I_PauseGME(void)
+{
+#ifdef HAVE_LIBGME
+	localdata.gme_pause = true;
+#endif
+}
+
+void I_PauseSong(INT32 handle)
+{
+	(void)handle;
+	I_PauseGME();
+#ifdef HAVE_MIXER
+	if ((nomidimusic && nodigimusic) || !musicStarted)
+		return;
+
+	Mix_PauseMusic();
+	//I_StopSong(handle);
+#endif
+}
+
+static void I_ResumeGME(void)
+{
+#ifdef HAVE_LIBGME
+	localdata.gme_pause = false;
+#endif
+}
+
+void I_ResumeSong(INT32 handle)
+{
+	(void)handle;
+	I_ResumeGME();
+#ifdef HAVE_MIXER
+	if ((nomidimusic && nodigimusic) || !musicStarted)
+		return;
+
+	Mix_VolumeMusic(musicvol);
+	Mix_ResumeMusic();
+	//I_PlaySong(handle, true);
+#endif
+}
+
+void I_StopSong(INT32 handle)
+{
+	(void)handle;
+#ifdef HAVE_MIXER
+	if (nomidimusic || !musicStarted)
+		return;
+	Mix_FadeOutMusic(MIDIfade);
+#endif
+}
+
+void I_UnRegisterSong(INT32 handle)
+{
+#ifdef HAVE_MIXER
+
+	if (nomidimusic || !musicStarted)
+		return;
+
+	Mix_HaltMusic();
+	while (Mix_PlayingMusic())
+		;
+
+	if (music[handle])
+		Mix_FreeMusic(music[handle]);
+	music[handle] = NULL;
+	LoadSong(NULL, 0, handle);
+#else
+	(void)handle;
+#endif
+}
+
+INT32 I_RegisterSong(void *data, size_t len)
+{
+#ifdef HAVE_MIXER
+	if (nomidimusic || !musicStarted)
+		return false;
+
+	if (!LoadSong(data, len, 0))
+		return false;
+
+	if (music[0])
+		return true;
+
+	CONS_Printf(M_GetText("Couldn't load MIDI: %s\n"), Mix_GetError());
+#else
+	(void)len;
+	(void)data;
+#endif
+	return false;
+}
+
+void I_SetMIDIMusicVolume(UINT8 volume)
+{
+#ifdef HAVE_MIXER
+	if ((nomidimusic && nodigimusic) || !musicStarted)
+		return;
+
+	if (Msc_Mutex) SDL_LockMutex(Msc_Mutex);
+	musicvol = volume * 2;
+	if (Msc_Mutex) SDL_UnlockMutex(Msc_Mutex);
+	Mix_VolumeMusic(musicvol);
+#else
+	(void)volume;
+#endif
+}
+
+#ifdef HAVE_LIBGME
+static void I_CleanupGME(void *userdata)
+{
+	Z_Free(userdata);
+}
+#endif
+
+static boolean I_StartGMESong(const char *musicname, boolean looping)
+{
+#ifdef HAVE_LIBGME
+	XBOXSTATIC char filename[9];
+	void *data;
+	lumpnum_t lumpnum;
+	size_t lumplength;
+	Music_Emu *emu;
+	const char* gme_err;
+
+	Snd_LockAudio();
+	if (localdata.gme_emu)
+		gme_delete(localdata.gme_emu);
+	localdata.gme_emu = NULL;
+	Snd_UnlockAudio();
+
+	snprintf(filename, sizeof filename, "o_%s", musicname);
+
+	lumpnum = W_CheckNumForName(filename);
+
+	if (lumpnum == LUMPERROR)
+	{
+		return false; // No music found. Oh well!
+	}
+	else
+		lumplength = W_LumpLength(lumpnum);
+
+	data = W_CacheLumpNum(lumpnum, PU_MUSIC);
+
+	gme_err = gme_open_data(data, (long)lumplength, &emu, audio.freq);
+	if (gme_err != NULL) {
+		//I_OutputMsg("I_StartGMESong: error %s\n",gme_err);
+		return false;
+	}
+	gme_set_user_data(emu, data);
+	gme_set_user_cleanup(emu, I_CleanupGME);
+	gme_start_track(emu, 0);
+	gme_set_fade(emu, Digfade);
+
+	Snd_LockAudio();
+	localdata.gme_emu = emu;
+	localdata.gme_pause = false;
+	localdata.gme_loop = (UINT8)looping;
+	Snd_UnlockAudio();
+
+	return true;
+#else
+	(void)musicname;
+	(void)looping;
+#endif
+	return false;
+}
+
+boolean I_StartDigSong(const char *musicname, boolean looping)
+{
+#ifdef HAVE_MIXER
+	XBOXSTATIC char filename[9];
+	void *data;
+	lumpnum_t lumpnum;
+	size_t lumplength;
+#endif
+
+	if(I_StartGMESong(musicname, looping))
+		return true;
+
+#ifdef HAVE_MIXER
+	if (nodigimusic)
+		return false;
+
+	snprintf(filename, sizeof filename, "o_%s", musicname);
+
+	lumpnum = W_CheckNumForName(filename);
+
+	I_StopDigSong();
+
+	if (lumpnum == LUMPERROR)
+	{
+		// Alam_GBC: like in win32/win_snd.c: Graue 02-29-2004: don't worry about missing music, there might still be a MIDI
+		//I_OutputMsg("Music lump %s not found!\n", filename);
+		return false; // No music found. Oh well!
+	}
+	else
+		lumplength = W_LumpLength(lumpnum);
+
+	data = W_CacheLumpNum(lumpnum, PU_MUSIC);
+
+	if (Msc_Mutex) SDL_LockMutex(Msc_Mutex);
+
+#ifdef MIXER_POS
+	if (canlooping && (loopingDig = looping) == SDL_TRUE && strcmp(data, "OggS")  == 0)
+		looping = false; // Only on looping Ogg files, will we will do our own looping
+
+	// Scan the Ogg Vorbis file for the COMMENT= field for a custom
+	// loop point
+	if (!looping && loopingDig)
+	{
+		size_t scan;
+		const char *dataum = data;
+		XBOXSTATIC char looplength[64];
+		UINT32 loopstart = 0;
+		UINT8 newcount = 0;
+
+		Mix_HookMusicFinished(I_FinishMusic);
+
+		for (scan = 0; scan < lumplength; scan++)
+		{
+			if (*dataum++ == 'C'){
+			if (*dataum++ == 'O'){
+			if (*dataum++ == 'M'){
+			if (*dataum++ == 'M'){
+			if (*dataum++ == 'E'){
+			if (*dataum++ == 'N'){
+			if (*dataum++ == 'T'){
+			if (*dataum++ == '='){
+			if (*dataum++ == 'L'){
+			if (*dataum++ == 'O'){
+			if (*dataum++ == 'O'){
+			if (*dataum++ == 'P'){
+			if (*dataum++ == 'P'){
+			if (*dataum++ == 'O'){
+			if (*dataum++ == 'I'){
+			if (*dataum++ == 'N'){
+			if (*dataum++ == 'T'){
+			if (*dataum++ == '=')
+			{
+
+				while (*dataum != 1 && newcount != 63)
+					looplength[newcount++] = *dataum++;
+
+				looplength[newcount] = '\0';
+
+				loopstart = atoi(looplength);
+
+			}
+			else
+				dataum--;}
+			else
+				dataum--;}
+			else
+				dataum--;}
+			else
+				dataum--;}
+			else
+				dataum--;}
+			else
+				dataum--;}
+			else
+				dataum--;}
+			else
+				dataum--;}
+			else
+				dataum--;}
+			else
+				dataum--;}
+			else
+				dataum--;}
+			else
+				dataum--;}
+			else
+				dataum--;}
+			else
+				dataum--;}
+			else
+				dataum--;}
+			else
+				dataum--;}
+			else
+				dataum--;}
+		}
+
+		if (loopstart > 0)
+		{
+			loopstartDig = (double)((44.1l+loopstart) / 44100.0l); //8 PCM chucks off and PCM to secs
+//#ifdef GP2X//#ifdef PARANOIA
+			//I_OutputMsg("I_StartDigSong: setting looping point to %ul PCMs(%f seconds)\n", loopstart, loopstartDig);
+//#endif
+		}
+		else
+		{
+			looping = true; // loopingDig true, but couldn't find start loop point
+		}
+	}
+	else
+		loopstartDig = 0.0l;
+#else
+	if (looping && strcmp(data, "OggS")  == 0)
+		I_OutputMsg("I_StartDigSong: SRB2 was not compiled with looping music support(no Mix_FadeInMusicPos)\n");
+#endif
+
+	if (!LoadSong(data, lumplength, 1))
+	{
+		if (Msc_Mutex) SDL_UnlockMutex(Msc_Mutex);
+		return false;
+	}
+
+	// Note: LoadSong() frees the data. Let's make sure
+	// we don't try to use the data again.
+	data = NULL;
+
+	if (Mix_FadeInMusic(music[1], looping ? -1 : 0, Digfade) == -1)
+	{
+		if (Msc_Mutex) SDL_UnlockMutex(Msc_Mutex);
+		I_OutputMsg("I_StartDigSong: Couldn't play song %s because %s\n", musicname, Mix_GetError());
+		return false;
+	}
+	Mix_VolumeMusic(musicvol);
+
+	if (Msc_Mutex) SDL_UnlockMutex(Msc_Mutex);
+	return true;
+#else
+	(void)looping;
+	(void)musicname;
+	return false;
+#endif
+}
+
+static void I_StopGME(void)
+{
+#ifdef HAVE_LIBGME
+	Snd_LockAudio();
+	gme_seek(localdata.gme_emu, 0);
+	Snd_UnlockAudio();
+#endif
+}
+
+void I_StopDigSong(void)
+{
+	I_StopGME();
+#ifdef HAVE_MIXER
+	if (nodigimusic)
+		return;
+
+#ifdef MIXER_POS
+	if (canlooping)
+		Mix_HookMusicFinished(NULL);
+#endif
+
+	Mix_HaltMusic();
+	while (Mix_PlayingMusic())
+		;
+
+	if (music[1])
+		Mix_FreeMusic(music[1]);
+	music[1] = NULL;
+	LoadSong(NULL, 0, 1);
+#endif
+}
+
+void I_SetDigMusicVolume(UINT8 volume)
+{
+	I_SetMIDIMusicVolume(volume);
+}
+
+boolean I_SetSongSpeed(float speed)
+{
+
+	(void)speed;
+	return false;
+}
+
+boolean I_SetSongTrack(int track)
+{
+	(void)track;
+	return false;
+}
+
+#ifdef MIXER_POS
+static void SDLCALL I_FinishMusic(void)
+{
+	if (!music[1])
+		return;
+	else if (Msc_Mutex) SDL_LockMutex(Msc_Mutex);
+//		I_OutputMsg("I_FinishMusic: Loopping song to %g seconds\n", loopstartDig);
+
+	if (Mix_FadeInMusicPos(music[1], loopstartDig ? 0 : -1, Digfade, loopstartDig) == 0)
+		Mix_VolumeMusic(musicvol);
+	else
+		I_OutputMsg("I_FinishMusic: Couldn't loop song because %s\n", Mix_GetError());
+
+	if (Msc_Mutex) SDL_UnlockMutex(Msc_Mutex);
+}
+#endif
+#endif //SDL
diff --git a/src/sdl2/sdlmain.h b/src/sdl2/sdlmain.h
new file mode 100644
index 000000000..1e497b10d
--- /dev/null
+++ b/src/sdl2/sdlmain.h
@@ -0,0 +1,65 @@
+// Emacs style mode select   -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright (C) 2006 by Sonic Team Jr.
+//
+// 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.
+//-----------------------------------------------------------------------------
+/// \file
+/// \brief System specific interface stuff.
+
+#ifndef __sdlmain__
+#define __sdlmain__
+
+extern SDL_bool consolevent;
+extern SDL_bool framebuffer;
+
+/**	\brief	The JoyInfo_s struct
+
+  info about joystick
+*/
+typedef struct SDLJoyInfo_s
+{
+	/// Joystick handle
+	SDL_Joystick *dev;
+	/// number of old joystick
+	int oldjoy;
+	/// number of axies
+	int axises;
+	/// scale of axises
+	INT32 scale;
+	/// number of buttons
+	int buttons;
+	/// number of hats
+	int hats;
+	/// number of balls
+	int balls;
+
+} SDLJoyInfo_t;
+
+/**	\brief SDL info about joystick 1
+*/
+extern SDLJoyInfo_t JoyInfo;
+
+/**	\brief joystick axis deadzone
+*/
+#define SDL_JDEADZONE 153
+#undef SDL_JDEADZONE
+
+/**	\brief SDL inof about joystick 2
+*/
+extern SDLJoyInfo_t JoyInfo2;
+
+void I_GetConsoleEvents(void);
+
+void SDLforceUngrabMouse(void);
+
+#endif
diff --git a/src/sdl2/srb2.ttf b/src/sdl2/srb2.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..53f4c6a28a2adc0c97df4a7570ace24cf4949580
GIT binary patch
literal 318280
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
TT<wC3UhLZ#KhG98#=rvr3yZEx

literal 0
HcmV?d00001

-- 
GitLab