Skip to content

Commit

Permalink
DIRECTOR: Cleanup main movie loading
Browse files Browse the repository at this point in the history
  • Loading branch information
sev- committed Jan 15, 2017
1 parent 5d22cc4 commit 7b666dc
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 20 deletions.
2 changes: 1 addition & 1 deletion engines/director/director.cpp
Expand Up @@ -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());
Expand Down
7 changes: 4 additions & 3 deletions engines/director/director.h
Expand Up @@ -86,7 +86,8 @@ class DirectorEngine : public ::Engine {
void loadPatterns();
Graphics::MacPatterns &getPatterns();

void loadMainArchive();
void loadInitialMovie(const Common::String movie);
Archive *openMainArchive(const Common::String movie);
Archive *createArchive();
void cleanupMainArchive();

Expand Down Expand Up @@ -114,13 +115,13 @@ class DirectorEngine : public ::Engine {
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;
Expand Down
37 changes: 21 additions & 16 deletions engines/director/resource.cpp
Expand Up @@ -39,20 +39,31 @@ 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() {
delete _mainArchive;
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());

Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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();
Expand Down

0 comments on commit 7b666dc

Please sign in to comment.