[Scummvm-cvs-logs] CVS: scummvm/scumm base-costume.h,NONE,1.1 actor.cpp,1.54,1.55 akos.cpp,1.36,1.37 akos.h,1.10,1.11 costume.cpp,1.10,1.11 costume.h,1.6,1.7

Max Horn fingolfin at users.sourceforge.net
Tue Jan 7 09:36:17 CET 2003


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

Modified Files:
	actor.cpp akos.cpp akos.h costume.cpp costume.h 
Added Files:
	base-costume.h 
Log Message:
more akos/costume merging

--- NEW FILE: base-costume.h ---
/* ScummVM - Scumm Interpreter
 * Copyright (C) 2001  Ludvig Strigeus
 * Copyright (C) 2001/2002 The ScummVM project 
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * $Header: /cvsroot/scummvm/scummvm/scumm/base-costume.h,v 1.1 2003/01/07 17:35:16 fingolfin Exp $
 *
 */

#ifndef BASE_COSTUME_H
#define BASE_COSTUME_H

class Scumm;


struct BaseCostumeRenderer {
public:
	byte _dirty_id;

	byte _shadow_mode;
	byte *_shadow_table;

	int _actorX, _actorY;
	byte _zbuf;
	byte _scaleX, _scaleY;

	int _draw_top, _draw_bottom;

protected:
	Scumm *_vm;
	int32 _numStrips;

	// current move offset
	int _xmove, _ymove;

	// whether to draw the actor mirrored
	bool _mirror;

	// width and height of cel to decode
	int _width, _height;

public:
	BaseCostumeRenderer(Scumm *scumm) {
		_dirty_id = 0;
		_shadow_mode = 0;
		_shadow_table = 0;
		_actorX = _actorY = 0;
		_zbuf = 0;
		_scaleX = _scaleY = 0;
		_draw_top = _draw_bottom = 0;
		
		_vm = scumm;
		_numStrips = _vm->gdi._numStrips;
		_xmove = _ymove = 0;
		_mirror = false;
		_width = _height = 0;
	}

	virtual void setPalette(byte *palette) = 0;
	virtual void setFacing(Actor *a) = 0;
	virtual void setCostume(int costume) = 0;

	byte drawCostume(const CostumeData &cost) {
		int i;
		byte result = 0;
	
		_xmove = _ymove = 0;
		for (i = 0; i < 16; i++)
			result |= drawLimb(cost, i);
		return result;
	}

protected:
	virtual byte drawLimb(const CostumeData &cost, int limb) = 0;

};

#endif

Index: actor.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/actor.cpp,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -d -r1.54 -r1.55
--- actor.cpp	6 Jan 2003 16:03:58 -0000	1.54
+++ actor.cpp	7 Jan 2003 17:35:08 -0000	1.55
@@ -944,7 +944,7 @@
 		// to be at the moment or, if it's not in any box, don't mask
 		// at all.
 		//
-		// This is similar to the clipping == 100 check used for AKOS
+		// This is similar to the _zbuf == 100 check used for AKOS
 		// costumes, except I haven't been able to figure out the
 		// proper check here. It's not quite enough to check if
 		// ignoreBoxes != 0 and checking if walkbox == 0 yields too
@@ -985,10 +985,10 @@
 
 		cr.setCostume(costume);
 		cr.setPalette(palette);
-		cr.setFacing(facing);
+		cr.setFacing(this);
 
-		cr.draw_top = top = 0xFF;
-		cr.draw_bottom = bottom = 0;
+		cr._draw_top = top = 0xFF;
+		cr._draw_bottom = bottom = 0;
 
 		cr._dirty_id = number;
 
@@ -997,28 +997,28 @@
 			needBgReset = true;
 			needRedraw = true;
 		}
