aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/graphics/screen.cpp
diff options
context:
space:
mode:
authorLars Skovlund2011-03-30 21:26:48 +0200
committerLars Skovlund2011-03-30 21:30:51 +0200
commit40d922206bbbd23e3b55dd43432042b0fc2af1ed (patch)
treeef73e09b64a2f643fa3cdf337b481feb4020e982 /engines/sci/graphics/screen.cpp
parent3a4fc2f0d6cc94652754eecf0d3cb0588c4678dd (diff)
downloadscummvm-rg350-40d922206bbbd23e3b55dd43432042b0fc2af1ed.tar.gz
scummvm-rg350-40d922206bbbd23e3b55dd43432042b0fc2af1ed.tar.bz2
scummvm-rg350-40d922206bbbd23e3b55dd43432042b0fc2af1ed.zip
SCI32: Support for views with 640x400 native resolution
(fixes Wolfgang closeup, room 720)
Diffstat (limited to 'engines/sci/graphics/screen.cpp')
-rw-r--r--engines/sci/graphics/screen.cpp38
1 files changed, 36 insertions, 2 deletions
diff --git a/engines/sci/graphics/screen.cpp b/engines/sci/graphics/screen.cpp
index d544dad26f..1838ba779d 100644
--- a/engines/sci/graphics/screen.cpp
+++ b/engines/sci/graphics/screen.cpp
@@ -32,6 +32,7 @@
#include "sci/sci.h"
#include "sci/engine/state.h"
#include "sci/graphics/screen.h"
+#include "sci/graphics/view.h"
namespace Sci {
@@ -695,12 +696,45 @@ void GfxScreen::scale2x(const byte *src, byte *dst, int16 srcWidth, int16 srcHei
}
}
-void GfxScreen::adjustToUpscaledCoordinates(int16 &y, int16 &x) {
+typedef struct {
+ GfxScreenUpscaledMode gameHiresMode;
+ Sci32ViewNativeResolution viewNativeRes;
+ int numerator;
+ int denominator;
+} UpScaledAdjust;
+
+UpScaledAdjust upscaledAdjustTable[] = {
+ {GFX_SCREEN_UPSCALED_640x480, SCI_VIEW_NATIVERES_640x400, 5, 6},
+};
+
+int upscaledAdjustTableSize = ARRAYSIZE(upscaledAdjustTable);
+
+void GfxScreen::adjustToUpscaledCoordinates(int16 &y, int16 &x, Sci32ViewNativeResolution viewNativeRes) {
x *= 2;
y = _upscaledMapping[y];
+
+ for (int i = 0; i < upscaledAdjustTableSize; i++)
+ {
+ if (upscaledAdjustTable[i].gameHiresMode == _upscaledHires &&
+ upscaledAdjustTable[i].viewNativeRes == viewNativeRes)
+ {
+ y = (y * upscaledAdjustTable[i].numerator) / upscaledAdjustTable[i].denominator;
+ break;
+ }
+ }
}
-void GfxScreen::adjustBackUpscaledCoordinates(int16 &y, int16 &x) {
+void GfxScreen::adjustBackUpscaledCoordinates(int16 &y, int16 &x, Sci32ViewNativeResolution viewNativeRes) {
+ for (int i = 0; i < upscaledAdjustTableSize; i++)
+ {
+ if (upscaledAdjustTable[i].gameHiresMode == _upscaledHires &&
+ upscaledAdjustTable[i].viewNativeRes == viewNativeRes)
+ {
+ y = (y * upscaledAdjustTable[i].denominator) / upscaledAdjustTable[i].numerator;
+ break;
+ }
+ }
+
switch (_upscaledHires) {
case GFX_SCREEN_UPSCALED_640x400:
x /= 2;