aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlukaslw2014-06-01 04:26:41 +0200
committerlukaslw2014-06-22 20:08:33 +0200
commit3864655978c9fd6af94122a8305a0cc69395e683 (patch)
treefa914d66ec91d3f2dd4c9523b4c07839e0d320ac
parentb9e63a41a46e4366ccd97e9eb5ca6b2a2c782dc0 (diff)
downloadscummvm-rg350-3864655978c9fd6af94122a8305a0cc69395e683.tar.gz
scummvm-rg350-3864655978c9fd6af94122a8305a0cc69395e683.tar.bz2
scummvm-rg350-3864655978c9fd6af94122a8305a0cc69395e683.zip
PRINCE: checkNak for showBackAnims, beginning of Z axis for it
-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);