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

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Mon Feb 7 14:49:05 CET 2011


Revision: 55803
          http://scummvm.svn.sourceforge.net/scummvm/?rev=55803&view=rev
Author:   thebluegr
Date:     2011-02-07 13:49:03 +0000 (Mon, 07 Feb 2011)

Log Message:
-----------
SCI: Unified the SEQ and robot palette code, and fixed the include safeguard of the SEQ decoder

Modified Paths:
--------------
    scummvm/trunk/engines/sci/video/robot_decoder.cpp
    scummvm/trunk/engines/sci/video/robot_decoder.h
    scummvm/trunk/engines/sci/video/seq_decoder.cpp
    scummvm/trunk/engines/sci/video/seq_decoder.h

Modified: scummvm/trunk/engines/sci/video/robot_decoder.cpp
===================================================================
--- scummvm/trunk/engines/sci/video/robot_decoder.cpp	2011-02-07 13:36:59 UTC (rev 55802)
+++ scummvm/trunk/engines/sci/video/robot_decoder.cpp	2011-02-07 13:49:03 UTC (rev 55803)
@@ -69,6 +69,11 @@
 
 #ifdef ENABLE_SCI32
 
+enum robotPalTypes {
+	kRobotPalVariable = 0,
+	kRobotPalConstant = 1
+};
+
 RobotDecoder::RobotDecoder(Audio::Mixer *mixer, bool isBigEndian) {
 	_surface = 0;
 	_fileStream = 0;
@@ -116,7 +121,7 @@
 		_mixer->playStream(Audio::Mixer::kMusicSoundType, &_audioHandle, _audioStream);
 	}
 
-	readPaletteChunk();
+	readPaletteChunk(_header.paletteDataSize);
 	readFrameSizesChunk();
 	return true;
 }
@@ -143,11 +148,12 @@
 		_fileStream->skip(_header.unkChunkDataSize);
 }
 
-void RobotDecoder::readPaletteChunk() {
-	byte *paletteData = new byte[_header.paletteDataSize];
-	_fileStream->read(paletteData, _header.paletteDataSize);
+void RobotDecoder::readPaletteChunk(uint16 chunkSize) {
+	byte *paletteData = new byte[chunkSize];
+	_fileStream->read(paletteData, chunkSize);
 
 	// SCI1.1 palette
+	byte palFormat = paletteData[32];
 	uint16 palColorStart = READ_SCI11ENDIAN_UINT16(paletteData + 25);
 	uint16 palColorCount = READ_SCI11ENDIAN_UINT16(paletteData + 29);
 
@@ -155,6 +161,8 @@
 	memset(_palette, 0, 256 * 3);
 
 	for (uint16 colorNo = palColorStart; colorNo < palColorStart + palColorCount; colorNo++) {
+		if (palFormat == kRobotPalVariable)
+			palOffset++;
 		_palette[colorNo * 3 + 0] = paletteData[palOffset++];
 		_palette[colorNo * 3 + 1] = paletteData[palOffset++];
 		_palette[colorNo * 3 + 2] = paletteData[palOffset++];

Modified: scummvm/trunk/engines/sci/video/robot_decoder.h
===================================================================
--- scummvm/trunk/engines/sci/video/robot_decoder.h	2011-02-07 13:36:59 UTC (rev 55802)
+++ scummvm/trunk/engines/sci/video/robot_decoder.h	2011-02-07 13:49:03 UTC (rev 55803)
@@ -78,7 +78,7 @@
 
 private:
 	void readHeaderChunk();
-	void readPaletteChunk();
+	void readPaletteChunk(uint16 chunkSize);
 	void readFrameSizesChunk();
 
 	void freeData();

Modified: scummvm/trunk/engines/sci/video/seq_decoder.cpp
===================================================================
--- scummvm/trunk/engines/sci/video/seq_decoder.cpp	2011-02-07 13:36:59 UTC (rev 55802)
+++ scummvm/trunk/engines/sci/video/seq_decoder.cpp	2011-02-07 13:49:03 UTC (rev 55803)
@@ -66,11 +66,16 @@
 	_frameCount = _fileStream->readUint16LE();
 
 	// Set palette
-	int paletteSize = _fileStream->readUint32LE();
+	int paletteChunkSize = _fileStream->readUint32LE();
+	readPaletteChunk(paletteChunkSize);
 
-	byte *paletteData = new byte[paletteSize];
-	_fileStream->read(paletteData, paletteSize);
+	return true;
+}
 
+void SeqDecoder::readPaletteChunk(uint16 chunkSize) {
+	byte *paletteData = new byte[chunkSize];
+	_fileStream->read(paletteData, chunkSize);
+
 	// SCI1.1 palette
 	byte palFormat = paletteData[32];
 	uint16 palColorStart = READ_LE_UINT16(paletteData + 25);
@@ -89,7 +94,6 @@
 
 	_dirtyPalette = true;
 	delete[] paletteData;
-	return true;
 }
 
 void SeqDecoder::close() {

Modified: scummvm/trunk/engines/sci/video/seq_decoder.h
===================================================================
--- scummvm/trunk/engines/sci/video/seq_decoder.h	2011-02-07 13:36:59 UTC (rev 55802)
+++ scummvm/trunk/engines/sci/video/seq_decoder.h	2011-02-07 13:49:03 UTC (rev 55803)
@@ -23,8 +23,8 @@
  *
  */
 
-#ifndef SEQ_DECODER_H
-#define SEQ_DECODER_H
+#ifndef SCI_VIDEO_SEQ_DECODER_H
+#define SCI_VIDEO_SEQ_DECODER_H
 
 #include "video/video_decoder.h"
 
@@ -61,6 +61,7 @@
 		SEQ_SCREEN_HEIGHT = 200
 	};
 
+	void readPaletteChunk(uint16 chunkSize);
 	bool decodeFrame(byte *rleData, int rleSize, byte *litData, int litSize, byte *dest, int left, int width, int height, int colorKey);
 
 	uint16 _width, _height;


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