[Scummvm-cvs-logs] CVS: scummvm/scumm actor.cpp,1.329,1.330 akos.h,1.35,1.36 base-costume.cpp,2.27,2.28 base-costume.h,1.36,1.37 costume.cpp,1.171,1.172 costume.h,1.34,1.35 scumm.h,1.549,1.550

Max Horn fingolfin at users.sourceforge.net
Sat Mar 26 16:43:35 CET 2005


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23535

Modified Files:
	actor.cpp akos.h base-costume.cpp base-costume.h costume.cpp 
	costume.h scumm.h 
Log Message:
More costume code restructuring

Index: actor.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/actor.cpp,v
retrieving revision 1.329
retrieving revision 1.330
diff -u -d -r1.329 -r1.330
--- actor.cpp	27 Mar 2005 00:23:37 -0000	1.329
+++ actor.cpp	27 Mar 2005 00:42:48 -0000	1.330
@@ -1128,7 +1128,7 @@
 	if (_animProgress >= _animSpeed) {
 		_animProgress = 0;
 		
-		BaseCostume *cost = 0;
+		BaseCostumeLoader *cost = 0;
 
 		if (_vm->_features & GF_NEW_COSTUMES) {
 			byte *akos = _vm->getResourceAddress(rtCostume, _costume);
@@ -1138,9 +1138,9 @@
 			}
 		} else {
 			if (_vm->_features & GF_NES)
-				cost = new NESCostume(_vm);
+				cost = new NESCostumeLoader(_vm);
 			else
-				cost = new ClassicCostume(_vm);
+				cost = new ClassicCostumeLoader(_vm);
 			cost->loadCostume(_costume);
 			if (cost->increaseAnims(this)) {
 				_needRedraw = true;

Index: akos.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/akos.h,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- akos.h	27 Mar 2005 00:23:37 -0000	1.35
+++ akos.h	27 Mar 2005 00:42:50 -0000	1.36
@@ -38,10 +38,15 @@
 struct AkosOffset;
 
 /* TODO:
-class AkosCostume : public BaseCostume {
+class AkosCostumeLoader : public BaseCostumeLoader {
 public:
+	AkosCostumeLoader(ScummEngine *vm);
+
 	void loadCostume(int id);
 	byte increaseAnims(Actor *a);
+	void costumeDecodeData(Actor *a, int frame, uint usemask);
+	
+	//void animateLimb(int limb, int f);
 };
 */
 

Index: base-costume.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/base-costume.cpp,v
retrieving revision 2.27
retrieving revision 2.28
diff -u -d -r2.27 -r2.28
--- base-costume.cpp	27 Mar 2005 00:23:37 -0000	2.27
+++ base-costume.cpp	27 Mar 2005 00:42:50 -0000	2.28
@@ -22,6 +22,7 @@
 
 #include "stdafx.h"
 #include "scumm/base-costume.h"
+#include "scumm/costume.h"
 
 namespace Scumm {
 
@@ -88,12 +89,17 @@
 }
 
 void ScummEngine::costumeDecodeData(Actor *a, int frame, uint usemask) {
+	// TODO: This should eventually become a method of the appropriate
+	// BaseCostumeLoader subclasses.
 	if (_features & GF_NEW_COSTUMES)
 		akos_decodeData(a, frame, usemask);
-	else if (_features & GF_NES)
-		NES_cost_decodeData(a, frame, usemask);
-	else
-		cost_decodeData(a, frame, usemask);
+	else if (_features & GF_NES) {
+		NESCostumeLoader lc(this);
+		lc.costumeDecodeData(a, frame, usemask);
+	} else {
+		ClassicCostumeLoader lc(this);
+		lc.costumeDecodeData(a, frame, usemask);
+	}
 }
 
 } // End of namespace Scumm

Index: base-costume.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/base-costume.h,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- base-costume.h	27 Mar 2005 00:23:37 -0000	1.36
+++ base-costume.h	27 Mar 2005 00:42:51 -0000	1.37
@@ -46,12 +46,17 @@
 class ScummEngine;
 struct VirtScreen;
 
-class BaseCostume {
+class BaseCostumeLoader {
+protected:
+	ScummEngine *_vm;
+
 public:
-	virtual ~BaseCostume() {}
+	BaseCostumeLoader(ScummEngine *vm) : _vm(vm) {}
+	virtual ~BaseCostumeLoader() {}
 	
 	virtual void loadCostume(int id) = 0;
 	virtual byte increaseAnims(Actor *a) = 0;
+	virtual void costumeDecodeData(Actor *a, int frame, uint usemask) = 0;
 };
 
 

Index: costume.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/costume.cpp,v
retrieving revision 1.171
retrieving revision 1.172
diff -u -d -r1.171 -r1.172
--- costume.cpp	27 Mar 2005 00:23:37 -0000	1.171
+++ costume.cpp	27 Mar 2005 00:42:52 -0000	1.172
@@ -74,6 +74,15 @@
 };
 #endif
 
+static const int v1MMNESLookup[25] = {
+	0x00, 0x03, 0x01, 0x06, 0x08,
+	0x02, 0x00, 0x07, 0x0C, 0x04,
+	0x09, 0x0A, 0x12, 0x0B, 0x14,
+	0x0D, 0x11, 0x0F, 0x0E, 0x10,
+	0x17, 0x00, 0x01, 0x05, 0x16 
+};
+
+
 byte ClassicCostumeRenderer::mainRoutine(int xmoveCur, int ymoveCur) {
 	int i, skip = 0;
 	byte drawFlag = 1;
@@ -564,46 +573,7 @@
 	} while (1);
 }
 
