aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/voyeur/graphics.cpp57
-rw-r--r--engines/voyeur/graphics.h2
2 files changed, 56 insertions, 3 deletions
diff --git a/engines/voyeur/graphics.cpp b/engines/voyeur/graphics.cpp
index eaa7dfa621..da077941ff 100644
--- a/engines/voyeur/graphics.cpp
+++ b/engines/voyeur/graphics.cpp
@@ -45,6 +45,12 @@ GraphicsManager::GraphicsManager() {
void GraphicsManager::sInitGraphics() {
initGraphics(SCREEN_WIDTH, SCREEN_HEIGHT, false);
+ _screenSurface.create(SCREEN_WIDTH, SCREEN_HEIGHT,
+ Graphics::PixelFormat::createFormatCLUT8());
+}
+
+GraphicsManager::~GraphicsManager() {
+ _screenSurface.free();
}
void GraphicsManager::addFadeInt() {
@@ -92,7 +98,25 @@ void GraphicsManager::setupMCGASaveRect(ViewPortResource *viewPort) {
}
void GraphicsManager::addRectOptSaveRect(ViewPortResource *viewPort, int idx, const Common::Rect &bounds) {
- // TODO
+ int count1, count2;
+ int idx1, varE, var24;
+
+ if (viewPort->_rectListCount[idx] == -1)
+ return;
+
+ viewPort->_rectListPtr[idx]->push_back(bounds);
+ count1 = count2 = viewPort->_rectListCount[idx];
+ varE = var24 = 0;
+
+ if (count1 > 0) {
+ for (idx1 = 0; idx1 < count1; ++idx1) {
+ // TODO: In progress
+
+ Common::Array<Common::Rect> &rectList = *viewPort->_rectListPtr[idx];
+ }
+
+ viewPort->_rectListCount[idx] = idx1;
+ }
}
void GraphicsManager::restoreMCGASaveRect(ViewPortResource *viewPort) {
@@ -269,15 +293,42 @@ void GraphicsManager::sDrawPic(DisplayResource *srcDisplay, DisplayResource *des
srcP = imgData1 + srcOffset;
if (flags2 & 8) {
- error("TODO: sDrawPic");
+ // loc_258D8
+ destP = imgData2 + screenOffset;
+
+ if (flags1 & 2) {
+ // loc_258F5
+ } else {
+ // loc_25D40
+ if (flags1 & 0x100) {
+ // loc_25D4A
+ } else {
+ // loc_2606D
+ destP = (byte *)_screenSurface.pixels;
+
+ for (int yp = 0; yp < height1; ++yp) {
+ Common::copy(srcP, srcP + width2, destP);
+ destP += width2 + widthDiff2;
+ srcP += width2 + widthDiff;
+ }
+ }
+ }
} else {
destP = imgData2 + screenOffset;
+ // loc_2615E
if (flags1 & 2) {
error("TODO: sDrawPic");
} else {
if (flags1 & 0x100) {
- error("TODO: sDrawPic");
+ srcP = imgData1;
+
+ if (isClipped) {
+ // loc_26424
+
+ } else {
+ // loc_26543
+ }
} else {
for (int yp = 0; yp < height1; ++yp) {
Common::copy(srcP, srcP + width2, destP);
diff --git a/engines/voyeur/graphics.h b/engines/voyeur/graphics.h
index 7bb25d33df..1eec37bab7 100644
--- a/engines/voyeur/graphics.h
+++ b/engines/voyeur/graphics.h
@@ -65,6 +65,7 @@ public:
int _screenOffset;
uint _planeSelect;
int _sImageShift;
+ Graphics::Surface _screenSurface;
private:
static void fadeIntFunc();
static void vDoFadeInt();
@@ -75,6 +76,7 @@ private:
PictureResource *srcPic, PictureResource *destPic);
public:
GraphicsManager();
+ ~GraphicsManager();
void setVm(VoyeurEngine *vm) { _vm = vm; }
void sInitGraphics();