[Scummvm-cvs-logs] SF.net SVN: scummvm:[34244] scummvm/trunk/engines/cine

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Mon Sep 1 19:47:37 CEST 2008


Revision: 34244
          http://scummvm.svn.sourceforge.net/scummvm/?rev=34244&view=rev
Author:   fingolfin
Date:     2008-09-01 17:47:36 +0000 (Mon, 01 Sep 2008)

Log Message:
-----------
Merging more of the GSoC 2008 RTL branch: CINE

Modified Paths:
--------------
    scummvm/trunk/engines/cine/anim.cpp
    scummvm/trunk/engines/cine/cine.cpp
    scummvm/trunk/engines/cine/detection.cpp
    scummvm/trunk/engines/cine/main_loop.cpp
    scummvm/trunk/engines/cine/prc.cpp
    scummvm/trunk/engines/cine/various.cpp
    scummvm/trunk/engines/cine/various.h

Modified: scummvm/trunk/engines/cine/anim.cpp
===================================================================
--- scummvm/trunk/engines/cine/anim.cpp	2008-09-01 17:46:53 UTC (rev 34243)
+++ scummvm/trunk/engines/cine/anim.cpp	2008-09-01 17:47:36 UTC (rev 34244)
@@ -768,7 +768,7 @@
 	} else if (strstr(resourceName, ".AMI")) {
 		warning("loadResource: Ignoring file '%s' (Load at %d)", resourceName, idx);
 	} else if (strstr(resourceName, "ECHEC")) { // Echec (French) means failure
-		exitEngine = 1;
+		g_cine->quitGame();
 	} else {
 		error("loadResource: Cannot determine type for '%s'", resourceName);
 	}

Modified: scummvm/trunk/engines/cine/cine.cpp
===================================================================
--- scummvm/trunk/engines/cine/cine.cpp	2008-09-01 17:46:53 UTC (rev 34243)
+++ scummvm/trunk/engines/cine/cine.cpp	2008-09-01 17:47:36 UTC (rev 34244)
@@ -23,7 +23,6 @@
  *
  */
 
-#include "common/events.h"
 #include "common/file.h"
 #include "common/savefile.h"
 #include "common/config-manager.h"
@@ -101,7 +100,8 @@
 	delete renderer;
 	delete[] collisionPage;
 	delete g_sound;
-	return 0;
+	
+	return _eventMan->shouldRTL();
 }
 
 int CineEngine::getTimerDelay() const {

Modified: scummvm/trunk/engines/cine/detection.cpp
===================================================================
--- scummvm/trunk/engines/cine/detection.cpp	2008-09-01 17:46:53 UTC (rev 34243)
+++ scummvm/trunk/engines/cine/detection.cpp	2008-09-01 17:47:36 UTC (rev 34244)
@@ -533,8 +533,17 @@
 	}
 
 	virtual bool createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const;
+	virtual bool hasFeature(MetaEngineFeature f) const;
+	virtual SaveStateList listSaves(const char *target) const;
 };
 
