diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/director/archive.cpp | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/engines/director/archive.cpp b/engines/director/archive.cpp index 74a36e400a..1b6864943d 100644 --- a/engines/director/archive.cpp +++ b/engines/director/archive.cpp @@ -189,39 +189,42 @@ void DirectorEngine::loadMac() { void DirectorEngine::loadSharedCastsFrom(Common::String filename) { Archive *shardcst = createArchive(); + debugC(1, kDebugLoading, "Loading Shared cast '%s'", filename.c_str()); + shardcst->openFile(filename); Score *castScore = new Score(this, shardcst); - Common::SeekableSubReadStreamEndian *castStream = shardcst->getResource(MKTAG('V','W','C','R'), 1024); + Common::Array<uint16> cast = shardcst->getResourceIDList(MKTAG('V','W','C','R')); - castScore->loadCastData(*castStream); - *_sharedCasts = castScore->_casts; + if (cast.size() == 1) { + for (Common::Array<uint16>::iterator iterator = cast.begin(); iterator != cast.end(); ++iterator) { + debugC(3, kDebugLoading, "Shared VWCR %d", *iterator); + castScore->loadCastData(*shardcst->getResource(MKTAG('V','W','C','R'), *iterator)); + *_sharedCasts = castScore->_casts; + } + } else { + error("Incorrect number of VWCR in shared cast '%s': %d", filename.c_str(), cast.size()); + } Common::Array<uint16> dib = shardcst->getResourceIDList(MKTAG('D','I','B',' ')); - if (dib.size() != 0) { - Common::Array<uint16>::iterator iterator; - for (iterator = dib.begin(); iterator != dib.end(); ++iterator) { + for (Common::Array<uint16>::iterator iterator = dib.begin(); iterator != dib.end(); ++iterator) { debugC(3, kDebugLoading, "Shared DIB %d", *iterator); _sharedDIB->setVal(*iterator, shardcst->getResource(MKTAG('D','I','B',' '), *iterator)); } } Common::Array<uint16> stxt = shardcst->getResourceIDList(MKTAG('S','T','X','T')); - if (stxt.size() != 0) { - Common::Array<uint16>::iterator iterator; - for (iterator = stxt.begin(); iterator != stxt.end(); ++iterator) { + for (Common::Array<uint16>::iterator iterator = stxt.begin(); iterator != stxt.end(); ++iterator) { debugC(3, kDebugLoading, "Shared STXT %d", *iterator); _sharedSTXT->setVal(*iterator, shardcst->getResource(MKTAG('S','T','X','T'), *iterator)); } } 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) { + for (Common::Array<uint16>::iterator iterator = bmp.begin(); iterator != bmp.end(); ++iterator) { _sharedBMP->setVal(*iterator, shardcst->getResource(MKTAG('B','I','T','D'), *iterator)); } } |