aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/graphics/view.cpp
diff options
context:
space:
mode:
authorMatthew Hoops2011-02-01 03:50:29 +0000
committerMatthew Hoops2011-02-01 03:50:29 +0000
commit1ac0680a77df8ee59ba2435362bb620ac2bf6e97 (patch)
tree4cc0987cdd54621ce04d892498629baf4860669a /engines/sci/graphics/view.cpp
parentac4bf4ffb88a9ded5176df32ac5ea2f2790c432d (diff)
downloadscummvm-rg350-1ac0680a77df8ee59ba2435362bb620ac2bf6e97.tar.gz
scummvm-rg350-1ac0680a77df8ee59ba2435362bb620ac2bf6e97.tar.bz2
scummvm-rg350-1ac0680a77df8ee59ba2435362bb620ac2bf6e97.zip
SCI: Fix SCI1.1+ Mac views with uint16 rle lengths (thanks, Walter)
svn-id: r55705
Diffstat (limited to 'engines/sci/graphics/view.cpp')
-rw-r--r--engines/sci/graphics/view.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/engines/sci/graphics/view.cpp b/engines/sci/graphics/view.cpp
index a25ae805d5..603169a931 100644
--- a/engines/sci/graphics/view.cpp
+++ b/engines/sci/graphics/view.cpp
@@ -449,12 +449,24 @@ void GfxView::unpackCel(int16 loopNo, int16 celNo, byte *outPtr, uint32 pixelCou
literalPtr = _resourceData + celInfo->offsetLiteral;
if (celInfo->offsetRLE) {
if (g_sci->getPlatform() == Common::kPlatformMacintosh && getSciVersion() >= SCI_VERSION_1_1) {
+ // KQ6 uses byte lengths, all others use uint16
+ // The SCI devs must have quickly realized that a max of 255 pixels wide
+ // was not very good for 320 or 640 width games.
+ bool hasByteLengths = (g_sci->getGameId() == GID_KQ6);
+
// compression for SCI1.1+ Mac
while (pixelNo < pixelCount) {
uint32 pixelLine = pixelNo;
- runLength = *rlePtr++;
- pixelNo += runLength;
- runLength = *rlePtr++;
+
+ if (hasByteLengths) {
+ pixelNo += *rlePtr++;
+ runLength = *rlePtr++;
+ } else {
+ pixelNo += READ_BE_UINT16(rlePtr);
+ runLength = READ_BE_UINT16(rlePtr + 2);
+ rlePtr += 4;
+ }
+
while (runLength-- && pixelNo < pixelCount) {
outPtr[pixelNo] = *literalPtr++;
if (outPtr[pixelNo] == 255)