mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-19 08:25:35 +00:00
switched igor detection code to AdvancedDetector
svn-id: r29400
This commit is contained in:
parent
52b18c9ae6
commit
74bb325a7e
@ -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;
|
||||
static const Common::ADParams igorDetectionParams = {
|
||||
(const byte *)igorGameDescriptions,
|
||||
sizeof(IgorGameDescription),
|
||||
0, // no md5
|
||||
igorGameDescriptors,
|
||||
0,
|
||||
"igor",
|
||||
0,
|
||||
0,
|
||||
Common::kADFlagAugmentPreferredTarget
|
||||
};
|
||||
|
||||
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 gd != 0;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
return detectedGames;
|
||||
}
|
||||
|
||||
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");
|
||||
|
Loading…
x
Reference in New Issue
Block a user