aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Sandulenko2005-09-03 07:56:42 +0000
committerEugene Sandulenko2005-09-03 07:56:42 +0000
commitcd5502916ad6ec7990b906e1dc22c07e17309691 (patch)
tree830ce7c09947118491580674a013bdda4364ad51
parent720961565aa33b478b2593521207d8f416271ffd (diff)
downloadscummvm-rg350-cd5502916ad6ec7990b906e1dc22c07e17309691.tar.gz
scummvm-rg350-cd5502916ad6ec7990b906e1dc22c07e17309691.tar.bz2
scummvm-rg350-cd5502916ad6ec7990b906e1dc22c07e17309691.zip
o Fix bug #1258633 "ITE: Second Rif appears in wall of dog castle prison"
o Added debug output method to Location structure o Fixed long-standing bug with save version being saved not in constant endianness svn-id: r18740
-rw-r--r--saga/actor.cpp8
-rw-r--r--saga/actor.h4
-rw-r--r--saga/saveload.cpp9
3 files changed, 18 insertions, 3 deletions
diff --git a/saga/actor.cpp b/saga/actor.cpp
index b8e84ec979..3dd1d7e5cc 100644
--- a/saga/actor.cpp
+++ b/saga/actor.cpp
@@ -2870,6 +2870,14 @@ void Actor::loadState(Common::InSaveFile *in) {
for (i = 0; i < _actorsCount; i++) {
ActorData *a = _actors[i];
a->loadState(_vm->getCurrentLoadVersion(), in);
+
+ // Fix bug #1258633 "ITE: Second Rif appears in wall of dog castle prison"
+ // For some reason in some cases actor position is all wrong, so Rif
+ // crawls to his original poition
+ if (i == 122 && _vm->getGameType() == GType_ITE) {
+ a->_location.x = 130;
+ a->_location.y = 55;
+ }
}
for (i = 0; i < _objsCount; i++) {
diff --git a/saga/actor.h b/saga/actor.h
index 37cad77936..0728816593 100644
--- a/saga/actor.h
+++ b/saga/actor.h
@@ -234,6 +234,10 @@ struct Location {
y = stream.readUint16LE();
z = stream.readUint16LE();
}
+
+ void debugPrint(int debuglevel = 0, const char *loc = "Loc:") const {
+ debug(debuglevel, "%s %d, %d, %d", loc, x, y, z);
+ }
};
class CommonObjectData {
diff --git a/saga/saveload.cpp b/saga/saveload.cpp
index 5bfe583ff5..a2c07fdde2 100644
--- a/saga/saveload.cpp
+++ b/saga/saveload.cpp
@@ -167,8 +167,8 @@ void SagaEngine::save(const char *fileName, const char *saveName) {
_saveHeader.type = MKID('SAGA');
_saveHeader.size = 0;
- _saveHeader.version = CURRENT_SAGA_VER;
- strcpy(_saveHeader.name, saveName);
+ _saveHeader.version = TO_LE_32(CURRENT_SAGA_VER);
+ strncpy(_saveHeader.name, saveName, SAVE_TITLE_SIZE);
out->write(&_saveHeader, sizeof(_saveHeader));
@@ -204,6 +204,9 @@ void SagaEngine::load(const char *fileName) {
in->read(&_saveHeader, sizeof(_saveHeader));
+ _saveHeader.size = FROM_LE_32(_saveHeader.size);
+ _saveHeader.version = FROM_LE_32(_saveHeader.version);
+
if (_saveHeader.type != MKID('SAGA')) {
error("SagaEngine::load wrong format");
}
@@ -235,7 +238,7 @@ void SagaEngine::load(const char *fileName) {
_scene->clearSceneQueue();
_scene->changeScene(sceneNumber, ACTOR_NO_ENTRANCE, kTransitionNoFade);
- _events->handleEvents(0); //dissolve back grounds
+ _events->handleEvents(0); //dissolve backgrounds
if (insetSceneNumber != sceneNumber) {
_render->setFlag(RF_DISABLE_ACTORS);