[Scummvm-cvs-logs] CVS: scummvm costume.cpp,1.38,1.39 costume.h,1.1,1.2

Ruediger Hanke tomjoad at users.sourceforge.net
Thu Jul 18 11:43:03 CEST 2002


Update of /cvsroot/scummvm/scummvm
In directory usw-pr-cvs1:/tmp/cvs-serv14382

Modified Files:
	costume.cpp costume.h 
Log Message:
Amiga actor costumes working now, with some minor niggles (sometimes some costume pixels get drawn that shouldn't be) still but otherwise ok.

Index: costume.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/costume.cpp,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -d -r1.38 -r1.39
--- costume.cpp	16 Jul 2002 17:59:28 -0000	1.38
+++ costume.cpp	18 Jul 2002 18:42:50 -0000	1.39
@@ -30,9 +30,11 @@
 void CostumeRenderer::ignorePakCols(int a)
 {
 	int n;
+
 	n = _height;
 	if (a > 1)
 		n *= a;
+
 	do {
 		_repcolor = *_srcptr++;
 		_replen = _repcolor & _maskval;
@@ -82,7 +84,10 @@
 	byte scaling;
 	byte charsetmask, masking;
 	byte unk19;
+	byte newAmiCost;
 	int ex1, ex2;
+	
+	newAmiCost = (_vm->_gameId == GID_MONKEY2 || _vm->_gameId == GID_INDY4) && (_vm->_features & GF_AMIGA);
 
 	CHECK_HEAP _maskval = 0xF;
 	_shrval = 4;
@@ -222,10 +227,12 @@
 			s = -_xpos;
 		}
 		if (s > 0) {
-			_width2 -= s;
-			ignorePakCols(s);
-			_xpos = 0;
-			_docontinue = 1;
+			if (!newAmiCost) {
+				_width2 -= s;
+				ignorePakCols(s);
+				_xpos = 0;
+				_docontinue = 1;
+			}
 		} else {
 			s = _right - 320;
 			if (s <= 0) {
@@ -239,10 +246,12 @@
 		if (scaling == 0)
 			s = _right - 320;
 		if (s > 0) {
-			_width2 -= s;
-			ignorePakCols(s);
-			_xpos = 319;
-			_docontinue = 1;
+			if (!newAmiCost) {
+				_width2 -= s;
+				ignorePakCols(s);
+				_xpos = 319;
+				_docontinue = 1;
+			}
 		} else {
 			s = -1 - _left;
 			if (s <= 0)
@@ -303,7 +312,7 @@
 		return b;
 	}
 
-	switch ((scaling << 2) | (masking << 1) | charsetmask) {
+	switch ((newAmiCost << 3) | (scaling << 2) | (masking << 1) | charsetmask) {
 	case 0:
 		proc6();										// no scaling, no masking, no charsetmask
 		break;
@@ -324,6 +333,26 @@
 	case 7:
 		proc3();										// scaling, masking and charsetmask
 		break;
+	case 8:
+		proc6_ami();								// no scaling, no masking, no charsetmask (Amiga)
+		break;
+	case 9:
+	case 10:
+		proc5_ami();								// no scaling, masking or charsetmask (Amiga)
+		break;
+	case 11:
+		proc4_ami();								// no scaling, masking and charsetmask (Amiga)
+		break;
+	case 12:
+		proc1_ami();								// scaling, no masking, no charsetmask (Amiga)
+		break;
+	case 13:
+	case 14:
+		proc2_ami();								// scaling, masking or charsetmask (Amiga)
+		break;
+	case 15:
+		proc3_ami();								// scaling, masking and charsetmask (Amiga)
+		break;
 	}
 
 	CHECK_HEAP return b;
@@ -626,7 +655,6 @@
 		StartPos:;
 		} while (--len);
 	} while (1);
-
 }
 
 void CostumeRenderer::proc1()
@@ -686,6 +714,381 @@
 				dst = _backbuff_ptr;
 			}
 		StartPos:;
+		} while (--len);
+	} while (1);
+}
+
+void CostumeRenderer::proc6_ami()
+{
+	byte len;
+	byte *src, *dst;
+	byte width, height, pcolor;
+	int color;
+	int step = _scaleIndexXStep;
+	int  x;
+	uint y;
+	uint scrheight;
+
+	x = _xpos;
+	y = _ypos;
+	src = _srcptr;
+	dst = _backbuff_ptr;
+	scrheight = _outheight;
+	width = _width;
+	height = _height2;
+
+	do {
+		len = *src++;
+		color = len >> _shrval;
+		len &= _maskval;
+		if (!len)
+			len = *src++;
+
+		do {
+			if (color && x >= 0 && x < 320) {
+				pcolor = _palette[color];
+/*				  if (pcolor == 13) {
+					pcolor = _transEffect[*dst];
+				}*/
+				*dst = pcolor;
+			}
+
+			dst += step;
+			x += step;
+			if (!--width) {
+				if (!--height)
+					return;
+				width = _width;
+				dst += 320-step*_width;
+				x = _xpos;
+				y++;
+				if (y >= scrheight)
+					return;
+			}
+		} while (--len);
+	} while (1);
+}
+
+void CostumeRenderer::proc5_ami()
+{
+	byte *mask, *src, *dst;
+	byte maskbit, len, width, height, pcolor;
+	uint y, scrheight;
+	int color, x;
+	int step = _scaleIndexXStep;
+
+	mask = _mask_ptr = _mask_ptr_dest;
+	maskbit = revBitMask[_xpos & 7];
+	x = _xpos;
+	y = _ypos;
+	src = _srcptr;
+	dst = _backbuff_ptr;
+	scrheight = _outheight;
+	width = _width;
+	height = _height2;
+
+	do {
+		len = *src++;
+		color = len >> _shrval;
+		len &= _maskval;
+		if (!len)
+			len = *src++;
+
+		do {
+			if (color && x >=0 && x < 320 && !(*mask & maskbit)) {
+				pcolor = _palette[color];
+/*				  if (pcolor == 13)
+					pcolor = _transEffect[*dst];*/
+				*dst = pcolor;
+			}
+			dst += step;
+			x += step;
+			if (step != 1) {
+				maskbit <<= 1;
+				if (!maskbit)
+				{
+					maskbit = 1;
+					mask--;
+				}
+			} else {
+				maskbit >>= 1;
+				if (!maskbit)
+				{
+					maskbit = 0x80;
+					mask++;
+				}
+			}
+			if (!--width) {
+				if (!--height)
+					return;
+				width = _width;
+				x = _xpos;
+				y++;
+				dst += 320-step*_width;
+				_mask_ptr+=40;
+				mask = _mask_ptr;
+				maskbit = revBitMask[_xpos & 7];
+				if (y >= scrheight)
+					return;
+			}
+		} while (--len);
+	} while (1);
+}
+
+void CostumeRenderer::proc4_ami()
+{
+	byte *mask, *src, *dst;
+	byte maskbit, len, width, height, pcolor;
+	uint y, scrheight;
+	int color, x;
+	int step = _scaleIndexXStep;
+
+	mask = _mask_ptr = _mask_ptr_dest;
+	maskbit = revBitMask[_xpos & 7];
+	x = _xpos;
+	y = _ypos;
+	src = _srcptr;
+	dst = _backbuff_ptr;
+	scrheight = _outheight;
+	height = _height2;
+	width = _width;
+
+	do {
+		len = *src++;
+		color = len >> _shrval;
+		len &= _maskval;
+		if (!len)
+			len = *src++;
+
+		do {
+			if (color && x >= 0 && x < 320 && !((*mask | mask[_imgbufoffs]) & maskbit)) {
+				pcolor = _palette[color];
+/*				  if (pcolor == 13)
+					pcolor = _transEffect[*dst];*/
+				*dst = pcolor;
+			}
+			dst += step;
+			x += step;
+			if (step != 1) {
+				maskbit <<= 1;
+				if (!maskbit) {
+					maskbit = 1;
+					mask--;
+				}
+			} else {
+				maskbit >>= 1;
+				if (!maskbit) {
+					maskbit = 0x80;
+					mask++;
+				}
+			}
+			if (!--width) {
+				if (!--height)
+					return;
+				width = _width;
+				y++;
+				x = _xpos;
+				dst += 320-step*_width;
+				_mask_ptr+= 40;
+				mask = _mask_ptr;
+				maskbit = revBitMask[_xpos & 7];
+				if (y >= scrheight)
+					return;
+			}
+		} while (--len);
+	} while (1);
+}
+
+void CostumeRenderer::proc3_ami()
+{
+	byte *mask, *src, *dst;
+	byte maskbit, len, height, pcolor, width;
+	int color, t;
+	uint y;
+	uint oldXpos, oldScaleIndexX;
+
+	mask = _mask_ptr_dest;
+	dst = _backbuff_ptr;
+	height = _height2;
+	width = _width;
+	src = _srcptr;
+	maskbit = revBitMask[_xpos & 7];
+	y = _ypos;
+	oldXpos = _xpos;
+	oldScaleIndexX = _scaleIndexX;
+
+	do {
+		len = *src++;
+		color = len >> _shrval;
+		len &= _maskval;
+		if (!len)
+			len = *src++;
+		do {
+			if (cost_scaleTable[_scaleIndexY] < _scaleY) {
+				if (color && _xpos >= 0 && _xpos < 320 && !((*mask | mask[_imgbufoffs]) & maskbit)) {
+					pcolor = _palette[color];
+/*					  if (pcolor == 13)
+						pcolor = _transEffect[*dst];*/
+					*dst = pcolor;
+				}
+
+				t = _scaleIndexX;
+				_scaleIndexX = t + _scaleIndexXStep;
+				if (cost_scaleTable[t] < _scaleX) {
+					_xpos += _scaleIndexXStep;
+					dst += _scaleIndexXStep;
+					maskbit = revBitMask[_xpos & 7];
+				}
+				mask = _mask_ptr + (_xpos >> 3);
+			}
+			if (!--width) {
+				if (!--height)
+					return;
+
+				if (y >= _outheight)
+					return;
+
+				if (_xpos != oldXpos) {
+					dst += 320-(_xpos-oldXpos);
+					_mask_ptr += 40;
+					mask = _mask_ptr;
+					y++;
+				}
+				width = _width;
+				_xpos = oldXpos;
+				_scaleIndexX = oldScaleIndexX;
+				_scaleIndexY++;
+			}
+		} while (--len);
+	} while (1);
+}
+
+void CostumeRenderer::proc2_ami()
+{
+	byte *mask, *src, *dst;
+	byte maskbit, len, height, pcolor, width;
+	int color, t;
+	uint y;
+	uint oldXpos, oldScaleIndexX;
+
+	mask = _mask_ptr_dest;
+	dst = _backbuff_ptr;
+	height = _height2;
+	width = _width;
+	src = _srcptr;
+	maskbit = revBitMask[_xpos & 7];
+	y = _ypos;
+
+	oldXpos = _xpos;
+	oldScaleIndexX = _scaleIndexX;
+
+	do {
+		len = *src++;
+		color = len >> _shrval;
+		len &= _maskval;
+		if (!len)
+			len = *src++;
+		do {
+			if (cost_scaleTable[_scaleIndexY] < _scaleY) {
+				if (color && _xpos >= 0 && _xpos < 320 && !(*mask & maskbit)) {
+					pcolor = _palette[color];
+/*					  if (pcolor == 13)
+						pcolor = _transEffect[*dst];*/
+					*dst = pcolor;
+				}
+				t = _scaleIndexX;
+				_scaleIndexX = t + _scaleIndexXStep;
+				if (cost_scaleTable[t] < _scaleX) {
+					_xpos += _scaleIndexXStep;
+					dst += _scaleIndexXStep;
+					maskbit = revBitMask[_xpos & 7];
+					_backbuff_ptr += _scaleIndexXStep;
+				}
+				mask = _mask_ptr + (_xpos >> 3);
+			}
+			if (!--width) {
+				if (!--height)
+					return;
+
+				if (y >= _outheight)
+					return;
+
+				if (_xpos != oldXpos) {
+					dst += 320-(_xpos-oldXpos);
+					_mask_ptr += 40;
+					mask = _mask_ptr;
+					y++;
+				}
+				width = _width;
+				_xpos = oldXpos;
+				_scaleIndexX = oldScaleIndexX;
+				_scaleIndexY++;
+			}
+		} while (--len);
+	} while (1);
+}
+
+void CostumeRenderer::proc1_ami()
+{
+	byte *mask, *src, *dst;
+	byte maskbit, len, height, pcolor, width;
+	uint y;
+	int color;
+	int t, x;
+	uint oldXpos, oldScaleIndexX;
+
+	mask = _mask_ptr = _mask_ptr_dest;
+	maskbit = revBitMask[_xpos & 7];
+	x = _xpos;
+	y = _ypos;
+
+	dst = _backbuff_ptr;
+	height = _height2;
+	width = _width;
+	src = _srcptr;
+
+	oldXpos = _xpos;
+	oldScaleIndexX = _scaleIndexX;
+
+	do {
+		len = *src++;
+		color = len >> _shrval;
+		len &= _maskval;
+		if (!len)
+			len = *src++;
+
+		do {
+			if (cost_scaleTable[_scaleIndexY] < _scaleY) {
+				if (color && _xpos >= 0 && _xpos < 320) {
+					pcolor = _palette[color];
+/*					  if (pcolor == 13)
+						pcolor = _transEffect[*dst];*/
+					*dst = pcolor;
+				}
+
+				t = _scaleIndexX;
+				_scaleIndexX = t + _scaleIndexXStep;
+				if (cost_scaleTable[t] < _scaleX) {
+					_xpos += _scaleIndexXStep;
+					dst += _scaleIndexXStep;
+				}
+			}
+			if (!--width) {
+				if (!--height)
+					return;
+
+				if (y >= _outheight)
+					return;
+
+				if (_xpos != oldXpos) {
+					dst += 320-(_xpos-oldXpos);
+					y++;
+				}
+				width = _width;
+				_xpos = oldXpos;
+				_scaleIndexX = oldScaleIndexX;
+				_scaleIndexY++;
+			}
 		} while (--len);
 	} while (1);
 }

Index: costume.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/costume.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- costume.h	16 Jul 2002 18:26:42 -0000	1.1
+++ costume.h	18 Jul 2002 18:42:51 -0000	1.2
@@ -89,6 +89,12 @@
 	void proc3();
 	void proc2();
 	void proc1();
+	void proc6_ami();
+	void proc5_ami();
+	void proc4_ami();
+	void proc3_ami();
+	void proc2_ami();
+	void proc1_ami();
 	void proc_special(Actor *a, byte mask);
 	byte mainRoutine(Actor *a, int slot, int frame);
 	void ignorePakCols(int num);





More information about the Scummvm-git-logs mailing list