Merge tag 'quakespasm-0.94.5' into qss

This commit is contained in:
Shpoike 2022-07-15 14:11:03 +01:00
commit 7a97911ff4
57 changed files with 442 additions and 314 deletions

View File

@ -45,6 +45,7 @@
<Add option="-lvorbis" /> <Add option="-lvorbis" />
<Add option="-logg" /> <Add option="-logg" />
<Add option="-lmad" /> <Add option="-lmad" />
<Add option="-lm" />
</Linker> </Linker>
<Unit filename="../../Quake/anorm_dots.h" /> <Unit filename="../../Quake/anorm_dots.h" />
<Unit filename="../../Quake/anorms.h" /> <Unit filename="../../Quake/anorms.h" />

View File

@ -44,6 +44,7 @@
<Add option="-lvorbis" /> <Add option="-lvorbis" />
<Add option="-logg" /> <Add option="-logg" />
<Add option="-lmad" /> <Add option="-lmad" />
<Add option="-lm" />
</Linker> </Linker>
<Unit filename="../../Quake/anorm_dots.h" /> <Unit filename="../../Quake/anorm_dots.h" />
<Unit filename="../../Quake/anorms.h" /> <Unit filename="../../Quake/anorms.h" />

View File

@ -3,7 +3,7 @@
<title>QuakeSpasm <title>QuakeSpasm
<toc> <toc>
<em>Page last edited: April 2022.</em> <em>Page last edited: June 2022.</em>
<sect> About <p> <sect> About <p>
@ -140,6 +140,17 @@ QuakeSpasm 0.94.0 has initial support for playing the 2021 re-release content: C
<sect> Changes<p> <sect> Changes<p>
<sect1> Changes in 0.94.5<p>
<itemize>
<item> Compatibility with new SDL2 versioning scheme.
<item> Revised min/max/clamp macros' usage.
<item> Fixed a potential undefined behavior in R_DrawAliasModel.
<item> Fixed parsing of the time argument of svc_fog server message. (it has been broken for more than 20 years and has never seem to have been used.)
<item> Other small improvements elsewhere in the code.
<item> Backported a few fixes to the bundled SDL2-2.0.22 version.
</itemize>
</p>
<sect1> Changes in 0.94.4<p> <sect1> Changes in 0.94.4<p>
<itemize> <itemize>
<item> Fixed getting stuck with loading plaque upon attempting to load a bad save from the menu <item> Fixed getting stuck with loading plaque upon attempting to load a bad save from the menu

View File

@ -17,7 +17,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>0.94.4</string> <string>0.94.5</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>LSApplicationCategoryType</key> <key>LSApplicationCategoryType</key>

View File

@ -22,7 +22,7 @@
#ifndef SDL_assert_h_ #ifndef SDL_assert_h_
#define SDL_assert_h_ #define SDL_assert_h_
#include "SDL_config.h" #include "SDL_stdinc.h"
#include "begin_code.h" #include "begin_code.h"
/* Set up for C function definitions, even when using C++ */ /* Set up for C function definitions, even when using C++ */
@ -51,6 +51,8 @@ assert can have unique static variables associated with it.
/* Don't include intrin.h here because it contains C++ code */ /* Don't include intrin.h here because it contains C++ code */
extern void __cdecl __debugbreak(void); extern void __cdecl __debugbreak(void);
#define SDL_TriggerBreakpoint() __debugbreak() #define SDL_TriggerBreakpoint() __debugbreak()
#elif _SDL_HAS_BUILTIN(__builtin_debugtrap)
#define SDL_TriggerBreakpoint() __builtin_debugtrap()
#elif ( (!defined(__NACL__)) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))) ) #elif ( (!defined(__NACL__)) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))) )
#define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" )
#elif ( defined(__APPLE__) && (defined(__arm64__) || defined(__aarch64__)) ) /* this might work on other ARM targets, but this is a known quantity... */ #elif ( defined(__APPLE__) && (defined(__arm64__) || defined(__aarch64__)) ) /* this might work on other ARM targets, but this is a known quantity... */

View File

@ -272,7 +272,6 @@
#define SDL_FILESYSTEM_COCOA 1 #define SDL_FILESYSTEM_COCOA 1
/* Enable assembly routines */ /* Enable assembly routines */
#define SDL_ASSEMBLY_ROUTINES 1
#ifdef __ppc__ #ifdef __ppc__
#define SDL_ALTIVEC_BLITTERS 1 #define SDL_ALTIVEC_BLITTERS 1
#endif #endif

View File

@ -87,6 +87,28 @@ _m_prefetch(void *__P)
#endif /* __linux__ */ #endif /* __linux__ */
#endif /* !SDL_BYTEORDER */ #endif /* !SDL_BYTEORDER */
#ifndef SDL_FLOATWORDORDER /* Not defined in SDL_config.h? */
/* predefs from newer gcc versions: */
#if defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__FLOAT_WORD_ORDER__)
#if (__FLOAT_WORD_ORDER__ == __ORDER_LITTLE_ENDIAN__)
#define SDL_FLOATWORDORDER SDL_LIL_ENDIAN
#elif (__FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__)
#define SDL_FLOATWORDORDER SDL_BIG_ENDIAN
#else
#error Unsupported endianness
#endif /**/
#elif defined(__MAVERICK__)
/* For Maverick, float words are always little-endian. */
#define SDL_FLOATWORDORDER SDL_LIL_ENDIAN
#elif (defined(__arm__) || defined(__thumb__)) && !defined(__VFP_FP__) && !defined(__ARM_EABI__)
/* For FPA, float words are always big-endian. */
#define SDL_FLOATWORDORDER SDL_BIG_ENDIAN
#else
/* By default, assume that floats words follow the memory system mode. */
#define SDL_FLOATWORDORDER SDL_BYTEORDER
#endif /* __FLOAT_WORD_ORDER__ */
#endif /* !SDL_FLOATWORDORDER */
#include "begin_code.h" #include "begin_code.h"
/* Set up for C function definitions, even when using C++ */ /* Set up for C function definitions, even when using C++ */

View File

@ -252,10 +252,10 @@ SDL_FORCE_INLINE SDL_bool SDL_FRectEmpty(const SDL_FRect *r)
SDL_FORCE_INLINE SDL_bool SDL_FRectEqualsEpsilon(const SDL_FRect *a, const SDL_FRect *b, const float epsilon) SDL_FORCE_INLINE SDL_bool SDL_FRectEqualsEpsilon(const SDL_FRect *a, const SDL_FRect *b, const float epsilon)
{ {
return (a && b && ((a == b) || return (a && b && ((a == b) ||
((SDL_fabs(a->x - b->x) <= epsilon) && ((SDL_fabsf(a->x - b->x) <= epsilon) &&
(SDL_fabs(a->y - b->y) <= epsilon) && (SDL_fabsf(a->y - b->y) <= epsilon) &&
(SDL_fabs(a->w - b->w) <= epsilon) && (SDL_fabsf(a->w - b->w) <= epsilon) &&
(SDL_fabs(a->h - b->h) <= epsilon)))) (SDL_fabsf(a->h - b->h) <= epsilon))))
? SDL_TRUE : SDL_FALSE; ? SDL_TRUE : SDL_FALSE;
} }

View File

@ -1,2 +1,2 @@
#define SDL_REVISION "https://github.com/libsdl-org/SDL.git@981e1e3c4489add5bf6d4df5415af3cf1ef2773d" #define SDL_REVISION "@1594e60f8c154d3c8cea175fe88694e5aaf5e7bc"
#define SDL_REVISION_NUMBER 0 #define SDL_REVISION_NUMBER 0

View File

@ -462,7 +462,7 @@ extern DECLSPEC int SDLCALL SDL_GetNumAllocations(void);
extern DECLSPEC char *SDLCALL SDL_getenv(const char *name); extern DECLSPEC char *SDLCALL SDL_getenv(const char *name);
extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite); extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite);
extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (*compare) (const void *, const void *)); extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (SDLCALL *compare) (const void *, const void *));
extern DECLSPEC int SDLCALL SDL_abs(int x); extern DECLSPEC int SDLCALL SDL_abs(int x);

View File

@ -195,7 +195,7 @@ extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID,
* *
* \sa SDL_iPhoneSetEventPump * \sa SDL_iPhoneSetEventPump
*/ */
extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam); extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (SDLCALL *callback)(void*), void *callbackParam);
#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled) #define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled)

View File

@ -129,7 +129,7 @@ SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data,
pfnSDL_CurrentEndThread pfnEndThread); pfnSDL_CurrentEndThread pfnEndThread);
extern DECLSPEC SDL_Thread *SDLCALL extern DECLSPEC SDL_Thread *SDLCALL
SDL_CreateThreadWithStackSize(int (SDLCALL * fn) (void *), SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn,
const char *name, const size_t stacksize, void *data, const char *name, const size_t stacksize, void *data,
pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentBeginThread pfnBeginThread,
pfnSDL_CurrentEndThread pfnEndThread); pfnSDL_CurrentEndThread pfnEndThread);

View File

@ -56,6 +56,7 @@ CPUFLAGS=
LDFLAGS = LDFLAGS =
DFLAGS ?= DFLAGS ?=
CFLAGS ?= -Wall -Wno-trigraphs CFLAGS ?= -Wall -Wno-trigraphs
CFLAGS += $(call check_gcc,-std=gnu11,)
CFLAGS += $(CPUFLAGS) CFLAGS += $(CPUFLAGS)
ifneq ($(DEBUG),0) ifneq ($(DEBUG),0)
DFLAGS += -DDEBUG DFLAGS += -DDEBUG
@ -64,6 +65,7 @@ do_strip=
else else
DFLAGS += -DNDEBUG DFLAGS += -DNDEBUG
CFLAGS += -O2 CFLAGS += -O2
# -fno-asynchronous-unwind-tables
CFLAGS += $(call check_gcc,-fweb,) CFLAGS += $(call check_gcc,-fweb,)
CFLAGS += $(call check_gcc,-frename-registers,) CFLAGS += $(call check_gcc,-frename-registers,)
cmd_strip=$(STRIP) $(1) cmd_strip=$(STRIP) $(1)

View File

@ -85,11 +85,11 @@ CFLAGS +=-mmacosx-version-min=11.0
LDFLAGS +=-mmacosx-version-min=11.0 LDFLAGS +=-mmacosx-version-min=11.0
USE_RPATH=1 USE_RPATH=1
endif endif
CFLAGS += $(call check_gcc,-std=gnu11,)
CFLAGS += $(CPUFLAGS) CFLAGS += $(CPUFLAGS)
ifeq ($(USE_RPATH),1) ifeq ($(USE_RPATH),1)
LDFLAGS+=-Wl,-rpath,@executable_path/../Frameworks LDFLAGS+=-Wl,-rpath,@executable_path/../Frameworks
endif endif
ifneq ($(DEBUG),0) ifneq ($(DEBUG),0)
DFLAGS += -DDEBUG DFLAGS += -DDEBUG
CFLAGS += -g CFLAGS += -g
@ -97,6 +97,7 @@ do_strip=
else else
DFLAGS += -DNDEBUG DFLAGS += -DNDEBUG
CFLAGS += -O2 CFLAGS += -O2
# -fno-asynchronous-unwind-tables
CFLAGS += $(call check_gcc,-fweb,) CFLAGS += $(call check_gcc,-fweb,)
CFLAGS += $(call check_gcc,-frename-registers,) CFLAGS += $(call check_gcc,-frename-registers,)
cmd_strip=$(STRIP) $(1) cmd_strip=$(STRIP) $(1)
@ -348,4 +349,3 @@ debug:
clean: clean:
rm -f $(shell find . \( -name '*~' -o -name '#*#' -o -name '*.o' -o -name '*.res' -o -name $(DEFAULT_TARGET) \) -print) rm -f $(shell find . \( -name '*~' -o -name '#*#' -o -name '*.o' -o -name '*.res' -o -name $(DEFAULT_TARGET) \) -print)

View File

@ -54,9 +54,9 @@ LDFLAGS += $(QSS_LDFLAGS)
LDFLAGS += -Wl,--no-insert-timestamp #prevent non-determinism in the exe header. mustn't be used for dlls. LDFLAGS += -Wl,--no-insert-timestamp #prevent non-determinism in the exe header. mustn't be used for dlls.
DFLAGS ?= DFLAGS ?=
CFLAGS ?= -m32 -Wall -Wno-trigraphs CFLAGS ?= -m32 -Wall -Wno-trigraphs
CFLAGS += $(call check_gcc,-std=gnu11,)
CFLAGS += $(CPUFLAGS) CFLAGS += $(CPUFLAGS)
CFLAGS += $(QSS_CFLAGS) CFLAGS += $(QSS_CFLAGS)
ifneq ($(DEBUG),0) ifneq ($(DEBUG),0)
DFLAGS += -DDEBUG DFLAGS += -DDEBUG
CFLAGS += -g CFLAGS += -g
@ -64,6 +64,7 @@ do_strip=
else else
DFLAGS += -DNDEBUG DFLAGS += -DNDEBUG
CFLAGS += -O2 CFLAGS += -O2
# -fno-asynchronous-unwind-tables
CFLAGS += $(call check_gcc,-fweb,) CFLAGS += $(call check_gcc,-fweb,)
CFLAGS += $(call check_gcc,-frename-registers,) CFLAGS += $(call check_gcc,-frename-registers,)
cmd_strip=$(STRIP) $(1) cmd_strip=$(STRIP) $(1)
@ -308,4 +309,3 @@ debug:
clean: clean:
rm -f $(shell find . \( -name '*~' -o -name '#*#' -o -name '*.o' -o -name '*.res' -o -name $(DEFAULT_TARGET) \) -print) rm -f $(shell find . \( -name '*~' -o -name '#*#' -o -name '*.o' -o -name '*.res' -o -name $(DEFAULT_TARGET) \) -print)

