From c76502fe1174d5e75e4ba5b2575000c0cb6305d8 Mon Sep 17 00:00:00 2001 From: md5 Date: Wed, 27 Apr 2011 23:52:20 +0300 Subject: TSAGE: Added temporary fix for some saved games (e.g. scenes 4050 and 5000) --- engines/tsage/globals.cpp | 6 ++++++ engines/tsage/saveload.cpp | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 00444f3672..81a507102c 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -43,6 +43,12 @@ static SavedObject *classFactoryProc(const Common::String &className) { if (className == "ObjectMover2") return new ObjectMover2(); if (className == "ObjectMover3") return new ObjectMover3(); if (className == "PlayerMover") return new PlayerMover(); + // The following is needed, as saved games can contain SceneObjectWrapper + // objects (e.g. scene 4050 and 5000). + // FIXME: Since SceneObjectWrapper objects are contained within other + // objects, I'm not quite sure if this is the best solution (however, saved + // games do work with this). If this is correct, please remove this FIXME. + if (className == "SceneObjectWrapper") return new SceneObjectWrapper(); return NULL; } diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp index 8b07767f22..b1c66f944c 100644 --- a/engines/tsage/saveload.cpp +++ b/engines/tsage/saveload.cpp @@ -177,6 +177,13 @@ Common::Error Saver::restore(int slot) { // Loop through each registered object to load in the data for (SynchronisedList::iterator i = _objList.begin(); i != _objList.end(); ++i) { + // Saved games can contain PlayerMover objects, but these aren't synchronized. + // Fixes loading in scene 5000. + // TODO/FIXME: Add a more proper handling for these objects + if ((*i)->getClassName() == "PlayerMover") { + warning("HACK: PlayerMover object found, skipping synchronization"); + continue; + } serialiser.validate((*i)->getClassName()); (*i)->synchronise(serialiser); } -- cgit v1.2.3