[Scummvm-cvs-logs] SF.net SVN: scummvm: [26054] scummvm/trunk/engines/scumm

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Sat Mar 10 14:26:40 CET 2007


Revision: 26054
          http://scummvm.svn.sourceforge.net/scummvm/?rev=26054&view=rev
Author:   fingolfin
Date:     2007-03-10 05:26:39 -0800 (Sat, 10 Mar 2007)

Log Message:
-----------
SCUMM: some more AKOS cleanup & added comments

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/akos.cpp
    scummvm/trunk/engines/scumm/akos.h

Modified: scummvm/trunk/engines/scumm/akos.cpp
===================================================================
--- scummvm/trunk/engines/scumm/akos.cpp	2007-03-10 13:20:30 UTC (rev 26053)
+++ scummvm/trunk/engines/scumm/akos.cpp	2007-03-10 13:26:39 UTC (rev 26054)
@@ -48,8 +48,8 @@
 };
 
 struct AkosOffset {
-	uint32 akcd;
-	uint16 akci;
+	uint32 akcd;	// offset into the akcd data
+	uint16 akci;	// offset into the akci data
 };
 
 #include "common/pack-end.h"	// END STRUCT PACKING
@@ -300,30 +300,30 @@
 
 	if (_vm->_game.heversion >= 99 && _paletteNum) {
 		for (i = 0; i < size; i++)
-			palette[i] = (byte)_vm->_hePalettes[_paletteNum * 1024 + 768 + akpl[i]];
+			_palette[i] = (byte)_vm->_hePalettes[_paletteNum * 1024 + 768 + akpl[i]];
 	} else {
 		for (i = 0; i < size; i++) {
-			palette[i] = new_palette[i] != 0xFF ? new_palette[i] : akpl[i];
+			_palette[i] = new_palette[i] != 0xFF ? new_palette[i] : akpl[i];
 		}
 	}
 
 	if (_vm->_game.heversion == 70) {
 		for (i = 0; i < size; i++)
-			palette[i] = _vm->_HEV7ActorPalette[palette[i]];
+			_palette[i] = _vm->_HEV7ActorPalette[_palette[i]];
 	} 
 
 	if (size == 256) {
 		byte color = new_palette[0];
 		if (color == 255) {
-			palette[0] = color;
+			_palette[0] = color;
 		} else {
-			useBompPalette = true;
+			_useBompPalette = true;
 		}
 	}
 }
 
 void AkosRenderer::setCostume(int costume, int shadow) {
-	akos = _vm->getResourceAddress(rtCostume, costume);
+	const byte *akos = _vm->getResourceAddress(rtCostume, costume);
 	assert(akos);
 
 	akhd = (const AkosHeader *) _vm->findResourceData(MKID_BE('AKHD'), akos);
@@ -332,7 +332,7 @@
 	aksq = _vm->findResourceData(MKID_BE('AKSQ'), akos);
 	akcd = _vm->findResourceData(MKID_BE('AKCD'), akos);
 	akpl = _vm->findResourceData(MKID_BE('AKPL'), akos);
-	codec = READ_LE_UINT16(&akhd->codec);
+	_codec = READ_LE_UINT16(&akhd->codec);
 	akct = _vm->findResourceData(MKID_BE('AKCT'), akos);
 
 	xmap = 0;
@@ -420,7 +420,7 @@
 		_xmove += (int16)READ_LE_UINT16(&costumeInfo->move_x);
 		_ymove -= (int16)READ_LE_UINT16(&costumeInfo->move_y);
 
-		switch (codec) {
+		switch (_codec) {
 		case 1:
 			result |= codec1(xmoveCur, ymoveCur);
 			break;
@@ -431,7 +431,7 @@
 			result |= codec16(xmoveCur, ymoveCur);
 			break;
 		default:
-			error("akos_drawLimb: invalid codec %d", codec);
+			error("akos_drawLimb: invalid _codec %d", _codec);
 		}
 	} else {
 		if (code == AKC_ComplexChan2)  {
@@ -503,7 +503,7 @@
 					_shadow_mode = 3;
 			}
 
-			switch (codec) {
+			switch (_codec) {
 			case 1:
 				result |= codec1(xmoveCur, ymoveCur);
 				break;
@@ -517,7 +517,7 @@
 				result |= codec32(xmoveCur, ymoveCur);
 				break;
 			default:
-				error("akos_drawLimb: invalid codec %d", codec);
+				error("akos_drawLimb: invalid _codec %d", _codec);
 			}
 		}
 	}
@@ -567,7 +567,7 @@
 					masked = (y < v1.boundsRect.top || y >= v1.boundsRect.bottom) || (v1.x < 0 || v1.x >= v1.boundsRect.right) || (*mask & maskbit);
 
 					if (color && !masked && !skip_column) {
-						pcolor = palette[color];
+						pcolor = _palette[color];
 						if (_shadow_mode == 1) {
 							if (pcolor == 13)	
 								pcolor = _shadow_table[*dst];
@@ -1046,35 +1046,35 @@
 	bdd.shadowMode = _shadow_mode;
 	bdd.shadowPalette = _vm->_shadowPalette;
 
-	bdd.actorPalette = useBompPalette ? palette : 0;
+	bdd.actorPalette = _useBompPalette ? _palette : 0;
 	bdd.mirror = !_mirror;
 
 	drawBomp(bdd);
 	
-	useBompPalette = false;
+	_useBompPalette = false;
 	
 	return 0;
 }
 
 void AkosRenderer::akos16SetupBitReader(const byte *src) {
-	akos16.unk5 = 0;
-	akos16.numbits = 16;
-	akos16.mask = (1 << *src) - 1;
-	akos16.shift = *(src);
-	akos16.color = *(src + 1);
-	akos16.bits = (*(src + 2) | *(src + 3) << 8);
-	akos16.dataptr = src + 4;
+	_akos16.repeatMode = false;
+	_akos16.numbits = 16;
+	_akos16.mask = (1 << *src) - 1;
+	_akos16.shift = *(src);
+	_akos16.color = *(src + 1);
+	_akos16.bits = (*(src + 2) | *(src + 3) << 8);
+	_akos16.dataptr = src + 4;
 }
 
 #define AKOS16_FILL_BITS()                                        \
-        if (akos16.numbits <= 8) {                                \
-          akos16.bits |= (*akos16.dataptr++) << akos16.numbits;   \
-          akos16.numbits += 8;                                    \
+        if (_akos16.numbits <= 8) {                                \
+          _akos16.bits |= (*_akos16.dataptr++) << _akos16.numbits;   \
+          _akos16.numbits += 8;                                    \
         }
 
 #define AKOS16_EAT_BITS(n)                                        \
-		akos16.numbits -= (n);                                    \
-		akos16.bits >>= (n);
+		_akos16.numbits -= (n);                                    \
+		_akos16.bits >>= (n);
 
 
 void AkosRenderer::akos16SkipData(int32 numbytes) {
@@ -1086,39 +1086,41 @@
 
 	while (numbytes != 0) {
 		if (buf) {
-			*buf = akos16.color;
+			*buf = _akos16.color;
 			buf += dir;
 		}
 		
-		if (akos16.unk5 == 0) {
+		if (!_akos16.repeatMode) {
 			AKOS16_FILL_BITS()
-			bits = akos16.bits & 3;
+			bits = _akos16.bits & 3;
 			if (bits & 1) {
 				AKOS16_EAT_BITS(2)
 				if (bits & 2) {
-					tmp_bits = akos16.bits & 7;
+					tmp_bits = _akos16.bits & 7;
 					AKOS16_EAT_BITS(3)
 					if (tmp_bits != 4) {
-						akos16.color += (tmp_bits - 4);
+						// A color change
+						_akos16.color += (tmp_bits - 4);
 					} else {
-						akos16.unk5 = 1;
+						// Color does not change, but rather identical pixels get repeated
+						_akos16.repeatMode = true;
 						AKOS16_FILL_BITS()
-						akos16.unk6 = (akos16.bits & 0xff) - 1;
+						_akos16.repeatCount = (_akos16.bits & 0xff) - 1;
 						AKOS16_EAT_BITS(8)
 						AKOS16_FILL_BITS()
 					}
 				} else {
 					AKOS16_FILL_BITS()
-					akos16.color = ((byte)akos16.bits) & akos16.mask;
-					AKOS16_EAT_BITS(akos16.shift)
+					_akos16.color = ((byte)_akos16.bits) & _akos16.mask;
+					AKOS16_EAT_BITS(_akos16.shift)
 					AKOS16_FILL_BITS()
 				}
 			} else {
 				AKOS16_EAT_BITS(1);
 			}
 		} else {
-			if (--akos16.unk6 == 0) {
-				akos16.unk5 = 0;
+			if (--_akos16.repeatCount == 0) {
+				_akos16.repeatMode = false;
 			}
 		}
 		numbytes--;
@@ -1127,7 +1129,7 @@
 
 void AkosRenderer::akos16Decompress(byte *dest, int32 pitch, const byte *src, int32 t_width, int32 t_height, int32 dir,
 		int32 numskip_before, int32 numskip_after, byte transparency, int maskLeft, int maskTop, int zBuf) {
-	byte *tmp_buf = akos16.buffer;
+	byte *tmp_buf = _akos16.buffer;
 	int maskpitch;
 	byte *maskptr;
 	const byte maskbit = revBitMask(maskLeft & 7);
@@ -1151,9 +1153,9 @@
 	assert(t_width > 0);
 	while (t_height--) {
 		akos16DecodeLine(tmp_buf, t_width, dir);
-		bompApplyMask(akos16.buffer, maskptr, maskbit, t_width, transparency);
+		bompApplyMask(_akos16.buffer, maskptr, maskbit, t_width, transparency);
 		bool HE7Check = (_vm->_game.heversion == 70);
-		bompApplyShadow(_shadow_mode, _shadow_table, akos16.buffer, dest, t_width, transparency, HE7Check);
+		bompApplyShadow(_shadow_mode, _shadow_table, _akos16.buffer, dest, t_width, transparency, HE7Check);
 
 		if (numskip_after != 0)	{
 			akos16SkipData(numskip_after);
@@ -1167,7 +1169,7 @@
 	Common::Rect clip;
 	int32 minx, miny, maxw, maxh;
 	int32 skip_x, skip_y, cur_x, cur_y;
-	byte transparency = (_vm->_game.heversion >= 61) ? palette[0] : 255;
+	byte transparency = (_vm->_game.heversion >= 61) ? _palette[0] : 255;
 
 	if (_actorHitMode) {
 		error("codec16: _actorHitMode not yet implemented");

Modified: scummvm/trunk/engines/scumm/akos.h
===================================================================
--- scummvm/trunk/engines/scumm/akos.h	2007-03-10 13:20:30 UTC (rev 26053)
+++ scummvm/trunk/engines/scumm/akos.h	2007-03-10 13:26:39 UTC (rev 26054)
@@ -55,25 +55,27 @@
 
 class AkosRenderer : public BaseCostumeRenderer {
 protected:
-	uint16 codec;
+	uint16 _codec;
 
-	// actor palette
-	byte palette[256];
-	bool useBompPalette;
+	// actor _palette
+	byte _palette[256];
+	bool _useBompPalette;
 
 	// pointer to various parts of the costume resource
-	const byte *akos;
-	const AkosHeader *akhd;
+	const AkosHeader *akhd;	// header
 
-	const byte *akpl, *akci, *aksq;
-	const AkosOffset *akof;
-	const byte *akcd;
-	const byte *akct;
-	const uint8 *xmap;
+	const byte *akpl;		// palette data
+	const byte *akci;		// CostumeInfo table
+	const byte *aksq;		// command sequence
+	const AkosOffset *akof;	// offsets into ci and cd table
+	const byte *akcd;		// costume data (contains the data for the codecs)
 
+	const byte *akct;		// HE specific: condition table
+	const uint8 *xmap;		// HE specific: shadow color table ?!?
+
 	struct {
-		byte unk5;
-		int unk6;
+		bool repeatMode;
+		int repeatCount;
 		byte mask;
 		byte color;
 		byte shift;
@@ -81,12 +83,11 @@
 		byte numbits;
 		const byte *dataptr;
 		byte buffer[336];
-	} akos16;
+	} _akos16;
 
 public:
 	AkosRenderer(ScummEngine *scumm) : BaseCostumeRenderer(scumm) {
-		useBompPalette = false;
-		akos = 0;
+		_useBompPalette = false;
 		akhd = 0;
 		akpl = 0;
 		akci = 0;
@@ -102,7 +103,7 @@
 	int16 _actorHitX, _actorHitY;
 	bool _actorHitResult;
 
-	void setPalette(byte *palette);
+	void setPalette(byte *_palette);
 	void setFacing(const Actor *a);
 	void setCostume(int costume, int shadow);
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list