[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.402,2.403 object.cpp,1.210,1.211 script_v100he.cpp,2.99,2.100 script_v72he.cpp,2.223,2.224 script_v7he.cpp,2.135,2.136 script_v80he.cpp,2.80,2.81 script_v90he.cpp,2.194,2.195

kirben kirben at users.sourceforge.net
Mon Mar 28 02:03:21 CEST 2005


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11987/scumm

Modified Files:
	intern.h object.cpp script_v100he.cpp script_v72he.cpp 
	script_v7he.cpp script_v80he.cpp script_v90he.cpp 
Log Message:

findObject in HE72+ only checks object bounds
findObject in He70/71 only needs additional polygon check


Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.402
retrieving revision 2.403
diff -u -d -r2.402 -r2.403
--- intern.h	23 Mar 2005 00:16:49 -0000	2.402
+++ intern.h	28 Mar 2005 10:02:21 -0000	2.403
@@ -666,8 +666,6 @@
 	virtual int setupStringArray(int size);
 	void appendSubstring(int dst, int src, int len2, int len);
 
-	int findObject(int x, int y, int num, int *args);
-
 	virtual void setCursorFromImg(uint img, uint room, uint imgindex);
 
 	/* HE version 70 script opcodes */
@@ -675,7 +673,6 @@
 	void o70_pickupObject();
 	void o70_getActorRoom();
 	void o70_resourceRoutines();
-	void o70_findObject();
 	void o70_quitPauseRestart();
 	void o70_kernelSetFunctions();
 	void o70_copyString();
@@ -757,6 +754,7 @@
 	byte *heFindResourceData(uint32 tag, byte *ptr);
 	byte *heFindResource(uint32 tag, byte *ptr);
 	byte *findWrappedBlock(uint32 tag, byte *ptr, int state, bool flagError);
+	int findObject(int x, int y, int num, int *args);
 
 	/* HE version 72 script opcodes */
 	void o72_pushDWord();
@@ -779,6 +777,7 @@
 	void o72_roomOps();
 	void o72_actorOps();
 	void o72_verbOps();
+	void o72_findObject();
 	void o72_arrayOps();
 	void o72_talkActor();
 	void o72_talkEgo();

Index: object.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/object.cpp,v
retrieving revision 1.210
retrieving revision 1.211
diff -u -d -r1.210 -r1.211
--- object.cpp	25 Mar 2005 00:56:02 -0000	1.210
+++ object.cpp	28 Mar 2005 10:02:21 -0000	1.211
@@ -24,6 +24,7 @@
 #include "scumm/scumm.h"
 #include "scumm/actor.h"
 #include "scumm/bomp.h"
+#include "scumm/intern.h"
 #include "scumm/object.h"
 #include "scumm/resource.h"
 #include "scumm/usage_bits.h"
@@ -358,6 +359,10 @@
 			a = _objs[b].parentstate;
 			b = _objs[b].parent;
 			if (b == 0) {
+				if (_heversion >= 70) {
+					if (((ScummEngine_v70he *)this)->_wiz.polygonHit(_objs[i].obj_nr, x, y))
+						return _objs[i].obj_nr;
+				}
 				if (_objs[i].x_pos <= x && _objs[i].width + _objs[i].x_pos > x &&
 				    _objs[i].y_pos <= y && _objs[i].height + _objs[i].y_pos > y)
 					return _objs[i].obj_nr;

Index: script_v100he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v100he.cpp,v
retrieving revision 2.99
retrieving revision 2.100
diff -u -d -r2.99 -r2.100
--- script_v100he.cpp	26 Mar 2005 06:00:58 -0000	2.99
+++ script_v100he.cpp	28 Mar 2005 10:02:21 -0000	2.100
@@ -259,7 +259,7 @@
 		OPCODE(o90_findAllObjectsWithClassOf),
 		OPCODE(o6_invalid),
 		OPCODE(o6_findInventory),
-		OPCODE(o70_findObject),
+		OPCODE(o72_findObject),
 		/* B0 */
 		OPCODE(o72_findObjectWithClassOf),
 		OPCODE(o70_polygonHit),

Index: script_v72he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v72he.cpp,v
retrieving revision 2.223
retrieving revision 2.224
diff -u -d -r2.223 -r2.224
--- script_v72he.cpp	23 Mar 2005 00:16:50 -0000	2.223
+++ script_v72he.cpp	28 Mar 2005 10:02:21 -0000	2.224
@@ -244,7 +244,7 @@
 		OPCODE(o72_verbOps),
 		OPCODE(o6_getActorFromXY),
 		/* A0 */
-		OPCODE(o70_findObject),
+		OPCODE(o72_findObject),
 		OPCODE(o6_pseudoRoom),
 		OPCODE(o6_getActorElevation),
 		OPCODE(o6_getVerbEntrypoint),
@@ -654,6 +654,44 @@
 	}
 }
 
+int ScummEngine_v72he::findObject(int x, int y, int num, int *args) {
+	int b, cls, i, result;
+
+	for (i = 1; i < _numLocalObjects; i++) {
+		result = 0;
+		if ((_objs[i].obj_nr < 1) || getClass(_objs[i].obj_nr, kObjectClassUntouchable))
+			continue;
+
+		// Check polygon bounds
+		if (_wiz.polygonDefined(_objs[i].obj_nr)) {
+			if (_wiz.polygonHit(_objs[i].obj_nr, x, y))
+				result = _objs[i].obj_nr;
+			else if (VAR_POLYGONS_ONLY != 0xFF && VAR(VAR_POLYGONS_ONLY))
+				continue;
+		}
+
+		if (!result) {
+			// Check object bounds
+			if (_objs[i].x_pos <= x && _objs[i].width + _objs[i].x_pos > x &&
+			    _objs[i].y_pos <= y && _objs[i].height + _objs[i].y_pos > y)
+					result = _objs[i].obj_nr;
+		}
+
+		if (result) {
+			if (!num)
+				return result;
+
+			// Check object class
+			cls = args[0];
+			b = getClass(i, cls);
+			if ((cls & 0x80 && b) || (!(cls & 0x80) && !b))
+				return result;
+		}
+	}
+
+	return 0;
+}
+
 void ScummEngine_v72he::o72_pushDWord() {
 	int a;
 	if (*_lastCodePtr + sizeof(MemBlkHeader) != _scriptOrgPointer) {
@@ -1334,6 +1372,13 @@
 	}
 }
 
