aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorFilippos Karapetis2007-06-19 01:37:48 +0000
committerFilippos Karapetis2007-06-19 01:37:48 +0000
commit153f325004c70fd94e3a5fb4e60d9b9f3ef9e5a6 (patch)
tree0dd13cd8e32a10dca4472e27bc103b8a0b179000 /engines
parentf6e2c67cbb4365547851b6805b4900279a5a0aa8 (diff)
downloadscummvm-rg350-153f325004c70fd94e3a5fb4e60d9b9f3ef9e5a6.tar.gz
scummvm-rg350-153f325004c70fd94e3a5fb4e60d9b9f3ef9e5a6.tar.bz2
scummvm-rg350-153f325004c70fd94e3a5fb4e60d9b9f3ef9e5a6.zip
More updates for the save/load system in IHNM
svn-id: r27540
Diffstat (limited to 'engines')
-rw-r--r--engines/saga/actor.h1
-rw-r--r--engines/saga/saveload.cpp21
-rw-r--r--engines/saga/scene.h10
3 files changed, 20 insertions, 12 deletions
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;