[Scummvm-cvs-logs] SF.net SVN: scummvm: [31650] scummvm/trunk/engines/made

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Mon Apr 21 22:20:34 CEST 2008


Revision: 31650
          http://scummvm.svn.sourceforge.net/scummvm/?rev=31650&view=rev
Author:   thebluegr
Date:     2008-04-21 13:20:34 -0700 (Mon, 21 Apr 2008)

Log Message:
-----------
Some palette related fixes

Modified Paths:
--------------
    scummvm/trunk/engines/made/pmvplayer.cpp
    scummvm/trunk/engines/made/pmvplayer.h
    scummvm/trunk/engines/made/resource.cpp
    scummvm/trunk/engines/made/resource.h
    scummvm/trunk/engines/made/screen.cpp
    scummvm/trunk/engines/made/screen.h
    scummvm/trunk/engines/made/scriptfuncs.cpp

Modified: scummvm/trunk/engines/made/pmvplayer.cpp
===================================================================
--- scummvm/trunk/engines/made/pmvplayer.cpp	2008-04-21 18:46:57 UTC (rev 31649)
+++ scummvm/trunk/engines/made/pmvplayer.cpp	2008-04-21 20:20:34 UTC (rev 31650)
@@ -68,8 +68,8 @@
 	_mixer->stopAll();
 
 	// Read palette
-	_fd->read(_palette, 768);
-	_vm->_screen->setRGBPalette(_palette);
+	_fd->read(_paletteRGB, 768);
+	_vm->_screen->setRGBPalette(_paletteRGB);
 
 	uint32 frameCount = 0;
 	uint16 chunkCount = 0;
@@ -116,7 +116,7 @@
 		if (palChunkOfs) {
 			palData = frameData + palChunkOfs - 8;
 			palSize = READ_LE_UINT32(palData + 4);
-			decompressPalette(palData + 8, _palette, palSize);
+			decompressPalette(palData + 8, _paletteRGB, palSize);
 		}
 
 		// Handle video
@@ -145,7 +145,7 @@
 			firstTime = false;
 		}
 
-		_vm->_screen->setRGBPalette(_palette);
+		_vm->_screen->setRGBPalette(_paletteRGB);
 		handleEvents();
 		updateScreen();
 

Modified: scummvm/trunk/engines/made/pmvplayer.h
===================================================================
--- scummvm/trunk/engines/made/pmvplayer.h	2008-04-21 18:46:57 UTC (rev 31649)
+++ scummvm/trunk/engines/made/pmvplayer.h	2008-04-21 20:20:34 UTC (rev 31650)
@@ -51,7 +51,7 @@
 	Common::File *_fd;
 	Audio::AppendableAudioStream *_audioStream;
 	Audio::SoundHandle _audioStreamHandle;
-	byte _palette[768];
+	byte _paletteRGB[768];
 	Graphics::Surface *_surface;
 	bool _abort;
 	void readChunk(uint32 &chunkType, uint32 &chunkSize);

Modified: scummvm/trunk/engines/made/resource.cpp
===================================================================
--- scummvm/trunk/engines/made/resource.cpp	2008-04-21 18:46:57 UTC (rev 31649)
+++ scummvm/trunk/engines/made/resource.cpp	2008-04-21 20:20:34 UTC (rev 31650)
@@ -38,21 +38,26 @@
 
 /* PictureResource */
 