View File

@ -51,9 +51,9 @@ LDFLAGS += $(QSS_LDFLAGS)
LDFLAGS += -Wl,--no-insert-timestamp #prevent non-determinism in the exe header. mustn't be used for dlls. LDFLAGS += -Wl,--no-insert-timestamp #prevent non-determinism in the exe header. mustn't be used for dlls.
DFLAGS ?= DFLAGS ?=
CFLAGS ?= -m64 -Wall -Wno-trigraphs CFLAGS ?= -m64 -Wall -Wno-trigraphs
CFLAGS += $(call check_gcc,-std=gnu11,)
CFLAGS += $(CPUFLAGS) CFLAGS += $(CPUFLAGS)
CFLAGS += $(QSS_CFLAGS) CFLAGS += $(QSS_CFLAGS)
ifneq ($(DEBUG),0) ifneq ($(DEBUG),0)
DFLAGS += -DDEBUG DFLAGS += -DDEBUG
CFLAGS += -g CFLAGS += -g
@ -61,6 +61,7 @@ do_strip=
else else
DFLAGS += -DNDEBUG DFLAGS += -DNDEBUG
CFLAGS += -O2 CFLAGS += -O2
# -fno-asynchronous-unwind-tables
CFLAGS += $(call check_gcc,-fweb,) CFLAGS += $(call check_gcc,-fweb,)
CFLAGS += $(call check_gcc,-frename-registers,) CFLAGS += $(call check_gcc,-frename-registers,)
cmd_strip=$(STRIP) $(1) cmd_strip=$(STRIP) $(1)
@ -300,4 +301,3 @@ debug:
clean: clean:
rm -f $(shell find . \( -name '*~' -o -name '#*#' -o -name '*.o' -o -name '*.res' -o -name $(DEFAULT_TARGET) \) -print) rm -f $(shell find . \( -name '*~' -o -name '#*#' -o -name '*.o' -o -name '*.res' -o -name $(DEFAULT_TARGET) \) -print)

View File

@ -41,11 +41,76 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#undef min #undef min
#undef max #undef max
#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \
(defined(__cplusplus) && (__cplusplus >= 201103L))
#define GENERIC_TYPES(x, separator) \
x(int, i) separator \
x(unsigned int, u) separator \
x(long, l) separator \
x(unsigned long, ul) separator \
x(long long, ll) separator \
x(unsigned long long, ull) separator \
x(float, f) separator \
x(double, d)
#define COMMA ,
#define NO_COMMA
#define IMPL_GENERIC_FUNCS(type, suffix) \
static inline type q_min_##suffix (type a, type b) { \
return (a < b) ? a : b; \
} \
static inline type q_max_##suffix (type a, type b) { \
return (a > b) ? a : b; \
} \
static inline type clamp_##suffix (type minval, type val, type maxval) { \
return (val < minval) ? minval : ((val > maxval) ? maxval : val); \
}
GENERIC_TYPES (IMPL_GENERIC_FUNCS, NO_COMMA)
#define SELECT_Q_MIN(type, suffix) type: q_min_##suffix
#define q_min(a, b) _Generic((a) + (b), GENERIC_TYPES (SELECT_Q_MIN, COMMA))(a, b)
#define SELECT_Q_MAX(type, suffix) type: q_max_##suffix
#define q_max(a, b) _Generic((a) + (b), GENERIC_TYPES (SELECT_Q_MAX, COMMA))(a, b)
#define SELECT_CLAMP(type, suffix) type: clamp_##suffix
#define CLAMP(minval, val, maxval) _Generic((minval) + (val) + (maxval), \
GENERIC_TYPES (SELECT_CLAMP, COMMA))(minval, val, maxval)
#elif defined(__GNUC__)
/* min and max macros with type checking -- based on tyrquake. */
#define q_max(a,b) ({ \
const __typeof(a) a_ = (a); \
const __typeof(b) b_ = (b); \
(void)(&a_ == &b_); \
(a_ > b_) ? a_ : b_; \
})
#define q_min(a,b) ({ \
const __typeof(a) a_ = (a); \
const __typeof(b) b_ = (b); \
(void)(&a_ == &b_); \
(a_ < b_) ? a_ : b_; \
})
#define CLAMP(_minval, x, _maxval) ({ \
const __typeof(x) x_ = (x); \
const __typeof(_minval) valmin_ = (_minval);\
const __typeof(_maxval) valmax_ = (_maxval);\
(void)(&x_ == &valmin_); \
(void)(&x_ == &valmax_); \
(x_ < valmin_) ? valmin_ : \
(x_ > valmax_) ? valmax_ : x_; \
})
#else
#define q_min(a, b) (((a) < (b)) ? (a) : (b)) #define q_min(a, b) (((a) < (b)) ? (a) : (b))
#define q_max(a, b) (((a) > (b)) ? (a) : (b)) #define q_max(a, b) (((a) > (b)) ? (a) : (b))
#define CLAMP(_minval, x, _maxval) \ #define CLAMP(_minval, x, _maxval) \
((x) < (_minval) ? (_minval) : \ ((x) < (_minval) ? (_minval) : \
(x) > (_maxval) ? (_maxval) : (x)) (x) > (_maxval) ? (_maxval) : (x))
#endif
#define countof(x) (sizeof(x)/sizeof((x)[0])) #define countof(x) (sizeof(x)/sizeof((x)[0]))

View File

@ -309,8 +309,11 @@ void Con_Init (void)
//johnfitz -- user settable console buffer size //johnfitz -- user settable console buffer size
i = COM_CheckParm("-consize"); i = COM_CheckParm("-consize");
if (i && i < com_argc-1) if (i && i < com_argc-1) {
con_buffersize = q_max(CON_MINSIZE,Q_atoi(com_argv[i+1])*1024); con_buffersize = Q_atoi(com_argv[i+1])*1024;
if (con_buffersize < CON_MINSIZE)
con_buffersize = CON_MINSIZE;
}
else else
con_buffersize = CON_TEXTSIZE; con_buffersize = CON_TEXTSIZE;
//johnfitz //johnfitz

View File

