[Scummvm-cvs-logs] CVS: scummvm/scumm gfx.cpp,2.201,2.202 resource_v2.cpp,1.27,1.28 resource_v3.cpp,1.20,1.21 script_v2.cpp,2.187,2.188 script_v5.cpp,1.157,1.158 scumm.h,1.289,1.290 scummvm.cpp,2.352,2.353

Travis Howell kirben at users.sourceforge.net
Tue Aug 26 18:13:03 CEST 2003


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

Modified Files:
	gfx.cpp resource_v2.cpp resource_v3.cpp script_v2.cpp 
	script_v5.cpp scumm.h scummvm.cpp 
Log Message:

Fix room palette issues in small_header games.
Fix is only for EGA games so far.


Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.cpp,v
retrieving revision 2.201
retrieving revision 2.202
diff -u -d -r2.201 -r2.202
--- gfx.cpp	26 Aug 2003 15:56:37 -0000	2.201
+++ gfx.cpp	27 Aug 2003 01:12:17 -0000	2.202
@@ -1050,7 +1050,7 @@
 						run = data >> 4;
 						dither = false;
 					}
-					color = data & 0x0f;
+					color = _vm->_roomPalette[data & 0x0f];
 					if (run == 0) {
 						run = *src++;
 					}
@@ -1346,10 +1346,10 @@
 	height >>= 3;
 	for (int y = 0; y < height; y++) {
 		_C64Colors[3] = (_C64ColorMap[y + stripnr * height] & 7);
-		if (_vm->_shadowPalette[0] == 255) {
-			_vm->_shadowPalette[0] = 0;
-			_C64Colors[2] = _vm->_shadowPalette[2];
-			_C64Colors[1] = _vm->_shadowPalette[1];
+		if (_vm->_roomPalette[0] == 255) {
+			_vm->_roomPalette[0] = 0;
+			_C64Colors[2] = _vm->_roomPalette[2];
+			_C64Colors[1] = _vm->_roomPalette[1];
 		}
 		charIdx = _C64PicMap[y + stripnr * height] * 8;
 		for (int i = 0; i < 8; i++) {
@@ -1448,7 +1448,7 @@
 					run = *src++;
 				}
 				for (z = 0; z < run; z++) {
-					*(dst + y * _vm->_screenWidth + x) = (z&1) ? ((color & 0xf) + _palette_mod) : ((color >> 4) + _palette_mod);
+					*(dst + y * _vm->_screenWidth + x) = (z&1) ? _vm->_roomPalette[((color & 0xf) + _palette_mod)] : _vm->_roomPalette[((color >> 4) + _palette_mod)];
 
 					y++;
 					if (y >= height) {
@@ -1478,7 +1478,7 @@
 			}
 			
 			for (z = 0; z < run; z++) {
-				*(dst + y * _vm->_screenWidth + x) = (color & 0xf) + _palette_mod;
+				*(dst + y * _vm->_screenWidth + x) = _vm->_roomPalette[(color & 0xf) + _palette_mod];
 
 				y++;
 				if (y >= height) {
@@ -3344,7 +3344,7 @@
 	for (i = _palDirtyMin; i <= _palDirtyMax; i++) {
 		byte *data;
 
-		if (_features & GF_SMALL_HEADER && _version > 1)
+		if (_features & GF_SMALL_HEADER && _version > 2)
 			data = _currentPalette + _shadowPalette[i] * 3;
 		else
 			data = _currentPalette + i * 3;

Index: resource_v2.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/resource_v2.cpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- resource_v2.cpp	17 Aug 2003 16:23:44 -0000	1.27
+++ resource_v2.cpp	27 Aug 2003 01:12:17 -0000	1.28
@@ -197,6 +197,7 @@
 
 	_shadowPaletteSize = 256;
 
+	_roomPalette = (byte *) calloc(_shadowPaletteSize, 1);		// FIXME - needs to be removed later
 	_shadowPalette = (byte *) calloc(_shadowPaletteSize, 1);	// FIXME - needs to be removed later
 	allocateArrays();
 }

Index: resource_v3.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/resource_v3.cpp,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- resource_v3.cpp	6 Aug 2003 12:04:27 -0000	1.20
+++ resource_v3.cpp	27 Aug 2003 01:12:17 -0000	1.21
@@ -207,6 +207,7 @@
 
 	_shadowPaletteSize = 256;
 
+	_roomPalette = (byte *) calloc(_shadowPaletteSize, 1);		// FIXME - needs to be removed later
 	_shadowPalette = (byte *) calloc(_shadowPaletteSize, 1);	// FIXME - needs to be removed later
 	allocateArrays();
 }

Index: script_v2.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v2.cpp,v
retrieving revision 2.187
retrieving revision 2.188
diff -u -d -r2.187 -r2.188
--- script_v2.cpp	26 Aug 2003 15:56:37 -0000	2.187
+++ script_v2.cpp	27 Aug 2003 01:12:17 -0000	2.188
@@ -1334,11 +1334,11 @@
 		break;
 	case 2:											/* room color */
 		if (_version == 1) {
-			_shadowPalette[0] = 255;
-			_shadowPalette[1] = a;
-			_shadowPalette[2] = b;
+			_roomPalette[0] = 255;
+			_roomPalette[1] = a;
+			_roomPalette[2] = b;
 		} else {
-			_shadowPalette[b] = a;
+			_roomPalette[b] = a;
 			_fullRedraw = true;
 		}
 		break;

Index: script_v5.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v5.cpp,v
retrieving revision 1.157
retrieving revision 1.158
diff -u -d -r1.157 -r1.158
--- script_v5.cpp	23 Aug 2003 16:30:32 -0000	1.157
+++ script_v5.cpp	27 Aug 2003 01:12:17 -0000	1.158
@@ -1666,8 +1666,12 @@
 			// for GF_SMALL_HEADER games. Needs investigation.
 //			printf("copyPalColor(%d, %d)\n", a, b);
 //			copyPalColor(a, b);
-			_shadowPalette[b] = a;
-			setDirtyColors(b, b);
+			if (_features & GF_16COLOR) {
+				_roomPalette[b] = a;
+			} else {
+				_shadowPalette[b] = a;
+				setDirtyColors(b, b);
+			}
 		} else {
 			error("room-color is no longer a valid command");
 		}

Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.289
retrieving revision 1.290
diff -u -d -r1.289 -r1.290
--- scumm.h	24 Aug 2003 17:37:28 -0000	1.289
+++ scumm.h	27 Aug 2003 01:12:18 -0000	1.290
@@ -1001,6 +1001,7 @@
 
 public:
 	byte _proc_special_palette[256];
+	byte *_roomPalette;
 	byte *_shadowPalette;
 	int _midiDriver; // Use the MD_ values from mididrv.h
 

Index: scummvm.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scummvm.cpp,v
retrieving revision 2.352
retrieving revision 2.353
diff -u -d -r2.352 -r2.353
--- scummvm.cpp	26 Aug 2003 06:35:38 -0000	2.352
+++ scummvm.cpp	27 Aug 2003 01:12:18 -0000	2.353
@@ -376,6 +376,7 @@
 	_palManipPalette = NULL;
 	_palManipIntermediatePal = NULL;
 	memset(gfxUsageBits, 0, sizeof(gfxUsageBits));
+	_roomPalette = NULL;
 	_shadowPalette = NULL;
 	_shadowPaletteSize = 0;
 	memset(_currentPalette, 0, sizeof(_currentPalette));
@@ -723,6 +724,7 @@
 
 	delete _costumeRenderer;
 
+	free(_roomPalette);
 	free(_shadowPalette);
 	
 	freeResources();
@@ -880,14 +882,16 @@
 
 	if (_version == 1) {
 		for (i = 0; i < 16; i++)
-			_shadowPalette[i] = i;
+			_roomPalette[i] = i;
 		if (_gameId == GID_MANIAC)
 			setupV1ManiacPalette();
 		else
 			setupV1ZakPalette();
 	} else if (_features & GF_16COLOR) {
-		for (i = 0; i < 16; i++)
+		for (i = 0; i < 16; i++) {
+			_roomPalette[i] = i;
 			_shadowPalette[i] = i;
+		}
 		if (_features & GF_AMIGA)
 			setupAmigaPalette();
 		else
@@ -1786,8 +1790,11 @@
 	}
 
 	if (_version < 7) {
-		for (i = 0; i < 256; i++)
+		for (i = 0; i < 256; i++) {
+			if (_features & GF_SMALL_HEADER)
+				_roomPalette[i] = i;
 			_shadowPalette[i] = i;
+		}
 		if (_features & GF_SMALL_HEADER)
 			setDirtyColors(0, 255);
 	}





More information about the Scummvm-git-logs mailing list