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/actor.h | 1 + engines/saga/saveload.cpp | 21 ++++++++++++++++----- engines/saga/scene.h | 10 +++------- 3 files changed, 20 insertions(+), 12 deletions(-) (limited to 'engines') diff --git a/engines/saga/actor.h b/engines/saga/actor.h index 1ed70d7ff0..1557abffb9 100644 --- a/engines/saga/actor.h +++ b/engines/saga/actor.h @@ -535,6 +535,7 @@ public: int actorIdToIndex(uint16 id) { return (id == ID_PROTAG ) ? 0 : objectIdToIndex(id); } uint16 actorIndexToId(int index) { return (index == 0 ) ? ID_PROTAG : objectIndexToId(kGameObjectActor, index); } ActorData *getActor(uint16 actorId); + ActorData *getFirstActor() { return _actors[0]; } // clarification: Obj - means game object, such Hat, Spoon etc, Object - means Actor,Obj,HitZone,StepZone 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(); diff --git a/engines/saga/scene.h b/engines/saga/scene.h index 1fc090d0ce..5080406d94 100644 --- a/engines/saga/scene.h +++ b/engines/saga/scene.h @@ -310,11 +310,8 @@ class Scene { #endif return _sceneLUT[sceneNumber]; } - int16 currentProtag() const { return _currentProtag; } - int16 currentTrack() const { return _currentTrack; } - void setProtag(int16 pr) { _currentProtag = pr; } - void setTrack(int16 tr) { _currentTrack = tr; } - + int currentProtag() const { return _currentProtag; } + void setProtag(int pr) { _currentProtag = pr; } int currentSceneNumber() const { return _sceneNumber; } int currentChapterNumber() const { return _chapterNumber; } void setChapterNumber(int ch) { _chapterNumber = ch; } @@ -352,8 +349,7 @@ class Scene { int _sceneCount; SceneQueueList _sceneQueue; bool _sceneLoaded; - int16 _currentProtag; - int16 _currentTrack; + int _currentProtag; int _sceneNumber; int _chapterNumber; int _outsetSceneNumber; -- cgit v1.2.3