[Scummvm-cvs-logs] SF.net SVN: scummvm:[43872] scummvm/trunk/engines/sci/engine/vm.cpp

waltervn at users.sourceforge.net waltervn at users.sourceforge.net
Tue Sep 1 04:50:41 CEST 2009


Revision: 43872
          http://scummvm.svn.sourceforge.net/scummvm/?rev=43872&view=rev
Author:   waltervn
Date:     2009-09-01 02:50:40 +0000 (Tue, 01 Sep 2009)

Log Message:
-----------
SCI: Fix bug in SCI1.1 varselector search.

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/vm.cpp

Modified: scummvm/trunk/engines/sci/engine/vm.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/vm.cpp	2009-09-01 02:11:55 UTC (rev 43871)
+++ scummvm/trunk/engines/sci/engine/vm.cpp	2009-09-01 02:50:40 UTC (rev 43872)
@@ -1402,34 +1402,26 @@
 	// Determines if obj explicitly defines slc as a varselector
 	// Returns -1 if not found
 	SciVersion version = segManager->sciVersion();	// for the selector defines
+	byte *buf;
+	uint varnum;
 
 	if (version < SCI_VERSION_1_1) {
-		int varnum = obj->variable_names_nr;
+		varnum = obj->variable_names_nr;
 		int selector_name_offset = varnum * 2 + SCRIPT_SELECTOR_OFFSET;
-		int i;
-		byte *buf = obj->base_obj + selector_name_offset;
-
-		obj->base_vars = (uint16 *) buf;
-
-		for (i = 0; i < varnum; i++)
-			if (READ_LE_UINT16(buf + (i << 1)) == slc) // Found it?
-				return i; // report success
-
-		return -1; // Failed
+		buf = obj->base_obj + selector_name_offset;
 	} else {
-		byte *buf = (byte *) obj->base_vars;
-		int i;
-		int varnum = obj->_variables[1].offset;
-
 		if (!(obj->_variables[SCRIPT_INFO_SELECTOR].offset & SCRIPT_INFO_CLASS))
-			buf = ((byte *) obj_get(segManager, obj->_variables[SCRIPT_SUPERCLASS_SELECTOR])->base_vars);
+			obj = obj_get(segManager, obj->_variables[SCRIPT_SUPERCLASS_SELECTOR]);
 
-		for (i = 0; i < varnum; i++)
-			if (READ_LE_UINT16(buf + (i << 1)) == slc) // Found it?
-				return i; // report success
-
-		return -1; // Failed
+		buf = (byte *)obj->base_vars;
+		varnum = obj->_variables[1].toUint16();
 	}
+
+	for (uint i = 0; i < varnum; i++)
+		if (READ_LE_UINT16(buf + (i << 1)) == slc) // Found it?
+			return i; // report success
+
+	return -1; // Failed
 }
 
 static int _class_locate_funcselector(Object *obj, Selector slc, SciVersion version) {


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