diff options
-rw-r--r-- | engines/startrek/saveload.cpp | 7 | ||||
-rw-r--r-- | engines/startrek/startrek.cpp | 45 | ||||
-rw-r--r-- | engines/startrek/startrek.h | 2 |
3 files changed, 37 insertions, 17 deletions
diff --git a/engines/startrek/saveload.cpp b/engines/startrek/saveload.cpp index f42d2f128b..bb24587bb2 100644 --- a/engines/startrek/saveload.cpp +++ b/engines/startrek/saveload.cpp @@ -184,14 +184,15 @@ bool StarTrekEngine::saveOrLoadGameData(Common::SeekableReadStream *in, Common:: ser.syncAsUint16LE(_gameMode); // TODO: sub_1d8eb (save) / sub_1d958 (load) (probably bridge / space combat state) - ser.syncString(_sound->_loadedMidiFilename); + Common::String midiFilename = _sound->_loadedMidiFilename; + ser.syncString(midiFilename); ser.syncAsSint16LE(_sound->_loopingMidiTrack); if (ser.isLoading()) { - if (_sound->_loadedMidiFilename.empty()) + if (midiFilename.empty()) _sound->clearAllMidiSlots(); else { - _sound->loadMusicFile(_sound->_loadedMidiFilename); + _sound->loadMusicFile(midiFilename); _sound->playMidiMusicTracks(_sound->_loopingMidiTrack, _sound->_loopingMidiTrack); } } diff --git a/engines/startrek/startrek.cpp b/engines/startrek/startrek.cpp index f5835d2adb..2086b36e97 100644 --- a/engines/startrek/startrek.cpp +++ b/engines/startrek/startrek.cpp @@ -119,27 +119,46 @@ Common::Error StarTrekEngine::run() { initGraphics(SCREEN_WIDTH, SCREEN_HEIGHT, &format); initializeEventsAndMouse(); - _frameIndex = 0; - playIntro(); - debug("DONE"); + bool shouldPlayIntro = false; + bool loadedSave = false; + + if (ConfMan.hasKey("save_slot")) { + if (!loadGame(ConfMan.getInt("save_slot"))) + error("Failed to load savegame %d", ConfMan.getInt("save_slot")); + shouldPlayIntro = false; + loadedSave = true; + _roomIndexToLoad = -1; + } + + if (!loadedSave) { + if (shouldPlayIntro) { + _frameIndex = 0; + playIntro(); + } - _frameIndex = 0; + _frameIndex = 0; - _gameMode = -1; - _lastGameMode = -1; + _gameMode = -1; + _lastGameMode = -1; + } - runGameMode(GAMEMODE_AWAYMISSION); + if (loadedSave) + runGameMode(_gameMode, true); + else + runGameMode(GAMEMODE_AWAYMISSION, false); return Common::kNoError; } -Common::Error StarTrekEngine::runGameMode(int mode) { - _gameMode = mode; +Common::Error StarTrekEngine::runGameMode(int mode, bool resume) { + if (!resume) { // Only run this if not just resuming from a savefile + _gameMode = mode; - _sound->stopAllVocSounds(); + _sound->stopAllVocSounds(); - _resetGameMode = true; - if (_gameMode == GAMEMODE_START) - _gameMode = GAMEMODE_BRIDGE; + _resetGameMode = true; + if (_gameMode == GAMEMODE_START) + _gameMode = GAMEMODE_BRIDGE; + } while (true) { if (_resetGameMode) { diff --git a/engines/startrek/startrek.h b/engines/startrek/startrek.h index 6f98db2b64..ef2ddf195b 100644 --- a/engines/startrek/startrek.h +++ b/engines/startrek/startrek.h @@ -234,7 +234,7 @@ public: Angle atan2(int32 deltaX, int32 deltaZ); // Game modes - Common::Error runGameMode(int mode); + Common::Error runGameMode(int mode, bool resume); // Away missions void initAwayMission(); |