-static const int v1MMNESLookup[25] = {
-	0x00, 0x03, 0x01, 0x06, 0x08,
-	0x02, 0x00, 0x07, 0x0C, 0x04,
-	0x09, 0x0A, 0x12, 0x0B, 0x14,
-	0x0D, 0x11, 0x0F, 0x0E, 0x10,
-	0x17, 0x00, 0x01, 0x05, 0x16 
-};
-
-/**
- * costume ID -> v1MMNESLookup[] -> desc -> lens & offs -> data -> Gfx & pal
- */
-void NESCostume::loadCostume(int id) {
-	const byte *src;
-	int frameset, framenum;
-	int offset;
-
-	_id = id;
-	_baseptr = _vm->getResourceAddress(rtCostume, id);
-
-	_format = 0x01;
-	_mirror = 0;
-	_dataOffsets = _baseptr + 4;
-
-	frameset = 0;
-	framenum = 0;
-
-	src = _dataOffsets;
-	// Cost(a)
-	offset = src[(frameset * 4 + framenum) * 2];
-
-	// Lookup & desc
-	offset = READ_LE_UINT16(_vm->_NEScostdesc + v1MMNESLookup[_id] * 2);
-	if (v1MMNESLookup[_id] * 2 + 2 < READ_LE_UINT16(_vm->_NEScostdesc - 2)) {
-		_numAnim = (READ_LE_UINT16(_vm->_NEScostdesc + v1MMNESLookup[_id] * 2 + 2) - offset);
-	} else {
-		_numAnim = ((READ_LE_UINT16(_vm->_NEScostlens - 2) - 2) - offset);
-	}
-}
-
-void ClassicCostume::loadCostume(int id) {
+void ClassicCostumeLoader::loadCostume(int id) {
 	_id = id;
 	byte *ptr = _vm->getResourceAddress(rtCostume, id);
 
@@ -824,54 +794,36 @@
 }
 
 void NESCostumeRenderer::setFacing(const Actor *a) {
-	_mirror = newDirToOldDir(a->getFacing()) != 0 || _loaded._mirror;
+	// TODO
+	//_mirror = newDirToOldDir(a->getFacing()) != 0 || _loaded._mirror;
 }
 
 void NESCostumeRenderer::setCostume(int costume) {
 	_loaded.loadCostume(costume);
 }
 
-void ScummEngine::NES_cost_decodeData(Actor *a, int frame, uint usemask) {
-	int anim;
-	NESCostume lc(this);
-
-	lc.loadCostume(a->_costume);
-
-	anim = newDirToOldDir(a->getFacing()) + frame * 4;
-
-	if (anim > lc._numAnim) {
-		return;
-	}
-
-	a->_cost.curpos[0] = 0;
-	a->_cost.start[0] = 0;
-	a->_cost.end[0] = lc._baseptr[2 + 8 * frame + 2 * newDirToOldDir(a->getFacing()) + 1];
-	a->_cost.frame[0] = frame;
-}
-
-void ScummEngine::cost_decodeData(Actor *a, int frame, uint usemask) {
+void ClassicCostumeLoader::costumeDecodeData(Actor *a, int frame, uint usemask) {
 	const byte *r;
 	uint mask, j;
 	int i;
 	byte extra, cmd;
 	int anim;
-	ClassicCostume lc(this);
 
-	lc.loadCostume(a->_costume);
+	loadCostume(a->_costume);
 
 	anim = newDirToOldDir(a->getFacing()) + frame * 4;
 
-	if (anim > lc._numAnim) {
+	if (anim > _numAnim) {
 		return;
 	}
 
-	r = lc._baseptr + READ_LE_UINT16(lc._dataOffsets + anim * 2);
+	r = _baseptr + READ_LE_UINT16(_dataOffsets + anim * 2);
 
-	if (r == lc._baseptr) {
+	if (r == _baseptr) {
 		return;
 	}
 
-	if (_version == 1) {
+	if (_vm->_version == 1) {
 		mask = *r++ << 8;
 	} else {
 		mask = READ_LE_UINT16(r);
@@ -880,7 +832,7 @@
 	i = 0;
 	do {
 		if (mask & 0x8000) {
-			if (_version <= 3) {
+			if (_vm->_version <= 3) {
 				j = *r++;
 
 				if (j == 0xFF)
@@ -896,7 +848,7 @@
 					a->_cost.frame[i] = frame;
 				} else {
 					extra = *r++;
-					cmd = lc._animCmds[j];
+					cmd = _animCmds[j];
 					if (cmd == 0x7A) {
 						a->_cost.stopped &= ~(1 << i);
 					} else if (cmd == 0x79) {
@@ -957,7 +909,7 @@
 	_loaded.loadCostume(costume);
 }
 
-byte ClassicCostume::increaseAnims(Actor *a) {
+byte ClassicCostumeLoader::increaseAnims(Actor *a) {
 	int i;
 	byte r = 0;
 
@@ -968,14 +920,7 @@
 	return r;
 }
 
-byte NESCostume::increaseAnim(Actor *a, int slot) {
-	a->_cost.curpos[slot]++;
-	if (a->_cost.curpos[slot] >= a->_cost.end[slot])
-		a->_cost.curpos[slot] = a->_cost.start[slot];
-	return 0;
-}
-
-byte ClassicCostume::increaseAnim(Actor *a, int slot) {
+byte ClassicCostumeLoader::increaseAnim(Actor *a, int slot) {
 	int highflag;
 	int i, end;
 	byte code, nc;
@@ -1029,6 +974,71 @@
 	} while (1);
 }
 
+/**
+ * costume ID -> v1MMNESLookup[] -> desc -> lens & offs -> data -> Gfx & pal
+ */
+void NESCostumeLoader::loadCostume(int id) {
+	const byte *src;
+	int frameset, framenum;
+	int offset;
+
+	_id = id;
+	_baseptr = _vm->getResourceAddress(rtCostume, id);
+
+	_dataOffsets = _baseptr + 4;
+
+	frameset = 0;
+	framenum = 0;
+
+	src = _dataOffsets;
+	// Cost(a)
+	offset = src[(frameset * 4 + framenum) * 2];
+
+	// Lookup & desc
+	offset = READ_LE_UINT16(_vm->_NEScostdesc + v1MMNESLookup[_id] * 2);
+	if (v1MMNESLookup[_id] * 2 + 2 < READ_LE_UINT16(_vm->_NEScostdesc - 2)) {
+		_numAnim = (READ_LE_UINT16(_vm->_NEScostdesc + v1MMNESLookup[_id] * 2 + 2) - offset);
+	} else {
+		_numAnim = ((READ_LE_UINT16(_vm->_NEScostlens - 2) - 2) - offset);
+	}
+}
+
+void NESCostumeLoader::costumeDecodeData(Actor *a, int frame, uint usemask) {
+	int anim;
+
+	loadCostume(a->_costume);
+
+	anim = newDirToOldDir(a->getFacing()) + frame * 4;
+
+	if (anim > _numAnim) {
+		return;
+	}
+
+	a->_cost.curpos[0] = 0;
+	a->_cost.start[0] = 0;
+	a->_cost.end[0] = _baseptr[2 + 8 * frame + 2 * newDirToOldDir(a->getFacing()) + 1];
+	a->_cost.frame[0] = frame;
+}
+
+byte NESCostumeLoader::increaseAnims(Actor *a) {
+	int i;
+	byte r = 0;
+
+	for (i = 0; i != 16; i++) {
+		if (a->_cost.curpos[i] != 0xFFFF)
+			r += increaseAnim(a, i);
+	}
+	return r;
+}
+
+byte NESCostumeLoader::increaseAnim(Actor *a, int slot) {
+	a->_cost.curpos[slot]++;
+	if (a->_cost.curpos[slot] >= a->_cost.end[slot])
+		a->_cost.curpos[slot] = a->_cost.start[slot];
+	return 0;
+}
+
+
 } // End of namespace Scumm
 
 #ifdef __PALM_OS__

Index: costume.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/costume.h,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- costume.h	27 Mar 2005 00:23:38 -0000	1.34
+++ costume.h	27 Mar 2005 00:42:53 -0000	1.35
@@ -25,10 +25,7 @@
 
 namespace Scumm {
 
-class ClassicCostume : public BaseCostume {
-protected:
-	ScummEngine *_vm;
-
+class ClassicCostumeLoader : public BaseCostumeLoader {
 public:
 	int _id;
 	const byte *_baseptr;
@@ -41,21 +38,30 @@
 	byte _format;
 	bool _mirror;
 
-	ClassicCostume(ScummEngine *vm) :
-		_vm(vm), _id(-1), _baseptr(0), _animCmds(0), _dataOffsets(0), _palette(0),
+	ClassicCostumeLoader(ScummEngine *vm) :
+		BaseCostumeLoader(vm),
+		_id(-1), _baseptr(0), _animCmds(0), _dataOffsets(0), _palette(0),
 		_frameOffsets(0), _numColors(0), _numAnim(0), _format(0), _mirror(false) {}
 
 	void loadCostume(int id);
+	void costumeDecodeData(Actor *a, int frame, uint usemask);
 	byte increaseAnims(Actor *a);
 
 protected:
 	byte increaseAnim(Actor *a, int slot);
 };
 
-class NESCostume : public ClassicCostume {
+class NESCostumeLoader : public BaseCostumeLoader {
 public:
-	NESCostume(ScummEngine *vm) : ClassicCostume(vm) {}
+	int _id;
+	const byte *_baseptr;
+	const byte *_dataOffsets;
+	byte _numAnim;
+
+	NESCostumeLoader(ScummEngine *vm) : BaseCostumeLoader(vm) {}
 	void loadCostume(int id);
+	void costumeDecodeData(Actor *a, int frame, uint usemask);
+	byte increaseAnims(Actor *a);
 
 protected:
 	byte increaseAnim(Actor *a, int slot);
@@ -63,7 +69,7 @@
 
 class ClassicCostumeRenderer : public BaseCostumeRenderer {
 protected:
-	ClassicCostume _loaded;
+	ClassicCostumeLoader _loaded;
 	
 	byte _scaleIndexX;						/* must wrap at 256 */
 	byte _scaleIndexY;
@@ -89,7 +95,7 @@
 
 class NESCostumeRenderer : public BaseCostumeRenderer {
 protected:
-	NESCostume _loaded;
+	NESCostumeLoader _loaded;
 
 public:
 	NESCostumeRenderer(ScummEngine *vm) : BaseCostumeRenderer(vm), _loaded(vm) {}

Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.549
retrieving revision 1.550
diff -u -d -r1.549 -r1.550
--- scumm.h	27 Mar 2005 00:23:38 -0000	1.549
+++ scumm.h	27 Mar 2005 00:42:53 -0000	1.550
@@ -848,13 +848,6 @@
 	void costumeDecodeData(Actor *a, int frame, uint usemask);
 	bool isCostumeInUse(int i) const;
 
-	// Classic costume class
-	void cost_decodeData(Actor *a, int frame, uint usemask);
-
-	// NEWS costume class
-	void NES_cost_decodeData(Actor *a, int frame, uint usemask);
-	void cost_decodeNESCostumeGfx();
-
 	// Akos Class
 	struct {
 		int16 cmd;





More information about the Scummvm-git-logs mailing list