[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.366,2.367 script_v100he.cpp,2.63,2.64 script_v90he.cpp,2.158,2.159 sprite_he.cpp,1.57,1.58

kirben kirben at users.sourceforge.net
Fri Feb 25 07:24:12 CET 2005


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

Modified Files:
	intern.h script_v100he.cpp script_v90he.cpp sprite_he.cpp 
Log Message:

Add WIP findSpriteWithClassOf() function


Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.366
retrieving revision 2.367
diff -u -d -r2.366 -r2.367
--- intern.h	24 Feb 2005 23:11:49 -0000	2.366
+++ intern.h	25 Feb 2005 15:19:02 -0000	2.367
@@ -875,7 +875,7 @@
 	uint8 getWizPixelColor(int restype, int resnum, int state, int x, int y, int flags);
 	int computeWizHistogram(int resnum, int state, int x, int y, int w, int h);
 	
-	int spriteInfoGet_case15(int a, int b, int c, int d, int num, int *args);
+	int findSpriteWithClassOf(int x, int y, int spriteGroup, int d, int num, int *args);
 	int spriteInfoGet_classFlags(int spriteId, int num);
 	int spriteInfoGet_classFlagsAnd(int spriteId, int num, int *args);
 	int spriteInfoGet_flags_13(int spriteId);

Index: script_v100he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v100he.cpp,v
retrieving revision 2.63
retrieving revision 2.64
diff -u -d -r2.63 -r2.64
--- script_v100he.cpp	24 Feb 2005 23:11:49 -0000	2.63
+++ script_v100he.cpp	25 Feb 2005 15:19:03 -0000	2.64
@@ -2425,7 +2425,7 @@
 		d = pop();
 		e = pop();
 		f = pop();
-		push(spriteInfoGet_case15(f, e, d, c, flags, args));
+		push(findSpriteWithClassOf(f, e, d, c, flags, args));
 		break;
 	case 38:
 		spriteId = pop();

Index: script_v90he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v90he.cpp,v
retrieving revision 2.158
retrieving revision 2.159
diff -u -d -r2.158 -r2.159
--- script_v90he.cpp	24 Feb 2005 23:11:49 -0000	2.158
+++ script_v90he.cpp	25 Feb 2005 15:19:03 -0000	2.159
@@ -829,18 +829,18 @@
 			d = pop();
 			e = pop();
 			f = pop();
-			push(spriteInfoGet_case15(f, e, d, c, flags, args));
+			push(findSpriteWithClassOf(f, e, d, c, flags, args));
 		} else if (_heversion == 98) {
-			pop();
-			pop();
-			pop();
-			pop();
-			push(0);
+			c = pop();
+			d = pop();
+			e = pop();
+			f = pop();
+			push(findSpriteWithClassOf(f, e, d, c, 0, 0));
 		} else {
-			pop();
-			pop();
-			pop();
-			push(0);
+			d = pop();
+			e = pop();
+			f = pop();
+			push(findSpriteWithClassOf(f, e, d, 0, 0, 0));
 		}
 		break;
 	case 22:

Index: sprite_he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sprite_he.cpp,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -d -r1.57 -r1.58
--- sprite_he.cpp	25 Feb 2005 11:45:25 -0000	1.57
+++ sprite_he.cpp	25 Feb 2005 15:19:03 -0000	1.58
@@ -39,8 +39,86 @@
 //
 // spriteInfoGet functions
 //
-int ScummEngine_v90he::spriteInfoGet_case15(int a, int b, int c, int d, int num, int *args) {
-	// TODO
+int ScummEngine_v90he::findSpriteWithClassOf(int x, int y, int spriteGroup, int d, int num, int *args) {
+	int classId;
+	debug(1, "findSprite: x %d, y %d, spriteGroup %d, d %d, num %d\n", x, y, spriteGroup, d, num);
+
+	for (int i = 0; i < _numSpritesToProcess; ++i) {
+		SpriteInfo *spi = _activeSpritesTable[i];
+		if (!spi->field_4C)
+			continue;
+
+		if (spriteGroup && spi->group_num != spi->field_4C)
+			continue;
+
+		for (int j = 0; j < num; j++) {
+			classId = args[j] & 0x7F;
+			checkRange(32, 1, classId, "class %d out of range in statement");
+			if (!(spi->class_flags & (1 << classId)))
+				continue;
+		}
+
+		if (d != 0) {
+			if (spi->bbox.left > spi->bbox.right)
+				continue;
+			if (spi->bbox.top > spi->bbox.bottom)
+				continue;
+			if (spi->bbox.left > x)
+				continue;
+			if (spi->bbox.top > y)
+				continue;
+			if (spi->bbox.right < x)
+				continue;
+			if (spi->bbox.bottom < y)
+				continue;
+			return i;
+		} else {
+			int state;
+			int resId = spi->field_4C;
+
+			if (spi->field_80) {
+				int16 x1, x2, y1, y2;
+
+				state = getWizImageStates(spi->field_80);
+				state /= spi->field_48;
+
+				x -= spi->field_34;
+				y -= spi->field_38;
+
+				loadImgSpot(spi->field_4C, state, x1, y1);
+				loadImgSpot(spi->field_80, state, x2, y2);
+
+				x += (x2 - x1);
+				y += (y2 - y1);
+			} else {
+				if (spi->bbox.left > spi->bbox.right)
+					continue;
+				if (spi->bbox.top > spi->bbox.bottom)
+					continue;
+				if (spi->bbox.left > x)
+					continue;
+				if (spi->bbox.top > y)
+					continue;
+				if (spi->bbox.right < x)
+					continue;
+				if (spi->bbox.bottom < y)
+					continue;
+
+				x -= spi->field_34;
+				y -= spi->field_38;
+				state = spi->field_48;
+			}
+
+			if ((spi->flags & kSFZoomed) || (spi->flags & kSFRotated)) {
+				// TODO
+
+			}
+
+			if(isWizPixelNonTransparent(rtImage, resId, state, x, y, spi->imgFlags));
+				return i;
+		}
+	}
+
 	return 0;
 }
 





More information about the Scummvm-git-logs mailing list