diff options
| author | Travis Howell | 2009-07-21 10:37:58 +0000 | 
|---|---|---|
| committer | Travis Howell | 2009-07-21 10:37:58 +0000 | 
| commit | 66311e32484d5fd5e18766125c4f09ed0604314f (patch) | |
| tree | 16c1e9f48ee7e67a90ed4793f0dc8808992d86b7 | |
| parent | 4c797d57d0ce45532e1fd3dc144ba271f2f5f86c (diff) | |
| download | scummvm-rg350-66311e32484d5fd5e18766125c4f09ed0604314f.tar.gz scummvm-rg350-66311e32484d5fd5e18766125c4f09ed0604314f.tar.bz2 scummvm-rg350-66311e32484d5fd5e18766125c4f09ed0604314f.zip | |
Fix fade effects in Waxworks.
svn-id: r42638
| -rw-r--r-- | engines/agos/agos.h | 1 | ||||
| -rw-r--r-- | engines/agos/vga_e2.cpp | 44 | ||||
| -rw-r--r-- | engines/agos/vga_ww.cpp | 22 | 
3 files changed, 33 insertions, 34 deletions
| diff --git a/engines/agos/agos.h b/engines/agos/agos.h index b8af9df95f..ac1f33428b 100644 --- a/engines/agos/agos.h +++ b/engines/agos/agos.h @@ -1248,6 +1248,7 @@ protected:  	void hitarea_stuff_helper_2();  	void fastFadeIn();  	void slowFadeIn(); +	void fullFade();  	virtual void vcStopAnimation(uint16 zone, uint16 sprite); diff --git a/engines/agos/vga_e2.cpp b/engines/agos/vga_e2.cpp index f6e6630d43..de3cb55963 100644 --- a/engines/agos/vga_e2.cpp +++ b/engines/agos/vga_e2.cpp @@ -353,9 +353,32 @@ void AGOSEngine::vc55_moveBox() {  	_needHitAreaRecalc++;  } -void AGOSEngine::vc56_fullScreen() { -	uint8 palette[1024]; +void AGOSEngine::fullFade() { +	uint8 *srcPal, *dstPal; +	int c, p; + +	for (c = 64; c != 0; c --) { +		srcPal = _curVgaFile2 + 32; +		dstPal = _currentPalette; +		for (p = 768; p !=0 ; p -= 3) { +			uint8 r = srcPal[0] * 4; +			if (dstPal[0] != r) +				dstPal[0] += 4; +			uint8 g = srcPal[1] * 4; +			if (dstPal[1] != g) +				dstPal[1] += 4; +			uint8 b = srcPal[2] * 4; +			if (dstPal[2] != b) +				dstPal[2] += 4; +			srcPal += 3; +			dstPal += 4; +		} +		_system->setPalette(_currentPalette, 0, 256); +		delay(5); +	} +} +void AGOSEngine::vc56_fullScreen() {  	Graphics::Surface *screen = _system->lockScreen();  	byte *dst = (byte *)screen->pixels;  	byte *src = _curVgaFile2 + 800; @@ -367,23 +390,12 @@ void AGOSEngine::vc56_fullScreen() {  	}  	 _system->unlockScreen(); -	//fullFade(); - -	src = _curVgaFile2 + 32; -	for (int i = 0; i < 256; i++) { -		palette[i * 4 + 0] = *src++ * 4; -		palette[i * 4 + 1] = *src++ * 4; -		palette[i * 4 + 2] = *src++ * 4; -		palette[i * 4 + 3] = 0; -	} - -	_system->setPalette(palette, 0, 256); +	fullFade();  }  void AGOSEngine::vc57_blackPalette() { -	uint8 palette[1024]; -	memset(palette, 0, sizeof(palette)); -	_system->setPalette(palette, 0, 256); +	memset(_currentPalette, 0, sizeof(_currentPalette)); +	_system->setPalette(_currentPalette, 0, 256);  }  void AGOSEngine::vc58_checkCodeWheel() { diff --git a/engines/agos/vga_ww.cpp b/engines/agos/vga_ww.cpp index e7f2ad7807..afc05f7869 100644 --- a/engines/agos/vga_ww.cpp +++ b/engines/agos/vga_ww.cpp @@ -193,20 +193,8 @@ void AGOSEngine::vc61() {  	_system->unlockScreen(); -	if (a == 6) { -		//fullFade(); -		src = _curVgaFile2 + 32; - -		uint8 palette[1024]; -		for (int i = 0; i < 256; i++) { -			palette[i * 4 + 0] = *src++ * 4; -			palette[i * 4 + 1] = *src++ * 4; -			palette[i * 4 + 2] = *src++ * 4; -			palette[i * 4 + 3] = 0; -		} - -		_system->setPalette(palette, 0, 256); -	} +	if (a == 6) +		fullFade();  }  void AGOSEngine::vc62_fastFadeOut() { @@ -221,8 +209,6 @@ void AGOSEngine::vc62_fastFadeOut() {  				_fastFadeCount = 208;  		} -		memcpy(_videoBuf1, _currentPalette, _fastFadeCount * 4); -  		if (getGameType() == GType_FF || getGameType() == GType_PP) {  			if (getGameType() == GType_FF && getBitFlag(75)) {  				fadeCount = 4; @@ -237,8 +223,8 @@ void AGOSEngine::vc62_fastFadeOut() {  		}  		for (i = fadeCount; i != 0; --i) { -			paletteFadeOut(_videoBuf1, _fastFadeCount, fadeSize); -			_system->setPalette(_videoBuf1, 0, _fastFadeCount); +			paletteFadeOut(_currentPalette, _fastFadeCount, fadeSize); +			_system->setPalette(_currentPalette, 0, _fastFadeCount);  			delay(5);  		} | 
