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

buddha_ at users.sourceforge.net buddha_ at users.sourceforge.net
Mon Jul 28 12:44:55 CEST 2008


Revision: 33366
          http://scummvm.svn.sourceforge.net/scummvm/?rev=33366&view=rev
Author:   buddha_
Date:     2008-07-28 10:44:54 +0000 (Mon, 28 Jul 2008)

Log Message:
-----------
Cut Future Wars savegame loading routine into parts that can be reused when loading the Operation Stealth savegame format.

Modified Paths:
--------------
    scummvm/trunk/engines/cine/various.cpp

Modified: scummvm/trunk/engines/cine/various.cpp
===================================================================
--- scummvm/trunk/engines/cine/various.cpp	2008-07-28 10:09:00 UTC (rev 33365)
+++ scummvm/trunk/engines/cine/various.cpp	2008-07-28 10:44:54 UTC (rev 33366)
@@ -609,14 +609,78 @@
 	checkForPendingDataLoadSwitch = 0;
 }
 
+bool loadObjectTable(Common::SeekableReadStream &in) {
+	in.readUint16BE(); // Entry count
+	in.readUint16BE(); // Entry size
+
+	for (int i = 0; i < NUM_MAX_OBJECT; i++) {
+		objectTable[i].x = in.readSint16BE();
+		objectTable[i].y = in.readSint16BE();
+		objectTable[i].mask = in.readUint16BE();
+		objectTable[i].frame = in.readSint16BE();
+		objectTable[i].costume = in.readSint16BE();
+		in.read(objectTable[i].name, 20);
+		objectTable[i].part = in.readUint16BE();
+	}
+	return !in.ioFailed();
+}
+
+bool loadZoneData(Common::SeekableReadStream &in) {
+	for (int i = 0; i < 16; i++) {
+		zoneData[i] = in.readUint16BE();
+	}
+	return !in.ioFailed();
+}
+
+bool loadCommandVariables(Common::SeekableReadStream &in) {
+	for (int i = 0; i < 4; i++) {
+		commandVar3[i] = in.readUint16BE();
+	}
+	return !in.ioFailed();
+}
+
+bool loadScreenParams(Common::SeekableReadStream &in) {
+	// TODO: handle screen params (really required ?)
+	in.readUint16BE();
+	in.readUint16BE();
+	in.readUint16BE();
+	in.readUint16BE();
+	in.readUint16BE();
+	in.readUint16BE();
+	return !in.ioFailed();
+}
+
+bool loadGlobalScripts(Common::SeekableReadStream &in) {
+	int size = in.readSint16BE();
+	for (int i = 0; i < size; i++) {
+		loadScriptFromSave(in, true);
+	}
+	return !in.ioFailed();
+}
+
+bool loadObjectScripts(Common::SeekableReadStream &in) {
+	int size = in.readSint16BE();
+	for (int i = 0; i < size; i++) {
+		loadScriptFromSave(in, false);
+	}
+	return !in.ioFailed();
+}
+
+bool loadOverlayList(Common::SeekableReadStream &in) {
+	int size = in.readSint16BE();
+	for (int i = 0; i < size; i++) {
+		loadOverlayFromSave(in);
+	}
+	return !in.ioFailed();
+}
+
+// TODO: Implement this function
 bool CineEngine::loadTempSaveOS(Common::SeekableReadStream &in) {
 	warning("loadTempSaveOS: This is a stub. Temporary Operation Stealth savegame loading not yet implemented");
 	return false;
 }
 
 bool CineEngine::loadPlainSaveFW(Common::SeekableReadStream &in, CineSaveGameFormat saveGameFormat) {
-	int16 i;
-	int16 size;
 	char bgName[13];
 
 	// At savefile position 0x0000:
@@ -664,45 +728,19 @@
 	}
 
 	// At 0x005F:
-	in.readUint16BE();
-	// At 0x0061:
-	in.readUint16BE();
+	loadObjectTable(in);
 
-	// At 0x0063:
-	for (i = 0; i < 255; i++) {
-		// At 0x0063 + i * 32 + 0:
-		objectTable[i].x = in.readSint16BE();
-		// At 0x0063 + i * 32 + 2:
-		objectTable[i].y = in.readSint16BE();
-		// At 0x0063 + i * 32 + 4:
-		objectTable[i].mask = in.readUint16BE();
-		// At 0x0063 + i * 32 + 6:
-		objectTable[i].frame = in.readSint16BE();
-		// At 0x0063 + i * 32 + 8:
-		objectTable[i].costume = in.readSint16BE();
-		// At 0x0063 + i * 32 + 10:
-		in.read(objectTable[i].name, 20);
-		// At 0x0063 + i * 32 + 30:
-		objectTable[i].part = in.readUint16BE();
-	}
-
-	// At 0x2043 (i.e. 0x0063 + 255 * 32):
+	// At 0x2043 (i.e. 0x005F + 2 * 2 + 255 * 32):
 	renderer->restorePalette(in);
 
 	// At 0x2083 (i.e. 0x2043 + 16 * 2 * 2):
 	globalVars.load(in, NUM_MAX_VAR);
 
 	// At 0x2281 (i.e. 0x2083 + 255 * 2):
-	for (i = 0; i < 16; i++) {
-		// At 0x2281 + i * 2:
-		zoneData[i] = in.readUint16BE();
-	}
+	loadZoneData(in);
 
 	// At 0x22A1 (i.e. 0x2281 + 16 * 2):
-	for (i = 0; i < 4; i++) {
-		// At 0x22A1 + i * 2:
-		commandVar3[i] = in.readUint16BE();
-	}
+	loadCommandVariables(in);
 
 	// At 0x22A9 (i.e. 0x22A1 + 4 * 2):
 	in.read(commandBuffer, 0x50);
@@ -743,29 +781,10 @@
 	// At 0x2315:
 	loadResourcesFromSave(in, saveGameFormat);
 
-	// TODO: handle screen params (really required ?)
-	in.readUint16BE();
-	in.readUint16BE();
-	in.readUint16BE();
-	in.readUint16BE();
-	in.readUint16BE();
-	in.readUint16BE();
-
-	size = in.readSint16BE();
-	for (i = 0; i < size; i++) {
-		loadScriptFromSave(in, true);
-	}
-
-	size = in.readSint16BE();
-	for (i = 0; i < size; i++) {
-		loadScriptFromSave(in, false);
-	}
-
-	size = in.readSint16BE();
-	for (i = 0; i < size; i++) {
-		loadOverlayFromSave(in);
-	}
-
+	loadScreenParams(in);
+	loadGlobalScripts(in);
+	loadObjectScripts(in);
+	loadOverlayList(in);
 	loadBgIncrustFromSave(in);
 
 	if (strlen(currentMsgName)) {


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