[Scummvm-cvs-logs] SF.net SVN: scummvm: [31281] scummvm/trunk/engines/kyra

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Fri Mar 28 01:53:54 CET 2008


Revision: 31281
          http://scummvm.svn.sourceforge.net/scummvm/?rev=31281&view=rev
Author:   lordhoto
Date:     2008-03-27 17:53:54 -0700 (Thu, 27 Mar 2008)

Log Message:
-----------
Implemented savegame loading via command line params -x/--save-slot.

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/kyra.cpp
    scummvm/trunk/engines/kyra/kyra.h
    scummvm/trunk/engines/kyra/kyra_v1.cpp
    scummvm/trunk/engines/kyra/kyra_v1.h
    scummvm/trunk/engines/kyra/kyra_v2.cpp
    scummvm/trunk/engines/kyra/saveload.cpp

Modified: scummvm/trunk/engines/kyra/kyra.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra.cpp	2008-03-28 00:16:47 UTC (rev 31280)
+++ scummvm/trunk/engines/kyra/kyra.cpp	2008-03-28 00:53:54 UTC (rev 31281)
@@ -59,6 +59,8 @@
 	_lastMusicCommand = -1;
 	_curSfxFile = _curMusicTheme = -1;
 
+	_gameToLoad = -1;
+
 	memset(_flagsTable, 0, sizeof(_flagsTable));
 
 	// sets up all engine specific debug levels
@@ -143,6 +145,12 @@
 	setupOpcodeTable();
 	readSettings();
 
+	if (ConfMan.hasKey("save_slot")) {
+		_gameToLoad = ConfMan.getInt("save_slot");
+		if (!saveFileLoadable(_gameToLoad))
+			_gameToLoad = -1;
+	}
+
 	_lang = 0;
 	Common::Language lang = Common::parseLanguage(ConfMan.get("language"));
 

Modified: scummvm/trunk/engines/kyra/kyra.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra.h	2008-03-28 00:16:47 UTC (rev 31280)
+++ scummvm/trunk/engines/kyra/kyra.h	2008-03-28 00:53:54 UTC (rev 31281)
@@ -228,7 +228,10 @@
 	static const int8 _addYPosTable[];
 
 	// save/load
+	int _gameToLoad;
+
 	const char *getSavegameFilename(int num);
+	bool saveFileLoadable(int slot);
 
 	struct SaveHeader {
 		Common::String description;
@@ -246,6 +249,7 @@
 		kRSHEInvalidVersion = 2,
 		kRSHEIoError = 3
 	};
+
 	static kReadSaveHeaderError readSaveHeader(Common::InSaveFile *file, SaveHeader &header);
 
 	Common::InSaveFile *openSaveForReading(const char *filename, SaveHeader &header);

