diff options
-rw-r--r-- | engines/sci/graphics/compare.cpp | 19 | ||||
-rw-r--r-- | engines/sci/graphics/cursor.cpp | 17 | ||||
-rw-r--r-- | engines/sci/graphics/screen.cpp | 18 | ||||
-rw-r--r-- | engines/sci/graphics/screen.h | 1 |
4 files changed, 39 insertions, 16 deletions
diff --git a/engines/sci/graphics/compare.cpp b/engines/sci/graphics/compare.cpp index 7cd55b1139..31c2b210ce 100644 --- a/engines/sci/graphics/compare.cpp +++ b/engines/sci/graphics/compare.cpp @@ -130,10 +130,18 @@ void GfxCompare::kernelSetNowSeen(reg_t objectReference) { if (SELECTOR(z) > -1) z = (int16)readSelectorValue(_segMan, objectReference, SELECTOR(z)); - // now get cel rectangle view = _cache->getView(viewId); + + if (view->isSci2Hires()) + _screen->adjustToUpscaledCoordinates(y, x); + view->getCelRect(loopNo, celNo, x, y, z, celRect); + if (view->isSci2Hires()) { + _screen->adjustBackUpscaledCoordinates(celRect.top, celRect.left); + _screen->adjustBackUpscaledCoordinates(celRect.bottom, celRect.right); + } + if (lookupSelector(_segMan, objectReference, SELECTOR(nsTop), NULL, NULL) == kSelectorVariable) { writeSelectorValue(_segMan, objectReference, SELECTOR(nsLeft), celRect.left); writeSelectorValue(_segMan, objectReference, SELECTOR(nsRight), celRect.right); @@ -200,7 +208,16 @@ void GfxCompare::kernelBaseSetter(reg_t object) { GfxView *tmpView = _cache->getView(viewId); Common::Rect celRect; + if (tmpView->isSci2Hires()) + _screen->adjustToUpscaledCoordinates(y, x); + tmpView->getCelRect(loopNo, celNo, x, y, z, celRect); + + if (tmpView->isSci2Hires()) { + _screen->adjustBackUpscaledCoordinates(celRect.top, celRect.left); + _screen->adjustBackUpscaledCoordinates(celRect.bottom, celRect.right); + } + celRect.bottom = y + 1; celRect.top = celRect.bottom - yStep; diff --git a/engines/sci/graphics/cursor.cpp b/engines/sci/graphics/cursor.cpp index 23c41c4c87..e1c05c97da 100644 --- a/engines/sci/graphics/cursor.cpp +++ b/engines/sci/graphics/cursor.cpp @@ -276,21 +276,8 @@ void GfxCursor::setPosition(Common::Point pos) { Common::Point GfxCursor::getPosition() { Common::Point mousePos = g_system->getEventManager()->getMousePos(); - switch (_upscaledHires) { - case GFX_SCREEN_UPSCALED_640x400: - mousePos.x /= 2; - mousePos.y /= 2; - break; - case GFX_SCREEN_UPSCALED_640x440: - mousePos.x /= 2; - mousePos.y = (mousePos.y * 5) / 11; - break; - case GFX_SCREEN_UPSCALED_640x480: - mousePos.x /= 2; - mousePos.y = (mousePos.y * 5) / 12; - default: - break; - } + if (_upscaledHires) + _screen->adjustBackUpscaledCoordinates(mousePos.y, mousePos.x); return mousePos; } diff --git a/engines/sci/graphics/screen.cpp b/engines/sci/graphics/screen.cpp index 053372bdac..c446a98768 100644 --- a/engines/sci/graphics/screen.cpp +++ b/engines/sci/graphics/screen.cpp @@ -617,6 +617,24 @@ void GfxScreen::adjustToUpscaledCoordinates(int16 &y, int16 &x) { y = _upscaledMapping[y]; } +void GfxScreen::adjustBackUpscaledCoordinates(int16 &y, int16 &x) { + switch (_upscaledHires) { + case GFX_SCREEN_UPSCALED_640x400: + x /= 2; + y /= 2; + break; + case GFX_SCREEN_UPSCALED_640x440: + x /= 2; + y = (y * 5) / 11; + break; + case GFX_SCREEN_UPSCALED_640x480: + x /= 2; + y = (y * 5) / 12; + default: + break; + } +} + int16 GfxScreen::kernelPicNotValid(int16 newPicNotValid) { int16 oldPicNotValid; diff --git a/engines/sci/graphics/screen.h b/engines/sci/graphics/screen.h index 03dfd3529c..113cf911a6 100644 --- a/engines/sci/graphics/screen.h +++ b/engines/sci/graphics/screen.h @@ -112,6 +112,7 @@ public: void scale2x(const byte *src, byte *dst, int16 srcWidth, int16 srcHeight); void adjustToUpscaledCoordinates(int16 &y, int16 &x); + void adjustBackUpscaledCoordinates(int16 &y, int16 &x); void dither(bool addToFlag); void debugUnditherSetState(bool flag); |