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

eriktorbjorn at users.sourceforge.net eriktorbjorn at users.sourceforge.net
Sun Apr 9 22:38:01 CEST 2006


Revision: 21741
Author:   eriktorbjorn
Date:     2006-04-09 22:37:31 -0700 (Sun, 09 Apr 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=21741&view=rev

Log Message:
-----------
Use our standard save file manager class to read and write the save games,
instead of putting them in the current working directory.

Modified Paths:
--------------
    scummvm/trunk/engines/cine/cine.cpp
    scummvm/trunk/engines/cine/cine.h
    scummvm/trunk/engines/cine/various.cpp
Modified: scummvm/trunk/engines/cine/cine.cpp
===================================================================
--- scummvm/trunk/engines/cine/cine.cpp	2006-04-10 03:51:04 UTC (rev 21740)
+++ scummvm/trunk/engines/cine/cine.cpp	2006-04-10 05:37:31 UTC (rev 21741)
@@ -48,6 +48,7 @@
 
 SoundDriver *g_soundDriver;
 SfxPlayer *g_sfxPlayer;
+Common::SaveFileManager *g_saveFileMan;
 
 static void initialize();
 
@@ -157,6 +158,7 @@
 		g_soundDriver = new AdlibSoundDriverADL(_mixer);
 	}
 	g_sfxPlayer = new SfxPlayer(g_soundDriver);
+	g_saveFileMan = _saveFileMan;
 
 	initialize();
 

Modified: scummvm/trunk/engines/cine/cine.h
===================================================================
--- scummvm/trunk/engines/cine/cine.h	2006-04-10 03:51:04 UTC (rev 21740)
+++ scummvm/trunk/engines/cine/cine.h	2006-04-10 05:37:31 UTC (rev 21741)
@@ -83,6 +83,8 @@
 	MOUSE_CURSOR_CROSS
 };
 
+extern Common::SaveFileManager *g_saveFileMan; // TEMP
+
 } // End of namespace Cine
 
 #endif

Modified: scummvm/trunk/engines/cine/various.cpp
===================================================================
--- scummvm/trunk/engines/cine/various.cpp	2006-04-10 03:51:04 UTC (rev 21740)
+++ scummvm/trunk/engines/cine/various.cpp	2006-04-10 05:37:31 UTC (rev 21741)
@@ -24,6 +24,7 @@
 
 #include "common/stdafx.h"
 #include "common/endian.h"
+#include "common/savefile.h"
 
 #include "cine/cine.h"
 #include "cine/font.h"
@@ -344,29 +345,28 @@
 }
 
 static commandeType currentSaveName[10];
