aboutsummaryrefslogtreecommitdiff
path: root/engines/saga/saveload.cpp
diff options
context:
space:
mode:
authorDavid Corrales2007-06-23 18:51:33 +0000
committerDavid Corrales2007-06-23 18:51:33 +0000
commitcacd7a28fd51d960947de88abbf30c487e66529d (patch)
treef3baa59853bfb307e452b86b9d93c4737b1fa6ab /engines/saga/saveload.cpp
parent0ac96302fe9c04df79cb01a77d19535b45fe2db0 (diff)
parent90c2210dae8c91fa8babc6b05564e15c9d445d18 (diff)
downloadscummvm-rg350-cacd7a28fd51d960947de88abbf30c487e66529d.tar.gz
scummvm-rg350-cacd7a28fd51d960947de88abbf30c487e66529d.tar.bz2
scummvm-rg350-cacd7a28fd51d960947de88abbf30c487e66529d.zip
Merged the FSNode branch with trunk r27031:27680
svn-id: r27681
Diffstat (limited to 'engines/saga/saveload.cpp')
-rw-r--r--engines/saga/saveload.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/engines/saga/saveload.cpp b/engines/saga/saveload.cpp
index cf493a7c84..c93ace81b3 100644
--- a/engines/saga/saveload.cpp
+++ b/engines/saga/saveload.cpp
@@ -191,6 +191,13 @@ void SagaEngine::save(const char *fileName, const char *saveName) {
// Surrounding scene
out->writeSint32LE(_scene->getOutsetSceneNumber());
+ if (getGameType() != GType_ITE) {
+ out->writeSint32LE(_scene->currentChapterNumber());
+ // Protagonist
+ out->writeSint32LE(_scene->currentProtag());
+ out->writeSint32LE(_scene->getCurrentMusicTrack());
+ out->writeSint32LE(_scene->getCurrentMusicRepeat());
+ }
// Inset scene
out->writeSint32LE(_scene->currentSceneNumber());
@@ -259,6 +266,18 @@ void SagaEngine::load(const char *fileName) {
// Surrounding scene
sceneNumber = in->readSint32LE();
+ // Protagonist
+ if (getGameType() != GType_ITE) {
+ int currentChapter = _scene->currentChapterNumber();
+ _scene->setChapterNumber(in->readSint32LE());
+ _scene->setProtag(in->readSint32LE());
+ if (_scene->currentChapterNumber() != currentChapter)
+ _scene->changeScene(-2, 0, kTransitionFade, _scene->currentChapterNumber());
+ _scene->setCurrentMusicTrack(in->readSint32LE());
+ _scene->setCurrentMusicRepeat(in->readSint32LE());
+ _music->stop();
+ _music->play(_music->_songTable[_scene->getCurrentMusicTrack()], _scene->getCurrentMusicRepeat() ? MUSIC_LOOP : MUSIC_NORMAL);
+ }
// Inset scene
insetSceneNumber = in->readSint32LE();
@@ -287,6 +306,25 @@ void SagaEngine::load(const char *fileName) {
_isoMap->setMapPosition(mapx, mapy);
+ // Protagonist swapping
+ if (getGameType() != GType_ITE) {
+ if (_scene->currentProtag() != 0 && _scene->currentChapterNumber() != 6) {
+ ActorData *actor1 = _actor->getFirstActor();
+ // Original stores the current protagonist ID from sfSwapActors:
+ //ActorData *actor2 = _actor->getActor(_scene->currentProtag());
+ // However, we already store the protagonist, so merely getting the saved
+ // protagonist is easier and safer, and works without glitches
+ ActorData *actor2 = _actor->_protagonist;
+
+ SWAP(actor1->_location, actor2->_location);
+
+ actor2->_flags &= ~kProtagonist;
+ actor1->_flags |= kProtagonist;
+ _actor->_protagonist = _actor->_centerActor = actor1;
+ _scene->setProtag(actor1->_id);
+ }
+ }
+
_scene->clearSceneQueue();
_scene->changeScene(sceneNumber, ACTOR_NO_ENTRANCE, kTransitionNoFade);