@@ -44,13 +44,22 @@ namespace OpenXcom
4444 */
4545LoadState::LoadState (Game *game, bool geo) : SavedGameState(game, geo)
4646{
47- _geo = geo;
4847 // Set up objects
4948 _txtTitle->setText (_game->getLanguage ()->getString (" STR_SELECT_GAME_TO_LOAD" ));
50-
5149 _lstSaves->onMousePress ((ActionHandler)&LoadState::lstSavesPress);
5250}
5351
52+ /* *
53+ * Initializes all the elements in the Load Game screen.
54+ * @param game Pointer to the core game.
55+ * @param geo True to use Geoscape palette, false to use Battlescape palette.
56+ * @param showMsg True if need to show messages like "Loading game" or "Saving game".
57+ */
58+ LoadState::LoadState (Game *game, bool geo, bool showMsg) : SavedGameState(game, geo, showMsg)
59+ {
60+ quickLoad ();
61+ }
62+
5463/* *
5564 *
5665 */
@@ -118,4 +127,55 @@ void LoadState::lstSavesPress(Action *action)
118127 }
119128}
120129
130+ /* *
131+ * Quick load game.
132+ */
133+ void LoadState::quickLoad ()
134+ {
135+ if (_showMsg) updateStatus (" STR_LOADING_GAME" );
136+
137+ #ifdef _WIN32
138+ std::string filename = Language::wstrToCp (L" autosave" );
139+ #else
140+ std::string filename = Language::wstrToUtf8 (L" autosave" );
141+ #endif
142+
143+ SavedGame *s = new SavedGame ();
144+ try
145+ {
146+ s->load (filename, _game->getRuleset ());
147+ _game->setSavedGame (s);
148+ _game->setState (new GeoscapeState (_game));
149+ if (_game->getSavedGame ()->getBattleGame () != 0 )
150+ {
151+ _game->getSavedGame ()->getBattleGame ()->loadMapResources (_game->getResourcePack ());
152+ BattlescapeState *bs = new BattlescapeState (_game);
153+ _game->pushState (bs);
154+ _game->getSavedGame ()->getBattleGame ()->setBattleState (bs);
155+ }
156+ }
157+ catch (Exception &e)
158+ {
159+ Log (LOG_ERROR ) << e.what ();
160+ std::wstringstream error;
161+ error << _game->getLanguage ()->getString (" STR_LOAD_UNSUCCESSFUL" ) << L' \x02 ' << Language::utf8ToWstr (e.what ());
162+ if (_geo)
163+ _game->pushState (new ErrorMessageState (_game, error.str (), Palette::blockOffset (8 )+10 , " BACK01.SCR" , 6 ));
164+ else
165+ _game->pushState (new ErrorMessageState (_game, error.str (), Palette::blockOffset (0 ), " TAC00.SCR" , -1 ));
166+ delete s;
167+ }
168+ catch (YAML ::Exception &e)
169+ {
170+ Log (LOG_ERROR ) << e.what ();
171+ std::wstringstream error;
172+ error << _game->getLanguage ()->getString (" STR_LOAD_UNSUCCESSFUL" ) << L' \x02 ' << Language::utf8ToWstr (e.what ());
173+ if (_geo)
174+ _game->pushState (new ErrorMessageState (_game, error.str (), Palette::blockOffset (8 )+10 , " BACK01.SCR" , 6 ));
175+ else
176+ _game->pushState (new ErrorMessageState (_game, error.str (), Palette::blockOffset (0 ), " TAC00.SCR" , -1 ));
177+ delete s;
178+ }
179+ }
180+
121181}
0 commit comments