aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb/vgagrafx.cpp
diff options
context:
space:
mode:
authorBertrand Augereau2011-08-03 18:48:43 +0200
committerBertrand Augereau2011-08-04 10:45:43 +0200
commit3427d07de07032b203f7aa02486b8073a65bca26 (patch)
treed494943d30fbe958220cc89653105080c42a089f /engines/dreamweb/vgagrafx.cpp
parent8ee7ed10664c9c4c6ed944acf489e973be37b327 (diff)
downloadscummvm-rg350-3427d07de07032b203f7aa02486b8073a65bca26.tar.gz
scummvm-rg350-3427d07de07032b203f7aa02486b8073a65bca26.tar.bz2
scummvm-rg350-3427d07de07032b203f7aa02486b8073a65bca26.zip
DREAMWEB: 'doblocks' ported to C++
Diffstat (limited to 'engines/dreamweb/vgagrafx.cpp')
-rw-r--r--engines/dreamweb/vgagrafx.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/engines/dreamweb/vgagrafx.cpp b/engines/dreamweb/vgagrafx.cpp
index a4f8d83117..ca86fc44b0 100644
--- a/engines/dreamweb/vgagrafx.cpp
+++ b/engines/dreamweb/vgagrafx.cpp
@@ -384,6 +384,48 @@ void DreamGenContext::clearwork() {
memset(workspace(), 0, 320*200);
}
+void DreamGenContext::doblocks() {
+ uint16 dstOffset = data.word(kMapady) * 320 + data.word(kMapadx);
+ uint16 mapOffset = kMap + data.byte(kMapy) * kMapwidth + data.byte(kMapx);
+ ds = data.word(kMapdata);
+ const uint8 *mapData = ds.ptr(mapOffset, 0);
+ ds = data.word(kBackdrop);
+ const uint8 *blocks = ds.ptr(kBlocks, 0);
+ es = data.word(kWorkspace);
+ uint8 *dstBuffer = es.ptr(dstOffset, 0);
+
+ for (size_t i = 0; i < 10; ++i) {
+ for (size_t j = 0; j < 11; ++j) {
+ uint16 blockType = mapData[j];
+ if (blockType != 0) {
+ uint8 *dst = dstBuffer + i * 320 * 16 + j * 16;
+ const uint8 *block = blocks + blockType * 256;
+ for (size_t k = 0; k < 4; ++k) {
+ memcpy(dst, block, 16);
+ block += 16;
+ dst += 320;
+ }
+ for (size_t k = 0; k < 12; ++k) {
+ memcpy(dst, block, 16);
+ memset(dst + 16, 0xdf, 4);
+ block += 16;
+ dst += 320;
+ }
+ dst += 4;
+ ax = 0x0dfdf;
+ memset(dst, 0xdf, 16);
+ dst += 320;
+ memset(dst, 0xdf, 16);
+ dst += 320;
+ memset(dst, 0xdf, 16);
+ dst += 320;
+ memset(dst, 0xdf, 16);
+ }
+ }
+ mapData += kMapwidth;
+ }
+}
+
void DreamGenContext::zoom() {
if (data.word(kWatchingtime) != 0)
return;