[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