aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/screen_lol.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/kyra/screen_lol.cpp')
-rw-r--r--engines/kyra/screen_lol.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/engines/kyra/screen_lol.cpp b/engines/kyra/screen_lol.cpp
index dd3f81b7fa..b834123d2f 100644
--- a/engines/kyra/screen_lol.cpp
+++ b/engines/kyra/screen_lol.cpp
@@ -738,6 +738,37 @@ void Screen_LoL::applyOverlaySpecial(int page1, int x1, int y1, int page2, int x
addDirtyRect(_internDimDstX + _internDimX, _internDimDstY + _internDimY, _internBlockWidth, _internBlockHeight);
}
+void Screen_LoL::copyBlockAndApplyOverlayOutro(int srcPage, int dstPage, const uint8 *ovl) {
+ if (!ovl)
+ return;
+
+ const byte *src = getCPagePtr(srcPage);
+ byte *dst = getPagePtr(dstPage);
+
+ for (int y = 0; y < 200; ++y) {
+ for (int x = 0; x < 80; ++x) {
+ uint32 srcData = READ_LE_UINT32(src); src += 4;
+ uint32 dstData = READ_LE_UINT32(dst);
+ uint16 offset = 0;
+
+ offset = ((srcData & 0xFF) << 8) + (dstData & 0xFF);
+ *dst++ = ovl[offset];
+
+ offset = (srcData & 0xFF00) + ((dstData & 0xFF00) >> 8);
+ *dst++ = ovl[offset];
+
+ srcData >>= 16;
+ dstData >>= 16;
+
+ offset = ((srcData & 0xFF) << 8) + (dstData & 0xFF);
+ *dst++ = ovl[offset];
+
+ offset = (srcData & 0xFF00) + ((dstData & 0xFF00) >> 8);
+ *dst++ = ovl[offset];
+ }
+ }
+}
+
void Screen_LoL::calcBoundariesIntern(int dstX, int dstY, int width, int height) {
_internBlockWidth = _internBlockWidth2 = width;
_internBlockHeight = height;