[Scummvm-git-logs] scummvm master -> c784323fb7a86dc751abc85140aa70881a488037

sdelamarre noreply at scummvm.org
Thu Apr 20 22:55:39 UTC 2023


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
0099c3624c GOB: coordinates adjustment for games existing in several resolutions
5c8a66b640 GOB: fix Adibou1 "setRenderFlags" opcode
de85d267eb VIDEO: implement VMD doubling, used to accommodate higher resolutions
c784323fb7 GOB: double video when render flag 0x2000 is set


Commit: 0099c3624c7cdf68828ca4941f0a28583e963297
    https://github.com/scummvm/scummvm/commit/0099c3624c7cdf68828ca4941f0a28583e963297
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-04-21T00:13:44+02:00

Commit Message:
GOB: coordinates adjustment for games existing in several resolutions

This mechanism was used to accommodate games existing in several resolutions, while keeping the same script logic across versions.
Opcodes manipulating coordinates and lengths call the adjustCoords() function to double or halve their values depending on the adjustment needed.

Its usage has been confirmed only in a German version of Adibou1 for now, restrict the feature to this game.

Changed paths:
    engines/gob/draw.cpp
    engines/gob/draw.h
    engines/gob/draw_v2.cpp
    engines/gob/game.cpp
    engines/gob/hotspots.cpp
    engines/gob/inter_v1.cpp
    engines/gob/inter_v2.cpp
    engines/gob/scenery.cpp