-		top = cr.draw_top;
-		bottom = cr.draw_bottom;
+		top = cr._draw_top;
+		bottom = cr._draw_bottom;
 	} else {
 		AkosRenderer ar(_vm);
 		ar.charsetmask = true;
-		ar._x = x - _vm->virtscr[0].xstart;
-		ar._y = y - elevation;
+		ar._actorX = x - _vm->virtscr[0].xstart;
+		ar._actorY = y - elevation;
 		ar._scaleX = scalex;
 		ar._scaleY = scaley;
-		ar.clipping = forceClip;
-		if (ar.clipping == 100) {
-			ar.clipping = _vm->getMaskFromBox(walkbox);
-			if (ar.clipping > _vm->gdi._numZBuffer)
-				ar.clipping = _vm->gdi._numZBuffer;
+		ar._zbuf = forceClip;
+		if (ar._zbuf == 100) {
+			ar._zbuf = _vm->getMaskFromBox(walkbox);
+			if (ar._zbuf > _vm->gdi._numZBuffer)
+				ar._zbuf = _vm->gdi._numZBuffer;
 		}
 
 		ar.outptr = _vm->virtscr[0].screenPtr + _vm->virtscr[0].xstart;
 		ar.outwidth = _vm->virtscr[0].width;
 		ar.outheight = _vm->virtscr[0].height;
 
-		ar.shadow_mode = shadow_mode;
-		ar.shadow_table = _vm->_shadowPalette;
+		ar._shadow_mode = shadow_mode;
+		ar._shadow_table = _vm->_shadowPalette;
 
 		ar.setCostume(costume);
 		ar.setPalette(palette);
@@ -1026,8 +1026,8 @@
 
 		ar._dirty_id = number;
 
-		ar.draw_top = top = 0x7fffffff;
-		ar.draw_bottom = bottom = 0;
+		ar._draw_top = top = 0x7fffffff;
+		ar._draw_bottom = bottom = 0;
 
 		if (ar.drawCostume(cost)) {
 			// FIXME: this breaks talking in The Dig. But why?
@@ -1035,8 +1035,8 @@
 			//needBgReset = true;
 			//needRedraw = true;
 		}
-		top = ar.draw_top;
-		bottom = ar.draw_bottom;
+		top = ar._draw_top;
+		bottom = ar._draw_bottom;
 	}
 }
 

Index: akos.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/akos.cpp,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- akos.cpp	6 Jan 2003 16:04:00 -0000	1.36
+++ akos.cpp	7 Jan 2003 17:35:10 -0000	1.37
@@ -26,6 +26,36 @@
 #include "imuse.h"
 
 
