aboutsummaryrefslogtreecommitdiff
path: root/engines/cryomni3d/detection.cpp
diff options
context:
space:
mode:
authorLe Philousophe2019-10-20 17:40:36 +0200
committerLe Philousophe2019-11-16 20:42:50 +0100
commit8254524d9ed8c33cb1a5c22a65c281372fac4c69 (patch)
treee6523c4df37a481ba7080b862434ed47b0b1a132 /engines/cryomni3d/detection.cpp
parent3906d716daf3c634d84b8eff6ede31367516fb3f (diff)
downloadscummvm-rg350-8254524d9ed8c33cb1a5c22a65c281372fac4c69.tar.gz
scummvm-rg350-8254524d9ed8c33cb1a5c22a65c281372fac4c69.tar.bz2
scummvm-rg350-8254524d9ed8c33cb1a5c22a65c281372fac4c69.zip
CRYOMNI3D: Rewrite path handling to be more agnostic to installation
That simplifies fallback detection too
Diffstat (limited to 'engines/cryomni3d/detection.cpp')
-rw-r--r--engines/cryomni3d/detection.cpp149
1 files changed, 3 insertions, 146 deletions
diff --git a/engines/cryomni3d/detection.cpp b/engines/cryomni3d/detection.cpp
index 11c78ba303..1a47b0d6cb 100644
--- a/engines/cryomni3d/detection.cpp
+++ b/engines/cryomni3d/detection.cpp
@@ -45,24 +45,6 @@ struct CryOmni3DGameDescription {
uint32 features;
};
-/**
- * The fallback game descriptor used by the meta engine's fallbackDetector.
- * Contents of this struct are overwritten by the fallbackDetector.
- */
-static CryOmni3DGameDescription s_fallbackDesc = {
- {
- "",
- "",
- AD_ENTRY1(0, 0), // This should always be AD_ENTRY1(0, 0) in the fallback descriptor
- Common::UNK_LANG,
- Common::kPlatformUnknown,
- ADGF_UNSTABLE,
- GUIO0()
- },
- 0,
- 0
-};
-
const char *CryOmni3DEngine::getGameId() const {
return _gameDescription->desc.gameId;
}
@@ -104,28 +86,13 @@ class CryOmni3DMetaEngine : public AdvancedMetaEngine {
public:
CryOmni3DMetaEngine() : AdvancedMetaEngine(CryOmni3D::gameDescriptions,
sizeof(CryOmni3DGameDescription), cryomni3DGames, optionsList) {
- _maxScanDepth = 1;
+ _directoryGlobs = directoryGlobs;
+ _maxScanDepth = 5;
}
ADDetectedGame fallbackDetect(const FileMap &allFiles,
const Common::FSList &fslist) const override {
-
- ADDetectedGame game;
-
- SearchMan.addDirectory("CryOmni3DMetaEngine::fallbackDetect", fslist.begin()->getParent());
- debug("Adding to SearchMan: %s", fslist.begin()->getParent().getPath().c_str());
-
- // Detect Versailles
- game = fallbackDetectVersailles(fslist.begin()->getParent());
- if (game.desc) {
- SearchMan.remove("CryOmni3DMetaEngine::fallbackDetect");
- return game;
- }
-
- SearchMan.remove("CryOmni3DMetaEngine::fallbackDetect");
-
- // Fallback to standard fallback detection
- return detectGameFilebased(allFiles, fslist, CryOmni3D::fileBased);
+ return detectGameFilebased(allFiles, fslist, fileBased);
}
const char *getEngineId() const {
@@ -145,118 +112,8 @@ public:
virtual SaveStateList listSaves(const char *target) const;
virtual int getMaximumSaveSlot() const { return 999; }
virtual void removeSaveState(const char *target, int slot) const;
-
- bool addUnknownFile(const Common::FSNode &node, ADDetectedGame &game) const;
-
- ADDetectedGame fallbackDetectVersailles(const Common::FSNode &root) const;
};
-bool CryOmni3DMetaEngine::addUnknownFile(const Common::FSNode &node, ADDetectedGame &game) const {
- Common::File testFile;
- FileProperties fileProps;
-
- if (!testFile.open(node)) {
- return false;
- }
-
- fileProps.size = (int32)testFile.size();
- fileProps.md5 = Common::computeStreamMD5AsString(testFile, _md5Bytes);
-
- game.hasUnknownFiles = true;
- game.matchedFiles[node.getName()] = fileProps;
-
- return true;
-}
-
-ADDetectedGame CryOmni3DMetaEngine::fallbackDetectVersailles(const Common::FSNode &root) const {
- debug("Checking for OBJETS/VS1.HLZ");
- if (!root.getChild("OBJETS").getChild("VS1.HLZ").exists()) {
- debug("not found");
- return ADDetectedGame();
- }
- debug("found !");
-
- Common::FSNode node;
- const ADGameDescription *gameDesc = &s_fallbackDesc.desc;
- ADDetectedGame game(gameDesc);
-
- s_fallbackDesc.desc.gameId = "versailles";
- s_fallbackDesc.desc.extra = "fallback";
- s_fallbackDesc.desc.language = Common::UNK_LANG;
- s_fallbackDesc.desc.flags = ADGF_UNSTABLE;
- s_fallbackDesc.desc.platform = Common::kPlatformUnknown;
- s_fallbackDesc.desc.guiOptions = GUI_OPTIONS_VERSAILLES;
-
- s_fallbackDesc.gameType = GType_VERSAILLES;
-
- // Sounds good, determine platform
- node = root.getChild("VERSAILL.PGM");
- if (node.exists()) {
- addUnknownFile(node, game);
-
- s_fallbackDesc.desc.platform = Common::kPlatformDOS;
- }
- node = root.getChild("VERSAILL.EXE");
- if (node.exists()) {
- addUnknownFile(node, game);
-
- s_fallbackDesc.desc.platform = Common::kPlatformWindows;
- }
- node = root.getChild("PROGRAM.Z");
- if (node.exists()) {
- addUnknownFile(node, game);
-
- s_fallbackDesc.desc.platform = Common::kPlatformWindows;
- }
- node = root.getChild("Versailles");
- if (node.exists()) {
- addUnknownFile(node, game);
-
- s_fallbackDesc.desc.platform = Common::kPlatformMacintosh;
- }
-
- // Determine language
- // Use fonts set C as helvet12 contains more characters than fruitL
- uint8 fontsSet = GF_VERSAILLES_FONTS_SET_B;
- node = root.getChild("GTO").getChild("DIALOG1.GTO");
- if (node.getChild("DIALOG1.GTO").exists()) {
- s_fallbackDesc.desc.language = Common::FR_FRA;
- } else if (node.getChild("DIALOG1.ALM").exists()) {
- s_fallbackDesc.desc.language = Common::DE_DEU;
- } else if (node.getChild("DIALOG1.GB").exists()) {
- s_fallbackDesc.desc.language = Common::EN_ANY;
- } else if (node.getChild("DIALOG1.SP").exists()) {
- s_fallbackDesc.desc.language = Common::ES_ESP;
- } else if (node.getChild("DIALOG1.ITA").exists()) {
- s_fallbackDesc.desc.language = Common::IT_ITA;
- fontsSet = GF_VERSAILLES_FONTS_SET_C;
- }
-
- // Determine game flags
- s_fallbackDesc.features = 0;
- node = root.getChild("FONTS").getChild("FONT01.CRF");
- if (node.exists()) {
- // Add file to report to let developers set appropriate game flags
- addUnknownFile(node, game);
-
- s_fallbackDesc.features |= GF_VERSAILLES_FONTS_NUMERIC;
- } else {
- s_fallbackDesc.features |= fontsSet;
- }
-
- node = root.getChild("DIAL").getChild("VOIX").getChild("ALI001__.WAV");
- if (node.exists()) {
- // Add file to report to let developers set appropriate game flags
- addUnknownFile(node, game);
-
- s_fallbackDesc.features |= GF_VERSAILLES_AUDIOPADDING_YES;
- } else {
- s_fallbackDesc.features |= GF_VERSAILLES_AUDIOPADDING_NO;
- }
-
- return game;
-}
-
bool CryOmni3DMetaEngine::hasFeature(MetaEngineFeature f) const {
return
(f == kSupportsListSaves)