[Scummvm-cvs-logs] SF.net SVN: scummvm:[45088] scummvm/trunk/engines/sci

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Wed Oct 14 20:03:47 CEST 2009


Revision: 45088
          http://scummvm.svn.sourceforge.net/scummvm/?rev=45088&view=rev
Author:   thebluegr
Date:     2009-10-14 18:03:47 +0000 (Wed, 14 Oct 2009)

Log Message:
-----------
Fixed the palette in the SEQ decoder again

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kgraphics.cpp
    scummvm/trunk/engines/sci/gfx/seq_decoder.cpp
    scummvm/trunk/engines/sci/gfx/seq_decoder.h
    scummvm/trunk/engines/sci/gui/gui_palette.cpp
    scummvm/trunk/engines/sci/gui/gui_palette.h

Modified: scummvm/trunk/engines/sci/engine/kgraphics.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kgraphics.cpp	2009-10-14 17:08:02 UTC (rev 45087)
+++ scummvm/trunk/engines/sci/engine/kgraphics.cpp	2009-10-14 18:03:47 UTC (rev 45088)
@@ -1041,24 +1041,29 @@
 	Common::String filename = s->_segMan->getString(argv[0]);
 	int delay = argv[1].toUint16(); // Time between frames in ticks
 	SeqDecoder seq;
-	SciGuiScreen *videoScreen = new SciGuiScreen(320, 200, 1);
 
-	if (!seq.loadFile(filename, s->resMan, videoScreen) && 
-		!seq.loadFile(Common::String("SEQ/") + filename, s->resMan, videoScreen)) {
+	if (!seq.loadFile(filename, s->resMan) && 
+		!seq.loadFile(Common::String("SEQ/") + filename, s->resMan)) {
 		warning("Failed to open movie file %s", filename.c_str());
-		delete videoScreen;
 		return s->r_acc;
 	}
 
-	delete videoScreen;
-
 	bool play = true;
 	while (play) {
 		uint32 startTime = g_system->getMillis();
 		SeqFrame *frame = seq.getFrame(play);
 		Common::Rect frameRect = frame->frameRect;
 
-		g_system->copyRectToScreen(frame->data, frameRect.width(), frameRect.left, frameRect.top, frameRect.width(), frameRect.height());
+		byte *scr = (byte *)g_system->lockScreen()->pixels;
+		int cur = 0;
+		for (int y = frameRect.top; y < frameRect.bottom; y++) {
+			for (int x = frameRect.left; x < frameRect.right; x++) {
+				if (frame->data[cur] != frame->colorKey)
+					scr[y * 320 + x] = frame->data[cur];
+				cur++;
+			}
+		}
+		g_system->unlockScreen();
 		g_system->updateScreen();
 
 		delete frame->data;

Modified: scummvm/trunk/engines/sci/gfx/seq_decoder.cpp
===================================================================
--- scummvm/trunk/engines/sci/gfx/seq_decoder.cpp	2009-10-14 17:08:02 UTC (rev 45087)
+++ scummvm/trunk/engines/sci/gfx/seq_decoder.cpp	2009-10-14 18:03:47 UTC (rev 45088)
@@ -35,7 +35,7 @@
 	closeFile();
 }
 
-bool SeqDecoder::loadFile(Common::String fileName, ResourceManager *resMan, SciGuiScreen *screen) {
+bool SeqDecoder::loadFile(Common::String fileName, ResourceManager *resMan) {
 	closeFile();
 
 	_fileStream = SearchMan.createReadStreamForMember(fileName);
@@ -48,11 +48,13 @@
 	byte *paletteData = new byte[paletteSize];
 	_fileStream->read(paletteData, paletteSize);
 	GuiPalette seqPalette;
-	SciGuiPalette *pal = new SciGuiPalette(resMan, screen);
+	SciGuiScreen *videoScreen = new SciGuiScreen(320, 200, 1);
+	SciGuiPalette *pal = new SciGuiPalette(resMan, videoScreen, false);
 	pal->createFromData(paletteData, &seqPalette);
 	pal->set(&seqPalette, 2);
 	delete pal;
 	delete[] paletteData;
+	delete videoScreen;
 
 	_currentFrame = 0;
 

Modified: scummvm/trunk/engines/sci/gfx/seq_decoder.h
===================================================================
--- scummvm/trunk/engines/sci/gfx/seq_decoder.h	2009-10-14 17:08:02 UTC (rev 45087)
+++ scummvm/trunk/engines/sci/gfx/seq_decoder.h	2009-10-14 18:03:47 UTC (rev 45088)
@@ -44,7 +44,7 @@
 public:
 	SeqDecoder() : _fileStream(0) { }
 	~SeqDecoder();
-	bool loadFile(Common::String fileName, ResourceManager *resMan, SciGuiScreen *screen);
+	bool loadFile(Common::String fileName, ResourceManager *resMan);
 	void closeFile();
 	SeqFrame *getFrame(bool &hasNext);
 

Modified: scummvm/trunk/engines/sci/gui/gui_palette.cpp
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_palette.cpp	2009-10-14 17:08:02 UTC (rev 45087)
+++ scummvm/trunk/engines/sci/gui/gui_palette.cpp	2009-10-14 18:03:47 UTC (rev 45088)
@@ -34,7 +34,7 @@
 
 namespace Sci {
 
-SciGuiPalette::SciGuiPalette(ResourceManager *resMan, SciGuiScreen *screen)
+SciGuiPalette::SciGuiPalette(ResourceManager *resMan, SciGuiScreen *screen, bool autoSetPalette)
 	: _resMan(resMan), _screen(screen) {
 	int16 color;
 
@@ -54,14 +54,16 @@
 	_sysPalette.colors[255].g = 255;
 	_sysPalette.colors[255].b = 255;
 
-	// Load default palette from resource 999
-	if (!setFromResource(999, 2)) {
-		// if not found, we try to set amiga palette
-		if (!setAmiga()) {
-			// if that also doesnt work out, set EGA palette
-			setEGA();
-		}
-	};
+	if (autoSetPalette) {
+		// Load default palette from resource 999
+		if (!setFromResource(999, 2)) {
+			// if not found, we try to set amiga palette
+			if (!setAmiga()) {
+				// if that also doesnt work out, set EGA palette
+				setEGA();
+			}
+		};
+	}
 
 	// Init _clrPowers used in MatchColor
 	for(color = 0; color < 256; color++)

Modified: scummvm/trunk/engines/sci/gui/gui_palette.h
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_palette.h	2009-10-14 17:08:02 UTC (rev 45087)
+++ scummvm/trunk/engines/sci/gui/gui_palette.h	2009-10-14 18:03:47 UTC (rev 45088)
@@ -33,7 +33,7 @@
 class SciGuiScreen;
 class SciGuiPalette {
 public:
-	SciGuiPalette(ResourceManager *resMan, SciGuiScreen *screen);
+	SciGuiPalette(ResourceManager *resMan, SciGuiScreen *screen, bool autoSetPalette = true);
 	~SciGuiPalette();
 
 	void createFromData(byte *data, GuiPalette *paletteOut);


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