aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/prince/prince.cpp19
-rw-r--r--engines/prince/prince.h2
2 files changed, 21 insertions, 0 deletions
diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp
index a82fe9569d..77e21fbf8d 100644
--- a/engines/prince/prince.cpp
+++ b/engines/prince/prince.cpp
@@ -942,8 +942,27 @@ void PrinceEngine::showBackAnims() {
int phaseFrameIndex = _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseFrameIndex(phase);
int x = _backAnimList[i].backAnims[activeSubAnim]._x + _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseOffsetX(phase);
int y = _backAnimList[i].backAnims[activeSubAnim]._y + _backAnimList[i].backAnims[activeSubAnim]._animData->getPhaseOffsetY(phase);
+ int animFlag = _backAnimList[i].backAnims[activeSubAnim]._flags;
+ int checkMaskFlag = (animFlag & 1);
+ int maxFrontFlag = (animFlag & 2);
+ int specialZFlag = _backAnimList[i].backAnims[activeSubAnim]._nextAnim;
+ int z = _backAnimList[i].backAnims[activeSubAnim]._nextAnim;
+ int frameWidth = _backAnimList[i].backAnims[activeSubAnim]._animData->getFrameWidth(phaseFrameIndex);
+ int frameHeight = _backAnimList[i].backAnims[activeSubAnim]._animData->getFrameHeight(phaseFrameIndex);
if (x != 0 || y != 0 || phaseCount != 1 || frameCount != 1) { // fix for room no. 5 - animation 8 (propably unnecessary anim)
+ if (checkMaskFlag != 0) {
+ if (_backAnimList[i].backAnims[activeSubAnim]._nextAnim == 0) {
+ z = y + frameHeight - 1;
+ }
+ checkMasks(x, y, frameWidth, frameHeight, z);
+ }
+ if (maxFrontFlag != 0) {
+ z = kMaxPicHeight + 1;
+ }
+ if (specialZFlag != 0) {
+ z = specialZFlag;
+ }
Graphics::Surface *backAnimSurface = _backAnimList[i].backAnims[activeSubAnim]._animData->getFrame(phaseFrameIndex); //still with memory leak
showSprite(backAnimSurface, x, y);
backAnimSurface->free();
diff --git a/engines/prince/prince.h b/engines/prince/prince.h
index 15dfdb4b7b..b9e61f67d3 100644
--- a/engines/prince/prince.h
+++ b/engines/prince/prince.h
@@ -244,6 +244,8 @@ public:
static const int16 kNormalWidth = 640;
static const int16 kNormalHeight = 480;
+ static const int16 kMaxPicWidth = 1280;
+ static const int16 kMaxPicHeight = 480;
void checkMasks(int x1, int y1, int sprWidth, int sprHeight, int z);
void insertMasks(const Graphics::Surface *originalRoomSurface);