[Scummvm-cvs-logs] CVS: scummvm/scumm costume.cpp,1.110,1.111

Max Horn fingolfin at users.sourceforge.net
Tue Aug 26 07:49:28 CEST 2003


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

Modified Files:
	costume.cpp 
Log Message:
fixed and cleaned up V1 actor masking

Index: costume.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/costume.cpp,v
retrieving revision 1.110
retrieving revision 1.111
diff -u -d -r1.110 -r1.111
--- costume.cpp	24 Aug 2003 02:15:12 -0000	1.110
+++ costume.cpp	25 Aug 2003 13:13:43 -0000	1.111
@@ -273,7 +273,6 @@
 	CHECK_HEAP
 
 	if (_loaded._format == 0x57) {
-		v1.mask_ptr = _vm->getResourceAddress(rtBuffer, 9) + v1.y * _numStrips;
 		// The v1 costume renderer needs the actor number, which is
 		// the same thing as the costume renderer's _dirty_id.
 		procC64(_dirty_id);
@@ -326,11 +325,22 @@
 	}
 }
 
-int v1_mm_actor_palatte_1 [] = { 8, 8, 8, 8, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0 };
-int v1_mm_actor_palatte_2 [] = { 0, 7, 2, 6, 9, 1, 3, 7, 7, 1, 1, 9, 1, 4, 5, 5, 4, 1, 0, 5, 4, 2, 2, 7, 7, 0 };
+static const int v1_mm_actor_palatte_1[] = { 8, 8, 8, 8, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0 };
+static const int v1_mm_actor_palatte_2[] = { 0, 7, 2, 6, 9, 1, 3, 7, 7, 1, 1, 9, 1, 4, 5, 5, 4, 1, 0, 5, 4, 2, 2, 7, 7, 0 };
+
+#define MASK_AT(xoff) \
+	(mask && ((mask[(v1.x+xoff) >> 3] | mask[((v1.x+xoff) >> 3) + v1.imgbufoffs]) & revBitMask[(v1.x+xoff) & 7]))
+#define LINE(c,p) \
+	pcolor = (color >> c) & 3; \
+	if (pcolor) { \
+		if (!MASK_AT(p)) \
+			dst[p] = palette[pcolor]; \
+		if (!MASK_AT(p+1)) \
+			dst[p+1] = palette[pcolor]; \
+	}
 
 void CostumeRenderer::procC64(int actor) {
-	const byte *src;
+	const byte *mask, *src;
 	byte *dst;
 	byte len;
 	uint y, height;
@@ -361,7 +371,7 @@
 	}
 
 	v1.skip_width >>= 3;
-	const byte *mask_ptr = v1.mask_ptr;
+	mask = v1.mask_ptr;
 
 	if (len)
 		goto StartPos;
@@ -378,23 +388,15 @@
 				color = *src++;
 			
 			if (y < _outheight) {
-#define MASK_AT(xoff)	(mask_ptr && ((mask_ptr[(v1.x+xoff) >> 3] | mask_ptr[((v1.x+xoff) >> 3) + v1.imgbufoffs]) & revBitMask[(v1.x+xoff) & 7]))
 				if (!_mirror) {
-					pcolor = (color >> 0) & 3; if (pcolor) { if (!MASK_AT(0)) dst[0] = palette[pcolor]; if (!MASK_AT(1)) dst[1] = palette[pcolor]; }
-					pcolor = (color >> 2) & 3; if (pcolor) { if (!MASK_AT(2)) dst[2] = palette[pcolor]; if (!MASK_AT(3)) dst[3] = palette[pcolor]; }
-					pcolor = (color >> 4) & 3; if (pcolor) { if (!MASK_AT(4)) dst[4] = palette[pcolor]; if (!MASK_AT(5)) dst[5] = palette[pcolor]; }
-					pcolor = (color >> 6) & 3; if (pcolor) { if (!MASK_AT(6)) dst[6] = palette[pcolor]; if (!MASK_AT(7)) dst[7] = palette[pcolor]; }
+					LINE(0, 0); LINE(2, 2); LINE(4, 4); LINE(6, 6);
 				} else {
-					pcolor = (color >> 6) & 3; if (pcolor) { if (!MASK_AT(0)) dst[0] = palette[pcolor]; if (!MASK_AT(1)) dst[1] = palette[pcolor]; }
-					pcolor = (color >> 4) & 3; if (pcolor) { if (!MASK_AT(2)) dst[2] = palette[pcolor]; if (!MASK_AT(3)) dst[3] = palette[pcolor]; }
-					pcolor = (color >> 2) & 3; if (pcolor) { if (!MASK_AT(4)) dst[4] = palette[pcolor]; if (!MASK_AT(5)) dst[5] = palette[pcolor]; }
-					pcolor = (color >> 0) & 3; if (pcolor) { if (!MASK_AT(6)) dst[6] = palette[pcolor]; if (!MASK_AT(7)) dst[7] = palette[pcolor]; }
+					LINE(6, 0); LINE(4, 2); LINE(2, 4); LINE(0, 6);
 				}
-#undef MASK_AT
 			}
 			dst += _outwidth;
 			y++;
-			mask_ptr += _numStrips;
+			mask += _numStrips;
 			if (!--height) {
 				if (!--v1.skip_width)
 					return;
@@ -403,13 +405,16 @@
 				v1.x += 8 * v1.scaleXstep;
 				if (v1.x < 0 || v1.x >= _vm->_screenWidth)
 					return;
-				mask_ptr = v1.mask_ptr + (v1.x >> 3);
+				mask = v1.mask_ptr;
 				v1.destptr += 8 * v1.scaleXstep;
 				dst = v1.destptr;
 			}
 		}
 	} while(1);
 }
+
+#undef LINE
+#undef MASK_AT
 
 void CostumeRenderer::proc3() {
 	const byte *mask, *src;





More information about the Scummvm-git-logs mailing list