|
|
@@ -1,4 +1,5 @@ |
|
|
#include <direct.h> |
|
|
#include <csignal> |
|
|
#include <Windows.h> |
|
|
#include "common.h" |
|
|
#include "patcher.h" |
|
|
@@ -136,6 +137,79 @@ void __declspec(naked) HeadlightsFix() |
|
|
} |
|
|
} |
|
|
|
|
|
const int re3_buffsize = 1024; |
|
|
static char re3_buff[re3_buffsize]; |
|
|
|
|
|
void re3_assert(const char *expr, const char *filename, unsigned int lineno, const char *func) |
|
|
{ |
|
|
int nCode; |
|
|
|
|
|
strcpy_s(re3_buff, re3_buffsize, "Assertion failed!" ); |
|
|
strcat_s(re3_buff, re3_buffsize, "\n" ); |
|
|
|
|
|
strcat_s(re3_buff, re3_buffsize, "File: "); |
|
|
strcat_s(re3_buff, re3_buffsize, filename ); |
|
|
strcat_s(re3_buff, re3_buffsize, "\n" ); |
|
|
|
|
|
strcat_s(re3_buff, re3_buffsize, "Line: " ); |
|
|
_itoa_s( lineno, re3_buff + strlen(re3_buff), re3_buffsize - strlen(re3_buff), 10 ); |
|
|
strcat_s(re3_buff, re3_buffsize, "\n"); |
|
|
|
|
|
strcat_s(re3_buff, re3_buffsize, "Function: "); |
|
|
strcat_s(re3_buff, re3_buffsize, func ); |
|
|
strcat_s(re3_buff, re3_buffsize, "\n" ); |
|
|
|
|
|
strcat_s(re3_buff, re3_buffsize, "Expression: "); |
|
|
strcat_s(re3_buff, re3_buffsize, expr); |
|
|
strcat_s(re3_buff, re3_buffsize, "\n"); |
|
|
|
|
|
strcat_s(re3_buff, re3_buffsize, "\n" ); |
|
|
strcat_s(re3_buff, re3_buffsize, "(Press Retry to debug the application)"); |
|
|
|
|
|
|
|
|
nCode = ::MessageBoxA(NULL, re3_buff, "RE3 Assertion Failed!", |
|
|
MB_ABORTRETRYIGNORE|MB_ICONHAND|MB_SETFOREGROUND|MB_TASKMODAL); |
|
|
|
|
|
if (nCode == IDABORT) |
|
|
{ |
|
|
raise(SIGABRT); |
|
|
_exit(3); |
|
|
} |
|
|
|
|
|
if (nCode == IDRETRY) |
|
|
{ |
|
|
__debugbreak(); |
|
|
return; |
|
|
} |
|
|
|
|
|
if (nCode == IDIGNORE) |
|
|
return; |
|
|
|
|
|
abort(); |
|
|
} |
|
|
|
|
|
void re3_debug(char *format, ...) |
|
|
{ |
|
|
va_list va; |
|
|
va_start(va, format); |
|
|
vsprintf_s(re3_buff, re3_buffsize, format, va); |
|
|
va_end(va); |
|
|
|
|
|
printf("%s\n", re3_buff); |
|
|
} |
|
|
|
|
|
void re3_trace(const char *filename, unsigned int lineno, const char *func, char *format, ...) |
|
|
{ |
|
|
char buff[re3_buffsize *2]; |
|
|
va_list va; |
|
|
va_start(va, format); |
|
|
vsprintf_s(re3_buff, re3_buffsize, format, va); |
|
|
va_end(va); |
|
|
|
|
|
sprintf_s(buff, re3_buffsize * 2, "[%s.%s:%d]: %s", filename, func, lineno, re3_buff); |
|
|
|
|
|
OutputDebugStringA(buff); |
|
|
} |
|
|
|
|
|
void |
|
|
patch() |
|
|
|