aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2012-02-13 21:28:32 +0100
committerWillem Jan Palenstijn2012-02-13 21:28:32 +0100
commit87e85e17cbe95821899bee76d978924760d76f89 (patch)
tree06278335301a89a19715f7b0900e39880977fb91
parentc7a5d31f0576fe6ced0ac3170ab89c5df13135ba (diff)
downloadscummvm-rg350-87e85e17cbe95821899bee76d978924760d76f89.tar.gz
scummvm-rg350-87e85e17cbe95821899bee76d978924760d76f89.tar.bz2
scummvm-rg350-87e85e17cbe95821899bee76d978924760d76f89.zip
BASS: Fix savegame corruption
When using the GMM or autosaves, _savedMouse and _savedCharSet were never set. See bug #3487117.
-rw-r--r--engines/sky/control.cpp15
-rw-r--r--engines/sky/control.h2
-rw-r--r--engines/sky/detection.cpp2
3 files changed, 15 insertions, 4 deletions
diff --git a/engines/sky/control.cpp b/engines/sky/control.cpp
index 7741f1080e..fd2f2b92d3 100644
--- a/engines/sky/control.cpp
+++ b/engines/sky/control.cpp
@@ -535,7 +535,7 @@ uint16 Control::handleClick(ConResource *pButton) {
return saveRestorePanel(true); // texts can be edited
case SAVE_A_GAME:
animClick(pButton);
- return saveGameToFile();
+ return saveGameToFile(true);
case RESTORE_A_GAME:
animClick(pButton);
return restoreGameFromFile(false);
@@ -1101,6 +1101,10 @@ void Control::doAutoSave() {
displayMessage(0, "Unable to create autosave file '%s'. (%s)", fName, _saveFileMan->popErrorDesc().c_str());
return;
}
+
+ _savedCharSet = _skyText->giveCurrentCharSet();
+ _savedMouse = _skyMouse->giveCurrentMouseType();
+
uint8 *saveData = (uint8 *)malloc(0x20000);
uint32 fSize = prepareSaveData(saveData);
@@ -1114,7 +1118,7 @@ void Control::doAutoSave() {
free(saveData);
}
-uint16 Control::saveGameToFile() {
+uint16 Control::saveGameToFile(bool fromControlPanel) {
char fName[20];
sprintf(fName,"SKY-VM.%03d", _selectedGame);
@@ -1123,6 +1127,13 @@ uint16 Control::saveGameToFile() {
if (outf == NULL)
return NO_DISK_SPACE;
+ if (!fromControlPanel) {
+ // These variables are usually set when entering the control panel,
+ // but not when using the GMM.
+ _savedCharSet = _skyText->giveCurrentCharSet();
+ _savedMouse = _skyMouse->giveCurrentMouseType();
+ }
+
uint8 *saveData = (uint8 *)malloc(0x20000);
uint32 fSize = prepareSaveData(saveData);
diff --git a/engines/sky/control.h b/engines/sky/control.h
index 6aa7a41c62..59eda9b4e6 100644
--- a/engines/sky/control.h
+++ b/engines/sky/control.h
@@ -190,7 +190,7 @@ public:
bool loadSaveAllowed();
uint16 _selectedGame;
- uint16 saveGameToFile();
+ uint16 saveGameToFile(bool fromControlPanel);
void loadDescriptions(Common::StringArray &list);
void saveDescriptions(const Common::StringArray &list);
diff --git a/engines/sky/detection.cpp b/engines/sky/detection.cpp
index 484958ca52..a078200edd 100644
--- a/engines/sky/detection.cpp
+++ b/engines/sky/detection.cpp
@@ -286,7 +286,7 @@ Common::Error SkyEngine::saveGameState(int slot, const Common::String &desc) {
// Set the save slot and save the game
_skyControl->_selectedGame = slot - 1;
- if (_skyControl->saveGameToFile() != GAME_SAVED)
+ if (_skyControl->saveGameToFile(false) != GAME_SAVED)
return Common::kWritePermissionDenied;
// Load current save game descriptions