[Scummvm-cvs-logs] SF.net SVN: scummvm:[55768] scummvm/trunk/engines/gob/inter_playtoons.cpp

drmccoy at users.sourceforge.net drmccoy at users.sourceforge.net
Fri Feb 4 16:54:52 CET 2011


Revision: 55768
          http://scummvm.svn.sourceforge.net/scummvm/?rev=55768&view=rev
Author:   drmccoy
Date:     2011-02-04 15:54:52 +0000 (Fri, 04 Feb 2011)

Log Message:
-----------
GOB: Implement case -2 for oPlaytoons_getObjAnimSize

Modified Paths:
--------------
    scummvm/trunk/engines/gob/inter_playtoons.cpp

Modified: scummvm/trunk/engines/gob/inter_playtoons.cpp
===================================================================
--- scummvm/trunk/engines/gob/inter_playtoons.cpp	2011-02-04 15:54:21 UTC (rev 55767)
+++ scummvm/trunk/engines/gob/inter_playtoons.cpp	2011-02-04 15:54:52 UTC (rev 55768)
@@ -316,20 +316,54 @@
 void Inter_Playtoons::oPlaytoons_getObjAnimSize() {
 	int16 objIndex;
 	uint16 readVar[4];
-	uint8 i;
+	uint16 types[4];
 	Mult::Mult_AnimData animData;
 
 	_vm->_game->_script->evalExpr(&objIndex);
 
-	for (i = 0; i < 4; i++)
-		readVar[i] = _vm->_game->_script->readVarIndex();
+	for (int i = 0; i < 4; i++)
+		readVar[i] = _vm->_game->_script->readVarIndex(0, &types[0]);
 
 	if (objIndex == -1) {
 		warning("oPlaytoons_getObjAnimSize case -1 not implemented");
 		return;
 	}
+
 	if (objIndex == -2) {
-		warning("oPlaytoons_getObjAnimSize case -2 not implemented");
+		bool doBreak = false;
+		for (int i = 0; i < 3; i++)
+			storeValue(readVar[i], types[i], -1);
+
+		for (int i = readValue(readVar[3], types[3]); i < _vm->_mult->_objCount; i++) {
+			if (_vm->_mult->_objects[i].pAnimData->isStatic != 0)
+				continue;
+
+			byte *data = (byte *)_vm->_mult->_objects[i].pAnimData;
+
+			for (int j = 1; j < 39; j += 2) {
+				int32 value1 = READ_VARO_UINT32(readVar[3] +  j      * 4);
+				int32 value2 = READ_VARO_UINT32(readVar[3] + (j + 1) * 4);
+				if (value1 == -1) {
+					doBreak = true;
+					break;
+				}
+
+				if (value1 >= 0) {
+					if ((int8)data[value1] != value2)
+						break;
+				} else {
+					if ((int8)data[-value1] == value2)
+						break;
+				}
+
+			}
+
+			if (doBreak) {
+				storeValue(readVar[0], types[0], i);
+				break;
+			}
+		}
+
 		return;
 	}
 


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