[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.360,2.361 sprite_he.cpp,1.36,1.37

Eugene Sandulenko sev at users.sourceforge.net
Wed Feb 23 15:30:05 CET 2005


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

Modified Files:
	intern.h sprite_he.cpp 
Log Message:
implementation of spritesSortActiveSprites()


Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.360
retrieving revision 2.361
diff -u -d -r2.360 -r2.361
--- intern.h	23 Feb 2005 12:26:16 -0000	2.360
+++ intern.h	23 Feb 2005 23:28:53 -0000	2.361
@@ -971,6 +971,7 @@
 	void spritesMarkDirty(bool unkFlag);
 	void spritesUpdateImages();
 	void spriteInfoSet_addImageToList(int spriteId, int imageNum, int *spriteIdptr);
+	void spritesSortActiveSprites();
 
 	/* HE version 90 script opcodes */
 	void o90_dup();

Index: sprite_he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sprite_he.cpp,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- sprite_he.cpp	23 Feb 2005 12:26:17 -0000	1.36
+++ sprite_he.cpp	23 Feb 2005 23:28:53 -0000	1.37
@@ -1091,4 +1091,52 @@
 	}
 }
 
+static int compareSprTable(const void *a, const void *b) {
+	const SpriteInfo *spr1 = *(const SpriteInfo *const*)a;
+	const SpriteInfo *spr2 = *(const SpriteInfo *const*)b;
+
+	if (spr1->field_0 > spr2->field_0)
+		return 1;
+
+	if (spr1->field_0 < spr2->field_0)
+		return -1;
+
+	return 0;
+}
+
+void ScummEngine_v90he::spritesSortActiveSprites() {
+	int groupField;
+
+	_numSpritesToProcess = 0;
+
+	if (_varNumSprites <= 1)
+		return;
+
+	for (int i = 1; i < _varNumSprites; i++) {
+		SpriteInfo *spi = &_spriteTable[i];
+
+		if (spi->flags & kSF08) {
+			if (!spi->flags & kSF23) {
+				if (!spi->flags & kSF30)
+					spi->flags |= kSFNeedRedraw;
+				if (!spi->flags & kSF31)
+					spi->flags |= kSF01;
+			}
+			if (spi->group_num)
+				groupField = _spriteGroups[spi->group_num].field_10;
+			else
+				groupField = 0;
+
+			spi->field_0 = spi->field_18 + groupField;
+
+			_activeSpritesTable[_numSpritesToProcess++] = spi;
+		}
+	}
+
+	if (_numSpritesToProcess < 2)
+		return;
+
+	qsort(_activeSpritesTable, _numSpritesToProcess, sizeof(SpriteInfo *), compareSprTable);
+}
+
 } // End of namespace Scumm





More information about the Scummvm-git-logs mailing list