diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/director/director.cpp | 14 | ||||
-rw-r--r-- | engines/director/director.h | 2 | ||||
-rw-r--r-- | engines/director/score.cpp | 10 |
3 files changed, 25 insertions, 1 deletions
diff --git a/engines/director/director.cpp b/engines/director/director.cpp index 2081ebdc89..c7ae940873 100644 --- a/engines/director/director.cpp +++ b/engines/director/director.cpp @@ -58,6 +58,11 @@ DirectorEngine::DirectorEngine(OSystem *syst, const DirectorGameDescription *gam _currentPalette = 0; //FIXME _sharedMMM = "SHARDCST.MMM"; + _sharedCasts = new Common::HashMap<int, Cast *>(); + _sharedDIB = new Common::HashMap<int, Common::SeekableSubReadStreamEndian *>(); + _sharedBMP = new Common::HashMap<int, Common::SeekableSubReadStreamEndian *>(); + _sharedSTXT = new Common::HashMap<int, Common::SeekableSubReadStreamEndian *>(); + _sharedSound = new Common::HashMap<int, Common::SeekableSubReadStreamEndian *>(); _movies = new Common::HashMap<Common::String, Score *>(); const Common::FSNode gameDataDir(ConfMan.get("path")); @@ -423,6 +428,15 @@ void DirectorEngine::loadSharedCastsFrom(Common::String filename) { } } + Common::Array<uint16> bmp = shardcst->getResourceIDList(MKTAG('B','I','T','D')); + + if (bmp.size() != 0) { + Common::Array<uint16>::iterator iterator; + for (iterator = bmp.begin(); iterator != bmp.end(); ++iterator) { + _sharedBMP->setVal(*iterator, shardcst->getResource(MKTAG('B','I','T','D'), *iterator)); + } + } + Common::Array<uint16> sound = shardcst->getResourceIDList(MKTAG('S','N','D',' ')); if (stxt.size() != 0) { diff --git a/engines/director/director.h b/engines/director/director.h index a3e0ad0dbb..2d0b734002 100644 --- a/engines/director/director.h +++ b/engines/director/director.h @@ -69,6 +69,7 @@ public: uint16 getPaletteColorCount() const { return _currentPaletteLength; } void loadSharedCastsFrom(Common::String filename); Common::HashMap<int, Common::SeekableSubReadStreamEndian *> *getSharedDIB() const { return _sharedDIB; } + Common::HashMap<int, Common::SeekableSubReadStreamEndian *> *getSharedBMP() const { return _sharedBMP; } Common::HashMap<int, Common::SeekableSubReadStreamEndian *> *getSharedSTXT() const { return _sharedSTXT; } Common::HashMap<int, Cast *> *getSharedCasts() const { return _sharedCasts; } @@ -98,6 +99,7 @@ private: Common::HashMap<int, Common::SeekableSubReadStreamEndian *> *_sharedDIB; Common::HashMap<int, Common::SeekableSubReadStreamEndian *> *_sharedSTXT; Common::HashMap<int, Common::SeekableSubReadStreamEndian *> *_sharedSound; + Common::HashMap<int, Common::SeekableSubReadStreamEndian *> *_sharedBMP; Archive *_mainArchive; Common::MacResManager *_macBinary; diff --git a/engines/director/score.cpp b/engines/director/score.cpp index c51c6cc159..6b9cdb293a 100644 --- a/engines/director/score.cpp +++ b/engines/director/score.cpp @@ -1164,6 +1164,10 @@ void Frame::renderSprites(Graphics::ManagedSurface &surface, bool renderTrail) { Image::ImageDecoder *img = getImageFrom(_sprites[i]->_castId); + if (!img) { + continue; + } + uint32 regX = static_cast<BitmapCast *>(_sprites[i]->_cast)->regX; uint32 regY = static_cast<BitmapCast *>(_sprites[i]->_cast)->regY; uint32 rectLeft = static_cast<BitmapCast *>(_sprites[i]->_cast)->initialRect.left; @@ -1224,7 +1228,11 @@ Image::ImageDecoder *Frame::getImageFrom(uint16 spriteId) { return img; } - //TODO Shared bitmaps + if (_vm->getSharedBMP()->contains(imgId)) { + img = new Image::BitmapDecoder(); + img->loadStream(*_vm->getSharedBMP()->getVal(imgId)); + return img; + } warning("Image %d not found", spriteId); return img; |