[Scummvm-cvs-logs] SF.net SVN: scummvm:[55759] scummvm/trunk/engines/sci/graphics/robot.cpp
lskovlun at users.sourceforge.net
lskovlun at users.sourceforge.net
Thu Feb 3 20:47:36 CET 2011
Revision: 55759
http://scummvm.svn.sourceforge.net/scummvm/?rev=55759&view=rev
Author: lskovlun
Date: 2011-02-03 19:47:36 +0000 (Thu, 03 Feb 2011)
Log Message:
-----------
SCI: Robot v6 support. I _think_ this is complete.
Modified Paths:
--------------
scummvm/trunk/engines/sci/graphics/robot.cpp
Modified: scummvm/trunk/engines/sci/graphics/robot.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/robot.cpp 2011-02-03 18:25:38 UTC (rev 55758)
+++ scummvm/trunk/engines/sci/graphics/robot.cpp 2011-02-03 19:47:36 UTC (rev 55759)
@@ -141,7 +141,6 @@
// Unsupported
// TODO: Add support for this version
warning("TODO: add support for v6 robot videos");
- _curFrame = _frameCount; // jump to the last frame
break;
default:
// Unsupported, error out so that we find out where this is used
@@ -159,13 +158,28 @@
void GfxRobot::getFrameOffsets() {
int *audioEnd = new int[_frameCount];
int *videoEnd = new int[_frameCount];
+ uint32 frameDataOffset;
- for (int i = 0; i < _frameCount; ++i) {
- videoEnd[i] = READ_LE_UINT16(_resourceData + _palOffset + 1200 + i * 2);
- audioEnd[i] = READ_LE_UINT16(_resourceData + _palOffset + 1200 + _frameCount * 2 + i * 2);
+ switch (_version) {
+ case 5:
+ for (int i = 0; i < _frameCount; ++i) {
+ videoEnd[i] = READ_LE_UINT16(_resourceData + _palOffset + 1200 + i * 2);
+ audioEnd[i] = READ_LE_UINT16(_resourceData + _palOffset + 1200 + _frameCount * 2 + i * 2);
+ }
+ frameDataOffset = _palOffset + 0x4b0 + 0x400 + 0x200 + _frameCount * 4;
+ break;
+ case 6:
+ for (int i = 0; i < _frameCount; ++i) {
+ videoEnd[i] = READ_LE_UINT32(_resourceData + _palOffset + 1200 + i * 4);
+ audioEnd[i] = READ_LE_UINT32(_resourceData + _palOffset + 1200 + _frameCount * 4 + i * 4);
+ }
+ frameDataOffset = _palOffset + 0x4b0 + 0x400 + 0x200 + _frameCount * 8;
+ break;
+ default:
+ error("Can't yet handle index table for robot version %d", _version);
+ return;
}
- uint32 frameDataOffset = _palOffset + 0x4b0 + 0x400 + 0x200 + _frameCount * 4;
// Pad to nearest 2 kilobytes
if (frameDataOffset & 0x7ff)
@@ -250,8 +264,6 @@
void GfxRobot::assembleVideoFrame(uint16 frame) {
byte *videoData = _resourceData + _imageStart[frame];
- uint16 frameWidth = READ_LE_UINT16(videoData + 4);
- uint16 frameHeight = READ_LE_UINT16(videoData + 6);
uint16 frameFragments = READ_LE_UINT16(videoData + 18);
uint32 decompressedSize = 0;
@@ -268,7 +280,10 @@
videoData += 10 + fragmentCompressed;
}
- assert(decompressedSize == (uint32)(frameWidth * frameHeight) * getFrameScale(frame) / 100);
+ // Causes assertions in various places, such as Lighthouse/Demo 693.RBT
+ // uint16 frameWidth = READ_LE_UINT16(_resourceData + _imageStart[frame] + 4);
+ // uint16 frameHeight = READ_LE_UINT16(_resourceData + _imageStart[frame] + 6);
+ // assert(decompressedSize == (uint32)(frameWidth * frameHeight) * getFrameScale(frame) / 100);
// Reallocate the output buffer, if its size has changed
if (decompressedSize != _outputBufferSize) {
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