aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/director/detection.cpp1
-rw-r--r--engines/director/detection_tables.h16
-rw-r--r--engines/director/director.cpp28
-rw-r--r--engines/director/director.h9
4 files changed, 53 insertions, 1 deletions
diff --git a/engines/director/detection.cpp b/engines/director/detection.cpp
index f282bddd6d..378c287e0e 100644
--- a/engines/director/detection.cpp
+++ b/engines/director/detection.cpp
@@ -71,6 +71,7 @@ bool DirectorEngine::hasFeature(EngineFeature f) const {
static const PlainGameDescriptor directorGames[] = {
{ "director", "Macromedia Director Game" },
{ "directortest", "Macromedia Director Test Target" },
+ { "directortest-all", "Macromedia Director All Movies Test Target" },
{ "theapartment", "The Apartment, Interactive demo" },
{ "gundam0079", "Gundam 0079: The War for Earth" },
{ "jewels", "Jewels of the Oracle" },
diff --git a/engines/director/detection_tables.h b/engines/director/detection_tables.h
index 2425ebb1e6..8ca09a45f6 100644
--- a/engines/director/detection_tables.h
+++ b/engines/director/detection_tables.h
@@ -33,6 +33,7 @@ namespace Director {
#define WINDEMO(t,e,f,m,s,v) GENGAME_(t,e,f,m,s,Common::EN_ANY,Common::kPlatformWindows,ADGF_DEMO,v)
static const DirectorGameDescription gameDescriptions[] = {
+ // Execute all *.lingo files in game directory
{
{
"directortest",
@@ -47,6 +48,21 @@ static const DirectorGameDescription gameDescriptions[] = {
4
},
+ // Executa all movies in directory
+ {
+ {
+ "directortest-all",
+ "",
+ AD_ENTRY1("lingotests-all", 0),
+ Common::EN_ANY,
+ Common::kPlatformMacintosh,
+ ADGF_NO_FLAGS,
+ GUIO1(GUIO_NOASPECT)
+ },
+ GID_TESTALL,
+ 4
+ },
+
// Generic D3 Mac entry
MACGAME("director", "", "D3-mac", 0, -1, 3),
// Generic D4 Mac entry
diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index 464b24c7a4..f4c1e60101 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -145,6 +145,8 @@ Common::Error DirectorEngine::run() {
_lingo->runTests();
return Common::kNoError;
+ } else if (getGameID() == GID_TESTALL) {
+ enqueueAllMovies();
}
// FIXME
@@ -202,6 +204,10 @@ Common::Error DirectorEngine::run() {
debugC(1, kDebugEvents, "Finished playback of score '%s'", _currentScore->getMacName().c_str());
+ if (getGameID() == GID_TESTALL) {
+ _nextMovie = getNextMovieFromQueue();
+ }
+
// If a loop was requested, do it
if (!_nextMovie.movie.empty()) {
_lingo->restartLingo();
@@ -273,4 +279,26 @@ Common::HashMap<Common::String, Score *> *DirectorEngine::scanMovies(const Commo
return nameMap;
}
+void DirectorEngine::enqueueAllMovies() {
+ Common::ArchiveMemberList fsList;
+ SearchMan.listMatchingMembers(fsList, "*");
+
+ for (Common::ArchiveMemberList::iterator it = fsList.begin(); it != fsList.end(); ++it)
+ _movieQueue.push_back((*it)->getName());
+
+ Common::sort(_movieQueue.begin(), _movieQueue.end());
+
+ debug(1, "Enqueued %d movies", _movieQueue.size());
+}
+
+MovieReference DirectorEngine::getNextMovieFromQueue() {
+ MovieReference res;
+
+ res.movie = _movieQueue.front();
+
+ _movieQueue.remove_at(0);
+
+ return res;
+}
+
} // End of namespace Director
diff --git a/engines/director/director.h b/engines/director/director.h
index 344d53a84f..dfb221bc9d 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -25,6 +25,7 @@
#include "common/random.h"
#include "common/rect.h"
+#include "common/str-array.h"
#include "common/hashmap.h"
#include "engines/engine.h"
@@ -47,7 +48,8 @@ namespace Director {
enum DirectorGameID {
GID_GENERIC,
- GID_TEST
+ GID_TEST,
+ GID_TESTALL
};
class Archive;
@@ -178,9 +180,14 @@ private:
uint16 _draggingSpriteId;
Common::Point _draggingSpritePos;
+ Common::StringArray _movieQueue;
+
private:
void testFontScaling();
void testFonts();
+
+ void enqueueAllMovies();
+ MovieReference getNextMovieFromQueue();
};
extern DirectorEngine *g_director;