[Scummvm-cvs-logs] CVS: scummvm/scumm actor.cpp,1.78,1.79 costume.cpp,1.33,1.34 gfx.cpp,2.65,2.66 saveload.cpp,1.61,1.62 script_v5.cpp,1.61,1.62 scumm.h,1.176,1.177 scummvm.cpp,2.120,2.121

Max Horn fingolfin at users.sourceforge.net
Sat May 3 13:50:28 CEST 2003


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

Modified Files:
	actor.cpp costume.cpp gfx.cpp saveload.cpp script_v5.cpp 
	scumm.h scummvm.cpp 
Log Message:
Patch #730800: EGA LOOM: Hack to fix palette problem (also helps MonkeyEGA)

Index: actor.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/actor.cpp,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -d -r1.78 -r1.79
--- actor.cpp	3 May 2003 16:20:18 -0000	1.78
+++ actor.cpp	3 May 2003 20:49:52 -0000	1.79
@@ -975,7 +975,10 @@
 			cr._zbuf = (byte)_vm->gdi._numZBuffer;
 
 		cr._shadow_mode = shadow_mode;
-		cr._shadow_table = _vm->_shadowPalette;
+		if (_vm->_features & GF_SMALL_HEADER)
+			cr._shadow_table = NULL;
+		else
+			cr._shadow_table = _vm->_shadowPalette;
 
 		cr.setCostume(costume);
 		cr.setPalette(palette);

