aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/graphics/picture.cpp
diff options
context:
space:
mode:
authorMatthew Hoops2011-02-02 16:15:49 +0000
committerMatthew Hoops2011-02-02 16:15:49 +0000
commitf1f86646def1b5f50a127331bdb2bc8e56592b62 (patch)
treeab8e8be3c11ddda58dc5c330ecec3901cb0dc422 /engines/sci/graphics/picture.cpp
parenta86cb87b98f0ec904dcc8e46b5b2c4b3d2f81aca (diff)
downloadscummvm-rg350-f1f86646def1b5f50a127331bdb2bc8e56592b62.tar.gz
scummvm-rg350-f1f86646def1b5f50a127331bdb2bc8e56592b62.tar.bz2
scummvm-rg350-f1f86646def1b5f50a127331bdb2bc8e56592b62.zip
SCI: Fix SCI32 Mac pictures
svn-id: r55724
Diffstat (limited to 'engines/sci/graphics/picture.cpp')
-rw-r--r--engines/sci/graphics/picture.cpp38
1 files changed, 21 insertions, 17 deletions
diff --git a/engines/sci/graphics/picture.cpp b/engines/sci/graphics/picture.cpp
index c381e5aadb..e338856361 100644
--- a/engines/sci/graphics/picture.cpp
+++ b/engines/sci/graphics/picture.cpp
@@ -151,37 +151,37 @@ int16 GfxPicture::getSci32celCount() {
int16 GfxPicture::getSci32celY(int16 celNo) {
byte *inbuffer = _resource->data;
- int header_size = READ_LE_UINT16(inbuffer);
+ int header_size = READ_SCI11ENDIAN_UINT16(inbuffer);
int cel_headerPos = header_size + 42 * celNo;
- return READ_LE_UINT16(inbuffer + cel_headerPos + 40);
+ return READ_SCI11ENDIAN_UINT16(inbuffer + cel_headerPos + 40);
}
int16 GfxPicture::getSci32celX(int16 celNo) {
byte *inbuffer = _resource->data;
- int header_size = READ_LE_UINT16(inbuffer);
+ int header_size = READ_SCI11ENDIAN_UINT16(inbuffer);
int cel_headerPos = header_size + 42 * celNo;
- return READ_LE_UINT16(inbuffer + cel_headerPos + 38);
+ return READ_SCI11ENDIAN_UINT16(inbuffer + cel_headerPos + 38);
}
int16 GfxPicture::getSci32celWidth(int16 celNo) {
byte *inbuffer = _resource->data;
- int header_size = READ_LE_UINT16(inbuffer);
+ int header_size = READ_SCI11ENDIAN_UINT16(inbuffer);
int cel_headerPos = header_size + 42 * celNo;
- return READ_LE_UINT16(inbuffer + cel_headerPos + 0);
+ return READ_SCI11ENDIAN_UINT16(inbuffer + cel_headerPos + 0);
}
int16 GfxPicture::getSci32celPriority(int16 celNo) {
byte *inbuffer = _resource->data;
- int header_size = READ_LE_UINT16(inbuffer);
+ int header_size = READ_SCI11ENDIAN_UINT16(inbuffer);
int cel_headerPos = header_size + 42 * celNo;
- return READ_LE_UINT16(inbuffer + cel_headerPos + 36);
+ return READ_SCI11ENDIAN_UINT16(inbuffer + cel_headerPos + 36);
}
void GfxPicture::drawSci32Vga(int16 celNo, int16 drawX, int16 drawY, int16 pictureX, bool mirrored) {
byte *inbuffer = _resource->data;
int size = _resource->size;
- int header_size = READ_LE_UINT16(inbuffer);
- int palette_data_ptr = READ_LE_UINT16(inbuffer + 6);
+ int header_size = READ_SCI11ENDIAN_UINT16(inbuffer);
+ int palette_data_ptr = READ_SCI11ENDIAN_UINT16(inbuffer + 6);
// int celCount = inbuffer[2];
int cel_headerPos = header_size;
int cel_RlePos, cel_LiteralPos;
@@ -211,11 +211,11 @@ void GfxPicture::drawSci32Vga(int16 celNo, int16 drawX, int16 drawY, int16 pictu
if (mirrored) {
// switch around relativeXpos
Common::Rect displayArea = _coordAdjuster->pictureGetDisplayArea();
- drawX = displayArea.width() - drawX - READ_LE_UINT16(inbuffer + cel_headerPos + 0);
+ drawX = displayArea.width() - drawX - READ_SCI11ENDIAN_UINT16(inbuffer + cel_headerPos + 0);
}
- cel_RlePos = READ_LE_UINT32(inbuffer + cel_headerPos + 24);
- cel_LiteralPos = READ_LE_UINT32(inbuffer + cel_headerPos + 28);
+ cel_RlePos = READ_SCI11ENDIAN_UINT32(inbuffer + cel_headerPos + 24);
+ cel_LiteralPos = READ_SCI11ENDIAN_UINT32(inbuffer + cel_headerPos + 28);
drawCelData(inbuffer, size, cel_headerPos, cel_RlePos, cel_LiteralPos, drawX, drawY, pictureX);
cel_headerPos += 42;
@@ -228,8 +228,6 @@ void GfxPicture::drawCelData(byte *inbuffer, int size, int headerPos, int rlePos
byte *headerPtr = inbuffer + headerPos;
byte *rlePtr = inbuffer + rlePos;
byte *literalPtr = inbuffer + literalPos;
- uint16 width = READ_LE_UINT16(headerPtr + 0);
- uint16 height = READ_LE_UINT16(headerPtr + 2);
int16 displaceX, displaceY;
byte priority = _addToFlag ? _priority : 0;
byte clearColor;
@@ -237,10 +235,14 @@ void GfxPicture::drawCelData(byte *inbuffer, int size, int headerPos, int rlePos
byte curByte, runLength;
int16 y, lastY, x, leftX, rightX;
int pixelNr, pixelCount;
+ uint16 width, height;
#ifdef ENABLE_SCI32
if (_resourceType != SCI_PICTURE_TYPE_SCI32) {
#endif
+ // Width/height here are always LE, even in Mac versions
+ width = READ_LE_UINT16(headerPtr + 0);
+ height = READ_LE_UINT16(headerPtr + 2);
displaceX = (signed char)headerPtr[4];
displaceY = (unsigned char)headerPtr[5];
if (_resourceType == SCI_PICTURE_TYPE_SCI11) {
@@ -251,8 +253,10 @@ void GfxPicture::drawCelData(byte *inbuffer, int size, int headerPos, int rlePos
}
#ifdef ENABLE_SCI32
} else {
- displaceX = READ_LE_UINT16(headerPtr + 4); // probably signed?!?
- displaceY = READ_LE_UINT16(headerPtr + 6); // probably signed?!?
+ width = READ_SCI11ENDIAN_UINT16(headerPtr + 0);
+ height = READ_SCI11ENDIAN_UINT16(headerPtr + 2);
+ displaceX = READ_SCI11ENDIAN_UINT16(headerPtr + 4); // probably signed?!?
+ displaceY = READ_SCI11ENDIAN_UINT16(headerPtr + 6); // probably signed?!?
clearColor = headerPtr[8];
if (headerPtr[9] == 0)
compression = false;