From 77e882c3bd01976039b01c1c662f2e61fc10f132 Mon Sep 17 00:00:00 2001 From: dominik Date: Mon, 13 Dec 2004 22:10:12 +0000 Subject: [PATCH] (svn r1076) Feature: Patch setting to autosave the game on exit If you set autosave_on_exit = true in openttd.cfg, your game will be saved as exit.sav in the autosave folder and you won't be asked if you want to quit the game any more. --- saveload.c | 8 ++++++++ sdl.c | 12 +++++++++--- settings.c | 1 + variables.h | 1 + win32.c | 12 +++++++++++- 5 files changed, 30 insertions(+), 4 deletions(-) diff --git a/saveload.c b/saveload.c index dda3eefc1b..ffb6fd2800 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 7e41d9b52d..88940d0913 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 d171554a1c..58edcd2160 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 9756d50478..667bd4a834 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 7442764caf..0cbb38b5a5 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: