aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/agi/detection.cpp6
-rw-r--r--engines/agi/loader_v3.cpp6
-rw-r--r--engines/agi/sound.cpp10
-rw-r--r--engines/agos/saveload.cpp23
-rw-r--r--engines/kyra/resource.cpp10
-rw-r--r--engines/lure/detection.cpp2
-rw-r--r--engines/queen/queen.cpp27
-rw-r--r--engines/saga/saveload.cpp24
-rw-r--r--engines/scumm/detection.cpp10
-rw-r--r--engines/scumm/dialogs.cpp12
-rw-r--r--engines/scumm/saveload.cpp22
-rw-r--r--engines/sky/sky.cpp6
-rw-r--r--engines/sword1/sword1.cpp6
-rw-r--r--engines/sword2/sword2.cpp8
-rw-r--r--engines/touche/saveload.cpp2
-rw-r--r--engines/touche/ui.cpp26
16 files changed, 147 insertions, 53 deletions
diff --git a/engines/agi/detection.cpp b/engines/agi/detection.cpp
index 601b660ad3..afd61ae765 100644
--- a/engines/agi/detection.cpp
+++ b/engines/agi/detection.cpp
@@ -1930,7 +1930,7 @@ Common::EncapsulatedADGameDesc fallbackDetector(const FSList *fslist) {
path = ".";
FilesystemNode fsCurrentDir(path);
- fsCurrentDir.listDir(fslistCurrentDir, FilesystemNode::kListFilesOnly);
+ fsCurrentDir.getChildren(fslistCurrentDir, FilesystemNode::kListFilesOnly);
fslist = &fslistCurrentDir;
}
@@ -1947,13 +1947,13 @@ Common::EncapsulatedADGameDesc fallbackDetector(const FSList *fslist) {
// First grab all filenames and at the same time count the number of *.wag files
for (FSList::const_iterator file = fslist->begin(); file != fslist->end(); ++file) {
if (file->isDirectory()) continue;
- Common::String filename = file->name();
+ Common::String filename = file->getName();
filename.toLowercase();
allFiles[filename] = true; // Save the filename in a hash table
if (filename.hasSuffix(".wag")) {
// Save latest found *.wag file's path (Can be used to open the file, the name can't)
- wagFilePath = file->path();
+ wagFilePath = file->getPath();
wagFileCount++; // Count found *.wag files
}
}
diff --git a/engines/agi/loader_v3.cpp b/engines/agi/loader_v3.cpp
index 65b9e6592b..362d778c66 100644
--- a/engines/agi/loader_v3.cpp
+++ b/engines/agi/loader_v3.cpp
@@ -52,14 +52,14 @@ int AgiLoader_v3::detectGame() {
FSList fslist;
FilesystemNode dir(ConfMan.get("path"));
- if (!dir.listDir(fslist, FilesystemNode::kListFilesOnly)) {
- warning("AgiEngine: invalid game path '%s'", dir.path().c_str());
+ if (!dir.getChildren(fslist, FilesystemNode::kListFilesOnly)) {
+ warning("AgiEngine: invalid game path '%s'", dir.getPath().c_str());
return errInvalidAGIFile;
}
for (FSList::const_iterator file = fslist.begin();
file != fslist.end() && !found; ++file) {
- Common::String f = file->name();
+ Common::String f = file->getName();
f.toLowercase();
if (f.hasSuffix("vol.0")) {
diff --git a/engines/agi/sound.cpp b/engines/agi/sound.cpp
index 99d29bcc6b..b76ab309a5 100644
--- a/engines/agi/sound.cpp
+++ b/engines/agi/sound.cpp
@@ -989,7 +989,7 @@ struct fsnodeNameEqualsIgnoreCase : public Common::UnaryFunction<const Filesyste
fsnodeNameEqualsIgnoreCase(const Common::String str) { _str.push_back(str); }
bool operator()(const FilesystemNode &param) const {
for (Common::StringList::const_iterator iter = _str.begin(); iter != _str.end(); iter++)
- if (param.name().equalsIgnoreCase(*iter))
+ if (param.getName().equalsIgnoreCase(*iter))
return true;
return false;
}
@@ -1014,8 +1014,8 @@ bool SoundMgr::loadInstruments() {
// List files in the game path
FSList fslist;
FilesystemNode dir(ConfMan.get("path"));
- if (!dir.listDir(fslist, FilesystemNode::kListFilesOnly)) {
- warning("Invalid game path (\"%s\"), not loading Apple IIGS instruments", dir.path().c_str());
+ if (!dir.getChildren(fslist, FilesystemNode::kListFilesOnly)) {
+ warning("Invalid game path (\"%s\"), not loading Apple IIGS instruments", dir.getPath().c_str());
return false;
}
@@ -1050,12 +1050,12 @@ bool SoundMgr::loadInstruments() {
// Finally fix the instruments' lengths using the wave file data
// (A zero in the wave file data can end the sample prematurely)
// and convert the wave file from 8-bit unsigned to 16-bit signed format.
- Common::MemoryReadStream *uint8Wave = loadWaveFile(waveFsnode->path(), *exeInfo);
+ Common::MemoryReadStream *uint8Wave = loadWaveFile(waveFsnode->getPath(), *exeInfo);
// Seek the wave to its
if (uint8Wave != NULL)
uint8Wave->seek(0);
- bool result = uint8Wave != NULL && loadInstrumentHeaders(exeFsnode->path(), *exeInfo) &&
+ bool result = uint8Wave != NULL && loadInstrumentHeaders(exeFsnode->getPath(), *exeInfo) &&
finalizeInstruments(*uint8Wave) && convertWave(*uint8Wave, g_wave, uint8Wave->size());
delete uint8Wave; // Free the 8-bit unsigned wave file buffer
diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp
index 3715088ee7..f7c2d4846f 100644
--- a/engines/agos/saveload.cpp
+++ b/engines/agos/saveload.cpp
@@ -38,13 +38,29 @@ namespace AGOS {
int AGOSEngine::countSaveGames() {
Common::InSaveFile *f;
+ Common::StringList filenames;
uint i = 1;
+ char slot[3];
+ int slotNum;
bool marks[256];
char *prefix = genSaveName(998);
- prefix[strlen(prefix)-3] = '\0';
- _saveFileMan->listSavefiles(prefix, marks, 256);
-
+ prefix[strlen(prefix)-3] = '*';
+ prefix[strlen(prefix)-2] = '\0';
+ memset(marks, false, 256 * sizeof(bool)); //assume no savegames for this title
+ filenames = _saveFileMan->listSavefiles(prefix);
+
+ for(Common::StringList::const_iterator file = filenames.begin(); file != filenames.end(); file++){
+ //Obtain the last 3 digits of the filename, since they correspond to the save slot
+ slot[0] = file->c_str()[file->size()-3];
+ slot[1] = file->c_str()[file->size()-2];
+ slot[2] = file->c_str()[file->size()-1];
+
+ slotNum = atoi(slot);
+ if(slotNum >= 0 && slotNum < 256)
+ marks[slotNum] = true; //mark this slot as valid
+ }
+
while (i < 256) {
if (marks[i] &&
(f = _saveFileMan->openForLoading(genSaveName(i)))) {
@@ -53,6 +69,7 @@ int AGOSEngine::countSaveGames() {
} else
break;
}
+
return i;
}
diff --git a/engines/kyra/resource.cpp b/engines/kyra/resource.cpp
index 3f01463dc6..32c090dc57 100644
--- a/engines/kyra/resource.cpp
+++ b/engines/kyra/resource.cpp
@@ -82,8 +82,8 @@ Resource::Resource(KyraEngine *vm) {
FSList fslist;
FilesystemNode dir(ConfMan.get("path"));
- if (!dir.listDir(fslist, FilesystemNode::kListFilesOnly))
- error("invalid game path '%s'", dir.path().c_str());
+ if (!dir.getChildren(fslist, FilesystemNode::kListFilesOnly))
+ error("invalid game path '%s'", dir.getPath().c_str());
if (_vm->game() == GI_KYRA1 && _vm->gameFlags().isTalkie) {
static const char *list[] = {
@@ -96,7 +96,7 @@ Resource::Resource(KyraEngine *vm) {
Common::for_each(_pakfiles.begin(), _pakfiles.end(), Common::bind2nd(Common::mem_fun(&ResourceFile::protect), true));
} else {
for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
- Common::String filename = file->name();
+ Common::String filename = file->getName();
filename.toUppercase();
// No real PAK file!
@@ -104,8 +104,8 @@ Resource::Resource(KyraEngine *vm) {
continue;
if (filename.hasSuffix("PAK") || filename.hasSuffix("APK")) {
- if (!loadPakFile(file->name()))
- error("couldn't open pakfile '%s'", file->name().c_str());
+ if (!loadPakFile(file->getName()))
+ error("couldn't open pakfile '%s'", file->getName().c_str());
}
}
diff --git a/engines/lure/detection.cpp b/engines/lure/detection.cpp
index d12244af07..4291b9aedb 100644
--- a/engines/lure/detection.cpp
+++ b/engines/lure/detection.cpp
@@ -97,7 +97,7 @@ GameList Engine_LURE_detectGames(const FSList &fslist) {
continue;
for (g = lure_games; g->gameid; g++) {
- if (scumm_stricmp(file->name().c_str(), g->checkFile) == 0)
+ if (scumm_stricmp(file->getName().c_str(), g->checkFile) == 0)
isFound = true;
}
if (isFound)
diff --git a/engines/queen/queen.cpp b/engines/queen/queen.cpp
index bbb186d0ae..7ba89b7af9 100644
--- a/engines/queen/queen.cpp
+++ b/engines/queen/queen.cpp
@@ -73,7 +73,7 @@ GameList Engine_QUEEN_detectGames(const FSList &fslist) {
if (file->isDirectory()) {
continue;
}
- if (file->name().equalsIgnoreCase("queen.1") || file->name().equalsIgnoreCase("queen.1c")) {
+ if (file->getName().equalsIgnoreCase("queen.1") || file->getName().equalsIgnoreCase("queen.1c")) {
Common::File dataFile;
if (!dataFile.open(*file)) {
continue;
@@ -317,11 +317,28 @@ void QueenEngine::makeGameStateName(uint16 slot, char *buf) {
}
void QueenEngine::findGameStateDescriptions(char descriptions[100][32]) {
- char filename[20];
- makeGameStateName(0, filename);
- filename[strlen(filename) - 2] = 0;
+ char prefix[20];
+ makeGameStateName(0, prefix);
+ prefix[strlen(prefix) - 2] = '*';
+ prefix[strlen(prefix) - 1] = 0;
bool marks[SAVESTATE_MAX_NUM];
- _saveFileMan->listSavefiles(filename, marks, SAVESTATE_MAX_NUM);
+ char slot[2];
+ int slotNum;
+ Common::StringList filenames;
+
+ memset(marks, false, SAVESTATE_MAX_NUM * sizeof(bool)); //assume no savegames for this title
+ filenames = _saveFileMan->listSavefiles(prefix);
+
+ for(Common::StringList::const_iterator file = filenames.begin(); file != filenames.end(); file++){
+ //Obtain the last 2 digits of the filename, since they correspond to the save slot
+ slot[0] = file->c_str()[file->size()-2];
+ slot[1] = file->c_str()[file->size()-1];
+
+ slotNum = atoi(slot);
+ if(slotNum >= 0 && slotNum < SAVESTATE_MAX_NUM)
+ marks[slotNum] = true; //mark this slot as valid
+ }
+
for (int i = 0; i < SAVESTATE_MAX_NUM; ++i) {
if (marks[i]) {
GameStateHeader header;
diff --git a/engines/saga/saveload.cpp b/engines/saga/saveload.cpp
index a697ab25ff..6e731de44e 100644
--- a/engines/saga/saveload.cpp
+++ b/engines/saga/saveload.cpp
@@ -112,14 +112,32 @@ uint SagaEngine::getNewSaveSlotNumber() {
}
void SagaEngine::fillSaveList() {
+ assert(_saveMarks);
+
int i;
Common::InSaveFile *in;
+ Common::StringList filenames;
+ char slot[2];
+ int slotNum;
char *name;
name = calcSaveFileName(MAX_SAVES);
- name[strlen(name) - 2] = 0;
- _saveFileMan->listSavefiles(name, _saveMarks, MAX_SAVES);
-
+ name[strlen(name) - 2] = '*';
+ name[strlen(name) - 1] = 0;
+
+ memset(_saveMarks, false, MAX_SAVES * sizeof(bool)); //assume no savegames for this title
+ filenames = _saveFileMan->listSavefiles(name);
+
+ for(Common::StringList::iterator file = filenames.begin(); file != filenames.end(); file++){
+ //Obtain the last 2 digits of the filename, since they correspond to the save slot
+ slot[0] = file->c_str()[file->size()-2];
+ slot[1] = file->c_str()[file->size()-1];
+
+ slotNum = atoi(slot);
+ if(slotNum >= 0 && slotNum < MAX_SAVES)
+ _saveMarks[slotNum] = true; //mark this slot as valid
+ }
+
_saveFilesMaxCount = 0;
for (i = 0; i < MAX_SAVES; i++) {
if (_saveMarks[i]) {
diff --git a/engines/scumm/detection.cpp b/engines/scumm/detection.cpp
index 25c0a7318d..90c6e40aa7 100644
--- a/engines/scumm/detection.cpp
+++ b/engines/scumm/detection.cpp
@@ -190,7 +190,7 @@ static bool testGame(const GameSettings *g, const DescMap &fileMD5Map, const Com
// the first match is used.
static bool searchFSNode(const FSList &fslist, const Common::String &name, FilesystemNode &result) {
for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
- if (!scumm_stricmp(file->name().c_str(), name.c_str())) {
+ if (!scumm_stricmp(file->getName().c_str(), name.c_str())) {
result = *file;
return true;
}
@@ -216,7 +216,7 @@ static Common::Language detectLanguage(const FSList &fslist, byte id) {
FSList tmpList;
if (searchFSNode(fslist, "RESOURCE", resDir)
&& resDir.isDirectory()
- && resDir.listDir(tmpList, FilesystemNode::kListFilesOnly)
+ && resDir.getChildren(tmpList, FilesystemNode::kListFilesOnly)
&& searchFSNode(tmpList, filename, langFile)) {
tmp.open(langFile);
}
@@ -320,7 +320,7 @@ static void detectGames(const FSList &fslist, Common::List<DetectorResult> &resu
DetectorDesc d;
d.node = *file;
d.md5Entry = 0;
- fileMD5Map[file->name()] = d;
+ fileMD5Map[file->getName()] = d;
}
}
@@ -447,7 +447,7 @@ static bool testGame(const GameSettings *g, const DescMap &fileMD5Map, const Com
Common::File tmp;
if (!tmp.open(d.node)) {
- warning("SCUMM detectGames: failed to open '%s' for read access", d.node.path().c_str());
+ warning("SCUMM detectGames: failed to open '%s' for read access", d.node.getPath().c_str());
return false;
}
@@ -751,7 +751,7 @@ PluginError Engine_SCUMM_create(OSystem *syst, Engine **engine) {
// Fetch the list of files in the current directory
FSList fslist;
FilesystemNode dir(ConfMan.get("path"));
- if (!dir.listDir(fslist, FilesystemNode::kListFilesOnly)) {
+ if (!dir.getChildren(fslist, FilesystemNode::kListFilesOnly)) {
return kInvalidPathError;
}
diff --git a/engines/scumm/dialogs.cpp b/engines/scumm/dialogs.cpp
index 58fd740b17..1666578c4c 100644
--- a/engines/scumm/dialogs.cpp
+++ b/engines/scumm/dialogs.cpp
@@ -421,10 +421,10 @@ void SaveLoadChooser::updateInfos() {
#pragma mark -
Common::StringList generateSavegameList(ScummEngine *scumm, bool saveMode) {
- // Get savegame names
- Common::StringList l;
+ // Get savegame descriptions
+ Common::StringList descriptions;
char name[32];
- uint i = saveMode ? 1 : 0;
+ uint i = saveMode ? 1 : 0; //the autosave is on slot #0
bool avail_saves[81];
scumm->listSavegames(avail_saves, ARRAYSIZE(avail_saves));
@@ -433,10 +433,10 @@ Common::StringList generateSavegameList(ScummEngine *scumm, bool saveMode) {
scumm->getSavegameName(i, name);
else
name[0] = 0;
- l.push_back(name);
+ descriptions.push_back(name);
}
-
- return l;
+
+ return descriptions;
}
MainMenuDialog::MainMenuDialog(ScummEngine *scumm)
diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp
index 4e8d670403..0e485e226a 100644
--- a/engines/scumm/saveload.cpp
+++ b/engines/scumm/saveload.cpp
@@ -384,10 +384,28 @@ void ScummEngine::makeSavegameName(char *out, int slot, bool temporary) {
}
void ScummEngine::listSavegames(bool *marks, int num) {
+ assert(marks);
+
char prefix[256];
+ char slot[2];
+ int slotNum;
+ Common::StringList filenames;
+
makeSavegameName(prefix, 99, false);
- prefix[strlen(prefix)-2] = 0;
- _saveFileMan->listSavefiles(prefix, marks, num);
+ prefix[strlen(prefix)-2] = '*';
+ prefix[strlen(prefix)-1] = 0;
+ memset(marks, false, num * sizeof(bool)); //assume no savegames for this title
+ filenames = _saveFileMan->listSavefiles(prefix);
+
+ for(Common::StringList::const_iterator file = filenames.begin(); file != filenames.end(); file++){
+ //Obtain the last 2 digits of the filename, since they correspond to the save slot
+ slot[0] = file->c_str()[file->size()-2];
+ slot[1] = file->c_str()[file->size()-1];
+
+ slotNum = atoi(slot);
+ if(slotNum >= 0 && slotNum < num)
+ marks[slotNum] = true; //mark this slot as valid
+ }
}
bool ScummEngine::getSavegameName(int slot, char *desc) {
diff --git a/engines/sky/sky.cpp b/engines/sky/sky.cpp
index 79c1f0cb7d..1ff23dbd07 100644
--- a/engines/sky/sky.cpp
+++ b/engines/sky/sky.cpp
@@ -124,11 +124,11 @@ GameList Engine_SKY_detectGames(const FSList &fslist) {
// Iterate over all files in the given directory
for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
if (!file->isDirectory()) {
- const char *fileName = file->name().c_str();
+ const char *fileName = file->getName().c_str();
if (0 == scumm_stricmp("sky.dsk", fileName)) {
Common::File dataDisk;
- if (dataDisk.open(file->path())) {
+ if (dataDisk.open(file->getPath())) {
hasSkyDsk = true;
dataDiskSize = dataDisk.size();
}
@@ -136,7 +136,7 @@ GameList Engine_SKY_detectGames(const FSList &fslist) {
if (0 == scumm_stricmp("sky.dnr", fileName)) {
Common::File dinner;
- if (dinner.open(file->path())) {
+ if (dinner.open(file->getPath())) {
hasSkyDnr = true;
dinnerTableEntries = dinner.readUint32LE();
}
diff --git a/engines/sword1/sword1.cpp b/engines/sword1/sword1.cpp
index 5633a58f0f..b5152f33bc 100644
--- a/engines/sword1/sword1.cpp
+++ b/engines/sword1/sword1.cpp
@@ -107,15 +107,15 @@ GameDescriptor Engine_SWORD1_findGameID(const char *gameid) {
void Sword1CheckDirectory(const FSList &fslist, bool *filesFound) {
for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
if (!file->isDirectory()) {
- const char *fileName = file->name().c_str();
+ const char *fileName = file->getName().c_str();
for (int cnt = 0; cnt < NUM_FILES_TO_CHECK; cnt++)
if (scumm_stricmp(fileName, g_filesToCheck[cnt]) == 0)
filesFound[cnt] = true;
} else {
for (int cnt = 0; cnt < ARRAYSIZE(g_dirNames); cnt++)
- if (scumm_stricmp(file->name().c_str(), g_dirNames[cnt]) == 0) {
+ if (scumm_stricmp(file->getName().c_str(), g_dirNames[cnt]) == 0) {
FSList fslist2;
- if (file->listDir(fslist2, FilesystemNode::kListFilesOnly))
+ if (file->getChildren(fslist2, FilesystemNode::kListFilesOnly))
Sword1CheckDirectory(fslist2, filesFound);
}
}
diff --git a/engines/sword2/sword2.cpp b/engines/sword2/sword2.cpp
index 8bf3467b86..6bbd58ff3c 100644
--- a/engines/sword2/sword2.cpp
+++ b/engines/sword2/sword2.cpp
@@ -101,7 +101,7 @@ GameList Engine_SWORD2_detectGames(const FSList &fslist) {
// Iterate over all files in the given directory
for (file = fslist.begin(); file != fslist.end(); ++file) {
if (!file->isDirectory()) {
- const char *fileName = file->name().c_str();
+ const char *fileName = file->getName().c_str();
if (0 == scumm_stricmp(g->detectname, fileName)) {
// Match found, add to list of candidates, then abort inner loop.
@@ -118,11 +118,11 @@ GameList Engine_SWORD2_detectGames(const FSList &fslist) {
// present e.g. if the user copied the data straight from CD.
for (file = fslist.begin(); file != fslist.end(); ++file) {
if (file->isDirectory()) {
- const char *fileName = file->name().c_str();
+ const char *fileName = file->getName().c_str();
if (0 == scumm_stricmp("clusters", fileName)) {
FSList recList;
- if (file->listDir(recList, FilesystemNode::kListAll)) {
+ if (file->getChildren(recList, FilesystemNode::kListAll)) {
GameList recGames(Engine_SWORD2_detectGames(recList));
if (!recGames.empty()) {
detectedGames.push_back(recGames);
@@ -144,7 +144,7 @@ PluginError Engine_SWORD2_create(OSystem *syst, Engine **engine) {
FSList fslist;
FilesystemNode dir(ConfMan.get("path"));
- if (!dir.listDir(fslist, FilesystemNode::kListAll)) {
+ if (!dir.getChildren(fslist, FilesystemNode::kListAll)) {
return kInvalidPathError;
}
diff --git a/engines/touche/saveload.cpp b/engines/touche/saveload.cpp
index fb82e68944..5ff749fa68 100644
--- a/engines/touche/saveload.cpp
+++ b/engines/touche/saveload.cpp
@@ -400,7 +400,7 @@ void ToucheEngine::readGameStateDescription(int num, char *description, int len)
void ToucheEngine::generateGameStateFileName(int num, char *dst, int len, bool prefixOnly) const {
if (prefixOnly) {
- snprintf(dst, len, "%s.", _targetName.c_str());
+ snprintf(dst, len, "%s.*", _targetName.c_str());
} else {
snprintf(dst, len, "%s.%d", _targetName.c_str(), num);
}
diff --git a/engines/touche/ui.cpp b/engines/touche/ui.cpp
index 15dc64aaf2..4d7100d4d0 100644
--- a/engines/touche/ui.cpp
+++ b/engines/touche/ui.cpp
@@ -370,9 +370,33 @@ void ToucheEngine::handleOptions(int forceDisplay) {
setupMenu(menuData.mode, &menuData);
curMode = menuData.mode;
if (menuData.mode == kMenuLoadStateMode || menuData.mode == kMenuSaveStateMode) {
+ assert(menuData.saveLoadMarks);
+
char gameStateFileName[16];
generateGameStateFileName(999, gameStateFileName, 15, true);
- _saveFileMan->listSavefiles(gameStateFileName, menuData.saveLoadMarks, 100);
+ char slot[2];
+ int slotNum;
+ Common::StringList filenames;
+
+ memset(menuData.saveLoadMarks, false, 100 * sizeof(bool)); //assume no savegames for this title
+ filenames = _saveFileMan->listSavefiles(gameStateFileName);
+
+ for(Common::StringList::const_iterator file = filenames.begin(); file != filenames.end(); file++){
+ //Obtain the last 1 or 2 digits of the filename, since they correspond to the save slot
+ //This engine can save games either with one or two digits, hence the additional if statement
+ slot[0] = file->c_str()[file->size()-2];
+ slot[1] = file->c_str()[file->size()-1];
+
+ if(!atoi(&slot[0])){
+ slotNum = atoi(&slot[1]);
+ } else {
+ slotNum = atoi(slot);
+ }
+
+ if(slotNum >= 0 && slotNum < 100)
+ menuData.saveLoadMarks[slotNum] = true; //mark this slot as valid
+ }
+
for (int i = 0; i < 100; ++i) {
menuData.saveLoadDescriptionsTable[i][0] = 0;
if (menuData.saveLoadMarks[i]) {