diff options
| author | Colin Snover | 2016-06-27 20:48:01 -0500 | 
|---|---|---|
| committer | Colin Snover | 2016-06-30 14:04:56 -0500 | 
| commit | 29f7a66af40acdc348e28d5c681f43e1f33bf4de (patch) | |
| tree | 284a871ed8648de96075aa2723b39eb65bb7c960 | |
| parent | d2f598cea677fc03b5987fb9f9d9ac41faa96ded (diff) | |
| download | scummvm-rg350-29f7a66af40acdc348e28d5c681f43e1f33bf4de.tar.gz scummvm-rg350-29f7a66af40acdc348e28d5c681f43e1f33bf4de.tar.bz2 scummvm-rg350-29f7a66af40acdc348e28d5c681f43e1f33bf4de.zip  | |
SCI32: Add low resolution constants
In a few places in the graphics system, fixed low-resolution values
are used instead of the game script resolution.
| -rw-r--r-- | engines/sci/graphics/celobj32.cpp | 8 | ||||
| -rw-r--r-- | engines/sci/graphics/celobj32.h | 14 | ||||
| -rw-r--r-- | engines/sci/graphics/screen_item32.cpp | 12 | 
3 files changed, 28 insertions, 6 deletions
diff --git a/engines/sci/graphics/celobj32.cpp b/engines/sci/graphics/celobj32.cpp index af5ee3abbc..befa5cda18 100644 --- a/engines/sci/graphics/celobj32.cpp +++ b/engines/sci/graphics/celobj32.cpp @@ -799,8 +799,8 @@ CelObjView::CelObjView(const GuiResourceId viewId, const int16 loopNo, const int  	if (_scaledWidth == 0 || _scaledHeight == 0) {  		byte sizeFlag = data[5];  		if (sizeFlag == 0) { -			_scaledWidth = 320; -			_scaledHeight = 200; +			_scaledWidth = kLowResX; +			_scaledHeight = kLowResY;  		} else if (sizeFlag == 1) {  			_scaledWidth = 640;  			_scaledHeight = 480; @@ -985,8 +985,8 @@ CelObjPic::CelObjPic(const GuiResourceId picId, const int16 celNo) {  		_scaledWidth = sizeFlag1;  		_scaledHeight = sizeFlag2;  	} else if (sizeFlag1 == 0) { -		_scaledWidth = 320; -		_scaledHeight = 200; +		_scaledWidth = kLowResX; +		_scaledHeight = kLowResY;  	} else if (sizeFlag1 == 1) {  		_scaledWidth = 640;  		_scaledHeight = 480; diff --git a/engines/sci/graphics/celobj32.h b/engines/sci/graphics/celobj32.h index 6e401b3df4..e405592b5f 100644 --- a/engines/sci/graphics/celobj32.h +++ b/engines/sci/graphics/celobj32.h @@ -31,6 +31,20 @@  namespace Sci {  typedef Common::Rational Ratio; +// SCI32 has four different coordinate systems: +// 1. low resolution, 2. game/script resolution, +// 3. text/bitmap resolution, 4. screen resolution +// +// In CelObj, these values are used when there is +// no baked in resolution of cels. +// +// In ScreenItem, it is used when deciding which +// path to take to calculate dimensions. +enum { +	kLowResX = 320, +	kLowResY = 200 +}; +  enum CelType {  	kCelTypeView  = 0,  	kCelTypePic   = 1, diff --git a/engines/sci/graphics/screen_item32.cpp b/engines/sci/graphics/screen_item32.cpp index c0b3240c7e..d2673d40b3 100644 --- a/engines/sci/graphics/screen_item32.cpp +++ b/engines/sci/graphics/screen_item32.cpp @@ -273,7 +273,9 @@ void ScreenItem::calcRects(const Plane &plane) {  		// Cel may use a coordinate system that is not the same size as the  		// script coordinate system (usually this means high-resolution  		// pictures with low-resolution scripts) -		if (celObj._scaledWidth != scriptWidth || celObj._scaledHeight != scriptHeight) { +		if (celObj._scaledWidth != kLowResX || celObj._scaledHeight != kLowResY) { +			// high resolution coordinates +  			if (_useInsetRect) {  				const Ratio scriptToCelX(celObj._scaledWidth, scriptWidth);  				const Ratio scriptToCelY(celObj._scaledHeight, scriptHeight); @@ -345,6 +347,8 @@ void ScreenItem::calcRects(const Plane &plane) {  			_ratioX = scaleX * celToScreenX;  			_ratioY = scaleY * celToScreenY;  		} else { +			// low resolution coordinates +  			int displaceX = celObj._displace.x;  			if (_mirrorX != celObj._mirrorX && _celInfo.type != kCelTypePic) {  				displaceX = celObj._width - celObj._displace.x - 1; @@ -582,7 +586,9 @@ Common::Rect ScreenItem::getNowSeenRect(const Plane &plane) const {  		displaceX = celObj._width - displaceX - 1;  	} -	if (celObj._scaledWidth != scriptWidth || celObj._scaledHeight != scriptHeight) { +	if (celObj._scaledWidth != kLowResX || celObj._scaledHeight != kLowResY) { +		// high resolution coordinates +  		if (_useInsetRect) {  			Ratio scriptToCelX(celObj._scaledWidth, scriptWidth);  			Ratio scriptToCelY(celObj._scaledHeight, scriptHeight); @@ -616,6 +622,8 @@ Common::Rect ScreenItem::getNowSeenRect(const Plane &plane) const {  		mulinc(nsRect, celToScriptX, celToScriptY);  		nsRect.translate(_position.x - displaceX, _position.y - displaceY);  	} else { +		// low resolution coordinates +  		if (!scaleX.isOne() || !scaleY.isOne()) {  			mulinc(nsRect, scaleX, scaleY);  			// TODO: This was in the original code, baked into the  | 
