From 1cb05366f8b3e59b450e57a02ee8e3966d0ddee0 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Mon, 4 Oct 2004 13:49:30 +0000 Subject: [PATCH] Implement case 150 for drawBMAPBg svn-id: r15408 --- scumm/gfx.cpp | 16 +++++++++++++++- scumm/gfx.h | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/scumm/gfx.cpp b/scumm/gfx.cpp index 5962fe20c2d..b1d106bf1cf 100644 --- a/scumm/gfx.cpp +++ b/scumm/gfx.cpp @@ -1396,7 +1396,7 @@ void Gdi::drawBMAPBg(const byte *ptr, VirtScreen *vs, int startstrip) { // for an area spanning multiple strips. In particular, the codecs 13 & 14 // in decompressBitmap call drawStripHE() if (code == 150) { - warning("drawBMAPBg: case 150 unhandled"); + fillRect((byte *)vs->backBuf, vs->pitch, 0, 0, vs->w - 1, vs->h - 1, *bmap_ptr); } else if ((code >= 134 && code <= 138) || (code >= 144 && code <= 148)) { _decomp_shr = code % 10; _decomp_mask = 0xFF >> (8 - _decomp_shr); @@ -2174,6 +2174,20 @@ void Gdi::drawStripHE(byte *dst, int dstPitch, const byte *src, int width, int h } } +void Gdi::fillRect(byte *dst, int pitch, int x1, int y1, int x2, int y2, byte color) { + int w, h; + byte *ptr = dst + x1 + y1 * pitch; + + w = x2 - x1 + 1; + h = y2 - y1 + 1; + + for (int i = 0; i < h; i++) { + memset(ptr, color, w); + ptr += pitch; + } +} + + #undef READ_BIT #undef FILL_BITS diff --git a/scumm/gfx.h b/scumm/gfx.h index bf04918938d..d2aae0dacb5 100644 --- a/scumm/gfx.h +++ b/scumm/gfx.h @@ -249,6 +249,7 @@ protected: void drawStrip3DO(byte *dst, int dstPitch, const byte *src, int height, const bool transpCheck) const; void drawStripHE(byte *dst, int dstPitch, const byte *src, int width, int height, const bool transpCheck) const; + void fillRect(byte *dst, int dstPitch, int x1, int y1, int x2, int y2, byte color); /* Mask decompressors */ void drawStripC64Mask(byte *dst, int stripnr, int width, int height) const;