[Scummvm-cvs-logs] CVS: scummvm/scumm script_v72he.cpp,2.154,2.155 script_v7he.cpp,2.100,2.101

Gregory Montoir cyx at users.sourceforge.net
Tue Oct 5 15:29:12 CEST 2004


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

Modified Files:
	script_v72he.cpp script_v7he.cpp 
Log Message:
fix drawWizPolygon glitch

Index: script_v72he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v72he.cpp,v
retrieving revision 2.154
retrieving revision 2.155
diff -u -d -r2.154 -r2.155
--- script_v72he.cpp	5 Oct 2004 06:14:40 -0000	2.154
+++ script_v72he.cpp	5 Oct 2004 22:28:13 -0000	2.155
@@ -1680,12 +1680,11 @@
 		int32 x2;
 		int32 y2;
 	};
-	Common::Point pts[4];
+	Common::Point pto;
 	InterArea *ia;
 	int areasNum;
 	
 	PolygonDrawData(int n) {
-		memset(pts, 0, sizeof(pts));
 		areasNum = n;
 		ia = new InterArea[areasNum];
 		memset(ia, 0, sizeof(InterArea) * areasNum);
@@ -1704,7 +1703,7 @@
   		int32 x3_step = ((p4->x - p3->x) << 0x10) / dy;
   		int32 y3_step = ((p4->y - p3->y) << 0x10) / dy;
 
-  		int iaidx = p1->y - pts[0].y;
+  		int iaidx = p1->y - pto.y;
   		while (dy--) {
   			assert(iaidx >= 0 && iaidx < areasNum);
   			InterArea *pia = &ia[iaidx];
@@ -1799,21 +1798,15 @@
   		ymax_b = wizH - 1;
 
 		PolygonDrawData pdd(ymax_p - ymin_p + 1);
-		pdd.pts[0].x = xmin_p;
-		pdd.pts[0].y = ymin_p;
-		pdd.pts[1].x = xmax_p;
-		pdd.pts[1].y = ymax_p;
-		pdd.pts[2].x = xmin_b;
-		pdd.pts[2].y = ymin_b;
-		pdd.pts[3].x = xmax_b;
-		pdd.pts[3].y = ymax_b;
+		pdd.pto.x = xmin_p;
+		pdd.pto.y = ymin_p;
 		
 		for (i = 0; i < 3; ++i) {
 			pdd.calcIntersection(&wp->vert[i], &wp->vert[i + 1], &bbox[i], &bbox[i + 1]);
 		}
 		pdd.calcIntersection(&wp->vert[3], &wp->vert[0], &bbox[3], &bbox[0]);
-		
-		uint yoff = pdd.pts[0].y * pvs->w;
+				
+		uint yoff = pdd.pto.y * pvs->w;
 		for (i = 0; i < pdd.areasNum; ++i) {
 			PolygonDrawData::InterArea *pia = &pdd.ia[i];
 			uint16 dx = pia->xmax - pia->xmin + 1;
@@ -1829,7 +1822,7 @@
 				y_acc += y_step;
 				*dstPtr++ = srcWizBuf[srcWizOff];
 			}
-			yoff += pvs->w;
+			yoff += pvs->pitch;
 		}
 
 		if (flags & 0x10) {

Index: script_v7he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v7he.cpp,v
retrieving revision 2.100
retrieving revision 2.101
diff -u -d -r2.100 -r2.101
--- script_v7he.cpp	28 Sep 2004 19:28:58 -0000	2.100
+++ script_v7he.cpp	5 Oct 2004 22:28:13 -0000	2.101
@@ -942,41 +942,41 @@
 
 void ScummEngine::polygonStore(int id, bool flag, int vert1x, int vert1y, int vert2x, 
 							int vert2y, int vert3x, int vert3y, int vert4x, int vert4y) {
-	int i;
-
-	for (i = 0; i < _wizNumPolygons; i++)
-		if (_wizPolygons[i].id == 0)
+	WizPolygon *wp = NULL;
+	for (int i = 0; i < _wizNumPolygons; ++i) {
+		if (_wizPolygons[i].id == 0) {
+			wp = &_wizPolygons[i];
 			break;
-	
-	if (i == _wizNumPolygons) {
+		}
+	}
+	if (!wp) {
 		error("ScummEngine::polygonStore: out of polygon slot, max = %d", 
 			  _wizNumPolygons);
 	}
 
-	_wizPolygons[i].vert[0].x = vert1x;
-	_wizPolygons[i].vert[0].y = vert1y;
-	_wizPolygons[i].vert[1].x = vert2x;
-	_wizPolygons[i].vert[1].y = vert2y;
-	_wizPolygons[i].vert[2].x = vert3x;
-	_wizPolygons[i].vert[2].y = vert3y;
-	_wizPolygons[i].vert[3].x = vert4x;
-	_wizPolygons[i].vert[3].y = vert4y;
-	_wizPolygons[i].vert[4].x = vert1x;
-	_wizPolygons[i].vert[4].y = vert1y;
-	_wizPolygons[i].id = id;
-	_wizPolygons[i].numVerts = 5;
-	_wizPolygons[i].flag = flag;
+	wp->vert[0].x = vert1x;
+	wp->vert[0].y = vert1y;
+	wp->vert[1].x = vert2x;
+	wp->vert[1].y = vert2y;
+	wp->vert[2].x = vert3x;
+	wp->vert[2].y = vert3y;
+	wp->vert[3].x = vert4x;
+	wp->vert[3].y = vert4y;
+	wp->vert[4].x = vert1x;
+	wp->vert[4].y = vert1y;
+	wp->id = id;
+	wp->numVerts = 5;
+	wp->flag = flag;	
 
-	_wizPolygons[i].bound.left = 10000;
-	_wizPolygons[i].bound.top = 10000;
-	_wizPolygons[i].bound.right = -10000;
-	_wizPolygons[i].bound.bottom = -10000;
+	wp->bound.left = 10000;
+	wp->bound.top = 10000;
+	wp->bound.right = -10000;
+	wp->bound.bottom = -10000;
 
+	// compute bounding box
 	for (int j = 0; j < 5; j++) {
-		_wizPolygons[i].bound.left = MIN(_wizPolygons[i].bound.left, _wizPolygons[i].vert[j].x);
-		_wizPolygons[i].bound.top = MIN(_wizPolygons[i].bound.top, _wizPolygons[i].vert[j].y);
-		_wizPolygons[i].bound.right = MAX(_wizPolygons[i].bound.right, _wizPolygons[i].vert[j].x);
-		_wizPolygons[i].bound.bottom = MAX(_wizPolygons[i].bound.bottom, _wizPolygons[i].vert[j].y);
+		Common::Rect r(wp->vert[j].x, wp->vert[j].y, wp->vert[j].x + 1, wp->vert[j].y + 1);
+		wp->bound.extend(r);
 	}
 }
 





More information about the Scummvm-git-logs mailing list