summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--saveload.c8
-rw-r--r--sdl.c12
-rw-r--r--settings.c1
-rw-r--r--variables.h1
-rw-r--r--win32.c12
5 files changed, 30 insertions, 4 deletions
diff --git a/saveload.c b/saveload.c
index dda3eefc1..ffb6fd280 100644
--- a/saveload.c
+++ b/saveload.c
@@ -1146,6 +1146,14 @@ bool EmergencySave()
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)
{
diff --git a/sdl.c b/sdl.c
index 7e41d9b52..88940d091 100644
--- a/sdl.c
+++ b/sdl.c
@@ -434,6 +434,8 @@ static uint32 ConvertSdlKeyIntoMy(SDL_keysym *sym)
return (key << 16) + sym->unicode;
}
+void DoExitSave();
+
static int PollEvent(void)
{
SDL_Event ev;
@@ -500,9 +502,13 @@ static int PollEvent(void)
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;
diff --git a/settings.c b/settings.c
index d171554a1..58edcd216 100644
--- a/settings.c
+++ b/settings.c
@@ -779,6 +779,7 @@ static const SettingDesc patch_player_settings[] = {
{"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},
diff --git a/variables.h b/variables.h
index 9756d5047..667bd4a83 100644
--- a/variables.h
+++ b/variables.h
@@ -148,6 +148,7 @@ typedef struct Patches {
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
diff --git a/win32.c b/win32.c
index 7442764ca..0cbb38b5a 100644
--- a/win32.c
+++ b/win32.c
@@ -181,6 +181,8 @@ static void ClientSizeChanged(int w, int h)
}
}
+void DoExitSave();
+
static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg) {
@@ -224,7 +226,15 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
}
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: