[Scummvm-cvs-logs] SF.net SVN: scummvm:[47612] scummvm/trunk/engines/sci/resource.cpp
mthreepwood at users.sourceforge.net
mthreepwood at users.sourceforge.net
Wed Jan 27 22:43:34 CET 2010
Revision: 47612
http://scummvm.svn.sourceforge.net/scummvm/?rev=47612&view=rev
Author: mthreepwood
Date: 2010-01-27 21:43:23 +0000 (Wed, 27 Jan 2010)
Log Message:
-----------
SearchMan.listMatchingMembers does not return files in alphabetical order, so we can't rely on the order of the lists. Rework the SCI2.1+ loading code to iterate through both lists in nested loops to fix multi-archive SCI2.1 games (such as GK2).
Modified Paths:
--------------
scummvm/trunk/engines/sci/resource.cpp
Modified: scummvm/trunk/engines/sci/resource.cpp
===================================================================
--- scummvm/trunk/engines/sci/resource.cpp 2010-01-27 21:33:51 UTC (rev 47611)
+++ scummvm/trunk/engines/sci/resource.cpp 2010-01-27 21:43:23 UTC (rev 47612)
@@ -408,19 +408,19 @@
if (mapFiles.empty() || files.empty() || mapFiles.size() != files.size())
return 0;
- Common::ArchiveMemberList::const_iterator fileIterator = files.begin();
- Common::ArchiveMemberList::const_iterator mapIterator = mapFiles.begin();
-
- while (fileIterator != files.end()) {
+ for (Common::ArchiveMemberList::const_iterator mapIterator = mapFiles.begin(); mapIterator != mapFiles.end(); ++mapIterator) {
Common::String mapName = (*mapIterator)->getName();
- Common::String resName = (*fileIterator)->getName();
+ int mapNumber = atoi(strrchr(mapName.c_str(), '.') + 1);
- const char *dot = strrchr(mapName.c_str(), '.');
- int number = atoi(dot + 1);
+ for (Common::ArchiveMemberList::const_iterator fileIterator = files.begin(); fileIterator != files.end(); ++fileIterator) {
+ Common::String resName = (*fileIterator)->getName();
+ int resNumber = atoi(strrchr(resName.c_str(), '.') + 1);
- addSource(addExternalMap(mapName.c_str(), number), kSourceVolume, resName.c_str(), number);
- ++fileIterator;
- ++mapIterator;
+ if (mapNumber == resNumber) {
+ addSource(addExternalMap(mapName.c_str(), mapNumber), kSourceVolume, resName.c_str(), mapNumber);
+ break;
+ }
+ }
}
}
#else
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list