diff options
-rw-r--r-- | queen/cutaway.cpp | 22 | ||||
-rw-r--r-- | queen/cutaway.h | 2 | ||||
-rw-r--r-- | queen/graphics.cpp | 7 | ||||
-rw-r--r-- | queen/graphics.h | 5 |
4 files changed, 20 insertions, 16 deletions
diff --git a/queen/cutaway.cpp b/queen/cutaway.cpp index 57633b7522..bb12e390f6 100644 --- a/queen/cutaway.cpp +++ b/queen/cutaway.cpp @@ -1229,23 +1229,20 @@ void Cutaway::talk(char *nextFilename) { 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 @@ int Cutaway::makeComplexAnimation(int16 currentImage, Cutaway::CutawayAnim *objA 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; } diff --git a/queen/cutaway.h b/queen/cutaway.h index 04d2c236ee..68411a63d9 100644 --- a/queen/cutaway.h +++ b/queen/cutaway.h @@ -194,8 +194,6 @@ class Cutaway { int16 _currentImage; - AnimFrame _cutAnim[21][30]; - Cutaway(const char *filename, QueenEngine *vm); ~Cutaway(); diff --git a/queen/graphics.cpp b/queen/graphics.cpp index 22ebf7de3f..a9dcebfd6b 100644 --- a/queen/graphics.cpp +++ b/queen/graphics.cpp @@ -600,6 +600,13 @@ void Graphics::setupNewRoom(const char *room, uint16 roomNum, int16 *furniture, } } +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) diff --git a/queen/graphics.h b/queen/graphics.h index 68360bd381..1e54ccd49f 100644 --- a/queen/graphics.h +++ b/queen/graphics.h @@ -115,6 +115,7 @@ public: 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 @@ private: //! 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 |