aboutsummaryrefslogtreecommitdiff
path: root/engines/prince/graphics.cpp
diff options
context:
space:
mode:
authorlukaslw2014-07-30 19:54:39 +0200
committerlukaslw2014-07-30 19:54:39 +0200
commit93a552c26d2323321356ddb9cdd3400769100617 (patch)
treecd6a1af9d04a1eb94fe2e9140837f1237d4d8aa6 /engines/prince/graphics.cpp
parent956b98903fe704f0388538741c539567476bd745 (diff)
downloadscummvm-rg350-93a552c26d2323321356ddb9cdd3400769100617.tar.gz
scummvm-rg350-93a552c26d2323321356ddb9cdd3400769100617.tar.bz2
scummvm-rg350-93a552c26d2323321356ddb9cdd3400769100617.zip
PRINCE: Skull mini-game fix
Diffstat (limited to 'engines/prince/graphics.cpp')
-rw-r--r--engines/prince/graphics.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/engines/prince/graphics.cpp b/engines/prince/graphics.cpp
index 9b8c874642..195c61b5f0 100644
--- a/engines/prince/graphics.cpp
+++ b/engines/prince/graphics.cpp
@@ -230,6 +230,29 @@ void GraphicsMan::drawAsShadowDrawNode(Graphics::Surface *screen, DrawNode *draw
}
}
+void GraphicsMan::drawBackSpriteDrawNode(Graphics::Surface *screen, DrawNode *drawNode) {
+ byte *src1 = (byte *)drawNode->s->getBasePtr(0, 0);
+ byte *dst1 = (byte *)screen->getBasePtr(drawNode->posX, drawNode->posY);
+
+ for (int y = 0; y < drawNode->s->h; y++) {
+ byte *src2 = src1;
+ byte *dst2 = dst1;
+ for (int x = 0; x < drawNode->s->w; x++, src2++, dst2++) {
+ if (*src2 != 255) {
+ if (x + drawNode->posX < screen->w && x + drawNode->posX >= 0) {
+ if (y + drawNode->posY < screen->h && y + drawNode->posY >= 0) {
+ if (*dst2 == 255) {
+ *dst2 = *src2;
+ }
+ }
+ }
+ }
+ }
+ src1 += drawNode->s->pitch;
+ dst1 += screen->pitch;
+ }
+}
+
void GraphicsMan::drawPixel(Graphics::Surface *screen, int32 posX, int32 posY) {
byte *dst = (byte *)screen->getBasePtr(posX, posY);
*dst = 255;