diff options
Diffstat (limited to 'engines/sci/video/robot_decoder.cpp')
-rw-r--r-- | engines/sci/video/robot_decoder.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/engines/sci/video/robot_decoder.cpp b/engines/sci/video/robot_decoder.cpp index f547407076..d487c6d9b4 100644 --- a/engines/sci/video/robot_decoder.cpp +++ b/engines/sci/video/robot_decoder.cpp @@ -69,6 +69,11 @@ namespace Sci { #ifdef ENABLE_SCI32 +enum robotPalTypes { + kRobotPalVariable = 0, + kRobotPalConstant = 1 +}; + RobotDecoder::RobotDecoder(Audio::Mixer *mixer, bool isBigEndian) { _surface = 0; _fileStream = 0; @@ -116,7 +121,7 @@ bool RobotDecoder::load(Common::SeekableReadStream *stream) { _mixer->playStream(Audio::Mixer::kMusicSoundType, &_audioHandle, _audioStream); } - readPaletteChunk(); + readPaletteChunk(_header.paletteDataSize); readFrameSizesChunk(); return true; } @@ -143,11 +148,12 @@ void RobotDecoder::readHeaderChunk() { _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 @@ void RobotDecoder::readPaletteChunk() { 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++]; |