[Scummvm-cvs-logs] CVS: scummvm/scumm gfx.cpp,2.273,2.274 gfx.h,1.60,1.61

Eugene Sandulenko sev at users.sourceforge.net
Sun Jun 20 13:55:04 CEST 2004


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

Modified Files:
	gfx.cpp gfx.h 
Log Message:
Rewrote 3DO graphics decoders to more C-like syntax.


Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.cpp,v
retrieving revision 2.273
retrieving revision 2.274
diff -u -d -r2.273 -r2.274
--- gfx.cpp	14 Jun 2004 07:23:59 -0000	2.273
+++ gfx.cpp	20 Jun 2004 20:54:18 -0000	2.274
@@ -1559,11 +1559,11 @@
 	// 8/9 used in 3do version of puttputt joins the parade maybe others
 	case 8:
 		useOrDecompress = true;
-		unkDecode12(bgbak_ptr, src, numLinesToProcess);
+		decodeStrip3DO(bgbak_ptr, src, numLinesToProcess, true);
 		break;
 
 	case 9:
-		unkDecode13(bgbak_ptr, src, numLinesToProcess);
+		decodeStrip3DO(bgbak_ptr, src, numLinesToProcess, false);
 		break;
 
 	// used in amiga version of Monkey Island
@@ -2173,159 +2173,71 @@
 }
 
 
-// TODO: C'ify it
-void Gdi::unkDecode12(byte *dst, const byte *src, int height) {
-	int var_8, di, var_6;
-	const byte *bx;
-	byte si, var_4;
+void Gdi::decodeStrip3DO(byte *dst, const byte *src, int height, byte transpCheck) {
+	int destbytes, olddestbytes2, olddestbytes1;
+	byte color;
+	int data;
 
-	var_8 = 0;
+	olddestbytes1 = 0;
 
-	di = height << 3;
+	destbytes = height << 3;
 
 	if (!height)
 		return;
 
-	_cont1:
-	bx = src;
-	src++;
-	si = *bx;
-
-	if (!(si & 1)) {
-		si >>= 1;
-		si++;
-		di -= si;
-		if (di < 0)
-			si += di;
-
-		var_6 = di;
-		di = var_8;
-
-		do {
-			bx = src;
-			src++;
-
-			if (*bx != _transparentColor)
-				*dst = *bx;
-			
-			dst++;
-			di++;
-			if (!(di & 7))
-				dst += 312;
-
-			si--;
-		} while (si);
-		var_8 = di;
-		if (var_6 > 0) {
-			di = var_6;
-			goto _cont1;
-		}
-		return;
-	} else {
-		si >>= 1;
-		bx = src;
+	do {
+		data = *src;
 		src++;
-		var_4 = *bx;
-		si++;
-		di -= si;
-		if (di < 0)
-			si += di;
-		var_6 = di;
-		di = var_8;
-
-		do {
-			if (var_4 != _transparentColor)
-				*dst = var_4;
-			dst++;
-			di++;
-			if (!(di & 7))
-				dst += 312;
-			si--;
-		} while (si);
-		var_8 = di;
-		if (var_6 > 0) {
-			di = var_6;
-			goto _cont1;
-		}
-		return;
-	}
-}
-
-
-// TODO: C'ify it
-void Gdi::unkDecode13(byte *dst, const byte *src, int height) {
-	int var_8, di, var_6;
-	const byte *bx;
-	byte si, var_4;
-
-	var_8 = 0;
-
-	di = height << 3;
-
-	if (!height)
-		return;
 
-	_cont1:
-	bx = src;
-	src++;
-	si = *bx;
+		if (!(data & 1)) {
+			data >>= 1;
+			data++;
+			destbytes -= data;
+			if (destbytes < 0)
+				data += destbytes;
 
-	if (!(si & 1)) {
-		si >>= 1;
-		si++;
-		di -= si;
-		if (di < 0)
-			si += di;
+			olddestbytes2 = destbytes;
+			destbytes = olddestbytes1;
 
-		var_6 = di;
-		di = var_8;
+			for (; data > 0; data--, src++, dst++) {
+				if (*src != _transparentColor || !transpCheck)
+					*dst = *src;
+			
+				destbytes++;
+				if (!(destbytes & 7))
+					dst += 312;
+			}
 
-		do {
-			bx = src;
+			olddestbytes1 = destbytes;
+			if (olddestbytes2 > 0) {
+				destbytes = olddestbytes2;
+			}
+		} else {
+			data >>= 1;
+			color = *src;
 			src++;
 
-			*dst = *bx;
-			
-			dst++;
-			di++;
-			if (!(di & 7))
-				dst += 312;
+			data++;
+			destbytes -= data;
+			if (destbytes < 0)
+				data += destbytes;
 
-			si--;
-		} while (si);
-		var_8 = di;
-		if (var_6 > 0) {
-			di = var_6;
-			goto _cont1;
-		}
-		return;
-	} else {
-		si >>= 1;
-		bx = src;
-		src++;
-		var_4 = *bx;
-		si++;
-		di -= si;
-		if (di < 0)
-			si += di;
-		var_6 = di;
-		di = var_8;
+			olddestbytes2 = destbytes;
+			destbytes = olddestbytes1;
 
-		do {
-			*dst = var_4;
-			dst++;
-			di++;
-			if (!(di & 7))
-				dst += 312;
-			si--;
-		} while (si);
-		var_8 = di;
-		if (var_6 > 0) {
-			di = var_6;
-			goto _cont1;
+			for (; data > 0; data--, dst++) {
+				if (color != _transparentColor || !transpCheck)
+					*dst = color;
+				destbytes++;
+				if (!(destbytes & 7))
+					dst += 312;
+			}
+			olddestbytes1 = destbytes;
+			if (olddestbytes2 > 0) {
+				destbytes = olddestbytes2;
+			}
 		}
-		return;
-	}
+	} while (olddestbytes2 > 0);
 }
 
 

Index: gfx.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.h,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -d -r1.60 -r1.61
--- gfx.h	24 Feb 2004 04:45:50 -0000	1.60
+++ gfx.h	20 Jun 2004 20:54:18 -0000	1.61
@@ -248,8 +248,7 @@
 	void unkDecode9(byte *dst, const byte *src, int height);
 	void unkDecode10(byte *dst, const byte *src, int height);
 	void unkDecode11(byte *dst, const byte *src, int height);
-	void unkDecode12(byte *dst, const byte *src, int height);
-	void unkDecode13(byte *dst, const byte *src, int height);
+	void decodeStrip3DO(byte *dst, const byte *src, int height, byte transpCheck);
 
 	void draw8ColWithMasking(byte *dst, const byte *src, int height, byte *mask);
 	void draw8Col(byte *dst, const byte *src, int height);





More information about the Scummvm-git-logs mailing list