[Scummvm-cvs-logs] CVS: scummvm/scumm gfx.cpp,2.266,2.267 gfx.h,1.59,1.60

Eugene Sandulenko sev at users.sourceforge.net
Mon Feb 23 21:00:03 CET 2004


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

Modified Files:
	gfx.cpp gfx.h 
Log Message:
Graphics decoders for 3DO HE titles. Preliminary implementation, don't
blame me :) After testing I'll convert it to C.


Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.cpp,v
retrieving revision 2.266
retrieving revision 2.267
diff -u -d -r2.266 -r2.267
--- gfx.cpp	14 Feb 2004 10:43:55 -0000	2.266
+++ gfx.cpp	24 Feb 2004 04:45:49 -0000	2.267
@@ -1485,11 +1485,16 @@
 	case 7:
 		unkDecode11(bgbak_ptr, src, numLinesToProcess);      /* Ender - Zak256/Indy256 */
 		break;
-	// FIXME implement these codecs...
+
 	// 8/9 used in 3do version of puttputt joins the parade maybe others
 	case 8:
+		unkDecode12(bgbak_ptr, src, numLinesToProcess);
+		break;
+
 	case 9:
-		error("decompressBitmap: Graphics codec %d not yet supported\n", code);
+		unkDecode13(bgbak_ptr, src, numLinesToProcess);
+		break;
+
 	// used in amiga version of Monkey Island
 	case 10:
 		decodeStripEGA(bgbak_ptr, src, numLinesToProcess);
@@ -2125,6 +2130,163 @@
 	} while (--x);
 }
 
+
+// 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;
+
+	var_8 = 0;
+
+	di = 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;
+		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 (!(si & 1)) {
+		si >>= 1;
+		si++;
+		di -= si;
+		if (di < 0)
+			si += di;
+
+		var_6 = di;
+		di = var_8;
+
+		do {
+			bx = src;
+			src++;
+
+			*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;
+		src++;
+		var_4 = *bx;
+		si++;
+		di -= si;
+		if (di < 0)
+			si += di;
+		var_6 = di;
+		di = var_8;
+
+		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;
+		}
+		return;
+	}
+}
+
+
 #undef NEXT_ROW
 #undef READ_256BIT
 

Index: gfx.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.h,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -d -r1.59 -r1.60
--- gfx.h	8 Jan 2004 21:21:40 -0000	1.59
+++ gfx.h	24 Feb 2004 04:45:50 -0000	1.60
@@ -248,6 +248,8 @@
 	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 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