diff options
-rw-r--r-- | engines/sci/gui/gui_picture.cpp | 10 | ||||
-rw-r--r-- | engines/sci/gui/gui_picture.h | 1 |
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); |