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 | |
| 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
| -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];  | 
