[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