[Scummvm-cvs-logs] CVS: scummvm/scumm gfx.cpp,2.415,2.416 gfx.h,1.106,1.107 object.cpp,1.209,1.210 saveload.cpp,1.196,1.197 scumm.cpp,1.382,1.383 verbs.cpp,1.121,1.122

Max Horn fingolfin at users.sourceforge.net
Thu Mar 24 16:56:43 CET 2005


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

Modified Files:
	gfx.cpp gfx.h object.cpp saveload.cpp scumm.cpp verbs.cpp 
Log Message:
Cleanup: collect the C64 specific render data into a struct inside class Gdi

Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.cpp,v
retrieving revision 2.415
retrieving revision 2.416
diff -u -d -r2.415 -r2.416
--- gfx.cpp	24 Mar 2005 21:34:32 -0000	2.415
+++ gfx.cpp	25 Mar 2005 00:55:49 -0000	2.416
@@ -811,7 +811,7 @@
 		setGfxUsageBit(s + i, USAGE_BIT_DIRTY);
 
 	if (_version == 1) {
-		gdi._C64ObjectMode = false;
+		gdi._objectMode = false;
 	}
 	if (_heversion >= 70)
 		room = getResourceAddress(rtRoomImage, _roomResource);
@@ -1404,8 +1404,8 @@
 
 		if (_vm->_version == 1) {
 			if (_vm->_features & GF_NES)
-				drawStripNES(dstPtr, vs->pitch, stripnr, y, height, _C64ObjectMode);
-			else if (_C64ObjectMode)
+				drawStripNES(dstPtr, vs->pitch, stripnr, y, height);
+			else if (_objectMode)
 				drawStripC64Object(dstPtr, vs->pitch, stripnr, width, height);
 			else
 				drawStripC64Background(dstPtr, vs->pitch, stripnr, height);
@@ -1454,7 +1454,7 @@
 		if (_vm->_version == 1) {
 			mask_ptr = getMaskBuffer(x, y, 1);
 			if (_vm->_features & GF_NES) {
-				drawStripNESMask(mask_ptr, stripnr, height, _C64ObjectMode);
+				drawStripNESMask(mask_ptr, stripnr, height);
 			} else {
 				drawStripC64Mask(mask_ptr, stripnr, width, height);
 			}
@@ -2041,21 +2041,21 @@
 	} while (y < height);
 }
 
