From 6dc0a1b234e4395d42dc3d73da098fe0ca355a27 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 17 Jun 2007 15:45:09 +0000 Subject: Some more updates for saving/loading in IHNM svn-id: r27512 --- engines/saga/saveload.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'engines/saga/saveload.cpp') diff --git a/engines/saga/saveload.cpp b/engines/saga/saveload.cpp index cf493a7c84..3facd894bc 100644 --- a/engines/saga/saveload.cpp +++ b/engines/saga/saveload.cpp @@ -191,6 +191,11 @@ void SagaEngine::save(const char *fileName, const char *saveName) { // Surrounding scene out->writeSint32LE(_scene->getOutsetSceneNumber()); + if (getGameType() != GType_ITE) { + out->writeSint16LE(_scene->currentTrack()); + // Protagonist + out->writeSint16LE(_scene->currentProtag()); + } // Inset scene out->writeSint32LE(_scene->currentSceneNumber()); @@ -259,6 +264,11 @@ void SagaEngine::load(const char *fileName) { // Surrounding scene sceneNumber = in->readSint32LE(); + // Protagonist + if (getGameType() != GType_ITE) { + _scene->setTrack(in->readSint16LE()); + _scene->setProtag(in->readSint16LE()); + } // Inset scene insetSceneNumber = in->readSint32LE(); @@ -287,6 +297,11 @@ void SagaEngine::load(const char *fileName) { _isoMap->setMapPosition(mapx, mapy); + // Protagonist swapping + if (getGameType() != GType_ITE) { + // TODO + } + _scene->clearSceneQueue(); _scene->changeScene(sceneNumber, ACTOR_NO_ENTRANCE, kTransitionNoFade); -- cgit v1.2.3 From 153f325004c70fd94e3a5fb4e60d9b9f3ef9e5a6 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Tue, 19 Jun 2007 01:37:48 +0000 Subject: More updates for the save/load system in IHNM svn-id: r27540 --- engines/saga/saveload.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'engines/saga/saveload.cpp') diff --git a/engines/saga/saveload.cpp b/engines/saga/saveload.cpp index 3facd894bc..804cba9aa7 100644 --- a/engines/saga/saveload.cpp +++ b/engines/saga/saveload.cpp @@ -192,9 +192,9 @@ void SagaEngine::save(const char *fileName, const char *saveName) { // Surrounding scene out->writeSint32LE(_scene->getOutsetSceneNumber()); if (getGameType() != GType_ITE) { - out->writeSint16LE(_scene->currentTrack()); + out->writeSint32LE(_scene->currentChapterNumber()); // Protagonist - out->writeSint16LE(_scene->currentProtag()); + out->writeSint32LE(_scene->currentProtag()); } // Inset scene @@ -266,8 +266,10 @@ void SagaEngine::load(const char *fileName) { sceneNumber = in->readSint32LE(); // Protagonist if (getGameType() != GType_ITE) { - _scene->setTrack(in->readSint16LE()); - _scene->setProtag(in->readSint16LE()); + _scene->setChapterNumber(in->readSint32LE()); + _scene->setProtag(in->readSint32LE()); + if (_scene->currentChapterNumber()) + _scene->changeScene(-2, 0, kTransitionFade, _scene->currentChapterNumber()); } // Inset scene @@ -299,7 +301,16 @@ void SagaEngine::load(const char *fileName) { // Protagonist swapping if (getGameType() != GType_ITE) { - // TODO + if (_scene->currentProtag() != 0 && _scene->currentChapterNumber() != 6) { + ActorData *actor1 = _actor->getFirstActor(); + ActorData *actor2 = _actor->getActor(_scene->currentProtag()); + SWAP(actor1->_location, actor2->_location); + + actor2->_flags &= ~kProtagonist; + actor1->_flags |= kProtagonist; + _actor->_protagonist = _actor->_centerActor = actor1; + _scene->setProtag(actor1->_id); + } } _scene->clearSceneQueue(); -- cgit v1.2.3 From 8bc226b0e595ebb90e1fd237a44d040ba4678b21 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Tue, 19 Jun 2007 02:42:59 +0000 Subject: The correct music track is now played when loading a game in IHNM. The save/load mechanism in IHNM seems to be working correctly now (although it needs testing), however there are still some graphical glitches with the save/load dialogs. Also, moved some unfinished code for returning to the chapter selection screen to a more appropriate place svn-id: r27542 --- engines/saga/saveload.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'engines/saga/saveload.cpp') diff --git a/engines/saga/saveload.cpp b/engines/saga/saveload.cpp index 804cba9aa7..f5504ab59a 100644 --- a/engines/saga/saveload.cpp +++ b/engines/saga/saveload.cpp @@ -195,6 +195,8 @@ void SagaEngine::save(const char *fileName, const char *saveName) { out->writeSint32LE(_scene->currentChapterNumber()); // Protagonist out->writeSint32LE(_scene->currentProtag()); + out->writeSint32LE(_scene->getCurrentMusicTrack()); + out->writeSint32LE(_scene->getCurrentMusicRepeat()); } // Inset scene @@ -270,6 +272,10 @@ void SagaEngine::load(const char *fileName) { _scene->setProtag(in->readSint32LE()); if (_scene->currentChapterNumber()) _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 -- cgit v1.2.3 From aeb9668d6641059866d745df4026ccc88985f864 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Tue, 19 Jun 2007 11:41:06 +0000 Subject: When loading a game from the same chapter as the current chapter in IHNM, the game will now be loaded correctly svn-id: r27546 --- engines/saga/saveload.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'engines/saga/saveload.cpp') diff --git a/engines/saga/saveload.cpp b/engines/saga/saveload.cpp index f5504ab59a..05cf2f3aee 100644 --- a/engines/saga/saveload.cpp +++ b/engines/saga/saveload.cpp @@ -268,9 +268,10 @@ void SagaEngine::load(const char *fileName) { sceneNumber = in->readSint32LE(); // Protagonist if (getGameType() != GType_ITE) { + int currentChapter = _scene->currentChapterNumber(); _scene->setChapterNumber(in->readSint32LE()); _scene->setProtag(in->readSint32LE()); - if (_scene->currentChapterNumber()) + if (_scene->currentChapterNumber() != currentChapter) _scene->changeScene(-2, 0, kTransitionFade, _scene->currentChapterNumber()); _scene->setCurrentMusicTrack(in->readSint32LE()); _scene->setCurrentMusicRepeat(in->readSint32LE()); -- cgit v1.2.3 From 6689a6607be844740b7f27e2d9021d36538001aa Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Wed, 20 Jun 2007 01:45:38 +0000 Subject: Fix crashes with some savegames in IHNM svn-id: r27553 --- engines/saga/saveload.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'engines/saga/saveload.cpp') diff --git a/engines/saga/saveload.cpp b/engines/saga/saveload.cpp index 05cf2f3aee..c93ace81b3 100644 --- a/engines/saga/saveload.cpp +++ b/engines/saga/saveload.cpp @@ -310,7 +310,12 @@ void SagaEngine::load(const char *fileName) { if (getGameType() != GType_ITE) { if (_scene->currentProtag() != 0 && _scene->currentChapterNumber() != 6) { ActorData *actor1 = _actor->getFirstActor(); - ActorData *actor2 = _actor->getActor(_scene->currentProtag()); + // 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; -- cgit v1.2.3