[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