diff options
Diffstat (limited to 'scumm')
| -rw-r--r-- | scumm/intern.h | 2 | ||||
| -rw-r--r-- | scumm/script_v72he.cpp | 37 | 
2 files changed, 22 insertions, 17 deletions
diff --git a/scumm/intern.h b/scumm/intern.h index 6bcbe42be8..f991e92ca9 100644 --- a/scumm/intern.h +++ b/scumm/intern.h @@ -823,7 +823,7 @@ protected:  	virtual void decodeParseString(int a, int b);  	void decodeScriptString(byte *dst, bool scriptString = false);  	void copyScriptString(byte *dst, int dstSize); -	void convertFilePath(byte *dst); +	int convertFilePath(byte *dst, bool setFilePath = 0);  	byte *heFindResourceData(uint32 tag, byte *ptr);  	byte *heFindResource(uint32 tag, byte *ptr); diff --git a/scumm/script_v72he.cpp b/scumm/script_v72he.cpp index 11f2d88851..3821666d77 100644 --- a/scumm/script_v72he.cpp +++ b/scumm/script_v72he.cpp @@ -518,7 +518,7 @@ void ScummEngine_v72he::readArrayFromIndexFile() {  	}  } -void ScummEngine_v72he::convertFilePath(byte *dst) { +int ScummEngine_v72he::convertFilePath(byte *dst, bool setFilePath) {  	// Switch all \ to / for portablity  	int len = resStrLen(dst) + 1;  	for (int i = 0; i < len; i++) { @@ -537,21 +537,24 @@ void ScummEngine_v72he::convertFilePath(byte *dst) {  		}  	} -	File f; -	char filePath[256], newFilePath[256]; +	if (setFilePath) { +		File f; +		char filePath[256], newFilePath[256]; -	sprintf(filePath, "%s%s", _gameDataPath.c_str(), dst + r); -	if (f.exists(filePath)) { -		sprintf(newFilePath, "%s%s", _gameDataPath.c_str(), dst + r); -	} else { -		sprintf(newFilePath, "%s%s", _saveFileMan->getSavePath(), dst + r); -	} +		sprintf(filePath, "%s%s", _gameDataPath.c_str(), dst + r); +		if (f.exists(filePath)) { +			sprintf(newFilePath, "%s%s", _gameDataPath.c_str(), dst + r); +		} else { +			sprintf(newFilePath, "%s%s", _saveFileMan->getSavePath(), dst + r); +		} -	len = resStrLen((const byte *)newFilePath); -	memcpy(dst, newFilePath, len); -	dst[len] = 0; +		len = resStrLen((const byte *)newFilePath); +		memcpy(dst, newFilePath, len); +		dst[len] = 0; +		debug(0, "convertFilePath: newFilePath is %s", newFilePath); +	} -	debug(0, "convertFilePath: newFilePath is %s", newFilePath); +	return r;  }	  void ScummEngine_v72he::copyScriptString(byte *dst, int dstSize) { @@ -1722,7 +1725,7 @@ void ScummEngine_v72he::o72_openFile() {  		strcpy((char *)filename, buf1);  	} -	convertFilePath(filename); +	int r = convertFilePath(filename);  	debug(0,"Final filename to %s", filename);  	slot = -1; @@ -1736,10 +1739,12 @@ void ScummEngine_v72he::o72_openFile() {  	if (slot != -1) {  		switch(mode) {  		case 1: -			_hFileTable[slot].open((char*)filename, File::kFileReadMode); +			_hFileTable[slot].open((char*)filename + r, File::kFileReadMode, _saveFileMan->getSavePath()); +			if (_hFileTable[slot].isOpen() == false) +				_hFileTable[slot].open((char*)filename + r, File::kFileReadMode, _gameDataPath.c_str());  			break;  		case 2: -			_hFileTable[slot].open((char*)filename, File::kFileWriteMode); +			_hFileTable[slot].open((char*)filename + r, File::kFileWriteMode, _saveFileMan->getSavePath());  			break;  		default:  			error("o72_openFile(): wrong open file mode %d", mode);  | 