Modified: scummvm/trunk/engines/kyra/kyra_v1.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v1.cpp	2008-03-28 00:16:47 UTC (rev 31280)
+++ scummvm/trunk/engines/kyra/kyra_v1.cpp	2008-03-28 00:53:54 UTC (rev 31281)
@@ -318,12 +318,14 @@
 	} else {
 		setGameFlag(0xF3);
 		setGameFlag(0xFD);
-		setGameFlag(0xEF);
-		seq_intro();
-		if (_quitFlag)
-			return 0;
-		if (_skipIntroFlag && _abortIntroFlag)
-			resetGameFlag(0xEF);
+		if (_gameToLoad == -1) {
+			setGameFlag(0xEF);
+			seq_intro();
+			if (_quitFlag)
+				return 0;
+			if (_skipIntroFlag && _abortIntroFlag)
+				resetGameFlag(0xEF);
+		}
 		startup();
 		resetGameFlag(0xEF);
 		mainLoop();
@@ -398,16 +400,21 @@
 		error("Could not load \"_NPC.EMC\" script");
 
 	snd_playTheme(1);
-	enterNewScene(_currentCharacter->sceneId, _currentCharacter->facing, 0, 0, 1);
+	if (_gameToLoad == -1) {
+		enterNewScene(_currentCharacter->sceneId, _currentCharacter->facing, 0, 0, 1);
 
-	if (_abortIntroFlag && _skipIntroFlag) {
-		_menuDirectlyToLoad = true;
-		_screen->setMouseCursor(1, 1, _shapes[0]);
-		_screen->showMouse();
-		buttonMenuCallback(0);
-		_menuDirectlyToLoad = false;
-	} else
-		saveGame(getSavegameFilename(0), "New game");
+		if (_abortIntroFlag && _skipIntroFlag) {
+			_menuDirectlyToLoad = true;
+			_screen->setMouseCursor(1, 1, _shapes[0]);
+			_screen->showMouse();
+			buttonMenuCallback(0);
+			_menuDirectlyToLoad = false;
+		} else
+			saveGame(getSavegameFilename(0), "New game");
+	} else {
+		loadGame(getSavegameFilename(_gameToLoad));
+		_gameToLoad = -1;
+	}
 }
 
 void KyraEngine_v1::mainLoop() {

Modified: scummvm/trunk/engines/kyra/kyra_v1.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v1.h	2008-03-28 00:16:47 UTC (rev 31280)
+++ scummvm/trunk/engines/kyra/kyra_v1.h	2008-03-28 00:53:54 UTC (rev 31281)
@@ -621,7 +621,6 @@
 	bool _cancelSubMenu;
 	uint8 _toplevelMenu;
 	int _savegameOffset;
-	int _gameToLoad;
 	char _savegameName[31];
 	const char *_specialSavegameString;
 	Common::KeyState _keyPressed;

Modified: scummvm/trunk/engines/kyra/kyra_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.cpp	2008-03-28 00:16:47 UTC (rev 31280)
+++ scummvm/trunk/engines/kyra/kyra_v2.cpp	2008-03-28 00:53:54 UTC (rev 31281)
@@ -234,14 +234,18 @@
 }
 
 int KyraEngine_v2::go() {
-	if (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98)
-		seq_showStarcraftLogo();
+	if (_gameToLoad == -1) {
+		if (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98)
+			seq_showStarcraftLogo();
 
-	if (_flags.isDemo && !_flags.isTalkie) {
-		seq_playSequences(kSequenceDemoVirgin, kSequenceDemoFisher);
-		_menuChoice = 4;
+		if (_flags.isDemo && !_flags.isTalkie) {
+			seq_playSequences(kSequenceDemoVirgin, kSequenceDemoFisher);
+			_menuChoice = 4;
+		} else {
+			seq_playSequences(kSequenceVirgin, kSequenceZanfaun);
+		}
 	} else {
-		seq_playSequences(kSequenceVirgin, kSequenceZanfaun);
+		_menuChoice = 1;
 	}
 
 	_res->unloadAllPakFiles();
@@ -361,9 +365,11 @@
 
 	clearAnimObjects();
 
-	// XXX
+	for (int i = 0; i < 19; ++i)
+		memset(_conversationState[i], -1, sizeof(int8)*14);
 	clearCauldronTable();
-	// XXX
+	memset(_inputColorCode, -1, sizeof(_inputColorCode));
+	memset(_newSceneDlgState, 0, sizeof(_newSceneDlgState));
 	memset(_hiddenItems, -1, sizeof(_hiddenItems));
 	for (int i = 0; i < 23; ++i)
 		resetCauldronStateTable(i);
@@ -374,14 +380,16 @@
 	runStartScript(1, 0);
 	loadNPCScript();
 
-	// XXX
-	snd_playWanderScoreViaMap(52, 1);
-	// XXX
+	if (_gameToLoad == -1) {
+		snd_playWanderScoreViaMap(52, 1);
+		enterNewScene(_mainCharacter.sceneId, _mainCharacter.facing, 0, 0, 1);
+		saveGame(getSavegameFilename(0), "New Game");
+	} else {
+		loadGame(getSavegameFilename(_gameToLoad));
+	}
 
-	enterNewScene(_mainCharacter.sceneId, _mainCharacter.facing, 0, 0, 1);
 	_screen->showMouse();
 
-	//sub_20EE8(1);
 	setNextIdleAnimTimer();
 	//XXX
 	_timer->setDelay(0, 5);

Modified: scummvm/trunk/engines/kyra/saveload.cpp
===================================================================
--- scummvm/trunk/engines/kyra/saveload.cpp	2008-03-28 00:16:47 UTC (rev 31280)
+++ scummvm/trunk/engines/kyra/saveload.cpp	2008-03-28 00:53:54 UTC (rev 31281)
@@ -108,7 +108,7 @@
 
 	Common::InSaveFile *in = 0;
 	if (!(in = _saveFileMan->openForLoading(filename))) {
-		warning("Can't open file '%s', game not loaded", filename);
+		warning("Can't open file '%s', game not loadable", filename);
 		return 0;
 	}
 
@@ -119,7 +119,7 @@
 		else if (errorCode == kRSHEInvalidVersion)
 			warning("Savegame is not the right version (%u, '%s')", header.version, header.oldHeader ? "true" : "false");
 		else if (errorCode == kRSHEIoError)
-			warning("Load failed ('%s').", filename);
+			warning("Load failed '%s'", filename);
 
 		delete in;
 		return 0;
@@ -198,5 +198,20 @@
 	return filename.c_str();
 }
 
+bool KyraEngine::saveFileLoadable(int slot) {
+	if (slot < 0 || slot > 999)
+		return false;
+
+	SaveHeader header;
+	Common::InSaveFile *in = openSaveForReading(getSavegameFilename(slot), header);
+
+	if (in) {
+		delete in;
+		return true;
+	}
+
+	return false;
+}
+
 } // end of namespace Kyra
 


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