diff options
author | Filippos Karapetis | 2008-11-12 20:41:19 +0000 |
---|---|---|
committer | Filippos Karapetis | 2008-11-12 20:41:19 +0000 |
commit | 6bfee1bae425fb73fdce68629913432319df85a5 (patch) | |
tree | 1f69b051138506b6098aa5bf6c5928271ae349ce /engines | |
parent | c0f82d351894df16e23690b4361e66bed0fb6f84 (diff) | |
download | scummvm-rg350-6bfee1bae425fb73fdce68629913432319df85a5.tar.gz scummvm-rg350-6bfee1bae425fb73fdce68629913432319df85a5.tar.bz2 scummvm-rg350-6bfee1bae425fb73fdce68629913432319df85a5.zip |
Saving and loading from the GMM is now supported in the sky engine
svn-id: r35024
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sky/control.h | 10 | ||||
-rw-r--r-- | engines/sky/detection.cpp | 42 | ||||
-rw-r--r-- | engines/sky/sky.h | 5 |
3 files changed, 52 insertions, 5 deletions
diff --git a/engines/sky/control.h b/engines/sky/control.h index e9575c33c1..d099d44d95 100644 --- a/engines/sky/control.h +++ b/engines/sky/control.h @@ -191,6 +191,12 @@ public: uint16 quickXRestore(uint16 slot); bool loadSaveAllowed(void); + uint16 _selectedGame; + uint16 saveGameToFile(void); + + void loadDescriptions(Common::StringList &list); + void saveDescriptions(const Common::StringList &list); + private: int displayMessage(const char *altButton, const char *message, ...); @@ -216,14 +222,10 @@ private: void drawCross(uint16 x, uint16 y); uint16 saveRestorePanel(bool allowSave); - void loadDescriptions(Common::StringList &list); - void saveDescriptions(const Common::StringList &list); void setUpGameSprites(const Common::StringList &saveGameNames, dataFileHeader **nameSprites, uint16 firstNum, uint16 selectedGame); void showSprites(dataFileHeader **nameSprites, bool allowSave); void handleKeyPress(Common::KeyState kbd, Common::String &textBuf); - uint16 _selectedGame; - uint16 saveGameToFile(void); uint32 prepareSaveData(uint8 *destBuf); bool autoSaveExists(void); diff --git a/engines/sky/detection.cpp b/engines/sky/detection.cpp index eeef61006d..6d3f204228 100644 --- a/engines/sky/detection.cpp +++ b/engines/sky/detection.cpp @@ -93,7 +93,9 @@ bool SkyMetaEngine::hasFeature(MetaEngineFeature f) const { bool Sky::SkyEngine::hasFeature(EngineFeature f) const { return - (f == kSupportsRTL); + (f == kSupportsRTL) || + (f == kSupportsLoadingDuringRuntime) || + (f == kSupportsSavingDuringRuntime); } GameList SkyMetaEngine::getSupportedGames() const { @@ -223,3 +225,41 @@ int SkyMetaEngine::getMaximumSaveSlot() const { return MAX_SAVE_GAMES; } #else REGISTER_PLUGIN_STATIC(SKY, PLUGIN_TYPE_ENGINE, SkyMetaEngine); #endif + +namespace Sky { +Common::Error SkyEngine::loadGameState(int slot) { + uint16 result = _skyControl->quickXRestore(slot); + return (result == GAME_RESTORED) ? Common::kNoError : Common::kUnknownError; +} + +Common::Error SkyEngine::saveGameState(int slot, const char *desc) { + if (slot == 0) + return Common::kWritePermissionDenied; // we can't overwrite the auto save + + // Set the save slot and save the game + _skyControl->_selectedGame = slot - 1; + if (_skyControl->saveGameToFile() != GAME_SAVED) + return Common::kWritePermissionDenied; + + // Load current save game descriptions + Common::StringList saveGameTexts; + saveGameTexts.resize(MAX_SAVE_GAMES+1); + _skyControl->loadDescriptions(saveGameTexts); + + // Update the save game description at the given slot + saveGameTexts[slot - 1] = desc; + // Save the updated descriptions + _skyControl->saveDescriptions(saveGameTexts); + + return Common::kNoError; +} + +bool SkyEngine::canLoadGameStateCurrently() { + return _systemVars.pastIntro && _skyControl->loadSaveAllowed(); +} + +bool SkyEngine::canSaveGameStateCurrently() { + return _systemVars.pastIntro && _skyControl->loadSaveAllowed(); +} + +} // End of namespace Sky diff --git a/engines/sky/sky.h b/engines/sky/sky.h index 47c67c743b..aee8d7aff3 100644 --- a/engines/sky/sky.h +++ b/engines/sky/sky.h @@ -82,6 +82,11 @@ public: static bool isDemo(void); static bool isCDVersion(void); + Common::Error loadGameState(int slot); + Common::Error saveGameState(int slot, const char *desc); + bool canLoadGameStateCurrently(); + bool canSaveGameStateCurrently(); + static void *fetchItem(uint32 num); static void *_itemList[300]; |