@ -736,13 +736,13 @@ void Draw_ConsoleBackground (void)
pic->width = vid.conwidth; pic->width = vid.conwidth;
pic->height = vid.conheight; pic->height = vid.conheight;
alpha = (con_forcedup) ? 1.0 : scr_conalpha.value; alpha = (con_forcedup) ? 1.0f : scr_conalpha.value;
GL_SetCanvas (CANVAS_CONSOLE); //in case this is called from weird places GL_SetCanvas (CANVAS_CONSOLE); //in case this is called from weird places
if (alpha > 0.0) if (alpha > 0.0f)
{ {
if (alpha < 1.0) if (alpha < 1.0f)
{ {
if (premul_hud) if (premul_hud)
glColor4f (alpha,alpha,alpha,alpha); glColor4f (alpha,alpha,alpha,alpha);
@ -758,7 +758,7 @@ void Draw_ConsoleBackground (void)
Draw_Pic (0, 0, pic); Draw_Pic (0, 0, pic);
if (alpha < 1.0) if (alpha < 1.0f)
{ {
if (!premul_hud) if (!premul_hud)
{ {
@ -914,8 +914,8 @@ void GL_SetCanvas (canvastype newcanvas)
glViewport (glx, gly, glwidth, glheight); glViewport (glx, gly, glwidth, glheight);
break; break;
case CANVAS_MENU: case CANVAS_MENU:
s = q_min((float)glwidth / 320.0, (float)glheight / 200.0); s = q_min((float)glwidth / 320.0f, (float)glheight / 200.0f);
s = CLAMP (1.0, scr_menuscale.value, s); s = CLAMP (1.0f, scr_menuscale.value, s);
// ericw -- doubled width to 640 to accommodate long keybindings // ericw -- doubled width to 640 to accommodate long keybindings
glOrtho (0, 640, 200, 0, -99999, 99999); glOrtho (0, 640, 200, 0, -99999, 99999);
glViewport (glx + (glwidth - 320*s) / 2, gly + (glheight - 200*s) / 2, 640*s, 200*s); glViewport (glx + (glwidth - 320*s) / 2, gly + (glheight - 200*s) / 2, 640*s, 200*s);
@ -932,7 +932,7 @@ void GL_SetCanvas (canvastype newcanvas)
glViewport (glx, gly, glwidth, glheight); glViewport (glx, gly, glwidth, glheight);
break; break;
case CANVAS_SBAR: case CANVAS_SBAR:
s = CLAMP (1.0, scr_sbarscale.value, (float)glwidth / 320.0); s = CLAMP (1.0f, scr_sbarscale.value, (float)glwidth / 320.0f);
if (cl.gametype == GAME_DEATHMATCH) if (cl.gametype == GAME_DEATHMATCH)
{ {
glOrtho (0, glwidth / s, 48, 0, -99999, 99999); glOrtho (0, glwidth / s, 48, 0, -99999, 99999);
@ -945,7 +945,7 @@ void GL_SetCanvas (canvastype newcanvas)
} }
break; break;
case CANVAS_CROSSHAIR: //0,0 is center of viewport case CANVAS_CROSSHAIR: //0,0 is center of viewport
s = CLAMP (1.0, scr_crosshairscale.value, 10.0); s = CLAMP (1.0f, scr_crosshairscale.value, 10.0f);
glOrtho (scr_vrect.width/-2/s, scr_vrect.width/2/s, scr_vrect.height/2/s, scr_vrect.height/-2/s, -99999, 99999); glOrtho (scr_vrect.width/-2/s, scr_vrect.width/2/s, scr_vrect.height/2/s, scr_vrect.height/-2/s, -99999, 99999);
glViewport (scr_vrect.x, glheight - scr_vrect.y - scr_vrect.height, scr_vrect.width & ~1, scr_vrect.height & ~1); glViewport (scr_vrect.x, glheight - scr_vrect.y - scr_vrect.height, scr_vrect.width & ~1, scr_vrect.height & ~1);
break; break;

View File

@ -100,7 +100,8 @@ void Fog_ParseServerMessage (void)
red = MSG_ReadByte() / 255.0; red = MSG_ReadByte() / 255.0;
green = MSG_ReadByte() / 255.0; green = MSG_ReadByte() / 255.0;
blue = MSG_ReadByte() / 255.0; blue = MSG_ReadByte() / 255.0;
time = q_max(0.0, MSG_ReadShort() / 100.0); time = MSG_ReadShort() / 100.0;
if (time < 0.0f) time = 0.0f;
Fog_Update (density, red, green, blue, time); Fog_Update (density, red, green, blue, time);
} }
@ -114,6 +115,8 @@ handle the 'fog' console command
*/ */
void Fog_FogCommand_f (void) void Fog_FogCommand_f (void)
{ {
float d, r, g, b, t;
switch (Cmd_Argc()) switch (Cmd_Argc())
{ {
default: default:
@ -127,43 +130,52 @@ void Fog_FogCommand_f (void)
Con_Printf(" \"red\" is \"%f\"\n", fog_red); Con_Printf(" \"red\" is \"%f\"\n", fog_red);
Con_Printf(" \"green\" is \"%f\"\n", fog_green); Con_Printf(" \"green\" is \"%f\"\n", fog_green);
Con_Printf(" \"blue\" is \"%f\"\n", fog_blue); Con_Printf(" \"blue\" is \"%f\"\n", fog_blue);
break; return;
case 2: case 2:
Fog_Update(q_max(0.0, atof(Cmd_Argv(1))), d = Q_atof(Cmd_Argv(1));
fog_red, t = 0.0f;
fog_green, r = fog_red;
fog_blue, g = fog_green;
0.0); b = fog_blue;
break; break;
case 3: //TEST case 3: //TEST
Fog_Update(q_max(0.0, atof(Cmd_Argv(1))), d = Q_atof(Cmd_Argv(1));
fog_red, t = Q_atof(Cmd_Argv(2));
fog_green, r = fog_red;
fog_blue, g = fog_green;
atof(Cmd_Argv(2))); b = fog_blue;
break; break;
case 4: case 4:
Fog_Update(fog_density, d = fog_density;
CLAMP(0.0, atof(Cmd_Argv(1)), 1.0), t = 0.0f;
CLAMP(0.0, atof(Cmd_Argv(2)), 1.0), r = Q_atof(Cmd_Argv(1));
CLAMP(0.0, atof(Cmd_Argv(3)), 1.0), g = Q_atof(Cmd_Argv(2));
0.0); b = Q_atof(Cmd_Argv(3));
break; break;
case 5: case 5:
Fog_Update(q_max(0.0, atof(Cmd_Argv(1))), d = Q_atof(Cmd_Argv(1));
CLAMP(0.0, atof(Cmd_Argv(2)), 1.0), r = Q_atof(Cmd_Argv(2));
CLAMP(0.0, atof(Cmd_Argv(3)), 1.0), g = Q_atof(Cmd_Argv(3));
CLAMP(0.0, atof(Cmd_Argv(4)), 1.0), b = Q_atof(Cmd_Argv(4));
0.0); t = 0.0f;
break; break;
case 6: //TEST case 6: //TEST
Fog_Update(q_max(0.0, atof(Cmd_Argv(1))), d = Q_atof(Cmd_Argv(1));
CLAMP(0.0, atof(Cmd_Argv(2)), 1.0), r = Q_atof(Cmd_Argv(2));
CLAMP(0.0, atof(Cmd_Argv(3)), 1.0), g = Q_atof(Cmd_Argv(3));
CLAMP(0.0, atof(Cmd_Argv(4)), 1.0), b = Q_atof(Cmd_Argv(4));
atof(Cmd_Argv(5))); t = Q_atof(Cmd_Argv(5));
break; break;
} }
if (d < 0.0f) d = 0.0f;
if (r < 0.0f) r = 0.0f;
else if (r > 1.0f) r = 1.0f;
if (g < 0.0f) g = 0.0f;
else if (g > 1.0f) g = 1.0f;
if (b < 0.0f) b = 0.0f;
else if (b > 1.0f) b = 1.0f;
Fog_Update(d, r, g, b, t);
} }
/* /*
@ -251,9 +263,14 @@ float *Fog_GetColor (void)
c[3] = 1.0; c[3] = 1.0;
} }
for (i = 0; i < 3; i++) {
c[i] = CLAMP (0.f, c[i], 1.f);
}
//find closest 24-bit RGB value, so solid-colored sky can match the fog perfectly //find closest 24-bit RGB value, so solid-colored sky can match the fog perfectly
for (i=0;i<3;i++) for (i = 0; i < 3; i++) {
c[i] = (float)(Q_rint(c[i] * 255)) / 255.0f; c[i] = (float)(Q_rint(c[i] * 255)) / 255.0f;
}
return c; return c;
} }

View File

@ -678,7 +678,7 @@ static texture_t *Mod_LoadMipTex(miptex_t *mt, byte *lumpend, enum srcformat *fm
if ((srcdata + *pixelbytes) > lumpend) if ((srcdata + *pixelbytes) > lumpend)
{ {
Con_DPrintf("Texture %s extends past end of lump\n", mt->name); Con_DPrintf("Texture %s extends past end of lump\n", mt->name);
*pixelbytes = q_max(0, lumpend - srcdata); *pixelbytes = q_max((ptrdiff_t)0, lumpend - srcdata);
} }
memcpy ( tx+1, srcdata, *pixelbytes); memcpy ( tx+1, srcdata, *pixelbytes);

View File

@ -240,7 +240,7 @@ void GLSLGamma_GammaCorrect (void)
// draw the texture back to the framebuffer with a fragment shader // draw the texture back to the framebuffer with a fragment shader
GL_UseProgramFunc (r_gamma_program); GL_UseProgramFunc (r_gamma_program);
GL_Uniform1fFunc (gammaLoc, vid_gamma.value); GL_Uniform1fFunc (gammaLoc, vid_gamma.value);
GL_Uniform1fFunc (contrastLoc, q_min(2.0, q_max(1.0, vid_contrast.value))); GL_Uniform1fFunc (contrastLoc, q_min(2.0f, q_max(1.0f, vid_contrast.value)));
GL_Uniform1iFunc (textureLoc, 0); // use texture unit 0 GL_Uniform1iFunc (textureLoc, 0); // use texture unit 0
glDisable (GL_ALPHA_TEST); glDisable (GL_ALPHA_TEST);
@ -731,7 +731,7 @@ R_EmitWirePoint -- johnfitz -- draws a wireframe cross shape for point entities
*/ */
void R_EmitWirePoint (vec3_t origin) void R_EmitWirePoint (vec3_t origin)
{ {
int size=8; const int size = 8;
glBegin (GL_LINES); glBegin (GL_LINES);
glVertex3f (origin[0]-size, origin[1], origin[2]); glVertex3f (origin[0]-size, origin[1], origin[2]);

View File

@ -392,7 +392,7 @@ static void SCR_CalcRefdef (void)
//johnfitz -- rewrote this section //johnfitz -- rewrote this section
size = scr_viewsize.value; size = scr_viewsize.value;
scale = CLAMP (1.0, scr_sbarscale.value, (float)glwidth / 320.0); scale = CLAMP (1.0f, scr_sbarscale.value, (float)glwidth / 320.0f);
if (size >= 120 || cl.intermission || (scr_sbaralpha.value < 1 || cl.qcvm.extfuncs.CSQC_DrawHud || cl.qcvm.extfuncs.CSQC_UpdateView)) //johnfitz -- scr_sbaralpha.value. Spike -- simple csqc assumes fullscreen video the same way. if (size >= 120 || cl.intermission || (scr_sbaralpha.value < 1 || cl.qcvm.extfuncs.CSQC_DrawHud || cl.qcvm.extfuncs.CSQC_UpdateView)) //johnfitz -- scr_sbaralpha.value. Spike -- simple csqc assumes fullscreen video the same way.
sb_lines = 0; sb_lines = 0;
@ -401,12 +401,12 @@ static void SCR_CalcRefdef (void)
else else
sb_lines = 48 * scale; sb_lines = 48 * scale;
size = q_min(scr_viewsize.value, 100) / 100; size = q_min(scr_viewsize.value, 100.f) / 100;
//johnfitz //johnfitz
//johnfitz -- rewrote this section //johnfitz -- rewrote this section
r_refdef.vrect.width = q_max(glwidth * size, 96); //no smaller than 96, for icons r_refdef.vrect.width = q_max(glwidth * size, 96.0f); //no smaller than 96, for icons
r_refdef.vrect.height = q_min(glheight * size, glheight - sb_lines); //make room for sbar r_refdef.vrect.height = q_min((int)(glheight * size), glheight - sb_lines); //make room for sbar
r_refdef.vrect.x = (glwidth - r_refdef.vrect.width)/2; r_refdef.vrect.x = (glwidth - r_refdef.vrect.width)/2;
r_refdef.vrect.y = (glheight - sb_lines - r_refdef.vrect.height)/2; r_refdef.vrect.y = (glheight - sb_lines - r_refdef.vrect.height)/2;
//johnfitz //johnfitz

View File

@ -881,7 +881,7 @@ void Sky_DrawSkyBox (void)
c = Fog_GetColor(); c = Fog_GetColor();
glEnable (GL_BLEND); glEnable (GL_BLEND);
glDisable (GL_TEXTURE_2D); glDisable (GL_TEXTURE_2D);
glColor4f (c[0],c[1],c[2], CLAMP(0.0,skyfog,1.0)); glColor4f (c[0],c[1],c[2], CLAMP(0.0f,skyfog,1.0f));
glBegin (GL_QUADS); glBegin (GL_QUADS);
Sky_EmitSkyBoxVertex (skymins[0][i], skymins[1][i], i); Sky_EmitSkyBoxVertex (skymins[0][i], skymins[1][i], i);
@ -1032,7 +1032,7 @@ void Sky_DrawFaceQuad (glpoly_t *p)
c = Fog_GetColor(); c = Fog_GetColor();
glEnable (GL_BLEND); glEnable (GL_BLEND);
glDisable (GL_TEXTURE_2D); glDisable (GL_TEXTURE_2D);
glColor4f (c[0],c[1],c[2], CLAMP(0.0,skyfog,1.0)); glColor4f (c[0],c[1],c[2], CLAMP(0.0f,skyfog,1.0f));
glBegin (GL_QUADS); glBegin (GL_QUADS);
for (i=0, v=p->verts[0] ; i<4 ; i++, v+=VERTEXSIZE) for (i=0, v=p->verts[0] ; i<4 ; i++, v+=VERTEXSIZE)

View File

@ -734,11 +734,15 @@ TexMgr_SafeTextureSize -- return a size with hardware and user prefs in mind
*/ */
int TexMgr_SafeTextureSize (int s) int TexMgr_SafeTextureSize (int s)
{ {
int p = (int)gl_max_size.value;
if (!gl_texture_NPOT) if (!gl_texture_NPOT)
s = TexMgr_Pad(s); s = TexMgr_Pad(s);
if ((int)gl_max_size.value > 0) if (p > 0) {
s = q_min(TexMgr_Pad((int)gl_max_size.value), s); p = TexMgr_Pad(p);
s = q_min(gl_hardware_maxsize, s); if (p < s) s = p;
}
if (s > gl_hardware_maxsize)
s = gl_hardware_maxsize;
return s; return s;
} }

View File

@ -646,7 +646,7 @@ qboolean Host_FilterTime (float time)
realtime += time; realtime += time;
//johnfitz -- max fps cvar //johnfitz -- max fps cvar
maxfps = CLAMP (10.0, host_maxfps.value, 1000.0); maxfps = CLAMP (10.f, host_maxfps.value, 1000.0);
if (host_maxfps.value && !cls.timedemo && realtime - oldrealtime < 1.0/maxfps) if (host_maxfps.value && !cls.timedemo && realtime - oldrealtime < 1.0/maxfps)
return false; // framerate is too high return false; // framerate is too high
//johnfitz //johnfitz

View File

@ -1081,7 +1081,9 @@ static void Host_SavegameComment (char *text)
if (p1 != NULL) *p1 = 0; if (p1 != NULL) *p1 = 0;
if (p2 != NULL) *p2 = 0; if (p2 != NULL) *p2 = 0;
memcpy (text, cl.levelname, q_min(strlen(cl.levelname),22)); //johnfitz -- only copy 22 chars. i = (int) strlen(cl.levelname);
if (i > 22) i = 22;
memcpy (text, cl.levelname, (size_t)i);
sprintf (kills,"kills:%3i/%3i", cl.stats[STAT_MONSTERS], cl.stats[STAT_TOTALMONSTERS]); sprintf (kills,"kills:%3i/%3i", cl.stats[STAT_MONSTERS], cl.stats[STAT_TOTALMONSTERS]);
memcpy (text+22, kills, strlen(kills)); memcpy (text+22, kills, strlen(kills));
// convert space to _ to make stdio happy // convert space to _ to make stdio happy

View File

@ -33,27 +33,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#endif #endif
#include <stdio.h> #include <stdio.h>
#if defined(USE_SDL2)
/* need at least SDL_2.0.0 */
#define SDL_MIN_X 2
#define SDL_MIN_Y 0
#define SDL_MIN_Z 0
#define SDL_REQUIREDVERSION (SDL_VERSIONNUM(SDL_MIN_X,SDL_MIN_Y,SDL_MIN_Z))
#define SDL_NEW_VERSION_REJECT (SDL_VERSIONNUM(3,0,0))
#else
/* need at least SDL_1.2.10 */
#define SDL_MIN_X 1
#define SDL_MIN_Y 2
#define SDL_MIN_Z 10
#define SDL_REQUIREDVERSION (SDL_VERSIONNUM(SDL_MIN_X,SDL_MIN_Y,SDL_MIN_Z))
/* reject 1.3.0 and newer at runtime. */
#define SDL_NEW_VERSION_REJECT (SDL_VERSIONNUM(1,3,0))
#endif
static void Sys_AtExit (void) static void Sys_AtExit (void)
{ {
SDL_Quit(); SDL_Quit();
@ -70,18 +49,8 @@ static void Sys_InitSDL (void)
#endif #endif
Sys_Printf("Found SDL version %i.%i.%i\n",sdl_version->major,sdl_version->minor,sdl_version->patch); Sys_Printf("Found SDL version %i.%i.%i\n",sdl_version->major,sdl_version->minor,sdl_version->patch);
if (SDL_VERSIONNUM(sdl_version->major,sdl_version->minor,sdl_version->patch) < SDL_REQUIREDVERSION)
{ /*reject running under older SDL versions */
Sys_Error("You need at least v%d.%d.%d of SDL to run this game.", SDL_MIN_X,SDL_MIN_Y,SDL_MIN_Z);
}
if (SDL_VERSIONNUM(sdl_version->major,sdl_version->minor,sdl_version->patch) >= SDL_NEW_VERSION_REJECT)
{ /*reject running under newer (1.3.x) SDL */
Sys_Error("Your version of SDL library is incompatible with me.\n"
"You need a library version in the line of %d.%d.%d\n", SDL_MIN_X,SDL_MIN_Y,SDL_MIN_Z);
}
if (SDL_Init(0) < 0) if (SDL_Init(0) < 0) {
{
Sys_Error("Couldn't init SDL: %s", SDL_GetError()); Sys_Error("Couldn't init SDL: %s", SDL_GetError());
} }
atexit(Sys_AtExit); atexit(Sys_AtExit);
@ -197,4 +166,3 @@ int main(int argc, char *argv[])
return 0; return 0;
} }

View File

@ -2065,8 +2065,8 @@ qboolean M_Quit_TextEntry (void)
void M_Quit_Draw (void) //johnfitz -- modified for new quit message void M_Quit_Draw (void) //johnfitz -- modified for new quit message
{ {
char msg1[40]; char msg1[] = ENGINE_NAME_AND_VER;
char msg2[] = "by Ozkan Sezer, Eric Wasylishen, others";/* msg2/msg3 are mostly [40] */ char msg2[] = "by Ozkan Sezer,Eric Wasylishen,others"; /* msg2/msg3 are [38] at most */
char msg3[] = "Press y to quit"; char msg3[] = "Press y to quit";
int boxlen; int boxlen;
@ -2078,17 +2078,14 @@ void M_Quit_Draw (void) //johnfitz -- modified for new quit message
m_state = m_quit; m_state = m_quit;
} }
sprintf(msg1, ENGINE_NAME_AND_VER);
//okay, this is kind of fucked up. M_DrawTextBox will always act as if //okay, this is kind of fucked up. M_DrawTextBox will always act as if
//width is even. Also, the width and lines values are for the interior of the box, //width is even. Also, the width and lines values are for the interior of the box,
//but the x and y values include the border. //but the x and y values include the border.
boxlen = q_max(strlen(msg1), q_max((sizeof(msg2)-1),(sizeof(msg3)-1))) + 1; boxlen = (q_max(sizeof(msg1), q_max(sizeof(msg2),sizeof(msg3))) + 1) & ~1;
if (boxlen & 1) boxlen++;
M_DrawTextBox (160-4*(boxlen+2), 76, boxlen, 4); M_DrawTextBox (160-4*(boxlen+2), 76, boxlen, 4);
//now do the text //now do the text
M_Print (160-4*strlen(msg1), 88, msg1); M_Print (160-4*(sizeof(msg1)-1), 88, msg1);
M_Print (160-4*(sizeof(msg2)-1), 96, msg2); M_Print (160-4*(sizeof(msg2)-1), 96, msg2);
M_PrintWhite (160-4*(sizeof(msg3)-1), 104, msg3); M_PrintWhite (160-4*(sizeof(msg3)-1), 104, msg3);
} }

View File

@ -80,8 +80,8 @@ char *PL_GetClipboardData (void)
* such as an ip address, etc: do chop the size * such as an ip address, etc: do chop the size
* here, otherwise we may experience Z_Malloc() * here, otherwise we may experience Z_Malloc()
* failures and all other not-oh-so-fun stuff. */ * failures and all other not-oh-so-fun stuff. */
size = q_min(MAX_CLIPBOARDTXT, size); size = q_min((size_t)(MAX_CLIPBOARDTXT), size);
data = (char *) Z_Malloc(size); data = (char *) Z_Malloc((int)size);
q_strlcpy (data, cliptext, size); q_strlcpy (data, cliptext, size);
} }
#endif #endif

View File

@ -56,8 +56,8 @@ char *PL_GetClipboardData (void)
NSString* clipboardString = [pasteboard stringForType: NSPasteboardTypeString]; NSString* clipboardString = [pasteboard stringForType: NSPasteboardTypeString];
if (clipboardString != NULL && [clipboardString length] > 0) { if (clipboardString != NULL && [clipboardString length] > 0) {
size_t sz = [clipboardString length] + 1; size_t sz = [clipboardString length] + 1;
sz = q_min(MAX_CLIPBOARDTXT, sz); sz = q_min((size_t)(MAX_CLIPBOARDTXT), sz);
data = (char *) Z_Malloc(sz); data = (char *) Z_Malloc((int)sz);
#if (MAC_OS_X_VERSION_MIN_REQUIRED < 1040) /* for ppc builds targeting 10.3 and older */ #if (MAC_OS_X_VERSION_MIN_REQUIRED < 1040) /* for ppc builds targeting 10.3 and older */
q_strlcpy (data, [clipboardString cString], sz); q_strlcpy (data, [clipboardString cString], sz);
#else #else

View File

@ -95,8 +95,8 @@ char *PL_GetClipboardData (void)
* such as an ip address, etc: do chop the size * such as an ip address, etc: do chop the size
* here, otherwise we may experience Z_Malloc() * here, otherwise we may experience Z_Malloc()
* failures and all other not-oh-so-fun stuff. */ * failures and all other not-oh-so-fun stuff. */
size = q_min(MAX_CLIPBOARDTXT, size); size = q_min((size_t)(MAX_CLIPBOARDTXT), size);
data = (char *) Z_Malloc(size); data = (char *) Z_Malloc((int)size);
q_strlcpy (data, cliptext, size); q_strlcpy (data, cliptext, size);
GlobalUnlock (hClipboardData); GlobalUnlock (hClipboardData);
} }

View File

@ -948,7 +948,7 @@ const char *ED_ParseEdict (const char *data, edict_t *ent)
//johnfitz -- hack to support .alpha even when progs.dat doesn't know about it //johnfitz -- hack to support .alpha even when progs.dat doesn't know about it
if (!strcmp(keyname, "alpha")) if (!strcmp(keyname, "alpha"))
ent->alpha = ENTALPHA_ENCODE(atof(com_token)); ent->alpha = ENTALPHA_ENCODE(Q_atof(com_token));
//johnfitz //johnfitz
//spike -- hacks to support func_illusionary/info_notnull with all sorts of mdls, and various particle effects //spike -- hacks to support func_illusionary/info_notnull with all sorts of mdls, and various particle effects

View File

@ -247,7 +247,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define ENTALPHA_DEFAULT 0 //entity's alpha is "default" (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works #define ENTALPHA_DEFAULT 0 //entity's alpha is "default" (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO 1 //entity is invisible (lowest possible alpha) #define ENTALPHA_ZERO 1 //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE 255 //entity is fully opaque (highest possible alpha) #define ENTALPHA_ONE 255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a) (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client #define ENTALPHA_ENCODE(a) (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1.0f,(a)*254.0f+1,255.0f))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a) (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering #define ENTALPHA_DECODE(a) (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a) (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame #define ENTALPHA_TOSAVE(a) (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
//johnfitz //johnfitz

View File

@ -37,7 +37,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define FITZQUAKE_VERSION 0.85 //johnfitz #define FITZQUAKE_VERSION 0.85 //johnfitz
#define QUAKESPASM_VERSION 0.94 #define QUAKESPASM_VERSION 0.94
#define QUAKESPASM_VER_PATCH 4 // helper to print a string like 0.94.4 #define QUAKESPASM_VER_PATCH 5 // helper to print a string like 0.94.4
#ifndef QUAKESPASM_VER_SUFFIX #ifndef QUAKESPASM_VER_SUFFIX
#define QUAKESPASM_VER_SUFFIX // optional version suffix string literal like "-beta1" #define QUAKESPASM_VER_SUFFIX // optional version suffix string literal like "-beta1"
#endif #endif

View File

@ -828,9 +828,9 @@ void R_SetupAliasFrame (aliashdr_t *paliashdr, entity_t *e, lerpdata_t *lerpdata
if (r_lerpmodels.value && !(e->model->flags & MOD_NOLERP && r_lerpmodels.value != 2)) if (r_lerpmodels.value && !(e->model->flags & MOD_NOLERP && r_lerpmodels.value != 2))
{ {
if (e->lerpflags & LERP_FINISH && numposes == 1) if (e->lerpflags & LERP_FINISH && numposes == 1)
lerpdata->blend = CLAMP (0, (cl.time - e->lerp.state.lerpstart) / (e->lerpfinish - e->lerp.state.lerpstart), 1); lerpdata->blend = CLAMP (0.0f, (float)(cl.time - e->lerp.state.lerpstart) / (e->lerpfinish - e->lerp.state.lerpstart), 1.0f);
else else
lerpdata->blend = CLAMP (0, (cl.time - e->lerp.state.lerpstart) / e->lerp.state.lerptime, 1); lerpdata->blend = CLAMP (0.0f, (float)(cl.time - e->lerp.state.lerpstart) / e->lerp.state.lerptime, 1.0f);
lerpdata->pose1 = e->lerp.state.previouspose; lerpdata->pose1 = e->lerp.state.previouspose;
lerpdata->pose2 = e->lerp.state.currentpose; lerpdata->pose2 = e->lerp.state.currentpose;
} }
@ -905,9 +905,9 @@ void R_SetupEntityTransform (entity_t *e, lerpdata_t *lerpdata)
if (r_lerpmove.value && e != &cl.viewent && e->lerpflags & LERP_MOVESTEP) if (r_lerpmove.value && e != &cl.viewent && e->lerpflags & LERP_MOVESTEP)
{ {
if (e->lerpflags & LERP_FINISH) if (e->lerpflags & LERP_FINISH)
blend = CLAMP (0, (cl.time - e->movelerpstart) / (e->lerpfinish - e->movelerpstart), 1); blend = CLAMP (0.0f, (float)(cl.time - e->movelerpstart) / (e->lerpfinish - e->movelerpstart), 1.0f);
else else
blend = CLAMP (0, (cl.time - e->movelerpstart) / 0.1, 1); blend = CLAMP (0.0f, (float)(cl.time - e->movelerpstart) / 0.1f, 1.0f);
//translation //translation
VectorSubtract (e->currentorigin, e->previousorigin, d); VectorSubtract (e->currentorigin, e->previousorigin, d);
@ -1051,7 +1051,7 @@ void R_DrawAliasModel (entity_t *e)
{ {
aliasglsl_t *glsl; aliasglsl_t *glsl;
aliashdr_t *paliashdr; aliashdr_t *paliashdr;
int i, anim, skinnum; int anim, skinnum;
gltexture_t *tx, *fb; gltexture_t *tx, *fb;
lerpdata_t lerpdata; lerpdata_t lerpdata;
qboolean alphatest = !!(e->model->flags & MF_HOLEY); qboolean alphatest = !!(e->model->flags & MF_HOLEY);
@ -1160,9 +1160,8 @@ void R_DrawAliasModel (entity_t *e)
} }
if (e->netstate.colormap && !gl_nocolors.value) if (e->netstate.colormap && !gl_nocolors.value)
{ {
i = e - cl.entities; if ((uintptr_t)e >= (uintptr_t)&cl.entities[1] && (uintptr_t)e <= (uintptr_t)&cl.entities[cl.maxclients]) /* && !strcmp (currententity->model->name, "progs/player.mdl") */
if (i >= 1 && i<=cl.maxclients /* && !strcmp (currententity->model->name, "progs/player.mdl") */) tx = playertextures[e - cl.entities - 1];
tx = playertextures[i - 1];
} }
if (!gl_fullbrights.value) if (!gl_fullbrights.value)
fb = NULL; fb = NULL;

View File

@ -235,8 +235,11 @@ void R_DrawSequentialPoly (msurface_t *s)
if (s->flags & SURF_DRAWTURB) if (s->flags & SURF_DRAWTURB)
{ {
if (currententity->alpha == ENTALPHA_DEFAULT) if (currententity->alpha == ENTALPHA_DEFAULT)
entalpha = CLAMP(0.0, GL_WaterAlphaForSurface(s), 1.0); {
entalpha = GL_WaterAlphaForSurface(s);
if (entalpha > 1.0f) entalpha = 1.0f;
else if (entalpha < 0.0f) entalpha = 0.0f;
}
if (entalpha < 1) if (entalpha < 1)
{ {
glDepthMask(GL_FALSE); glDepthMask(GL_FALSE);

View File

@ -373,7 +373,7 @@ void Sbar_DrawScrollString (int x, int y, int width, const char *str)
float scale; float scale;
int len, ofs, left; int len, ofs, left;
scale = CLAMP (1.0, scr_sbarscale.value, (float)glwidth / 320.0); scale = CLAMP (1.0f, scr_sbarscale.value, (float)glwidth / 320.0f);
left = x * scale; left = x * scale;
if (cl.gametype != GAME_DEATHMATCH) if (cl.gametype != GAME_DEATHMATCH)
left += (((float)glwidth - 320.0 * scale) / 2); left += (((float)glwidth - 320.0 * scale) / 2);
@ -1287,7 +1287,7 @@ void Sbar_MiniDeathmatchOverlay (void)
float scale; //johnfitz float scale; //johnfitz
scoreboard_t *s; scoreboard_t *s;
scale = CLAMP (1.0, scr_sbarscale.value, (float)glwidth / 320.0); //johnfitz scale = CLAMP (1.0f, scr_sbarscale.value, (float)glwidth / 320.0f); //johnfitz
//MAX_SCOREBOARDNAME = 32, so total width for this overlay plus sbar is 632, but we can cut off some i guess //MAX_SCOREBOARDNAME = 32, so total width for this overlay plus sbar is 632, but we can cut off some i guess
if (glwidth/scale < 512 || scr_viewsize.value >= 120) //johnfitz -- test should consider scr_sbarscale if (glwidth/scale < 512 || scr_viewsize.value >= 120) //johnfitz -- test should consider scr_sbarscale

View File

@ -8,7 +8,7 @@
<H1>QuakeSpasm</H1> <H1>QuakeSpasm</H1>
<H2></H2> <H2></H2>
<P><EM>Page last edited: April 2022.</EM></P> <P><EM>Page last edited: June 2022.</EM></P>
<P> <P>
<H2><A NAME="toc1">1.</A> <A HREF="Quakespasm.html#s1">About </A></H2> <H2><A NAME="toc1">1.</A> <A HREF="Quakespasm.html#s1">About </A></H2>
@ -36,28 +36,29 @@
<H2><A NAME="toc5">5.</A> <A HREF="Quakespasm.html#s5">Changes</A></H2> <H2><A NAME="toc5">5.</A> <A HREF="Quakespasm.html#s5">Changes</A></H2>
<UL> <UL>
<LI><A NAME="toc5.1">5.1</A> <A HREF="Quakespasm.html#ss5.1">Changes in 0.94.4</A> <LI><A NAME="toc5.1">5.1</A> <A HREF="Quakespasm.html#ss5.1">Changes in 0.94.5</A>
<LI><A NAME="toc5.2">5.2</A> <A HREF="Quakespasm.html#ss5.2">Changes in 0.94.3</A> <LI><A NAME="toc5.2">5.2</A> <A HREF="Quakespasm.html#ss5.2">Changes in 0.94.4</A>
<LI><A NAME="toc5.3">5.3</A> <A HREF="Quakespasm.html#ss5.3">Changes in 0.94.2</A> <LI><A NAME="toc5.3">5.3</A> <A HREF="Quakespasm.html#ss5.3">Changes in 0.94.3</A>
<LI><A NAME="toc5.4">5.4</A> <A HREF="Quakespasm.html#ss5.4">Changes in 0.94.1</A> <LI><A NAME="toc5.4">5.4</A> <A HREF="Quakespasm.html#ss5.4">Changes in 0.94.2</A>
<LI><A NAME="toc5.5">5.5</A> <A HREF="Quakespasm.html#ss5.5">Changes in 0.94.0</A> <LI><A NAME="toc5.5">5.5</A> <A HREF="Quakespasm.html#ss5.5">Changes in 0.94.1</A>
<LI><A NAME="toc5.6">5.6</A> <A HREF="Quakespasm.html#ss5.6">Changes in 0.93.2</A> <LI><A NAME="toc5.6">5.6</A> <A HREF="Quakespasm.html#ss5.6">Changes in 0.94.0</A>
<LI><A NAME="toc5.7">5.7</A> <A HREF="Quakespasm.html#ss5.7">Changes in 0.93.1</A> <LI><A NAME="toc5.7">5.7</A> <A HREF="Quakespasm.html#ss5.7">Changes in 0.93.2</A>
<LI><A NAME="toc5.8">5.8</A> <A HREF="Quakespasm.html#ss5.8">Changes in 0.93.0</A> <LI><A NAME="toc5.8">5.8</A> <A HREF="Quakespasm.html#ss5.8">Changes in 0.93.1</A>
<LI><A NAME="toc5.9">5.9</A> <A HREF="Quakespasm.html#ss5.9">Changes in 0.92.1</A> <LI><A NAME="toc5.9">5.9</A> <A HREF="Quakespasm.html#ss5.9">Changes in 0.93.0</A>
<LI><A NAME="toc5.10">5.10</A> <A HREF="Quakespasm.html#ss5.10">Changes in 0.92.0</A> <LI><A NAME="toc5.10">5.10</A> <A HREF="Quakespasm.html#ss5.10">Changes in 0.92.1</A>
<LI><A NAME="toc5.11">5.11</A> <A HREF="Quakespasm.html#ss5.11">Changes in 0.91.0</A> <LI><A NAME="toc5.11">5.11</A> <A HREF="Quakespasm.html#ss5.11">Changes in 0.92.0</A>
<LI><A NAME="toc5.12">5.12</A> <A HREF="Quakespasm.html#ss5.12">Changes in 0.90.1</A> <LI><A NAME="toc5.12">5.12</A> <A HREF="Quakespasm.html#ss5.12">Changes in 0.91.0</A>
<LI><A NAME="toc5.13">5.13</A> <A HREF="Quakespasm.html#ss5.13">Changes in 0.90.0</A> <LI><A NAME="toc5.13">5.13</A> <A HREF="Quakespasm.html#ss5.13">Changes in 0.90.1</A>
<LI><A NAME="toc5.14">5.14</A> <A HREF="Quakespasm.html#ss5.14">Changes in 0.85.9</A> <LI><A NAME="toc5.14">5.14</A> <A HREF="Quakespasm.html#ss5.14">Changes in 0.90.0</A>
<LI><A NAME="toc5.15">5.15</A> <A HREF="Quakespasm.html#ss5.15">Changes in 0.85.8</A> <LI><A NAME="toc5.15">5.15</A> <A HREF="Quakespasm.html#ss5.15">Changes in 0.85.9</A>
<LI><A NAME="toc5.16">5.16</A> <A HREF="Quakespasm.html#ss5.16">Changes in 0.85.7</A> <LI><A NAME="toc5.16">5.16</A> <A HREF="Quakespasm.html#ss5.16">Changes in 0.85.8</A>
<LI><A NAME="toc5.17">5.17</A> <A HREF="Quakespasm.html#ss5.17">Changes in 0.85.6</A> <LI><A NAME="toc5.17">5.17</A> <A HREF="Quakespasm.html#ss5.17">Changes in 0.85.7</A>
<LI><A NAME="toc5.18">5.18</A> <A HREF="Quakespasm.html#ss5.18">Changes in 0.85.5</A> <LI><A NAME="toc5.18">5.18</A> <A HREF="Quakespasm.html#ss5.18">Changes in 0.85.6</A>
<LI><A NAME="toc5.19">5.19</A> <A HREF="Quakespasm.html#ss5.19">Changes in 0.85.4</A> <LI><A NAME="toc5.19">5.19</A> <A HREF="Quakespasm.html#ss5.19">Changes in 0.85.5</A>
<LI><A NAME="toc5.20">5.20</A> <A HREF="Quakespasm.html#ss5.20">Changes in 0.85.3</A> <LI><A NAME="toc5.20">5.20</A> <A HREF="Quakespasm.html#ss5.20">Changes in 0.85.4</A>
<LI><A NAME="toc5.21">5.21</A> <A HREF="Quakespasm.html#ss5.21">Changes in 0.85.2</A> <LI><A NAME="toc5.21">5.21</A> <A HREF="Quakespasm.html#ss5.21">Changes in 0.85.3</A>
<LI><A NAME="toc5.22">5.22</A> <A HREF="Quakespasm.html#ss5.22">Changes in 0.85.1</A> <LI><A NAME="toc5.22">5.22</A> <A HREF="Quakespasm.html#ss5.22">Changes in 0.85.2</A>
<LI><A NAME="toc5.23">5.23</A> <A HREF="Quakespasm.html#ss5.23">Changes in 0.85.1</A>
</UL> </UL>
<P> <P>
<H2><A NAME="toc6">6.</A> <A HREF="Quakespasm.html#s6">Copyright </A></H2> <H2><A NAME="toc6">6.</A> <A HREF="Quakespasm.html#s6">Copyright </A></H2>
@ -71,8 +72,6 @@
<HR> <HR>
<H2><A NAME="s1">1.</A> <A HREF="#toc1">About </A></H2> <H2><A NAME="s1">1.</A> <A HREF="#toc1">About </A></H2>
<P> <P>
<A HREF="http://quakespasm.sourceforge.net">QuakeSpasm</A> <A HREF="http://quakespasm.sourceforge.net">QuakeSpasm</A>
is a modern, cross-platform Quake engine based on is a modern, cross-platform Quake engine based on
@ -83,8 +82,6 @@ sound driver, some graphical niceities, and numerous bug-fixes and other improve
SDL is probably less buggy, but SDL2 has nicer features and smoother mouse input - though no CD support.</P> SDL is probably less buggy, but SDL2 has nicer features and smoother mouse input - though no CD support.</P>
<H2><A NAME="s2">2.</A> <A HREF="#toc2">Downloads </A></H2> <H2><A NAME="s2">2.</A> <A HREF="#toc2">Downloads </A></H2>
<P> <P>
<UL> <UL>
<LI> <LI>
@ -94,10 +91,7 @@ SDL is probably less buggy, but SDL2 has nicer features and smoother mouse input
</UL> </UL>
</P> </P>
<H2><A NAME="s3">3.</A> <A HREF="#toc3">Hints </A></H2> <H2><A NAME="s3">3.</A> <A HREF="#toc3">Hints </A></H2>
<P><EM>Visit the <P><EM>Visit the
<A HREF="http://www.celephais.net/fitzquake">FitzQuake homepage</A> for a full run-down of the engine's commands and variables.</EM> <A HREF="http://www.celephais.net/fitzquake">FitzQuake homepage</A> for a full run-down of the engine's commands and variables.</EM>
<UL> <UL>
@ -119,7 +113,6 @@ where DRIVER may be alsa, dsp, pulse, esd ...</LI>
</P> </P>
<H2><A NAME="ss3.1">3.1</A> <A HREF="#toc3.1">Music Playback</A> <H2><A NAME="ss3.1">3.1</A> <A HREF="#toc3.1">Music Playback</A>
</H2> </H2>
<P>Quakespasm can play various external music formats, including MP3, OGG and FLAC. <P>Quakespasm can play various external music formats, including MP3, OGG and FLAC.
<UL> <UL>
<LI>Tracks should be named like "track02.ogg", "track03.ogg" ... (there is no track01) and placed into "Quake/id1/music".</LI> <LI>Tracks should be named like "track02.ogg", "track03.ogg" ... (there is no track01) and placed into "Quake/id1/music".</LI>
@ -133,14 +126,12 @@ where DRIVER may be alsa, dsp, pulse, esd ...</LI>
<H2><A NAME="ss3.2">3.2</A> <A HREF="#toc3.2">Controller Support</A> <H2><A NAME="ss3.2">3.2</A> <A HREF="#toc3.2">Controller Support</A>
</H2> </H2>
<P>The SDL2 variant of Quakespasm supports Xbox 360 style game controllers.</P> <P>The SDL2 variant of Quakespasm supports Xbox 360 style game controllers.</P>
<P>The default configuration uses the left analog stick for movement and the right for looking.</P> <P>The default configuration uses the left analog stick for movement and the right for looking.</P>
<P>If your controller doesn't work you can try placing <P>If your controller doesn't work you can try placing
<A HREF="https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt">this file</A> in your Quake directory, it is a community-maintained database that adds support for more controllers to SDL2.</P> <A HREF="https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt">this file</A> in your Quake directory, it is a community-maintained database that adds support for more controllers to SDL2.</P>
<H3>Cvars</H3> <H3>Cvars</H3>
<P> <P>
<UL> <UL>
<LI>joy_deadzone - Fraction of the stick travel to be deadzone, between 0 and 1. Default 0.175.</LI> <LI>joy_deadzone - Fraction of the stick travel to be deadzone, between 0 and 1. Default 0.175.</LI>
@ -152,9 +143,7 @@ where DRIVER may be alsa, dsp, pulse, esd ...</LI>
<LI>joy_enable - Set to 0 to disable controller support. Default 1.</LI> <LI>joy_enable - Set to 0 to disable controller support. Default 1.</LI>
</UL> </UL>
</P> </P>
<H3>Buttons</H3> <H3>Buttons</H3>
<P>Some of the controller buttons are hardcoded to allow navigating the menu:</P> <P>Some of the controller buttons are hardcoded to allow navigating the menu:</P>
<P> <P>
<UL> <UL>
@ -186,7 +175,6 @@ where DRIVER may be alsa, dsp, pulse, esd ...</LI>
<H2><A NAME="s4">4.</A> <A HREF="#toc4">Compiling and Installation</A></H2> <H2><A NAME="s4">4.</A> <A HREF="#toc4">Compiling and Installation</A></H2>
<P>See the Downloads section to get the sourcecode, then below for platform specific instructions. <P>See the Downloads section to get the sourcecode, then below for platform specific instructions.
Quakespasm can also be built with the cross-platform Codeblocks.<BR> Quakespasm can also be built with the cross-platform Codeblocks.<BR>
Quakespasm's (optional) custom data is now stored in the file <B>quakespasm.pak</B>. This file should be placed alongside your quakespasm binary and <B>id1</B> directory.</P> Quakespasm's (optional) custom data is now stored in the file <B>quakespasm.pak</B>. This file should be placed alongside your quakespasm binary and <B>id1</B> directory.</P>
@ -221,13 +209,25 @@ Compile time options include
</H2> </H2>
<P>QuakeSpasm 0.94.0 has initial support for playing the 2021 re-release content: Copy the quakespasm binary to your rerelease installation and run quakespasm as you normally do.</P> <P>QuakeSpasm 0.94.0 has initial support for playing the 2021 re-release content: Copy the quakespasm binary to your rerelease installation and run quakespasm as you normally do.</P>
<H2><A NAME="s5">5.</A> <A HREF="#toc5">Changes</A></H2> <H2><A NAME="s5">5.</A> <A HREF="#toc5">Changes</A></H2>
<H2><A NAME="ss5.1">5.1</A> <A HREF="#toc5.1">Changes in 0.94.5</A>
<H2><A NAME="ss5.1">5.1</A> <A HREF="#toc5.1">Changes in 0.94.4</A>
</H2> </H2>
<P>
<UL>
<LI> Compatibility with new SDL2 versioning scheme.</LI>
<LI> Revised min/max/clamp macros' usage.</LI>
<LI> Fixed a potential undefined behavior in R_DrawAliasModel.</LI>
<LI> Fixed parsing of the time argument of svc_fog server message. (it has been broken for more than 20 years and has never seem to have been used.)</LI>
<LI> Other small improvements elsewhere in the code.</LI>
<LI> Backported a few fixes to the bundled SDL2-2.0.22 version.</LI>
</UL>
</P>
<H2><A NAME="ss5.2">5.2</A> <A HREF="#toc5.2">Changes in 0.94.4</A>
</H2>
<P> <P>
<UL> <UL>
<LI> Fixed getting stuck with loading plaque upon attempting to load a bad save from the menu</LI> <LI> Fixed getting stuck with loading plaque upon attempting to load a bad save from the menu</LI>
@ -247,9 +247,9 @@ Compile time options include
<LI> Thanks to Andrei Drexler, 'atsb' and 'temx' for their several patches.</LI> <LI> Thanks to Andrei Drexler, 'atsb' and 'temx' for their several patches.</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.2">5.2</A> <A HREF="#toc5.2">Changes in 0.94.3</A>
</H2>
<H2><A NAME="ss5.3">5.3</A> <A HREF="#toc5.3">Changes in 0.94.3</A>
</H2>
<P> <P>
<UL> <UL>
<LI> Handle sky textures with non-standard sizes and warn about them (e.g. ad_tears)</LI> <LI> Handle sky textures with non-standard sizes and warn about them (e.g. ad_tears)</LI>
@ -257,9 +257,9 @@ Compile time options include
<LI> Updated included SDL2 to latest version 2.0.18.</LI> <LI> Updated included SDL2 to latest version 2.0.18.</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.3">5.3</A> <A HREF="#toc5.3">Changes in 0.94.2</A>
</H2>
<H2><A NAME="ss5.4">5.4</A> <A HREF="#toc5.4">Changes in 0.94.2</A>
</H2>
<P> <P>
<UL> <UL>
<LI> 2021 rerelease: Support for playing the latest update.</LI> <LI> 2021 rerelease: Support for playing the latest update.</LI>
@ -268,17 +268,17 @@ Compile time options include
<LI> 2021 rerelease: Look for QuakeEX.kpf under userdir, too.</LI> <LI> 2021 rerelease: Look for QuakeEX.kpf under userdir, too.</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.4">5.4</A> <A HREF="#toc5.4">Changes in 0.94.1</A>
</H2>
<H2><A NAME="ss5.5">5.5</A> <A HREF="#toc5.5">Changes in 0.94.1</A>
</H2>
<P> <P>
<UL> <UL>
<LI> Fix lightmap issues after vkQuake surface mark/cull optimizations merge (sf.net bug/50)</LI> <LI> Fix lightmap issues after vkQuake surface mark/cull optimizations merge (sf.net bug/50)</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.5">5.5</A> <A HREF="#toc5.5">Changes in 0.94.0</A>
</H2>
<H2><A NAME="ss5.6">5.6</A> <A HREF="#toc5.6">Changes in 0.94.0</A>
</H2>
<P> <P>
<UL> <UL>
<LI> Initial support for playing the 'Quake 2021 re-release' content (thanks to Andrei Drexler for bulk of the work, Guillaume Plourde for Q64 bsp format support.)</LI> <LI> Initial support for playing the 'Quake 2021 re-release' content (thanks to Andrei Drexler for bulk of the work, Guillaume Plourde for Q64 bsp format support.)</LI>
@ -301,9 +301,9 @@ Compile time options include
<LI> Source repository moved to git.</LI> <LI> Source repository moved to git.</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.6">5.6</A> <A HREF="#toc5.6">Changes in 0.93.2</A>
</H2>
<H2><A NAME="ss5.7">5.7</A> <A HREF="#toc5.7">Changes in 0.93.2</A>
</H2>
<P> <P>
<UL> <UL>
<LI> Lightmaps are now dynamically allocated (from QSS), and BLOCK_WIDTH/HEIGHT raised from 128 to 256.</LI> <LI> Lightmaps are now dynamically allocated (from QSS), and BLOCK_WIDTH/HEIGHT raised from 128 to 256.</LI>
@ -314,9 +314,9 @@ Compile time options include
<LI> Update the third-party libraries. Other fixes/cleanups.</LI> <LI> Update the third-party libraries. Other fixes/cleanups.</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.7">5.7</A> <A HREF="#toc5.7">Changes in 0.93.1</A>
</H2>
<H2><A NAME="ss5.8">5.8</A> <A HREF="#toc5.8">Changes in 0.93.1</A>
</H2>
<P> <P>
<UL> <UL>
<LI> Fixed a fog regression which was introduced in 0.93.0.</LI> <LI> Fixed a fog regression which was introduced in 0.93.0.</LI>
@ -328,9 +328,9 @@ Compile time options include
<LI> Update the third-party libraries. Other fixes/cleanups.</LI> <LI> Update the third-party libraries. Other fixes/cleanups.</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.8">5.8</A> <A HREF="#toc5.8">Changes in 0.93.0</A>
</H2>
<H2><A NAME="ss5.9">5.9</A> <A HREF="#toc5.9">Changes in 0.93.0</A>
</H2>
<P> <P>
<UL> <UL>
<LI> Raise default "joy_deadzone_trigger" cvar to 0.2.</LI> <LI> Raise default "joy_deadzone_trigger" cvar to 0.2.</LI>
@ -371,9 +371,9 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<LI> Update the third-party libraries.</LI> <LI> Update the third-party libraries.</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.9">5.9</A> <A HREF="#toc5.9">Changes in 0.92.1</A>
</H2>
<H2><A NAME="ss5.10">5.10</A> <A HREF="#toc5.10">Changes in 0.92.1</A>
</H2>
<P> <P>
<UL> <UL>
<LI> Fixed large menu scale factors (was broken in 0.92.0).</LI> <LI> Fixed large menu scale factors (was broken in 0.92.0).</LI>
@ -381,9 +381,9 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<LI> Updated some of the third-party libraries.</LI> <LI> Updated some of the third-party libraries.</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.10">5.10</A> <A HREF="#toc5.10">Changes in 0.92.0</A>
</H2>
<H2><A NAME="ss5.11">5.11</A> <A HREF="#toc5.11">Changes in 0.92.0</A>
</H2>
<P> <P>
<UL> <UL>
<LI> SDL2 Game Controller support.</LI> <LI> SDL2 Game Controller support.</LI>
@ -401,12 +401,10 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<LI> Updated some of the third-party libraries. Other fixes/clean-ups.</LI> <LI> Updated some of the third-party libraries. Other fixes/clean-ups.</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.11">5.11</A> <A HREF="#toc5.11">Changes in 0.91.0</A>
<H2><A NAME="ss5.12">5.12</A> <A HREF="#toc5.12">Changes in 0.91.0</A>
</H2> </H2>
<H3>Bugfixes</H3> <H3>Bugfixes</H3>
<P> <P>
<UL> <UL>
<LI> Fix unwanted fog mode change upon video restart.</LI> <LI> Fix unwanted fog mode change upon video restart.</LI>
@ -424,35 +422,27 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<LI> Prevent a possible vulnerability in MSG_ReadString (old Q1/Q2 bug).</LI> <LI> Prevent a possible vulnerability in MSG_ReadString (old Q1/Q2 bug).</LI>
</UL> </UL>
</P> </P>
<H3>Visual improvements</H3> <H3>Visual improvements</H3>
<P> <P>
<UL> <UL>
<LI> New cvars r_lavaalpha, r_slimealpha, r_telealpha for fine-tuning specific liquid opacities (from DirectQ/RMQEngine, non-archived, default to 0), and new worldspawn keys _wateralpha, _lavaalpha, _slimealpha, _telealpha, _skyfog (unique to Quakespasm, similar to the behaviour of the "fog" worldspawn key).</LI> <LI> New cvars r_lavaalpha, r_slimealpha, r_telealpha for fine-tuning specific liquid opacities (from DirectQ/RMQEngine, non-archived, default to 0), and new worldspawn keys _wateralpha, _lavaalpha, _slimealpha, _telealpha, _skyfog (unique to Quakespasm, similar to the behaviour of the "fog" worldspawn key).</LI>
<LI> GLSL gamma is now supported on older hardware without NPOT extension.</LI> <LI> GLSL gamma is now supported on older hardware without NPOT extension.</LI>
</UL> </UL>
</P> </P>
<H3>Interface improvements</H3> <H3>Interface improvements</H3>
<P> <P>
<UL> <UL>
<LI> New r_pos command to show player position.</LI> <LI> New r_pos command to show player position.</LI>
<LI> NaN detection in traceline with "developer 1" set now warns instead of errors.</LI> <LI> NaN detection in traceline with "developer 1" set now warns instead of errors.</LI>
</UL> </UL>
</P> </P>
<H3>Code cleanup / Other</H3> <H3>Code cleanup / Other</H3>
<P> <P>
<UL> <UL>
<LI> Update third-party libraries.</LI> <LI> Update third-party libraries.</LI>
</UL> </UL>
</P> </P>
<H3>Raised limits</H3> <H3>Raised limits</H3>
<P> <P>
<UL> <UL>
<LI> Default max_edicts 8192 (was 2048) and no longer saved to config.cfg.</LI> <LI> Default max_edicts 8192 (was 2048) and no longer saved to config.cfg.</LI>
@ -461,12 +451,10 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<LI> Raised MAX_SFX to 1024 (was 512).</LI> <LI> Raised MAX_SFX to 1024 (was 512).</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.12">5.12</A> <A HREF="#toc5.12">Changes in 0.90.1</A>
<H2><A NAME="ss5.13">5.13</A> <A HREF="#toc5.13">Changes in 0.90.1</A>
</H2> </H2>
<H3>Bugfixes</H3> <H3>Bugfixes</H3>
<P> <P>
<UL> <UL>
<LI> Fix dynamic light artifact where changing lightmap are rendered one frame late (bug introduced in 0.90.0).</LI> <LI> Fix dynamic light artifact where changing lightmap are rendered one frame late (bug introduced in 0.90.0).</LI>
@ -480,18 +468,14 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<LI> Fix crash on out-of-bounds skin number.</LI> <LI> Fix crash on out-of-bounds skin number.</LI>
</UL> </UL>
</P> </P>
<H3>Performance</H3> <H3>Performance</H3>
<P> <P>
<UL> <UL>
<LI> Use multithreaded OpenGL on OS X for better performance.</LI> <LI> Use multithreaded OpenGL on OS X for better performance.</LI>
<LI> New, faster mdl renderer using GLSL. Disable with "-noglslalias".</LI> <LI> New, faster mdl renderer using GLSL. Disable with "-noglslalias".</LI>
</UL> </UL>
</P> </P>
<H3>Visual improvements</H3> <H3>Visual improvements</H3>
<P> <P>
<UL> <UL>
<LI> New gamma correction implementation using GLSL. Fixes all known gamma issues (affecting the full display, persisting after quitting, or darkening the screen on OS X). Disable with "-noglslgamma".</LI> <LI> New gamma correction implementation using GLSL. Fixes all known gamma issues (affecting the full display, persisting after quitting, or darkening the screen on OS X). Disable with "-noglslgamma".</LI>
@ -500,9 +484,7 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<LI> r_noshadow_list cvar added (from MarkV.)</LI> <LI> r_noshadow_list cvar added (from MarkV.)</LI>
</UL> </UL>
</P> </P>
<H3>Interface improvements</H3> <H3>Interface improvements</H3>
<P> <P>
<UL> <UL>
<LI> Support pausing demo playback with the "pause" command.</LI> <LI> Support pausing demo playback with the "pause" command.</LI>
@ -512,18 +494,16 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<LI> Some spam moved from developer 1 to 2: "can't find tga/lit/ent", "trying to load ent", "bad chunk length", "meshing", "PR_AlocStringSlots: realloc'ing"</LI> <LI> Some spam moved from developer 1 to 2: "can't find tga/lit/ent", "trying to load ent", "bad chunk length", "meshing", "PR_AlocStringSlots: realloc'ing"</LI>
</UL> </UL>
</P> </P>
<H3>Code cleanup</H3> <H3>Code cleanup</H3>
<P> <P>
<UL> <UL>
<LI> Clean up IDE project files to build on fresh systems.</LI> <LI> Clean up IDE project files to build on fresh systems.</LI>
<LI> Update 3rd-party libraries.</LI> <LI> Update 3rd-party libraries.</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.13">5.13</A> <A HREF="#toc5.13">Changes in 0.90.0</A>
</H2>
<H2><A NAME="ss5.14">5.14</A> <A HREF="#toc5.14">Changes in 0.90.0</A>
</H2>
<P> <P>
<UL> <UL>
<LI> Fix issues on Windows systems with DPI scaling.</LI> <LI> Fix issues on Windows systems with DPI scaling.</LI>
@ -567,9 +547,9 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<LI> Other fixes and clean-ups.</LI> <LI> Other fixes and clean-ups.</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.14">5.14</A> <A HREF="#toc5.14">Changes in 0.85.9</A>
</H2>
<H2><A NAME="ss5.15">5.15</A> <A HREF="#toc5.15">Changes in 0.85.9</A>
</H2>
<P> <P>
<UL> <UL>
<LI> Fixes for several undefined behaviors in C code (gcc-4.8 support.)</LI> <LI> Fixes for several undefined behaviors in C code (gcc-4.8 support.)</LI>
@ -591,9 +571,9 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<LI> Several other minor fixes/cleanups.</LI> <LI> Several other minor fixes/cleanups.</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.15">5.15</A> <A HREF="#toc5.15">Changes in 0.85.8</A>
</H2>
<H2><A NAME="ss5.16">5.16</A> <A HREF="#toc5.16">Changes in 0.85.8</A>
</H2>
<P> <P>
<UL> <UL>
<LI> Made Quake shareware 1.00 and 1.01 versions to be recognized properly.</LI> <LI> Made Quake shareware 1.00 and 1.01 versions to be recognized properly.</LI>
@ -616,9 +596,9 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<LI> Miscellaneous source code cleanups.</LI> <LI> Miscellaneous source code cleanups.</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.16">5.16</A> <A HREF="#toc5.16">Changes in 0.85.7</A>
</H2>
<H2><A NAME="ss5.17">5.17</A> <A HREF="#toc5.17">Changes in 0.85.7</A>
</H2>
<P> <P>
<UL> <UL>
<LI> Added support for cross-level demo playback</LI> <LI> Added support for cross-level demo playback</LI>
@ -634,9 +614,9 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<LI> Several other small changes mostly invisible to the end-user</LI> <LI> Several other small changes mostly invisible to the end-user</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.17">5.17</A> <A HREF="#toc5.17">Changes in 0.85.6</A>
</H2>
<H2><A NAME="ss5.18">5.18</A> <A HREF="#toc5.18">Changes in 0.85.6</A>
</H2>
<P> <P>
<UL> <UL>
<LI> More work for string buffer safety</LI> <LI> More work for string buffer safety</LI>
@ -645,9 +625,9 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<LI> Minor SDL video fixes.</LI> <LI> Minor SDL video fixes.</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.18">5.18</A> <A HREF="#toc5.18">Changes in 0.85.5</A>
</H2>
<H2><A NAME="ss5.19">5.19</A> <A HREF="#toc5.19">Changes in 0.85.5</A>
</H2>
<P> <P>
<UL> <UL>
<LI> SDL input driver updated adding native keymap and dead key support to the console</LI> <LI> SDL input driver updated adding native keymap and dead key support to the console</LI>
@ -664,9 +644,9 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<LI> Several code updates from uHexen2 project, several code cleanups.</LI> <LI> Several code updates from uHexen2 project, several code cleanups.</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.19">5.19</A> <A HREF="#toc5.19">Changes in 0.85.4</A>
</H2>
<H2><A NAME="ss5.20">5.20</A> <A HREF="#toc5.20">Changes in 0.85.4</A>
</H2>
<P> <P>
<UL> <UL>
<LI> Implement music (OGG, MP3, WAV) playback</LI> <LI> Implement music (OGG, MP3, WAV) playback</LI>
@ -682,9 +662,9 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<LI> Other minor sound and cdaudio updates</LI> <LI> Other minor sound and cdaudio updates</LI>
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.20">5.20</A> <A HREF="#toc5.20">Changes in 0.85.3</A>
</H2>
<H2><A NAME="ss5.21">5.21</A> <A HREF="#toc5.21">Changes in 0.85.3</A>
</H2>
<P> <P>
<UL> <UL>
<LI> Fix the "-dedicated" option (thanks Oz) and add platform specific networking code (default) rather than SDL_net</LI> <LI> Fix the "-dedicated" option (thanks Oz) and add platform specific networking code (default) rather than SDL_net</LI>
@ -705,9 +685,8 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.21">5.21</A> <A HREF="#toc5.21">Changes in 0.85.2</A> <H2><A NAME="ss5.22">5.22</A> <A HREF="#toc5.22">Changes in 0.85.2</A>
</H2> </H2>
<P> <P>
<UL> <UL>
<LI> Replace the old "Screen size" slider with a "Scale" slider</LI> <LI> Replace the old "Screen size" slider with a "Scale" slider</LI>
@ -724,9 +703,8 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
</UL> </UL>
</P> </P>
<H2><A NAME="ss5.22">5.22</A> <A HREF="#toc5.22">Changes in 0.85.1</A> <H2><A NAME="ss5.23">5.23</A> <A HREF="#toc5.23">Changes in 0.85.1</A>
</H2> </H2>
<P> <P>
<UL> <UL>
<LI>64 bit CPU support</LI> <LI>64 bit CPU support</LI>
@ -750,7 +728,6 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
<H2><A NAME="s6">6.</A> <A HREF="#toc6">Copyright </A></H2> <H2><A NAME="s6">6.</A> <A HREF="#toc6">Copyright </A></H2>
<P> <P>
<UL> <UL>
<LI>Quake and Quakespasm are released under the <LI>Quake and Quakespasm are released under the
@ -761,7 +738,6 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
</P> </P>
<H2><A NAME="s7">7.</A> <A HREF="#toc7">Contact </A></H2> <H2><A NAME="s7">7.</A> <A HREF="#toc7">Contact </A></H2>
<P> <P>
<UL> <UL>
<LI> <LI>
@ -776,7 +752,6 @@ quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
</P> </P>
<H2><A NAME="s8">8.</A> <A HREF="#toc8">Links </A></H2> <H2><A NAME="s8">8.</A> <A HREF="#toc8">Links </A></H2>
<P> <P>
<UL> <UL>
<LI> <LI>

View File

@ -19,38 +19,39 @@
4.4 Quake '2021 re-release' 4.4 Quake '2021 re-release'
5. Changes 5. Changes
5.1 Changes in 0.94.4 5.1 Changes in 0.94.5
5.2 Changes in 0.94.3 5.2 Changes in 0.94.4
5.3 Changes in 0.94.2 5.3 Changes in 0.94.3
5.4 Changes in 0.94.1 5.4 Changes in 0.94.2
5.5 Changes in 0.94.0 5.5 Changes in 0.94.1
5.6 Changes in 0.93.2 5.6 Changes in 0.94.0
5.7 Changes in 0.93.1 5.7 Changes in 0.93.2
5.8 Changes in 0.93.0 5.8 Changes in 0.93.1
5.9 Changes in 0.92.1 5.9 Changes in 0.93.0
5.10 Changes in 0.92.0 5.10 Changes in 0.92.1
5.11 Changes in 0.91.0 5.11 Changes in 0.92.0
5.11.1 Bugfixes 5.12 Changes in 0.91.0
5.11.2 Visual improvements
5.11.3 Interface improvements
5.11.4 Code cleanup / Other
5.11.5 Raised limits
5.12 Changes in 0.90.1
5.12.1 Bugfixes 5.12.1 Bugfixes
5.12.2 Performance 5.12.2 Visual improvements
5.12.3 Visual improvements 5.12.3 Interface improvements
5.12.4 Interface improvements 5.12.4 Code cleanup / Other
5.12.5 Code cleanup 5.12.5 Raised limits
5.13 Changes in 0.90.0 5.13 Changes in 0.90.1
5.14 Changes in 0.85.9 5.13.1 Bugfixes
5.15 Changes in 0.85.8 5.13.2 Performance
5.16 Changes in 0.85.7 5.13.3 Visual improvements
5.17 Changes in 0.85.6 5.13.4 Interface improvements
5.18 Changes in 0.85.5 5.13.5 Code cleanup
5.19 Changes in 0.85.4 5.14 Changes in 0.90.0
5.20 Changes in 0.85.3 5.15 Changes in 0.85.9
5.21 Changes in 0.85.2 5.16 Changes in 0.85.8
5.22 Changes in 0.85.1 5.17 Changes in 0.85.7
5.18 Changes in 0.85.6
5.19 Changes in 0.85.5
5.20 Changes in 0.85.4
5.21 Changes in 0.85.3
5.22 Changes in 0.85.2
5.23 Changes in 0.85.1
6. Copyright 6. Copyright
7. Contact 7. Contact
@ -59,7 +60,8 @@
______________________________________________________________________ ______________________________________________________________________
Page last edited: April 2022.
Page last edited: June 2022.
1. About 1. About
@ -264,7 +266,24 @@
5. Changes 5. Changes
5.1. Changes in 0.94.4 5.1. Changes in 0.94.5
o Compatibility with new SDL2 versioning scheme.
o Revised min/max/clamp macros' usage.
o Fixed a potential undefined behavior in R_DrawAliasModel.
o Fixed parsing of the time argument of svc_fog server message. (it
has been broken for more than 20 years and has never seem to have
been used.)
o Other small improvements elsewhere in the code.
o Backported a few fixes to the bundled SDL2-2.0.22 version.
5.2. Changes in 0.94.4
o Fixed getting stuck with loading plaque upon attempting to load a o Fixed getting stuck with loading plaque upon attempting to load a
bad save from the menu bad save from the menu
@ -300,7 +319,7 @@
patches. patches.
5.2. Changes in 0.94.3 5.3. Changes in 0.94.3
o Handle sky textures with non-standard sizes and warn about them o Handle sky textures with non-standard sizes and warn about them
(e.g. ad_tears) (e.g. ad_tears)
@ -312,7 +331,7 @@
o Updated included SDL2 to latest version 2.0.18. o Updated included SDL2 to latest version 2.0.18.
5.3. Changes in 0.94.2 5.4. Changes in 0.94.2
o 2021 rerelease: Support for playing the latest update. o 2021 rerelease: Support for playing the latest update.
@ -323,13 +342,13 @@
o 2021 rerelease: Look for QuakeEX.kpf under userdir, too. o 2021 rerelease: Look for QuakeEX.kpf under userdir, too.
5.4. Changes in 0.94.1 5.5. Changes in 0.94.1
o Fix lightmap issues after vkQuake surface mark/cull optimizations o Fix lightmap issues after vkQuake surface mark/cull optimizations
merge (sf.net bug/50) merge (sf.net bug/50)
5.5. Changes in 0.94.0 5.6. Changes in 0.94.0
o Initial support for playing the 'Quake 2021 re-release' content o Initial support for playing the 'Quake 2021 re-release' content
(thanks to Andrei Drexler for bulk of the work, Guillaume Plourde (thanks to Andrei Drexler for bulk of the work, Guillaume Plourde
@ -378,7 +397,7 @@
o Source repository moved to git. o Source repository moved to git.
5.6. Changes in 0.93.2 5.7. Changes in 0.93.2
o Lightmaps are now dynamically allocated (from QSS), and o Lightmaps are now dynamically allocated (from QSS), and
BLOCK_WIDTH/HEIGHT raised from 128 to 256. BLOCK_WIDTH/HEIGHT raised from 128 to 256.
@ -398,7 +417,7 @@
o Update the third-party libraries. Other fixes/cleanups. o Update the third-party libraries. Other fixes/cleanups.
5.7. Changes in 0.93.1 5.8. Changes in 0.93.1
o Fixed a fog regression which was introduced in 0.93.0. o Fixed a fog regression which was introduced in 0.93.0.
@ -416,7 +435,7 @@
o Update the third-party libraries. Other fixes/cleanups. o Update the third-party libraries. Other fixes/cleanups.
5.8. Changes in 0.93.0 5.9. Changes in 0.93.0
o Raise default "joy_deadzone_trigger" cvar to 0.2. o Raise default "joy_deadzone_trigger" cvar to 0.2.
@ -501,7 +520,7 @@
o Update the third-party libraries. o Update the third-party libraries.
5.9. Changes in 0.92.1 5.10. Changes in 0.92.1
o Fixed large menu scale factors (was broken in 0.92.0). o Fixed large menu scale factors (was broken in 0.92.0).
@ -510,7 +529,7 @@
o Updated some of the third-party libraries. o Updated some of the third-party libraries.
5.10. Changes in 0.92.0 5.11. Changes in 0.92.0
o SDL2 Game Controller support. o SDL2 Game Controller support.
@ -547,9 +566,9 @@
o Updated some of the third-party libraries. Other fixes/clean-ups. o Updated some of the third-party libraries. Other fixes/clean-ups.
5.11. Changes in 0.91.0 5.12. Changes in 0.91.0
5.11.1. Bugfixes 5.12.1. Bugfixes
o Fix unwanted fog mode change upon video restart. o Fix unwanted fog mode change upon video restart.
@ -585,7 +604,7 @@
o Prevent a possible vulnerability in MSG_ReadString (old Q1/Q2 bug). o Prevent a possible vulnerability in MSG_ReadString (old Q1/Q2 bug).
5.11.2. Visual improvements 5.12.2. Visual improvements
o New cvars r_lavaalpha, r_slimealpha, r_telealpha for fine-tuning o New cvars r_lavaalpha, r_slimealpha, r_telealpha for fine-tuning
specific liquid opacities (from DirectQ/RMQEngine, non-archived, specific liquid opacities (from DirectQ/RMQEngine, non-archived,
@ -596,18 +615,18 @@
o GLSL gamma is now supported on older hardware without NPOT o GLSL gamma is now supported on older hardware without NPOT
extension. extension.
5.11.3. Interface improvements 5.12.3. Interface improvements
o New r_pos command to show player position. o New r_pos command to show player position.
o NaN detection in traceline with "developer 1" set now warns instead o NaN detection in traceline with "developer 1" set now warns instead
of errors. of errors.
5.11.4. Code cleanup / Other 5.12.4. Code cleanup / Other
o Update third-party libraries. o Update third-party libraries.
5.11.5. Raised limits 5.12.5. Raised limits
o Default max_edicts 8192 (was 2048) and no longer saved to o Default max_edicts 8192 (was 2048) and no longer saved to
config.cfg. config.cfg.
@ -619,9 +638,9 @@
o Raised MAX_SFX to 1024 (was 512). o Raised MAX_SFX to 1024 (was 512).
5.12. Changes in 0.90.1 5.13. Changes in 0.90.1
5.12.1. Bugfixes 5.13.1. Bugfixes
o Fix dynamic light artifact where changing lightmap are rendered one o Fix dynamic light artifact where changing lightmap are rendered one
frame late (bug introduced in 0.90.0). frame late (bug introduced in 0.90.0).
@ -644,13 +663,13 @@
o Fix crash on out-of-bounds skin number. o Fix crash on out-of-bounds skin number.
5.12.2. Performance 5.13.2. Performance
o Use multithreaded OpenGL on OS X for better performance. o Use multithreaded OpenGL on OS X for better performance.
o New, faster mdl renderer using GLSL. Disable with "-noglslalias". o New, faster mdl renderer using GLSL. Disable with "-noglslalias".
5.12.3. Visual improvements 5.13.3. Visual improvements
o New gamma correction implementation using GLSL. Fixes all known o New gamma correction implementation using GLSL. Fixes all known
gamma issues (affecting the full display, persisting after gamma issues (affecting the full display, persisting after
@ -664,7 +683,7 @@
o r_noshadow_list cvar added (from MarkV.) o r_noshadow_list cvar added (from MarkV.)
5.12.4. Interface improvements 5.13.4. Interface improvements
o Support pausing demo playback with the "pause" command. o Support pausing demo playback with the "pause" command.
@ -681,14 +700,14 @@
"trying to load ent", "bad chunk length", "meshing", "trying to load ent", "bad chunk length", "meshing",
"PR_AlocStringSlots: realloc'ing" "PR_AlocStringSlots: realloc'ing"
5.12.5. Code cleanup 5.13.5. Code cleanup
o Clean up IDE project files to build on fresh systems. o Clean up IDE project files to build on fresh systems.
o Update 3rd-party libraries. o Update 3rd-party libraries.
5.13. Changes in 0.90.0 5.14. Changes in 0.90.0
o Fix issues on Windows systems with DPI scaling. o Fix issues on Windows systems with DPI scaling.
@ -796,7 +815,7 @@
o Other fixes and clean-ups. o Other fixes and clean-ups.
5.14. Changes in 0.85.9 5.15. Changes in 0.85.9
o Fixes for several undefined behaviors in C code (gcc-4.8 support.) o Fixes for several undefined behaviors in C code (gcc-4.8 support.)
@ -843,7 +862,7 @@
o Several other minor fixes/cleanups. o Several other minor fixes/cleanups.
5.15. Changes in 0.85.8 5.16. Changes in 0.85.8
o Made Quake shareware 1.00 and 1.01 versions to be recognized o Made Quake shareware 1.00 and 1.01 versions to be recognized
properly. properly.
@ -890,7 +909,7 @@
o Miscellaneous source code cleanups. o Miscellaneous source code cleanups.
5.16. Changes in 0.85.7 5.17. Changes in 0.85.7
o Added support for cross-level demo playback o Added support for cross-level demo playback
@ -916,7 +935,7 @@
o Several other small changes mostly invisible to the end-user o Several other small changes mostly invisible to the end-user
5.17. Changes in 0.85.6 5.18. Changes in 0.85.6
o More work for string buffer safety o More work for string buffer safety
@ -929,7 +948,7 @@
o Minor SDL video fixes. o Minor SDL video fixes.
5.18. Changes in 0.85.5 5.19. Changes in 0.85.5
o SDL input driver updated adding native keymap and dead key support o SDL input driver updated adding native keymap and dead key support
to the console to the console
@ -960,7 +979,7 @@
o Several code updates from uHexen2 project, several code cleanups. o Several code updates from uHexen2 project, several code cleanups.
5.19. Changes in 0.85.4 5.20. Changes in 0.85.4
o Implement music (OGG, MP3, WAV) playback o Implement music (OGG, MP3, WAV) playback
@ -988,7 +1007,7 @@
o Other minor sound and cdaudio updates o Other minor sound and cdaudio updates
5.20. Changes in 0.85.3 5.21. Changes in 0.85.3
o Fix the "-dedicated" option (thanks Oz) and add platform specific o Fix the "-dedicated" option (thanks Oz) and add platform specific
networking code (default) rather than SDL_net networking code (default) rather than SDL_net
@ -1025,7 +1044,7 @@
some other CD tweaks. some other CD tweaks.
5.21. Changes in 0.85.2 5.22. Changes in 0.85.2
o Replace the old "Screen size" slider with a "Scale" slider o Replace the old "Screen size" slider with a "Scale" slider
@ -1053,7 +1072,7 @@
o Add OSX Makefile (tested?) o Add OSX Makefile (tested?)
5.22. Changes in 0.85.1 5.23. Changes in 0.85.1
o 64 bit CPU support o 64 bit CPU support
@ -1126,3 +1145,4 @@
http://www.celephais.net/board/view_thread.php?id=60452 http://www.celephais.net/board/view_thread.php?id=60452
o Inside3D forums: http://forums.insideqc.com o Inside3D forums: http://forums.insideqc.com

View File

@ -22,7 +22,7 @@
#ifndef SDL_assert_h_ #ifndef SDL_assert_h_
#define SDL_assert_h_ #define SDL_assert_h_
#include "SDL_config.h" #include "SDL_stdinc.h"
#include "begin_code.h" #include "begin_code.h"
/* Set up for C function definitions, even when using C++ */ /* Set up for C function definitions, even when using C++ */
@ -51,6 +51,8 @@ assert can have unique static variables associated with it.
/* Don't include intrin.h here because it contains C++ code */ /* Don't include intrin.h here because it contains C++ code */
extern void __cdecl __debugbreak(void); extern void __cdecl __debugbreak(void);
#define SDL_TriggerBreakpoint() __debugbreak() #define SDL_TriggerBreakpoint() __debugbreak()
#elif _SDL_HAS_BUILTIN(__builtin_debugtrap)
#define SDL_TriggerBreakpoint() __builtin_debugtrap()
#elif ( (!defined(__NACL__)) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))) ) #elif ( (!defined(__NACL__)) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))) )
#define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" )
#elif ( defined(__APPLE__) && (defined(__arm64__) || defined(__aarch64__)) ) /* this might work on other ARM targets, but this is a known quantity... */ #elif ( defined(__APPLE__) && (defined(__arm64__) || defined(__aarch64__)) ) /* this might work on other ARM targets, but this is a known quantity... */

View File

@ -38,6 +38,18 @@
#include <winsdkver.h> #include <winsdkver.h>
#endif #endif
/* sdkddkver.h defines more specific SDK version numbers. This is needed because older versions of the
* Windows 10 SDK have broken declarations for the C API for DirectX 12. */
#if !defined(HAVE_SDKDDKVER_H) && defined(__has_include)
#if __has_include(<sdkddkver.h>)
#define HAVE_SDKDDKVER_H 1
#endif
#endif
#ifdef HAVE_SDKDDKVER_H
#include <sdkddkver.h>
#endif
/* This is a set of defines to configure the SDL features */ /* This is a set of defines to configure the SDL features */
#if !defined(_STDINT_H_) && (!defined(HAVE_STDINT_H) || !_HAVE_STDINT_H) #if !defined(_STDINT_H_) && (!defined(HAVE_STDINT_H) || !_HAVE_STDINT_H)
@ -227,7 +239,9 @@ typedef unsigned int uintptr_t;
#endif #endif
/* Enable various audio drivers */ /* Enable various audio drivers */
#if defined(HAVE_MMDEVICEAPI_H) && defined(HAVE_AUDIOCLIENT_H)
#define SDL_AUDIO_DRIVER_WASAPI 1 #define SDL_AUDIO_DRIVER_WASAPI 1
#endif
#define SDL_AUDIO_DRIVER_DSOUND 1 #define SDL_AUDIO_DRIVER_DSOUND 1
#define SDL_AUDIO_DRIVER_WINMM 1 #define SDL_AUDIO_DRIVER_WINMM 1
#define SDL_AUDIO_DRIVER_DISK 1 #define SDL_AUDIO_DRIVER_DISK 1
@ -248,7 +262,11 @@ typedef unsigned int uintptr_t;
#define SDL_HAPTIC_XINPUT 1 #define SDL_HAPTIC_XINPUT 1
/* Enable the sensor driver */ /* Enable the sensor driver */
#ifdef HAVE_SENSORSAPI_H
#define SDL_SENSOR_WINDOWS 1 #define SDL_SENSOR_WINDOWS 1
#else
#define SDL_SENSOR_DUMMY 1
#endif
/* Enable various shared object loading systems */ /* Enable various shared object loading systems */
#define SDL_LOADSO_WINDOWS 1 #define SDL_LOADSO_WINDOWS 1
@ -300,11 +318,6 @@ typedef unsigned int uintptr_t;
/* Enable filesystem support */ /* Enable filesystem support */
#define SDL_FILESYSTEM_WINDOWS 1 #define SDL_FILESYSTEM_WINDOWS 1
/* Enable assembly routines (Win64 doesn't have inline asm) */
#ifndef _WIN64
#define SDL_ASSEMBLY_ROUTINES 1
#endif
#endif /* SDL_config_windows_h_ */ #endif /* SDL_config_windows_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -87,6 +87,28 @@ _m_prefetch(void *__P)
#endif /* __linux__ */ #endif /* __linux__ */
#endif /* !SDL_BYTEORDER */ #endif /* !SDL_BYTEORDER */
#ifndef SDL_FLOATWORDORDER /* Not defined in SDL_config.h? */
/* predefs from newer gcc versions: */
#if defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__FLOAT_WORD_ORDER__)
#if (__FLOAT_WORD_ORDER__ == __ORDER_LITTLE_ENDIAN__)
#define SDL_FLOATWORDORDER SDL_LIL_ENDIAN
#elif (__FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__)
#define SDL_FLOATWORDORDER SDL_BIG_ENDIAN
#else
#error Unsupported endianness
#endif /**/
#elif defined(__MAVERICK__)
/* For Maverick, float words are always little-endian. */
#define SDL_FLOATWORDORDER SDL_LIL_ENDIAN
#elif (defined(__arm__) || defined(__thumb__)) && !defined(__VFP_FP__) && !defined(__ARM_EABI__)
/* For FPA, float words are always big-endian. */
#define SDL_FLOATWORDORDER SDL_BIG_ENDIAN
#else
/* By default, assume that floats words follow the memory system mode. */
#define SDL_FLOATWORDORDER SDL_BYTEORDER
#endif /* __FLOAT_WORD_ORDER__ */
#endif /* !SDL_FLOATWORDORDER */
#include "begin_code.h" #include "begin_code.h"
/* Set up for C function definitions, even when using C++ */ /* Set up for C function definitions, even when using C++ */

View File

@ -252,10 +252,10 @@ SDL_FORCE_INLINE SDL_bool SDL_FRectEmpty(const SDL_FRect *r)
SDL_FORCE_INLINE SDL_bool SDL_FRectEqualsEpsilon(const SDL_FRect *a, const SDL_FRect *b, const float epsilon) SDL_FORCE_INLINE SDL_bool SDL_FRectEqualsEpsilon(const SDL_FRect *a, const SDL_FRect *b, const float epsilon)
{ {
return (a && b && ((a == b) || return (a && b && ((a == b) ||
((SDL_fabs(a->x - b->x) <= epsilon) && ((SDL_fabsf(a->x - b->x) <= epsilon) &&
(SDL_fabs(a->y - b->y) <= epsilon) && (SDL_fabsf(a->y - b->y) <= epsilon) &&
(SDL_fabs(a->w - b->w) <= epsilon) && (SDL_fabsf(a->w - b->w) <= epsilon) &&
(SDL_fabs(a->h - b->h) <= epsilon)))) (SDL_fabsf(a->h - b->h) <= epsilon))))
? SDL_TRUE : SDL_FALSE; ? SDL_TRUE : SDL_FALSE;
} }

View File

@ -1,2 +1,2 @@
#define SDL_REVISION "https://github.com/libsdl-org/SDL.git@981e1e3c4489add5bf6d4df5415af3cf1ef2773d" #define SDL_REVISION "@1594e60f8c154d3c8cea175fe88694e5aaf5e7bc"
#define SDL_REVISION_NUMBER 0 #define SDL_REVISION_NUMBER 0

View File

@ -462,7 +462,7 @@ extern DECLSPEC int SDLCALL SDL_GetNumAllocations(void);
extern DECLSPEC char *SDLCALL SDL_getenv(const char *name); extern DECLSPEC char *SDLCALL SDL_getenv(const char *name);
extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite); extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite);
extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (*compare) (const void *, const void *)); extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (SDLCALL *compare) (const void *, const void *));
extern DECLSPEC int SDLCALL SDL_abs(int x); extern DECLSPEC int SDLCALL SDL_abs(int x);

View File

@ -195,7 +195,7 @@ extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID,
* *
* \sa SDL_iPhoneSetEventPump * \sa SDL_iPhoneSetEventPump
*/ */
extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam); extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (SDLCALL *callback)(void*), void *callbackParam);
#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled) #define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled)

View File

@ -129,7 +129,7 @@ SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data,
pfnSDL_CurrentEndThread pfnEndThread); pfnSDL_CurrentEndThread pfnEndThread);
extern DECLSPEC SDL_Thread *SDLCALL extern DECLSPEC SDL_Thread *SDLCALL
SDL_CreateThreadWithStackSize(int (SDLCALL * fn) (void *), SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn,
const char *name, const size_t stacksize, void *data, const char *name, const size_t stacksize, void *data,
pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentBeginThread pfnBeginThread,
pfnSDL_CurrentEndThread pfnEndThread); pfnSDL_CurrentEndThread pfnEndThread);

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -70,7 +70,7 @@ main_getcmdline(void)
if (!argv[i]) { if (!argv[i]) {
return OutOfMemory(); return OutOfMemory();
} }
CopyMemory(argv[i], arg, len); SDL_memcpy(argv[i], arg, len);
SDL_free(arg); SDL_free(arg);
} }
argv[i] = NULL; argv[i] = NULL;