[Scummvm-cvs-logs] SF.net SVN: scummvm:[54814] scummvm/trunk/engines/mohawk
mthreepwood at users.sourceforge.net
mthreepwood at users.sourceforge.net
Tue Dec 7 19:33:58 CET 2010
Revision: 54814
http://scummvm.svn.sourceforge.net/scummvm/?rev=54814&view=rev
Author: mthreepwood
Date: 2010-12-07 18:33:58 +0000 (Tue, 07 Dec 2010)
Log Message:
-----------
MOHAWK: Allow loading both original and ME saves in any version of Myst
Modified Paths:
--------------
scummvm/trunk/engines/mohawk/myst.cpp
scummvm/trunk/engines/mohawk/myst_saveload.cpp
scummvm/trunk/engines/mohawk/myst_saveload.h
Modified: scummvm/trunk/engines/mohawk/myst.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst.cpp 2010-12-07 18:21:05 UTC (rev 54813)
+++ scummvm/trunk/engines/mohawk/myst.cpp 2010-12-07 18:33:58 UTC (rev 54814)
@@ -261,14 +261,6 @@
_rnd = new Common::RandomSource();
_mouseClicked = false;
- // Load Help System (Masterpiece Edition Only)
- if (getFeatures() & GF_ME) {
- MohawkArchive *mhk = new MohawkArchive();
- if (!mhk->open("help.dat"))
- error("Could not load help.dat");
- _mhk.push_back(mhk);
- }
-
// Load game from launcher/command line if requested
if (ConfMan.hasKey("save_slot") && canLoadGameStateCurrently()) {
uint32 gameToLoad = ConfMan.getInt("save_slot");
@@ -291,6 +283,14 @@
changeToCard(1, true);
}
+ // Load Help System (Masterpiece Edition Only)
+ if (getFeatures() & GF_ME) {
+ MohawkArchive *mhk = new MohawkArchive();
+ if (!mhk->open("help.dat"))
+ error("Could not load help.dat");
+ _mhk.push_back(mhk);
+ }
+
// Test Load Function...
loadHelp(10000);
Modified: scummvm/trunk/engines/mohawk/myst_saveload.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst_saveload.cpp 2010-12-07 18:21:05 UTC (rev 54813)
+++ scummvm/trunk/engines/mohawk/myst_saveload.cpp 2010-12-07 18:33:58 UTC (rev 54814)
@@ -74,17 +74,14 @@
// First, let's make sure we're using a saved game file from this version of Myst
// By checking length of file...
int32 size = loadFile->size();
- if ((size == -1)
- || (size != 664 && (_vm->getFeatures() & GF_ME))
- || (size != 601 && !(_vm->getFeatures() & GF_ME))) {
+ if (size != 664 && size != 601) {
warning("Incompatible saved game version");
- // FIXME: Add Support to load original game saves in ME and vice versa
delete loadFile;
return false;
}
Common::Serializer s(loadFile, 0);
- syncGameState(s);
+ syncGameState(s, size == 664);
delete loadFile;
// Switch us back to the intro stack
@@ -124,14 +121,14 @@
debugC(kDebugSaveLoad, "Saving game to '%s'", filename.c_str());
Common::Serializer s(0, saveFile);
- syncGameState(s);
+ syncGameState(s, _vm->getFeatures() & GF_ME);
saveFile->finalize();
delete saveFile;
return true;
}
-void MystSaveLoad::syncGameState(Common::Serializer &s) {
+void MystSaveLoad::syncGameState(Common::Serializer &s, bool isME) {
// Globals first
s.syncAsUint16LE(_v->globals.u0);
s.syncAsUint16LE(_v->globals.currentAge);
@@ -143,7 +140,7 @@
s.syncAsUint16LE(_v->globals.bluePagesInBook);
// Onto Myst
- if (_vm->getFeatures() & GF_ME) {
+ if (isME) {
s.syncAsUint32LE(_v->myst.cabinMarkerSwitch);
s.syncAsUint32LE(_v->myst.clockTowerMarkerSwitch);
s.syncAsUint32LE(_v->myst.dockMarkerSwitch);
@@ -206,7 +203,7 @@
s.syncAsUint16LE(_v->myst.u9);
// Channelwood
- if (_vm->getFeatures() & GF_ME) {
+ if (isME) {
s.syncAsUint32LE(_v->channelwood.waterPumpBridgeState);
s.syncAsUint32LE(_v->channelwood.elevatorState);
s.syncAsUint32LE(_v->channelwood.stairsLowerDoorState);
@@ -222,7 +219,7 @@
s.syncAsUint16LE(_v->channelwood.holoprojectorSelection);
s.syncAsUint16LE(_v->channelwood.stairsUpperDoorState);
- if (_vm->getFeatures() & GF_ME)
+ if (isME)
s.skip(4);
else
s.skip(1);
@@ -239,7 +236,7 @@
// Selenitic
- if (_vm->getFeatures() & GF_ME) {
+ if (isME) {
s.syncAsUint32LE(_v->selenitic.emitterEnabledWater);
s.syncAsUint32LE(_v->selenitic.emitterEnabledVolcano);
s.syncAsUint32LE(_v->selenitic.emitterEnabledClock);
@@ -267,7 +264,7 @@
// Stoneship
- if (_vm->getFeatures() & GF_ME) {
+ if (isME) {
s.syncAsUint16LE(_v->stoneship.lightState);
s.syncAsUint16LE(_v->stoneship.u0);
s.syncAsUint16LE(_v->stoneship.u1);
@@ -319,7 +316,7 @@
s.skip(38);
- if ((_vm->getFeatures() & GF_ME && s.bytesSynced() != 664) || (!(_vm->getFeatures() & GF_ME) && s.bytesSynced() != 601))
+ if ((isME && s.bytesSynced() != 664) || (!isME && s.bytesSynced() != 601))
warning("Unexpected File Position 0x%03X At End of Save/Load", s.bytesSynced());
}
Modified: scummvm/trunk/engines/mohawk/myst_saveload.h
===================================================================
--- scummvm/trunk/engines/mohawk/myst_saveload.h 2010-12-07 18:21:05 UTC (rev 54813)
+++ scummvm/trunk/engines/mohawk/myst_saveload.h 2010-12-07 18:33:58 UTC (rev 54814)
@@ -296,7 +296,7 @@
bool loadGame(const Common::String &);
bool saveGame(const Common::String &);
void deleteSave(const Common::String &);
- void syncGameState(Common::Serializer &s);
+ void syncGameState(Common::Serializer &s, bool isME);
MystVariables *_v;
private:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list