[Scummvm-cvs-logs] CVS: scummvm/queen cutaway.cpp,1.127,1.128 cutaway.h,1.35,1.36 graphics.cpp,1.100,1.101 graphics.h,1.69,1.70
Gregory Montoir
cyx at users.sourceforge.net
Tue Apr 6 13:29:02 CEST 2004
Update of /cvsroot/scummvm/scummvm/queen
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3668/queen
Modified Files:
cutaway.cpp cutaway.h graphics.cpp graphics.h
Log Message:
fix for bug #928549.
Animations on objects/persons setup by cutaways can still be played after the end of the cutscene. (the only ?) one room in which this is reproducable is the first time you talk to the Oracle (first c44, then c47).
As a Cutaway object is created for each cutscene, the _cutAnim member should be moved to an more "persistant" object.
Otherwise we're reading data from free'd memory...
Index: cutaway.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/cutaway.cpp,v
retrieving revision 1.127
retrieving revision 1.128
diff -u -d -r1.127 -r1.128
--- cutaway.cpp 23 Mar 2004 23:47:01 -0000 1.127
+++ cutaway.cpp 6 Apr 2004 20:15:19 -0000 1.128
@@ -1229,23 +1229,20 @@
int Cutaway::makeComplexAnimation(int16 currentImage, Cutaway::CutawayAnim *objAnim, int frameCount) {
int frameIndex[256];
int i;
- int bobNum = objAnim[0].object;
- assert(bobNum < 21);
+ assert(frameCount < 30);
+ AnimFrame cutAnim[30];
memset(frameIndex, 0, sizeof(frameIndex));
debug(6, "[Cutaway::makeComplexAnimation] currentImage = %i", currentImage);
- BobSlot *bob = _vm->graphics()->bob(bobNum);
- bob->xflip = objAnim[0].flip;
-
for (i = 0; i < frameCount; i++) {
- _cutAnim[bobNum][i].frame = objAnim[i].unpackFrame;
- _cutAnim[bobNum][i].speed = objAnim[i].speed;
+ cutAnim[i].frame = objAnim[i].unpackFrame;
+ cutAnim[i].speed = objAnim[i].speed;
frameIndex[objAnim[i].unpackFrame] = 1;
}
- _cutAnim[bobNum][frameCount].frame = 0;
- _cutAnim[bobNum][frameCount].speed = 0;
+ cutAnim[frameCount].frame = 0;
+ cutAnim[frameCount].speed = 0;
int nextFrameIndex = 1;
@@ -1254,20 +1251,17 @@
frameIndex[i] = nextFrameIndex++;
for (i = 0; i < frameCount; i++) {
- _cutAnim[bobNum][i].frame = currentImage + frameIndex[objAnim[i].unpackFrame];
- //debug(6, "_cutAnim[%i][%i].frame = %i", bobNum, i, _cutAnim[bobNum][i].frame);
+ cutAnim[i].frame = currentImage + frameIndex[objAnim[i].unpackFrame];
}
for (i = 1; i < 256; i++) {
if (frameIndex[i]) {
currentImage++;
- //debug(6, "bankUnpack(%i, %i, %i)", i, currentImage, objAnim[0].bank);
_vm->bankMan()->unpack(i, currentImage, objAnim[0].bank);
}
}
- bob->animString(_cutAnim[bobNum]);
-
+ _vm->graphics()->setBobCutawayAnim(objAnim[0].object, objAnim[0].flip, cutAnim, frameCount + 1);
return currentImage;
}
Index: cutaway.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/cutaway.h,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- cutaway.h 7 Mar 2004 10:46:01 -0000 1.35
+++ cutaway.h 6 Apr 2004 20:15:19 -0000 1.36
@@ -194,8 +194,6 @@
int16 _currentImage;
- AnimFrame _cutAnim[21][30];
-
Cutaway(const char *filename,
QueenEngine *vm);
~Cutaway();
Index: graphics.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/graphics.cpp,v
retrieving revision 1.100
retrieving revision 1.101
diff -u -d -r1.100 -r1.101
--- graphics.cpp 18 Mar 2004 21:53:49 -0000 1.100
+++ graphics.cpp 6 Apr 2004 20:15:19 -0000 1.101
@@ -600,6 +600,13 @@
}
}
+void Graphics::setBobCutawayAnim(uint16 bobNum, bool xflip, const AnimFrame *af, uint8 frameCount) {
+ assert(bobNum < 21 && frameCount < 30);
+ memcpy(_cutAnim[bobNum], af, sizeof(AnimFrame) * frameCount);
+ _bobs[bobNum].xflip = xflip;
+ _bobs[bobNum].animString(_cutAnim[bobNum]);
+}
+
void Graphics::fillAnimBuffer(const char *anim, AnimFrame *af) {
for (;;) {
// anim frame format is "%3hu,%3hu," (frame number, frame speed)
Index: graphics.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/graphics.h,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -d -r1.69 -r1.70
--- graphics.h 17 Mar 2004 14:10:51 -0000 1.69
+++ graphics.h 6 Apr 2004 20:15:19 -0000 1.70
@@ -115,6 +115,7 @@
void setupNewRoom(const char *room, uint16 roomNum, int16 *furniture, uint16 furnitureCount);
+ void setBobCutawayAnim(uint16 bobNum, bool xflip, const AnimFrame *af, uint8 frameCount);
void fillAnimBuffer(const char *anim, AnimFrame *af);
uint16 countAnimFrames(const char *anim);
void setupObjectAnim(const GraphicData *gd, uint16 firstImage, uint16 bobNum, bool visible);
@@ -165,8 +166,12 @@
//! used to scale a BobFrame
BobFrame _shrinkBuffer;
+ //! in-game objects/persons animations
AnimFrame _newAnim[17][30];
+ //! cutaway objects/persons animations
+ AnimFrame _cutAnim[21][30];
+
uint16 _personFrames[4];
//! Number of animated furniture in current room
More information about the Scummvm-git-logs
mailing list