+bool CineMetaEngine::hasFeature(MetaEngineFeature f) const {
+	return
+		(f == kSupportsRTL) ||
+		(f == kSupportsListSaves) ||
+		(f == kSupportsDirectLoad);
+}
+
 bool CineMetaEngine::createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const {
 	const Cine::CINEGameDescription *gd = (const Cine::CINEGameDescription *)desc;
 	if (gd) {
@@ -543,6 +552,50 @@
 	return gd != 0;
 }
 
+SaveStateList CineMetaEngine::listSaves(const char *target) const {
+	Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+	SaveStateList saveList;
+
+	Common::String pattern = target;
+	pattern += ".?";
+	Common::StringList filenames = saveFileMan->listSavefiles(pattern.c_str());
+	sort(filenames.begin(), filenames.end());
+	Common::StringList::const_iterator file = filenames.begin();
+
+	Common::String filename = target;
+	filename += ".dir";
+	Common::InSaveFile *in = saveFileMan->openForLoading(filename.c_str());
+	if (in) {
+		int8 ch;
+		char saveDesc[20];
+		do {
+			// Obtain the last digit of the filename, since they correspond to the save slot
+			int slotNum = atoi(file->c_str() + file->size() - 1);
+
+			uint pos = 0;
+			do {
+				ch = in->readByte();
+				if (pos < (sizeof(saveDesc) - 1)) {
+					if (ch < 32 || in->eos()) {
+						saveDesc[pos++] = '\0';
+					} 
+					else if (ch >= 32) {
+						saveDesc[pos++] = ch;
+					}
+				}
+			} while (ch >= 32 && !in->eos());
+			if (saveDesc[0] != 0) {
+				saveList.push_back(SaveStateDescriptor(slotNum, Common::String(saveDesc), *file));
+				file++;
+			}
+		} while (!in->eos());
+	}
+
+	delete in;
+
+	return saveList;
+}
+
 #if PLUGIN_ENABLED_DYNAMIC(CINE)
 	REGISTER_PLUGIN_DYNAMIC(CINE, PLUGIN_TYPE_ENGINE, CineMetaEngine);
 #else

Modified: scummvm/trunk/engines/cine/main_loop.cpp
===================================================================
--- scummvm/trunk/engines/cine/main_loop.cpp	2008-09-01 17:46:53 UTC (rev 34243)
+++ scummvm/trunk/engines/cine/main_loop.cpp	2008-09-01 17:47:36 UTC (rev 34244)
@@ -25,7 +25,6 @@
 
 
 #include "common/scummsys.h"
-#include "common/events.h"
 #include "common/system.h"
 
 #include "cine/main_loop.h"
@@ -61,9 +60,6 @@
 		break;
 	case Common::EVENT_MOUSEMOVE:
 		break;
-	case Common::EVENT_QUIT:
-		exitEngine = 1;
-		break;
 	case Common::EVENT_KEYDOWN:
 		switch (event.kbd.keycode) {
 		case Common::KEYCODE_RETURN:
@@ -258,13 +254,9 @@
 
 void CineEngine::mainLoop(int bootScriptIdx) {
 	bool playerAction;
-	uint16 quitFlag;
 	byte di;
 	uint16 mouseButton;
 
-	quitFlag = 0;
-	exitEngine = 0;
-
 	if (_preLoad == false) {
 		resetBgIncrustList();
 
@@ -418,7 +410,7 @@
 			if ("quit"[menuCommandLen] == (char)di) {
 				++menuCommandLen;
 				if (menuCommandLen == 4) {
-					quitFlag = 1;
+					quitGame();
 				}
 			} else {
 				menuCommandLen = 0;
@@ -427,7 +419,7 @@
 
 		manageEvents();
 
-	} while (!exitEngine && !quitFlag && _danKeysPressed != 7);
+	} while (!quit() && _danKeysPressed != 7);
 
 	hideMouse();
 	g_sound->stopMusic();

Modified: scummvm/trunk/engines/cine/prc.cpp
===================================================================
--- scummvm/trunk/engines/cine/prc.cpp	2008-09-01 17:46:53 UTC (rev 34243)
+++ scummvm/trunk/engines/cine/prc.cpp	2008-09-01 17:47:36 UTC (rev 34244)
@@ -25,6 +25,7 @@
 
 
 #include "common/endian.h"
+#include "common/events.h"
 
 #include "cine/cine.h"
 #include "cine/various.h"
@@ -54,7 +55,9 @@
 
 	// This is copy protection. Used to hang the machine
 	if (!scumm_stricmp(pPrcName, COPY_PROT_FAIL_PRC_NAME)) {
-		exitEngine = 1;
+		Common::Event event;
+		event.type = Common::EVENT_RTL;
+		g_system->getEventManager()->pushEvent(event);
 		return false;
 	}
 

Modified: scummvm/trunk/engines/cine/various.cpp
===================================================================
--- scummvm/trunk/engines/cine/various.cpp	2008-09-01 17:46:53 UTC (rev 34243)
+++ scummvm/trunk/engines/cine/various.cpp	2008-09-01 17:47:36 UTC (rev 34244)
@@ -25,7 +25,6 @@
 
 
 #include "common/endian.h"
-#include "common/events.h"
 #include "common/savefile.h"
 
 #include "cine/cine.h"
@@ -125,7 +124,6 @@
 CommandeType objectListCommand[20];
 int16 objListTab[20];
 
-uint16 exitEngine;
 Common::Array<uint16> zoneData;
 Common::Array<uint16> zoneQuery; //!< Only exists in Operation Stealth
 
@@ -1223,7 +1221,7 @@
 			{
 				getMouseData(mouseUpdateStatus, (uint16 *)&mouseButton, (uint16 *)&mouseX, (uint16 *)&mouseY);
 				if (!makeMenuChoice(confirmMenu, 2, mouseX, mouseY + 8, 100)) {
-					exitEngine = 1;
+					quitGame();
 				}
 				break;
 			}

Modified: scummvm/trunk/engines/cine/various.h
===================================================================
--- scummvm/trunk/engines/cine/various.h	2008-09-01 17:46:53 UTC (rev 34243)
+++ scummvm/trunk/engines/cine/various.h	2008-09-01 17:47:36 UTC (rev 34244)
@@ -120,8 +120,6 @@
 
 void checkForPendingDataLoad(void);
 
-extern uint16 exitEngine;
-
 void hideMouse(void);
 
 void removeExtention(char *dest, const char *source);


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