SaveStateList GrimMetaEngine::listSaves(const char *target) const { Common::SaveFileManager *saveFileMan = g_system->getSavefileManager(); Common::StringArray filenames; Common::String pattern = "grim*.gsv"; filenames = saveFileMan->listSavefiles(pattern); SaveStateList saveList; char str[256]; int32 strSize; for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) { // Obtain the last digits of the filename, since they correspond to the save slot int slotNum = atoi(file->c_str() + 4); if (slotNum >= 0) { SaveGame *savedState = SaveGame::openForLoading(*file); if (savedState && savedState->isCompatible()) { savedState->beginSection('SUBS'); strSize = savedState->readLESint32(); savedState->read(str, strSize); savedState->endSection(); saveList.push_back(SaveStateDescriptor(slotNum, str)); } delete savedState; } } Common::sort(saveList.begin(), saveList.end(), cmpSave); return saveList; }
void Lua_V1::GetSaveGameData() { lua_Object param = lua_getparam(1); if (!lua_isstring(param)) return; const char *filename = lua_getstring(param); SaveGame *savedState = SaveGame::openForLoading(filename); lua_Object result = lua_createtable(); if (!savedState || !savedState->isCompatible()) { lua_pushobject(result); lua_pushnumber(2); lua_pushstring("mo.set"); // Just a placeholder to not make it throw a lua error lua_settable(); lua_pushobject(result); if (!savedState) { warning("Savegame %s is invalid", filename); } else { warning("Savegame %s is incompatible with this ResidualVM build. Save version: %d.%d; current version: %d.%d", filename, savedState->saveMajorVersion(), savedState->saveMinorVersion(), SaveGame::SAVEGAME_MAJOR_VERSION, SaveGame::SAVEGAME_MINOR_VERSION); } delete savedState; return; } int32 dataSize = savedState->beginSection('SUBS'); char str[200]; int32 strSize; int count = 0; for (;;) { if (dataSize <= 0) break; strSize = savedState->readLESint32(); savedState->read(str, strSize); lua_pushobject(result); lua_pushnumber(count); lua_pushstring(str); lua_settable(); dataSize -= strSize; dataSize -= 4; count++; } lua_pushobject(result); savedState->endSection(); delete savedState; }
SaveStateList GrimMetaEngine::listSaves(const char *target) const { Common::String gameId = ConfMan.get("gameid", target); Common::Platform platform = Common::parsePlatform(ConfMan.get("platform", target)); Common::SaveFileManager *saveFileMan = g_system->getSavefileManager(); Common::StringArray filenames; Common::String pattern = gameId == "monkey4" ? "efmi###.gsv" : "grim##.gsv"; if (platform == Common::kPlatformPS2) pattern = "efmi###.ps2"; filenames = saveFileMan->listSavefiles(pattern); SaveStateList saveList; char str[256]; int32 strSize; for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) { // Obtain the last digits of the filename, since they correspond to the save slot int slotNum = atoi(file->c_str() + 4); if (slotNum >= 0) { SaveGame *savedState = SaveGame::openForLoading(*file); if (savedState && savedState->isCompatible()) { if (platform == Common::kPlatformPS2) savedState->beginSection('PS2S'); else savedState->beginSection('SUBS'); strSize = savedState->readLESint32(); savedState->read(str, strSize); savedState->endSection(); saveList.push_back(SaveStateDescriptor(slotNum, str)); } delete savedState; } } Common::sort(saveList.begin(), saveList.end(), SaveStateDescriptorSlotComparator()); return saveList; }