[Scummvm-cvs-logs] SF.net SVN: scummvm: [29434] scummvm/trunk/engines/scumm

Kirben at users.sourceforge.net Kirben at users.sourceforge.net
Tue Nov 6 13:22:52 CET 2007


Revision: 29434
          http://scummvm.svn.sourceforge.net/scummvm/?rev=29434&view=rev
Author:   Kirben
Date:     2007-11-06 04:22:52 -0800 (Tue, 06 Nov 2007)

Log Message:
-----------
Add support for original load/save system in HE games.

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/he/script_v60he.cpp
    scummvm/trunk/engines/scumm/he/script_v72he.cpp
    scummvm/trunk/engines/scumm/saveload.cpp
    scummvm/trunk/engines/scumm/scumm.cpp
    scummvm/trunk/engines/scumm/scumm.h

Modified: scummvm/trunk/engines/scumm/he/script_v60he.cpp
===================================================================
--- scummvm/trunk/engines/scumm/he/script_v60he.cpp	2007-11-06 10:52:47 UTC (rev 29433)
+++ scummvm/trunk/engines/scumm/he/script_v60he.cpp	2007-11-06 12:22:52 UTC (rev 29434)
@@ -568,11 +568,19 @@
 		copyPalColor(a, b);
 		break;
 	case 221:
-		int len;
+		byte buffer[100];
+		int len, r;
+
+		convertMessageToString(_scriptPointer, buffer, sizeof(buffer));
 		len = resStrLen(_scriptPointer);
 		_scriptPointer += len + 1;
+
+		r = convertFilePath(buffer);
+		memcpy(_saveLoadFileName, buffer + r, sizeof(buffer) - r);
+		debug(1, "o60_roomOps: case 221: filename %s", _saveLoadFileName);
+
 		_saveLoadFlag = pop();
-		_saveLoadSlot = 1;
+		_saveLoadSlot = 255;
 		_saveTemporaryState = true;
 		break;
 	case 234:		// HE 7.2
@@ -982,7 +990,6 @@
 	const char *filename;
 
 	convertMessageToString(_scriptPointer, buffer, sizeof(buffer));
-
 	len = resStrLen(_scriptPointer);
 	_scriptPointer += len + 1;
 
@@ -1042,34 +1049,35 @@
 	const char *filename;
 
 	convertMessageToString(_scriptPointer, buffer, sizeof(buffer));
-
 	len = resStrLen(_scriptPointer);
 	_scriptPointer += len + 1;
 
 	filename = (char *)buffer + convertFilePath(buffer);
+
 	debug(1, "o60_deleteFile stub (\"%s\")", filename);
+
+	_saveFileMan->removeSavefile(filename);
 }
 
 void ScummEngine_v60he::o60_rename() {
 	int len;
 	byte buffer1[100], buffer2[100];
-	const char *filename1, *filename2;
+	const char *newFilename, *oldFilename;
 
 	convertMessageToString(_scriptPointer, buffer1, sizeof(buffer1));
-
 	len = resStrLen(_scriptPointer);
 	_scriptPointer += len + 1;
 
-	filename1 = (char *)buffer1 + convertFilePath(buffer1);
-
 	convertMessageToString(_scriptPointer, buffer2, sizeof(buffer2));
-
 	len = resStrLen(_scriptPointer);
 	_scriptPointer += len + 1;
 
-	filename2 = (char *)buffer2 + convertFilePath(buffer2);
+	oldFilename = (char *)buffer1 + convertFilePath(buffer1);
+	newFilename = (char *)buffer2 + convertFilePath(buffer2);
 
-	debug(1, "o60_rename stub (\"%s\" to \"%s\")", filename1, filename2);
+	debug(1, "o60_rename stub (\"%s\" to \"%s\")", newFilename, oldFilename);
+
+	_saveFileMan->renameSavefile(oldFilename, newFilename);
 }
 
 int ScummEngine_v60he::readFileToArray(int slot, int32 size) {

Modified: scummvm/trunk/engines/scumm/he/script_v72he.cpp
===================================================================
--- scummvm/trunk/engines/scumm/he/script_v72he.cpp	2007-11-06 10:52:47 UTC (rev 29433)
+++ scummvm/trunk/engines/scumm/he/script_v72he.cpp	2007-11-06 12:22:52 UTC (rev 29434)
@@ -978,7 +978,6 @@
 
 void ScummEngine_v72he::o72_roomOps() {
 	int a, b, c, d, e;
-	byte filename[100];
 
 	byte subOp = fetchScriptByte();
 
@@ -1051,11 +1050,17 @@
 		break;
 
 	case 221:
-		copyScriptString(filename, sizeof(filename));
-		debug(1, "o72_roomOps: case 221: filename %s", filename);
+		byte buffer[256];
+		int r;
 
+		copyScriptString((byte *)buffer, sizeof(buffer));
+
+		r = convertFilePath(buffer);
+		memcpy(_saveLoadFileName, buffer + r, sizeof(buffer) - r);
+		debug(1, "o72_roomOps: case 221: filename %s", _saveLoadFileName);
+
 		_saveLoadFlag = pop();
-		_saveLoadSlot = 1;
+		_saveLoadSlot = 255;
 		_saveTemporaryState = true;
 		break;
 
@@ -1871,19 +1876,27 @@
 }
 
 void ScummEngine_v72he::o72_deleteFile() {
-	byte filename[256];
+	byte buffer[256];
 
-	copyScriptString(filename, sizeof(filename));
+	copyScriptString(buffer, sizeof(buffer));
+	const char *filename = (char *)buffer + convertFilePath(buffer);
 
 	debug(1, "stub o72_deleteFile(%s)", filename);
+
+	_saveFileMan->removeSavefile(filename);
 }
 
 void ScummEngine_v72he::o72_rename() {
-	byte oldFilename[100],newFilename[100];
+	byte buffer1[100],buffer2[100];
 
-	copyScriptString(newFilename, sizeof(newFilename));
-	copyScriptString(oldFilename, sizeof(oldFilename));
+	copyScriptString(buffer1, sizeof(buffer1));
+	copyScriptString(buffer2, sizeof(buffer2));
 
+	const char *newFilename = (char *)buffer1 + convertFilePath(buffer1);
+	const char *oldFilename = (char *)buffer2 + convertFilePath(buffer2);
+
+	_saveFileMan->renameSavefile(oldFilename, newFilename);
+
 	debug(1, "stub o72_rename(%s to %s)", oldFilename, newFilename);
 }
 

Modified: scummvm/trunk/engines/scumm/saveload.cpp
===================================================================
--- scummvm/trunk/engines/scumm/saveload.cpp	2007-11-06 10:52:47 UTC (rev 29433)
+++ scummvm/trunk/engines/scumm/saveload.cpp	2007-11-06 12:22:52 UTC (rev 29434)
@@ -86,26 +86,34 @@
 	_saveLoadFlag = 2;		// 2 for load
 }
 
