From 582fa4cdf07c3c9a510b0fd9d5473f72ed133d44 Mon Sep 17 00:00:00 2001 From: Kari Salminen Date: Wed, 20 Jun 2007 23:12:38 +0000 Subject: Add AGI256 picture resource decoding support to PictureMgr::decodePicture. svn-id: r27568 --- engines/agi/picture.cpp | 20 ++++++++++++++++---- engines/agi/picture.h | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/engines/agi/picture.cpp b/engines/agi/picture.cpp index 9a16d4ab20..7a30d9c094 100644 --- a/engines/agi/picture.cpp +++ b/engines/agi/picture.cpp @@ -619,8 +619,9 @@ uint8 *PictureMgr::convertV3Pic(uint8 *src, uint32 len) { * drawing. * @param n AGI picture resource number * @param clear clear AGI screen before drawing + * @param agi256 load an AGI256 picture resource */ -int PictureMgr::decodePicture(int n, int clear) { +int PictureMgr::decodePicture(int n, int clear, bool agi256) { debugC(8, kDebugLevelResources, "(%d)", n); patCode = 0; @@ -633,10 +634,21 @@ int PictureMgr::decodePicture(int n, int clear) { flen = _vm->_game.dirPic[n].len; foffs = 0; - if (clear) - memset(_vm->_game.sbuf, 0x4f, _WIDTH * _HEIGHT); + if (clear && !agi256) // 256 color pictures should always fill the whole screen, so no clearing for them. + memset(_vm->_game.sbuf16c, 0x4f, _WIDTH * _HEIGHT); // Clear 16 color AGI screen (Priority 4, color white). - drawPicture(); + if (!agi256) { + drawPicture(); // Draw 16 color picture. + } else { + const uint32 maxFlen = _WIDTH * _HEIGHT; + memcpy(_vm->_game.sbuf256c, data, MIN(flen, maxFlen)); // Draw 256 color picture. + + if (flen < maxFlen) { + warning("Undersized AGI256 picture resource %d, using it anyway. Filling rest with white.", n); + memset(_vm->_game.sbuf256c + flen, 0x0f, maxFlen - flen); // Fill missing area with white. + } else if (flen > maxFlen) + warning("Oversized AGI256 picture resource %d, decoding only %ux%u part of it", n, _WIDTH, _HEIGHT); + } if (clear) _vm->clearImageStack(); diff --git a/engines/agi/picture.h b/engines/agi/picture.h index 6a3f641eca..0f8584f3b2 100644 --- a/engines/agi/picture.h +++ b/engines/agi/picture.h @@ -68,7 +68,7 @@ public: _gfx = gfx; } - int decodePicture(int, int); + int decodePicture(int n, int clear, bool agi256 = false); int unloadPicture(int); void showPic(); uint8 *convertV3Pic(uint8 *src, uint32 len); -- cgit v1.2.3