aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/voyeur/files.cpp2
-rw-r--r--engines/voyeur/graphics.cpp26
-rw-r--r--engines/voyeur/voyeur.cpp1
3 files changed, 28 insertions, 1 deletions
diff --git a/engines/voyeur/files.cpp b/engines/voyeur/files.cpp
index b2f4d4f58c..74da77dda1 100644
--- a/engines/voyeur/files.cpp
+++ b/engines/voyeur/files.cpp
@@ -295,6 +295,8 @@ PictureResource *BoltFile::getPictureResource(uint32 id) {
if ((int32)id == -1)
return NULL;
+ if (id & 0xffff)
+ id <<= 16;
return getBoltEntry(id)._picResource;
}
diff --git a/engines/voyeur/graphics.cpp b/engines/voyeur/graphics.cpp
index 9f547c65ca..ace4b35718 100644
--- a/engines/voyeur/graphics.cpp
+++ b/engines/voyeur/graphics.cpp
@@ -344,7 +344,31 @@ void GraphicsManager::sDrawPic(DisplayResource *srcDisplay, DisplayResource *des
// loc_2615E
if (srcFlags & 2) {
- error("TODO: sDrawPic");
+ srcP = srcImgData + srcOffset;
+
+ if (destFlags & 8) {
+ error("TODO: sDrawPic");
+ } else {
+ // loc_25773
+ // Copy from screen to surface with transparency
+ destP = destImgData + screenOffset;
+ srcP = (byte *)_screenSurface.pixels + srcOffset;
+
+ if (srcFlags & 2) {
+ for (int yp = 0; yp < height1; ++yp) {
+ for (int xp = 0; xp < width2; ++xp, ++destP) {
+ byte srcPixel = *srcP++;
+ if (srcPixel)
+ *destP = srcPixel;
+ }
+
+ destP += widthDiff2;
+ srcP += widthDiff;
+ }
+ } else {
+ error("TODO: sDrawPic");
+ }
+ }
} else {
if (srcFlags & 0x100) {
srcP = srcImgData;
diff --git a/engines/voyeur/voyeur.cpp b/engines/voyeur/voyeur.cpp
index c2e99076af..83e5d80802 100644
--- a/engines/voyeur/voyeur.cpp
+++ b/engines/voyeur/voyeur.cpp
@@ -214,6 +214,7 @@ bool VoyeurEngine::doLock() {
Common::String password = lock._password;
srcPic = _bVoy->getPictureResource(0x702);
+ assert(srcPic);
// Get the mappings of keys on the keypad
keyData = _bVoy->memberAddr(0x705);