aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/zvision/graphics/render_manager.cpp10
-rw-r--r--engines/zvision/graphics/render_manager.h2
-rw-r--r--engines/zvision/scripting/actions.cpp18
3 files changed, 26 insertions, 4 deletions
diff --git a/engines/zvision/graphics/render_manager.cpp b/engines/zvision/graphics/render_manager.cpp
index 8411f190a7..3e146939e3 100644
--- a/engines/zvision/graphics/render_manager.cpp
+++ b/engines/zvision/graphics/render_manager.cpp
@@ -149,6 +149,16 @@ void RenderManager::renderImageToBackground(const Common::String &fileName, int1
surface.free();
}
+void RenderManager::renderImageToBackground(const Common::String &fileName, int16 destX, int16 destY, int16 keyX, int16 keyY) {
+ Graphics::Surface surface;
+ readImageToSurface(fileName, surface);
+
+ uint16 keycolor = *(uint16 *)surface.getBasePtr(keyX, keyY);
+
+ blitSurfaceToBkg(surface, destX, destY, keycolor);
+ surface.free();
+}
+
void RenderManager::readImageToSurface(const Common::String &fileName, Graphics::Surface &destination) {
Common::File file;
diff --git a/engines/zvision/graphics/render_manager.h b/engines/zvision/graphics/render_manager.h
index ae24ce4f58..d34ecf8ce0 100644
--- a/engines/zvision/graphics/render_manager.h
+++ b/engines/zvision/graphics/render_manager.h
@@ -185,6 +185,8 @@ public:
*/
void renderImageToBackground(const Common::String &fileName, int16 destX, int16 destY, uint32 colorkey);
+ void renderImageToBackground(const Common::String &fileName, int16 destX, int16 destY, int16 keyX, int16 keyY);
+
/**
* Sets the current background image to be used by the RenderManager and immediately
* blits it to the screen. (It won't show up until the end of the frame)
diff --git a/engines/zvision/scripting/actions.cpp b/engines/zvision/scripting/actions.cpp
index eb6b09308b..31f68d7953 100644
--- a/engines/zvision/scripting/actions.cpp
+++ b/engines/zvision/scripting/actions.cpp
@@ -815,10 +815,20 @@ ActionSetPartialScreen::ActionSetPartialScreen(ZVision *engine, int32 slotkey, c
bool ActionSetPartialScreen::execute() {
RenderManager *renderManager = _engine->getRenderManager();
- if (_backgroundColor >= 0)
- renderManager->renderImageToBackground(_fileName, _x, _y, _backgroundColor);
- else
- renderManager->renderImageToBackground(_fileName, _x, _y);
+
+ if (_engine->getGameId() == GID_NEMESIS) {
+ if (_backgroundColor)
+ renderManager->renderImageToBackground(_fileName, _x, _y, 0, 0);
+ else
+ renderManager->renderImageToBackground(_fileName, _x, _y);
+ } else {
+ if (_backgroundColor >= 0)
+ renderManager->renderImageToBackground(_fileName, _x, _y, _backgroundColor);
+ else if (_backgroundColor == -2)
+ renderManager->renderImageToBackground(_fileName, _x, _y, 0, 0);
+ else
+ renderManager->renderImageToBackground(_fileName, _x, _y);
+ }
return true;
}