diff --git a/CMakeLists.txt b/CMakeLists.txt index fbbffa8dd..8cb9ded72 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,7 +66,7 @@ function( add_pk3 PK3_NAME PK3_DIR ) # Phase 1: Create a list of all source files for this PK3 archive, except # for a couple of strife image file names that confuse CMake. file(GLOB_RECURSE PK3_SRCS ${PK3_DIR}/*) - # Exclude from the source list some gdemolition .png files with brackets in the + # Exclude from the source list some demolition .png files with brackets in the # file names here, because they confuse CMake. # This only affects the list of source files shown in the IDE. # It does not actually remove the files from the PK3 archive. @@ -415,7 +415,7 @@ add_subdirectory( tools ) add_subdirectory( libraries/dumb ) add_subdirectory( libraries/gdtoa ) add_subdirectory( libraries/enet ) -#add_subdirectory( wadsrc ) +add_subdirectory( wadsrc ) add_subdirectory( source ) if( NOT CMAKE_CROSSCOMPILING ) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index c335e24f4..20accbcd5 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -743,13 +743,9 @@ set( FASTMATH_SOURCES thirdparty/src/xxhash.c # Will we need this anymore with ZLib being available? - thirdparty/src/miniz.c - thirdparty/src/miniz_tdef.c - thirdparty/src/miniz_tinfl.c - - # These will be exported to a resource file later - until that works they need to be explicitly compiled. - polymost1Vert.glsl.cpp - polymost1Frag.glsl.cpp + #thirdparty/src/miniz.c + #thirdparty/src/miniz_tdef.c + #thirdparty/src/miniz_tinfl.c # Another bit of cruft just to make S(hit)DL happy... sdlappicon.cpp diff --git a/source/build/src/cache1d.cpp b/source/build/src/cache1d.cpp index 35c6a86ec..e7103ba4a 100644 --- a/source/build/src/cache1d.cpp +++ b/source/build/src/cache1d.cpp @@ -22,6 +22,7 @@ #ifdef WITHKPLIB #include "kplib.h" +#include "zstring.h" //Insert '|' in front of filename //Doing this tells kzopen to load the file only if inside a .ZIP file @@ -723,6 +724,8 @@ static int32_t kread_grp(int32_t handle, void *buffer, int32_t leng); static int32_t klseek_grp(int32_t handle, int32_t offset, int32_t whence); static void kclose_grp(int32_t handle); +static bool alreadycalled; +extern FString progdir; int initgroupfile(const char *filename) { char buf[70]; diff --git a/source/build/src/polymost.cpp b/source/build/src/polymost.cpp index 45a09ab1d..0b12b5944 100644 --- a/source/build/src/polymost.cpp +++ b/source/build/src/polymost.cpp @@ -12,6 +12,7 @@ Ken Silverman's official web site: http://www.advsys.net/ken #include "kplib.h" #include "mdsprite.h" #include "polymost.h" +#include "files.h" #include "../../glbackend/glbackend.h" extern char textfont[2048], smalltextfont[2048]; @@ -140,10 +141,9 @@ int32_t r_useindexedcolortextures = -1; static int32_t lastbasepal = -1; static FHardwareTexture *paletteTextureIDs[MAXBASEPALS]; static FHardwareTexture *palswapTextureID = nullptr; -extern char const *polymost1Frag; -extern char const *polymost1Vert; +//extern char const *polymost1Frag; +//extern char const *polymost1Vert; static GLuint polymost1CurrentShaderProgramID = 0; -static GLuint polymost1BasicShaderProgramID = 0; static GLuint polymost1ExtendedShaderProgramID = 0; static GLint polymost1TexSamplerLoc = -1; static GLint polymost1PalSwapSamplerLoc = -1; @@ -671,9 +671,6 @@ void polymost_useDetailMapping(char useDetailMapping) if (currentShaderProgramID != polymost1CurrentShaderProgramID || useDetailMapping == polymost1UseDetailMapping) return; - if (useDetailMapping) - polymost_setCurrentShaderProgram(polymost1ExtendedShaderProgramID); - polymost1UseDetailMapping = useDetailMapping; glUniform1f(polymost1UseDetailMappingLoc, polymost1UseDetailMapping); } @@ -683,9 +680,6 @@ void polymost_useGlowMapping(char useGlowMapping) if (currentShaderProgramID != polymost1CurrentShaderProgramID || useGlowMapping == polymost1UseGlowMapping) return; - if (useGlowMapping) - polymost_setCurrentShaderProgram(polymost1ExtendedShaderProgramID); - polymost1UseGlowMapping = useGlowMapping; glUniform1f(polymost1UseGlowMappingLoc, polymost1UseGlowMapping); } @@ -738,6 +732,8 @@ void useShaderProgram(uint32_t shaderID) currentShaderProgramID = shaderID; } +FileReader GetBaseResource(const char* fn); + // one-time initialization of OpenGL for polymost void polymost_glinit() { @@ -746,31 +742,47 @@ void polymost_glinit() currentTextureID = 0; char allPacked = false; + auto fr1 = GetBaseResource("demolition/shaders/glsl/polymost.vp"); + TArray polymost1Vert = fr1.Read(); + fr1 = GetBaseResource("demolition/shaders/glsl/polymost.fp"); + TArray polymost1Frag = fr1.Read(); + // Zero-terminate both strings. + polymost1Vert.Push(0); + polymost1Frag.Push(0); + polymost1ExtendedShaderProgramID = glCreateProgram(); - GLuint polymost1BasicVertexShaderID = polymost2_compileShader(GL_VERTEX_SHADER, polymost1Vert); - GLuint polymost1ExtendedFragmentShaderID = polymost2_compileShader(GL_FRAGMENT_SHADER, polymost1Frag); + GLuint polymost1BasicVertexShaderID = polymost2_compileShader(GL_VERTEX_SHADER, (char*)polymost1Vert.Data()); + GLuint polymost1ExtendedFragmentShaderID = polymost2_compileShader(GL_FRAGMENT_SHADER, (char*)polymost1Frag.Data()); glAttachShader(polymost1ExtendedShaderProgramID, polymost1BasicVertexShaderID); glAttachShader(polymost1ExtendedShaderProgramID, polymost1ExtendedFragmentShaderID); glLinkProgram(polymost1ExtendedShaderProgramID); - int polymost1BasicFragLen = strlen(polymost1Frag); - char* polymost1BasicFrag = (char*) malloc(polymost1BasicFragLen); - memcpy(polymost1BasicFrag, polymost1Frag, polymost1BasicFragLen); - char* extDefineSubstr = strstr(polymost1BasicFrag, " #define POLYMOST1_EXTENDED"); - if (extDefineSubstr) - { - //Disable extensions for basic fragment shader - extDefineSubstr[0] = '/'; - extDefineSubstr[1] = '/'; - } - polymost1BasicShaderProgramID = glCreateProgram(); - GLuint polymost1BasicFragmentShaderID = polymost2_compileShader(GL_FRAGMENT_SHADER, polymost1BasicFrag, polymost1BasicFragLen); - glAttachShader(polymost1BasicShaderProgramID, polymost1BasicVertexShaderID); - glAttachShader(polymost1BasicShaderProgramID, polymost1BasicFragmentShaderID); - glLinkProgram(polymost1BasicShaderProgramID); - free(polymost1BasicFrag); - polymost1BasicFrag = 0; + char buffer[10000]; + glGetShaderInfoLog(polymost1BasicVertexShaderID, 10000, NULL, buffer); + if (*buffer) + { + initprintf("Vertex shader:\n%s\n", buffer); + } + glGetShaderInfoLog(polymost1ExtendedFragmentShaderID, 10000, NULL, buffer); + if (*buffer) + { + initprintf("Fragment shader:\n%s\n", buffer); + } + glGetProgramInfoLog(polymost1ExtendedShaderProgramID, 10000, NULL, buffer); + if (*buffer) + { + initprintf("Linking:\n%s\n", buffer); + } + GLint status = 0; + glGetProgramiv(polymost1ExtendedShaderProgramID, GL_LINK_STATUS, &status); + auto linked = (status == GL_TRUE); + if (!linked) + { + // only print message if there's an error. + wm_msgbox("Fatal error", "Unable to init shader\n"); + exit(1); + } // set defaults polymost_setCurrentShaderProgram(polymost1ExtendedShaderProgramID); glUniform1i(polymost1TexSamplerLoc, 0); @@ -779,10 +791,6 @@ void polymost_glinit() glUniform1i(polymost1DetailSamplerLoc, 3); glUniform1i(polymost1GlowSamplerLoc, 4); polymost_setPalswapSize(256, numshades+1); - polymost_setCurrentShaderProgram(polymost1BasicShaderProgramID); - glUniform1i(polymost1TexSamplerLoc, 0); - glUniform1i(polymost1PalSwapSamplerLoc, 1); - glUniform1i(polymost1PaletteSamplerLoc, 2); useShaderProgram(0); lastbasepal = -1; @@ -1125,7 +1133,7 @@ void uploadtexture(FHardwareTexture *tex, int32_t doalloc, vec2_t siz, int32_t t void uploadbasepalette(int32_t basepalnum) { - if (!polymost1BasicShaderProgramID) + if (!polymost1ExtendedShaderProgramID) { //POGO: if we haven't initialized properly yet, we shouldn't be uploading base palettes return; @@ -1157,7 +1165,7 @@ void uploadbasepalette(int32_t basepalnum) void uploadpalswap(int32_t palookupnum) { - if (!polymost1BasicShaderProgramID) + if (!polymost1ExtendedShaderProgramID) { //POGO: if we haven't initialized properly yet, we shouldn't be uploading palette swap tables return; diff --git a/source/glbackend/glbackend.cpp b/source/glbackend/glbackend.cpp index 3c18d8014..826891eb3 100644 --- a/source/glbackend/glbackend.cpp +++ b/source/glbackend/glbackend.cpp @@ -1,13 +1,48 @@ +#include #include "glbackend.h" #include "glad/glad.h" #include "gl_samplers.h" #include "baselayer.h" +#include "resourcefile.h" + +std::unique_ptr engine_res; + +// The resourge manager in cache1d is far too broken to add some arbitrary file without some adjustment. +// For now, keep this file here, until the resource management can be redone in a more workable fashion. +extern FString progdir; + +void InitBaseRes() +{ + if (!engine_res) + { + // If we get here for the first time, load the engine-internal data. + FString baseres = progdir + "demolition.pk3"; + engine_res.reset(FResourceFile::OpenResourceFile(baseres, true, true)); + if (!engine_res) + { + wm_msgbox("Fatal error", "Engine resources (demolition.pk3) not found"); + exit(-1); + } + } +} + +FileReader GetBaseResource(const char* fn) +{ + auto lump = engine_res->FindLump(fn); + if (!lump) + { + wm_msgbox("Fatal error", "Base resource '%s' not found", fn); + exit(-1); + } + return lump->NewReader(); +} GLInstance GLInterface; void GLInstance::Init() { + InitBaseRes(); if (!mSamplers) { mSamplers = new FSamplerManager; diff --git a/source/platform/win32/winbits.cpp b/source/platform/win32/winbits.cpp index 02bc08f53..540572974 100644 --- a/source/platform/win32/winbits.cpp +++ b/source/platform/win32/winbits.cpp @@ -8,6 +8,7 @@ #include "zstring.h" #include "winbits.h" +FString progdir; // // CheckWinVersion() -- check to see what version of Windows we happen to be running under (stripped down to what is actually still supported.) // @@ -127,7 +128,13 @@ int32_t win_buildargs(char **argvbuf) *wp = 0; } - return buildargc; + // Figure out what directory the program resides in. + progdir = argvbuf[0]; + auto lastsep = progdir.LastIndexOf('/'); + if (lastsep != -1) + progdir.Truncate(lastsep + 1); + + return buildargc; } diff --git a/wadsrc/CMakeLists.txt b/wadsrc/CMakeLists.txt new file mode 100644 index 000000000..bd861347e --- /dev/null +++ b/wadsrc/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required( VERSION 2.8.7 ) + +add_pk3(demolition.pk3 ${CMAKE_CURRENT_SOURCE_DIR}/static) diff --git a/source/polymost1Frag.glsl.cpp b/wadsrc/static/demolition/shaders/glsl/polymost.fp similarity index 84% rename from source/polymost1Frag.glsl.cpp rename to wadsrc/static/demolition/shaders/glsl/polymost.fp index 3fd8cb710..e16340707 100644 --- a/source/polymost1Frag.glsl.cpp +++ b/wadsrc/static/demolition/shaders/glsl/polymost.fp @@ -1,4 +1,3 @@ -char const *polymost1Frag = R"shader( #version 110 //include an additional space here so that we can programmatically search for and disable this preprocessor definition easily @@ -11,10 +10,8 @@ uniform sampler2D s_palswap; //s_palette is the base palette texture where u is the color index uniform sampler2D s_palette; -#ifdef POLYMOST1_EXTENDED uniform sampler2D s_detail; uniform sampler2D s_glow; -#endif //u_texturePosSize is the texture position & size packaged into a single vec4 as {pos.x, pos.y, size.x, size.y} uniform vec4 u_texturePosSize; @@ -37,10 +34,8 @@ uniform float u_npotEmulationXOffset; uniform float u_shadeInterpolate; uniform float u_brightness; -#ifdef POLYMOST1_EXTENDED uniform float u_useDetailMapping; uniform float u_useGlowMapping; -#endif varying vec4 v_color; varying float v_distance; @@ -81,19 +76,15 @@ void main() palettedColor.a = c_one-floor(color.r); color = mix(color, palettedColor, u_usePalette); -#ifdef POLYMOST1_EXTENDED - vec4 detailColor = texture2D(s_detail, gl_TexCoord[3].xy); - detailColor = mix(c_vec4_one, 2.0*detailColor, u_useDetailMapping*detailColor.a); - color.rgb *= detailColor.rgb; -#endif + if (u_useDetailMapping != 0.0) + { + vec4 detailColor = texture2D(s_detail, gl_TexCoord[3].xy); + detailColor = mix(c_vec4_one, 2.0*detailColor, detailColor.a); + color.rgb *= detailColor.rgb; + } color = mix(color, c_vec4_one, u_useColorOnly); - // DEBUG - //color = texture2D(s_palswap, gl_TexCoord[0].xy); - //color = texture2D(s_palette, gl_TexCoord[0].xy); - //color = texture2D(s_texture, gl_TexCoord[0].yx); - color.rgb = mix(v_color.rgb*color.rgb, color.rgb, fullbright); float fogEnabled = mix(u_fogEnabled, c_zero, u_usePalette); @@ -102,14 +93,15 @@ void main() //float fogFactor = clamp(gl_FogFragCoord, fullbright, c_one); color.rgb = mix(gl_Fog.color.rgb, color.rgb, fogFactor); -#ifdef POLYMOST1_EXTENDED - vec4 glowColor = texture2D(s_glow, gl_TexCoord[4].xy); - color.rgb = mix(color.rgb, glowColor.rgb, u_useGlowMapping*glowColor.a*(c_one-u_useColorOnly)); -#endif - + if (u_useGlowMapping != 0.0) + { + vec4 glowColor = texture2D(s_glow, gl_TexCoord[4].xy); + color.rgb = mix(color.rgb, glowColor.rgb, glowColor.a*(c_one-u_useColorOnly)); + } + color.a *= v_color.a; color.rgb = pow(color.rgb, vec3(u_brightness)); gl_FragData[0] = color; } -)shader"; + diff --git a/source/polymost1Vert.glsl.cpp b/wadsrc/static/demolition/shaders/glsl/polymost.vp similarity index 95% rename from source/polymost1Vert.glsl.cpp rename to wadsrc/static/demolition/shaders/glsl/polymost.vp index 0c2c8dc33..3af69c413 100644 --- a/source/polymost1Vert.glsl.cpp +++ b/wadsrc/static/demolition/shaders/glsl/polymost.vp @@ -1,4 +1,3 @@ -char const *polymost1Vert = R"shader( #version 110 varying vec4 v_color; @@ -32,4 +31,3 @@ void main() v_color = gl_Color; v_distance = gl_Vertex.z; } -)shader"; diff --git a/wadsrc/static/filter/game-blood/blood.def b/wadsrc/static/filter/game-blood/blood.def new file mode 100644 index 000000000..fb39a7482 --- /dev/null +++ b/wadsrc/static/filter/game-blood/blood.def @@ -0,0 +1 @@ +include blood_widescreen.def \ No newline at end of file diff --git a/wadsrc/static/filter/game-blood/blood_widescreen.def b/wadsrc/static/filter/game-blood/blood_widescreen.def new file mode 100644 index 000000000..aba66f835 --- /dev/null +++ b/wadsrc/static/filter/game-blood/blood_widescreen.def @@ -0,0 +1,66 @@ +tilefromtexture 2200 { file "tiles/2200.png" ifcrc -588541517 } +tilefromtexture 2574 { file "tiles/2574.png" ifcrc -635337039 } +tilefromtexture 9216 { file "tiles/9216.png" } +tilefromtexture 9217 { file "tiles/9217.png" } +tilefromtexture 9218 { file "tiles/9218.png" } +tilefromtexture 9219 { file "tiles/9219.png" } +tilefromtexture 9220 { file "tiles/9220.png" } +tilefromtexture 9221 { file "tiles/9221.png" } +tilefromtexture 9222 { file "tiles/9222.png" } +tilefromtexture 9223 { file "tiles/9223.png" } +tilefromtexture 9224 { file "tiles/9224.png" } +tilefromtexture 9225 { file "tiles/9225.png" } +tilefromtexture 9226 { file "tiles/9226.png" } +tilefromtexture 9227 { file "tiles/9227.png" } +tilefromtexture 9228 { file "tiles/9228.png" } +tilefromtexture 9229 { file "tiles/9229.png" } +tilefromtexture 9230 { file "tiles/9230.png" } +tilefromtexture 9231 { file "tiles/9231.png" } +tilefromtexture 9232 { file "tiles/9232.png" } +tilefromtexture 9233 { file "tiles/9233.png" } +tilefromtexture 9234 { file "tiles/9234.png" } +tilefromtexture 9235 { file "tiles/9235.png" } +tilefromtexture 9236 { file "tiles/9236.png" } +tilefromtexture 9237 { file "tiles/9237.png" } +tilefromtexture 9238 { file "tiles/9238.png" } +tilefromtexture 9239 { file "tiles/9239.png" } +tilefromtexture 9240 { file "tiles/9240.png" } +tilefromtexture 9241 { file "tiles/9241.png" } +tilefromtexture 9242 { file "tiles/9242.png" } +tilefromtexture 9243 { file "tiles/9243.png" } +tilefromtexture 9244 { file "tiles/9244.png" } +tilefromtexture 9245 { file "tiles/9245.png" } +tilefromtexture 9246 { file "tiles/9246.png" } +tilefromtexture 9247 { file "tiles/9247.png" } +tilefromtexture 9248 { file "tiles/9248.png" } +tilefromtexture 9249 { file "tiles/9249.png" } +tilefromtexture 9250 { file "tiles/9250.png" } +tilefromtexture 9251 { file "tiles/9251.png" } +tilefromtexture 9252 { file "tiles/9252.png" } +tilefromtexture 9253 { file "tiles/9253.png" } +tilefromtexture 9254 { file "tiles/9254.png" } +tilefromtexture 9255 { file "tiles/9255.png" } +tilefromtexture 9256 { file "tiles/9256.png" } +tilefromtexture 9257 { file "tiles/9257.png" } +tilefromtexture 9258 { file "tiles/9258.png" } +tilefromtexture 9259 { file "tiles/9259.png" } +tilefromtexture 9260 { file "tiles/9260.png" } +tilefromtexture 9261 { file "tiles/9261.png" } +tilefromtexture 9262 { file "tiles/9262.png" } +tilefromtexture 9263 { file "tiles/9263.png" } +tilefromtexture 9264 { file "tiles/9264.png" } +tilefromtexture 9265 { file "tiles/9265.png" } +tilefromtexture 9266 { file "tiles/9266.png" } +tilefromtexture 9267 { file "tiles/9267.png" } +tilefromtexture 9268 { file "tiles/9268.png" } +tilefromtexture 9269 { file "tiles/9269.png" } +tilefromtexture 9270 { file "tiles/9270.png" } +tilefromtexture 9271 { file "tiles/9271.png" } +tilefromtexture 9272 { file "tiles/9272.png" } +tilefromtexture 9273 { file "tiles/9273.png" } +tilefromtexture 9274 { file "tiles/9274.png" } +tilefromtexture 9275 { file "tiles/9275.png" } +tilefromtexture 9276 { file "tiles/9276.png" } +tilefromtexture 9277 { file "tiles/9277.png" } +tilefromtexture 9278 { file "tiles/9278.png" } +tilefromtexture 9279 { file "tiles/9279.png" } diff --git a/wadsrc/static/filter/game-blood/tiles/2200.png b/wadsrc/static/filter/game-blood/tiles/2200.png new file mode 100644 index 000000000..e6fcc9470 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/2200.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/2574.png b/wadsrc/static/filter/game-blood/tiles/2574.png new file mode 100644 index 000000000..a3a76ec3b Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/2574.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9216.png b/wadsrc/static/filter/game-blood/tiles/9216.png new file mode 100644 index 000000000..fc4318036 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9216.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9217.png b/wadsrc/static/filter/game-blood/tiles/9217.png new file mode 100644 index 000000000..853c89830 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9217.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9218.png b/wadsrc/static/filter/game-blood/tiles/9218.png new file mode 100644 index 000000000..b054daeec Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9218.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9219.png b/wadsrc/static/filter/game-blood/tiles/9219.png new file mode 100644 index 000000000..76d763712 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9219.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9220.png b/wadsrc/static/filter/game-blood/tiles/9220.png new file mode 100644 index 000000000..fc1e44d1a Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9220.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9221.png b/wadsrc/static/filter/game-blood/tiles/9221.png new file mode 100644 index 000000000..a047a455c Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9221.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9222.png b/wadsrc/static/filter/game-blood/tiles/9222.png new file mode 100644 index 000000000..e8b6cb777 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9222.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9223.png b/wadsrc/static/filter/game-blood/tiles/9223.png new file mode 100644 index 000000000..bd029f83e Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9223.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9224.png b/wadsrc/static/filter/game-blood/tiles/9224.png new file mode 100644 index 000000000..f338ba6a0 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9224.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9225.png b/wadsrc/static/filter/game-blood/tiles/9225.png new file mode 100644 index 000000000..37b6cafc8 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9225.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9226.png b/wadsrc/static/filter/game-blood/tiles/9226.png new file mode 100644 index 000000000..036e2b815 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9226.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9227.png b/wadsrc/static/filter/game-blood/tiles/9227.png new file mode 100644 index 000000000..5bff316f0 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9227.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9228.png b/wadsrc/static/filter/game-blood/tiles/9228.png new file mode 100644 index 000000000..2308ccb16 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9228.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9229.png b/wadsrc/static/filter/game-blood/tiles/9229.png new file mode 100644 index 000000000..e5b7f6e05 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9229.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9230.png b/wadsrc/static/filter/game-blood/tiles/9230.png new file mode 100644 index 000000000..a6ea067da Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9230.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9231.png b/wadsrc/static/filter/game-blood/tiles/9231.png new file mode 100644 index 000000000..d23078c6c Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9231.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9232.png b/wadsrc/static/filter/game-blood/tiles/9232.png new file mode 100644 index 000000000..cff7e795c Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9232.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9233.png b/wadsrc/static/filter/game-blood/tiles/9233.png new file mode 100644 index 000000000..fe232aa8d Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9233.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9234.png b/wadsrc/static/filter/game-blood/tiles/9234.png new file mode 100644 index 000000000..a218debf7 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9234.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9235.png b/wadsrc/static/filter/game-blood/tiles/9235.png new file mode 100644 index 000000000..755f5173e Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9235.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9236.png b/wadsrc/static/filter/game-blood/tiles/9236.png new file mode 100644 index 000000000..7de9d609d Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9236.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9237.png b/wadsrc/static/filter/game-blood/tiles/9237.png new file mode 100644 index 000000000..5119ec715 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9237.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9238.png b/wadsrc/static/filter/game-blood/tiles/9238.png new file mode 100644 index 000000000..a6f029dee Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9238.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9239.png b/wadsrc/static/filter/game-blood/tiles/9239.png new file mode 100644 index 000000000..7615876f9 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9239.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9240.png b/wadsrc/static/filter/game-blood/tiles/9240.png new file mode 100644 index 000000000..6007598bb Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9240.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9241.png b/wadsrc/static/filter/game-blood/tiles/9241.png new file mode 100644 index 000000000..e4a3b3487 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9241.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9242.png b/wadsrc/static/filter/game-blood/tiles/9242.png new file mode 100644 index 000000000..9906d2a89 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9242.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9243.png b/wadsrc/static/filter/game-blood/tiles/9243.png new file mode 100644 index 000000000..36d55d270 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9243.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9244.png b/wadsrc/static/filter/game-blood/tiles/9244.png new file mode 100644 index 000000000..f2a4f5f72 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9244.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9245.png b/wadsrc/static/filter/game-blood/tiles/9245.png new file mode 100644 index 000000000..47754b456 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9245.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9246.png b/wadsrc/static/filter/game-blood/tiles/9246.png new file mode 100644 index 000000000..89e19afba Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9246.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9247.png b/wadsrc/static/filter/game-blood/tiles/9247.png new file mode 100644 index 000000000..fb88f139d Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9247.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9248.png b/wadsrc/static/filter/game-blood/tiles/9248.png new file mode 100644 index 000000000..6d3f37d09 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9248.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9249.png b/wadsrc/static/filter/game-blood/tiles/9249.png new file mode 100644 index 000000000..d76ca4ef5 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9249.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9250.png b/wadsrc/static/filter/game-blood/tiles/9250.png new file mode 100644 index 000000000..a41a71de0 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9250.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9251.png b/wadsrc/static/filter/game-blood/tiles/9251.png new file mode 100644 index 000000000..03b9380ee Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9251.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9252.png b/wadsrc/static/filter/game-blood/tiles/9252.png new file mode 100644 index 000000000..ffed557f5 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9252.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9253.png b/wadsrc/static/filter/game-blood/tiles/9253.png new file mode 100644 index 000000000..56415caa4 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9253.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9254.png b/wadsrc/static/filter/game-blood/tiles/9254.png new file mode 100644 index 000000000..97d0075a7 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9254.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9255.png b/wadsrc/static/filter/game-blood/tiles/9255.png new file mode 100644 index 000000000..a12bacd4c Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9255.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9256.png b/wadsrc/static/filter/game-blood/tiles/9256.png new file mode 100644 index 000000000..605029350 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9256.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9257.png b/wadsrc/static/filter/game-blood/tiles/9257.png new file mode 100644 index 000000000..88ffa4cd2 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9257.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9258.png b/wadsrc/static/filter/game-blood/tiles/9258.png new file mode 100644 index 000000000..99c7756cf Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9258.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9259.png b/wadsrc/static/filter/game-blood/tiles/9259.png new file mode 100644 index 000000000..96ac0e39b Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9259.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9260.png b/wadsrc/static/filter/game-blood/tiles/9260.png new file mode 100644 index 000000000..6c9f1542b Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9260.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9261.png b/wadsrc/static/filter/game-blood/tiles/9261.png new file mode 100644 index 000000000..7dcc1a7d0 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9261.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9262.png b/wadsrc/static/filter/game-blood/tiles/9262.png new file mode 100644 index 000000000..c0a4cf858 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9262.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9263.png b/wadsrc/static/filter/game-blood/tiles/9263.png new file mode 100644 index 000000000..cb2e5d039 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9263.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9264.png b/wadsrc/static/filter/game-blood/tiles/9264.png new file mode 100644 index 000000000..27d516b2a Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9264.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9265.png b/wadsrc/static/filter/game-blood/tiles/9265.png new file mode 100644 index 000000000..c4243278c Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9265.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9266.png b/wadsrc/static/filter/game-blood/tiles/9266.png new file mode 100644 index 000000000..25aa7a6fe Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9266.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9267.png b/wadsrc/static/filter/game-blood/tiles/9267.png new file mode 100644 index 000000000..b566305e1 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9267.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9268.png b/wadsrc/static/filter/game-blood/tiles/9268.png new file mode 100644 index 000000000..7a703fe40 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9268.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9269.png b/wadsrc/static/filter/game-blood/tiles/9269.png new file mode 100644 index 000000000..6cf03ea11 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9269.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9270.png b/wadsrc/static/filter/game-blood/tiles/9270.png new file mode 100644 index 000000000..0e10b2bc8 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9270.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9271.png b/wadsrc/static/filter/game-blood/tiles/9271.png new file mode 100644 index 000000000..b2621075c Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9271.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9272.png b/wadsrc/static/filter/game-blood/tiles/9272.png new file mode 100644 index 000000000..b81521788 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9272.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9273.png b/wadsrc/static/filter/game-blood/tiles/9273.png new file mode 100644 index 000000000..f0a586bba Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9273.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9274.png b/wadsrc/static/filter/game-blood/tiles/9274.png new file mode 100644 index 000000000..66718dfe3 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9274.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9275.png b/wadsrc/static/filter/game-blood/tiles/9275.png new file mode 100644 index 000000000..a9c9161cf Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9275.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9276.png b/wadsrc/static/filter/game-blood/tiles/9276.png new file mode 100644 index 000000000..2c2abe0f9 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9276.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9277.png b/wadsrc/static/filter/game-blood/tiles/9277.png new file mode 100644 index 000000000..06242a6b2 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9277.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9278.png b/wadsrc/static/filter/game-blood/tiles/9278.png new file mode 100644 index 000000000..36aeea689 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9278.png differ diff --git a/wadsrc/static/filter/game-blood/tiles/9279.png b/wadsrc/static/filter/game-blood/tiles/9279.png new file mode 100644 index 000000000..abdb38876 Binary files /dev/null and b/wadsrc/static/filter/game-blood/tiles/9279.png differ