aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--queen/cutaway.cpp22
-rw-r--r--queen/cutaway.h2
-rw-r--r--queen/graphics.cpp7
-rw-r--r--queen/graphics.h5
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