* Loads the specified save. */
| 121 | * Loads the specified save. |
| 122 | */ |
| 123 | void LoadGameState::init() |
| 124 | { |
| 125 | State::init(); |
| 126 | |
| 127 | // Ignore quick loads without a save available |
| 128 | if (_filename == SavedGame::QUICKSAVE && !CrossPlatform::fileExists(Options::getUserFolder() + _filename)) |
| 129 | { |
| 130 | _game->popState(); |
| 131 | return; |
| 132 | } |
| 133 | |
| 134 | // Make sure message is shown (if any) |
| 135 | blit(); |
| 136 | _game->getScreen()->flip(); |
| 137 | _game->popState(); |
| 138 | |
| 139 | // Load the game |
| 140 | SavedGame *s = new SavedGame(); |
| 141 | try |
| 142 | { |
| 143 | s->load(_filename, _game->getRuleset()); |
| 144 | _game->setSavedGame(s); |
| 145 | Options::baseXResolution = Options::baseXGeoscape; |
| 146 | Options::baseYResolution = Options::baseYGeoscape; |
| 147 | _game->getScreen()->resetDisplay(false); |
| 148 | _game->setState(new GeoscapeState(_game)); |
| 149 | if (_game->getSavedGame()->getSavedBattle() != 0) |
| 150 | { |
| 151 | _game->getSavedGame()->getSavedBattle()->loadMapResources(_game); |
| 152 | Options::baseXResolution = Options::baseXBattlescape; |
| 153 | Options::baseYResolution = Options::baseYBattlescape; |
| 154 | _game->getScreen()->resetDisplay(false); |
| 155 | BattlescapeState *bs = new BattlescapeState(_game); |
| 156 | _game->pushState(bs); |
| 157 | _game->getSavedGame()->getSavedBattle()->setBattleState(bs); |
| 158 | } |
| 159 | } |
| 160 | catch (Exception &e) |
| 161 | { |
| 162 | Log(LOG_ERROR) << e.what(); |
| 163 | std::wostringstream error; |
| 164 | error << tr("STR_LOAD_UNSUCCESSFUL") << L'\x02' << Language::fsToWstr(e.what()); |
| 165 | if (_origin != OPT_BATTLESCAPE) |
| 166 | _game->pushState(new ErrorMessageState(_game, error.str(), _palette, Palette::blockOffset(8) + 10, "BACK01.SCR", 6)); |
| 167 | else |
| 168 | _game->pushState(new ErrorMessageState(_game, error.str(), _palette, Palette::blockOffset(0), "TAC00.SCR", -1)); |
| 169 | |
| 170 | if (_game->getSavedGame() == s) |
| 171 | _game->setSavedGame(0); |
| 172 | else |
| 173 | delete s; |
| 174 | } |
| 175 | catch (YAML::Exception &e) |
| 176 | { |
| 177 | Log(LOG_ERROR) << e.what(); |
| 178 | std::wostringstream error; |
| 179 | error << tr("STR_LOAD_UNSUCCESSFUL") << L'\x02' << Language::fsToWstr(e.what()); |
| 180 | if (_origin != OPT_BATTLESCAPE) |
nothing calls this directly
no test coverage detected