aboutsummaryrefslogtreecommitdiff
path: root/scumm/boxes.cpp
diff options
context:
space:
mode:
authorTravis Howell2004-11-05 05:13:56 +0000
committerTravis Howell2004-11-05 05:13:56 +0000
commitdf17c27ebf688309c97efa6638088d396087fe20 (patch)
tree27414b4507feb6659d5ab98461f531b3a5832981 /scumm/boxes.cpp
parent775bd838c7a2857a1ca755494994e178a7707b00 (diff)
downloadscummvm-rg350-df17c27ebf688309c97efa6638088d396087fe20.tar.gz
scummvm-rg350-df17c27ebf688309c97efa6638088d396087fe20.tar.bz2
scummvm-rg350-df17c27ebf688309c97efa6638088d396087fe20.zip
Add patch #1060453 - MIVGA: Actor Scale Patch
svn-id: r15712
Diffstat (limited to 'scumm/boxes.cpp')
-rw-r--r--scumm/boxes.cpp60
1 files changed, 33 insertions, 27 deletions
diff --git a/scumm/boxes.cpp b/scumm/boxes.cpp
index c3dfc2b2d1..7da38cbd49 100644
--- a/scumm/boxes.cpp
+++ b/scumm/boxes.cpp
@@ -177,40 +177,46 @@ int ScummEngine::getScale(int box, int x, int y) {
// Was a scale slot specified? If so, we compute the effective scale
// from it, ignoring the box scale.
- if (slot) {
- assert(1 <= slot && slot <= ARRAYSIZE(_scaleSlots));
- int scaleX = 0, scaleY = 0;
- ScaleSlot &s = _scaleSlots[slot-1];
+ if (slot)
+ scale = getScaleFromSlot(slot, x, y);
+
+ return scale;
+}
- if (s.y1 == s.y2 && s.x1 == s.x2)
- error("Invalid scale slot %d", slot);
- if (s.y1 != s.y2) {
- if (y < 0)
- y = 0;
+int ScummEngine::getScaleFromSlot(int slot, int x, int y) {
+ assert(1 <= slot && slot <= ARRAYSIZE(_scaleSlots));
+ int scale;
+ int scaleX = 0, scaleY = 0;
+ ScaleSlot &s = _scaleSlots[slot-1];
- scaleY = (s.scale2 - s.scale1) * (y - s.y1) / (s.y2 - s.y1) + s.scale1;
- }
- if (s.x1 == s.x2) {
- scale = scaleY;
- } else {
- scaleX = (s.scale2 - s.scale1) * (x - s.x1) / (s.x2 - s.x1) + s.scale1;
+ if (s.y1 == s.y2 && s.x1 == s.x2)
+ error("Invalid scale slot %d", slot);
- if (s.y1 == s.y2) {
- scale = scaleX;
- } else {
- scale = (scaleX + scaleY) / 2;
- }
- }
+ if (s.y1 != s.y2) {
+ if (y < 0)
+ y = 0;
- // Clip the scale to range 1-255
- if (scale < 1)
- scale = 1;
- else if (scale > 255)
- scale = 255;
+ scaleY = (s.scale2 - s.scale1) * (y - s.y1) / (s.y2 - s.y1) + s.scale1;
+ }
+ if (s.x1 == s.x2) {
+ scale = scaleY;
+ } else {
+ scaleX = (s.scale2 - s.scale1) * (x - s.x1) / (s.x2 - s.x1) + s.scale1;
+
+ if (s.y1 == s.y2) {
+ scale = scaleX;
+ } else {
+ scale = (scaleX + scaleY) / 2;
+ }
}
+
+ // Clip the scale to range 1-255
+ if (scale < 1)
+ scale = 1;
+ else if (scale > 255)
+ scale = 255;
- // Finally return the scale
return scale;
}