aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/graphics/frameout.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/engines/sci/graphics/frameout.cpp b/engines/sci/graphics/frameout.cpp
index 9d2d94c4a9..f8d2260a4e 100644
--- a/engines/sci/graphics/frameout.cpp
+++ b/engines/sci/graphics/frameout.cpp
@@ -105,7 +105,7 @@ void GfxFrameout::kernelFrameout() {
int16 planePictureCels = 0;
int16 planePictureCel;
int16 planePriority;
- int16 planeTop, planeLeft;
+ Common::Rect planeRect;
int16 planeResY, planeResX;
reg_t itemObject;
@@ -131,11 +131,16 @@ void GfxFrameout::kernelFrameout() {
planePictureCels = planePicture->getSci32celCount();
}
- planeTop = GET_SEL32V(_segMan, planeObject, top);
- planeLeft = GET_SEL32V(_segMan, planeObject, left);
+ planeRect.top = GET_SEL32V(_segMan, planeObject, top);
+ planeRect.left = GET_SEL32V(_segMan, planeObject, left);
+ planeRect.bottom = GET_SEL32V(_segMan, planeObject, bottom);
+ planeRect.right = GET_SEL32V(_segMan, planeObject, right);
planeResY = GET_SEL32V(_segMan, planeObject, resY);
planeResX = GET_SEL32V(_segMan, planeObject, resX);
+ planeRect.top = (planeRect.top * _screen->getHeight()) / planeResY;
+ planeRect.left = (planeRect.left * _screen->getWidth()) / planeResX;
+
// Fill our itemlist for this plane
itemCount = 0;
itemEntry = itemData;
@@ -156,10 +161,10 @@ void GfxFrameout::kernelFrameout() {
itemEntry->scaleY = GET_SEL32V(_segMan, itemObject, scaleY);
itemEntry->object = itemObject;
- itemEntry->y += planeTop;
- itemEntry->x += planeLeft;
itemEntry->y = ((itemEntry->y * _screen->getHeight()) / planeResY);
itemEntry->x = ((itemEntry->x * _screen->getWidth()) / planeResX);
+ itemEntry->y += planeRect.top;
+ itemEntry->x += planeRect.left;
if (itemEntry->priority == 0)
itemEntry->priority = itemEntry->y;
@@ -205,10 +210,14 @@ void GfxFrameout::kernelFrameout() {
continue;
}
+ Common::Rect clipRect;
+ clipRect = itemEntry->celRect;
+ clipRect.clip(planeRect);
+
if ((itemEntry->scaleX == 128) && (itemEntry->scaleY == 128))
- view->draw(itemEntry->celRect, itemEntry->celRect, itemEntry->celRect, itemEntry->loopNo, itemEntry->celNo, 255, 0, false);
+ view->draw(itemEntry->celRect, clipRect, clipRect, itemEntry->loopNo, itemEntry->celNo, 255, 0, false);
else
- view->drawScaled(itemEntry->celRect, itemEntry->celRect, itemEntry->celRect, itemEntry->loopNo, itemEntry->celNo, 255, itemEntry->scaleX, itemEntry->scaleY);
+ view->drawScaled(itemEntry->celRect, clipRect, clipRect, itemEntry->loopNo, itemEntry->celNo, 255, itemEntry->scaleX, itemEntry->scaleY);
} else {
// Most likely a text entry
// This draws text the "SCI0-SCI11" way. In SCI2, text is prerendered in kCreateTextBitmap