+#if !defined(__GNUC__)
+#pragma START_PACK_STRUCTS
+#endif
+
+struct AkosHeader {
+	byte unk_1[2];
+	byte flags;
+	byte unk_2;
+	uint16 num_anims;
+	uint16 unk_3;
+	uint16 codec;
+} GCC_PACK;
+
+struct AkosOffset {
+	uint32 akcd;
+	uint16 akci;
+} GCC_PACK;
+
+struct AkosCI {
+	uint16 width, height;
+	int16 rel_x, rel_y;
+	int16 move_x, move_y;
+} GCC_PACK;
+
+#if !defined(__GNUC__)
+#pragma END_PACK_STRUCTS
+#endif
+
+
+
 enum AkosOpcodes {
 	AKC_Return = 0xC001,
 	AKC_SetVar = 0xC010,
@@ -205,23 +235,12 @@
 
 void AkosRenderer::setFacing(Actor *a)
 {
-	mirror = (newDirToOldDir(a->facing) != 0 || akhd->flags & 1);
+	_mirror = (newDirToOldDir(a->facing) != 0 || akhd->flags & 1);
 	if (a->flip)
-		mirror ^= 1;
-}
-
-bool AkosRenderer::drawCostume(const CostumeData &cost)
-{
-	int i;
-	bool result = false;
-
-	move_x = move_y = 0;
-	for (i = 0; i < 16; i++)
-		result |= drawLimb(cost, i);
-	return result;
+		_mirror = !_mirror;
 }
 
-bool AkosRenderer::drawLimb(const CostumeData &cost, int limb)
+byte AkosRenderer::drawLimb(const CostumeData &cost, int limb)
 {
 	uint code;
 	byte *p;
@@ -250,12 +269,12 @@
 		srcptr = akcd + READ_LE_UINT32(&off->akcd);
 		the_akci = (AkosCI *) (akci + READ_LE_UINT16(&off->akci));
 
-		move_x_cur = move_x + (int16)READ_LE_UINT16(&the_akci->rel_x);
-		move_y_cur = move_y + (int16)READ_LE_UINT16(&the_akci->rel_y);
+		_xmoveCur = _xmove + (int16)READ_LE_UINT16(&the_akci->rel_x);
+		_ymoveCur = _ymove + (int16)READ_LE_UINT16(&the_akci->rel_y);
 		_width = READ_LE_UINT16(&the_akci->width);
 		_height = READ_LE_UINT16(&the_akci->height);
-		move_x += (int16)READ_LE_UINT16(&the_akci->move_x);
-		move_y -= (int16)READ_LE_UINT16(&the_akci->move_y);
+		_xmove += (int16)READ_LE_UINT16(&the_akci->move_x);
+		_ymove -= (int16)READ_LE_UINT16(&the_akci->move_y);
 
 		switch (codec) {
 		case 1:
@@ -283,8 +302,8 @@
 			srcptr = akcd + READ_LE_UINT32(&off->akcd);
 			the_akci = (AkosCI *) (akci + READ_LE_UINT16(&off->akci));
 
-			move_x_cur = move_x + (int16)READ_LE_UINT16(p + 0);
-			move_y_cur = move_y + (int16)READ_LE_UINT16(p + 2);
+			_xmoveCur = _xmove + (int16)READ_LE_UINT16(p + 0);
+			_ymoveCur = _ymove + (int16)READ_LE_UINT16(p + 2);
 
 			p += (p[4] & 0x80) ? 6 : 5;
 
@@ -411,7 +430,7 @@
 						&& (!v1.mask_ptr || !((mask[0] | mask[v1.imgbufoffs]) & maskbit))) {
 					pcolor = palette[color];
 					if (pcolor == 13)
-						pcolor = shadow_table[*dst];
+						pcolor = _shadow_table[*dst];
 					*dst = pcolor;
 				}
 				mask += _numStrips;
@@ -485,7 +504,7 @@
 					pcolor = palette[color];
 					if (pcolor < 8) {
 						pcolor = (pcolor << 8) + *dst;
-						*dst = shadow_table[pcolor];
+						*dst = _shadow_table[pcolor];
 					} else {
 						*dst = pcolor;
 					}
@@ -657,23 +676,23 @@
 
 	use_scaling = (_scaleX != 0xFF) || (_scaleY != 0xFF);
 
-	cur_x = _x;
-	cur_y = _y;
+	cur_x = _actorX;
+	cur_y = _actorY;
 
 	if (use_scaling) {
 
 		/* Scale direction */
 		v1.scaleXstep = -1;
-		if (move_x_cur < 0) {
-			move_x_cur = -move_x_cur;
+		if (_xmoveCur < 0) {
+			_xmoveCur = -_xmoveCur;
 			v1.scaleXstep = 1;
 		}
 
-		if (mirror) {
+		if (_mirror) {
 			/* Adjust X position */
-			tmp_x = 0x180 - move_x_cur;
+			tmp_x = 0x180 - _xmoveCur;
 			j = tmp_x;
-			for (i = 0; i < move_x_cur; i++) {
+			for (i = 0; i < _xmoveCur; i++) {
 				if (v1.scaletable[j++] < _scaleX)
 					cur_x -= v1.scaleXstep;
 			}
@@ -692,9 +711,9 @@
 		} else {
 			/* No mirror */
 			/* Adjust X position */
-			tmp_x = 0x180 + move_x_cur;
+			tmp_x = 0x180 + _xmoveCur;
 			j = tmp_x;
-			for (i = 0; i < move_x_cur; i++) {
+			for (i = 0; i < _xmoveCur; i++) {
 				if (v1.scaletable[j++] < _scaleX)
 					cur_x += v1.scaleXstep;
 			}
@@ -716,33 +735,33 @@
 			skip--;
 
 		step = -1;
-		if (move_y_cur < 0) {
-			move_y_cur = -move_y_cur;
+		if (_ymoveCur < 0) {
+			_ymoveCur = -_ymoveCur;
 			step = -step;
 		}
 
-		tmp_y = 0x180 - move_y_cur;
-		for (i = 0; i < move_y_cur; i++) {
+		tmp_y = 0x180 - _ymoveCur;
+		for (i = 0; i < _ymoveCur; i++) {
 			if (v1.scaletable[tmp_y++] < _scaleY)
 				cur_y -= step;
 		}
 
 		y_top = y_bottom = cur_y;
-		tmp_y = 0x180 - move_y_cur;
+		tmp_y = 0x180 - _ymoveCur;
 		for (i = 0; i < _height; i++) {
 			if (v1.scaletable[tmp_y++] < _scaleY)
 				y_bottom++;
 		}
 
-		tmp_y = 0x180 - move_y_cur;
+		tmp_y = 0x180 - _ymoveCur;
 	} else {
-		if (!mirror)
-			move_x_cur = -move_x_cur;
+		if (!_mirror)
+			_xmoveCur = -_xmoveCur;
 
-		cur_x += move_x_cur;
-		cur_y += move_y_cur;
+		cur_x += _xmoveCur;
+		cur_y += _ymoveCur;
 
-		if (mirror) {
+		if (_mirror) {
 			x_left = cur_x;
 			x_right = cur_x + _width;
 		} else {
@@ -762,7 +781,7 @@
 	v1.skip_width = _width;
 
 	v1.scaleXstep = -1;
-	if (mirror)
+	if (_mirror)
 		v1.scaleXstep = -v1.scaleXstep;
 
 	if ((int) y_top >= (int) outheight || y_bottom <= 0)
@@ -774,7 +793,7 @@
 	v1.replen = 0;
 	v1.y_pitch = _height * outwidth;
 
-	if (mirror) {
+	if (_mirror) {
 		v1.y_pitch--;
 		if (!use_scaling)
 			skip = -cur_x;
@@ -819,10 +838,10 @@
 	if ((uint) y_bottom > (uint) outheight)
 		y_bottom = outheight;
 
-	if (draw_top > y_top)
-		draw_top = y_top;
-	if (draw_bottom < y_bottom)
-		draw_bottom = y_bottom;
+	if (_draw_top > y_top)
+		_draw_top = y_top;
+	if (_draw_bottom < y_bottom)
+		_draw_bottom = y_bottom;
 
 	if (cur_x == -1)
 		cur_x = 0;									/* ?? */
@@ -830,24 +849,24 @@
 	v1.destptr = outptr + cur_x + cur_y * outwidth;
 
 	masking = false;
-	if (clipping) {
+	if (_zbuf) {
 		masking = _vm->isMaskActiveAt(x_left, y_top, x_right, y_bottom,
 		                _vm->getResourceAddress(rtBuffer, 9) +
-		                _vm->gdi._imgBufOffs[clipping] + _vm->_screenStartStrip) != 0;
+		                _vm->gdi._imgBufOffs[_zbuf] + _vm->_screenStartStrip) != 0;
 	}
 
 	v1.mask_ptr = NULL;
 
-	if (masking || charsetmask || shadow_mode) {
+	if (masking || charsetmask || _shadow_mode) {
 		v1.mask_ptr = _vm->getResourceAddress(rtBuffer, 9) + cur_y * _numStrips + _vm->_screenStartStrip;
-		v1.imgbufoffs = _vm->gdi._imgBufOffs[clipping];
+		v1.imgbufoffs = _vm->gdi._imgBufOffs[_zbuf];
 		if (!charsetmask && masking) {
 			v1.mask_ptr += v1.imgbufoffs;
 			v1.imgbufoffs = 0;
 		}
 	}
 
-	switch (shadow_mode) {
+	switch (_shadow_mode) {
 	case 1:
 		codec1_spec1();
 		break;
@@ -895,14 +914,14 @@
 void AkosRenderer::codec5() {
 	int32 clip_left, clip_right, clip_top, clip_bottom, maxw, maxh, tmp_x, tmp_y;
 
-	if (!mirror) {
-		clip_left = (_x - move_x_cur - _width) + 1;
+	if (!_mirror) {
+		clip_left = (_actorX - _xmoveCur - _width) + 1;
 	} else {
-		clip_left = _x + move_x_cur - 1;
+		clip_left = _actorX + _xmoveCur - 1;
 	}
 
 	clip_right = (clip_left + _width) - 1;
-	clip_top = _y + move_y_cur;
+	clip_top = _actorY + _ymoveCur;
 	clip_bottom = (clip_top + _height) - 1;
 	maxw = outwidth - 1;
 	maxh = outheight - 1;
@@ -931,10 +950,10 @@
 
 	_vm->updateDirtyRect(0, clip_left, clip_right + 1, clip_top, clip_bottom + 1, 1 << _dirty_id);
 
-	if (draw_top > clip_top)
-		draw_top = clip_top;
-	if (draw_bottom < clip_bottom)
-		draw_bottom = clip_bottom + 1;
+	if (_draw_top > clip_top)
+		_draw_top = clip_top;
+	if (_draw_bottom < clip_bottom)
+		_draw_bottom = clip_bottom + 1;
 
 	BompDrawData bdd;
 
@@ -946,25 +965,25 @@
 	bdd.dataptr = srcptr;
 	bdd.scale_x = 255;
 	bdd.scale_y = 255;
-	bdd.shadowMode = shadow_mode;
+	bdd.shadowMode = _shadow_mode;
 
 	_vm->_bompScallingXPtr = NULL;
 	_vm->_bompScallingYPtr = NULL;
 
 	int decode_mode;
 
-	if (!mirror) {
-		bdd.x = (_x - move_x_cur - _width) + 1;
+	if (!_mirror) {
+		bdd.x = (_actorX - _xmoveCur - _width) + 1;
 		decode_mode = 3;
 	} else {
-		bdd.x = _x + move_x_cur;
+		bdd.x = _actorX + _xmoveCur;
 		decode_mode = 1;
 	}
 
-	bdd.y = _y + move_y_cur;
+	bdd.y = _actorY + _ymoveCur;
 
-	if (clipping != 0) {
-		_vm->_bompMaskPtr = _vm->getResourceAddress(rtBuffer, 9) + _vm->gdi._imgBufOffs[clipping];
+	if (_zbuf != 0) {
+		_vm->_bompMaskPtr = _vm->getResourceAddress(rtBuffer, 9) + _vm->gdi._imgBufOffs[_zbuf];
 		_vm->drawBomp(&bdd, decode_mode, 1);
 	} else {
 		_vm->drawBomp(&bdd, decode_mode, 0);
@@ -989,7 +1008,7 @@
 	if (count == 0)
 		return;
 
-	switch(shadow_mode) {
+	switch(_shadow_mode) {
 	case 0:
 		do {
 			tmp_data = *(src++);
@@ -1005,7 +1024,7 @@
 			tmp_data = *(src++);
 			if (tmp_data != transparency) {
 				if (tmp_data == 13) {
-					tmp_data = shadow_table[*(dest)];
+					tmp_data = _shadow_table[*(dest)];
 				}
 				*(dest) = tmp_data;
 			}
@@ -1018,7 +1037,7 @@
 			tmp_data = *(src++);
 			if (tmp_data != transparency) {
 				if (tmp_data < 8) {
-					tmp_data = shadow_table[*(dest) + (tmp_data << 8)];
+					tmp_data = _shadow_table[*(dest) + (tmp_data << 8)];
 				}
 				*(dest) = tmp_data;
 			}
@@ -1207,13 +1226,13 @@
 void AkosRenderer::codec16() {
 	int32 clip_left;
 
-	if(!mirror) {
-		clip_left = (_x - move_x_cur - _width) + 1;
+	if(!_mirror) {
+		clip_left = (_actorX - _xmoveCur - _width) + 1;
 	} else {
-		clip_left = _x + move_x_cur;
+		clip_left = _actorX + _xmoveCur;
 	}
 
-	int32 clip_top = move_y_cur + _y;
+	int32 clip_top = _ymoveCur + _actorY;
 	int32 clip_right = (clip_left + _width) - 1;
 	int32 clip_bottom = (clip_top + _height) - 1;
 	int32 skip_x = 0;
@@ -1262,10 +1281,10 @@
 
 	_vm->updateDirtyRect(0, clip_left, clip_right + 1, clip_top, clip_bottom + 1, 1 << _dirty_id);
 
-	if (draw_top > clip_top)
-		draw_top = clip_top;
-	if (draw_bottom < clip_bottom)
-		draw_bottom = clip_bottom + 1;
+	if (_draw_top > clip_top)
+		_draw_top = clip_top;
+	if (_draw_bottom < clip_bottom)
+		_draw_bottom = clip_bottom + 1;
 
 	int32 width_unk, height_unk;
 
@@ -1274,7 +1293,7 @@
 
 	int32 /*tmp1, tmp2, tmp3,*/ dir;
 
-	if (!mirror) {
+	if (!_mirror) {
 		dir = -1;
 
 		int tmp_skip_x = skip_x;
@@ -1316,12 +1335,12 @@
 
 	byte * dest = outptr + width_unk + height_unk * _vm->_realWidth;
 
-	if (clipping == 0) {
+	if (_zbuf == 0) {
 		akos16Decompress(dest, pitch, srcptr, cur_x, out_height, dir, numskip_before, numskip_after, 255);
 		return;
 	}
 
-	byte * ptr = _vm->_screenStartStrip + _vm->getResourceAddress(rtBuffer, 9) + _vm->gdi._imgBufOffs[clipping];
+	byte * ptr = _vm->_screenStartStrip + _vm->getResourceAddress(rtBuffer, 9) + _vm->gdi._imgBufOffs[_zbuf];
 	ptr += _numStrips * clip_top + (clip_left / 8);
 	akos16DecompressMask(dest, pitch, srcptr, cur_x, out_height, dir, numskip_before, numskip_after, 255, ptr, clip_left / 8);
 }

Index: akos.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/akos.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- akos.h	5 Jan 2003 23:53:16 -0000	1.10
+++ akos.h	7 Jan 2003 17:35:13 -0000	1.11
@@ -23,80 +23,37 @@
 #ifndef AKOS_H
 #define AKOS_H
 
-
-#if !defined(__GNUC__)
-#pragma START_PACK_STRUCTS
-#endif
+#include "base-costume.h"
 
 struct CostumeData;
+struct AkosHeader;
+struct AkosOffset;
 
-struct AkosHeader {
-	byte unk_1[2];
-	byte flags;
-	byte unk_2;
-	uint16 num_anims;
-	uint16 unk_3;
-	uint16 codec;
-} GCC_PACK;
-
-struct AkosOffset {
-	uint32 akcd;
-	uint16 akci;
-} GCC_PACK;
-
-struct AkosCI {
-	uint16 width, height;
-	int16 rel_x, rel_y;
-	int16 move_x, move_y;
-} GCC_PACK;
-
-#if !defined(__GNUC__)
-#pragma END_PACK_STRUCTS
-#endif
-
-struct AkosRenderer {
+class AkosRenderer : public BaseCostumeRenderer {
 public:
-	byte _dirty_id;
-
-	byte shadow_mode;
-	byte *shadow_table;
-
-	int _x, _y;
-	byte _scaleX, _scaleY;
-	byte clipping;
 	bool charsetmask;	// FIXME - it seems charsetmask is only set once, in actor.cpp, to true. So can we get rid of it?!?
 
-	int draw_top, draw_bottom;
-
 	byte *outptr;
 	uint outwidth, outheight;
 
 protected:
-	Scumm *_vm;
-	int32 _numStrips;
-
 	uint16 codec;
-	bool mirror;									/* draw actor mirrored */
+	byte *srcptr;
 
-	/* pointer to various parts of the costume resource */
-	byte *akos;
-	AkosHeader *akhd;
+	// movement of cel to decode
+	int _xmoveCur, _ymoveCur;
 
-	/* current move offset */
-	int move_x, move_y;
-	/* movement of cel to decode */
-	int move_x_cur, move_y_cur;
-	/* width and height of cel to decode */
-	int _width, _height;
+	// actor palette
+	byte palette[256];
 
-	byte *srcptr;
+	// pointer to various parts of the costume resource
+	byte *akos;
+	AkosHeader *akhd;
 
 	byte *akpl, *akci, *aksq;
 	AkosOffset *akof;
 	byte *akcd;
 
-	byte palette[256];
-
 	struct {
 		/* codec stuff */
 		const byte *scaletable;
@@ -127,21 +84,24 @@
 	} akos16;
 
 public:
-	// Constructor, sets all data to 0
-	AkosRenderer(Scumm *scumm) {
-		memset(this, 0, sizeof(AkosRenderer));
-		_vm = scumm;
-		_numStrips = _vm->gdi._numStrips;
+	AkosRenderer(Scumm *scumm) : BaseCostumeRenderer(scumm) {
+		outptr = 0;
+		srcptr = 0;
+		akos = 0;
+		akhd = 0;
+		akpl = 0;
+		akci = 0;
+		aksq = 0;
+		akof = 0;
+		akcd = 0;
 	}
 
 	void setPalette(byte *palette);
 	void setFacing(Actor *a);
 	void setCostume(int costume);
 
-	bool drawCostume(const CostumeData &cost);
-
 protected:
-	bool drawLimb(const CostumeData &cost, int limb);
+	byte drawLimb(const CostumeData &cost, int limb);
 
 	void codec1();
 	void codec1_spec1();

Index: costume.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/costume.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- costume.cpp	5 Jan 2003 23:53:16 -0000	1.10
+++ costume.cpp	7 Jan 2003 17:35:18 -0000	1.11
@@ -274,11 +274,11 @@
 	if ((uint) _bottom > _outheight)
 		_bottom = _outheight;
 
-	if (draw_top > _top)
-		draw_top = _top;
+	if (_draw_top > _top)
+		_draw_top = _top;
 
-	if (draw_bottom < _bottom)
-		draw_bottom = _bottom;
+	if (_draw_bottom < _bottom)
+		_draw_bottom = _bottom;
 
 	if (_height2 + _top >= 256) {
 		CHECK_HEAP
@@ -1227,17 +1227,6 @@
 	_dataptr = _ptr + READ_LE_UINT16(_ptr + _numColors + 8);
 }
 
-byte CostumeRenderer::drawCostume(const CostumeData &cost)
-{
-	int i;
-	byte result = 0;
-
-	_xmove = _ymove = 0;
-	for (i = 0; i != 16; i++)
-		result |= drawLimb(cost, i);
-	return result;
-}
-
 byte CostumeRenderer::drawLimb(const CostumeData &cost, int limb)
 {
 	int i;
@@ -1360,9 +1349,9 @@
 	}
 }
 
-void CostumeRenderer::setFacing(uint16 facing)
+void CostumeRenderer::setFacing(Actor *a)
 {
-	_mirror = newDirToOldDir(facing) != 0 || (_loaded._ptr[7] & 0x80);
+	_mirror = newDirToOldDir(a->facing) != 0 || (_loaded._ptr[7] & 0x80);
 }
 
 void CostumeRenderer::setCostume(int costume)

Index: costume.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/costume.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- costume.h	5 Jan 2003 23:53:16 -0000	1.6
+++ costume.h	7 Jan 2003 17:35:20 -0000	1.7
@@ -21,7 +21,7 @@
 #ifndef COSTUME_H
 #define COSTUME_H
 
-class Scumm;
+#include "base-costume.h"
 
 class LoadedCostume {
 protected:
@@ -42,38 +42,20 @@
 };
 
 
-class CostumeRenderer {
+class CostumeRenderer : public BaseCostumeRenderer {
 public:
-	byte _dirty_id;
-
-	byte _shadow_mode;
-	byte *_shadow_table;
-
-	int _actorX, _actorY;
-	byte _zbuf;
-	uint _scaleX, _scaleY;
-
-	int draw_top, draw_bottom;
-
 	uint _outheight;
 
 protected:
-	Scumm *_vm;
-	int32 _numStrips;
-	
 	LoadedCostume _loaded;
 	
 	byte *_frameptr;
 	byte *_srcptr;
 	byte *_bgbak_ptr, *_backbuff_ptr, *_mask_ptr, *_mask_ptr_dest;
-	int _xmove, _ymove;
-	bool _mirror;
 	byte _maskval;
 	byte _shrval;
 	byte _width2;
-	int _width;
 	byte _height2;
-	int _height;
 	int _xpos, _ypos;
 
 	int _scaleIndexXStep;
@@ -92,13 +74,11 @@
 	byte _palette[32];
 
 public:
-	CostumeRenderer(Scumm *vm) : _vm(vm), _numStrips(vm->gdi._numStrips), _loaded(vm) {}
+	CostumeRenderer(Scumm *vm) : BaseCostumeRenderer(vm), _loaded(vm) {}
 
 	void setPalette(byte *palette);
-	void setFacing(uint16 facing);
+	void setFacing(Actor *a);
 	void setCostume(int costume);
-
-	byte drawCostume(const CostumeData &cost);
 
 protected:
 	byte drawLimb(const CostumeData &cost, int limb);





More information about the Scummvm-git-logs mailing list