aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/igor/detection.cpp115
1 files changed, 47 insertions, 68 deletions
diff --git a/engines/igor/detection.cpp b/engines/igor/detection.cpp
index 2b52270f4b..5e68f2df3b 100644
--- a/engines/igor/detection.cpp
+++ b/engines/igor/detection.cpp
@@ -25,88 +25,67 @@
#include "base/plugins.h"
+#include "common/advancedDetector.h"
#include "common/config-manager.h"
-#include "common/file.h"
-#include "common/fs.h"
#include "igor/igor.h"
-struct GameDetectVersion {
- uint32 borlandOverlaySize;
+struct IgorGameDescription {
+ Common::ADGameDescription desc;
int gameVersion;
- Common::Language language;
- const char *descriptionSuffix;
};
-static const GameDetectVersion igorDetectVersionsTable[] = {
- { 4086790, Igor::kIdEngDemo100, Common::EN_ANY, " 1.00s" },
- { 4094103, Igor::kIdEngDemo110, Common::EN_ANY, " 1.10s" }
+static const IgorGameDescription igorGameDescriptions[] = {
+ {
+ {
+ "igor",
+ "Demo 1.00s",
+ AD_ENTRY1s("IGOR.DAT", 0, 4086790),
+ Common::EN_ANY,
+ Common::kPlatformPC,
+ Common::ADGF_DEMO
+ },
+ Igor::kIdEngDemo100
+ },
+ {
+ {
+ "igor",
+ "Demo 1.10s",
+ AD_ENTRY1s("IGOR.DAT", 0, 4094103),
+ Common::EN_ANY,
+ Common::kPlatformPC,
+ Common::ADGF_DEMO
+ },
+ Igor::kIdEngDemo110
+ },
+ { AD_TABLE_END_MARKER, 0 }
};
-static const char *igorDetectFileName = "IGOR.DAT";
-
-static const PlainGameDescriptor igorGameDescriptor = {
- "igor", "Igor: Objective Uikokahonia"
+static const PlainGameDescriptor igorGameDescriptors[] = {
+ { "igor", "Igor: Objective Uikokahonia" },
+ { 0, 0 }
};
-GameList Engine_IGOR_gameIDList() {
- GameList games;
- games.push_back(igorGameDescriptor);
- return games;
-}
-
-GameDescriptor Engine_IGOR_findGameID(const char *gameid) {
- if (scumm_stricmp(igorGameDescriptor.gameid, gameid) == 0) {
- return igorGameDescriptor;
- }
- return GameDescriptor();
-}
-
-static const GameDetectVersion *Engine_IGOR_findGameVersion(const FSList &fslist) {
- for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
- if (file->isDirectory() || !file->getName().equalsIgnoreCase(igorDetectFileName)) {
- continue;
- }
- Common::File f;
- if (f.open(*file)) {
- const uint32 fileSize = f.size();
- if (f.readUint32BE() == MKID_BE('FBOV')) {
- for (int i = 0; i < ARRAYSIZE(igorDetectVersionsTable); ++i) {
- if (igorDetectVersionsTable[i].borlandOverlaySize == fileSize) {
- return &igorDetectVersionsTable[i];
- }
- }
- }
- }
- }
- return 0;
-}
+static const Common::ADParams igorDetectionParams = {
+ (const byte *)igorGameDescriptions,
+ sizeof(IgorGameDescription),
+ 0, // no md5
+ igorGameDescriptors,
+ 0,
+ "igor",
+ 0,
+ 0,
+ Common::kADFlagAugmentPreferredTarget
+};
-GameList Engine_IGOR_detectGames(const FSList &fslist) {
- GameList detectedGames;
- const GameDetectVersion *gdv = Engine_IGOR_findGameVersion(fslist);
- if (gdv) {
- GameDescriptor gd(igorGameDescriptor.gameid, igorGameDescriptor.description, gdv->language, Common::kPlatformPC);
- gd.description() += gdv->descriptionSuffix;
- gd.updateDesc("Demo");
- detectedGames.push_back(gd);
+static bool Engine_IGOR_createInstance(OSystem *syst, Engine **engine, Common::EncapsulatedADGameDesc encapsulatedDesc) {
+ const IgorGameDescription *gd = (const IgorGameDescription *)(encapsulatedDesc.realDesc);
+ if (gd) {
+ *engine = new Igor::IgorEngine(syst, gd->gameVersion);
}
- return detectedGames;
+ return gd != 0;
}
-PluginError Engine_IGOR_create(OSystem *system, Engine **engine) {
- FSList fslist;
- FilesystemNode dir(ConfMan.get("path"));
- if (!dir.getChildren(fslist, FilesystemNode::kListFilesOnly)) {
- return kInvalidPathError;
- }
- const GameDetectVersion *gdv = Engine_IGOR_findGameVersion(fslist);
- if (!gdv) {
- return kNoGameDataFoundError;
- }
- assert(engine);
- *engine = new Igor::IgorEngine(system, gdv->gameVersion);
- return kNoError;
-}
+ADVANCED_DETECTOR_DEFINE_PLUGIN(IGOR, Engine_IGOR_createInstance, igorDetectionParams);
REGISTER_PLUGIN(IGOR, "Igor: Objective Uikokahonia", "Igor: Objective Uikokahonia (C) Pendulo Studios");