diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index a9355785b..ecde001c1 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -4696,7 +4696,7 @@ void CL_ExecInitialConfigs(char *resetcommand) Cbuf_AddText ("exec hexen.rc\n", RESTRICT_LOCAL); else { //they didn't give us an rc file! - Cbuf_AddText ("bind ~ toggleconsole\n", RESTRICT_LOCAL); //in case default.cfg does not exist. :( + Cbuf_AddText ("bind ` toggleconsole\n", RESTRICT_LOCAL); //in case default.cfg does not exist. :( Cbuf_AddText ("exec default.cfg\n", RESTRICT_LOCAL); if (COM_FCheckExists ("config.cfg")) Cbuf_AddText ("exec config.cfg\n", RESTRICT_LOCAL); diff --git a/engine/client/cl_parse.c b/engine/client/cl_parse.c index ced00e495..b9cac3558 100644 --- a/engine/client/cl_parse.c +++ b/engine/client/cl_parse.c @@ -4504,7 +4504,7 @@ void CLQ2_ParseMuzzleFlash (void) float volume; char soundname[64]; - i = MSG_ReadShort (); + i = (unsigned short)(short)MSG_ReadShort (); if (i < 1 || i >= Q2MAX_EDICTS) Host_Error ("CL_ParseMuzzleFlash: bad entity"); @@ -4692,7 +4692,7 @@ void CLQ2_ParseMuzzleFlash2 (void) int ent; int flash_number; - ent = MSG_ReadShort (); + ent = (unsigned short)(short)MSG_ReadShort (); if (ent < 1 || ent >= Q2MAX_EDICTS) Host_EndGame ("CL_ParseMuzzleFlash2: bad entity"); diff --git a/engine/client/clq2_ents.c b/engine/client/clq2_ents.c index 4fc1bb70a..39a13e407 100644 --- a/engine/client/clq2_ents.c +++ b/engine/client/clq2_ents.c @@ -511,11 +511,11 @@ CL_ParseEntityBits Returns the entity number and the header bits ================= */ -int bitcounts[32]; /// just for protocol profiling -int CLQ2_ParseEntityBits (unsigned *bits) +//static int bitcounts[32]; /// just for protocol profiling +static int CLQ2_ParseEntityBits (unsigned int *bits) { unsigned b, total; - int i; +// int i; int number; total = MSG_ReadByte (); @@ -536,12 +536,12 @@ int CLQ2_ParseEntityBits (unsigned *bits) } // count the bits for net profiling - for (i=0 ; i<32 ; i++) +/* for (i=0 ; i<32 ; i++) if (total&(1<= 1300 #define CATCHCRASH #endif -#endif #if !defined(CLIENTONLY) && !defined(SERVERONLY) qboolean isDedicated = false; @@ -561,6 +559,37 @@ DWORD CrashExceptionHandler (qboolean iswatchdog, DWORD exceptionCode, LPEXCEPTI {NULL, NULL} }; + switch(exceptionCode) + { + case EXCEPTION_ACCESS_VIOLATION: + case EXCEPTION_DATATYPE_MISALIGNMENT: + case EXCEPTION_BREAKPOINT: + case EXCEPTION_SINGLE_STEP: + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + case EXCEPTION_FLT_DENORMAL_OPERAND: + case EXCEPTION_FLT_DIVIDE_BY_ZERO: + case EXCEPTION_FLT_INEXACT_RESULT: + case EXCEPTION_FLT_INVALID_OPERATION: + case EXCEPTION_FLT_OVERFLOW: + case EXCEPTION_FLT_STACK_CHECK: + case EXCEPTION_FLT_UNDERFLOW: + case EXCEPTION_INT_DIVIDE_BY_ZERO: + case EXCEPTION_INT_OVERFLOW: + case EXCEPTION_PRIV_INSTRUCTION: + case EXCEPTION_IN_PAGE_ERROR: + case EXCEPTION_ILLEGAL_INSTRUCTION: + case EXCEPTION_NONCONTINUABLE_EXCEPTION: + case EXCEPTION_STACK_OVERFLOW: + case EXCEPTION_INVALID_DISPOSITION: + case EXCEPTION_GUARD_PAGE: + case EXCEPTION_INVALID_HANDLE: +// case EXCEPTION_POSSIBLE_DEADLOCK: + break; + default: + //because windows is a steaming pile of shite, we have to ignore any software-generated exceptions, because most of them are not in fact fatal, *EVEN IF THEY CLAIM TO BE NON-CONTINUABLE* + return exceptionCode; + } + #ifdef PRINTGLARRAYS if (!iswatchdog && qrenderer == QR_OPENGL) DumpGLState(); @@ -778,12 +807,16 @@ DWORD CrashExceptionHandler (qboolean iswatchdog, DWORD exceptionCode, LPEXCEPTI //most compilers do not support __try. perhaps we should avoid its use entirely? LONG CALLBACK nonmsvc_CrashExceptionHandler(PEXCEPTION_POINTERS ExceptionInfo) { - DWORD foo = CrashExceptionHandler(false, ExceptionInfo->ExceptionRecord->ExceptionCode, ExceptionInfo); - - //we have no handler. thus we handle it by exiting. - if (foo == EXCEPTION_EXECUTE_HANDLER) - exit(1); + DWORD foo = EXCEPTION_CONTINUE_SEARCH; + //only bother with fatal non-continuable errors. + if (ExceptionInfo->ExceptionRecord->ExceptionFlags & EXCEPTION_NONCONTINUABLE) + { + foo = CrashExceptionHandler(false, ExceptionInfo->ExceptionRecord->ExceptionCode, ExceptionInfo); + //we have no handler. thus we handle it by exiting. + if (foo == EXCEPTION_EXECUTE_HANDLER) + exit(1); + } return foo; } diff --git a/engine/client/vid_headless.c b/engine/client/vid_headless.c index 130395f2b..397047ce4 100644 --- a/engine/client/vid_headless.c +++ b/engine/client/vid_headless.c @@ -1,4 +1,5 @@ #include "quakedef.h" +#ifndef SERVERONLY #include "gl_draw.h" #include "shader.h" @@ -273,3 +274,4 @@ rendererinfo_t headlessrenderer = Headless_BE_RenderToTextureUpdate2d, "" }; +#endif diff --git a/engine/common/sys_win_threads.c b/engine/common/sys_win_threads.c index de691ab9e..ae2f5c4f7 100644 --- a/engine/common/sys_win_threads.c +++ b/engine/common/sys_win_threads.c @@ -24,6 +24,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "winquake.h" #include +#if defined(_DEBUG) || defined(DEBUG) +#define CATCHCRASH +LONG CALLBACK nonmsvc_CrashExceptionHandler(PEXCEPTION_POINTERS ExceptionInfo); + +#ifdef _MSC_VER //nt5 +PVOID WINAPI AddVectoredExceptionHandler(ULONG FirstHandler, PVECTORED_EXCEPTION_HANDLER VectoredHandler); +#endif +#endif + #if !defined(WINRT) && defined(MULTITHREAD) #include /* Thread creation calls */ @@ -75,6 +84,10 @@ void Sys_SetThreadName(unsigned int dwThreadID, char *threadName) __except(EXCEPTION_EXECUTE_HANDLER) { } + +#ifdef CATCHCRASH + AddVectoredExceptionHandler(true, nonmsvc_CrashExceptionHandler); +#endif } #endif diff --git a/engine/server/pr_cmds.c b/engine/server/pr_cmds.c index 882def7aa..a1945e1c4 100644 --- a/engine/server/pr_cmds.c +++ b/engine/server/pr_cmds.c @@ -10324,6 +10324,7 @@ void PR_DumpPlatform_f(void) {"TRUE", "const float", ALL, NULL, 1}, {"FALSE", "const float", ALL, "File not found...", 0}, + {"M_PI", "const float", ALL, "File not found...", M_PI}, {"MOVETYPE_NONE", "const float", QW|NQ|CS, NULL, MOVETYPE_NONE}, {"MOVETYPE_WALK", "const float", QW|NQ|CS, NULL, MOVETYPE_WALK}, diff --git a/engine/server/svq2_game.c b/engine/server/svq2_game.c index 58d0245b8..32bf51486 100644 --- a/engine/server/svq2_game.c +++ b/engine/server/svq2_game.c @@ -615,7 +615,6 @@ static q2trace_t VARGS SVQ2_Trace (vec3_t start, vec3_t mins, vec3_t maxs, vec3_ VectorCopy(tr.plane.normal, ret.plane.normal); ret.plane.dist = tr.plane.dist; ret.ent = tr.ent; -// memcpy(&ret, &tr, sizeof(q2trace_t)); return ret; } diff --git a/engine/server/world.c b/engine/server/world.c index 18f441989..5ae5c7260 100644 --- a/engine/server/world.c +++ b/engine/server/world.c @@ -1884,7 +1884,6 @@ trace_t WorldQ2_Move (world_t *w, vec3_t start, vec3_t mins, vec3_t maxs, vec3_t // clip to world w->worldmodel->funcs.NativeTrace(w->worldmodel, 0, 0, NULL, start, end, mins, maxs, hitcontentsmask, &clip.trace); -// clip.trace = CM_BoxTrace(w->worldmodel, start, end, mins, maxs, hitcontentsmask);//SVQ2_ClipMoveToEntity ( ge->edicts, start, mins, maxs, end ); clip.trace.ent = ge->edicts; if (clip.trace.fraction == 0)