[Scummvm-cvs-logs] SF.net SVN: scummvm:[55625] scummvm/trunk/engines/toon

sylvaintv at users.sourceforge.net sylvaintv at users.sourceforge.net
Sat Jan 29 21:59:46 CET 2011


Revision: 55625
          http://scummvm.svn.sourceforge.net/scummvm/?rev=55625&view=rev
Author:   sylvaintv
Date:     2011-01-29 20:59:46 +0000 (Sat, 29 Jan 2011)

Log Message:
-----------
TOON: Fix some palette issues

- In fade out when leaving certain rooms
- When loading a game in a cutaway/closeup state

Modified Paths:
--------------
    scummvm/trunk/engines/toon/movie.cpp
    scummvm/trunk/engines/toon/toon.cpp
    scummvm/trunk/engines/toon/toon.h

Modified: scummvm/trunk/engines/toon/movie.cpp
===================================================================
--- scummvm/trunk/engines/toon/movie.cpp	2011-01-29 20:12:27 UTC (rev 55624)
+++ scummvm/trunk/engines/toon/movie.cpp	2011-01-29 20:59:46 UTC (rev 55625)
@@ -87,7 +87,7 @@
 		_vm->getAudioManager()->setMusicVolume(0);
 	_decoder->loadFile(video.c_str(), flags);
 	playVideo();
-	_vm->flushPalette();
+	_vm->flushPalette(false);
 	if (flags & 1)
 		_vm->getAudioManager()->setMusicVolume(_vm->getAudioManager()->isMusicMuted() ? 0 : 255);
 	_decoder->close();

Modified: scummvm/trunk/engines/toon/toon.cpp
===================================================================
--- scummvm/trunk/engines/toon/toon.cpp	2011-01-29 20:12:27 UTC (rev 55624)
+++ scummvm/trunk/engines/toon/toon.cpp	2011-01-29 20:59:46 UTC (rev 55625)
@@ -402,6 +402,11 @@
 	}
 #endif
 
+	if (_needPaletteFlush) {
+		flushPalette(false);
+		_needPaletteFlush = false;
+	}
+
 	if (_firstFrame) {
 		copyToVirtualScreen(false);
 		fadeIn(5);
@@ -544,6 +549,7 @@
 	Picture *mainmenuPicture = new Picture(this);
 	mainmenuPicture->loadPicture("TITLESCR.CPS", true);
 	mainmenuPicture->setupPalette();
+	flushPalette(false);
 
 	MainMenuEntry entries[MAINMENU_ENTRYCOUNT];
 
@@ -894,8 +900,13 @@
 	delete _console;
 }
 
-void ToonEngine::flushPalette() {
+void ToonEngine::flushPalette(bool deferFlushToNextRender) {
 
+	if (deferFlushToNextRender) {
+		_needPaletteFlush = true;
+		return;
+	}
+	_needPaletteFlush = false;
 	uint8 vmpalette[1024];
 	for (int32 i = 0; i < 256; i++) {
 		vmpalette[i*4+0] = _finalPalette[i*3+0];
@@ -907,14 +918,7 @@
 }
 void ToonEngine::setPaletteEntries(uint8 *palette, int32 offset, int32 num) {
 	memcpy(_finalPalette + offset * 3, palette, num * 3);
-	uint8 vmpalette[1024];
-	for (int32 i = 0; i < num; i++) {
-		vmpalette[i*4+0] = palette[i*3+0];
-		vmpalette[i*4+1] = palette[i*3+1];
-		vmpalette[i*4+2] = palette[i*3+2];
-		vmpalette[i*4+3] = 0;
-	}
-	_system->setPalette(vmpalette, offset, num);
+	flushPalette();
 }
 
 void ToonEngine::simpleUpdate(bool waitCharacterToTalk) {
@@ -1753,14 +1757,17 @@
 }
 
 void ToonEngine::fadeOut(int32 numFrames) {
+
+	uint8 oldpalette[1024];
+	_system->grabPalette(oldpalette, 0, 256);
+
 	for (int32 f = 0; f < numFrames; f++) {
-
 		uint8 vmpalette[1024];
 		for (int32 i = 0; i < 256; i++) {
-			vmpalette[i*4+0] = (numFrames - f - 1) * _finalPalette[i*3+0] / (numFrames - 1);
-			vmpalette[i*4+1] = (numFrames - f - 1) * _finalPalette[i*3+1] / (numFrames - 1);
-			vmpalette[i*4+2] = (numFrames - f - 1) * _finalPalette[i*3+2] / (numFrames - 1);
-			vmpalette[i*4+3] = (numFrames - f - 1);
+			vmpalette[i*4+0] = (numFrames - f - 1) * oldpalette[i*4+0] / (numFrames - 1);
+			vmpalette[i*4+1] = (numFrames - f - 1) * oldpalette[i*4+1] / (numFrames - 1);
+			vmpalette[i*4+2] = (numFrames - f - 1) * oldpalette[i*4+2] / (numFrames - 1);
+			vmpalette[i*4+3] = 255;
 		}
 		_system->setPalette(vmpalette, 0, 256);
 		_system->updateScreen();
@@ -3204,6 +3211,20 @@
 		delete[] buf;
 	}
 	delete loadFile;
+
+	// setup correct palette if we are in a closeup/cutaway or not.
+	if (_gameState->_inCloseUp) {
+		_gameState->_inCloseUp = false;
+		flipScreens();
+	} else if (_gameState->_inCutaway) {
+		_currentCutaway->setupPalette();
+		setupGeneralPalette();
+	} else {
+		_currentPicture->setupPalette();
+		setupGeneralPalette();
+	}
+	flushPalette();
+
 	return true;
 }
 

Modified: scummvm/trunk/engines/toon/toon.h
===================================================================
--- scummvm/trunk/engines/toon/toon.h	2011-01-29 20:12:27 UTC (rev 55624)
+++ scummvm/trunk/engines/toon/toon.h	2011-01-29 20:59:46 UTC (rev 55625)
@@ -115,7 +115,7 @@
 	void unloadToonDat();
 	void setPaletteEntries(uint8 *palette, int32 offset, int32 num);
 	void fixPaletteEntries(uint8 *palette, int num);
-	void flushPalette();
+	void flushPalette(bool deferFlushToNextRender = true);
 	void parseInput();
 	void initChapter();
 	void initFonts();
@@ -425,6 +425,7 @@
 	bool _firstFrame;
 	bool _isDemo;
 	bool _showConversationText;
+	bool _needPaletteFlush;
 private:
 	ToonConsole *_console;
 };


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list