aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Kiewitz2009-10-19 18:06:33 +0000
committerMartin Kiewitz2009-10-19 18:06:33 +0000
commit86c8bb6bbfcc4422ebc6a1b2ba8b26485c1026d6 (patch)
treedec4132ff8e6d76cbb2605abcbf0b70f9e78c2d1
parent4d9d0411ea428ec787e2edb0a7ecd4094be60291 (diff)
downloadscummvm-rg350-86c8bb6bbfcc4422ebc6a1b2ba8b26485c1026d6.tar.gz
scummvm-rg350-86c8bb6bbfcc4422ebc6a1b2ba8b26485c1026d6.tar.bz2
scummvm-rg350-86c8bb6bbfcc4422ebc6a1b2ba8b26485c1026d6.zip
SCI/newgui: SciGuiPicture - fix drawing of mirrored embedded cel-data in vectordata (fixes lsl5 scene)
svn-id: r45249
-rw-r--r--engines/sci/gui/gui_picture.cpp10
-rw-r--r--engines/sci/gui/gui_picture.h1
2 files changed, 9 insertions, 2 deletions
diff --git a/engines/sci/gui/gui_picture.cpp b/engines/sci/gui/gui_picture.cpp
index 6fca4d6542..6416be9211 100644
--- a/engines/sci/gui/gui_picture.cpp
+++ b/engines/sci/gui/gui_picture.cpp
@@ -464,7 +464,7 @@ void SciGuiPicture::drawVectorData(byte *data, int dataSize) {
case PIC_OPX_EGA_MONO4:
break;
case PIC_OPX_EGA_EMBEDDED_VIEW:
- vectorGetAbsCoords(data, curPos, x, y);
+ vectorGetAbsCoordsNoMirror(data, curPos, x, y);
size = READ_LE_UINT16(data + curPos); curPos += 2;
_priority = pic_priority; // set global priority so the cel gets drawn using current priority as well
drawCelData(data, _resource->size, curPos, curPos + 8, 0, x, y);
@@ -493,7 +493,7 @@ void SciGuiPicture::drawVectorData(byte *data, int dataSize) {
_palette->set(&palette, 2);
break;
case PIC_OPX_VGA_EMBEDDED_VIEW: // draw cel
- vectorGetAbsCoords(data, curPos, x, y);
+ vectorGetAbsCoordsNoMirror(data, curPos, x, y);
size = READ_LE_UINT16(data + curPos); curPos += 2;
_priority = pic_priority; // set global priority so the cel gets drawn using current priority as well
drawCelData(data, _resource->size, curPos, curPos + 8, 0, x, y);
@@ -539,6 +539,12 @@ void SciGuiPicture::vectorGetAbsCoords(byte *data, int &curPos, int16 &x, int16
if (_mirroredFlag) x = 319 - x;
}
+void SciGuiPicture::vectorGetAbsCoordsNoMirror(byte *data, int &curPos, int16 &x, int16 &y) {
+ byte byte = data[curPos++];
+ x = data[curPos++] + ((byte & 0xF0) << 4);
+ y = data[curPos++] + ((byte & 0x0F) << 8);
+}
+
void SciGuiPicture::vectorGetRelCoords(byte *data, int &curPos, int16 &x, int16 &y) {
byte byte = data[curPos++];
if (byte & 0x80) {
diff --git a/engines/sci/gui/gui_picture.h b/engines/sci/gui/gui_picture.h
index 79075b4e8b..fc9791045b 100644
--- a/engines/sci/gui/gui_picture.h
+++ b/engines/sci/gui/gui_picture.h
@@ -48,6 +48,7 @@ private:
void drawVectorData(byte *data, int size);
bool vectorIsNonOpcode(byte byte);
void vectorGetAbsCoords(byte *data, int &curPos, int16 &x, int16 &y);
+ void vectorGetAbsCoordsNoMirror(byte *data, int &curPos, int16 &x, int16 &y);
void vectorGetRelCoords(byte *data, int &curPos, int16 &x, int16 &y);
void vectorGetRelCoordsMed(byte *data, int &curPos, int16 &x, int16 &y);
void vectorGetPatternTexture(byte *data, int &curPos, int16 pattern_Code, int16 &pattern_Texture);