Commited updated version of my own patch #1868402: Basic savestate plugin API

svn-id: r30786
This commit is contained in:
Max Horn 2008-02-04 10:15:21 +00:00
parent dd7fcd6867
commit 5fb7f7a4d6
13 changed files with 254 additions and 27 deletions

View file

@ -431,39 +431,46 @@ void ScummEngine::listSavegames(bool *marks, int num) {
}
}
bool ScummEngine::getSavegameName(int slot, char *desc) {
bool getSavegameName(Common::InSaveFile *in, Common::String &desc, int heversion);
bool ScummEngine::getSavegameName(int slot, Common::String &desc) {
Common::InSaveFile *in = 0;
bool result = false;
char filename[256];
Common::SeekableReadStream *in;
desc.clear();
makeSavegameName(filename, slot, false);
in = _saveFileMan->openForLoading(filename);
if (in) {
result = Scumm::getSavegameName(in, desc, _game.heversion);
delete in;
}
return result;
}
bool getSavegameName(Common::InSaveFile *in, Common::String &desc, int heversion) {
SaveGameHeader hdr;
makeSavegameName(filename, slot, false);
if (!(in = _saveFileMan->openForLoading(filename))) {
strcpy(desc, "");
return false;
}
if (!loadSaveGameHeader(in, hdr)) {
delete in;
strcpy(desc, "Invalid savegame");
desc = "Invalid savegame";
return false;
}
delete in;
if (hdr.ver > CURRENT_VER)
hdr.ver = TO_LE_32(hdr.ver);
if (hdr.ver < VER(7) || hdr.ver > CURRENT_VER) {
strcpy(desc, "Invalid version");
desc = "Invalid version";
return false;
}
// We (deliberately) broke HE savegame compatibility at some point.
if (hdr.ver < VER(57) && _game.heversion >= 60) {
strcpy(desc, "Unsupported version");
if (hdr.ver < VER(57) && heversion >= 60) {
desc = "Unsupported version";
return false;
}
memcpy(desc, hdr.name, sizeof(hdr.name));
desc[sizeof(hdr.name) - 1] = 0;
hdr.name[sizeof(hdr.name) - 1] = 0;
desc = hdr.name;
return true;
}