[Scummvm-cvs-logs] CVS: scummvm/scumm script_v80he.cpp,2.109,2.110

kirben kirben at users.sourceforge.net
Tue May 10 04:56:34 CEST 2005


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

Modified Files:
	script_v80he.cpp 
Log Message:

drawLine() fixes from Fingolfin.


Index: script_v80he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v80he.cpp,v
retrieving revision 2.109
retrieving revision 2.110
diff -u -d -r2.109 -r2.110
--- script_v80he.cpp	10 May 2005 06:42:31 -0000	2.109
+++ script_v80he.cpp	10 May 2005 11:50:01 -0000	2.110
@@ -613,11 +613,14 @@
 	displayWizImage(&wi);	
 }
 
-void ScummEngine_v80he::drawLine(int x1, int y1, int x, int unk1, int unk2, int type, int id) {
-	debug(0,"drawLine: x1 %d y1 %d x %d unk1 %d, unk2 %d type %d id %d", x1, y1, x, unk1, unk2, type, id);	
+void ScummEngine_v80he::drawLine(int x1, int y1, int x, int y, int unk2, int type, int id) {
+	debug(0,"drawLine: x1 %d y1 %d x %d y %d, unk2 %d type %d id %d", x1, y1, x, y, unk2, type, id);	
 
-	int eax, ebx, ecx, edx, esi;
-	int var_4, var_8, var_C, y;
+	int eax, ebx, ecx, edp, esi, edx;
+	int var_C;
+
+	ebx = 0;
+	var_C = 0;
 
 	if (unk2 < 0) {
 		unk2 = -unk2;
@@ -626,74 +629,83 @@
 		unk2 = 1;
 	}
 
-	var_4 = unk1 - y1;
-	var_8 = x - x1;
+	eax = x;
+	ecx = x1;
+	int edi = y1;
 
-	x = x1;
-	y = var_4;
+	const int dx = x - x1;
+	const int dy = y - y1;
 
-	esi = var_8;
-	if (var_4 > var_8) {
-		esi = var_4;
+	edp = ABS(dx);
+	eax = ABS(dy);
+
+	if (eax > edp) {
+		esi = eax;
+	} else {
+		esi = edp;
 	}
 
+	y1 = eax;
+	x = x1;
+	x1 = 0;
+
 	if (type == 2) {
 		Actor *a = derefActor(id, "drawLine");
-		a->drawActorToBackBuf(x1, y1);
+		a->drawActorToBackBuf(ecx, edi);
 	} else if (type == 3) {
 		WizImage wi;
 		wi.flags = 0;
-		wi.y1 = y1;
-		wi.x1 = x1;
+		wi.y1 = edi;
+		wi.x1 = ecx;
 		wi.resNum = id;
 		wi.state = 0;
 		displayWizImage(&wi);
 	} else {
-		drawPixel(x1, y1, id);
+		drawPixel(ecx, edi, id);
 	}
 
-	x1 = 0;
-	ebx = 0;
-	edx = 0;
-	var_C = 0;
 	for (int i = 0; i <= esi; i++) {
 		ecx = x1;
-		eax = y;	
-		ebx += var_8;
+		eax = y1;	
+		ebx += edp;
 		ecx += eax;
 
 		eax ^= eax;
 		x1 = ecx;
 
 		if (ebx > esi) {
-			edx = var_8;
+			edx = dx;
 			edx -= esi;
 
 			eax = 1;
-			if (edx >= 0) {
-				x++;
+			int tmp = edx;
+			edx = x;
+			if (tmp >= 0) {
+				edx++;
 			} else {
-				x--;
+				edx--;
 			}
-		}
 
+			x = edx;
+		}
 		if (ecx > esi) {
-			eax = var_4;
-			x1 -= esi;
+			eax = dy;
+			ecx -= esi;
 
+			x1 = ecx;
 			if (eax >= 0) {
-				y++;
+				edi++;
 			} else {
-				y--;
+				edi--;
 			}
-		} else {
-			if (eax == 0)
-				continue;
 		}
 
+		if (eax == 0)
+			continue;
+
 		ecx = var_C;
 		eax = ecx;
-		eax /= unk2;
+		edx = eax % unk2;
 		ecx++;
 		var_C = ecx;
 
@@ -702,17 +714,17 @@
 
 		if (type == 2) {
 			Actor *a = derefActor(id, "drawLine");
-			a->drawActorToBackBuf(x, y);
+			a->drawActorToBackBuf(x, edi);
 		} else if (type == 3) {
 			WizImage wi;
 			wi.flags = 0;
-			wi.y1 = y;
+			wi.y1 = edi;
 			wi.x1 = x;
 			wi.resNum = id;
 			wi.state = 0;
 			displayWizImage(&wi);
 		} else {
-			drawPixel(x, y, id);
+			drawPixel(x, edi, id);
 		}
 	}		
 }
@@ -751,11 +763,11 @@
 }
 
 void ScummEngine_v80he::o80_drawLine() {
-	int id, unk1, unk2, x, x1, y1;
+	int id, unk2, x, y, x1, y1;
 
 	unk2 = pop();
 	id = pop();
-	unk1 = pop();
+	y = pop();
 	x = pop();
 	y1 = pop();
 	x1 = pop();
@@ -764,13 +776,13 @@
 
 	switch (subOp) {
 	case 55:
-		drawLine(x1, y1, x, unk1, unk2, 2, id);
+		drawLine(x1, y1, x, y, unk2, 2, id);
 		break;
 	case 63:
-		drawLine(x1, y1, x, unk1, unk2, 3, id);
+		drawLine(x1, y1, x, y, unk2, 3, id);
 		break;
 	case 66:
-		drawLine(x1, y1, x, unk1, unk2, 1, id);
+		drawLine(x1, y1, x, y, unk2, 1, id);
 		break;
 	default:
 		error("o80_drawLine: default case %d", subOp);





More information about the Scummvm-git-logs mailing list