diff options
| -rw-r--r-- | scumm/palette.cpp | 61 | ||||
| -rw-r--r-- | scumm/saveload.cpp | 1 | ||||
| -rw-r--r-- | scumm/script_v5.cpp | 2 | ||||
| -rw-r--r-- | scumm/script_v6.cpp | 6 | ||||
| -rw-r--r-- | scumm/script_v6he.cpp | 2 | ||||
| -rw-r--r-- | scumm/scumm.h | 3 | 
6 files changed, 14 insertions, 61 deletions
diff --git a/scumm/palette.cpp b/scumm/palette.cpp index 26c3ce3831..91b8726c1d 100644 --- a/scumm/palette.cpp +++ b/scumm/palette.cpp @@ -452,7 +452,7 @@ static inline uint colorWeight(int red, int green, int blue) {  } -void ScummEngine::setupShadowPalette(int redScale, int greenScale, int blueScale, int startColor, int endColor) { +void ScummEngine::setupShadowPalette(int redScale, int greenScale, int blueScale, int startColor, int endColor, int start, int end) {  	const byte *basepal = getPalettePtr(_curPalIndex);  	const byte *pal = basepal;  	const byte *compareptr; @@ -477,7 +477,12 @@ void ScummEngine::setupShadowPalette(int redScale, int greenScale, int blueScale  	// from within Room 23 (the big machine), as it has no shadow effects  	// and thus doesn't result in any visual differences. -	for (i = 0; i <= 255; i++) { +	if (_gameId == GID_SAMNMAX) { +		for (i = 0; i < 256; i++) +			_shadowPalette[i] = i; +	} + +	for (i = start; i < end; i++) {  		int r = (int) (*pal++ * redScale) >> 8;  		int g = (int) (*pal++ * greenScale) >> 8;  		int b = (int) (*pal++ * blueScale) >> 8; @@ -525,58 +530,6 @@ void ScummEngine::setupShadowPalette(int redScale, int greenScale, int blueScale  	}  } -/** This function create the specialPalette used for semi-transparency in SamnMax */ -void ScummEngine::setupShadowPalette(int16 from, int16 to, int16 redScale, int16 greenScale, int16 blueScale, -			int16 startColor, int16 endColor) { -	const byte *palPtr, *curPtr; -	const byte *searchPtr; - -	uint bestResult; -	uint currentResult; - -	byte currentIndex; - -	int i, j; - -	palPtr = getPalettePtr(_curPalIndex); - -	for (i = 0; i < 256; i++) -		_shadowPalette[i] = i; - -	curPtr = palPtr + startColor * 3; - -	for (i = startColor; i < endColor; i++) { -		int r = (int) (*curPtr++ * redScale) >> 8; -		int g = (int) (*curPtr++ * greenScale) >> 8; -		int b = (int) (*curPtr++ * blueScale) >> 8; - -		if (r > 255) -			r = 255; -		if (g > 255) -			g = 255; -		if (b > 255) -			b = 255; - -		searchPtr = palPtr + from * 3; -		bestResult = (uint)-1; -		currentIndex = (byte) from; - -		for (j = from; j <= to; j++) { -			int ar = (*searchPtr++); -			int ag = (*searchPtr++); -			int ab = (*searchPtr++); - -			currentResult = colorWeight(ar - r, ag - g, ab - b); - -			if (currentResult < bestResult) { -				_shadowPalette[i] = currentIndex; -				bestResult = currentResult; -			} -			currentIndex++; -		} -	} -} -  void ScummEngine::darkenPalette(int redScale, int greenScale, int blueScale, int startColor, int endColor) {  	if (_roomResource == 0) // FIXME - HACK to get COMI demo working  		return; diff --git a/scumm/saveload.cpp b/scumm/saveload.cpp index 7ec94ea22d..6f433239ff 100644 --- a/scumm/saveload.cpp +++ b/scumm/saveload.cpp @@ -524,6 +524,7 @@ void ScummEngine::saveOrLoad(Serializer *s, uint32 savegameVersion) {  		MKLINE(ScummEngine, gdi._transparentColor, sleByte, VER(8)),  		MKARRAY(ScummEngine, _currentPalette[0], sleByte, 768, VER(8)), +		// Should be made obsolete in next save game version.  		MKARRAY(ScummEngine, _proc_special_palette[0], sleByte, 256, VER(8)),  		MKARRAY(ScummEngine, _charsetBuffer[0], sleByte, 256, VER(8)), diff --git a/scumm/script_v5.cpp b/scumm/script_v5.cpp index 4096a0ad10..5ebba7a566 100644 --- a/scumm/script_v5.cpp +++ b/scumm/script_v5.cpp @@ -1926,7 +1926,7 @@ void ScummEngine_v5::o5_roomOps() {  		_opcode = fetchScriptByte();  		d = getVarOrDirectByte(PARAM_1);  		e = getVarOrDirectByte(PARAM_2); -		setupShadowPalette(a, b, c, d, e); +		setupShadowPalette(a, b, c, d, e, 0, 256);  		break;  	case 13:	// SO_SAVE_STRING diff --git a/scumm/script_v6.cpp b/scumm/script_v6.cpp index 2515778cbf..d29ad27a9b 100644 --- a/scumm/script_v6.cpp +++ b/scumm/script_v6.cpp @@ -1710,7 +1710,7 @@ void ScummEngine_v6::o6_roomOps() {  		c = pop();  		b = pop();  		a = pop(); -		setupShadowPalette(a, b, c, d, e); +		setupShadowPalette(a, b, c, d, e, 0, 256);  		break;  	case 184:		// SO_SAVE_STRING @@ -2615,7 +2615,7 @@ void ScummEngine_v6::o6_kernelSetFunctions() {  			// Case 108 and 109 share the same function  			if (num != 6)  				warning("o6_kernelSetFunctions sub op %d: expected 6 params but got %d", args[0], num); -			setupShadowPalette(args[1], args[2], args[3], args[4], args[5], 0, 256); +			setupShadowPalette(args[3], args[4], args[5], args[1], args[2], 0, 256);  			break;  		case 110:  			_charset->clearCharsetMask(); @@ -2625,7 +2625,7 @@ void ScummEngine_v6::o6_kernelSetFunctions() {  			a->shadow_mode = args[2] + args[3];  			break;  		case 112:									/* palette shift? */ -			setupShadowPalette(args[1], args[2], args[3], args[4], args[5], args[6], args[7]); +			setupShadowPalette(args[3], args[4], args[5], args[1], args[2], args[6], args[7]);  			break;  		case 114:  			// Sam & Max film noir mode diff --git a/scumm/script_v6he.cpp b/scumm/script_v6he.cpp index 9a39bb9c6c..0609b5b5d3 100644 --- a/scumm/script_v6he.cpp +++ b/scumm/script_v6he.cpp @@ -486,7 +486,7 @@ void ScummEngine_v6he::o6_roomOps() {  		b = pop();  		a = pop();  		if (_heversion == 60) -			setupShadowPalette(a, b, c, d, e); +			setupShadowPalette(a, b, c, d, e, 0, 256);  		break;  	case 184:		// SO_SAVE_STRING diff --git a/scumm/scumm.h b/scumm/scumm.h index b724b4ec55..eb47e1b14d 100644 --- a/scumm/scumm.h +++ b/scumm/scumm.h @@ -877,7 +877,7 @@ protected:  	void initBGBuffers(int height);  	void initCycl(const byte *ptr);	// Color cycle -	void setupShadowPalette(int16 a, int16 b, int16 c, int16 d, int16 e, int16 colorMin, int16 colorMax); +	void setupShadowPalette(int redScale, int greenScale, int blueScale, int startColor, int endColor, int start, int end);  	void drawObject(int obj, int arg);	  	void drawRoomObjects(int arg); @@ -919,7 +919,6 @@ public:  protected:  	void moveMemInPalRes(int start, int end, byte direction);  	void setupShadowPalette(int slot, int redScale, int greenScale, int blueScale, int startColor, int endColor); -	void setupShadowPalette(int redScale, int greenScale, int blueScale, int startColor, int endColor);  	void darkenPalette(int redScale, int greenScale, int blueScale, int startColor, int endColor);  	void desaturatePalette(int hueScale, int satScale, int lightScale, int startColor, int endColor);  | 
