diff options
Diffstat (limited to 'engines/cge/detection.cpp')
-rw-r--r-- | engines/cge/detection.cpp | 56 |
1 files changed, 44 insertions, 12 deletions
diff --git a/engines/cge/detection.cpp b/engines/cge/detection.cpp index 45231fecf2..da5eb2b1f2 100644 --- a/engines/cge/detection.cpp +++ b/engines/cge/detection.cpp @@ -28,24 +28,17 @@ #include "base/plugins.h" #include "graphics/thumbnail.h" #include "cge/cge.h" +#include "cge/fileio.h" namespace CGE { -struct CgeGameDescription { - ADGameDescription desc; -}; - #define GAMEOPTION_COLOR_BLIND_DEFAULT_OFF GUIO_GAMEOPTIONS1 -} // End of namespace CGE - static const PlainGameDescriptor CGEGames[] = { { "soltys", "Soltys" }, { 0, 0 } }; -namespace CGE { - static const ADGameDescription gameDescriptions[] = { { "soltys", "Freeware", @@ -104,7 +97,6 @@ static const ADGameDescription gameDescriptions[] = { AD_TABLE_END_MARKER }; -} // End of namespace CGE static const ADExtraGuiOptionsMap optionsList[] = { { @@ -122,7 +114,7 @@ static const ADExtraGuiOptionsMap optionsList[] = { class CGEMetaEngine : public AdvancedMetaEngine { public: - CGEMetaEngine() : AdvancedMetaEngine(CGE::gameDescriptions, sizeof(CGE::CgeGameDescription), CGEGames, optionsList) { + CGEMetaEngine() : AdvancedMetaEngine(CGE::gameDescriptions, sizeof(ADGameDescription), CGEGames, optionsList) { _singleid = "soltys"; } @@ -134,6 +126,7 @@ public: return "Soltys (c) 1994-1996 L.K. Avalon"; } + virtual const ADGameDescription *fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const; virtual bool hasFeature(MetaEngineFeature f) const; virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const; virtual int getMaximumSaveSlot() const; @@ -142,6 +135,44 @@ public: virtual void removeSaveState(const char *target, int slot) const; }; +static const ADFileBasedFallback fileBasedFallback[] = { + { &gameDescriptions[0], { "vol.cat", "vol.dat", 0 } }, + { 0, { 0 } } +}; + +static ADGameDescription s_fallbackDesc = { + "Soltys", + "Unknown version", + AD_ENTRY1(0, 0), // This should always be AD_ENTRY1(0, 0) in the fallback descriptor + Common::UNK_LANG, + Common::kPlatformDOS, + ADGF_NO_FLAGS, + GUIO1(GAMEOPTION_COLOR_BLIND_DEFAULT_OFF) +}; + +const ADGameDescription *CGEMetaEngine::fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const { + ADFilePropertiesMap filesProps; + + const ADGameDescription *game; + game = detectGameFilebased(allFiles, fslist, CGE::fileBasedFallback, &filesProps); + + if (!game) + return nullptr; + + SearchMan.clear(); + SearchMan.addDirectory(fslist.begin()->getParent().getPath(), fslist.begin()->getParent()); + ResourceManager *resman; + resman = new ResourceManager(); + bool result = resman->exist("CGE.SAY"); + delete resman; + + if (!result) + return nullptr; + + reportUnknown(fslist.begin()->getParent(), filesProps); + return &s_fallbackDesc; +} + bool CGEMetaEngine::hasFeature(MetaEngineFeature f) const { return (f == kSupportsListSaves) || @@ -251,9 +282,10 @@ bool CGEMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameD } return desc != 0; } +} // End of namespace CGE #if PLUGIN_ENABLED_DYNAMIC(CGE) - REGISTER_PLUGIN_DYNAMIC(CGE, PLUGIN_TYPE_ENGINE, CGEMetaEngine); +REGISTER_PLUGIN_DYNAMIC(CGE, PLUGIN_TYPE_ENGINE, CGE::CGEMetaEngine); #else - REGISTER_PLUGIN_STATIC(CGE, PLUGIN_TYPE_ENGINE, CGEMetaEngine); +REGISTER_PLUGIN_STATIC(CGE, PLUGIN_TYPE_ENGINE, CGE::CGEMetaEngine); #endif |