[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