mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-11 13:10:45 +00:00
(svn r18831) -Change [FS#3537]: do not go into the crashlog handler in case loading a savegame misses with missing NewGRFs. This way the load game crash handler gets better visibility and the user is instructed to find the missing NewGRFs before filing a bug report
This commit is contained in:
parent
7e7ec4f250
commit
251ffaa000
@ -13,6 +13,7 @@
|
|||||||
#include "../../crashlog.h"
|
#include "../../crashlog.h"
|
||||||
#include "../../string_func.h"
|
#include "../../string_func.h"
|
||||||
#include "../../gamelog.h"
|
#include "../../gamelog.h"
|
||||||
|
#include "../../saveload/saveload.h"
|
||||||
#include "macos.h"
|
#include "macos.h"
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@ -230,6 +231,13 @@ void CDECL HandleCrash(int signum)
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SaveloadCrashWithMissingNewGRFs()) {
|
||||||
|
ShowMacDialog("A serious fault condition occured in the game. The game will shut down.",
|
||||||
|
"As you loaded an savegame for which you do not have the required NewGRFs no crash information will be generated.\n",
|
||||||
|
"Quit");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
CrashLogOSX log(signum);
|
CrashLogOSX log(signum);
|
||||||
log.MakeCrashLog();
|
log.MakeCrashLog();
|
||||||
log.DisplayCrashDialog();
|
log.DisplayCrashDialog();
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include "../../crashlog.h"
|
#include "../../crashlog.h"
|
||||||
#include "../../string_func.h"
|
#include "../../string_func.h"
|
||||||
#include "../../gamelog.h"
|
#include "../../gamelog.h"
|
||||||
|
#include "../../saveload/saveload.h"
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
@ -156,6 +157,13 @@ static void CDECL HandleCrash(int signum)
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SaveloadCrashWithMissingNewGRFs()) {
|
||||||
|
printf("A serious fault condition occured in the game. The game will shut down.\n");
|
||||||
|
printf("As you loaded an savegame for which you do not have the required NewGRFs\n");
|
||||||
|
printf("no crash information will be generated.\n");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
CrashLogUnix log(signum);
|
CrashLogUnix log(signum);
|
||||||
log.MakeCrashLog();
|
log.MakeCrashLog();
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include "../../fileio_func.h"
|
#include "../../fileio_func.h"
|
||||||
#include "../../strings_func.h"
|
#include "../../strings_func.h"
|
||||||
#include "../../gamelog.h"
|
#include "../../gamelog.h"
|
||||||
|
#include "../../saveload/saveload.h"
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
@ -378,6 +379,15 @@ static LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS *ep)
|
|||||||
ExitProcess(3);
|
ExitProcess(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SaveloadCrashWithMissingNewGRFs()) {
|
||||||
|
static const TCHAR _saveload_crash[] =
|
||||||
|
_T("A serious fault condition occured in the game. The game will shut down.\n")
|
||||||
|
_T("As you loaded an savegame for which you do not have the required NewGRFs\n")
|
||||||
|
_T("no crash information will be generated.\n");
|
||||||
|
MessageBox(NULL, _saveload_crash, _T("Fatal Application Failure"), MB_ICONERROR);
|
||||||
|
ExitProcess(3);
|
||||||
|
}
|
||||||
|
|
||||||
CrashLogWindows *log = new CrashLogWindows(ep);
|
CrashLogWindows *log = new CrashLogWindows(ep);
|
||||||
CrashLogWindows::current = log;
|
CrashLogWindows::current = log;
|
||||||
log->FillCrashLog(log->crashlog, lastof(log->crashlog));
|
log->FillCrashLog(log->crashlog, lastof(log->crashlog));
|
||||||
|
@ -311,6 +311,19 @@ static const GRFIdentifier *GetOverriddenIdentifier(const GRFConfig *c)
|
|||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Was the saveload crash because of missing NewGRFs? */
|
||||||
|
static bool _saveload_crash_with_missing_newgrfs = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Did loading the savegame cause a crash? If so,
|
||||||
|
* were NewGRFs missing?
|
||||||
|
* @return when the saveload crashed due to missing NewGRFs.
|
||||||
|
*/
|
||||||
|
bool SaveloadCrashWithMissingNewGRFs()
|
||||||
|
{
|
||||||
|
return _saveload_crash_with_missing_newgrfs;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Signal handler used to give a user a more useful report for crashes during
|
* Signal handler used to give a user a more useful report for crashes during
|
||||||
* the savegame loading process; especially when there's problems with the
|
* the savegame loading process; especially when there's problems with the
|
||||||
@ -342,11 +355,13 @@ static void CDECL HandleSavegameLoadCrash(int signum)
|
|||||||
char buf[40];
|
char buf[40];
|
||||||
md5sumToString(buf, lastof(buf), replaced->md5sum);
|
md5sumToString(buf, lastof(buf), replaced->md5sum);
|
||||||
p += seprintf(p, lastof(buffer), "NewGRF %08X (checksum %s) not found.\n Loaded NewGRF \"%s\" with same GRF ID instead.\n", BSWAP32(c->grfid), buf, c->filename);
|
p += seprintf(p, lastof(buffer), "NewGRF %08X (checksum %s) not found.\n Loaded NewGRF \"%s\" with same GRF ID instead.\n", BSWAP32(c->grfid), buf, c->filename);
|
||||||
|
_saveload_crash_with_missing_newgrfs = true;
|
||||||
}
|
}
|
||||||
if (c->status == GCS_NOT_FOUND) {
|
if (c->status == GCS_NOT_FOUND) {
|
||||||
char buf[40];
|
char buf[40];
|
||||||
md5sumToString(buf, lastof(buf), c->md5sum);
|
md5sumToString(buf, lastof(buf), c->md5sum);
|
||||||
p += seprintf(p, lastof(buffer), "NewGRF %08X (%s) not found; checksum %s.\n", BSWAP32(c->grfid), c->filename, buf);
|
p += seprintf(p, lastof(buffer), "NewGRF %08X (%s) not found; checksum %s.\n", BSWAP32(c->grfid), c->filename, buf);
|
||||||
|
_saveload_crash_with_missing_newgrfs = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -324,6 +324,8 @@ void SlArray(void *array, size_t length, VarType conv);
|
|||||||
void SlObject(void *object, const SaveLoad *sld);
|
void SlObject(void *object, const SaveLoad *sld);
|
||||||
bool SlObjectMember(void *object, const SaveLoad *sld);
|
bool SlObjectMember(void *object, const SaveLoad *sld);
|
||||||
|
|
||||||
|
bool SaveloadCrashWithMissingNewGRFs();
|
||||||
|
|
||||||
extern char _savegame_format[8];
|
extern char _savegame_format[8];
|
||||||
|
|
||||||
#endif /* SAVELOAD_H */
|
#endif /* SAVELOAD_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user