[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