diff options
-rw-r--r-- | engines/director/director.cpp | 2 | ||||
-rw-r--r-- | engines/director/director.h | 7 | ||||
-rw-r--r-- | engines/director/resource.cpp | 37 |
3 files changed, 26 insertions, 20 deletions
diff --git a/engines/director/director.cpp b/engines/director/director.cpp index 5e523de11d..83708e0028 100644 --- a/engines/director/director.cpp +++ b/engines/director/director.cpp @@ -134,7 +134,7 @@ Common::Error DirectorEngine::run() { loadSharedCastsFrom(_sharedCastFile); - loadMainArchive(); + loadInitialMovie(getEXEName()); _currentScore = new Score(this, _mainArchive); debug(0, "Score name %s", _currentScore->getMacName().c_str()); diff --git a/engines/director/director.h b/engines/director/director.h index f80329e5b4..a2cc1fa9db 100644 --- a/engines/director/director.h +++ b/engines/director/director.h @@ -86,7 +86,8 @@ public: void loadPatterns(); Graphics::MacPatterns &getPatterns(); - void loadMainArchive(); + void loadInitialMovie(const Common::String movie); + Archive *openMainArchive(const Common::String movie); Archive *createArchive(); void cleanupMainArchive(); @@ -114,13 +115,13 @@ private: const DirectorGameDescription *_gameDescription; Common::HashMap<Common::String, Score *> *scanMovies(const Common::String &folder); - void loadEXE(); + void loadEXE(const Common::String movie); void loadEXEv3(Common::SeekableReadStream *stream); void loadEXEv4(Common::SeekableReadStream *stream); void loadEXEv5(Common::SeekableReadStream *stream); void loadEXEv7(Common::SeekableReadStream *stream); void loadEXERIFX(Common::SeekableReadStream *stream, uint32 offset); - void loadMac(); + void loadMac(const Common::String movie); Common::HashMap<int, Cast *> *_sharedCasts; Common::HashMap<int, Common::SeekableSubReadStreamEndian *> *_sharedDIB; diff --git a/engines/director/resource.cpp b/engines/director/resource.cpp index f43118d10b..ae2eae844f 100644 --- a/engines/director/resource.cpp +++ b/engines/director/resource.cpp @@ -39,11 +39,22 @@ Archive *DirectorEngine::createArchive() { } } -void DirectorEngine::loadMainArchive() { +void DirectorEngine::loadInitialMovie(const Common::String movie) { if (getPlatform() == Common::kPlatformWindows) - loadEXE(); + loadEXE(movie); else - loadMac(); + loadMac(movie); +} + +Archive *DirectorEngine::openMainArchive(const Common::String movie) { + delete _mainArchive; + + _mainArchive = createArchive(); + + if (!_mainArchive->openFile(movie)) + error("Could not open '%s'", movie.c_str()); + + return _mainArchive; } void DirectorEngine::cleanupMainArchive() { @@ -51,8 +62,8 @@ void DirectorEngine::cleanupMainArchive() { delete _macBinary; } -void DirectorEngine::loadEXE() { - Common::SeekableReadStream *exeStream = SearchMan.createReadStreamForMember(getEXEName()); +void DirectorEngine::loadEXE(const Common::String movie) { + Common::SeekableReadStream *exeStream = SearchMan.createReadStreamForMember(movie); if (!exeStream) error("Failed to open EXE '%s'", getEXEName().c_str()); @@ -93,10 +104,7 @@ void DirectorEngine::loadEXEv3(Common::SeekableReadStream *stream) { debugC(1, kDebugLoading, "Main MMM: '%s'", mmmFileName.c_str()); debugC(1, kDebugLoading, "Directory Name: '%s'", directoryName.c_str()); - _mainArchive = new RIFFArchive(); - - if (!_mainArchive->openFile(mmmFileName)) - error("Could not open '%s'", mmmFileName.c_str()); + openMainArchive(mmmFileName); delete stream; } @@ -154,19 +162,16 @@ void DirectorEngine::loadEXERIFX(Common::SeekableReadStream *stream, uint32 offs error("Failed to load RIFX from EXE"); } -void DirectorEngine::loadMac() { +void DirectorEngine::loadMac(const Common::String movie) { if (getVersion() < 4) { // The data is part of the resource fork of the executable - _mainArchive = new MacArchive(); - - if (!_mainArchive->openFile(getEXEName())) - error("Failed to open Mac binary '%s'", getEXEName().c_str()); + openMainArchive(movie); } else { // The RIFX is located in the data fork of the executable _macBinary = new Common::MacResManager(); - if (!_macBinary->open(getEXEName()) || !_macBinary->hasDataFork()) - error("Failed to open Mac binary '%s'", getEXEName().c_str()); + if (!_macBinary->open(movie) || !_macBinary->hasDataFork()) + error("Failed to open Mac binary '%s'", movie.c_str()); Common::SeekableReadStream *dataFork = _macBinary->getDataFork(); _mainArchive = new RIFXArchive(); |