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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
HAkhB;OHxy?

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
zcmeHvdw5&bmG3?ey)4;!I1k5hbEG5Nabgo$QXWn)_@Nk*lEkuPDDB4#vg8DqOTmdl
zX}>!cD^46N<UF1548<*!(l)%NbfA>Xq%(5|xXh)N3@LZMxf3}C!tK}6NJ<<hn4J6D
z`$$d#0lxX?w)Yz;*=O&w_g;Ii{ab6Vwf3=ef^FBg*n_y-(9+qmK`q+bHgvWH{DHN>
zwxGwm+-LW#zADhZ-tBVR?O(sK%}zgU_4W1Fx$Etn$m?0nP3|Qqdg|+!yFKoutO^%*
zu=CbHTg&Ptt!p>Xy4Jhz-nx3r#;$Mosyza2{&g+Bw)L3OzSf`brMCUQxRS!>KQ#in
zQGH^rMRT0yi(6`&4J7FEHPknF-3CG|<UW9-)S~#zb}~d>CWng>#-wS?_*>^jeOukK
zvNqBtCT?*zx~~gq9hU1qi5m$z<72?TC{IX=!_5mKF7_YYveeLaa}^)6w0*i~Qzh-G
zDB3a4fO)?`*1XdiD%xjo)H-aH&Jb-gkUA1oNL|l}GED@z-S7fNKA|0xo!W%4#Xzdt
zX|Jh1ag^_}N~RG5Idsh*hNi%0!{cNq9Uv3+ayr0maY#Z^j-)$0?$dF7AEjwTyWIX>
z-|R7?&p>!$Xf`yP-{f69u@A4bpL(mL*^)H2f&(cNGQX*B);IG)>HbB|tL-Jt=ltTJ
z5I3Btk*t{UoSz%yW9R(Bpgyigoep(o<@Xr>=7-6UcDziwbaYQ{^r_A=HuKEreAVzu
zxfY{Ob=p`9_r8^JU}bkYiA=a9a>6MUvwN*HdE?nmBP(m9Go1!j64A@UxH2n>vUM*R
zY8)U#L&$C4CqorTl}MQmZnI6AKb#48JyY>?kn43zv-hVvoNg}8O?V}J@^pvn=407l
zgY)&67RZtJDM~ecD&CfbBj)Ii1tdktVYz*(uSJ^wZn|?m<KTrCfu`$TT+5DyH#rVE
z4lIMr=AitwgYyr#P@aWy*}>Td7NI=*q1g}4M%lt>Gu^)d-7+L~jr!btM@T34F8Koy
zIg{`z>EMnYJxWF%AVUuW<3mUzNVmty&^jc!{r7#@h^@E9nGIXEbjT4Y+o>YROXmjC
z+olFM7e%rPQp$Fu{S~Anv~I98p7wJ+wA?vZ9G5=KZp?P`TjztrbdU!+CFrdvp+jVd
z(P-6nBW-8el?kRhyzXQ1Svij7_BZ<0OSeebuxm?5&UT5L4M}}Um60noP3(hQtQcc{
z8gzGQHd~zyIXXpY##)|vj0`oU3{q91OsX35xX5_9G#kA$VSA)80(#!=<>D4v6Y=aY
zg{A@~PmPr65;ogh=ON8i(z(ESNb|!uL7!~I((9F`0<tq3%!D22@7b0O&PsW4&4$G-
za%nawrW&K!O_uLW-`KJ7)6SM|mD5iHnTQ+x`5s4?$!(SMT;BB(Is6p(9EwrAKk93P
z{*}+@pW8*Xv;{NINm!+{pM*>y`=BnK4hvfxt}OWTN-ngX31t0s41H5P3-oEZb5I+X
zQrT!0sC(H?I@6JbjA#v|(}PZx1D!wJA#BDB!TNA^2l1SZrvr3#>4?eecBR8SW;-3s
zLN2ey(~%3kZkIO%t;`{v&*k>_`-+ovS1pxn`yDRp-t;z-IvpjcGtqCIG(Jcrt>3C+
ztE<S-)^UruW=>JawSO40ze0w#?xHxn4_o4uW+yA91ru(U1LN>B<IK;EV`k$RbMu`a
zDCyx`CiE;hS;lluzg2tLOg|#|c^-O_9H#T!`9r$rKI$VA%cOblQr_k<3Ub21_I(<A
zI~&pWHo7h0w7-#C&?U*`{26~;y+%q0fQe+9pt}0IxC#5(<1!Ctx>h=Dt}}tTd^ukw
zo$=?9$>&YV8eqK+x<4Adb>#PbtEJN9>7d<fkJ%Eoh+DFa@)(DtCbyMBI;VFi(Nm!d
z(R8rPcLCCXETl}htW}|9kL;Qp;Cd#vO%7-$y!9VpzffCz`^&eHPRwyL61B<MNHyEP
zmDs<x!{*7ZDZdHy+#8yhkUAUXVWULM#i2~?mD(!4!NoY*H|PmhGds8*eI|j&97)-1
ziAbrX=4?=ZqQO%oU4s@WH7zto&ID@1SNYCjbc1s#Y&|!~#T%USV^jXqH|ekA{dZ}n
z{QN+sL$z+%aOD=qM$<C2ZZ1PU8?N5s=r%1?JxK=kK$gJ6fDoDLC>=06%ZcFO;?yf-
zgJ%MC_A?#UmcNf-M-B+#si1ejESHl^Q1Ctz&s$hU`4{+(nn!^-?3`+21Fp;_?Yr7{
zR9(#5#(YkW+6Za>!_b}ZeW&_-Qb6jGij%S{6P&fL!Ce~Gx74}yE%YC0$@=x~qW$zf
z6RGfeT<H#*)50Wioa^JE*BIw?U#rw18DV|W0cS+t+UU`@(to5i(@}wPCQ=7VPsqgR
z)GMW<yp|^&6n|H`Q`OBpk2_s*`zc7bgh|%~>1HEEy<M=>`YoH~;xX#qsD@aF^<HmS
z@2m6bee@skogL77b^Gakx}(u;W%lDDuk~1SIv_%~r?)t7Pj@!MF7q{KAOT88cRkmW
z=~8(S!uk4ok0E{*ea@hd{gSaW5w6$cIz2G=b6n7#M%Gi8sPLx!p89``TVN9=Z>L(^
z#~+7HpfXc&pgSddTgkoIO~v2IZZzF<y0f+WZg7^ptq64n)amaz9dLARWOZ89X;3Gk
zu4C^K@ms8xM=gii(}6Xp^P_GWnkqy{b7Q^GHAVN7`!u_rf@f%SYg4M8)-(&@PcP|t
zj`caiu4#7Frc|$3)?8~B!gQzRM?KHlC)qWV>#JI&TDxX!r9JQCNRe2i>M24ElCRC{
z-WFFTkPR;K(fBJHoQFIU&IapcRnHVfZXfNtLHd?N_d3;pN@&0*K~JCtyP0~7^@C!3
zirMqPpb)FiS>7pFuo}tP?L>^Al|Bhh!mCXM^}P*}w|m}9ou{MDJsW#aWc9_l`ssn?
z+wyh7Ox=o^x^qC6jyXNhFjM!(nYxv^I&z{?qMmoEb6jonpAPDMoPRP<EvTcPh6Sj^
zI4cKE2YK)B;%EGNiKO6F;1wwK-P96nl9;TgI=_oic<^fSHc03FBJk!1CHTN;{(Nv5
zyxKg(XQu;=o=Pb_AapglKk;h^ikRI=hfN-bD?O0zFtJ)yM(J%$7@vCJ704AO`Uva+
zbTU1V?W*2vjd<(l#?s-+)Te^iV~c&_&vr?hEt~G#q`!`Xtvi2X$3PnP?L1<D^nhvU
zEH;z6qBJabdYd^Ugg*%`9}qlZoUSU3-Qsp-v1TVcaTXEwn{n12`6RHASwD)x&Ujve
z)Sl&aB;$vbuv43zWipSxp^w9UPI#Ek)OT6r1y}?1Dw&|}gs1DO7Mn8@q_Kh^DLqt6
z`rh<(86Bu)dp1AHNkjtBHPB~5s=le$>AqH1CPYFavsvnuS|lH}JFr;rWta=A=xkj2
z(ceQ#(Gtv&hJ1<dn&u2-<be;RrwI{0)Z_j?@r<ADf4ckgxoS7V(0+YuI_T}v`zpL;
zpoje&YxHEgY_e)A<#xtR_j^A#5HU9fJs;6p{fXH);n3Kvbj%adzwt?o`laHyWy}+{
z;H0xUHHU|7kCdQn+dD^~k)#1_MG0F-|CV96&dWPBxF_SZr@GFMpbO-VTSq>EkFCTR
zsSHVt-DLEXyJktWzs)8k?O1b7v;M6G3Ep9v_}Zw)e#UP=TsD7fe$o@FweyU#S!15A
zvSf3rnj`N&1+2>VJ0&yXfo!0z)D|gCmhP<<Y!PeH!g5Qp7`bWK7H;%75Njb`0OB+T
z=eQThOXL+o;CCo*bvRQ{-YAcRL<x=c`}+EbP9fw1Qo2J#%s0Imk*~u!oC!A|rclo_
zUt{N)kK>dJ=oGlX9Hk~iC*%a>0_dP*Lh1D9VjPZ(k{$X%y~@M;;A6UPH4t8%xCi*k
z5no~p%gOlNEN@QS$?~Se9W1{#v5Dmki3rQDPJ~##3KCK_*R-r0H8^fh(UDf<YL=qr
zPFAxtaRck?Ma%W9<VMNIO7$o;vC<Nhu4bjHP+GxCwUBpcywS}&<j5kFyL07*=&^>4
zU5(N@R;on1Ki4j!+?gxe(c>1@gT_RaTpd@#)pL!AZ@anGoP`@D?~s2Z@8PVcViT=4
z5%Q6NG@pcak`f~D7M$xLC?+pOCn8_jWFV`NuS4=9bt2u2)PU5CRD)E9v=pfksUC^0
zYCT&OH@=nevpDhBEZ2><vigMyibVD6`s^x2j#MSS%Ua3!GS-^yvW49HR4k;#Rjf`K
zU(E7~#6p(O#~e;pDo3fA(U+lAjyiRh(6ekB+P)}`ofn2?g*f_5z*!4y-oPTuxE*8=
z4*oTAl)O()1Cur2{odmXNpqBtxi2Rg07Vn<piev$3)*HO-GW4)Va#U{Hyv}y@YQzS
zH8;u2>eC4IN^J)>UOHxTk`uO3*<P{FmbA&Xgay96#%IM&G{GL2-r}8z%R*Y@BBK6`
z-~1*wI4i~vw#LN4+8DF{0-@&<%t`kV#hc0_zqfqD8UISV<t<*aC+!J2GT-TuvF~AX
z?4x$@WKTFoZFa|)BjIs4k}~RpSid7N7q#}WvZP10WB$FEUrLmL+XbVuVJj9S=Yr>J
z(bJSDMs0Dj827W2a>)M{FBd0Du$DQaMd&$utQc!qgq~)F@<-K&kT!v0*(TgasNU%L
z8bWpFn}Ug_`qMO=7N`ypa)WS#u#4%}twIlfCtpXJesoMH@|C3NpO5JR`|2={f4CMi
zY#7dTG&t^vElMs<*yP2dd3&6XDk~AidF)k5oU!Gq1X@D|qW76*qE2ZP7T<Ac{7YK7
zEj26-E+1P7$=E_%v(i(Br$ciQ85!lYUx?@to6+Y*1T7_a+GCWhz@cc^3f#!J1<0(y
z%A-7<it&m-M92y25|QYBfDa&aPtd(WNQlt=LddBmGHoVwpHN*ILRvJ+hm|d5;H4%p
zPrh_z#HaLLyKkQJYFQpb!rTqRGUk>Ou=Eaj)G_9<%aAIqLD@l4jxpZpNZ7)TvC6&6
zc}P5x4y@qI1%r?CEr1Td&qOL9#}%YppuVsi*y5Q4R#KiUPsom<z2(pvGBJ;8DD$m!
zUH^hLDhgc}<()oA%=7<6>!j<VK0xGV6N(A75qhNWB2hm;_mT;T?kl;S?v_kv)!!jH
z@M{O>$MlF34TGlG9H8qQc1xvW>A=;p1JPmteQ52xeOCCMeC_q9HKNvxTK!CIBWkJV
zHRXKrEZ)l5=$QyAny<_I?!SBub9es|-tQzzc`u&NX^cD7mpdbFn=@7)Iup$f=<PyW
z9JjeDFb9pt>jz6??m<n=GpLJs2Msa$43kDgH0P1iCmsTFdfugHD#}|Xls{1+zQfsP
zD|}|YMsKfnt=nZF%i&=cI#ziXyLHaW7Sa2sO-tORp~;AmOosV{kR&PDLCc3A#|<JO
zl;`WfGdVGjfKSh#HkF1LpGhG>Qa1UseBPA9_Bz)>$0G611K)+tMf}(0s#ZR(b2@yY
zcOA~Wligp2_Xc$p6W6(fZi@M8=*OQf3319Vkd8Fgt9iBSN_w)~r5U?cnC_|dErEXX
z`LdwLvnc~v5;R+{@?UGM3l>{z{f*YeL8En%f0eZ+Xs|ByH(0BKI%}1GxwSH=u{!-r
zt#VMXI{Y519O0}Us*e#7<M2oq@ci{W(j-y_>0_kdA$^E+0_oq8{uSvMQWEKHr2m2R
z&q#86u#3m3$rn=31zRy5H$pz(?pYmaaDK7}Hira5in81V>?efom6h|HH#i%dWig?9
zR>&7Yc;PIG%?go0ceIG*o~V}P-YAd!<LAX*Uk)v9tQJq@5t(2PI^IpLO)eoar<;7Z
zu6kB%&c;^zE!D=@obC?Gx@rTxx7<>#!+p^5@$;4*VMOfVM)W<Vp6SiPCORWQFPe8n
zH7pNDIpmS(<R-{xqbeEt%$?fid>TQSp8x6R;-657a$B2|`{V!oS<D}3UwxymZMD7i
zoA&kqQEuF@x-DQ|x7OFTA=qZW4u4W53Z=XB@2z$Ab)Bo15akxkbth63sl{5`TI}$Z
zIO}-L>SD(dUejh;aGhzv^(D@=f_|N`LYlK;z3r+ECC+wpwcoTLQ0xd6J35OUHx@g-
zX|7gC=++T}=a*}f^lw6I-)RnAc#~A}6W1r)j_b#i4+2ipmVn$G;@&b6QmLeT@PbCt
zP#+9YiLI%Z+q*w#8uN7-eZkPRV?tN{SsJ}xl@uaqX$^+-&DHIy?>Cah`tA?<Qfuw!
zCcZ&@;c{|K^EIvCz%y1OsjDX={K*ep$6O2l_h^X6bIYY8N(!fyF}rg#^y!=As)hf)
zdCARH%O9E*t4hk8cW*UUITmnMCd2Z0$o>|$#CdG-zOK+bdkx}9u6jKDJ=w8D8f$e*
z$yOO7zIAg|(H?SD`GN7s8s~IO9dkVLJ*RsKp3{CCx_*}){s=QU%X*KWaCa?&{#%{O
zh1I-rikMmKNZwOKBny%r$%I6oBhcpw6)3NJ0)Kab?4Lps$*3|5b!A9b=f++2&hd$s
z@JiWHdHenrjBl-6kytTi3)MDzx;^Og3Fclp)90pKA9uo?>r<Z~C+v<I^c1N?oK=j5
zmZtmU-}Xf6T|F3MO{MeL>|JD`%vX&qW3h{4tW^#;yC_Q4j(6+!bpWMPZ*f&s`@2Gm
zfYqtUno8@Q`h{gl#A0#}Mkfo)4|Ijs$kQ=8B3Wn|?xK8G8{yIQ?=)|0rnQxZF%>7P
z(@6Z4%7rz&S)n*lj3^#?ENW1G2ACX1A}IF&CyLMdjW<_WVpN+r#3(f92lXr$21S;O
zgCxek?|Rq2$xmmjnwq%kx0}Jq4YFgQk%X!i&9u}c6+9!kp?e`DPFt#yN=nt%zX-|g
z1d#-XBp`{Hqi6&+VnqLeZp8jU-9Z{hEI!ELT63^0+5I8a+eqjeWX@PQXY@rvvvRsj
z>#Ez!q5F-{{l9=!xOCLHv3VGw45QA$sN6yNjE3+;A0-qIih&)e5-G1UWo*tl2aUNo
zgQ45-%!1At4C!X}&uuevwmyduF<zd&_j{e+-eSLL<Cfk#?!If4y?)6uH&N?a@44g7
z?p0sE=PtX)Yj>|)+2CHfYME!%vK8d1ACRF}keG4$Gr6n})Y7vdK7WZc2g!s)&(Ji{
zD7UPvj4WEThy(%w5{X1eZ*MQzv114R+%`lG9XdpwefC*$<j4{7_S<ihW5<q>lP6D-
zvuDqOnvj@4wA+OpWV=9OW+H4i7xfd}b~D+o6Z*~Db+ks;Pp><Ot{)e{%$bFLV&>>g
zt_D4c-Yi~H(=V6}dJtaHM{CxLW^!qb-rUb$UPH{hS-7kZ;rq?n%WE)C5v$Sn>vj->
z4!YV87W;MNzpW4amOWb_<XSAv3D~}goL1?PsMDcv9T{?yBRk5-k^f4_kwX!3<k<sg
zC1hKg(`x#8p<fjGd5!i6*RTDl<`GVNSfhOi<)3LrI4!?R6f`fRAAeZn4<Z+y6Ez1o
z4gZ|@eYEZuH9zMx!t)|OjO;~Gvk#RoijQ-e2Sx33DF2Pf@8dKtiJCpQ`MG$A;~y3^
zhiMIu8sQhBW;dt#h4>gJJSy@(VKqEzUKTaGIR0<NM>*k;$p4sD@Tho2)Wp%}W$_V?
z|GudC5v}2eIR2NS<^fLoOYvb&Ga_oAq!oOe<6jjuF;4rc_z<W4fhhctR`3sSnqSds
zfmZWB6tPJDS0ayouZfyLT7HPzBWkq$;CHvkKf!5Uqpbp3@27np<TSfP9>v|F_Hj=8
zkoYtYGR?3k{Deo31ETN@{~*T?iNbbH+t0??C2Ah$g#9AluYG~j?ggOQzu`12Kg#VA
zF%`c<)bw*25FJt*UgCH#@e6PwX#asW@MzviJE8w$++I;Lz-fPi`F5iNCi<C1JHTnc
z?+y+!JV@uqu=hi-w5WNM)9ew^Ps9II<ag2)Q0^d73?pDUXc2xU9>n07W>C~}TCnmc
z9UR>RNPZ{nhF%apW?&Tjvm*3>amEkkI0OEG1!Fu%N!Zdf&r=f2h-&E00Zw47#qz8@
z%t6H{33Lc+V&iFFpfr?mRzFN<MCpMXV-I6w+VTRW00(qrMuDLrwiiU`qRQ6;Ilh?C
z(DWjuz__f4Db!w+fO5rY<9V)_1ThD6nNq|l{wQkz2jl8Raes~}MhCPWq(fj_C_E!j
ziB$rOObJw`&<$;LzJs~>zl20(3*y3ZK}RV-{PQoG1G|qQ1tBmI(*7uYN&g&AyYoC9
zP$_m%wVqiA=6{l(S;}tlN$hErGw7$v8KuMOG2LMb7hOHd&#)TC%1i8u&U<sb%}_j>
zCjiQ@0E}Z?UScZ-Qc!jkuVIxpfIY--*Jxo&)QKRqL%e2ah7^<hkl&l*a9^Io9QF4_
zm^vt(O8N{nANeUMod~Oh2~gah<CD^X0T>VswBn1&sC>XDETYQoe$Y{^d6L@8FQHR`
zg#Eyr7-D};kDkKD-v7mPyYp-w$gzpOi~;^f)Z%{Oe6X!5p9k`M!aTDDYoEr9dvcV*
z=YiRs1N2~?Q>JWKtmem}c6W~MC!fP}SDsNg1XjcX*@owT%xpXZ^h#toJ|Db<PiD60
zbTIi}NT=fYP@c>Ec`Np`sD(@T0y3rqR00pra0yFBO{+$LB)*I=$0yucUhYs>7|HFL
zA^srsH@P`KqoD_RFgldO^pT6)Vt?@312E3ezZj!^g~G<LdzhBs096HjG{-887nEEB
zBI;AVfJRjgIN2F4wGWEBuob{5bv5vODm0g~sU3z2vq>Q{PJ0M@oURuJ7HUS(*(1(S
zUM_m=uxbzBmsNHT<=Dk$c$#?}*qr<Gvwjh6j%_#`_%;<^co3?oU<B&$l>;!gVGcph
zSVs&aK!LC?(X#W)r$<bnvc6kn?w%S~n1CO{5yAm|CGkbx`=Nt5?%|2Bdd7<Il_TVt
z2e*0l5z0W3X&CSo)Pon9htpyXVHXXXp32RRc;SkhAul(Gl^F^aQ_QfB=nw{tDdUWL
z_{`?LI6$8L9T(Yu4D>&sI*75qf&qkB41FveaY1eYH0Bf@r%M3yGmiEPIDm5Gm$37q
z1V#|rZr8-=_WR5*sCfJ`H=^CC!3b;v+z-T202>IO^1^tLaRFgo!VBf=q8G!y!YbGZ
zpi^huEvnHYRi`VC0H*Vf6A&^SawDkg!Pdk2VH0B9(^psq0K3dv3p;72+z4zHPved<
z6QhyD<xtK9Igs%WRU#H+(QY}#qg0nm@QOq#uRqT7ItVJp!;IXoNR>lbcqGT-AcyEk
zU2R@pF4FaLITjIM=CRd0qHYgLcyXW5ArQXNh!3pKP^mmZoS@3hazBTDGy9X_mLsGc
zexR;l$BZ^;9?da&KlcJP;*cpU1GvH5GeIe^%n`z3s*J*RaiC=!-p@Tx18wRScT#o1
zM3+UtBkH8vXVh6kNpt+}<esC}l%CTD!4(F)EaHAbrDcqviEbm!V>y<0a?jF;7WzWX
z|7Gz#*uepd$xBrgtQ|9;{1`=tTA!c7=j@=wa5+~zP*7*Vlpop$8Wv)LJjeF{_l%~W
zdLIGa=K<=Z>CI0sImbK(BG6w9X)*gDP*Vh7gdKphgI{LHBzRn$Rnhk%x=(^h96&V)
z$l&)cKXu{UhQ446Xo0OK8L&IJBQzkHImrnJ#K-8ynTe<&yC>Lo+rhmi3VSXd2`^3x
zJ$zQA&3kjlNt`ujreTf1`&XhCF_(G>eVvK|LSbzX<Ex@}n4Mc6;DrCqpaSaHfX~6_
zyaI@Dvcp+7&I$jN<DInuD4dUR_`>-ZA;mxD24!sk>~GltP(4!rIzK3s^m+8dIUIqs
zmS+cX?a|z*tWiU^o^}Kg5cd0CPV;xUVOb*&b?3EDp%J?SM;jccsbInF{q$hQ9To*%
z3p+?36d?YE9A2hw18B4MpF;L8vS$p4#rw4{QBm*KP+RwcMthz+iZ4@4k-sMQlB=T)
zsfwP8ijoqua=-FA>5X0;H6PWn=NGt`m6OUV($V{bQ_{BM)5=+4%1m#Xl;hL6F48IG
z<hFkkQs!t0X&@<qW<pPKs#m!`--V77x;RjDT9<0#J~t5UMIWi8N(lXLzMy=}3MK40
z3!CkVt>~<NKEsK!{Q{Z#3?~=>A3{<ULbRuZJKCU|DK_Q)f?!JZDch6_qydXb3EQJ3
zSkD!T<_ir?Q>om{G)r;QM2YsLq-nDvTo^z8%DpF7o_qVgCTY*><Kt7`z0V{?XHX?6
z>1f|JMK>)?-IqT1`ot4^?vtjPQp&aq!c@MKbgD0nuc3cTrnxEMlrCjHDn*;fz1(kf
zdoGx#@)Ik+xsbY`OWlY6X6295IqdR?T#C6_Ijc0R{PoAWo+bz&N8dD|yawr#9^t5Y
zy6Kc~w1nIzOkJbAo);a^`ZX$hglGjx=|}@NbCVlkMv~GcV!d>PlsR?H(cWKAyuN+6
z?ls*h-BGG26;PEPKz2004*Khc>+arS|9XqRWkX$O%i3=s^RHREZmoaqhPL36eEW^T
z7JJuS-F6>-B)7U{$;?mF^6hOm2HO2?7whvKXnVeVrTkCbt{tsyrhiAf(m(rqe_qdz
z^D-;s1q2ER6c8vNP(Yx7KmmaQ0tEyL2ow+~AW%S{fItC(0s;jD3J4SsC?HTkpnyOD
zfdT>r1PTZg5GWu}K%juYe+&WbC>b~68v>fqi&ruCoq?MFMTS1YcLaKnI+50HSli(C
z)UWvbcL_K~K~nTL!rD<jq{XlPb?lu5T+E2yz43`!ywP+GAwvf+4u>AK&D{Gb+;0f2
z9G_cH;^%sdWVC0oEVnmz`|wUhZ7hv<4{+mUc5c^VnL9y$aqPrzi^YU6W((JQ7U9=>
zln?v*wd*RQbl#$|;&+U`Yq#p{#<-rn+evTN#&u)vkUWU*c7lWIcJ+75&w+<gB+3h3
zXEH=UU+q$VWh}REc>QZ!MZM5tz<Vw<-D@g~;`BPXXI(wshK64XPevxgMp8yJk><oo
zN120*l{-mX8@`s^72(d*tL+jtVhq8udU}tz<-O;Fp?o<R1Kz}jw`Jg0sqAWzwOzDE
z!>+V!krlM6HCEPYmFX{a<t}N2uDRSHw=Z|;Cv39CN5`jc8?~&SjB{J3w@gOp8p{|q
zpO=$?Kt8THuKa2@xs0vfaZTPfxhcQ0$*#$eI)d6ylh7tDt$Yk`19{_od@?)<{w6~P
zyp$BbIWB{)Me+5f5WzcQZXLn9VDUpqExv+76b_AbWJIB_?i1PX07qF}CEDyD<H-WD
zck8VqGB5MAJc2T3=j^QhySI+aC!6thUG+V?bRC6H0f7Pn1q2ER{KpWmjG7bk?X}GY
zf;Tnov)Sc#>uAPqJ8m2`CCSI|DrjNv0w<>9s&~BHYhbpKq7?ikQV&uE?6(o-_?8qo
zoa1EIr5qXI+ZQ+EtxBPiW-?wHE{&A_m(n{+zim98xqC@F-dGp<t7g2>JY;MZy6H?$
zVNCoseCROCxuKVkpTf(bUZeM?$<RL`=iou|AMl-9k8#wPuyxt&WWw9+-RRxqz0G^O
z_YUu0QBQes4gbo<B_ot?%QzX*)8AJYJ_Q5{2ow+~AW%S{fItC(0s;jD3J4SsC?HTk
rpnyODfdT>r1PTZg5GWu}K%js?0f7Pn1q2ER6c8vNP(a}SGX(xG`gzN<

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
zcmeI(dz8)f;{WlzhnPZ5E=4r988PHeQ=)PyQDSn>rDn{GjK<Iymm@S35mLFNPA;Kb
zqvB9;N}Wi^J#wi->7;T_7fLkr9a_#g`;Xt+Ykk-H{qx<AX<6evpP4c5$9`Eo*J>3A
zcq2f7009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
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
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
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
E52|=-G5`Po

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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

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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

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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

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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

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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
Z{vWl3$A6Dk3OWD)002ovPDHLkV1k2@h&uoP

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
zcmc)MF-Rj>7{Ku_cLzDP@DL%Qupn6?*P33vQd8Mz`oK0Ph`Dgiyx^jhY&KvZg{5q<
z97j^6k=O-`1g@}}N-UNHtTxHa7)=(1cmJ8mME5w$<KE+&dA{%W-psr=Nfe1t7Z$`X
zfBq;EqxCbfK>R{Pgigxg5B@1QM4sA*;#Kng;i=JRG^BCe5c{t`$Q_FItBBSZKZ1s)
z!+y~6>ElPSY%R66mSaoHc2mn*T}z^Z^P+q$l0O&8oQR}yBFPQ0I`|g8iZ9`F_%wEt
zSjR8pm+%Sv9G-b=HT*Gt8^4B6VEr4y3tsSomksIQTlgxzgwNsA_)Yw}T+1?k37^2v
z;ca{yZ{eHxI=+Ih;LG?tK7&u;lX#8Sc#YS1jn{auUQ^GhC)6Bu!}m76jkoYkd>!x2
zUO|`9d2|MyLMNHOgKy!h_!2&cPvbZ7>-c5-5<Y>S!!vKKhCjw{<Ja&Byx{-2I;>g;
z-@;e%C43H_#&6=+@yo2{604bDHRtd)zKyr=O?(|+!B_BQd>)^{r|?O<#%sLBYrMv5
zJU4XB4V|-HCu~=a?b_H7vGHxZg>T~P_zM1o*GD?|7QTuv;dA&j{)N|vc`d2okMZ01
zHGBg9(gIn!gKy!h_!6F#)@l5|FOa2ed>e1!oA^4O#d%?YEEb|h9248b8j&DgS|HbT
z<>ux_uCA`+^72wHE-vKk>`W?^ikzOFO1WH?qoX6q=kv0&vm=>IMz*%LB$Z0Z%F2o)
zlSx@zT$K6wd6}A;;*I!!%3$W(>-HTd+7G*&p;F)E<8NlYa(8<>GZ;M<ca>63h()5Y
zu*}{Ui^VKirJmC9FdMsz#fBe({O%<0c=<TRXG2vidc%z{?>vZ(yS*>nuI)m&bnydu
zH_Z3DBlmVXD1*DVqzWDg(+qp;N;k-Ny_uED6|?tYzCRt+x8jT^FhdZgB|06I2XV)F
zBgiY2%?|GeL&MBE)4iNR1!XVHhv%>Mbnl&d=Zy2ehW+80kuL4w_y#BQkMpj4>9H3|
z4SL=T{c(4A8giSiw;9Y3?e(HTGt8>5-c$6)o%b_$hRO5oPtvb~hxE70H1?d|4T|zF
zhnZ}U!33t4^2=R(-}K6Ou!v(ASrulDK`g$nb_@QMgX!-L!wkopqc^kh?+S%NHpp>g
zxT%Jwe*tq>y&b;(jeMaHf{|f(TWth)fKXYo@83^A2!kmm54RWgKb;Zd{Z-~u@AH<i
z3t%ap_x;Che!HKSRUI9zK8mc`A_t#|25}g~_(wM4ox|e&7vaVChkOi)pBjuM7!%Q6
W2;XFU%N+2>f&LuPdK7(rJ^eQjQPkQ1

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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

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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
F4*&~`u1f#_

literal 0
HcmV?d00001

-- 
GitLab