[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.409,2.410 script_v100he.cpp,2.106,2.107 script_v72he.cpp,2.229,2.230 script_v80he.cpp,2.83,2.84 script_v90he.cpp,2.204,2.205 scumm.cpp,1.395,1.396 sprite_he.cpp,1.113,1.114 sprite_he.h,1.29,1.30 wiz_he.cpp,2.33,2.34 wiz_he.h,2.13,2.14

kirben kirben at users.sourceforge.net
Fri Apr 1 00:51:45 CEST 2005


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28781/scumm

Modified Files:
	intern.h script_v100he.cpp script_v72he.cpp script_v80he.cpp 
	script_v90he.cpp scumm.cpp sprite_he.cpp sprite_he.h 
	wiz_he.cpp wiz_he.h 
Log Message:

Add support for clipping of wizImages.
Add support for altering wizImages.
Various renames.


Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.409
retrieving revision 2.410
diff -u -d -r2.409 -r2.410
--- intern.h	1 Apr 2005 06:30:44 -0000	2.409
+++ intern.h	1 Apr 2005 08:51:08 -0000	2.410
@@ -741,11 +741,12 @@
 	int readFileToArray(int slot, int32 size);
 	void writeFileFromArray(int slot, int resID);
 
+	void displayWizImage(WizImage *pwi);
 	void displayWizComplexImage(const WizParameters *params);
 	void drawWizComplexPolygon(int resnum, int state, int po_x, int po_y, int arg14, int angle, int zoom, const Common::Rect *r);
 	void captureWizImage(int resnum, const Common::Rect& r, bool frontBuffer, int compType);
 	void getWizImageDim(int resnum, int state,  int32 &w, int32 &h);
-	uint8 *drawWizImage(const WizImage *pwi);
+	uint8 *drawWizImage(int resNum, int state, int x1, int y1, int create, const Common::Rect *clipBox, int flags, uint8 *newResourcePtr, int paletteNum);
 	void drawWizPolygon(int resnum, int state, int id, int flags);
 	void flushWizBuffer();
 

Index: script_v100he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v100he.cpp,v
retrieving revision 2.106
retrieving revision 2.107
diff -u -d -r2.106 -r2.107
--- script_v100he.cpp	1 Apr 2005 06:30:45 -0000	2.106
+++ script_v100he.cpp	1 Apr 2005 08:51:12 -0000	2.107
@@ -1246,7 +1246,7 @@
 		_wizParams.processMode = 8;
 		break;
 	case 54:
-		_wizParams.processFlags |= 0x10000;
+		_wizParams.processFlags |= kWPFDstResNum;
 		//_wizParams.unk_17C = pop();
 		//_wizParams.unk_180 = pop();
 		pop();
@@ -1346,8 +1346,8 @@
 		_wizParams.box2.left = _wizParams.box2.right = pop();
 		break;
 	case 135:
-		_wizParams.processFlags |= 0x10000;
-		_wizParams.unk_380 = pop();
+		_wizParams.processFlags |= kWPFDstResNum;
+		_wizParams.dstResNum = pop();
 		break;
 	case 136:
 		_wizParams.processFlags |= kWPFFillColor | kWPFClipBox2;

Index: script_v72he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v72he.cpp,v
retrieving revision 2.229
retrieving revision 2.230
diff -u -d -r2.229 -r2.230
--- script_v72he.cpp	1 Apr 2005 06:30:45 -0000	2.229
+++ script_v72he.cpp	1 Apr 2005 08:51:12 -0000	2.230
@@ -887,7 +887,7 @@
 	wi.x1 = wi.y1 = 0;
 	wi.state = 0;
 	wi.flags = kWIFPrint;
-	drawWizImage(&wi);
+	displayWizImage(&wi);
 }
 
 void ScummEngine_v72he::o72_getArrayDimSize() {
@@ -1610,13 +1610,13 @@
 }
 
 void ScummEngine_v72he::o72_drawWizImage() {
-	_wizParams.processFlags |= kWPFSetPos | kWPFNewFlags;
-	_wizParams.img.flags = pop();
-	_wizParams.img.state = 0;
-	_wizParams.img.y1 = pop();
-	_wizParams.img.x1 = pop();
-	_wizParams.img.resNum = pop();
-	displayWizComplexImage(&_wizParams);
+	WizImage wi;
+	wi.flags = pop();
+	wi.y1 = pop();
+	wi.x1 = pop();
+	wi.resNum = pop();
+	wi.state = 0;
+	displayWizImage(&wi);
 }
 
 void ScummEngine_v72he::o72_unknownCF() {

Index: script_v80he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v80he.cpp,v
retrieving revision 2.83
retrieving revision 2.84
diff -u -d -r2.83 -r2.84
--- script_v80he.cpp	1 Apr 2005 06:30:45 -0000	2.83
+++ script_v80he.cpp	1 Apr 2005 08:51:12 -0000	2.84
@@ -584,12 +584,12 @@
 }
 
 void ScummEngine_v80he::o80_drawWizPolygon() {
-	_wizParams.processFlags |= kWPFSetPos | kWPFNewFlags;
-	_wizParams.img.flags = kWIFIsPolygon;
-	_wizParams.img.state = 0;
-	_wizParams.img.y1 = _wizParams.img.x1 = pop();
-	_wizParams.img.resNum = pop();
-	displayWizComplexImage(&_wizParams);
+	WizImage wi;
+	wi.x1 = wi.y1 = pop();
+	wi.resNum = pop();
+	wi.state = 0;
+	wi.flags = kWIFIsPolygon;
+	displayWizImage(&wi);	
 }
 
 void ScummEngine_v80he::o80_unknownE0() {
@@ -608,35 +608,37 @@
 	switch (subOp) {
 	case 55:
 		{
-		Actor *a = derefActorSafe(num, "o80_unknownE0");
-		int top_actor = a->_top;
-		int bottom_actor = a->_bottom;
-		a->_drawToBackBuf = true;
-		a->_needRedraw = true;
-		a->drawActorCostume();
-		a->_drawToBackBuf = false;
-		a->_needRedraw = true;
-		a->drawActorCostume();
-		a->_needRedraw = false;
+			Actor *a = derefActorSafe(num, "o80_unknownE0");
+			int top_actor = a->_top;
+			int bottom_actor = a->_bottom;
+			a->_drawToBackBuf = true;
+			a->_needRedraw = true;
+			a->drawActorCostume();
+			a->_drawToBackBuf = false;
+			a->_needRedraw = true;
+			a->drawActorCostume();
+			a->_needRedraw = false;
 
-		if (a->_top > top_actor)
-			a->_top = top_actor;
-		if (a->_bottom < bottom_actor)
-			a->_bottom = bottom_actor;
+			if (a->_top > top_actor)
+				a->_top = top_actor;
+			if (a->_bottom < bottom_actor)
+				a->_bottom = bottom_actor;
 
-		type = 2;
+			type = 2;
 		}
 		break;
 	case 63:
-		_wizParams.processFlags |= kWPFSetPos;
-		_wizParams.img.flags = 0;
-		_wizParams.img.state = 0;
-		_wizParams.img.y1 = y1;
-		_wizParams.img.x1 = x1;
-		_wizParams.img.resNum = num;
-		displayWizComplexImage(&_wizParams);
+		{
+			WizImage wi;
+			wi.flags = 0;
+			wi.y1 = y1;
+			wi.x1 = x1;
+			wi.resNum = num;
+			wi.state = 0;
+			displayWizImage(&wi);
 
-		type = 3;
+			type = 3;
+		}
 		break;
 	case 66:
 		type = 1;

Index: script_v90he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v90he.cpp,v
retrieving revision 2.204
retrieving revision 2.205
diff -u -d -r2.204 -r2.205
--- script_v90he.cpp	1 Apr 2005 06:30:45 -0000	2.204
+++ script_v90he.cpp	1 Apr 2005 08:51:12 -0000	2.205
@@ -668,8 +668,8 @@
 		_wizParams.box2.left = _wizParams.box2.right = pop();
 		break;
 	case 91: // HE99+
-		_wizParams.processFlags |= 0x10000;
-		_wizParams.unk_380 = pop();
+		_wizParams.processFlags |= kWPFDstResNum;
+		_wizParams.dstResNum = pop();
 		break;
 	case 108:
 		_wizParams.processFlags |= kWPFSetPos;
@@ -2307,11 +2307,11 @@
 		break;
 	case 24:
 		_skipProcessActors = 1;
-		_fullRedraw = 1;
+		//_fullRedraw = 1;
 		break;
 	case 25:
 		_skipProcessActors = 0;
-		_fullRedraw = 1;
+		//_fullRedraw = 1;
 		break;
 	case 42:
 		_wiz._rectOverrideEnabled = true;

Index: scumm.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.cpp,v
retrieving revision 1.395
retrieving revision 1.396
diff -u -d -r1.395 -r1.396
--- scumm.cpp	31 Mar 2005 23:14:09 -0000	1.395
+++ scumm.cpp	1 Apr 2005 08:51:13 -0000	1.396
@@ -1982,6 +1982,9 @@
 
 		processDrawQue();
 
+		if (_heversion >= 99)
+			_fullRedraw = false;
+
 		// Full Throttle always redraws verbs and draws verbs before actors
 		if (_version >= 7)
 			redrawVerbs();

Index: sprite_he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sprite_he.cpp,v
retrieving revision 1.113
retrieving revision 1.114
diff -u -d -r1.113 -r1.114
--- sprite_he.cpp	1 Apr 2005 06:30:46 -0000	1.113
+++ sprite_he.cpp	1 Apr 2005 08:51:13 -0000	1.114
@@ -440,7 +440,7 @@
 int ScummEngine_v90he::spriteGroupGet_field_20(int spriteGroupId) {
 	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
 
-	return _spriteGroups[spriteGroupId].field_20;
+	return _spriteGroups[spriteGroupId].dstResNum;
 }
 
 int ScummEngine_v90he::spriteGroupGet_scale_x_ratio_mul(int spriteGroupId) {
@@ -931,8 +931,8 @@
 void ScummEngine_v90he::spriteGroupSet_field_20(int spriteGroupId, int value) {
 	checkRange(_varNumSpriteGroups, 1, spriteGroupId, "Invalid sprite group %d");
 
-	if (_spriteGroups[spriteGroupId].field_20 != value) {
-		_spriteGroups[spriteGroupId].field_20 = value;
+	if (_spriteGroups[spriteGroupId].dstResNum != value) {
+		_spriteGroups[spriteGroupId].dstResNum = value;
 		redrawSpriteGroup(spriteGroupId);
 	}
 }
@@ -1026,7 +1026,7 @@
 	spg->flags &= ~kSGFClipBox;
 	redrawSpriteGroup(spriteGroupId);
 
-	spg->field_20 = 0;
+	spg->dstResNum = 0;
 	spg->scaling = 0;
 	spg->scale_x = 0x3F800000;
 	spg->scale_x_ratio_mul = 1;
@@ -1341,9 +1341,9 @@
 			wiz.processFlags |= kWPFPaletteNum;
 			wiz.img.paletteNum = spi->paletteNum;
 		}
-		if (spi->res_id && spi->group_num && _spriteGroups[spi->group_num].field_20) {
-			wiz.processFlags |= 0x10000;
-			wiz.unk_380 = _spriteGroups[spi->group_num].field_20;
+		if (spi->res_id && spi->group_num && _spriteGroups[spi->group_num].dstResNum) {
+			wiz.processFlags |= kWPFDstResNum;
+			wiz.dstResNum = _spriteGroups[spi->group_num].dstResNum;
 		}
 		displayWizComplexImage(&wiz);
 	}

Index: sprite_he.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sprite_he.h,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- sprite_he.h	1 Apr 2005 06:30:46 -0000	1.29
+++ sprite_he.h	1 Apr 2005 08:51:13 -0000	1.30
@@ -89,7 +89,7 @@
 	int flags;
 	int tx;
 	int ty;
-	int field_20;
+	int dstResNum;
 	int scaling;
 	int scale_x;
 	int scale_y;

Index: wiz_he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/wiz_he.cpp,v
retrieving revision 2.33
retrieving revision 2.34
diff -u -d -r2.33 -r2.34
--- wiz_he.cpp	1 Apr 2005 06:30:46 -0000	2.33
+++ wiz_he.cpp	1 Apr 2005 08:51:13 -0000	2.34
@@ -859,15 +859,28 @@
 	h = READ_LE_UINT32(wizh + 0x8);
 }
 
-uint8 *ScummEngine_v72he::drawWizImage(const WizImage *pwi) {
-	debug(1, "drawWizImage(%d, %d, %d, 0x%X)", pwi->resNum, pwi->x1, pwi->y1, pwi->flags);
+void ScummEngine_v72he::displayWizImage(WizImage *pwi) {
+	if (_fullRedraw) {
+		assert(_wiz._imagesNum < ARRAYSIZE(_wiz._images));
+		memcpy(&_wiz._images[_wiz._imagesNum], pwi, sizeof(WizImage));
+		++_wiz._imagesNum;
+	} else if (pwi->flags & kWIFIsPolygon) {
+		drawWizPolygon(pwi->resNum, pwi->state, pwi->x1, pwi->flags);
+	} else {
+		const Common::Rect *r = NULL;
+		drawWizImage(pwi->resNum, pwi->state, pwi->x1, pwi->y1, pwi->unk, r, pwi->flags, NULL, 0);
+	}
+}
+
+uint8 *ScummEngine_v72he::drawWizImage(int resNum, int state, int x1, int y1, int create, const Common::Rect *clipBox, int flags, uint8 *newResourcePtr, int paletteNum) {
+	debug(1, "drawWizImage(%d, %d, %d, 0x%X)", resNum, x1, y1, flags);
 	uint8 *dst = NULL;
-	uint8 *dataPtr = getResourceAddress(rtImage, pwi->resNum);
+	uint8 *dataPtr = getResourceAddress(rtImage, resNum);
 	if (dataPtr) {
 		uint8 *rmap = NULL;
-		uint8 *xmap = findWrappedBlock(MKID('XMAP'), dataPtr, pwi->state, 0);
+		uint8 *xmap = findWrappedBlock(MKID('XMAP'), dataPtr, state, 0);
 		
-		uint8 *wizh = findWrappedBlock(MKID('WIZH'), dataPtr, pwi->state, 0);
+		uint8 *wizh = findWrappedBlock(MKID('WIZH'), dataPtr, state, 0);
 		assert(wizh);
 		uint32 comp   = READ_LE_UINT32(wizh + 0x0);
 		uint32 width  = READ_LE_UINT32(wizh + 0x4);
@@ -875,80 +888,91 @@
 		debug(1, "wiz_header.comp = %d wiz_header.w = %d wiz_header.h = %d)", comp, width, height);
 		assert(comp == 0 || comp == 1 || comp == 2 || comp == 3 || comp == 10 || comp == 11);
 		
-		uint8 *wizd = findWrappedBlock(MKID('WIZD'), dataPtr, pwi->state, 0);
+		uint8 *wizd = findWrappedBlock(MKID('WIZD'), dataPtr, state, 0);
 		assert(wizd);
-		if (pwi->flags & kWIFHasPalette) {
-			uint8 *pal = findWrappedBlock(MKID('RGBS'), dataPtr, pwi->state, 0);
+		if (flags & kWIFHasPalette) {
+			uint8 *pal = findWrappedBlock(MKID('RGBS'), dataPtr, state, 0);
 			assert(pal);
 			setPaletteFromPtr(pal, 256);
 		}
-		if (pwi->flags & kWIFRemapPalette) {
-			rmap = findWrappedBlock(MKID('RMAP'), dataPtr, pwi->state, 0);
+		if (flags & kWIFRemapPalette) {
+			rmap = findWrappedBlock(MKID('RMAP'), dataPtr, state, 0);
 			assert(rmap);
-			uint8 *rgbs = findWrappedBlock(MKID('RGBS'), dataPtr, pwi->state, 0);
+			uint8 *rgbs = findWrappedBlock(MKID('RGBS'), dataPtr, state, 0);
 			assert(rgbs);
 			warning("drawWizImage() unhandled flag 0x2");
 			// XXX modify 'RMAP' buffer
 		}
-		if (pwi->flags & kWIFPrint) {
+		if (flags & kWIFPrint) {
 			warning("WizImage printing is unimplemented");
 			return NULL;
 		}
 
-		Common::Rect rImage(pwi->x1, pwi->y1, pwi->x1 + width, pwi->y1 + height);
-		if (_wiz._rectOverrideEnabled == true) {
-			if (rImage.intersects(_wiz._rectOverride)) {
-				rImage.clip(_wiz._rectOverride);
-			} else {
-				return 0;
-			}
-		}
-
 		uint32 cw, ch;
-		if (pwi->flags & kWIFBlitToMemBuffer) {
+		if (flags & kWIFBlitToMemBuffer) {
 			dst = (uint8 *)malloc(width * height);
 			int color = 255; // FIXME: should be (VAR_WIZ_TCOLOR != 0xFF) ? VAR(VAR_WIZ_TCOLOR) : 5;
 			memset(dst, color, width * height);
 			cw = width;
 			ch = height;
 		} else {
-			VirtScreen *pvs = &virtscr[kMainVirtScreen];
-			if (pwi->flags & kWIFMarkBufferDirty) {
-				dst = pvs->getPixels(0, pvs->topline);
+			if (newResourcePtr) {
+				cw  = READ_LE_UINT32(newResourcePtr + 0x4);
+				ch = READ_LE_UINT32(newResourcePtr + 0x8);
+				dst = newResourcePtr;
 			} else {
-				dst = pvs->getBackPixels(0, pvs->topline);
+				VirtScreen *pvs = &virtscr[kMainVirtScreen];
+				if (flags & kWIFMarkBufferDirty) {
+					dst = pvs->getPixels(0, pvs->topline);
+				} else {
+					dst = pvs->getBackPixels(0, pvs->topline);
+				}
+				cw = pvs->w;
+				ch = pvs->h;
 			}
-			cw = pvs->w;
-			ch = pvs->h;
 		}
 		Common::Rect rScreen(cw, ch);
-
+		if (clipBox) {
+			Common::Rect clip(clipBox->left, clipBox->top, clipBox->right, clipBox->bottom);
+			if (rScreen.intersects(clip)) {
+				rScreen.clip(clip);
+			} else {
+				return 0;
+			}
+		} else if (_wiz._rectOverrideEnabled == true) {
+			if (rScreen.intersects(_wiz._rectOverride)) {
+				rScreen.clip(_wiz._rectOverride);
+			} else {
+				return 0;
+			}
+		}
 
 		// XXX handle 'XMAP' / 'RMAP' data
 		if (comp == 1) {
-			if (pwi->flags & 0x80) {
+			if (flags & 0x80) {
 				warning("drawWizImage() unhandled flag 0x80");
-			} else if (pwi->flags & 0x100) {
+			} else if (flags & 0x100) {
 				warning("drawWizImage() unhandled flag 0x100");
 			} else {
-				_wiz.copyWizImage(dst, wizd, cw, ch, pwi->x1, pwi->y1, width, height, &rScreen);
+				_wiz.copyWizImage(dst, wizd, cw, ch, x1, y1, width, height, &rScreen);
 			}
 		} else if (comp == 0 || comp == 2 || comp == 3) {
-			uint8 *trns = findWrappedBlock(MKID('TRNS'), dataPtr, pwi->state, 0);
+			uint8 *trns = findWrappedBlock(MKID('TRNS'), dataPtr, state, 0);
 			int color = (trns == NULL) ? VAR(VAR_WIZ_TCOLOR) : -1;
 			const uint8 *pal = xmap;
-			if (pwi->flags & kWIFRemapPalette) {
+			if (flags & kWIFRemapPalette) {
 				pal = rmap + 4;
 			}
-			_wiz.copyRawWizImage(dst, wizd, cw, ch, pwi->x1, pwi->y1, width, height, &rScreen, pwi->flags, pal, color);
+			_wiz.copyRawWizImage(dst, wizd, cw, ch, x1, y1, width, height, &rScreen, flags, pal, color);
 		} else {
 			warning("unhandled wiz compression type %d", comp);
 		}
 
-		if (!(pwi->flags & kWIFBlitToMemBuffer)) {
+		if (!(flags & kWIFBlitToMemBuffer) && newResourcePtr == NULL) {
+			Common::Rect rImage(x1, y1, x1 + width, y1 + height);
 			if (rImage.intersects(rScreen)) {
 				rImage.clip(rScreen);
-				if (!(pwi->flags & kWIFBlitToFrontVideoBuffer) && (pwi->flags & (kWIFBlitToFrontVideoBuffer | kWIFMarkBufferDirty))) {
+				if (!(flags & kWIFBlitToFrontVideoBuffer) && (flags & (kWIFBlitToFrontVideoBuffer | kWIFMarkBufferDirty))) {
 					++rImage.bottom;
 					markRectAsDirty(kMainVirtScreen, rImage);
 				} else {
@@ -1041,12 +1065,8 @@
 	if (wp->numVerts != 5) {
 		error("Invalid point count %d for Polygon %d", wp->numVerts, id);
 	}
-	WizImage wi;
-	wi.resNum = resnum;
-	wi.state = state;
-	wi.x1 = wi.y1 = 0;
-	wi.flags = kWIFBlitToMemBuffer;
-	uint8 *srcWizBuf = drawWizImage(&wi);
+	const Common::Rect *r = NULL;
+	uint8 *srcWizBuf = drawWizImage(resnum, state, 0, 0, 0, r, kWIFBlitToMemBuffer, 0, 0);
 	if (srcWizBuf) {
 		uint8 *dst;
 		VirtScreen *pvs = &virtscr[kMainVirtScreen];
@@ -1131,7 +1151,8 @@
 		if (pwi->flags & kWIFIsPolygon) {
 			drawWizPolygon(pwi->resNum, pwi->state, pwi->x1, pwi->flags);
 		} else {
-			drawWizImage(pwi);
+			const Common::Rect *r = NULL;
+			drawWizImage(pwi->resNum, pwi->state, pwi->x1, pwi->y1, pwi->unk, r, pwi->flags, NULL, 0);
 		}
 	}
 	_wiz._imagesNum = 0;
@@ -1164,12 +1185,8 @@
 		y = 32;
 	}
 
-	WizImage wi;
-	wi.resNum = resId;
-	wi.x1 = wi.y1 = 0;
-	wi.state = 0;
-	wi.flags = kWIFBlitToMemBuffer;	
-	uint8 *cursor = drawWizImage(&wi);
+	const Common::Rect *r = NULL;
+	uint8 *cursor = drawWizImage(resId, 0, 0, 0, 0, r, kWIFBlitToMemBuffer, 0, 0);
 	int32 cw, ch;	
 	getWizImageDim(resId, 0, cw, ch);
 	setCursorFromBuffer(cursor, cw, ch, cw);
@@ -1206,6 +1223,11 @@
 }
 
 void ScummEngine_v72he::displayWizComplexImage(const WizParameters *params) {
+	int unk_178 = 0;
+	if (params->processFlags & 0x80000) {
+		unk_178  = params->unk_178;
+		warning("displayWizComplexImage() unhandled flag 0x80000");
+	}
 	int paletteNum = 0;
 	if (params->processFlags & kWPFPaletteNum) {
 		paletteNum = params->img.paletteNum;
@@ -1240,11 +1262,14 @@
 	if (params->processFlags & kWPFClipBox) {
 		r = &params->box;
 	}
-
-	if (params->processFlags & 0x10000) {
-		warning("displayWizComplexImage() unhandled flags = 0x10000");
+	uint8 *wizd = NULL;
+	if (params->processFlags & kWPFDstResNum) {
+		uint8 *dataPtr = getResourceAddress(rtImage, params->dstResNum);
+		assert(dataPtr);
+		wizd = findWrappedBlock(MKID('WIZD'), dataPtr, 0, 0);
+		assert(wizd);
+		warning("displayWizComplexImage() flag 0x10000");
 	}
-
 	if (params->processFlags & kWPFRemapPalette) {
 		int st = (params->processFlags & kWPFNewState) ? params->img.state : 0;
 		int num = params->remapNum;
@@ -1260,7 +1285,10 @@
 		}
 	}
 
-	if (_fullRedraw) {
+	if (_fullRedraw && wizd == NULL) {
+		if (unk_178 != 0 || (params->processFlags & (kWPFZoom | kWPFRotate)))
+			error("Can't do this command in the enter script.");
+
 		assert(_wiz._imagesNum < ARRAYSIZE(_wiz._images));
 		WizImage *pwi = &_wiz._images[_wiz._imagesNum];
 		pwi->resNum = params->img.resNum;
@@ -1271,24 +1299,18 @@
 		pwi->unk = unk;
 		pwi->paletteNum = paletteNum;
 		++_wiz._imagesNum;
-	} else if (params->processFlags & (kWPFRotate | kWPFZoom)) {
-		drawWizComplexPolygon(params->img.resNum, state, po_x, po_y, unk, rotationAngle, zoom, r);
-	} else if (flags & kWIFIsPolygon) {
-		drawWizPolygon(params->img.resNum, state, po_x, flags); // XXX , VAR(VAR_WIZ_TCOLOR));
 	} else {
-		if ((flags & 0x200) || (flags & 0x24)) {
-			warning("displayWizComplexImage() unhandled flags = 0x%X", flags);
+		if (unk_178 != 0) {
+			// TODO
+		} else if (params->processFlags & (kWPFZoom | kWPFRotate)) {
+			drawWizComplexPolygon(params->img.resNum, state, po_x, po_y, unk, rotationAngle, zoom, r);
+		} else {
+			if (flags & kWIFIsPolygon) {
+				drawWizPolygon(params->img.resNum, state, po_x, flags); // XXX , VAR(VAR_WIZ_TCOLOR));
+			} else {
+				drawWizImage(params->img.resNum, state, po_x, po_y, unk, r, flags, wizd, paletteNum);
+			}
 		}
-		// XXX flags 0x200, 0x24
-		WizImage wi;
-		wi.resNum = params->img.resNum;
-		wi.x1 = po_x;
-		wi.y1 = po_y;
-		wi.state = state;
-		wi.flags = flags;
-		wi.unk = unk;
-		wi.paletteNum = paletteNum;
-		drawWizImage(&wi);
 	}
 }
 

Index: wiz_he.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/wiz_he.h,v
retrieving revision 2.13
retrieving revision 2.14
diff -u -d -r2.13 -r2.14
--- wiz_he.h	31 Mar 2005 22:51:54 -0000	2.13
+++ wiz_he.h	1 Apr 2005 08:51:13 -0000	2.14
@@ -71,7 +71,7 @@
 	uint8 remapColor[256];
 	uint8 remapIndex[256];
 	int remapNum;
-	int unk_380;
+	int dstResNum;
 	byte fillColor;
 	Common::Rect box2;
 	WizImage img;
@@ -101,6 +101,7 @@
 	kWPFUseDefImgWidth = 0x2000,
 	kWPFUseDefImgHeight = 0x4000,
 	kWPFPaletteNum = 0x8000,
+	kWPFDstResNum = 0x10000,
 	kWPFFillColor = 0x20000,
 	kWPFClipBox2 = 0x40000
 };





More information about the Scummvm-git-logs mailing list