Run the game detector before creating the engine. This is based entirely on a

recent change to the CINE engine (which in turn was based on some other engine,
I forget which), and should fix bug #1544796. Of course, given how primitive
the Broken Sword 2 detector is, it's easy to fool it. There isn't really any
need for it to be smart, though.

svn-id: r23741
This commit is contained in:
Torbjörn Andersson 2006-08-23 04:26:01 +00:00
parent a69c0884de
commit d4d2146a0a

View File

@ -111,9 +111,29 @@ DetectedGameList Engine_SWORD2_detectGames(const FSList &fslist) {
}
PluginError Engine_SWORD2_create(OSystem *syst, Engine **engine) {
assert(syst);
assert(engine);
*engine = new Sword2::Sword2Engine(syst);
return kNoError;
FSList fslist;
FilesystemNode dir(ConfMan.get("path"));
if (!dir.listDir(fslist, FilesystemNode::kListFilesOnly)) {
warning("Sword2Engine: invalid game path '%s'", dir.path().c_str());
return kInvalidPathError;
}
// Invoke the detector
Common::String gameid = ConfMan.get("gameid");
DetectedGameList detectedGames = Engine_SWORD2_detectGames(fslist);
for (uint i = 0; i < detectedGames.size(); i++) {
if (detectedGames[i].gameid == gameid) {
*engine = new Sword2::Sword2Engine(syst);
return kNoError;
}
}
warning("Sword2Engine: Unable to locate game data at path '%s'", dir.path().c_str());
return kNoGameDataFoundError;
}
REGISTER_PLUGIN(SWORD2, "Broken Sword 2", "Broken Sword Games (C) Revolution");