[Scummvm-git-logs] scummvm master -> d543293ca0c3094f17bd984a4bf66fd5e0a6d6b1
sev-
sev at scummvm.org
Tue Jul 28 18:45:08 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
d543293ca0 DIRECTOR: Always run projector detector for the main movie
Commit: d543293ca0c3094f17bd984a4bf66fd5e0a6d6b1
https://github.com/scummvm/scummvm/commit/d543293ca0c3094f17bd984a4bf66fd5e0a6d6b1
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-07-28T20:44:49+02:00
Commit Message:
DIRECTOR: Always run projector detector for the main movie
Changed paths:
engines/director/resource.cpp
engines/director/stage.h
diff --git a/engines/director/resource.cpp b/engines/director/resource.cpp
index 5970d3a405..48ac3e72e1 100644
--- a/engines/director/resource.cpp
+++ b/engines/director/resource.cpp
@@ -57,6 +57,8 @@ Common::Error Stage::loadInitialMovie() {
debug(0, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
Common::String movie = (_vm->getGameGID() == GID_TESTALL) ? getNextMovieFromQueue().movie : _vm->getEXEName();
+ probeProjector(movie);
+
if (g_director->getPlatform() == Common::kPlatformWindows)
loadEXE(movie);
else
@@ -71,15 +73,33 @@ Common::Error Stage::loadInitialMovie() {
_currentPath = getPath(movie, _currentPath);
_currentMovie->loadSharedCastsFrom(_currentPath + g_director->_sharedCastFile);
+ if (_currentMovie)
+ _currentMovie->setArchive(_mainArchive);
+
+ return Common::kNoError;
+}
+
+void Stage::probeProjector(const Common::String &movie) {
+ if (g_director->getPlatform() == Common::kPlatformWindows)
+ return;
+
+ Director::MacArchive *archive = new MacArchive();
+
+ if (!archive->openFile(movie)) {
+ delete archive;
+
+ return;
+ }
+
// Let's check if it is a projector file
// So far tested with Spaceship Warlock, D2
- if (_mainArchive->hasResource(MKTAG('B', 'N', 'D', 'L'), "Projector")) {
+ if (archive->hasResource(MKTAG('B', 'N', 'D', 'L'), "Projector")) {
warning("Detected Projector file");
- if (_mainArchive->hasResource(MKTAG('v', 'e', 'r', 's'), -1)) {
- Common::Array<uint16> vers = _mainArchive->getResourceIDList(MKTAG('v', 'e', 'r', 's'));
+ if (archive->hasResource(MKTAG('v', 'e', 'r', 's'), -1)) {
+ Common::Array<uint16> vers = archive->getResourceIDList(MKTAG('v', 'e', 'r', 's'));
for (Common::Array<uint16>::iterator iterator = vers.begin(); iterator != vers.end(); ++iterator) {
- Common::SeekableSubReadStreamEndian *vvers = _mainArchive->getResource(MKTAG('v', 'e', 'r', 's'), *iterator);
+ Common::SeekableSubReadStreamEndian *vvers = archive->getResource(MKTAG('v', 'e', 'r', 's'), *iterator);
Common::MacResManager::MacVers *v = Common::MacResManager::parseVers(vvers);
debug(0, "Detected vers %d.%d %s.%d region %d '%s' '%s'", v->majorVer, v->minorVer, v->devStr.c_str(),
@@ -89,19 +109,20 @@ Common::Error Stage::loadInitialMovie() {
}
}
- if (_mainArchive->hasResource(MKTAG('X', 'C', 'O', 'D'), -1)) {
- Common::Array<uint16> xcod = _mainArchive->getResourceIDList(MKTAG('X', 'C', 'O', 'D'));
+ if (archive->hasResource(MKTAG('X', 'C', 'O', 'D'), -1)) {
+ Common::Array<uint16> xcod = archive->getResourceIDList(MKTAG('X', 'C', 'O', 'D'));
for (Common::Array<uint16>::iterator iterator = xcod.begin(); iterator != xcod.end(); ++iterator) {
- Resource res = _mainArchive->getResourceDetail(MKTAG('X', 'C', 'O', 'D'), *iterator);
+ Resource res = archive->getResourceDetail(MKTAG('X', 'C', 'O', 'D'), *iterator);
debug(0, "Detected XObject '%s'", res.name.c_str());
g_lingo->openXLib(res.name, kXObj);
}
}
- if (_mainArchive->hasResource(MKTAG('S', 'T', 'R', '#'), 0)) {
- _currentMovie->setArchive(_mainArchive);
+ if (archive->hasResource(MKTAG('S', 'T', 'R', '#'), 0)) {
+ if (_currentMovie)
+ _currentMovie->setArchive(archive);
- Common::SeekableSubReadStreamEndian *name = _mainArchive->getResource(MKTAG('S', 'T', 'R', '#'), 0);
+ Common::SeekableSubReadStreamEndian *name = archive->getResource(MKTAG('S', 'T', 'R', '#'), 0);
int num = name->readUint16();
if (num != 1) {
warning("Incorrect number of strings in Projector file");
@@ -122,10 +143,7 @@ Common::Error Stage::loadInitialMovie() {
}
}
- if (_currentMovie)
- _currentMovie->setArchive(_mainArchive);
-
- return Common::kNoError;
+ delete archive;
}
Archive *Stage::openMainArchive(const Common::String movie) {
diff --git a/engines/director/stage.h b/engines/director/stage.h
index 3b02326eca..5e42c3afec 100644
--- a/engines/director/stage.h
+++ b/engines/director/stage.h
@@ -134,6 +134,7 @@ class Stage : public Graphics::MacWindow, public Object<Stage> {
// resource.cpp
Common::Error loadInitialMovie();
+ void probeProjector(const Common::String &movie);
Archive *openMainArchive(const Common::String movie);
void loadEXE(const Common::String movie);
void loadEXEv3(Common::SeekableReadStream *stream);
More information about the Scummvm-git-logs
mailing list