+static bool saveSaveGameHeader(Common::OutSaveFile *out, SaveGameHeader &hdr) {
+	hdr.type = MKID_BE('SCVM');
+	hdr.size = 0;
+	hdr.ver = CURRENT_VER;
+
+	out->writeUint32BE(hdr.type);
+	out->writeUint32LE(hdr.size);
+	out->writeUint32LE(hdr.ver);
+	out->write(hdr.name, sizeof(hdr.name));
+	return true;
+}
+
 bool ScummEngine::saveState(int slot, bool compat) {
 	char filename[256];
 	Common::OutSaveFile *out;
 	SaveGameHeader hdr;
 
-	makeSavegameName(filename, slot, compat);
-
+	if (_saveLoadSlot == 255) {
+		// Allow custom filenames for save game system in HE Games
+		memcpy(filename, _saveLoadFileName, sizeof(_saveLoadFileName));
+	} else {
+		makeSavegameName(filename, slot, compat);
+	}
 	if (!(out = _saveFileMan->openForSaving(filename)))
 		return false;
 
 	memcpy(hdr.name, _saveLoadName, sizeof(hdr.name));
-
-	hdr.type = MKID_BE('SCVM');
-	hdr.size = 0;
-	hdr.ver = CURRENT_VER;
-
-	out->writeUint32BE(hdr.type);
-	out->writeUint32LE(hdr.size);
-	out->writeUint32LE(hdr.ver);
-	out->write(hdr.name, sizeof(hdr.name));
+	saveSaveGameHeader(out, hdr);
 	saveThumbnail(out);
 	saveInfos(out);
 
@@ -137,7 +145,12 @@
 	SaveGameHeader hdr;
 	int sb, sh;
 
-	makeSavegameName(filename, slot, compat);
+	if (_saveLoadSlot == 255) {
+		// Allow custom filenames for save game system in HE Games
+		memcpy(filename, _saveLoadFileName, sizeof(_saveLoadFileName));
+	} else {
+		makeSavegameName(filename, slot, compat);
+	}
 	if (!(in = _saveFileMan->openForLoading(filename)))
 		return false;
 

Modified: scummvm/trunk/engines/scumm/scumm.cpp
===================================================================
--- scummvm/trunk/engines/scumm/scumm.cpp	2007-11-06 10:52:47 UTC (rev 29433)
+++ scummvm/trunk/engines/scumm/scumm.cpp	2007-11-06 12:22:52 UTC (rev 29434)
@@ -200,6 +200,7 @@
 	_saveLoadSlot = 0;
 	_lastSaveTime = 0;
 	_saveTemporaryState = false;
+	memset(_saveLoadFileName, 0, sizeof(_saveLoadFileName));
 	memset(_saveLoadName, 0, sizeof(_saveLoadName));
 	memset(_localScriptOffsets, 0, sizeof(_localScriptOffsets));
 	_scriptPointer = NULL;

Modified: scummvm/trunk/engines/scumm/scumm.h
===================================================================
--- scummvm/trunk/engines/scumm/scumm.h	2007-11-06 10:52:47 UTC (rev 29433)
+++ scummvm/trunk/engines/scumm/scumm.h	2007-11-06 12:22:52 UTC (rev 29434)
@@ -607,6 +607,7 @@
 	byte _saveLoadFlag, _saveLoadSlot;
 	uint32 _lastSaveTime;
 	bool _saveTemporaryState;
+	char _saveLoadFileName[32];
 	char _saveLoadName[32];
 
 	bool saveState(int slot, bool compat);


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