+void ScummEngine_v72he::o72_findObject() {
+	int y = pop();
+	int x = pop();
+	int r = findObject(x, y, 0, 0);
+	push(r);
+}
+
 void ScummEngine_v72he::o72_arrayOps() {
 	byte subOp = fetchScriptByte();
 	int array = fetchScriptWord();

Index: script_v7he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v7he.cpp,v
retrieving revision 2.135
retrieving revision 2.136
diff -u -d -r2.135 -r2.136
--- script_v7he.cpp	23 Mar 2005 00:16:51 -0000	2.135
+++ script_v7he.cpp	28 Mar 2005 10:02:21 -0000	2.136
@@ -242,7 +242,7 @@
 		OPCODE(o6_verbOps),
 		OPCODE(o6_getActorFromXY),
 		/* A0 */
-		OPCODE(o70_findObject),
+		OPCODE(o6_findObject),
 		OPCODE(o6_pseudoRoom),
 		OPCODE(o6_getActorElevation),
 		OPCODE(o6_getVerbEntrypoint),
@@ -425,62 +425,6 @@
 	writeArray(0, 0, dstOffs + i, 0);
 }
 
-int ScummEngine_v70he::findObject(int x, int y, int num, int *args) {
-	int i, b, result;
-	int cond, cls, tmp;
-	byte a;
-	const int mask = 0xF;
-
-	for (i = 1; i < _numLocalObjects; i++) {
-		result = 0;
-		if ((_objs[i].obj_nr < 1) || getClass(_objs[i].obj_nr, kObjectClassUntouchable))
-			continue;
-
-		// Check polygon bounds
-		if (_wiz.polygonDefined(_objs[i].obj_nr)) {
-			if (_wiz.polygonHit(_objs[i].obj_nr, x, y) != 0)
-				result = _objs[i].obj_nr;
-			else if (VAR_POLYGONS_ONLY != 0xFF && VAR(VAR_POLYGONS_ONLY))
-				continue;
-		}
-
-		if (!result) {
-			// Check object bounds
-			b = i;
-			do {
-				a = _objs[b].parentstate;
-				b = _objs[b].parent;
-				if (b == 0) {
-					if (_objs[i].x_pos <= x && _objs[i].width + _objs[i].x_pos > x &&
-					    _objs[i].y_pos <= y && _objs[i].height + _objs[i].y_pos > y)
-						result = _objs[i].obj_nr;
-					break;
-				}
-			} while ((_objs[b].state & mask) == a);
-		}
-
-		if (result) {
-			if (!num)
-				return result;
-
-			// Check object class
-			cond = 1;
-			tmp = num;
-			while (--tmp >= 0) {
-				cls = args[tmp];
-				b = getClass(i, cls);
-				if ((cls & 0x80 && !b) || (!(cls & 0x80) && b))
-					cond = 0;
-			}
-
-			if (cond)
-				return result;
-		}
-	}
-
-	return 0;
-}
-
 void ScummEngine_v70he::o70_startSound() {
 	byte subOp = fetchScriptByte();
 
@@ -697,13 +641,6 @@
 	}
 }
 
-void ScummEngine_v70he::o70_findObject() {
-	int y = pop();
-	int x = pop();
-	int r = findObject(x, y, 0, 0);
-	push(r);
-}
-
 void ScummEngine_v70he::o70_quitPauseRestart() {
 	byte subOp = fetchScriptByte();
 	int par1;

Index: script_v80he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v80he.cpp,v
retrieving revision 2.80
retrieving revision 2.81
diff -u -d -r2.80 -r2.81
--- script_v80he.cpp	17 Mar 2005 11:06:43 -0000	2.80
+++ script_v80he.cpp	28 Mar 2005 10:02:21 -0000	2.81
@@ -241,7 +241,7 @@
 		OPCODE(o6_invalid),
 		OPCODE(o6_getActorFromXY),
 		/* A0 */
-		OPCODE(o70_findObject),
+		OPCODE(o72_findObject),
 		OPCODE(o6_pseudoRoom),
 		OPCODE(o6_getActorElevation),
 		OPCODE(o6_getVerbEntrypoint),

Index: script_v90he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v90he.cpp,v
retrieving revision 2.194
retrieving revision 2.195
diff -u -d -r2.194 -r2.195
--- script_v90he.cpp	26 Mar 2005 06:00:58 -0000	2.194
+++ script_v90he.cpp	28 Mar 2005 10:02:22 -0000	2.195
@@ -241,7 +241,7 @@
 		OPCODE(o90_paletteOps),
 		OPCODE(o6_getActorFromXY),
 		/* A0 */
-		OPCODE(o70_findObject),
+		OPCODE(o72_findObject),
 		OPCODE(o6_pseudoRoom),
 		OPCODE(o6_getActorElevation),
 		OPCODE(o6_getVerbEntrypoint),





More information about the Scummvm-git-logs mailing list