About
@@ -144,6 +144,12 @@ QuakeSpasm 0.94 has support for playing the 2021 re-release content: Copy the qu
- to joystick defaults, behaviour (patch by Chris Cowan). See the "Controller support / Cvars" section above.
- Fix for a mouse grabbing issue on macOS.
- Add missing support for -ip command line option on unix / macOS.
+
- Bump the progs execution runaway loop limit to 16M.
+
- Bump the MAXALIASFRAMES limit to 1024.
+
- Increase chase cam target trace distance to allow for chasecam to function in large open maps (useful e.g. for the func_vehicle mod.)
+
- Fix on-screen keyboard showing up suddenly on Steam Deck when starting a map.
+
- Fix a memory leak when exiting game in SDL2 builds.
+
- Fix console animation with scr_conspeed <= 0.
- Minor code cleanups. Updated third party code, e.g. SDL, music codecs, etc.
- Thanks to Andrei Drexler, Chris Cowan and Maciej Olędzki for their patches.
diff --git a/MacOSX/SDL2.framework/Versions/A/Headers/SDL_revision.h b/MacOSX/SDL2.framework/Versions/A/Headers/SDL_revision.h
index a06314a8..bcb4bab2 100644
--- a/MacOSX/SDL2.framework/Versions/A/Headers/SDL_revision.h
+++ b/MacOSX/SDL2.framework/Versions/A/Headers/SDL_revision.h
@@ -1,2 +1,2 @@
-#define SDL_REVISION "@9c3c6383d894e2ddcfe60115cd1d1efb81ef3046"
+#define SDL_REVISION "https://github.com/sezero/SDL.git@07bb804955f66a954dbe7a71db29d76847de69f2"
#define SDL_REVISION_NUMBER 0
diff --git a/MacOSX/SDL2.framework/Versions/A/SDL2 b/MacOSX/SDL2.framework/Versions/A/SDL2
index 94513af3..1770789a 100755
Binary files a/MacOSX/SDL2.framework/Versions/A/SDL2 and b/MacOSX/SDL2.framework/Versions/A/SDL2 differ
diff --git a/MacOSX/codecs/include/xmp.h b/MacOSX/codecs/include/xmp.h
index e3885783..935eb9ed 100644
--- a/MacOSX/codecs/include/xmp.h
+++ b/MacOSX/codecs/include/xmp.h
@@ -16,19 +16,33 @@ extern "C" {
#define XMP_VER_RELEASE 1
#if defined(_WIN32) && !defined(__CYGWIN__)
-# if defined(BUILDING_STATIC)
+# if defined(LIBXMP_STATIC)
# define LIBXMP_EXPORT
# elif defined(BUILDING_DLL)
# define LIBXMP_EXPORT __declspec(dllexport)
# else
# define LIBXMP_EXPORT __declspec(dllimport)
# endif
-#elif defined(__OS2__) && defined(__WATCOMC__) && defined(__SW_BD)
+#elif defined(__OS2__) && defined(__WATCOMC__)
+# if defined(LIBXMP_STATIC)
+# define LIBXMP_EXPORT
+# elif defined(BUILDING_DLL)
# define LIBXMP_EXPORT __declspec(dllexport)
+# else
+# define LIBXMP_EXPORT
+# endif
#elif (defined(__GNUC__) || defined(__clang__) || defined(__HP_cc)) && defined(XMP_SYM_VISIBILITY)
-# define LIBXMP_EXPORT __attribute__((visibility ("default")))
+# if defined(LIBXMP_STATIC)
+# define LIBXMP_EXPORT
+# else
+# define LIBXMP_EXPORT __attribute__((visibility("default")))
+# endif
#elif defined(__SUNPRO_C) && defined(XMP_LDSCOPE_GLOBAL)
-# define LIBXMP_EXPORT __global
+# if defined(LIBXMP_STATIC)
+# define LIBXMP_EXPORT
+# else
+# define LIBXMP_EXPORT __global
+# endif
#elif defined(EMSCRIPTEN)
# define LIBXMP_EXPORT EMSCRIPTEN_KEEPALIVE
# define LIBXMP_EXPORT_VAR
@@ -36,7 +50,7 @@ extern "C" {
# define LIBXMP_EXPORT
#endif
-#if !defined (LIBXMP_EXPORT_VAR)
+#if !defined(LIBXMP_EXPORT_VAR)
# define LIBXMP_EXPORT_VAR LIBXMP_EXPORT
#endif
@@ -241,6 +255,7 @@ struct xmp_sample {
#define XMP_SAMPLE_LOOP_FULL (1 << 4) /* Play full sample before looping */
#define XMP_SAMPLE_SLOOP (1 << 5) /* Sample has sustain loop */
#define XMP_SAMPLE_SLOOP_BIDIR (1 << 6) /* Bidirectional sustain loop */
+#define XMP_SAMPLE_STEREO (1 << 7) /* Interlaced stereo sample */
#define XMP_SAMPLE_SYNTH (1 << 15) /* Data contains synth patch */
int flg; /* Flags */
unsigned char *data; /* Sample data */
diff --git a/MacOSX/codecs/lib/libxmp.dylib b/MacOSX/codecs/lib/libxmp.dylib
index 539244c2..68301f4c 100755
Binary files a/MacOSX/codecs/lib/libxmp.dylib and b/MacOSX/codecs/lib/libxmp.dylib differ
diff --git a/Quake/Makefile b/Quake/Makefile
index 7cf92456..77d4b6ee 100644
--- a/Quake/Makefile
+++ b/Quake/Makefile
@@ -13,6 +13,9 @@ USE_SDL2=1
### Enable the use of zlib, for compressed pk3s.
USE_ZLIB=1
+### Do we need to link the math library?
+LINK_M=1
+
### Enable/Disable codecs for streaming music support
USE_CODEC_WAVE=1
USE_CODEC_FLAC=0
@@ -116,6 +119,8 @@ SDL_LIBS := $(shell $(SDL_CONFIG) --libs)
ifeq ($(HOST_OS),sunos)
NET_LIBS :=-lsocket -lnsl -lresolv
+else ifdef HAIKU_OS
+NET_LIBS :=-lnetwork
else
NET_LIBS :=
endif
@@ -188,13 +193,17 @@ ifeq ($(USE_CODEC_UMX),1)
CFLAGS+= -DUSE_CODEC_UMX
endif
-COMMON_LIBS:= -ldl -lm -lGL
+COMMON_LIBS:= -lGL
ifeq ($(USE_ZLIB),1)
CFLAGS+= -DUSE_ZLIB
COMMON_LIBS+= -lz
endif
+ifeq ($(LINK_M),1)
+COMMON_LIBS += -lm
+endif
+
LIBS := $(COMMON_LIBS) $(NET_LIBS) $(CODECLIBS)
# ---------------------------
diff --git a/Quake/Makefile.wat b/Quake/Makefile.wat
index 78ed32ca..d8c95af1 100644
--- a/Quake/Makefile.wat
+++ b/Quake/Makefile.wat
@@ -1,5 +1,5 @@
# makefile to build quakespasm.exe for Windows using Open Watcom:
-# wmake -f Makefile.wat
+# wmake -f Makefile.wat
### Enable/disable SDL2
USE_SDL2=0
@@ -102,7 +102,7 @@ CODECLIBS+= $(LIBCODEC)mikmod.lib
!endif
!ifeq USE_CODEC_XMP 1
CFLAGS+= -DUSE_CODEC_XMP
-CFLAGS+= -DXMP_NO_DLL
+CFLAGS+= -DLIBXMP_STATIC
CODECLIBS+= $(LIBCODEC)libxmp.lib
!endif
!ifeq USE_CODEC_MODPLUG 1
diff --git a/Quake/arch_def.h b/Quake/arch_def.h
index 4a27d9ad..8dd5b86d 100644
--- a/Quake/arch_def.h
+++ b/Quake/arch_def.h
@@ -72,6 +72,12 @@
# define PLATFORM_RISCOS 1
# endif
+#elif defined(__HAIKU__)
+
+# if !defined(PLATFORM_HAIKU)
+# define PLATFORM_HAIKU 1
+# endif
+
#else /* here goes the unix platforms */
#if defined(__unix) || defined(__unix__) || defined(unix) || \
@@ -159,6 +165,8 @@
# define PLATFORM_STRING "RiscOS"
#elif defined(__GNU__)
# define PLATFORM_STRING "GNU/Hurd"
+#elif defined(PLATFORM_HAIKU)
+# define PLATFORM_STRING "Haiku"
#elif defined(PLATFORM_UNIX)
# define PLATFORM_STRING "Unix"
#else
diff --git a/Quake/build_cross_haiku32-sdl2.sh b/Quake/build_cross_haiku32-sdl2.sh
new file mode 100755
index 00000000..b180335d
--- /dev/null
+++ b/Quake/build_cross_haiku32-sdl2.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Change this script to meet your needs and/or environment.
+
+TARGET=i586-pc-haiku
+
+MAKE_CMD=make
+
+CC="$TARGET-gcc"
+AS="$TARGET-as"
+RANLIB="$TARGET-ranlib"
+AR="$TARGET-ar"
+STRIP="$TARGET-strip"
+LDFLAGS=-L/usr/lib32 # hack
+export CC AS AR RANLIB STRIP LDFLAGS
+
+exec $MAKE_CMD HAIKU_OS=1 LINK_M=0 USE_SDL2=1 LDFLAGS=$LDFLAGS CC=$CC AS=$AS RANLIB=$RANLIB AR=$AR STRIP=$STRIP -f Makefile $*
diff --git a/Quake/build_cross_haiku64-sdl2.sh b/Quake/build_cross_haiku64-sdl2.sh
new file mode 100755
index 00000000..0b43404c
--- /dev/null
+++ b/Quake/build_cross_haiku64-sdl2.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+# Change this script to meet your needs and/or environment.
+
+TARGET=x86_64-unknown-haiku
+
+MAKE_CMD=make
+
+CC="$TARGET-gcc"
+AS="$TARGET-as"
+RANLIB="$TARGET-ranlib"
+AR="$TARGET-ar"
+STRIP="$TARGET-strip"
+export CC AS AR RANLIB STRIP
+
+exec $MAKE_CMD HAIKU_OS=1 LINK_M=0 USE_SDL2=1 CC=$CC AS=$AS RANLIB=$RANLIB AR=$AR STRIP=$STRIP -f Makefile $*
diff --git a/Quake/chase.c b/Quake/chase.c
index 583eeb91..ee2aee43 100644
--- a/Quake/chase.c
+++ b/Quake/chase.c
@@ -106,7 +106,7 @@ void Chase_UpdateForDrawing (void)
VectorCopy (ideal, r_refdef.vieworg);
// find the spot the player is looking at
- VectorMA (cl.viewent.origin, 4096, forward, temp);
+ VectorMA (cl.viewent.origin, 1<<20, forward, temp);
TraceLine (cl.viewent.origin, temp, crosshair);
// calculate camera angles to look at the same spot
diff --git a/Quake/gl_vidsdl.c b/Quake/gl_vidsdl.c
index f5678410..e027d6f0 100644
--- a/Quake/gl_vidsdl.c
+++ b/Quake/gl_vidsdl.c
@@ -1169,7 +1169,7 @@ static void GL_CheckExtensions (void)
gl_texture_etc2 = GL_CompressedTexImage2D && (gl_version_major > 4 || (gl_version_major == 4 && gl_version_minor >= 3) || GL_ParseExtensionList(gl_extensions, "GL_ARB_ES3_compatibility"));
gl_texture_astc = GL_CompressedTexImage2D && ( GL_ParseExtensionList(gl_extensions, "GL_ARB_ES3_2_compatibility") || GL_ParseExtensionList(gl_extensions, "GL_KHR_texture_compression_astc_ldr"));
gl_texture_e5bgr9 = gl_version_major >= 3;
-
+
// GLSL
//
if (COM_CheckParm("-noglsl"))
@@ -1268,10 +1268,14 @@ static void GL_CheckExtensions (void)
// glGenerateMipmap for warp textures
if (COM_CheckParm("-nowarpmipmaps"))
Con_Warning ("glGenerateMipmap disabled at command line\n");
- else if ((GL_GenerateMipmap = SDL_GL_GetProcAddress("glGenerateMipmap")) != NULL)
- Con_Printf ("FOUND: glGenerateMipmap\n");
else
- Con_Warning ("glGenerateMipmap not available, liquids won't have mipmaps\n");
+ {
+ GL_GenerateMipmap = (QS_PFNGENERATEMIPMAP) SDL_GL_GetProcAddress("glGenerateMipmap");
+ if (GL_GenerateMipmap != NULL)
+ Con_Printf ("FOUND: glGenerateMipmap\n");
+ else
+ Con_Warning ("glGenerateMipmap not available, liquids won't have mipmaps\n");
+ }
}
/*
@@ -1385,12 +1389,13 @@ void VID_Shutdown (void)
if (vid_initialized)
{
VID_Gamma_Shutdown (); //johnfitz
-
+#if defined(USE_SDL2)
+ SDL_GL_DeleteContext(gl_context);
+ gl_context = NULL;
+ SDL_DestroyWindow(draw_context);
+#endif
SDL_QuitSubSystem(SDL_INIT_VIDEO);
draw_context = NULL;
-#if defined(USE_SDL2)
- gl_context = NULL;
-#endif
PL_VID_Shutdown();
}
}
@@ -2409,4 +2414,5 @@ void VID_SetCursor(qcvm_t *vm, const char *cursorname, float hotspot[2], float c
VID_UpdateCursor();
if (oldcursor)
SDL_FreeCursor(oldcursor);
-}
\ No newline at end of file
+}
+
diff --git a/Quake/net_sys.h b/Quake/net_sys.h
index 8ea060fd..25a7083f 100644
--- a/Quake/net_sys.h
+++ b/Quake/net_sys.h
@@ -31,7 +31,8 @@
#if defined(PLATFORM_BSD) || defined(PLATFORM_OSX) || \
defined(PLATFORM_AMIGA) /* bsdsocket.library */ || \
- defined(__GNU__) /* GNU/Hurd */ || defined(__riscos__)
+ defined(__GNU__) /* GNU/Hurd */ || defined(__riscos__) || \
+ defined(PLATFORM_HAIKU) /* Haiku OS */
/* struct sockaddr has unsigned char sa_len as the first member in BSD
* variants and the family member is also an unsigned char instead of an
* unsigned short. This should matter only when PLATFORM_UNIX is defined,
@@ -47,7 +48,7 @@
#endif /* BSD, sockaddr */
/* unix includes and compatibility macros */
-#if defined(PLATFORM_UNIX) || defined(PLATFORM_RISCOS)
+#if defined(PLATFORM_UNIX) || defined(PLATFORM_RISCOS) || defined(PLATFORM_HAIKU)
#include
#include
diff --git a/Quake/pr_exec.c b/Quake/pr_exec.c
index b5565db9..fbee063c 100644
--- a/Quake/pr_exec.c
+++ b/Quake/pr_exec.c
@@ -653,4 +653,3 @@ void PR_ExecuteProgram (func_t fnum)
#undef OPA
#undef OPB
#undef OPC
-
diff --git a/Quake/snd_voip.c b/Quake/snd_voip.c
index 80da5606..7bdd5ce8 100644
--- a/Quake/snd_voip.c
+++ b/Quake/snd_voip.c
@@ -58,24 +58,22 @@ void Sys_CloseLibrary(dllhandle_t *lib);
#include "arch_def.h"
-#ifdef _WIN32
-#include
void Sys_CloseLibrary(dllhandle_t *lib)
{
- FreeLibrary((HMODULE)lib);
+ SDL_UnloadObject((void*)lib);
}
dllhandle_t *Sys_LoadLibrary(const char *name, dllfunction_t *funcs)
{
int i;
- HMODULE lib;
+ void *lib;
- lib = LoadLibrary(name);
+ lib = SDL_LoadObject(name);
if (!lib)
{
#ifdef _WIN64
- lib = LoadLibrary(va("%s_64", name));
+ lib = SDL_LoadObject(va("%s_64", name));
#elif defined(_WIN32)
- lib = LoadLibrary(va("%s_32", name));
+ lib = SDL_LoadObject(va("%s_32", name));
#endif
if (!lib)
return NULL;
@@ -85,7 +83,7 @@ dllhandle_t *Sys_LoadLibrary(const char *name, dllfunction_t *funcs)
{
for (i = 0; funcs[i].name; i++)
{
- *funcs[i].funcptr = GetProcAddress(lib, funcs[i].name);
+ *funcs[i].funcptr = SDL_LoadFunction(lib, funcs[i].name);
if (!*funcs[i].funcptr)
break;
}
@@ -99,50 +97,6 @@ dllhandle_t *Sys_LoadLibrary(const char *name, dllfunction_t *funcs)
return (dllhandle_t*)lib;
}
-#elif defined(PLATFORM_UNIX)
-//unixes should have a dlopen (this test includes osx)
-#include
-void Sys_CloseLibrary(dllhandle_t *lib)
-{
- dlclose((void*)lib);
-}
-dllhandle_t *Sys_LoadLibrary(const char *name, dllfunction_t *funcs)
-{
- int i;
- dllhandle_t *lib;
-
- lib = dlopen (name, RTLD_LAZY|RTLD_LOCAL);
- if (!lib)
- return NULL;
-
- if (funcs)
- {
- for (i = 0; funcs[i].name; i++)
- {
- *funcs[i].funcptr = dlsym(lib, funcs[i].name);
- if (!*funcs[i].funcptr)
- break;
- }
- if (funcs[i].name)
- {
- Con_SafePrintf("Symbol %s missing in module %s\n", funcs[i].name, name);
- Sys_CloseLibrary((dllhandle_t*)lib);
- lib = NULL;
- }
- }
-
- return (dllhandle_t*)lib;
-}
-#else
-void Sys_CloseLibrary(dllhandle_t *lib)
-{
-}
-dllhandle_t *Sys_LoadLibrary(const char *name, dllfunction_t *funcs)
-{
- Con_SafePrintf("Sys_LoadLibrary(%s) is not implemented on this platform\n", name);
- return NULL;
-}
-#endif
/*****************************************************************************************************************************/
diff --git a/Quake/snd_xmp.c b/Quake/snd_xmp.c
index d73149db..3e9fd9b4 100644
--- a/Quake/snd_xmp.c
+++ b/Quake/snd_xmp.c
@@ -26,7 +26,7 @@
#include "snd_codec.h"
#include "snd_codeci.h"
#include "snd_xmp.h"
-#if defined(_WIN32) && defined(XMP_NO_DLL)
+#if defined(_WIN32) && defined(LIBXMP_STATIC)
#define BUILDING_STATIC
#endif
#include
diff --git a/Quake/sys_sdl_unix.c b/Quake/sys_sdl_unix.c
index f73858d5..840f9b1e 100644
--- a/Quake/sys_sdl_unix.c
+++ b/Quake/sys_sdl_unix.c
@@ -27,7 +27,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include
#include
#include
-#ifdef PLATFORM_OSX
+#if defined(PLATFORM_OSX) || defined(PLATFORM_HAIKU)
#include /* dirname() and basename() */
#endif
#include
@@ -333,6 +333,21 @@ static void Sys_GetBasedir (char *argv0, char *dst, size_t dstsize)
{
char *tmp;
+ #ifdef PLATFORM_HAIKU
+ if (realpath(argv0, dst) == NULL)
+ {
+ perror("realpath");
+ if (getcwd(dst, dstsize - 1) == NULL)
+ _fail: Sys_Error ("Couldn't determine current directory");
+ }
+ else
+ {
+ /* strip off the binary name */
+ if (! (tmp = strdup (dst))) goto _fail;
+ q_strlcpy (dst, dirname(tmp), dstsize);
+ free (tmp);
+ }
+ #else
if (getcwd(dst, dstsize - 1) == NULL)
Sys_Error ("Couldn't determine current directory");
@@ -345,6 +360,7 @@ static void Sys_GetBasedir (char *argv0, char *dst, size_t dstsize)
if (tmp != dst && *tmp == '/')
*tmp = 0;
}
+ #endif
}
#endif
diff --git a/Quakespasm.html b/Quakespasm.html
index 4f306dbf..95c5ba71 100644
--- a/Quakespasm.html
+++ b/Quakespasm.html
@@ -8,7 +8,7 @@
QuakeSpasm
-Page last edited: March 2023.
+Page last edited: May 2023.
@@ -219,6 +219,12 @@ Alternatively, have a look at Makefile.darwin for more instructions on bu
Adjustments to joystick defaults, behaviour (patch by Chris Cowan). See the "Controller support / Cvars" section above.
Fix for a mouse grabbing issue on macOS.
Add missing support for -ip command line option on unix / macOS.
+ Bump the progs execution runaway loop limit to 16M.
+ Bump the MAXALIASFRAMES limit to 1024.
+ Increase chase cam target trace distance to allow for chasecam to function in large open maps (useful e.g. for the func_vehicle mod.)
+ Fix on-screen keyboard showing up suddenly on Steam Deck when starting a map.
+ Fix a memory leak when exiting game in SDL2 builds.
+ Fix console animation with scr_conspeed <= 0.
Minor code cleanups. Updated third party code, e.g. SDL, music codecs, etc.
Thanks to Andrei Drexler, Chris Cowan and Maciej Olędzki for their patches.
diff --git a/Quakespasm.txt b/Quakespasm.txt
index acae2a52..09bd6ebe 100644
--- a/Quakespasm.txt
+++ b/Quakespasm.txt
@@ -3,7 +3,7 @@
______________________________________________________________________
- Page last edited: March 2023.
+ Page last edited: May 2023.
1. About
@@ -230,6 +230,20 @@
- Add missing support for -ip command line option on unix / macOS.
+ - Bump the progs execution runaway loop limit to 16M.
+
+ - Bump the MAXALIASFRAMES limit to 1024.
+
+ - Increase chase cam target trace distance to allow for chasecam to
+ function in large open maps (useful e.g. for the func_vehicle mod.)
+
+ - Fix on-screen keyboard showing up suddenly on Steam Deck when
+ starting a map.
+
+ - Fix a memory leak when exiting game in SDL2 builds.
+
+ - Fix console animation with scr_conspeed <= 0.
+
- Minor code cleanups. Updated third party code, e.g. SDL, music
codecs, etc.
diff --git a/Windows/codecs/include/xmp.h b/Windows/codecs/include/xmp.h
index e3885783..935eb9ed 100644
--- a/Windows/codecs/include/xmp.h
+++ b/Windows/codecs/include/xmp.h
@@ -16,19 +16,33 @@ extern "C" {
#define XMP_VER_RELEASE 1
#if defined(_WIN32) && !defined(__CYGWIN__)
-# if defined(BUILDING_STATIC)
+# if defined(LIBXMP_STATIC)
# define LIBXMP_EXPORT
# elif defined(BUILDING_DLL)
# define LIBXMP_EXPORT __declspec(dllexport)
# else
# define LIBXMP_EXPORT __declspec(dllimport)
# endif
-#elif defined(__OS2__) && defined(__WATCOMC__) && defined(__SW_BD)
+#elif defined(__OS2__) && defined(__WATCOMC__)
+# if defined(LIBXMP_STATIC)
+# define LIBXMP_EXPORT
+# elif defined(BUILDING_DLL)
# define LIBXMP_EXPORT __declspec(dllexport)
+# else
+# define LIBXMP_EXPORT
+# endif
#elif (defined(__GNUC__) || defined(__clang__) || defined(__HP_cc)) && defined(XMP_SYM_VISIBILITY)
-# define LIBXMP_EXPORT __attribute__((visibility ("default")))
+# if defined(LIBXMP_STATIC)
+# define LIBXMP_EXPORT
+# else
+# define LIBXMP_EXPORT __attribute__((visibility("default")))
+# endif
#elif defined(__SUNPRO_C) && defined(XMP_LDSCOPE_GLOBAL)
-# define LIBXMP_EXPORT __global
+# if defined(LIBXMP_STATIC)
+# define LIBXMP_EXPORT
+# else
+# define LIBXMP_EXPORT __global
+# endif
#elif defined(EMSCRIPTEN)
# define LIBXMP_EXPORT EMSCRIPTEN_KEEPALIVE
# define LIBXMP_EXPORT_VAR
@@ -36,7 +50,7 @@ extern "C" {
# define LIBXMP_EXPORT
#endif
-#if !defined (LIBXMP_EXPORT_VAR)
+#if !defined(LIBXMP_EXPORT_VAR)
# define LIBXMP_EXPORT_VAR LIBXMP_EXPORT
#endif
@@ -241,6 +255,7 @@ struct xmp_sample {
#define XMP_SAMPLE_LOOP_FULL (1 << 4) /* Play full sample before looping */
#define XMP_SAMPLE_SLOOP (1 << 5) /* Sample has sustain loop */
#define XMP_SAMPLE_SLOOP_BIDIR (1 << 6) /* Bidirectional sustain loop */
+#define XMP_SAMPLE_STEREO (1 << 7) /* Interlaced stereo sample */
#define XMP_SAMPLE_SYNTH (1 << 15) /* Data contains synth patch */
int flg; /* Flags */
unsigned char *data; /* Sample data */
diff --git a/Windows/codecs/x64/libxmp.dll b/Windows/codecs/x64/libxmp.dll
index 588da83b..7a0a7e5e 100644
Binary files a/Windows/codecs/x64/libxmp.dll and b/Windows/codecs/x64/libxmp.dll differ
diff --git a/Windows/codecs/x86-watcom/libxmp.lib b/Windows/codecs/x86-watcom/libxmp.lib
index bf0c70a7..c1ba8d5b 100644
Binary files a/Windows/codecs/x86-watcom/libxmp.lib and b/Windows/codecs/x86-watcom/libxmp.lib differ
diff --git a/Windows/codecs/x86/libxmp.dll b/Windows/codecs/x86/libxmp.dll
index aa30bb2e..e6987eac 100644
Binary files a/Windows/codecs/x86/libxmp.dll and b/Windows/codecs/x86/libxmp.dll differ