-PictureResource::PictureResource() : _picture(NULL), _palette(NULL) {
+PictureResource::PictureResource() : _picture(NULL), _picturePalette(NULL) {
+	_hasPalette = false;
 }
 
 PictureResource::~PictureResource() {
-	if (_picture)
+	if (_picture) {
 		delete _picture;
-	if (_palette)
-		delete[] _palette;
+		_picture = 0;
+	}
+	if (_picturePalette) {
+		delete[] _picturePalette;
+		_picturePalette = 0;
+	}
 }
 
 void PictureResource::load(byte *source, int size) {
 
 	Common::MemoryReadStream *sourceS = new Common::MemoryReadStream(source, size);
 	
-	bool hasPalette = sourceS->readByte() == 1;
+	_hasPalette = (sourceS->readByte() != 0);
 	sourceS->readByte();
 	sourceS->readByte();
 	sourceS->readByte();
@@ -66,9 +71,9 @@
 
 	debug(2, "width = %d; height = %d\n", width, height);
 
-	if (hasPalette) {
-		_palette = new byte[768];
-		sourceS->read(_palette, 768);
+	if (_hasPalette) {
+		_picturePalette = new byte[768];
+		sourceS->read(_picturePalette, 768);
 	}
 
 	_picture = new Graphics::Surface();

Modified: scummvm/trunk/engines/made/resource.h
===================================================================
--- scummvm/trunk/engines/made/resource.h	2008-04-21 18:46:57 UTC (rev 31649)
+++ scummvm/trunk/engines/made/resource.h	2008-04-21 20:20:34 UTC (rev 31650)
@@ -62,10 +62,12 @@
 	~PictureResource();
 	void load(byte *source, int size);
 	Graphics::Surface *getPicture() const { return _picture; }
-	byte *getPalette() const { return _palette; }
+	byte *getPalette() const { return _picturePalette; }
+	bool hasPalette() const { return _hasPalette; }
 protected:
 	Graphics::Surface *_picture;
-	byte *_palette;
+	byte *_picturePalette;
+	bool _hasPalette;
 };
 
 class AnimationResource : public Resource {

Modified: scummvm/trunk/engines/made/screen.cpp
===================================================================
--- scummvm/trunk/engines/made/screen.cpp	2008-04-21 18:46:57 UTC (rev 31649)
+++ scummvm/trunk/engines/made/screen.cpp	2008-04-21 20:20:34 UTC (rev 31650)
@@ -73,16 +73,20 @@
 
 }
 
-void Screen::setRGBPalette(byte *palRGB, int start, int count) {
+void Screen::loadRGBPalette(byte *palRGB, int count) {
 	for (int i = 0; i < count; i++) {
-		_palette[i * 4 + 0] = palRGB[i * 3 + 0];
-		_palette[i * 4 + 1] = palRGB[i * 3 + 1];
-		_palette[i * 4 + 2] = palRGB[i * 3 + 2];
-		_palette[i * 4 + 3] = 0;
+		_screenPalette[i * 4 + 0] = palRGB[i * 3 + 0];
+		_screenPalette[i * 4 + 1] = palRGB[i * 3 + 1];
+		_screenPalette[i * 4 + 2] = palRGB[i * 3 + 2];
+		_screenPalette[i * 4 + 3] = 0;
 	}
-	_vm->_system->setPalette(_palette, start, count);
 }
 
+void Screen::setRGBPalette(byte *palRGB, int start, int count) {
+	loadRGBPalette(palRGB, count);
+	_vm->_system->setPalette(_screenPalette, start, count);
+}
+
 uint16 Screen::updateChannel(uint16 channelIndex) {
 	return 0;
 }
@@ -226,6 +230,8 @@
 	if (flexIndex == 0)
 		return 0;
 
+	if (flexIndex == 1279) return 0;	// HACK: fixes the first screen
+
 	PictureResource *flex = _vm->_res->getPicture(flexIndex);
 	Graphics::Surface *sourceSurface = flex->getPicture();
 	byte *source = (byte*)sourceSurface->getBasePtr(0, 0);
@@ -248,10 +254,12 @@
 		dest += clipInfo.destSurface->pitch;
 	}
 
-	// TODO: Palette stuff; palette should be set in showPage
-	byte *pal = flex->getPalette();
-	if (pal) {
-		setRGBPalette(pal);
+	// Palette is set in showPage
+	if (flex->hasPalette()) {
+		byte *pal = flex->getPalette();
+		if (pal != 0) {
+			loadRGBPalette(pal);
+		}
 	}
 
 	_vm->_res->freeResource(flex);

Modified: scummvm/trunk/engines/made/screen.h
===================================================================
--- scummvm/trunk/engines/made/screen.h	2008-04-21 18:46:57 UTC (rev 31649)
+++ scummvm/trunk/engines/made/screen.h	2008-04-21 20:20:34 UTC (rev 31650)
@@ -61,6 +61,7 @@
 	void clearScreen();
 	
 	void drawSurface(Graphics::Surface *source, int x, int y);
+	void loadRGBPalette(byte *palRGB, int count = 256);
 	void setRGBPalette(byte *palRGB, int start = 0, int count = 256);
 
 	uint16 updateChannel(uint16 channelIndex);
@@ -99,7 +100,7 @@
 	void setExclude(uint16 exclude);
 	void setGround(uint16 ground);
 
-	byte _palette[256 * 4];
+	byte _screenPalette[256 * 4];
 
 protected:
 	MadeEngine *_vm;

Modified: scummvm/trunk/engines/made/scriptfuncs.cpp
===================================================================
--- scummvm/trunk/engines/made/scriptfuncs.cpp	2008-04-21 18:46:57 UTC (rev 31649)
+++ scummvm/trunk/engines/made/scriptfuncs.cpp	2008-04-21 20:20:34 UTC (rev 31650)
@@ -185,12 +185,12 @@
 }
 
 int16 ScriptFunctionsRtz::o1_CLS(int16 argc, int16 *argv) {
- 	//_vm->_screen->clearScreen();
+ 	_vm->_screen->clearScreen();
 	return 0;
 }
 
 int16 ScriptFunctionsRtz::o1_SHOWPAGE(int16 argc, int16 *argv) {
-	//_vm->_system->setPalette(_vm->_screen->_palette, 0, 256);
+	_vm->_system->setPalette(_vm->_screen->_screenPalette, 0, 256);
 	_vm->_screen->show();
 	return 0;
 }


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