aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/made/screenfx.cpp37
1 files changed, 28 insertions, 9 deletions
diff --git a/engines/made/screenfx.cpp b/engines/made/screenfx.cpp
index 0a2db5c787..b73c83c663 100644
--- a/engines/made/screenfx.cpp
+++ b/engines/made/screenfx.cpp
@@ -275,16 +275,23 @@ void ScreenEffects::copyRect(Graphics::Surface *surface, int16 x1, int16 y1, int
void ScreenEffects::reposition(int16 x1, int16 y1, int16 x2, int16 y2, int xd, int yd) {
Graphics::Surface *vgaScreen = _screen->lockScreen();
+ bool backwardFlag = (yd > y1) || ((yd == y1) && (xd > x1));
+
byte *source = (byte *)vgaScreen->getBasePtr(x1, y1);
byte *dest = (byte *)vgaScreen->getBasePtr(xd, yd);
+ if (yd > y1) {
+ source += 320 * (y2 - y1 - 1);
+ dest += 320 * (y2 - y1 - 1);
+ }
+
for (int y = 0; y < y2 - y1; y++) {
- if (dest < source)
+ if (!backwardFlag)
memcpy(dest, source, x2 - x1);
else
Common::copy_backward(source, source + x2 - x1, dest + x2 - x1);
- dest += 320;
- source += 320;
+ source += (yd > y1) ? -320 : 320;
+ dest += (yd > y1) ? -320 : 320;
}
_screen->unlockScreen();
}
@@ -508,16 +515,28 @@ void ScreenEffects::vfx18(Graphics::Surface *surface, byte *palette, byte *newPa
setPalette(palette);
}
+// "Screen slide in" top to bottom
void ScreenEffects::vfx19(Graphics::Surface *surface, byte *palette, byte *newPalette, int colorCount) {
- // TODO
- warning("Unimplemented visual effect: 19");
- vfx00(surface, palette, newPalette, colorCount);
+ for (int y = 4; y <= 200; y += 4) {
+ if (y != 200)
+ reposition(0, y, 320, 196, 0, y + 4);
+ copyRect(surface, 0, 200 - y, 320, 200, 0, 0);
+ _screen->updateScreenAndWait(25);
+ }
+
+ setPalette(palette);
}
+// "Screen slide in" bottom to top
void ScreenEffects::vfx20(Graphics::Surface *surface, byte *palette, byte *newPalette, int colorCount) {
- // TODO
- warning("Unimplemented visual effect: 20");
- vfx00(surface, palette, newPalette, colorCount);
+ for (int y = 4; y <= 200; y += 4) {
+ if (y != 200)
+ reposition(0, 4, 320, 200 - y, 0, 0);
+ copyRect(surface, 0, 0, 320, y, 0, 200 - y);
+ _screen->updateScreenAndWait(25);
+ }
+
+ setPalette(palette);
}
} // End of namespace Made