-void Gdi::drawStripNES(byte *dst, int dstPitch, int stripnr, int top, int height, bool isObject) {
+void Gdi::drawStripNES(byte *dst, int dstPitch, int stripnr, int top, int height) {
 //	printf("drawStripNES, pitch=%i, strip=%i, height=%i\n",dstPitch,stripnr,height);
 	top /= 8;
 	height /= 8;
 	int x = stripnr + 2;	// NES version has a 2 tile gap on each edge
 
-	if (isObject)
+	if (_objectMode)
 		x += _NESObj_x; // for objects, need to start at the left edge of the object, not the screen
 	if (x > 63) {
 		debug(0,"NES tried to render invalid strip %i",stripnr);
 		return;
 	}
 	for (int y = top; y < top + height; y++) {
-		int palette = ((isObject ? _NESAttributesObj : _NESAttributes)[((y << 2) & 0x30) | ((x >> 2) & 0xF)] >> (((y & 2) << 1) | (x & 2))) & 0x3;
-		int tile = (isObject ? _NESNametableObj : _NESNametable)[y][x];
+		int palette = ((_objectMode ? _NESAttributesObj : _NESAttributes)[((y << 2) & 0x30) | ((x >> 2) & 0xF)] >> (((y & 2) << 1) | (x & 2))) & 0x3;
+		int tile = (_objectMode ? _NESNametableObj : _NESNametable)[y][x];
 
 		for (int i = 0; i < 8; i++) {
 			byte c0 = _vm->_NESPatTable[1][tile * 16 + i];
@@ -2067,13 +2067,13 @@
 	}
 }
 
-void Gdi::drawStripNESMask(byte *dst, int stripnr, int height, bool isObject) const {
+void Gdi::drawStripNESMask(byte *dst, int stripnr, int height) const {
 	if (!_NEShasmask)
 		return;
 	height /= 8;
 	int x = stripnr + 2;
 
-	if (isObject)
+	if (_objectMode)
 		x += _NESObj_x; // for objects, need to start at the left edge of the object, not the screen
 	if (x > 63) {
 		debug(0,"NES tried to mask invalid strip %i",stripnr);
@@ -2081,7 +2081,7 @@
 	}
 	for (int y = 0; y < height; y++) {
 		// the ? 0xFF : 0x00 here might be backwards - '1' bits indicate that sprites can get hidden
-		byte c = (((isObject ? _NESMasktableObj : _NESMasktable)[y][x >> 3] >> (x & 7)) & 1) ? 0xFF : 0x00;
+		byte c = (((_objectMode ? _NESMasktableObj : _NESMasktable)[y][x >> 3] >> (x & 7)) & 1) ? 0xFF : 0x00;
 		for (int i = 0; i < 8; i++) {
 			*dst = c;
 			dst += _numStrips;
@@ -2093,20 +2093,20 @@
 	int charIdx;
 	height /= 8;
 	for (int y = 0; y < height; y++) {
-		_C64Colors[3] = (_C64ColorMap[y + stripnr * height] & 7);
+		_C64.colors[3] = (_C64.colorMap[y + stripnr * height] & 7);
 		// Check for room color change in V1 zak
 		if (_roomPalette[0] == 255) {
-			_C64Colors[2] = _roomPalette[2];
-			_C64Colors[1] = _roomPalette[1];
+			_C64.colors[2] = _roomPalette[2];
+			_C64.colors[1] = _roomPalette[1];
 		}
 
-		charIdx = _C64PicMap[y + stripnr * height] * 8;
+		charIdx = _C64.picMap[y + stripnr * height] * 8;
 		for (int i = 0; i < 8; i++) {
-			byte c = _C64CharMap[charIdx + i];
-			dst[0] = dst[1] = _C64Colors[(c >> 6) & 3];
-			dst[2] = dst[3] = _C64Colors[(c >> 4) & 3];
-			dst[4] = dst[5] = _C64Colors[(c >> 2) & 3];
-			dst[6] = dst[7] = _C64Colors[(c >> 0) & 3];
+			byte c = _C64.charMap[charIdx + i];
+			dst[0] = dst[1] = _C64.colors[(c >> 6) & 3];
+			dst[2] = dst[3] = _C64.colors[(c >> 4) & 3];
+			dst[4] = dst[5] = _C64.colors[(c >> 2) & 3];
+			dst[6] = dst[7] = _C64.colors[(c >> 0) & 3];
 			dst += dstPitch;
 		}
 	}
@@ -2117,14 +2117,14 @@
 	height /= 8;
 	width /= 8;
 	for (int y = 0; y < height; y++) {
-		_C64Colors[3] = (_C64ObjectMap[(y + height) * width + stripnr] & 7);
-		charIdx = _C64ObjectMap[y * width + stripnr] * 8;
+		_C64.colors[3] = (_C64.objectMap[(y + height) * width + stripnr] & 7);
+		charIdx = _C64.objectMap[y * width + stripnr] * 8;
 		for (int i = 0; i < 8; i++) {
-			byte c = _C64CharMap[charIdx + i];
-			dst[0] = dst[1] = _C64Colors[(c >> 6) & 3];
-			dst[2] = dst[3] = _C64Colors[(c >> 4) & 3];
-			dst[4] = dst[5] = _C64Colors[(c >> 2) & 3];
-			dst[6] = dst[7] = _C64Colors[(c >> 0) & 3];
+			byte c = _C64.charMap[charIdx + i];
+			dst[0] = dst[1] = _C64.colors[(c >> 6) & 3];
+			dst[2] = dst[3] = _C64.colors[(c >> 4) & 3];
+			dst[4] = dst[5] = _C64.colors[(c >> 2) & 3];
+			dst[6] = dst[7] = _C64.colors[(c >> 0) & 3];
 			dst += dstPitch;
 		}
 	}
@@ -2135,12 +2135,12 @@
 	height /= 8;
 	width /= 8;
 	for (int y = 0; y < height; y++) {
-		if (_C64ObjectMode)
-			maskIdx = _C64ObjectMap[(y + 2 * height) * width + stripnr] * 8;
+		if (_objectMode)
+			maskIdx = _C64.objectMap[(y + 2 * height) * width + stripnr] * 8;
 		else
-			maskIdx = _C64MaskMap[y + stripnr * height] * 8;
+			maskIdx = _C64.maskMap[y + stripnr * height] * 8;
 		for (int i = 0; i < 8; i++) {
-			byte c = _C64MaskChar[maskIdx + i];
+			byte c = _C64.maskChar[maskIdx + i];
 
 			// V1/C64 masks are inverted compared to what ScummVM expects
 			*dst = c ^ 0xFF;

Index: gfx.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.h,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -d -r1.106 -r1.107
--- gfx.h	22 Mar 2005 21:07:00 -0000	1.106
+++ gfx.h	25 Mar 2005 00:55:55 -0000	1.107
@@ -208,7 +208,6 @@
 	int _numZBuffer;
 	int _imgBufOffs[8];
 	int32 _numStrips;
-	byte _C64Colors[4];
 	
 	Gdi(ScummEngine *vm);
 
@@ -225,9 +224,15 @@
 
 	bool _zbufferDisabled;
 
-	byte _C64CharMap[2048], _C64ObjectMap[2048], _C64PicMap[4096], _C64ColorMap[4096];
-	byte _C64MaskMap[4096], _C64MaskChar[4096];
-	bool _C64ObjectMode;
+	/** Flag which is true when an object is being rendered, false otherwise. */
+	bool _objectMode;
+
+	/** Render settings which are specific to the C64 graphic decoders. */
+	struct {
+		byte colors[4];
+		byte charMap[2048], objectMap[2048], picMap[4096], colorMap[4096];
+		byte maskMap[4096], maskChar[4096];
+	} _C64;
 
 	byte _NESBaseTiles;
 	byte _NESNametable[16][64], _NESNametableObj[16][64];
@@ -242,7 +247,7 @@
 	void drawStripEGA(byte *dst, int dstPitch, const byte *src, int height) const;
 	void drawStripC64Object(byte *dst, int dstPitch, int stripnr, int width, int height);
 	void drawStripC64Background(byte *dst, int dstPitch, int stripnr, int height);
-	void drawStripNES(byte *dst, int dstPitch, int stripnr, int top, int height, bool isObject);
+	void drawStripNES(byte *dst, int dstPitch, int stripnr, int top, int height);
 
 	void drawStripComplex(byte *dst, int dstPitch, const byte *src, int height, const bool transpCheck) const;
 	void drawStripBasicH(byte *dst, int dstPitch, const byte *src, int height, const bool transpCheck) const;
@@ -259,7 +264,7 @@
 
 	/* Mask decompressors */
 	void drawStripC64Mask(byte *dst, int stripnr, int width, int height) const;
-	void drawStripNESMask(byte *dst, int stripnr, int height, bool isObject) const;
+	void drawStripNESMask(byte *dst, int stripnr, int height) const;
 	void decompressMaskImgOr(byte *dst, const byte *src, int height) const;
 	void decompressMaskImg(byte *dst, const byte *src, int height) const;
 

Index: object.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/object.cpp,v
retrieving revision 1.209
retrieving revision 1.210
diff -u -d -r1.209 -r1.210
--- object.cpp	16 Mar 2005 02:14:35 -0000	1.209
+++ object.cpp	25 Mar 2005 00:56:02 -0000	1.210
@@ -481,11 +481,11 @@
 		byte flags = od.flags;
 
 		if (_version == 1) {
-			gdi._C64ObjectMode = true;
+			gdi._objectMode = true;
 			if (_features & GF_NES) {
 				gdi.decodeNESObject(ptr, xpos, ypos, width, height);
 			} else {
-				gdi.decodeC64Gfx(ptr, gdi._C64ObjectMap, width * (height / 8) * 3);
+				gdi.decodeC64Gfx(ptr, gdi._C64.objectMap, width * (height / 8) * 3);
 			}
 		}
 		// Sam & Max needs this to fix object-layering problems with

Index: saveload.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/saveload.cpp,v
retrieving revision 1.196
retrieving revision 1.197
diff -u -d -r1.196 -r1.197
--- saveload.cpp	15 Mar 2005 21:20:44 -0000	1.196
+++ saveload.cpp	25 Mar 2005 00:56:02 -0000	1.197
@@ -288,14 +288,14 @@
 		roomptr = getResourceAddress(rtRoom, _roomResource);
 		_IM00_offs = 0;
 		for (i = 0; i < 4; i++){
-			gdi._C64Colors[i] = roomptr[6 + i];
+			gdi._C64.colors[i] = roomptr[6 + i];
 		}
-		gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 10), gdi._C64CharMap, 2048);
-		gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 12), gdi._C64PicMap, roomptr[4] * roomptr[5]);
-		gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 14), gdi._C64ColorMap, roomptr[4] * roomptr[5]);
-		gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 16), gdi._C64MaskMap, roomptr[4] * roomptr[5]);
-		gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 18) + 2, gdi._C64MaskChar, READ_LE_UINT16(roomptr + READ_LE_UINT16(roomptr + 18)));
-		gdi._C64ObjectMode = true;
+		gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 10), gdi._C64.charMap, 2048);
+		gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 12), gdi._C64.picMap, roomptr[4] * roomptr[5]);
+		gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 14), gdi._C64.colorMap, roomptr[4] * roomptr[5]);
+		gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 16), gdi._C64.maskMap, roomptr[4] * roomptr[5]);
+		gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 18) + 2, gdi._C64.maskChar, READ_LE_UINT16(roomptr + READ_LE_UINT16(roomptr + 18)));
+		gdi._objectMode = true;
 	} else if (_version == 2) {
 		_roomStrips = gdi.generateStripTable(getResourceAddress(rtRoom, _roomResource) + _IM00_offs,
 		                                     _roomWidth, _roomHeight, _roomStrips);

Index: scumm.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.cpp,v
retrieving revision 1.382
retrieving revision 1.383
diff -u -d -r1.382 -r1.383
--- scumm.cpp	25 Mar 2005 00:37:14 -0000	1.382
+++ scumm.cpp	25 Mar 2005 00:56:02 -0000	1.383
@@ -2307,14 +2307,14 @@
 		} else {
 			_IM00_offs = 0;
 			for (i = 0; i < 4; i++){
-				gdi._C64Colors[i] = roomptr[6 + i];
+				gdi._C64.colors[i] = roomptr[6 + i];
 			}
-			gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 10), gdi._C64CharMap, 2048);
-			gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 12), gdi._C64PicMap, roomptr[4] * roomptr[5]);
-			gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 14), gdi._C64ColorMap, roomptr[4] * roomptr[5]);
-			gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 16), gdi._C64MaskMap, roomptr[4] * roomptr[5]);
-			gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 18) + 2, gdi._C64MaskChar, READ_LE_UINT16(roomptr + READ_LE_UINT16(roomptr + 18)));
-			gdi._C64ObjectMode = true;
+			gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 10), gdi._C64.charMap, 2048);
+			gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 12), gdi._C64.picMap, roomptr[4] * roomptr[5]);
+			gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 14), gdi._C64.colorMap, roomptr[4] * roomptr[5]);
+			gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 16), gdi._C64.maskMap, roomptr[4] * roomptr[5]);
+			gdi.decodeC64Gfx(roomptr + READ_LE_UINT16(roomptr + 18) + 2, gdi._C64.maskChar, READ_LE_UINT16(roomptr + READ_LE_UINT16(roomptr + 18)));
+			gdi._objectMode = true;
 		}
 	} else if (_features & GF_OLD_BUNDLE) {
 		_IM00_offs = READ_LE_UINT16(roomptr + 0x0A);

Index: verbs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/verbs.cpp,v
retrieving revision 1.121
retrieving revision 1.122
diff -u -d -r1.121 -r1.122
--- verbs.cpp	24 Mar 2005 21:34:35 -0000	1.121
+++ verbs.cpp	25 Mar 2005 00:56:03 -0000	1.122
@@ -579,8 +579,8 @@
 	}
 	assert(imptr);
 	if (_version == 1) {
-		gdi._C64ObjectMode = true;
-		gdi.decodeC64Gfx(imptr, gdi._C64ObjectMap, imgw * imgh * 3);
+		gdi._objectMode = true;
+		gdi.decodeC64Gfx(imptr, gdi._C64.objectMap, imgw * imgh * 3);
 	}
 	for (i = 0; i < imgw; i++) {
 		tmp = xstrip + i;





More information about the Scummvm-git-logs mailing list