Index: costume.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/costume.cpp,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- costume.cpp	3 May 2003 16:46:47 -0000	1.33
+++ costume.cpp	3 May 2003 20:49:52 -0000	1.34
@@ -385,9 +385,8 @@
 		do {
 			if (color && y < scrheight) {
 				pcolor = _palette[color];
-				if (pcolor == 13) {
+				if (pcolor == 13 && _shadow_table)
 					pcolor = _shadow_table[*dst];
-				}
 				*dst = pcolor;
 			}
 
@@ -434,7 +433,7 @@
 		do {
 			if (color && y < scrheight && !(*mask & maskbit)) {
 				pcolor = _palette[color];
-				if (pcolor == 13)
+				if (pcolor == 13 && _shadow_table)
 					pcolor = _shadow_table[*dst];
 				*dst = pcolor;
 			}
@@ -496,7 +495,7 @@
 		do {
 			if (color && y < scrheight && !((*mask | mask[_imgbufoffs]) & maskbit)) {
 				pcolor = _palette[color];
-				if (pcolor == 13)
+				if (pcolor == 13 && _shadow_table)
 					pcolor = _shadow_table[*dst];
 				*dst = pcolor;
 			}
@@ -559,7 +558,7 @@
 			if (cost_scaleTable[_scaleIndexY++] < _scaleY) {
 				if (color && y < _outheight && !((*mask | mask[_imgbufoffs]) & maskbit)) {
 					pcolor = _palette[color];
-					if (pcolor == 13)
+					if (pcolor == 13 && _shadow_table)
 						pcolor = _shadow_table[*dst];
 					*dst = pcolor;
 				}
@@ -620,7 +619,7 @@
 			if (cost_scaleTable[_scaleIndexY++] < _scaleY) {
 				if (color && y < _outheight && !(*mask & maskbit)) {
 					pcolor = _palette[color];
-					if (pcolor == 13)
+					if (pcolor == 13 && _shadow_table)
 						pcolor = _shadow_table[*dst];
 					*dst = pcolor;
 				}
@@ -681,7 +680,7 @@
 			if (cost_scaleTable[_scaleIndexY++] < _scaleY) {
 				if (color && y < _outheight) {
 					pcolor = _palette[color];
-					if (pcolor == 13)
+					if (pcolor == 13 && _shadow_table)
 						pcolor = _shadow_table[*dst];
 					*dst = pcolor;
 				}
@@ -737,9 +736,8 @@
 		do {
 			if (color && x >= 0 && x < _vm->_realWidth) {
 				pcolor = _palette[color];
-/*				  if (pcolor == 13) {
-					pcolor = _shadow_table[*dst];
-				}*/
+/*				  if (pcolor == 13 && _shadow_table)
+					pcolor = _shadow_table[*dst];*/
 				*dst = pcolor;
 			}
 
@@ -786,7 +784,7 @@
 		do {
 			if (color && x >=0 && x < _vm->_realWidth && !(*mask & maskbit)) {
 				pcolor = _palette[color];
-/*				  if (pcolor == 13)
+/*				  if (pcolor == 13 && _shadow_table)
 					pcolor = _shadow_table[*dst];*/
 				*dst = pcolor;
 			}
@@ -851,7 +849,7 @@
 		do {
 			if (color && x >= 0 && x < _vm->_realWidth && !((*mask | mask[_imgbufoffs]) & maskbit)) {
 				pcolor = _palette[color];
-/*				  if (pcolor == 13)
+/*				  if (pcolor == 13 && _shadow_table)
 					pcolor = _shadow_table[*dst];*/
 				*dst = pcolor;
 			}
@@ -914,7 +912,7 @@
 			if (cost_scaleTable[_scaleIndexY] < _scaleY) {
 				if (color && _xpos >= 0 && _xpos < _vm->_realWidth && !((*mask | mask[_imgbufoffs]) & maskbit)) {
 					pcolor = _palette[color];
-/*					  if (pcolor == 13)
+/*					  if (pcolor == 13 && _shadow_table)
 						pcolor = _shadow_table[*dst];*/
 					*dst = pcolor;
 				}
@@ -978,7 +976,7 @@
 			if (cost_scaleTable[_scaleIndexY] < _scaleY) {
 				if (color && _xpos >= 0 && _xpos < _vm->_realWidth && !(*mask & maskbit)) {
 					pcolor = _palette[color];
-/*					  if (pcolor == 13)
+/*					  if (pcolor == 13 && _shadow_table)
 						pcolor = _shadow_table[*dst];*/
 					*dst = pcolor;
 				}
@@ -1046,7 +1044,7 @@
 			if (cost_scaleTable[_scaleIndexY] < _scaleY) {
 				if (color && _xpos >= 0 && _xpos < _vm->_realWidth) {
 					pcolor = _palette[color];
-/*					  if (pcolor == 13)
+/*					  if (pcolor == 13 && _shadow_table)
 						pcolor = _shadow_table[*dst];*/
 					*dst = pcolor;
 				}

Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.cpp,v
retrieving revision 2.65
retrieving revision 2.66
diff -u -d -r2.65 -r2.66
--- gfx.cpp	30 Apr 2003 21:30:55 -0000	2.65
+++ gfx.cpp	3 May 2003 20:49:52 -0000	2.66
@@ -1085,8 +1085,7 @@
 				}
 				const register byte colors[2] = { color >> 4, color & 0xf };
 				for(z = 0; z < run; z++) {
-
-					*(dst + y * _vm->_realWidth + x) = _vm->_shadowPalette[ colors[z&1] ];
+					*(dst + y * _vm->_realWidth + x) = colors[z&1];
 
 					y++;
 					if(y >= height) {
@@ -1116,7 +1115,7 @@
 			}
 			
 			for(z = 0; z < run; z++) {
-				*(dst + y * _vm->_realWidth + x) = _vm->_shadowPalette[color & 0xf];
+				*(dst + y * _vm->_realWidth + x) = color & 0xf;
 
 				y++;
 				if(y >= height) {
@@ -1222,7 +1221,7 @@
 				if (run == 0) {
 					run = *src++;
 				}
-				color = _vm->_shadowPalette[data & 0x0f];
+				color = data & 0x0f;
 			}
 			if (!dither) {
 				*ptr_dither_table = color;
@@ -1247,7 +1246,7 @@
 				if (run == 0) {
 					run = *src++;
 				}
-				color = _vm->_shadowPalette[data & 0x0f];
+				color = data & 0x0f;
 			}
 			if (!dither) {
 				*ptr_dither_table = color;
@@ -2664,6 +2663,25 @@
 #pragma mark -
 #pragma mark --- Palette ---
 #pragma mark -
+
+void Scumm::setupEGAPalette() {
+	setPalColor( 0,   0,   0,   0);
+	setPalColor( 1,   0,   0, 168);
+	setPalColor( 2,   0, 168,   0);
+	setPalColor( 3,   0, 168, 168);
+	setPalColor( 4, 168,   0,   0);
+	setPalColor( 5, 168,   0, 168);
+	setPalColor( 6, 168,  84,   0);
+	setPalColor( 7, 168, 168, 168);
+	setPalColor( 8,  84,  84,  84);
+	setPalColor( 9,  84,  84, 168);
+	setPalColor(10,   0, 252,   0);
+	setPalColor(11,   0, 252, 252);
+	setPalColor(12, 252,  84,  84);
+	setPalColor(13, 252,   0, 252);
+	setPalColor(14, 252, 252,   0);
+	setPalColor(15, 252, 252, 252);
+}
 
 void Scumm::setPaletteFromPtr(byte *ptr) {
 	int i;

Index: saveload.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/saveload.cpp,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -d -r1.61 -r1.62
--- saveload.cpp	1 May 2003 00:04:05 -0000	1.61
+++ saveload.cpp	3 May 2003 20:49:52 -0000	1.62
@@ -174,8 +174,15 @@
 	initScreens(0, sb, _realWidth, sh);
 
 	_completeScreenRedraw = true;
-	
-	if (!(_features & GF_16COLOR))
+
+	if (_features & GF_16COLOR) {
+		// HACK: There was a time when ScummVM didn't store the
+		// palette in _currentPalette for 16-color games. To avoid
+		// breaking savegame compatibility, always set up the default
+		// palette after loading a game.
+		setupEGAPalette();
+		setDirtyColors(0, 15);
+	} else
 		setDirtyColors(0, 255);
 
 	_lastCodePtr = NULL;

Index: script_v5.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v5.cpp,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -d -r1.61 -r1.62
--- script_v5.cpp	3 May 2003 17:50:04 -0000	1.61
+++ script_v5.cpp	3 May 2003 20:49:52 -0000	1.62
@@ -1672,8 +1672,7 @@
 //			printf("copyPalColor(%d, %d)\n", a, b);
 //			copyPalColor(a, b);
 			_shadowPalette[b] = a;
-			if (!(_features & GF_16COLOR))
-				setDirtyColors(b, b);
+			setDirtyColors(b, b);
 		} else {
 			error("room-color is no longer a valid command");
 		}
@@ -1694,8 +1693,7 @@
 			}
 			checkRange(256, 0, a, "o5_roomOps: 2: Illegal room color slot (%d)");
 			_shadowPalette[b] = a;
-			if (!(_features & GF_16COLOR))
-				setDirtyColors(b, b);
+			setDirtyColors(b, b);
 		} else {
 			a = getVarOrDirectWord(0x80);
 			b = getVarOrDirectWord(0x40);

Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.176
retrieving revision 1.177
diff -u -d -r1.176 -r1.177
--- scumm.h	1 May 2003 00:04:05 -0000	1.176
+++ scumm.h	3 May 2003 20:49:53 -0000	1.177
@@ -806,6 +806,7 @@
 	void clampCameraPos(ScummPoint *pt);
 
 	byte *getPalettePtr();
+	void setupEGAPalette();
 	void setPalette(int pal);
 	void setPaletteFromPtr(byte *ptr);
 	void setPaletteFromRes();

Index: scummvm.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scummvm.cpp,v
retrieving revision 2.120
retrieving revision 2.121
diff -u -d -r2.120 -r2.121
--- scummvm.cpp	1 May 2003 21:41:31 -0000	2.120
+++ scummvm.cpp	3 May 2003 20:49:53 -0000	2.121
@@ -544,13 +544,9 @@
 	}
 
 	if (_features & GF_16COLOR) {
-		byte pal16[16 * 4] = {
-			0,   0,  0,  0,   0,   0,  168, 0,   0,   168, 0,  0,   0,   168, 168, 0,
-			168, 0,  0,  0,   168, 0,  168, 0,   168, 84,  0,  0,   168, 168, 168, 0,
-			84,  84, 84, 0,   84,  84, 168, 0,   0,   252, 0,  0,   0,   252, 252, 0,
-			252, 84, 84, 0,   252, 0,  252, 0,   252, 252, 0,  0,   252, 252, 252, 0
-		};
-		_system->set_palette(pal16, 0, 16);
+		for (i = 0; i < 16; i++)
+			_shadowPalette[i] = i;
+		setupEGAPalette();
 	}
 	
 	if (_features & GF_AFTER_V3)
@@ -981,8 +977,10 @@
 	}
 
 	if (!(_features & GF_AFTER_V7)) {
-		for (i = 0; i < 0x100; i++)
+		for (i = 0; i < 256; i++)
 			_shadowPalette[i] = i;
+		if (_features & GF_SMALL_HEADER)
+			setDirtyColors(0, 255);
 	}
 
 	clearDrawObjectQueue();





More information about the Scummvm-git-logs mailing list