[Scummvm-cvs-logs] SF.net SVN: scummvm:[35703] scummvm/trunk/engines/scumm/he/wiz_he.cpp

Kirben at users.sourceforge.net Kirben at users.sourceforge.net
Sat Jan 3 15:27:19 CET 2009


Revision: 35703
          http://scummvm.svn.sourceforge.net/scummvm/?rev=35703&view=rev
Author:   Kirben
Date:     2009-01-03 14:27:19 +0000 (Sat, 03 Jan 2009)

Log Message:
-----------
Add missing src checks in drawWizPolygonTransform().

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/he/wiz_he.cpp

Modified: scummvm/trunk/engines/scumm/he/wiz_he.cpp
===================================================================
--- scummvm/trunk/engines/scumm/he/wiz_he.cpp	2009-01-03 14:07:17 UTC (rev 35702)
+++ scummvm/trunk/engines/scumm/he/wiz_he.cpp	2009-01-03 14:27:19 UTC (rev 35703)
@@ -1532,20 +1532,38 @@
 
 void Wiz::drawWizPolygonTransform(int resNum, int state, Common::Point *wp, int flags, int shadow, int dstResNum, int palette) {
 	debug(3, "drawWizPolygonTransform(resNum %d, flags 0x%X, shadow %d dstResNum %d palette %d)", resNum, flags, shadow, dstResNum, palette);
+	const Common::Rect *r = NULL;
+	uint8 *srcWizBuf = NULL;
+	bool freeBuffer = true;
 	int i;
 
 	if (_vm->_game.heversion >= 99) {
-		flags |= kWIFBlitToMemBuffer;
+		if (getWizImageData(resNum, state, 0) != 0 || (flags & (kWIFRemapPalette | kWIFFlipX | kWIFFlipY)) || palette != 0) {
+			flags |= kWIFBlitToMemBuffer;
 
-		if (flags & 0x800000) {
-			debug(0, "drawWizPolygonTransform() unhandled flag 0x800000");
+			if (flags & 0x800000) {
+				debug(0, "drawWizPolygonTransform() unhandled flag 0x800000");
+			}
+			srcWizBuf = drawWizImage(resNum, state, 0, 0, 0, shadow, 0, r, flags, 0, palette);
+		} else {
+			uint8 *dataPtr = _vm->getResourceAddress(rtImage, resNum);
+			assert(dataPtr);
+			srcWizBuf = _vm->findWrappedBlock(MKID_BE('WIZD'), dataPtr, state, 0);
+			assert(srcWizBuf);
+			freeBuffer = false;
 		}
 	} else {
-		flags = kWIFBlitToMemBuffer;
+		if (getWizImageData(resNum, state, 0) != 0) {
+			srcWizBuf = drawWizImage(resNum, state, 0, 0, 0, shadow, 0, r, kWIFBlitToMemBuffer, 0, palette);
+		} else {
+			uint8 *dataPtr = _vm->getResourceAddress(rtImage, resNum);
+			assert(dataPtr);
+			srcWizBuf = _vm->findWrappedBlock(MKID_BE('WIZD'), dataPtr, state, 0);
+			assert(srcWizBuf);
+			freeBuffer = false;
+		}
 	}
 
-	const Common::Rect *r = NULL;
-	uint8 *srcWizBuf = drawWizImage(resNum, state, 0, 0, 0, shadow, 0, r, flags, 0, palette);
 	if (srcWizBuf) {
 		uint8 *dst;
 		int32 dstw, dsth, dstpitch, wizW, wizH;
@@ -1683,7 +1701,8 @@
 			_vm->restoreBackgroundHE(bound);
 		}
 
-		free(srcWizBuf);
+		if (freeBuffer)
+			free(srcWizBuf);
 	}
 }
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list