[Scummvm-cvs-logs] CVS: scummvm/scumm sprite_he.cpp,1.16,1.17 intern.h,2.347,2.348 sprite_he.h,1.5,1.6

Eugene Sandulenko sev at users.sourceforge.net
Mon Feb 21 17:18:08 CET 2005


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

Modified Files:
	sprite_he.cpp intern.h sprite_he.h 
Log Message:
cyx's WIP for sprites. Implemented spritesBlitToScreen


Index: sprite_he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sprite_he.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- sprite_he.cpp	21 Feb 2005 12:43:18 -0000	1.16
+++ sprite_he.cpp	22 Feb 2005 01:16:41 -0000	1.17
@@ -543,12 +543,63 @@
 	_numSpritesToProcess = 0;
 }
 
-void ScummEngine_v90he::spriteGroupCheck(int sprGrpId) {
-	// XXX
+void ScummEngine_v90he::spriteGroupCheck(int spriteGroupId) {
+	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
 }
 
-void ScummEngine_v90he::spriteMarkIfInGroup(int sprGrpId, uint32 flags) {
-	// XXX
+void ScummEngine_v90he::spriteMarkIfInGroup(int spriteGroupId, uint32 flags) {
+	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
+	for (int i = 0; i < _numSpritesToProcess; ++i) {
+		SpriteInfo *spi = _activeSpritesTable[i];
+		if (spi->group_num == spriteGroupId) {
+			spi->flags |= flags;
+		}		
+	}
+}
+
+void ScummEngine_v90he::spritesBlitToScreen() {
+	int xmin, xmax, ymin, ymax;
+	xmin = ymin = 1234;
+	xmax = ymax = -1234; 
+	bool firstLoop = true;
+	bool refreshScreen = false;
+	for (int i = 0; i < _numSpritesToProcess; ++i) {
+		SpriteInfo *spi = _activeSpritesTable[i];
+		if (!(spi->flags & kSF31) && (spi->flags & kSF01)) {
+			spi->flags &= ~kSF01;
+			if (spi->bbox_xmin <= spi->bbox_xmax && spi->bbox_ymin <= spi->bbox_ymax) {
+				if (spi->flags & kSF26) {
+					gdi.copyVirtScreenBuffers(Common::Rect(spi->bbox_xmin, spi->bbox_ymin, spi->bbox_ymin, spi->bbox_ymax)); // XXX 0, 0x40000000);
+				}
+			} else if (firstLoop) {
+				xmin = spi->bbox_xmin;
+				ymin = spi->bbox_ymin;
+				xmax = spi->bbox_xmax;
+				ymax = spi->bbox_ymax;
+				firstLoop = false;
+			} else {
+				if (xmin < spi->bbox_xmin) {
+					xmin = spi->bbox_xmin;
+				}
+				if (ymin < spi->bbox_ymin) {
+					ymin = spi->bbox_ymin;
+				}
+				if (xmax > spi->bbox_xmax) {
+					xmax = spi->bbox_xmax;
+				}
+				if (ymax > spi->bbox_ymax) {
+					ymax = spi->bbox_ymax;
+				}
+				refreshScreen = true;
+			}
+			if (!(spi->flags & (kSF02 | kSF30)) && (spi->res_id != 0)) {
+				spi->flags |= kSF02;
+			}			
+		}
+	}
+	if (refreshScreen) {
+		gdi.copyVirtScreenBuffers(Common::Rect(xmin, ymin, xmax, ymax)); // , 0, 0x40000000);
+	}
 }
 
 } // End of namespace Scumm

Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.347
retrieving revision 2.348
diff -u -d -r2.347 -r2.348
--- intern.h	21 Feb 2005 04:53:34 -0000	2.347
+++ intern.h	22 Feb 2005 01:16:41 -0000	2.348
@@ -935,9 +935,9 @@
 
 	void spritesAllocTables(int numSprites, int numGroups, int numImgSprites);
 	void spritesResetTables(bool refreshScreen);
-	void spriteGroupCheck(int sprGrpId);
-	void spriteMarkIfInGroup(int sprGrpId, uint32 flags);
-
+	void spriteGroupCheck(int spriteGroupId);
+	void spriteMarkIfInGroup(int spriteGroupId, uint32 flags);
+	void spritesBlitToScreen();
 	void spriteInfoSet_addImageToList(int spriteId, int imageNum, int *spriteIdptr);
 
 	/* HE version 90 script opcodes */

Index: sprite_he.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sprite_he.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- sprite_he.h	21 Feb 2005 00:02:44 -0000	1.5
+++ sprite_he.h	22 Feb 2005 01:16:41 -0000	1.6
@@ -27,7 +27,7 @@
 
 enum SpriteFlags {
 	kSF01      = (1 << 0),
-	kSF02      = (1 << 1),
+	kSF02      = (1 << 1), // kSFNeedRedraw
 	kSF03      = (1 << 2),
 	kSF04      = (1 << 3),
 	kSFZoomed  = (1 << 4),
@@ -51,7 +51,7 @@
 	kSF23      = (1 << 22),
 	kSF24      = (1 << 23),
 	kSF25      = (1 << 24),
-	kSF26      = (1 << 25),
+	kSF26      = (1 << 25), // kSFBlitDirectly
 	kSF27      = (1 << 26),
 	kSF28      = (1 << 27),
 	kSF29      = (1 << 28),





More information about the Scummvm-git-logs mailing list