diff options
author | Bertrand Augereau | 2011-08-03 18:48:43 +0200 |
---|---|---|
committer | Bertrand Augereau | 2011-08-04 10:45:43 +0200 |
commit | 3427d07de07032b203f7aa02486b8073a65bca26 (patch) | |
tree | d494943d30fbe958220cc89653105080c42a089f /engines/dreamweb/vgagrafx.cpp | |
parent | 8ee7ed10664c9c4c6ed944acf489e973be37b327 (diff) | |
download | scummvm-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.cpp | 42 |
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; |