[Scummvm-cvs-logs] CVS: scummvm/scumm sprite_he.cpp,1.24,1.25
Eugene Sandulenko
sev at users.sourceforge.net
Tue Feb 22 19:19:39 CET 2005
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.353,2.354 script_v100he.cpp,2.55,2.56 script_v90he.cpp,2.145,2.146 sprite_he.cpp,1.23,1.24
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm sprite_he.cpp,1.25,1.26
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31047
Modified Files:
sprite_he.cpp
Log Message:
Implementation of spriteInfoSet_addImageToList. It needs review,
especially inner loop with pointer arithmetix. Cyx, remember that
x * 0x31 that's it just somewhat complicated.
Index: sprite_he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sprite_he.cpp,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- sprite_he.cpp 23 Feb 2005 02:35:59 -0000 1.24
+++ sprite_he.cpp 23 Feb 2005 03:18:49 -0000 1.25
@@ -529,7 +529,66 @@
}
void ScummEngine_v90he::spriteInfoSet_addImageToList(int spriteId, int imageNum, int *spriteIdptr) {
- // TODO
+ int listNum;
+ int *ptr;
+ int origResId;
+
+ // XXX needs review
+ checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d");
+
+ if (_spriteTable[spriteId].imglist_num) {
+ checkRange(_varMaxSprites, 1, _spriteTable[spriteId].imglist_num,
+ "Image list %d out of range");
+ _imageListStack[_curSprImageListNum++] = _spriteTable[spriteId].imglist_num - 1;
+ _spriteTable[spriteId].imglist_num = 0;
+ }
+
+ origResId = _spriteTable[spriteId].res_id;
+
+ if (imageNum == 1)
+ _spriteTable[spriteId].res_id = *spriteIdptr;
+ else {
+ if (!_curSprImageListNum)
+ error("Out of image lists");
+
+ if (imageNum > 32)
+ error("Too many images in image list (%d)!", imageNum);
+
+ _curSprImageListNum--;
+ _spriteTable[spriteId].imglist_num = _imageListStack[_curSprImageListNum] + 1;
+
+ listNum = _spriteTable[spriteId].imglist_num;
+
+ checkRange(_varMaxSprites, 1, listNum, "Image list %d out of range");
+
+ _imageListTable[0x21 * listNum - 1] = imageNum;
+
+ ptr = spriteIdptr;
+ for (int i = 0; i < listNum; i++) {
+ _imageListTable[0x21 * listNum - 0x21 + i] = *ptr++;
+ }
+ _spriteTable[spriteId].res_id = *spriteIdptr;
+ }
+
+ _spriteTable[spriteId].field_74 = 0;
+ _spriteTable[spriteId].res_state = 0;
+
+ if (_spriteTable[spriteId].res_id) {
+ _spriteTable[spriteId].res_wiz_states = getWizImageStates(_spriteTable[spriteId].res_id);
+ _spriteTable[spriteId].flags |= kSF16 | kSF22 | kSF23 | kSFBlitDirectly;
+
+ if (_spriteTable[spriteId].res_id == origResId &&
+ _spriteTable[spriteId].res_wiz_states == spriteId)
+ return;
+
+ _spriteTable[spriteId].flags |= kSF01 | kSFNeedRedraw;
+ } else {
+ _spriteTable[spriteId].flags &= ~(kSF31);
+ _spriteTable[spriteId].flags |= kSF01 | kSFBlitDirectly;
+ _spriteTable[spriteId].field_4C = 0;
+ _spriteTable[spriteId].field_48 = 0;
+ _spriteTable[spriteId].res_wiz_states = 0;
+ }
}
//
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.353,2.354 script_v100he.cpp,2.55,2.56 script_v90he.cpp,2.145,2.146 sprite_he.cpp,1.23,1.24
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm sprite_he.cpp,1.25,1.26
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list