SCUMM: Slight cleanup in savegame code.
This commit is contained in:
parent
f4cb2d35d4
commit
d8d6faff01
1 changed files with 29 additions and 13 deletions
|
@ -634,28 +634,46 @@ bool ScummEngine::getSavegameName(int slot, Common::String &desc) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool getSavegameName(Common::InSaveFile *in, Common::String &desc, int heversion) {
|
namespace {
|
||||||
SaveGameHeader hdr;
|
bool loadAndCheckSaveGameHeader(Common::InSaveFile *in, int heversion, SaveGameHeader &hdr, Common::String *error = nullptr) {
|
||||||
|
|
||||||
if (!loadSaveGameHeader(in, hdr)) {
|
if (!loadSaveGameHeader(in, hdr)) {
|
||||||
desc = "Invalid savegame";
|
if (error) {
|
||||||
|
*error = "Invalid savegame";
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hdr.ver > CURRENT_VER)
|
if (hdr.ver > CURRENT_VER) {
|
||||||
hdr.ver = TO_LE_32(hdr.ver);
|
hdr.ver = TO_LE_32(hdr.ver);
|
||||||
|
}
|
||||||
|
|
||||||
if (hdr.ver < VER(7) || hdr.ver > CURRENT_VER) {
|
if (hdr.ver < VER(7) || hdr.ver > CURRENT_VER) {
|
||||||
desc = "Invalid version";
|
if (error) {
|
||||||
|
*error = "Invalid version";
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We (deliberately) broke HE savegame compatibility at some point.
|
// We (deliberately) broke HE savegame compatibility at some point.
|
||||||
if (hdr.ver < VER(57) && heversion >= 60) {
|
if (hdr.ver < VER(57) && heversion >= 60) {
|
||||||
desc = "Unsupported version";
|
if (error) {
|
||||||
|
*error = "Unsupported version";
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
hdr.name[sizeof(hdr.name) - 1] = 0;
|
hdr.name[sizeof(hdr.name) - 1] = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} // End of anonymous namespace
|
||||||
|
|
||||||
|
bool getSavegameName(Common::InSaveFile *in, Common::String &desc, int heversion) {
|
||||||
|
SaveGameHeader hdr;
|
||||||
|
|
||||||
|
if (!loadAndCheckSaveGameHeader(in, heversion, hdr, &desc)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
desc = hdr.name;
|
desc = hdr.name;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -672,13 +690,12 @@ Graphics::Surface *ScummEngine::loadThumbnailFromSlot(const char *target, int sl
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!loadSaveGameHeader(in, hdr)) {
|
// FIXME: HE version?
|
||||||
|
if (!loadAndCheckSaveGameHeader(in, 0, hdr)) {
|
||||||
delete in;
|
delete in;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hdr.ver > CURRENT_VER)
|
|
||||||
hdr.ver = TO_LE_32(hdr.ver);
|
|
||||||
if (hdr.ver < VER(52)) {
|
if (hdr.ver < VER(52)) {
|
||||||
delete in;
|
delete in;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -705,13 +722,12 @@ bool ScummEngine::loadInfosFromSlot(const char *target, int slot, SaveStateMetaI
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!loadSaveGameHeader(in, hdr)) {
|
// FIXME: HE version?
|
||||||
|
if (!loadAndCheckSaveGameHeader(in, 0, hdr)) {
|
||||||
delete in;
|
delete in;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hdr.ver > CURRENT_VER)
|
|
||||||
hdr.ver = TO_LE_32(hdr.ver);
|
|
||||||
if (hdr.ver < VER(56)) {
|
if (hdr.ver < VER(56)) {
|
||||||
delete in;
|
delete in;
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue