diff options
author | Filippos Karapetis | 2019-06-30 14:44:49 +0300 |
---|---|---|
committer | Filippos Karapetis | 2019-06-30 14:46:37 +0300 |
commit | 2fd416b0ac9750916e388e95429700275f98113a (patch) | |
tree | 0e20c977bdfdba9fcfcfd3e216649b61f90d8374 | |
parent | bf921670077d5f665dff4e87410d53ed3eb90610 (diff) | |
download | scummvm-rg350-2fd416b0ac9750916e388e95429700275f98113a.tar.gz scummvm-rg350-2fd416b0ac9750916e388e95429700275f98113a.tar.bz2 scummvm-rg350-2fd416b0ac9750916e388e95429700275f98113a.zip |
SCI32: Extend scaler sanity checks to all SCI32 versions
Fixes QFG4 bug #10765. It's preferable to have sanity checks in the
code, rather than crashing due to invalid draw rectangles from buggy
game scripts. It's no use checking which specific interpreter versions
had sanity checks and trust the game scripts of the other interpreters.
Thus, it's easier and safer to always enable these sanity checks.
-rw-r--r-- | engines/sci/engine/features.h | 13 | ||||
-rw-r--r-- | engines/sci/graphics/celobj32.cpp | 10 |
2 files changed, 4 insertions, 19 deletions
diff --git a/engines/sci/engine/features.h b/engines/sci/engine/features.h index d776495c2f..42d710f9a6 100644 --- a/engines/sci/engine/features.h +++ b/engines/sci/engine/features.h @@ -164,19 +164,6 @@ public: inline bool usesAlternateSelectors() const { return g_sci->getGameId() == GID_PHANTASMAGORIA2; } - - inline bool hasEmptyScaleDrawHack() const { - // Yes: KQ7 (all), PQ4CD, QFG4CD, SQ6, Phant1 - // No: All SCI2, all SCI3, GK2, LSL6hires, PQ:SWAT, Torin - // Unknown: Hoyle5, MGDX, Shivers - const SciGameId &gid = g_sci->getGameId(); - return getSciVersion() > SCI_VERSION_2 && - getSciVersion() < SCI_VERSION_2_1_LATE && - gid != GID_LSL6HIRES && - gid != GID_GK2 && - gid != GID_PQSWAT && - gid != GID_TORIN; - } #endif /** diff --git a/engines/sci/graphics/celobj32.cpp b/engines/sci/graphics/celobj32.cpp index 1b93aee4aa..f62712d758 100644 --- a/engines/sci/graphics/celobj32.cpp +++ b/engines/sci/graphics/celobj32.cpp @@ -857,9 +857,8 @@ void CelObj::drawUncompHzFlipNoMDNoSkip(Buffer &target, const Common::Rect &targ void CelObj::scaleDrawNoMD(Buffer &target, const Ratio &scaleX, const Ratio &scaleY, const Common::Rect &targetRect, const Common::Point &scaledPosition) const { // In SSCI the checks are > because their rects are BR-inclusive; our checks // are >= because our rects are BR-exclusive - if (g_sci->_features->hasEmptyScaleDrawHack() && - (targetRect.left >= targetRect.right || - targetRect.top >= targetRect.bottom)) { + if (targetRect.left >= targetRect.right || + targetRect.top >= targetRect.bottom) { return; } @@ -872,9 +871,8 @@ void CelObj::scaleDrawNoMD(Buffer &target, const Ratio &scaleX, const Ratio &sca void CelObj::scaleDrawUncompNoMD(Buffer &target, const Ratio &scaleX, const Ratio &scaleY, const Common::Rect &targetRect, const Common::Point &scaledPosition) const { // In SSCI the checks are > because their rects are BR-inclusive; our checks // are >= because our rects are BR-exclusive - if (g_sci->_features->hasEmptyScaleDrawHack() && - (targetRect.left >= targetRect.right || - targetRect.top >= targetRect.bottom)) { + if (targetRect.left >= targetRect.right || + targetRect.top >= targetRect.bottom) { return; } |