diff options
| author | Travis Howell | 2007-11-06 12:22:52 +0000 | 
|---|---|---|
| committer | Travis Howell | 2007-11-06 12:22:52 +0000 | 
| commit | 443dff5285f0654be4a6f843b8262bd07bb95036 (patch) | |
| tree | 4cf62d53140b7e6d756c05ee09a625865ce70580 /engines | |
| parent | 3598192859797d8b7cc33a22af21f04bd45af01a (diff) | |
| download | scummvm-rg350-443dff5285f0654be4a6f843b8262bd07bb95036.tar.gz scummvm-rg350-443dff5285f0654be4a6f843b8262bd07bb95036.tar.bz2 scummvm-rg350-443dff5285f0654be4a6f843b8262bd07bb95036.zip  | |
Add support for original load/save system in HE games.
svn-id: r29434
Diffstat (limited to 'engines')
| -rw-r--r-- | engines/scumm/he/script_v60he.cpp | 30 | ||||
| -rw-r--r-- | engines/scumm/he/script_v72he.cpp | 31 | ||||
| -rw-r--r-- | engines/scumm/saveload.cpp | 37 | ||||
| -rw-r--r-- | engines/scumm/scumm.cpp | 1 | ||||
| -rw-r--r-- | engines/scumm/scumm.h | 1 | 
5 files changed, 68 insertions, 32 deletions
diff --git a/engines/scumm/he/script_v60he.cpp b/engines/scumm/he/script_v60he.cpp index 2909a44223..6119e9e920 100644 --- a/engines/scumm/he/script_v60he.cpp +++ b/engines/scumm/he/script_v60he.cpp @@ -568,11 +568,19 @@ void ScummEngine_v60he::o60_roomOps() {  		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 @@ void ScummEngine_v60he::o60_openFile() {  	const char *filename;  	convertMessageToString(_scriptPointer, buffer, sizeof(buffer)); -  	len = resStrLen(_scriptPointer);  	_scriptPointer += len + 1; @@ -1042,34 +1049,35 @@ void ScummEngine_v60he::o60_deleteFile() {  	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\")", newFilename, oldFilename); -	debug(1, "o60_rename stub (\"%s\" to \"%s\")", filename1, filename2); +	_saveFileMan->renameSavefile(oldFilename, newFilename);  }  int ScummEngine_v60he::readFileToArray(int slot, int32 size) { diff --git a/engines/scumm/he/script_v72he.cpp b/engines/scumm/he/script_v72he.cpp index df70fb7b0d..e5ffa12a37 100644 --- a/engines/scumm/he/script_v72he.cpp +++ b/engines/scumm/he/script_v72he.cpp @@ -978,7 +978,6 @@ void ScummEngine_v72he::o72_getNumFreeArrays() {  void ScummEngine_v72he::o72_roomOps() {  	int a, b, c, d, e; -	byte filename[100];  	byte subOp = fetchScriptByte(); @@ -1051,11 +1050,17 @@ void ScummEngine_v72he::o72_roomOps() {  		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,18 +1876,26 @@ void ScummEngine_v72he::o72_findAllObjects() {  }  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(buffer1, sizeof(buffer1)); +	copyScriptString(buffer2, sizeof(buffer2)); + +	const char *newFilename = (char *)buffer1 + convertFilePath(buffer1); +	const char *oldFilename = (char *)buffer2 + convertFilePath(buffer2); -	copyScriptString(newFilename, sizeof(newFilename)); -	copyScriptString(oldFilename, sizeof(oldFilename)); +	_saveFileMan->renameSavefile(oldFilename, newFilename);  	debug(1, "stub o72_rename(%s to %s)", oldFilename, newFilename);  } diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp index 2aa64ff409..17f0152b75 100644 --- a/engines/scumm/saveload.cpp +++ b/engines/scumm/saveload.cpp @@ -86,26 +86,34 @@ void ScummEngine::requestLoad(int slot) {  	_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 @@ bool ScummEngine::loadState(int slot, bool compat) {  	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; diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp index da01d7bbb8..24c23bc86b 100644 --- a/engines/scumm/scumm.cpp +++ b/engines/scumm/scumm.cpp @@ -200,6 +200,7 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr)  	_saveLoadSlot = 0;  	_lastSaveTime = 0;  	_saveTemporaryState = false; +	memset(_saveLoadFileName, 0, sizeof(_saveLoadFileName));  	memset(_saveLoadName, 0, sizeof(_saveLoadName));  	memset(_localScriptOffsets, 0, sizeof(_localScriptOffsets));  	_scriptPointer = NULL; diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h index 510af6d1d2..f76a7c05e7 100644 --- a/engines/scumm/scumm.h +++ b/engines/scumm/scumm.h @@ -607,6 +607,7 @@ protected:  	byte _saveLoadFlag, _saveLoadSlot;  	uint32 _lastSaveTime;  	bool _saveTemporaryState; +	char _saveLoadFileName[32];  	char _saveLoadName[32];  	bool saveState(int slot, bool compat);  | 
