--- a/saveload.c Mon Dec 13 21:28:38 2004 +0000
+++ b/saveload.c Mon Dec 13 22:10:12 2004 +0000
@@ -1146,6 +1146,14 @@
return true;
}
+void DoExitSave()
+{
+ char buf[200];
+ sprintf(buf, "%s%sexit.sav", _path.autosave_dir, PATHSEP);
+ debug(buf);
+ SaveOrLoad(buf, SL_SAVE);
+}
+
// not used right now, but could be used if extensions of savegames are garbled
/*int GetSavegameType(char *file)
{
--- a/sdl.c Mon Dec 13 21:28:38 2004 +0000
+++ b/sdl.c Mon Dec 13 22:10:12 2004 +0000
@@ -434,6 +434,8 @@
return (key << 16) + sym->unicode;
}
+void DoExitSave();
+
static int PollEvent(void)
{
SDL_Event ev;
@@ -500,9 +502,13 @@
case SDL_QUIT:
// do not ask to quit on the main screen
- if (_game_mode != GM_MENU)
- AskExitGame();
- else
+ if (_game_mode != GM_MENU) {
+ if(_patches.autosave_on_exit) {
+ DoExitSave();
+ return ML_QUIT;
+ } else
+ AskExitGame();
+ } else
return ML_QUIT;
break;
--- a/settings.c Mon Dec 13 21:28:38 2004 +0000
+++ b/settings.c Mon Dec 13 22:10:12 2004 +0000
@@ -779,6 +779,7 @@
{"errmsg_duration", SDT_UINT8, (void*)5, &_patches.errmsg_duration, NULL},
{"toolbar_pos", SDT_UINT8, (void*)0, &_patches.toolbar_pos, NULL},
{"keep_all_autosave", SDT_BOOL, (void*)false, &_patches.keep_all_autosave, NULL},
+ {"autosave_on_exit", SDT_BOOL, (void*)false, &_patches.autosave_on_exit, NULL},
{"bridge_pillars", SDT_BOOL, (void*)true, &_patches.bridge_pillars, NULL},
{"invisible_trees", SDT_BOOL, (void*)false, &_patches.invisible_trees, NULL},
--- a/variables.h Mon Dec 13 21:28:38 2004 +0000
+++ b/variables.h Mon Dec 13 22:10:12 2004 +0000
@@ -148,6 +148,7 @@
uint32 colored_news_date; // when does newspaper become colored?
bool keep_all_autosave; // name the autosave in a different way.
+ bool autosave_on_exit; // save an autosave when you quit the game, but do not ask "Do you really want to quit?"
bool extra_dynamite; // extra dynamite
bool never_expire_vehicles; // never expire vehicles
--- a/win32.c Mon Dec 13 21:28:38 2004 +0000
+++ b/win32.c Mon Dec 13 22:10:12 2004 +0000
@@ -181,6 +181,8 @@
}
}
+void DoExitSave();
+
static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg) {
@@ -224,7 +226,15 @@
}
case WM_CLOSE:
- AskExitGame();
+ // do not ask to quit on the main screen
+ if (_game_mode != GM_MENU) {
+ if(_patches.autosave_on_exit) {
+ DoExitSave();
+ _exit_game = true;
+ } else
+ AskExitGame();
+ } else
+ return ML_QUIT;
return 0;
case WM_LBUTTONDOWN: