diff --git a/.gitignore b/.gitignore
index 7b2304ec..922fac4a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,4 @@ Win32_LIB_ASM_Release
*.user
*.db
*.opendb
+/.vs
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f9364fdd..eb91866f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.0)
project(SRB2
- VERSION 2.1.19
+ VERSION 2.1.20
LANGUAGES C)
if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
diff --git a/SRB2_Debug.props b/SRB2_Debug.props
index 2c16f7cb..8be11c58 100644
--- a/SRB2_Debug.props
+++ b/SRB2_Debug.props
@@ -17,7 +17,7 @@
MultiThreadedDebugDLL
true
All
- true
+ false
EnableFastChecks
diff --git a/appveyor.yml b/appveyor.yml
index ae3f82f5..69913cfc 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,4 +1,4 @@
-version: 2.1.19.{branch}-{build}
+version: 2.1.20.{branch}-{build}
os: MinGW
environment:
diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index 57a8bc1e..11c9acff 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -26,6 +26,7 @@
#include "p_local.h"
#include "p_setup.h"
#include "s_sound.h"
+#include "i_sound.h"
#include "m_misc.h"
#include "am_map.h"
#include "byteptr.h"
@@ -135,6 +136,7 @@ static void Command_Playintro_f(void);
static void Command_Displayplayer_f(void);
static void Command_Tunes_f(void);
+static void Command_RestartAudio_f(void);
static void Command_ExitLevel_f(void);
static void Command_Showmap_f(void);
@@ -757,6 +759,7 @@ void D_RegisterClientCommands(void)
COM_AddCommand("displayplayer", Command_Displayplayer_f);
COM_AddCommand("tunes", Command_Tunes_f);
+ COM_AddCommand("restartaudio", Command_RestartAudio_f);
CV_RegisterVar(&cv_resetmusic);
// FIXME: not to be here.. but needs be done for config loading
@@ -3454,8 +3457,31 @@ static void Command_Addfile(void)
if (*p == '\\' || *p == '/' || *p == ':')
break;
++p;
+ // check total packet size and no of files currently loaded
+ {
+ size_t packetsize = 0;
+ serverinfo_pak *dummycheck = NULL;
+
+ // Shut the compiler up.
+ (void)dummycheck;
+
+ // See W_LoadWadFile in w_wad.c
+ for (i = 0; i < numwadfiles; i++)
+ packetsize += nameonlylength(wadfiles[i]->filename) + 22;
+
+ packetsize += nameonlylength(fn) + 22;
+
+ if ((numwadfiles >= MAX_WADFILES)
+ || (packetsize > sizeof(dummycheck->fileneeded)))
+ {
+ CONS_Alert(CONS_ERROR, M_GetText("Too many files loaded to add %s\n"), fn);
+ return;
+ }
+ }
+
WRITESTRINGN(buf_p,p,240);
+ // calculate and check md5
{
UINT8 md5sum[16];
#ifdef NOMD5
@@ -3473,6 +3499,15 @@ static void Command_Addfile(void)
}
else // file not found
return;
+
+ for (i = 0; i < numwadfiles; i++)
+ {
+ if (!memcmp(wadfiles[i]->md5sum, md5sum, 16))
+ {
+ CONS_Alert(CONS_ERROR, M_GetText("%s is already loaded\n"), fn);
+ return;
+ }
+ }
#endif
WRITEMEM(buf_p, md5sum, 16);
}
@@ -3701,9 +3736,9 @@ static void Command_ListWADS_f(void)
static void Command_Version_f(void)
{
#ifdef DEVELOP
- CONS_Printf("Sonic Robo Blast 2 %s-%s (%s %s)\n", compbranch, comprevision, compdate, comptime);
+ CONS_Printf("SRB2Kart %s-%s (%s %s)\n", compbranch, comprevision, compdate, comptime);
#else
- CONS_Printf("Sonic Robo Blast 2 %s (%s %s %s)\n", VERSIONSTRING, compdate, comptime, comprevision);
+ CONS_Printf("SRB2Kart %s (%s %s %s)\n", VERSIONSTRING, compdate, comptime, comprevision);
#endif
}
@@ -4352,6 +4387,27 @@ static void Command_Tunes_f(void)
}
}
+static void Command_RestartAudio_f(void)
+{
+ if (dedicated) // No point in doing anything if game is a dedicated server.
+ return;
+
+ S_StopMusic();
+ I_ShutdownMusic();
+ I_ShutdownSound();
+ I_StartupSound();
+ I_InitMusic();
+
+// These must be called or no sound and music until manually set.
+
+ I_SetSfxVolume(cv_soundvolume.value);
+ I_SetDigMusicVolume(cv_digmusicvolume.value);
+ I_SetMIDIMusicVolume(cv_midimusicvolume.value);
+ if (Playing()) // Gotta make sure the player is in a level
+ P_RestoreMusic(&players[consoleplayer]);
+
+}
+
/** Quits a game and returns to the title screen.
*
*/
diff --git a/src/doomdef.h b/src/doomdef.h
index 8aa28b5e..175838c0 100644
--- a/src/doomdef.h
+++ b/src/doomdef.h
@@ -172,7 +172,7 @@ extern FILE *logstream;
// The string used in the alert that pops up in the event of an update being available.
// Please change to apply to your modification (we don't want everyone asking where your mod is on SRB2.org!).
#define UPDATE_ALERT_STRING \
-"A new update is available for SRB2kart.\n"\
+"A new update is available for SRB2Kart.\n"\
"Please visit the forums on SRB2.org to download it.\n"\
"\n"\
"You are using version: %s\n"\
@@ -189,7 +189,7 @@ extern FILE *logstream;
// The string used in the I_Error alert upon trying to host through command line parameters.
// Generally less filled with newlines, since Windows gives you lots more room to work with.
#define UPDATE_ALERT_STRING_CONSOLE \
-"A new update is available for SRB2kart.\n"\
+"A new update is available for SRB2Kart.\n"\
"Please visit the forums on SRB2.org to download it.\n"\
"\n"\
"You are using version: %s\n"\
@@ -205,7 +205,7 @@ extern FILE *logstream;
// Will always resemble the versionstring, 205 = 2.0.5, 210 = 2.1, etc.
#define CODEBASE 210
-// The Modification ID; must be obtained from Inuyasha ( http://mb.srb2.org/private.php?do=newpm&u=2604 ).
+// The Modification ID; must be obtained from Rob ( https://mb.srb2.org/private.php?do=newpm&u=546 ).
// DO NOT try to set this otherwise, or your modification will be unplayable through the Master Server.
// "12" is the default mod ID for version 2.1
#define MODID 12
diff --git a/src/hardware/r_opengl/r_opengl-vc10.vcxproj b/src/hardware/r_opengl/r_opengl-vc10.vcxproj
index 43da2a3e..f04ae320 100644
--- a/src/hardware/r_opengl/r_opengl-vc10.vcxproj
+++ b/src/hardware/r_opengl/r_opengl-vc10.vcxproj
@@ -122,6 +122,7 @@
$(IntDir)r_opengl.lib
MachineX86
+ Windows
true
@@ -166,6 +167,7 @@
$(IntDir)r_opengl.lib
MachineX64
+ Windows
true
@@ -212,6 +214,7 @@
$(IntDir)r_opengl.lib
MachineX86
+ Windows
true
@@ -258,6 +261,7 @@
$(IntDir)r_opengl.lib
MachineX64
+ Windows
true
diff --git a/src/hardware/s_openal/s_openal-vc10.vcxproj b/src/hardware/s_openal/s_openal-vc10.vcxproj
index 67d2d95a..8b4f6cbb 100644
--- a/src/hardware/s_openal/s_openal-vc10.vcxproj
+++ b/src/hardware/s_openal/s_openal-vc10.vcxproj
@@ -125,6 +125,7 @@
$(IntDir)s_openal.lib
MachineX86
+ Windows
true
@@ -170,6 +171,7 @@
$(IntDir)s_openal.lib
MachineX64
+ Windows
true
@@ -216,6 +218,7 @@
$(IntDir)s_openal.lib
MachineX86
+ Windows
true
@@ -262,6 +265,7 @@
$(IntDir)s_openal.lib
MachineX64
+ Windows
true
diff --git a/src/i_tcp.c b/src/i_tcp.c
index 3d55236e..6488e984 100644
--- a/src/i_tcp.c
+++ b/src/i_tcp.c
@@ -215,7 +215,6 @@ static UINT8 UPNP_support = TRUE;
#if defined (USE_WINSOCK) && !defined (NONET)
typedef SOCKET SOCKET_TYPE;
-#define BADSOCKET INVALID_SOCKET
#define ERRSOCKET (SOCKET_ERROR)
#else
#if (defined (__unix__) && !defined (MSDOS)) || defined (__APPLE__) || defined (__HAIKU__) || defined(_PS3)
@@ -223,7 +222,6 @@ typedef int SOCKET_TYPE;
#else
typedef unsigned long SOCKET_TYPE;
#endif
-#define BADSOCKET (SOCKET_TYPE)(~0)
#define ERRSOCKET (-1)
#endif
@@ -232,10 +230,10 @@ typedef int socklen_t;
#endif
#ifndef NONET
-static SOCKET_TYPE mysockets[MAXNETNODES+1] = {BADSOCKET};
+static SOCKET_TYPE mysockets[MAXNETNODES+1] = {ERRSOCKET};
static size_t mysocketses = 0;
static int myfamily[MAXNETNODES+1] = {0};
-static SOCKET_TYPE nodesocket[MAXNETNODES+1] = {BADSOCKET};
+static SOCKET_TYPE nodesocket[MAXNETNODES+1] = {ERRSOCKET};
static mysockaddr_t clientaddress[MAXNETNODES+1];
static mysockaddr_t broadcastaddress[MAXNETNODES+1];
static size_t broadcastaddresses = 0;
@@ -647,7 +645,7 @@ static boolean FD_CPY(fd_set *src, fd_set *dst, SOCKET_TYPE *fd, size_t len)
FD_ZERO(dst);
for (i = 0; i < len;i++)
{
- if(fd[i] != BADSOCKET && fd[i] != (SOCKET_TYPE)ERRSOCKET &&
+ if(fd[i] != (SOCKET_TYPE)ERRSOCKET &&
FD_ISSET(fd[i], src) && !FD_ISSET(fd[i], dst)) // no checking for dups
{
FD_SET(fd[i], dst);
@@ -725,7 +723,7 @@ static void SOCK_Send(void)
}
return;
}
- else if (nodesocket[doomcom->remotenode] == BADSOCKET)
+ else if (nodesocket[doomcom->remotenode] == (SOCKET_TYPE)ERRSOCKET)
{
for (i = 0; i < mysocketses; i++)
{
@@ -777,7 +775,7 @@ static void SOCK_FreeNodenum(INT32 numnode)
DEBFILE(va("Free node %d (%s)\n", numnode, SOCK_GetNodeAddress(numnode)));
nodeconnected[numnode] = false;
- nodesocket[numnode] = BADSOCKET;
+ nodesocket[numnode] = ERRSOCKET;
// put invalid address
memset(&clientaddress[numnode], 0, sizeof (clientaddress[numnode]));
@@ -804,7 +802,7 @@ static SOCKET_TYPE UDP_Bind(int family, struct sockaddr *addr, socklen_t addrlen
#endif
mysockaddr_t straddr;
- if (s == (SOCKET_TYPE)ERRSOCKET || s == BADSOCKET)
+ if (s == (SOCKET_TYPE)ERRSOCKET)
return (SOCKET_TYPE)ERRSOCKET;
#ifdef USE_WINSOCK
{ // Alam_GBC: disable the new UDP connection reset behavior for Win2k and up
@@ -911,9 +909,9 @@ static boolean UDP_Socket(void)
for (s = 0; s < mysocketses; s++)
- mysockets[s] = BADSOCKET;
+ mysockets[s] = ERRSOCKET;
for (s = 0; s < MAXNETNODES+1; s++)
- nodesocket[s] = BADSOCKET;
+ nodesocket[s] = ERRSOCKET;
FD_ZERO(&masterset);
s = 0;
@@ -1250,7 +1248,6 @@ static void SOCK_CloseSocket(void)
for (i=0; i < MAXNETNODES+1; i++)
{
if (mysockets[i] != (SOCKET_TYPE)ERRSOCKET
- && mysockets[i] != BADSOCKET
&& FD_ISSET(mysockets[i], &masterset))
{
#if !defined (__DJGPP__) || defined (WATTCP)
@@ -1258,7 +1255,7 @@ static void SOCK_CloseSocket(void)
close(mysockets[i]);
#endif
}
- mysockets[i] = BADSOCKET;
+ mysockets[i] = ERRSOCKET;
}
}
#endif
diff --git a/src/lua_hooklib.c b/src/lua_hooklib.c
index a24473ba..eadd0153 100644
--- a/src/lua_hooklib.c
+++ b/src/lua_hooklib.c
@@ -231,6 +231,8 @@ boolean LUAh_MobjHook(mobj_t *mo, enum hook which)
if (!gL || !(hooksAvailable[which/8] & (1<<(which%8))))
return false;
+ I_Assert(mo->type < NUMMOBJTYPES);
+
lua_settop(gL, 0);
// Look for all generic mobj hooks
@@ -406,6 +408,8 @@ UINT8 LUAh_MobjCollideHook(mobj_t *thing1, mobj_t *thing2, enum hook which)
if (!gL || !(hooksAvailable[which/8] & (1<<(which%8))))
return 0;
+ I_Assert(thing1->type < NUMMOBJTYPES);
+
lua_settop(gL, 0);
// Look for all generic mobj collision hooks
@@ -479,6 +483,8 @@ boolean LUAh_MobjThinker(mobj_t *mo)
if (!gL || !(hooksAvailable[hook_MobjThinker/8] & (1<<(hook_MobjThinker%8))))
return false;
+ I_Assert(mo->type < NUMMOBJTYPES);
+
lua_settop(gL, 0);
// Look for all generic mobj thinker hooks
@@ -532,6 +538,8 @@ boolean LUAh_TouchSpecial(mobj_t *special, mobj_t *toucher)
if (!gL || !(hooksAvailable[hook_TouchSpecial/8] & (1<<(hook_TouchSpecial%8))))
return 0;
+ I_Assert(special->type < NUMMOBJTYPES);
+
lua_settop(gL, 0);
// Look for all generic touch special hooks
@@ -595,6 +603,8 @@ UINT8 LUAh_ShouldDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32
if (!gL || !(hooksAvailable[hook_ShouldDamage/8] & (1<<(hook_ShouldDamage%8))))
return 0;
+ I_Assert(target->type < NUMMOBJTYPES);
+
lua_settop(gL, 0);
// Look for all generic should damage hooks
@@ -676,6 +686,8 @@ boolean LUAh_MobjDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32
if (!gL || !(hooksAvailable[hook_MobjDamage/8] & (1<<(hook_MobjDamage%8))))
return 0;
+ I_Assert(target->type < NUMMOBJTYPES);
+
lua_settop(gL, 0);
// Look for all generic mobj damage hooks
@@ -747,6 +759,8 @@ boolean LUAh_MobjDeath(mobj_t *target, mobj_t *inflictor, mobj_t *source)
if (!gL || !(hooksAvailable[hook_MobjDeath/8] & (1<<(hook_MobjDeath%8))))
return 0;
+ I_Assert(target->type < NUMMOBJTYPES);
+
lua_settop(gL, 0);
// Look for all generic mobj death hooks
diff --git a/src/mserv.c b/src/mserv.c
index 78c42e55..98849df4 100644
--- a/src/mserv.c
+++ b/src/mserv.c
@@ -102,35 +102,35 @@
#define PACKET_SIZE 1024
-#define MS_NO_ERROR 0
-#define MS_SOCKET_ERROR -201
-#define MS_CONNECT_ERROR -203
-#define MS_WRITE_ERROR -210
-#define MS_READ_ERROR -211
-#define MS_CLOSE_ERROR -212
-#define MS_GETHOSTBYNAME_ERROR -220
-#define MS_GETHOSTNAME_ERROR -221
-#define MS_TIMEOUT_ERROR -231
+#define MS_NO_ERROR 0
+#define MS_SOCKET_ERROR -201
+#define MS_CONNECT_ERROR -203
+#define MS_WRITE_ERROR -210
+#define MS_READ_ERROR -211
+#define MS_CLOSE_ERROR -212
+#define MS_GETHOSTBYNAME_ERROR -220
+#define MS_GETHOSTNAME_ERROR -221
+#define MS_TIMEOUT_ERROR -231
// see master server code for the values
-#define ADD_SERVER_MSG 101
-#define REMOVE_SERVER_MSG 103
-#define ADD_SERVERv2_MSG 104
-#define GET_SERVER_MSG 200
-#define GET_SHORT_SERVER_MSG 205
-#define ASK_SERVER_MSG 206
-#define ANSWER_ASK_SERVER_MSG 207
-#define ASK_SERVER_MSG 206
-#define ANSWER_ASK_SERVER_MSG 207
-#define GET_MOTD_MSG 208
-#define SEND_MOTD_MSG 209
-#define GET_ROOMS_MSG 210
-#define SEND_ROOMS_MSG 211
-#define GET_ROOMS_HOST_MSG 212
-#define GET_VERSION_MSG 213
-#define SEND_VERSION_MSG 214
-#define GET_BANNED_MSG 215 // Someone's been baaaaaad!
-#define PING_SERVER_MSG 216
+#define ADD_SERVER_MSG 101
+#define REMOVE_SERVER_MSG 103
+#define ADD_SERVERv2_MSG 104
+#define GET_SERVER_MSG 200
+#define GET_SHORT_SERVER_MSG 205
+#define ASK_SERVER_MSG 206
+#define ANSWER_ASK_SERVER_MSG 207
+#define ASK_SERVER_MSG 206
+#define ANSWER_ASK_SERVER_MSG 207
+#define GET_MOTD_MSG 208
+#define SEND_MOTD_MSG 209
+#define GET_ROOMS_MSG 210
+#define SEND_ROOMS_MSG 211
+#define GET_ROOMS_HOST_MSG 212
+#define GET_VERSION_MSG 213
+#define SEND_VERSION_MSG 214
+#define GET_BANNED_MSG 215 // Someone's been baaaaaad!
+#define PING_SERVER_MSG 216
#define HEADER_SIZE (sizeof (INT32)*4)
@@ -217,7 +217,6 @@ UINT16 current_port = 0;
#if (defined (_WIN32) || defined (_WIN32_WCE) || defined (_WIN32)) && !defined (NONET)
typedef SOCKET SOCKET_TYPE;
-#define BADSOCKET INVALID_SOCKET
#define ERRSOCKET (SOCKET_ERROR)
#else
#if (defined (__unix__) && !defined (MSDOS)) || defined (__APPLE__) || defined (__HAIKU__) || defined (_PS3)
@@ -225,7 +224,6 @@ typedef int SOCKET_TYPE;
#else
typedef unsigned long SOCKET_TYPE;
#endif
-#define BADSOCKET (SOCKET_TYPE)(~0)
#define ERRSOCKET (-1)
#endif
@@ -234,7 +232,7 @@ typedef int socklen_t;
#endif
#ifndef NONET
-static SOCKET_TYPE socket_fd = BADSOCKET; // WINSOCK socket
+static SOCKET_TYPE socket_fd = ERRSOCKET; // WINSOCK socket
static struct timeval select_timeout;
static fd_set wset;
static size_t recvfull(SOCKET_TYPE s, char *buf, size_t len, int flags);
@@ -265,9 +263,9 @@ void AddMServCommands(void)
static void CloseConnection(void)
{
#ifndef NONET
- if (socket_fd != (SOCKET_TYPE)ERRSOCKET && socket_fd != BADSOCKET)
+ if (socket_fd != (SOCKET_TYPE)ERRSOCKET)
close(socket_fd);
- socket_fd = BADSOCKET;
+ socket_fd = ERRSOCKET;
#endif
}
@@ -385,7 +383,7 @@ static INT32 MS_Connect(const char *ip_addr, const char *str_port, INT32 async)
while (runp != NULL)
{
socket_fd = socket(runp->ai_family, runp->ai_socktype, runp->ai_protocol);
- if (socket_fd != BADSOCKET && socket_fd != (SOCKET_TYPE)ERRSOCKET)
+ if (socket_fd != (SOCKET_TYPE)ERRSOCKET)
{
if (async) // do asynchronous connection
{
diff --git a/src/p_mobj.c b/src/p_mobj.c
index f85027cd..286fa292 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -9296,6 +9296,16 @@ void P_RespawnSpecials(void)
if (mthing->type == mobjinfo[i].doomednum)
break;
+ if (i == NUMMOBJTYPES) // prevent creation of objects with this type -- Monster Iestyn 17/12/17
+ {
+ // 3D Mode start Thing is unlikely to be added to the que,
+ // so don't bother checking for that specific type
+ CONS_Alert(CONS_WARNING, M_GetText("P_RespawnSpecials: Unknown thing type %d attempted to respawn at (%d, %d)\n"), mthing->type, mthing->x, mthing->y);
+ // pull it from the que
+ iquetail = (iquetail+1)&(ITEMQUESIZE-1);
+ return;
+ }
+
//CTF rings should continue to respawn as normal rings outside of CTF.
if (gametype != GT_CTF)
{
diff --git a/src/p_spec.c b/src/p_spec.c
index bb5a9c52..36cdda6f 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -5292,13 +5292,11 @@ static void P_AddOldAirbob(sector_t *sec, line_t *sourceline, boolean noadjust)
airbob->vars[2] = FRACUNIT;
if (noadjust)
- {
airbob->vars[7] = airbob->sector->ceilingheight-16*FRACUNIT;
- airbob->vars[6] = airbob->vars[7]
- - (sec->ceilingheight - sec->floorheight);
- }
else
airbob->vars[7] = airbob->sector->ceilingheight - P_AproxDistance(sourceline->dx, sourceline->dy);
+ airbob->vars[6] = airbob->vars[7]
+ - (sec->ceilingheight - sec->floorheight);
airbob->vars[3] = airbob->vars[2];
diff --git a/src/sdl/i_main.c b/src/sdl/i_main.c
index c4809587..d0368dd7 100644
--- a/src/sdl/i_main.c
+++ b/src/sdl/i_main.c
@@ -148,7 +148,9 @@ int main(int argc, char **argv)
LoadLibraryA("exchndl.dll");
}
}
+#ifndef __MINGW32__
prevExceptionFilter = SetUnhandledExceptionFilter(RecordExceptionInfo);
+#endif
MakeCodeWritable();
#endif
// startup SRB2
diff --git a/src/sdl/macosx/Srb2mac.xcodeproj/project.pbxproj b/src/sdl/macosx/Srb2mac.xcodeproj/project.pbxproj
index 68391f99..eaac87de 100644
--- a/src/sdl/macosx/Srb2mac.xcodeproj/project.pbxproj
+++ b/src/sdl/macosx/Srb2mac.xcodeproj/project.pbxproj
@@ -1214,7 +1214,7 @@
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- CURRENT_PROJECT_VERSION = 2.1.19;
+ CURRENT_PROJECT_VERSION = 2.1.20;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
NORMALSRB2,
@@ -1226,7 +1226,7 @@
C01FCF4C08A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- CURRENT_PROJECT_VERSION = 2.1.19;
+ CURRENT_PROJECT_VERSION = 2.1.20;
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_PREPROCESSOR_DEFINITIONS = (
diff --git a/src/sdl12/macosx/Srb2mac.xcodeproj/project.pbxproj b/src/sdl12/macosx/Srb2mac.xcodeproj/project.pbxproj
index fada7849..574161c6 100644
--- a/src/sdl12/macosx/Srb2mac.xcodeproj/project.pbxproj
+++ b/src/sdl12/macosx/Srb2mac.xcodeproj/project.pbxproj
@@ -1214,7 +1214,7 @@
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- CURRENT_PROJECT_VERSION = 2.1.19;
+ CURRENT_PROJECT_VERSION = 2.1.20;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
NORMALSRB2,
@@ -1226,7 +1226,7 @@
C01FCF4C08A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- CURRENT_PROJECT_VERSION = 2.1.19;
+ CURRENT_PROJECT_VERSION = 2.1.20;
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_PREPROCESSOR_DEFINITIONS = (
diff --git a/src/win32/Makefile.cfg b/src/win32/Makefile.cfg
index 3d7af7fe..da66e996 100644
--- a/src/win32/Makefile.cfg
+++ b/src/win32/Makefile.cfg
@@ -64,7 +64,7 @@ endif
ifdef SDL
i_system_o+=$(OBJDIR)/SRB2.res
- i_main_o+=$(OBJDIR)/win_dbg.o
+ #i_main_o+=$(OBJDIR)/win_dbg.o
ifndef NOHW
OPTS+=-DUSE_WGL_SWAP
endif
@@ -81,7 +81,8 @@ endif
i_net_o=$(OBJDIR)/win_net.o
i_system_o=$(OBJDIR)/win_sys.o $(OBJDIR)/SRB2.res
i_sound_o=$(OBJDIR)/win_snd.o
- i_main_o=$(OBJDIR)/win_dbg.o $(OBJDIR)/win_main.o
+ i_main_o=$(OBJDIR)/win_main.o
+ #i_main_o+=$(OBJDIR)/win_dbg.o
OBJS=$(OBJDIR)/dx_error.o $(OBJDIR)/fabdxlib.o $(OBJDIR)/win_vid.o $(OBJDIR)/win_dll.o
endif
diff --git a/src/win32/win_main.c b/src/win32/win_main.c
index 943c5528..a37c49fc 100644
--- a/src/win32/win_main.c
+++ b/src/win32/win_main.c
@@ -244,7 +244,7 @@ static LRESULT CALLBACK MainWndproc(HWND hWnd, UINT message, WPARAM wParam, LPAR
D_PostEvent(&ev);
return TRUE;
}
-
+ break;
case WM_XBUTTONDOWN:
if (nodinput)
{
@@ -253,7 +253,7 @@ static LRESULT CALLBACK MainWndproc(HWND hWnd, UINT message, WPARAM wParam, LPAR
D_PostEvent(&ev);
return TRUE;
}
-
+ break;
case WM_MOUSEWHEEL:
//I_OutputMsg("MW_WHEEL dispatched.\n");
ev.type = ev_keydown;
@@ -666,7 +666,9 @@ int WINAPI WinMain (HINSTANCE hInstance,
#endif
LoadLibraryA("exchndl.dll");
+#ifndef __MINGW32__
prevExceptionFilter = SetUnhandledExceptionFilter(RecordExceptionInfo);
+#endif
Result = HandledWinMain(hInstance);
#ifdef BUGTRAP
diff --git a/src/win32/win_sys.c b/src/win32/win_sys.c
index 97b0a79f..882e3e58 100644
--- a/src/win32/win_sys.c
+++ b/src/win32/win_sys.c
@@ -2581,7 +2581,7 @@ acquire:
UINT64 newbuttons = joybuttons ^ lastjoybuttons;
lastjoybuttons = joybuttons;
- for (i = 0; i < JOYBUTTONS && i < JOYBUTTONS_MAX; i++, j <<= 1)
+ for (i = 0; i < JOYBUTTONS_MIN; i++, j <<= 1)
{
if (newbuttons & j) // button changed state?
{
@@ -2601,7 +2601,7 @@ acquire:
UINT64 newhats = joyhats ^ lastjoyhats;
lastjoyhats = joyhats;
- for (i = 0; i < JOYHATS*4 && i < JOYHATS_MAX*4; i++, j <<= 1)
+ for (i = 0; i < JOYHATS_MIN*4; i++, j <<= 1)
{
if (newhats & j) // button changed state?
{
@@ -2825,7 +2825,7 @@ acquire:
UINT64 newbuttons = joybuttons ^ lastjoy2buttons;
lastjoy2buttons = joybuttons;
- for (i = 0; i < JOYBUTTONS && i < JOYBUTTONS_MAX; i++, j <<= 1)
+ for (i = 0; i < JOYBUTTONS_MIN; i++, j <<= 1)
{
if (newbuttons & j) // button changed state?
{
@@ -2845,7 +2845,7 @@ acquire:
UINT64 newhats = joyhats ^ lastjoy2hats;
lastjoy2hats = joyhats;
- for (i = 0; i < JOYHATS*4 && i < JOYHATS_MAX*4; i++, j <<= 1)
+ for (i = 0; i < JOYHATS_MIN*4; i++, j <<= 1)
{
if (newhats & j) // button changed state?
{
diff --git a/src/win32/win_vid.c b/src/win32/win_vid.c
index 0960bb6d..a9dd097b 100644
--- a/src/win32/win_vid.c
+++ b/src/win32/win_vid.c
@@ -322,6 +322,7 @@ static inline boolean I_SkipFrame(void)
case GS_LEVEL:
if (!paused)
return false;
+ /* FALLTHRU */
case GS_TIMEATTACK:
#ifndef CLIENT_LOADINGSCREEN
case GS_WAITINGPLAYERS: