diff options
-rw-r--r-- | engines/prince/prince.cpp | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp index f83f7ad45b..afef9d4608 100644 --- a/engines/prince/prince.cpp +++ b/engines/prince/prince.cpp @@ -772,6 +772,7 @@ void PrinceEngine::checkMasks(int x1, int y1, int sprWidth, int sprHeight, int z } } +// ClsNak void PrinceEngine::clsMasks() { for (uint i = 0; i < _maskList.size(); i++) { if (_maskList[i]._state == 1) { @@ -956,20 +957,26 @@ void PrinceEngine::showBackAnims() { 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); + int shadowZ = 0; 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; + } else if (maxFrontFlag != 0) { + z = kMaxPicHeight + 1; + } else { + z = y + frameHeight - 1; } + shadowZ = z; + Graphics::Surface *backAnimSurface = _backAnimList[i].backAnims[activeSubAnim]._animData->getFrame(phaseFrameIndex); //still with memory leak showSprite(backAnimSurface, x, y); backAnimSurface->free(); @@ -982,6 +989,21 @@ void PrinceEngine::showBackAnims() { int shadowPhaseFrameIndex = _backAnimList[i].backAnims[activeSubAnim]._shadowData->getPhaseFrameIndex(phase); int shadowX = _backAnimList[i].backAnims[activeSubAnim]._shadowData->getBaseX() + _backAnimList[i].backAnims[activeSubAnim]._shadowData->getPhaseOffsetX(phase); int shadowY = _backAnimList[i].backAnims[activeSubAnim]._shadowData->getBaseY() + _backAnimList[i].backAnims[activeSubAnim]._shadowData->getPhaseOffsetY(phase); + int shadowFrameWidth = _backAnimList[i].backAnims[activeSubAnim]._shadowData->getFrameWidth(shadowPhaseFrameIndex); + int shadowFrameHeight = _backAnimList[i].backAnims[activeSubAnim]._shadowData->getFrameHeight(shadowPhaseFrameIndex); + + if (checkMaskFlag != 0) { + checkMasks(shadowX, shadowY, shadowFrameWidth, shadowFrameHeight, shadowY + shadowFrameWidth - 1); + } + + if (shadowZ == 0) { + if (maxFrontFlag != 0) { + shadowZ = kMaxPicHeight + 1; + } else { + shadowZ = shadowY + shadowFrameWidth - 1; + } + } + Graphics::Surface *shadowSurface = _backAnimList[i].backAnims[activeSubAnim]._shadowData->getFrame(shadowPhaseFrameIndex); //still with memory leak showSpriteShadow(shadowSurface, shadowX, shadowY); shadowSurface->free(); |