ZVISION: Cleanup the ZIX file code

Also, add handling for 3 CDs, for Zork: Nemesis
This commit is contained in:
Filippos Karapetis
2015-01-07 11:42:25 +02:00
parent 364b72c29b
commit d70503cc98
+13 -25
View File
@@ -169,44 +169,32 @@ void SearchManager::loadZix(const Common::String &name) {
line.trim();
if (line.matchString("----------*", true))
break;
else if (line.matchString("DIR:*", true) || line.matchString("CD0:*", true) || line.matchString("CD1:*", true)) {
else if (line.matchString("DIR:*", true) || line.matchString("CD0:*", true) || line.matchString("CD1:*", true) || line.matchString("CD2:*", true)) {
Common::Archive *arc;
Common::String path(line.c_str() + 5);
for (uint i = 0; i < path.size(); i++)
if (path[i] == '\\')
path.setChar('/', i);
// Check if INQUIS.ZIX refers to the ZGI folder, and check the game
// root folder instead
if (path.hasPrefix("zgi\\"))
if (path.hasPrefix("zgi/"))
path = Common::String(path.c_str() + 4);
if (path.hasPrefix("zgi_e\\"))
if (path.hasPrefix("zgi_e/"))
path = Common::String(path.c_str() + 6);
Common::Archive *arc;
char tempPath[128];
strcpy(tempPath, path.c_str());
for (uint i = 0; i < path.size(); i++)
if (tempPath[i] == '\\')
tempPath[i] = '/';
path = Common::String(tempPath);
if (path.size() && path[0] == '.')
path.deleteChar(0);
if (path.size() && path[0] == '/')
path.deleteChar(0);
if (path.size() && path.hasSuffix("/"))
path.deleteLastChar();
if (path.matchString("*.zfs", true))
if (path.matchString("*.zfs", true)) {
arc = new ZfsArchive(path);
else {
if (path.size()) {
if (path[path.size() - 1] == '\\' || path[path.size() - 1] == '/')
path.deleteLastChar();
if (path.size())
for (Common::List<Common::String>::iterator it = _dirList.begin(); it != _dirList.end(); ++it)
if (path.equalsIgnoreCase(*it)) {
path = *it;
break;
}
}
} else {
path = Common::String::format("%s/%s", _root.c_str(), path.c_str());
arc = new Common::FSDirectory(path);
}
archives.push_back(arc);