aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/savegame.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/savegame.cpp')
-rw-r--r--engines/sci/engine/savegame.cpp19
1 files changed, 9 insertions, 10 deletions
diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp
index a238d76279..2e4da46b70 100644
--- a/engines/sci/engine/savegame.cpp
+++ b/engines/sci/engine/savegame.cpp
@@ -333,7 +333,7 @@ static void sync_SavegameMetadata(Common::Serializer &s, SavegameMetadata &obj)
// Some games require additional metadata to display their restore screens
// correctly
- if (s.getVersion() >= 38) {
+ if (s.getVersion() >= 39) {
if (s.isSaving()) {
const reg_t *globals = g_sci->getEngineState()->variables[VAR_GLOBAL];
if (g_sci->getGameId() == GID_SHIVERS) {
@@ -632,13 +632,16 @@ void SoundCommandParser::syncPlayList(Common::Serializer &s) {
}
void SoundCommandParser::reconstructPlayList() {
- Common::StackLock lock(_music->_mutex);
+ _music->_mutex.lock();
// We store all songs here because starting songs may re-shuffle their order
MusicList songs;
for (MusicList::iterator i = _music->getPlayListStart(); i != _music->getPlayListEnd(); ++i)
songs.push_back(*i);
+ // Done with main playlist, so release lock
+ _music->_mutex.unlock();
+
for (MusicList::iterator i = songs.begin(); i != songs.end(); ++i) {
initSoundResource(*i);
@@ -682,20 +685,16 @@ void SciArray::saveLoadWithSerializer(Common::Serializer &s) {
}
switch (_type) {
- case kArrayTypeByte:
- case kArrayTypeString:
- s.syncBytes((byte *)_data, savedSize);
- break;
case kArrayTypeInt16:
- for (int i = 0; i < savedSize; ++i) {
- s.syncAsUint16LE(((int16 *)_data)[i]);
- }
- break;
case kArrayTypeID:
for (int i = 0; i < savedSize; ++i) {
syncWithSerializer(s, ((reg_t *)_data)[i]);
}
break;
+ case kArrayTypeByte:
+ case kArrayTypeString:
+ s.syncBytes((byte *)_data, savedSize);
+ break;
default:
error("Attempt to sync invalid SciArray type %d", _type);
}