[Scummvm-cvs-logs] CVS: scummvm/scumm gfx.cpp,2.38,2.39 gfx.h,1.22,1.23

Pawel Kolodziejski aquadran at users.sourceforge.net
Wed Apr 9 12:15:05 CEST 2003


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv24761

Modified Files:
	gfx.cpp gfx.h 
Log Message:
a little improved ega support

Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.cpp,v
retrieving revision 2.38
retrieving revision 2.39
diff -u -d -r2.38 -r2.39
--- gfx.cpp	8 Apr 2003 19:05:39 -0000	2.38
+++ gfx.cpp	9 Apr 2003 19:14:01 -0000	2.39
@@ -529,12 +529,22 @@
 	} else if (_features & GF_SMALL_HEADER) {
 		int off;
 		ptr = findResourceData(MKID('SMAP'), room);
-		off = READ_LE_UINT32(ptr);
 		gdi._numZBuffer = 0;
-		for (i = 0; off && (i < 4); i++) {
-			gdi._numZBuffer++;
-			ptr += off;
-			off = READ_LE_UINT16(ptr);
+		if (_gameId == GID_MONKEY_EGA) {
+			for (i = 0; i < 4; i++) {
+				off = READ_LE_UINT16(ptr);
+				if (off) {
+					gdi._numZBuffer++;
+					ptr += off;
+				}
+			}
+		} else {
+			off = READ_LE_UINT32(ptr);
+			for (i = 0; off && (i < 4); i++) {
+				gdi._numZBuffer++;
+				ptr += off;
+				off = READ_LE_UINT16(ptr);
+			}
 		}
 	} else if (_features & GF_AFTER_V8) {
 		// in V8 there is no RMIH and num z buffers is in RMHD
@@ -927,10 +937,15 @@
 
 		_mask_ptr = _vm->getResourceAddress(rtBuffer, 9) + (y * _numStrips + x);
 
-		if (_vm->_features & GF_SMALL_HEADER)
-			useOrDecompress = decompressBitmap(bgbak_ptr, smap_ptr + READ_LE_UINT32(smap_ptr + stripnr * 4 + 4), h);
-		else
+		if (_vm->_features & GF_SMALL_HEADER) {
+			if (_vm->_gameId == GID_MONKEY_EGA) {
+				useOrDecompress = decompressBitmap(bgbak_ptr, smap_ptr + READ_LE_UINT16(smap_ptr + stripnr * 2 + 2), h);
+			} else {
+				useOrDecompress = decompressBitmap(bgbak_ptr, smap_ptr + READ_LE_UINT32(smap_ptr + stripnr * 4 + 4), h);
+			}
+		}	else {
 			useOrDecompress = decompressBitmap(bgbak_ptr, smap_ptr + READ_LE_UINT32(smap_ptr + stripnr * 4 + 8), h);
+		}
 
 		CHECK_HEAP;
 		if (vs->alloctwobuffers) {
@@ -1021,11 +1036,56 @@
 }
 
 
+void Gdi::decodeStripEGA(byte *dst, byte *src, int height) {
+	byte data, color, color2;
+	int run = 1;
+	byte *t_dst = dst;
+	int t_height = height;
+
+	for (int x = 0; x < 4; x++) {
+		height = t_height;
+		dst = t_dst + x * 2;
+		do {
+			if (run == 0) {
+				data = *src++;
+				if (data & 0x80) {
+					run = data & 0x3f;
+					if (data & 0x40) {
+						data = *src++;
+						color = _vm->_shadowPalette[data >> 4];
+						color2 = _vm->_shadowPalette[data & 0x0f];
+					} else {
+						color = 0xff;
+					}
+				} else {
+					run = data >> 4;
+					color = _vm->_shadowPalette[data & 0x0f];
+					color2 = color;
+				}
+				if (run == 0) {
+					run = *src++;
+				}
+			}
+			if (color != 0xff) {
+				*dst++ = color;
+				*(dst + 1) = color2;
+				dst += _vm->_realWidth;
+			}
+		} while (--height);
+		dst = t_dst;
+	}
+}
+
 bool Gdi::decompressBitmap(byte *bgbak_ptr, byte *smap_ptr, int numLinesToProcess) {
 	byte code = *smap_ptr++;
 	assert(numLinesToProcess);
 
-	if ((_vm->_features & GF_AMIGA) || (_vm->_features & GF_16COLOR))
+	if ((_vm->_gameId == GID_MONKEY_EGA) || (_vm->_gameId == GID_LOOM)) {
+		decodeStripEGA(bgbak_ptr, smap_ptr, numLinesToProcess);
+		return false;
+	}
+
+	if (_vm->_features & GF_AMIGA)
 		_palette_mod = 16;
 	else
 		_palette_mod = 0;

Index: gfx.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- gfx.h	6 Mar 2003 21:45:59 -0000	1.22
+++ gfx.h	9 Apr 2003 19:14:05 -0000	1.23
@@ -134,6 +134,7 @@
 
 	/* Bitmap decompressors */
 	bool decompressBitmap(byte *bgbak_ptr, byte *smap_ptr, int numLinesToProcess);
+	void decodeStripEGA(byte *dst, byte *src, int height);
 	void unkDecodeA(byte *dst, byte *src, int height);
 	void unkDecodeA_trans(byte *dst, byte *src, int height);
 	void unkDecodeB(byte *dst, byte *src, int height);





More information about the Scummvm-git-logs mailing list