-static char *savePath;
 
 int16 loadSaveDirectory(void) {
-	Common::File fHandle;
+	Common::InSaveFile *fHandle;
 
 	if (gameType == Cine::GID_FW)
-		fHandle.open("FW.DIR", Common::File::kFileReadMode, savePath);
+		fHandle = g_saveFileMan->openForLoading("FW.DIR");
 	else
-		fHandle.open("OS.DIR", Common::File::kFileReadMode, savePath);
+		fHandle = g_saveFileMan->openForLoading("OS.DIR");
 
-	if (!fHandle.isOpen()) {
+	if (!fHandle) {
 		return 0;
 	}
 
-	fHandle.read(currentSaveName, 10 * 20);
-	fHandle.close();
+	fHandle->read(currentSaveName, 10 * 20);
+	delete fHandle;
 
 	return 1;
 }
 
 int16 currentDisk;
 
-void loadObjectScriptFromSave(Common::File *fHandle) {
+void loadObjectScriptFromSave(Common::InSaveFile *fHandle) {
 	int16 i;
 
 	prcLinkedListStruct *newElement;
@@ -399,7 +399,7 @@
 	newElement->scriptPtr = (byte *)relTable[newElement->scriptIdx].data;
 }
 
-void loadGlobalScriptFromSave(Common::File *fHandle) {
+void loadGlobalScriptFromSave(Common::InSaveFile *fHandle) {
 	int16 i;
 
 	prcLinkedListStruct *newElement;
@@ -431,7 +431,7 @@
 	newElement->scriptPtr = scriptTable[newElement->scriptIdx].ptr;
 }
 
-void loadOverlayFromSave(Common::File *fHandle) {
+void loadOverlayFromSave(Common::InSaveFile *fHandle) {
 	overlayHeadElement *newElement;
 	overlayHeadElement *currentHead = &overlayHead;
 	overlayHeadElement *tempHead = currentHead;
@@ -486,11 +486,11 @@
 int16 makeLoad(char *saveName) {
 	int16 i;
 	int16 size;
-	Common::File fHandle;
+	Common::InSaveFile *fHandle;
 
-	fHandle.open(saveName, Common::File::kFileReadMode, savePath);
+	fHandle = g_saveFileMan->openForLoading(saveName);
 
-	if (!fHandle.isOpen()) {
+	if (!fHandle) {
 		drawString("Cette sauvegarde n'existe pas ...", 0);
 		waitPlayerInput();
 		// restoreScreen();
@@ -579,109 +579,109 @@
 
 	checkForPendingDataLoadSwitch = 0;
 
-	currentDisk = fHandle.readUint16BE();
+	currentDisk = fHandle->readUint16BE();
 
-	fHandle.read(currentPartName, 13);
-	fHandle.read(currentDatName, 13);
+	fHandle->read(currentPartName, 13);
+	fHandle->read(currentDatName, 13);
 
-	saveVar2 = fHandle.readSint16BE();
+	saveVar2 = fHandle->readSint16BE();
 
-	fHandle.read(currentPrcName, 13);
-	fHandle.read(currentRelName, 13);
-	fHandle.read(currentMsgName, 13);
-	fHandle.read(currentBgName[0], 13);
-	fHandle.read(currentCtName, 13);
+	fHandle->read(currentPrcName, 13);
+	fHandle->read(currentRelName, 13);
+	fHandle->read(currentMsgName, 13);
+	fHandle->read(currentBgName[0], 13);
+	fHandle->read(currentCtName, 13);
 
-	fHandle.readUint16BE();
-	fHandle.readUint16BE();
+	fHandle->readUint16BE();
+	fHandle->readUint16BE();
 
 	for (i = 0; i < 255; i++) {
-		objectTable[i].x = fHandle.readSint16BE();
-		objectTable[i].y = fHandle.readSint16BE();
-		objectTable[i].mask = fHandle.readUint16BE();
-		objectTable[i].frame = fHandle.readSint16BE();
-		objectTable[i].costume = fHandle.readSint16BE();
-		fHandle.read(objectTable[i].name, 20);
-		objectTable[i].part = fHandle.readUint16BE();
+		objectTable[i].x = fHandle->readSint16BE();
+		objectTable[i].y = fHandle->readSint16BE();
+		objectTable[i].mask = fHandle->readUint16BE();
+		objectTable[i].frame = fHandle->readSint16BE();
+		objectTable[i].costume = fHandle->readSint16BE();
+		fHandle->read(objectTable[i].name, 20);
+		objectTable[i].part = fHandle->readUint16BE();
 	}
 
 	for (i = 0; i < 16; i++) {
-		c_palette[i] = fHandle.readUint16BE();
+		c_palette[i] = fHandle->readUint16BE();
 	}
 
 	for (i = 0; i < 16; i++) {
-		tempPalette[i] = fHandle.readUint16BE();
+		tempPalette[i] = fHandle->readUint16BE();
 	}
 
 	for (i = 0; i < 255; i++) {
-		globalVars[i] = fHandle.readUint16BE();
+		globalVars[i] = fHandle->readUint16BE();
 	}
 
 	for (i = 0; i < 16; i++) {
-		zoneData[i] = fHandle.readUint16BE();
+		zoneData[i] = fHandle->readUint16BE();
 	}
 
 	for (i = 0; i < 4; i++) {
-		commandVar3[i] = fHandle.readUint16BE();
+		commandVar3[i] = fHandle->readUint16BE();
 	}
 
-	fHandle.read(commandBuffer, 0x50);
+	fHandle->read(commandBuffer, 0x50);
 
-	defaultMenuBoxColor = fHandle.readUint16BE();
-	bgVar0 = fHandle.readUint16BE();
-	allowPlayerInput = fHandle.readUint16BE();
-	playerCommand = fHandle.readSint16BE();
-	commandVar1 = fHandle.readSint16BE();
-	isDrawCommandEnabled = fHandle.readUint16BE();
-	var5 = fHandle.readUint16BE();
-	var4 = fHandle.readUint16BE();
-	var3 = fHandle.readUint16BE();
-	var2 = fHandle.readUint16BE();
-	commandVar2 = fHandle.readSint16BE();
-	defaultMenuBoxColor2 = fHandle.readUint16BE();
+	defaultMenuBoxColor = fHandle->readUint16BE();
+	bgVar0 = fHandle->readUint16BE();
+	allowPlayerInput = fHandle->readUint16BE();
+	playerCommand = fHandle->readSint16BE();
+	commandVar1 = fHandle->readSint16BE();
+	isDrawCommandEnabled = fHandle->readUint16BE();
+	var5 = fHandle->readUint16BE();
+	var4 = fHandle->readUint16BE();
+	var3 = fHandle->readUint16BE();
+	var2 = fHandle->readUint16BE();
+	commandVar2 = fHandle->readSint16BE();
+	defaultMenuBoxColor2 = fHandle->readUint16BE();
 
-	fHandle.readUint16BE();
-	fHandle.readUint16BE();
+	fHandle->readUint16BE();
+	fHandle->readUint16BE();
 
 	for (i = 0; i < NUM_MAX_ANIMDATA; i++) {
-		animDataTable[i].width = fHandle.readUint16BE();
-		animDataTable[i].var1 = fHandle.readUint16BE();
-		animDataTable[i].bpp = fHandle.readUint16BE();
-		animDataTable[i].height = fHandle.readUint16BE();
-		animDataTable[i].fileIdx = fHandle.readSint16BE();
-		animDataTable[i].frameIdx = fHandle.readSint16BE();
-		fHandle.read(animDataTable[i].name, 10);
+		animDataTable[i].width = fHandle->readUint16BE();
+		animDataTable[i].var1 = fHandle->readUint16BE();
+		animDataTable[i].bpp = fHandle->readUint16BE();
+		animDataTable[i].height = fHandle->readUint16BE();
+		animDataTable[i].fileIdx = fHandle->readSint16BE();
+		animDataTable[i].frameIdx = fHandle->readSint16BE();
+		fHandle->read(animDataTable[i].name, 10);
 	}
 
 	// TODO: handle screen params (realy required ?)
-	fHandle.readUint16BE();
-	fHandle.readUint16BE();
-	fHandle.readUint16BE();
-	fHandle.readUint16BE();
-	fHandle.readUint16BE();
-	fHandle.readUint16BE();
+	fHandle->readUint16BE();
+	fHandle->readUint16BE();
+	fHandle->readUint16BE();
+	fHandle->readUint16BE();
+	fHandle->readUint16BE();
+	fHandle->readUint16BE();
 
-	size = fHandle.readSint16BE();
+	size = fHandle->readSint16BE();
 	for (i = 0; i < size; i++) {
-		loadGlobalScriptFromSave(&fHandle);
+		loadGlobalScriptFromSave(fHandle);
 	}
 
-	size = fHandle.readSint16BE();
+	size = fHandle->readSint16BE();
 	for (i = 0; i < size; i++) {
-		loadObjectScriptFromSave(&fHandle);
+		loadObjectScriptFromSave(fHandle);
 	}
 
-	size = fHandle.readSint16BE();
+	size = fHandle->readSint16BE();
 	for (i = 0; i < size; i++) {
-		loadOverlayFromSave(&fHandle);
+		loadOverlayFromSave(fHandle);
 	}
 
-	size = fHandle.readSint16BE();
+	size = fHandle->readSint16BE();
 	for (i = 0; i < size; i++) {
-		// loadBgIncrustFromSave(&fHandle);
+		// loadBgIncrustFromSave(fHandle);
 	}
 
-	fHandle.close();
+	delete fHandle;
 
 	checkDataDisk(currentDisk);
 
@@ -730,87 +730,95 @@
 
 void makeSave(char *saveFileName) {
 	int16 i;
-	Common::File fHandle;
+	Common::OutSaveFile *fHandle;
 
-	fHandle.open(saveFileName, Common::File::kFileWriteMode, savePath);
+	fHandle = g_saveFileMan->openForSaving(saveFileName);
 
-	fHandle.writeUint16BE(currentDisk);
-	fHandle.write(currentPartName, 13);
-	fHandle.write(currentDatName, 13);
-	fHandle.writeUint16BE(saveVar2);
-	fHandle.write(currentPrcName, 13);
-	fHandle.write(currentRelName, 13);
-	fHandle.write(currentMsgName, 13);
-	fHandle.write(currentBgName[0], 13);
-	fHandle.write(currentCtName, 13);
+	if (!fHandle) {
+		drawString("Could not create save file ...", 0);
+		waitPlayerInput();
+		// restoreScreen();
+		checkDataDisk(-1);
+		return;
+	}
 
-	fHandle.writeUint16BE(0xFF);
-	fHandle.writeUint16BE(0x20);
+	fHandle->writeUint16BE(currentDisk);
+	fHandle->write(currentPartName, 13);
+	fHandle->write(currentDatName, 13);
+	fHandle->writeUint16BE(saveVar2);
+	fHandle->write(currentPrcName, 13);
+	fHandle->write(currentRelName, 13);
+	fHandle->write(currentMsgName, 13);
+	fHandle->write(currentBgName[0], 13);
+	fHandle->write(currentCtName, 13);
 
+	fHandle->writeUint16BE(0xFF);
+	fHandle->writeUint16BE(0x20);
+
 	for (i = 0; i < 255; i++) {
-		fHandle.writeUint16BE(objectTable[i].x);
-		fHandle.writeUint16BE(objectTable[i].y);
-		fHandle.writeUint16BE(objectTable[i].mask);
-		fHandle.writeUint16BE(objectTable[i].frame);
-		fHandle.writeUint16BE(objectTable[i].costume);
-		fHandle.write(objectTable[i].name, 20);
-		fHandle.writeUint16BE(objectTable[i].part);
+		fHandle->writeUint16BE(objectTable[i].x);
+		fHandle->writeUint16BE(objectTable[i].y);
+		fHandle->writeUint16BE(objectTable[i].mask);
+		fHandle->writeUint16BE(objectTable[i].frame);
+		fHandle->writeUint16BE(objectTable[i].costume);
+		fHandle->write(objectTable[i].name, 20);
+		fHandle->writeUint16BE(objectTable[i].part);
 	}
 
 	for (i = 0; i < 16; i++) {
-		fHandle.writeUint16BE(c_palette[i]);
+		fHandle->writeUint16BE(c_palette[i]);
 	}
 
 	for (i = 0; i < 16; i++) {
-		fHandle.writeUint16BE(tempPalette[i]);
+		fHandle->writeUint16BE(tempPalette[i]);
 	}
 
 	for (i = 0; i < 255; i++) {
-		fHandle.writeUint16BE(globalVars[i]);
+		fHandle->writeUint16BE(globalVars[i]);
 	}
 
 	for (i = 0; i < 16; i++) {
-		fHandle.writeUint16BE(zoneData[i]);
+		fHandle->writeUint16BE(zoneData[i]);
 	}
 
 	for (i = 0; i < 4; i++) {
-		fHandle.writeUint16BE(commandVar3[i]);
+		fHandle->writeUint16BE(commandVar3[i]);
 	}
 
-	fHandle.write(commandBuffer, 0x50);
+	fHandle->write(commandBuffer, 0x50);
 
-	fHandle.writeUint16BE(defaultMenuBoxColor);
-	fHandle.writeUint16BE(bgVar0);
-	fHandle.writeUint16BE(allowPlayerInput);
-	fHandle.writeUint16BE(playerCommand);
-	fHandle.writeUint16BE(commandVar1);
-	fHandle.writeUint16BE(isDrawCommandEnabled);
-	fHandle.writeUint16BE(var5);
-	fHandle.writeUint16BE(var4);
-	fHandle.writeUint16BE(var3);
-	fHandle.writeUint16BE(var2);
-	fHandle.writeUint16BE(commandVar2);
-	fHandle.writeUint16BE(defaultMenuBoxColor2);
+	fHandle->writeUint16BE(defaultMenuBoxColor);
+	fHandle->writeUint16BE(bgVar0);
+	fHandle->writeUint16BE(allowPlayerInput);
+	fHandle->writeUint16BE(playerCommand);
+	fHandle->writeUint16BE(commandVar1);
+	fHandle->writeUint16BE(isDrawCommandEnabled);
+	fHandle->writeUint16BE(var5);
+	fHandle->writeUint16BE(var4);
+	fHandle->writeUint16BE(var3);
+	fHandle->writeUint16BE(var2);
+	fHandle->writeUint16BE(commandVar2);
+	fHandle->writeUint16BE(defaultMenuBoxColor2);
 
-	fHandle.writeUint16BE(0xFF);
-	fHandle.writeUint16BE(0x1E);
+	fHandle->writeUint16BE(0xFF);
+	fHandle->writeUint16BE(0x1E);
 
 	for (i = 0; i < NUM_MAX_ANIMDATA; i++) {
-		fHandle.writeUint16BE(animDataTable[i].width);
-		fHandle.writeUint16BE(animDataTable[i].var1);
-		fHandle.writeUint16BE(animDataTable[i].bpp);
-		fHandle.writeUint16BE(animDataTable[i].height);
-		fHandle.writeSint16BE(animDataTable[i].fileIdx);
-		fHandle.writeSint16BE(animDataTable[i].frameIdx);
-		fHandle.write(animDataTable[i].name, 10);
+		fHandle->writeUint16BE(animDataTable[i].width);
+		fHandle->writeUint16BE(animDataTable[i].var1);
+		fHandle->writeUint16BE(animDataTable[i].bpp);
+		fHandle->writeUint16BE(animDataTable[i].height);
+		fHandle->writeSint16BE(animDataTable[i].fileIdx);
+		fHandle->writeSint16BE(animDataTable[i].frameIdx);
+		fHandle->write(animDataTable[i].name, 10);
 	}
 
-	fHandle.writeUint16BE(0);  // Screen params, unhandled
-	fHandle.writeUint16BE(0);
-	fHandle.writeUint16BE(0);
-	fHandle.writeUint16BE(0);
-	fHandle.writeUint16BE(0);
-	fHandle.writeUint16BE(0);
+	fHandle->writeUint16BE(0);  // Screen params, unhandled
+	fHandle->writeUint16BE(0);
+	fHandle->writeUint16BE(0);
+	fHandle->writeUint16BE(0);
+	fHandle->writeUint16BE(0);
+	fHandle->writeUint16BE(0);
 
 	{
 		int16 numScript = 0;
@@ -821,23 +829,23 @@
 			currentHead = currentHead->next;
 		}
 
-		fHandle.writeUint16BE(numScript);
+		fHandle->writeUint16BE(numScript);
 
 		// actual save
 		currentHead = globalScriptsHead.next;
 
 		while (currentHead) {
 			for (i = 0; i < SCRIPT_STACK_SIZE; i++) {
-				fHandle.writeUint16BE(currentHead->stack[i]);
+				fHandle->writeUint16BE(currentHead->stack[i]);
 			}
 
 			for (i = 0; i < 50; i++) {
-				fHandle.writeUint16BE(currentHead->localVars[i]);
+				fHandle->writeUint16BE(currentHead->localVars[i]);
 			}
 
-			fHandle.writeUint16BE(currentHead->compareResult);
-			fHandle.writeUint16BE(currentHead->scriptPosition);
-			fHandle.writeUint16BE(currentHead->scriptIdx);
+			fHandle->writeUint16BE(currentHead->compareResult);
+			fHandle->writeUint16BE(currentHead->scriptPosition);
+			fHandle->writeUint16BE(currentHead->scriptIdx);
 
 			currentHead = currentHead->next;
 		}
@@ -852,23 +860,23 @@
 			currentHead = currentHead->next;
 		}
 
-		fHandle.writeUint16BE(numScript);
+		fHandle->writeUint16BE(numScript);
 
 		// actual save
 		currentHead = objScriptList.next;
 
 		while (currentHead) {
 			for (i = 0; i < SCRIPT_STACK_SIZE; i++) {
-				fHandle.writeUint16BE(currentHead->stack[i]);
+				fHandle->writeUint16BE(currentHead->stack[i]);
 			}
 
 			for (i = 0; i < 50; i++) {
-				fHandle.writeUint16BE(currentHead->localVars[i]);
+				fHandle->writeUint16BE(currentHead->localVars[i]);
 			}
 
-			fHandle.writeUint16BE(currentHead->compareResult);
-			fHandle.writeUint16BE(currentHead->scriptPosition);
-			fHandle.writeUint16BE(currentHead->scriptIdx);
+			fHandle->writeUint16BE(currentHead->compareResult);
+			fHandle->writeUint16BE(currentHead->scriptPosition);
+			fHandle->writeUint16BE(currentHead->scriptIdx);
 
 			currentHead = currentHead->next;
 		}
@@ -883,29 +891,30 @@
 			currentHead = currentHead->next;
 		}
 
-		fHandle.writeUint16BE(numScript);
+		fHandle->writeUint16BE(numScript);
 
 		// actual save
 		currentHead = overlayHead.next;
 
 		assert(sizeof(overlayHeadElement) == 0x14);
 		while (currentHead) {
-			fHandle.writeUint32BE(0);
-			fHandle.writeUint32BE(0);
-			fHandle.writeUint16BE(currentHead->objIdx);
-			fHandle.writeUint16BE(currentHead->type);
-			fHandle.writeSint16BE(currentHead->x);
-			fHandle.writeSint16BE(currentHead->y);
-			fHandle.writeSint16BE(currentHead->width);
-			fHandle.writeSint16BE(currentHead->color);
+			fHandle->writeUint32BE(0);
+			fHandle->writeUint32BE(0);
+			fHandle->writeUint16BE(currentHead->objIdx);
+			fHandle->writeUint16BE(currentHead->type);
+			fHandle->writeSint16BE(currentHead->x);
+			fHandle->writeSint16BE(currentHead->y);
+			fHandle->writeSint16BE(currentHead->width);
+			fHandle->writeSint16BE(currentHead->color);
 
 			currentHead = currentHead->next;
 		}
 	}
 
-	fHandle.writeUint16BE(0);
+	// This corresponds to the loadBgIncrustFromSave() handling, I think.
+	fHandle->writeUint16BE(0);
 
-	fHandle.close();
+	delete fHandle;
 
 	setMouseCursor(MOUSE_CURSOR_NORMAL);
 }
@@ -1022,15 +1031,15 @@
 					if (!makeMenuChoice(confirmMenu, 2, mouseX, mouseY + 8, 100)) {
 						char saveString[256];
 
-						Common::File fHandle;
+						Common::OutSaveFile *fHandle;
 
 						if (gameType == Cine::GID_FW)
-							fHandle.open("FW.DIR", Common::File::kFileWriteMode, savePath);
+							fHandle = g_saveFileMan->openForSaving("FW.DIR");
 						else
-							fHandle.open("OS.DIR", Common::File::kFileWriteMode, savePath);
+							fHandle = g_saveFileMan->openForSaving("OS.DIR");
 
-						fHandle.write(currentSaveName, 200);
-						fHandle.close();
+						fHandle->write(currentSaveName, 200);
+						delete fHandle;
 
 						sprintf(saveString, "Sauvegarde de |%s", currentSaveName[selectedSave]);
 						drawString(saveString, 0);


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