diff --git a/engines/gob/draw.cpp b/engines/gob/draw.cpp
index a9819e3f25d..be4d0a5c988 100644
--- a/engines/gob/draw.cpp
+++ b/engines/gob/draw.cpp
@@ -341,7 +341,7 @@ void Draw::freeSprite(int16 index) {
 }
 
 void Draw::adjustCoords(char adjust, int16 *coord1, int16 *coord2) {
-	if (_needAdjust == 2)
+	if (_needAdjust == 2 || _needAdjust == 10)
 		return;
 
 	switch (adjust) {
diff --git a/engines/gob/draw.h b/engines/gob/draw.h
index 6297f183502..083627fb151 100644
--- a/engines/gob/draw.h
+++ b/engines/gob/draw.h
@@ -156,7 +156,12 @@ public:
 	int16 _palLoadData1[4];
 	int16 _palLoadData2[4];
 
+	// Coordinates adjustment mode
+	// Some game were released for a higher resolution than the one they
+	// were originally designed for. adjustCoords() is used to adjust
+	//
 	int16 _needAdjust;
+
 	int16 _scrollOffsetY;
 	int16 _scrollOffsetX;
 
diff --git a/engines/gob/draw_v2.cpp b/engines/gob/draw_v2.cpp
index 0537f4a044d..e87bc42d936 100644
--- a/engines/gob/draw_v2.cpp
+++ b/engines/gob/draw_v2.cpp
@@ -737,7 +737,7 @@ void Draw_v2::spriteOperation(int16 operation) {
 			break;
 
 		_spritesArray[_destSurface]->blit(*_spritesArray[_sourceSurface],
-				_spriteLeft, spriteTop,
+				_spriteLeft, _spriteTop,
 				_spriteLeft + _spriteRight - 1,
 				_spriteTop + _spriteBottom - 1,
 				_destSpriteX, _destSpriteY, (_transparency == 0) ? -1 : 0, _transparency & 0x80);
@@ -754,13 +754,13 @@ void Draw_v2::spriteOperation(int16 operation) {
 
 	case DRAW_FILLRECT:
 		if (!(_backColor & 0xFF00) || !(_backColor & 0x0100)) {
-			_spritesArray[_destSurface]->fillRect(destSpriteX,
+			_spritesArray[_destSurface]->fillRect(_destSpriteX,
 					_destSpriteY, _destSpriteX + _spriteRight - 1,
 					_destSpriteY + _spriteBottom - 1, getColor(_backColor));
 		} else {
 			uint8 strength = 16 - (((uint16) _backColor) >> 12);
 
-			_spritesArray[_destSurface]->shadeRect(destSpriteX,
+			_spritesArray[_destSurface]->shadeRect(_destSpriteX,
 					_destSpriteY, _destSpriteX + _spriteRight - 1,
 					_destSpriteY + _spriteBottom - 1, getColor(_backColor), strength);
 		}
@@ -791,6 +791,9 @@ void Draw_v2::spriteOperation(int16 operation) {
 		if (!resource)
 			break;
 
+		if (_vm->_draw->_needAdjust == 3 || _vm->_draw->_needAdjust == 4)
+			adjustCoords(0, &_spriteRight, &_spriteBottom);
+
 		_vm->_video->drawPackedSprite(resource->getData(),
 				_spriteRight, _spriteBottom, _destSpriteX, _destSpriteY,
 				_transparency, *_spritesArray[_destSurface]);
diff --git a/engines/gob/game.cpp b/engines/gob/game.cpp
index 4c265f04aee..118ce5e0a4d 100644
--- a/engines/gob/game.cpp
+++ b/engines/gob/game.cpp
@@ -575,6 +575,12 @@ void Game::playTot(int16 function) {
 				break;
 			}
 
+			if (_vm->getGameType() == kGameTypeAdibou1) { // TODO: probably needed by other games (Adi 2?)
+				_vm->_draw->_needAdjust = _vm->_game->_script->getData()[58];
+				if (_vm->_draw->_needAdjust <= 1 || _vm->_draw->_needAdjust >= 8)
+					_vm->_draw->_needAdjust = 2;
+			}
+
 			_resources->load(_curTotFile);
 
 			_vm->_global->_inter_animDataSize = _script->getAnimDataSize();
@@ -666,6 +672,9 @@ void Game::capturePush(int16 left, int16 top, int16 width, int16 height) {
 	if (_captureCount == 20)
 		error("Game::capturePush(): Capture stack overflow");
 
+	_vm->_draw->adjustCoords(0, &left, &top);
+	_vm->_draw->adjustCoords(0, &width, &height);
+
 	_captureStack[_captureCount].left = left;
 	_captureStack[_captureCount].top = top;
 	_captureStack[_captureCount].right = left + width;
@@ -688,7 +697,11 @@ void Game::capturePush(int16 left, int16 top, int16 width, int16 height) {
 	_vm->_draw->_destSpriteX = 0;
 	_vm->_draw->_destSpriteY = 0;
 	_vm->_draw->_transparency = 0;
+
+	int16 savedNeedAdjust = _vm->_draw->_needAdjust;
+	_vm->_draw->_needAdjust = 10;
 	_vm->_draw->spriteOperation(DRAW_BLITSURF);
+	_vm->_draw->_needAdjust = savedNeedAdjust;
 	_captureCount++;
 }
 
@@ -710,7 +723,10 @@ void Game::capturePop(char doDraw) {
 		_vm->_draw->_destSurface = Draw::kBackSurface;
 		_vm->_draw->_spriteLeft = _vm->_draw->_destSpriteX & 0xF;
 		_vm->_draw->_spriteTop = 0;
+		int16 savedNeedAdjust = _vm->_draw->_needAdjust;
+		_vm->_draw->_needAdjust = 10;
 		_vm->_draw->spriteOperation(DRAW_BLITSURF);
+		_vm->_draw->_needAdjust = savedNeedAdjust;
 	}
 	_vm->_draw->freeSprite(Draw::kCaptureSurface + _captureCount);
 }
diff --git a/engines/gob/hotspots.cpp b/engines/gob/hotspots.cpp
index df088650f88..c1428935ec9 100644
--- a/engines/gob/hotspots.cpp
+++ b/engines/gob/hotspots.cpp
@@ -328,6 +328,16 @@ void Hotspots::recalculate(bool force) {
 			top  += _vm->_draw->_backDeltaY;
 		}
 
+		if (_vm->_draw->_needAdjust != 2 && _vm->_draw->_needAdjust != 10) {
+			_vm->_draw->adjustCoords(0, &left, &top);
+			if ((spot.flags & 15) < 3)
+				_vm->_draw->adjustCoords(2, &width, &height);
+			else {
+				height &= 0xFFFFFFFE;
+				_vm->_draw->adjustCoords(2, nullptr, &height);
+			}
+		}
+
 		// Clamping
 		if (left < 0) {
 			width += left;
@@ -1312,6 +1322,18 @@ void Hotspots::evaluateNew(uint16 i, uint16 *ids, InputDesc *inputs,
 		top  += _vm->_draw->_backDeltaY;
 	}
 
+	if (left != 0xFFFF) {
+		_vm->_draw->adjustCoords(0, &left, &top);
+		if ((type & 0x3F) >= 20 || (type & 0x3F) < 3)
+			_vm->_draw->adjustCoords(0, &width, &height);
+		else {
+			if (_vm->_draw->_needAdjust != 2 && _vm->_draw->_needAdjust != 10)
+				height &= 0xFFFE;
+
+			_vm->_draw->adjustCoords(0, &height, 0);
+		}
+	}
+
 	right  = left + width  - 1;
 	bottom = top  + height - 1;
 
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index a57f12094c4..370c71fbea4 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -745,8 +745,12 @@ void Inter_v1::o1_loadCursor(OpFuncParams &params) {
 			index * _vm->_draw->_cursorWidth + _vm->_draw->_cursorWidth - 1,
 			_vm->_draw->_cursorHeight - 1, 0);
 
+	int16 width = resource->getWidth();
+	int16 height = resource->getHeight();
+	_vm->_draw->adjustCoords(0, &width, &height);
+
 	_vm->_video->drawPackedSprite(resource->getData(),
-			resource->getWidth(), resource->getHeight(),
+			width, height,
 			index * _vm->_draw->_cursorWidth, 0, 0, *_vm->_draw->_cursorSprites);
 	_vm->_draw->_cursorAnimLow[index] = 0;
 
@@ -1478,6 +1482,7 @@ void Inter_v1::o1_createSprite(OpFuncParams &params) {
 		height = _vm->_game->_script->readValExpr();
 	}
 
+	_vm->_draw->adjustCoords(0, &width, &height);
 	flag = _vm->_game->_script->readInt16();
 	_vm->_draw->initSpriteSurf(index, width, height, flag ? 2 : 0);
 }
@@ -1758,6 +1763,7 @@ void Inter_v1::o1_istrlen(OpFuncParams &params) {
 void Inter_v1::o1_setMousePos(OpFuncParams &params) {
 	_vm->_global->_inter_mouseX = _vm->_game->_script->readValExpr();
 	_vm->_global->_inter_mouseY = _vm->_game->_script->readValExpr();
+	_vm->_draw->adjustCoords(0, &_vm->_global->_inter_mouseX, &_vm->_global->_inter_mouseY);
 	_vm->_global->_inter_mouseX -= _vm->_video->_scrollOffsetX;
 	_vm->_global->_inter_mouseY -= _vm->_video->_scrollOffsetY;
 	if (_vm->_global->_useMouse != 0)
diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp
index 33ef540f361..a47b92b4f68 100644
--- a/engines/gob/inter_v2.cpp
+++ b/engines/gob/inter_v2.cpp
@@ -1178,6 +1178,9 @@ void Inter_v2::o2_addHotspot(OpFuncParams &params) {
 	if (key == 0)
 		key = ABS(id) + 41960;
 
+	_vm->_draw->adjustCoords(0, &left, &top);
+	_vm->_draw->adjustCoords(2, &width, &height);
+
 	if (left < 0) {
 		width += left;
 		left   = 0;
diff --git a/engines/gob/scenery.cpp b/engines/gob/scenery.cpp
index 4504b3f95c3..768ba71a560 100644
--- a/engines/gob/scenery.cpp
+++ b/engines/gob/scenery.cpp
@@ -520,6 +520,7 @@ int16 Scenery::loadAnim(char search) {
 			_animPictToSprite[7 * sceneryIndex + i] = sprIndex;
 			_spriteRefs[sprIndex]  = 1;
 			_spriteResId[sprIndex] = sprResId;
+			_vm->_draw->adjustCoords(0, &width, &height);
 			_vm->_draw->initSpriteSurf(sprIndex, width, height, 2);
 
 			_vm->_draw->_spritesArray[sprIndex]->clear();


Commit: 5c8a66b640c66cfc16a75ec54777f969afed48b5
    https://github.com/scummvm/scummvm/commit/5c8a66b640c66cfc16a75ec54777f969afed48b5
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-04-21T00:15:41+02:00

Commit Message:
GOB: fix Adibou1 "setRenderFlags" opcode

o1_setRenderFlags behavior is needed, not o2_setRenderFlags one.

Changed paths:
    engines/gob/inter_adibou1.cpp


diff --git a/engines/gob/inter_adibou1.cpp b/engines/gob/inter_adibou1.cpp
index c297592590b..7ea5364f8db 100644
--- a/engines/gob/inter_adibou1.cpp
+++ b/engines/gob/inter_adibou1.cpp
@@ -43,6 +43,7 @@ void Inter_Adibou1::setupOpcodesDraw() {
 
 void Inter_Adibou1::setupOpcodesFunc() {
 	Inter_v2::setupOpcodesFunc();
+	OPCODEDRAW(0x0A, o1_setRenderFlags);
 }
 
 void Inter_Adibou1::setupOpcodesGob() {


Commit: de85d267eb896fa0ed27b0e777787fe43f72f9af
    https://github.com/scummvm/scummvm/commit/de85d267eb896fa0ed27b0e777787fe43f72f9af
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-04-21T00:48:23+02:00

Commit Message:
VIDEO: implement VMD doubling, used to accommodate higher resolutions

Each pixel is replaced by a 2x2 square filled with the same color.

Changed paths:
    video/coktel_decoder.cpp
    video/coktel_decoder.h


diff --git a/video/coktel_decoder.cpp b/video/coktel_decoder.cpp
index 0df1919b1cd..c17cb5ae3ee 100644
--- a/video/coktel_decoder.cpp
+++ b/video/coktel_decoder.cpp
@@ -154,6 +154,10 @@ void CoktelDecoder::setXY() {
 	setXY(_defaultX, _defaultY);
 }
 
+void CoktelDecoder::setDouble(bool isDouble) {
+	_isDouble = isDouble;
+}
+
 void CoktelDecoder::setFrameRate(Common::Rational frameRate) {
 	_frameRate = frameRate;
 }
@@ -476,6 +480,29 @@ void CoktelDecoder::renderBlockWhole(Graphics::Surface &dstSurf, const byte *src
 	}
 }
 
+void CoktelDecoder::renderBlockWholeDouble(Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect) {
+	Common::Rect srcRect = rect;
+
+	rect.clip(dstSurf.w / 2, dstSurf.h / 2);
+
+	byte *dst = (byte *)dstSurf.getBasePtr(2 * rect.left, 2 * rect.top);
+	byte bpp = dstSurf.format.bytesPerPixel;
+	for (int i = 0; i < rect.height(); i++) {
+		// Each pixel on the source row is written twice to the destination row
+		for (int j = 0; j < rect.width(); j++) {
+			memcpy(dst + 2 * j * bpp, src + j * bpp, bpp);
+			memcpy(dst + (2 * j + 1) * bpp, src + j * bpp, bpp);
+		}
+		dst += dstSurf.pitch;
+
+		// Then, the whole row is written again to the destination
+		memcpy(dst, dst - dstSurf.pitch, 2 * rect.width() * bpp);
+		dst += dstSurf.pitch;
+
+		src += srcRect.width() * bpp;
+	}
+}
+
 // A quarter-wide whole, completely filled block
 void CoktelDecoder::renderBlockWhole4X(Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect) {
 	Common::Rect srcRect = rect;
@@ -558,6 +585,48 @@ void CoktelDecoder::renderBlockSparse(Graphics::Surface &dstSurf, const byte *sr
 	}
 }
 
+void CoktelDecoder::renderBlockSparseDouble(Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect) {
+	Common::Rect srcRect = rect;
+
+	rect.clip(dstSurf.w / 2, dstSurf.h / 2);
+
+	byte *dst = (byte *)dstSurf.getBasePtr(2 * rect.left, 2 * rect.top);
+	for (int i = 0; i < rect.height(); i++) {
+		byte *dstRow = dst;
+		int16 pixWritten = 0;
+
+		// Each pixel on the source row is written twice to the destination row
+		while (pixWritten < srcRect.width()) {
+			int16 pixCount = *src++;
+
+			if (pixCount & 0x80) { // Data
+				int16 copyCount;
+
+				pixCount = MIN<int16>((pixCount & 0x7F) + 1, srcRect.width() - pixWritten);
+				copyCount = CLIP<int16>(rect.width() - pixWritten, 0, pixCount);
+
+				for (int j = 0; j < copyCount; j++) {
+					dstRow[2 * j] = src[j];
+					dstRow[2 * j + 1] = src[j];
+				}
+
+				pixWritten += pixCount;
+				dstRow += 2 * pixCount;
+				src += pixCount;
+			} else { // "Hole"
+				pixWritten += pixCount + 1;
+				dstRow += 2 * (pixCount + 1); // The hole size is doubled in the destination
+			}
+		}
+
+		dst += dstSurf.pitch;
+		// Then, the whole row is written again to the destination
+		memcpy(dst, dst - dstSurf.pitch, 2 * rect.width());
+		dst += dstSurf.pitch;
+	}
+}
+
+
 // A half-high sparse block
 void CoktelDecoder::renderBlockSparse2Y(Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect) {
 	warning("renderBlockSparse2Y");
@@ -1476,11 +1545,17 @@ bool IMDDecoder::renderFrame(Common::Rect &rect) {
 	}
 
 	// Evaluate the block type
-	if      (type == 0x01)
-		renderBlockSparse  (_surface, dataPtr, rect);
-	else if (type == 0x02)
-		renderBlockWhole   (_surface, dataPtr, rect);
-	else if (type == 0x42)
+	if (type == 0x01) {
+		if (_isDouble)
+			renderBlockSparseDouble(_surface, dataPtr, rect);
+		else
+			renderBlockSparse(_surface, dataPtr, rect);
+	} else if (type == 0x02) {
+		if (_isDouble)
+			renderBlockWholeDouble(_surface, dataPtr, rect);
+		else
+			renderBlockWhole(_surface, dataPtr, rect);
+	} else if (type == 0x42)
 		renderBlockWhole4X (_surface, dataPtr, rect);
 	else if ((type & 0x0F) == 0x02)
 		renderBlockWhole2Y (_surface, dataPtr, rect);
@@ -2417,11 +2492,17 @@ bool VMDDecoder::renderFrame(Common::Rect &rect) {
 	}
 
 	// Evaluate the block type
-	if      (type == 0x01)
-		renderBlockSparse  (*surface, dataPtr, *blockRect);
-	else if (type == 0x02)
-		renderBlockWhole   (*surface, dataPtr, *blockRect);
-	else if (type == 0x03)
+	if      (type == 0x01) {
+		if (_isDouble)
+			renderBlockSparseDouble(*surface, dataPtr, *blockRect);
+		else
+			renderBlockSparse(*surface, dataPtr, *blockRect);
+	} else if (type == 0x02) {
+		if (_isDouble)
+			renderBlockWholeDouble(*surface, dataPtr, *blockRect);
+		else
+			renderBlockWhole(*surface, dataPtr, *blockRect);
+	} else if (type == 0x03)
 		renderBlockRLE     (*surface, dataPtr, *blockRect);
 	else if (type == 0x42)
 		renderBlockWhole4X (*surface, dataPtr, *blockRect);
diff --git a/video/coktel_decoder.h b/video/coktel_decoder.h
index 4aaaee39ff3..af2e9435b38 100644
--- a/video/coktel_decoder.h
+++ b/video/coktel_decoder.h
@@ -98,6 +98,8 @@ public:
 	/** Draw the video at the default position. */
 	void setXY();
 
+	void setDouble(bool isDouble); // double the size of the video, to accommodate higher resolutions
+
 	/** Override the video's frame rate. */
 	void setFrameRate(Common::Rational frameRate);
 	/** Get the video's frame rate. */
@@ -231,6 +233,8 @@ protected:
 	byte _palette[768];
 	bool _paletteDirty;
 
+	bool _isDouble;
+
 	bool    _ownSurface;
 	Graphics::Surface _surface;
 
@@ -258,12 +262,14 @@ protected:
 	void deRLE(byte *&destPtr, const byte *&srcPtr, int16 destLen, int16 srcLen);
 
 	// Block rendering
-	void renderBlockWhole   (Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect);
-	void renderBlockWhole4X (Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect);
-	void renderBlockWhole2Y (Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect);
-	void renderBlockSparse  (Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect);
-	void renderBlockSparse2Y(Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect);
-	void renderBlockRLE     (Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect);
+	void renderBlockWhole       (Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect);
+	void renderBlockWholeDouble (Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect);
+	void renderBlockWhole4X     (Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect);
+	void renderBlockWhole2Y     (Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect);
+	void renderBlockSparse      (Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect);
+	void renderBlockSparseDouble(Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect);
+	void renderBlockSparse2Y    (Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect);
+	void renderBlockRLE         (Graphics::Surface &dstSurf, const byte *src, Common::Rect &rect);
 
 	// Sound helper functions
 	inline void unsignedToSigned(byte *buffer, int length);


Commit: c784323fb7a86dc751abc85140aa70881a488037
    https://github.com/scummvm/scummvm/commit/c784323fb7a86dc751abc85140aa70881a488037
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2023-04-21T00:51:24+02:00

Commit Message:
GOB: double video when render flag 0x2000 is set

Fixes the intro and the "three little cats" video size in the German version of Adibou1

Changed paths:
    engines/gob/draw.h
    engines/gob/videoplayer.cpp


diff --git a/engines/gob/draw.h b/engines/gob/draw.h
index 083627fb151..384084cf874 100644
--- a/engines/gob/draw.h
+++ b/engines/gob/draw.h
@@ -41,6 +41,7 @@ namespace Gob {
 #define RENDERFLAG_NOSUBTITLES       0x0400
 #define RENDERFLAG_FROMSPLIT         0x0800
 #define RENDERFLAG_DOUBLECOORDS      0x1000
+#define RENDERFLAG_DOUBLEVIDEO       0x2000
 
 class Draw {
 public:
diff --git a/engines/gob/videoplayer.cpp b/engines/gob/videoplayer.cpp
index e542d26556c..971bb58718e 100644
--- a/engines/gob/videoplayer.cpp
+++ b/engines/gob/videoplayer.cpp
@@ -338,6 +338,9 @@ bool VideoPlayer::play(int slot, Properties &properties) {
 		//       Except for Urban Runner and Bambou, where it leads to glitches
 		properties.breakKey = kShortKeyEscape;
 
+	if (_vm->_draw->_renderFlags & RENDERFLAG_DOUBLEVIDEO)
+		video->decoder->setDouble(true);
+
 	while ((properties.startFrame != properties.lastFrame) &&
 	       (properties.startFrame < (int32)(video->decoder->getFrameCount() - 1))) {
 
@@ -358,6 +361,9 @@ bool VideoPlayer::play(int slot, Properties &properties) {
 			waitEndFrame(slot);
 	}
 
+	if (_vm->_draw->_renderFlags & RENDERFLAG_DOUBLEVIDEO)
+		video->decoder->setDouble(false);
+
 	evalBgShading(*video);
 
 	return true;




More information about the Scummvm-git-logs mailing list