/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
#include "base/plugins.h"
#include "common/file.h"
#include "common/macresman.h"
#include "engines/advancedDetector.h"
static const PlainGameDescriptor wageGames[] = {
{"afm", "Another Fine Mess"},
{"amot", "A Mess O' Trouble"},
{"cantitoe", "Camp Cantitoe"},
{"drakmythcastle", "Drakmyth Castle"},
{"grailquest", "GrailQuest: Adventure in the Age of King Arthur"},
{"raysmaze", "Ray's Maze"},
{"scepters", "Enchanted Scepters"},
{"twisted", "Twisted!"},
{"worldbuilder", "World Builder"},
{"wage", "WAGE"},
{0, 0}
};
#include "wage/detection_tables.h"
#include "wage/detection.h"
static const DebugChannelDef debugFlagList[] = {
{ Wage::kDebugImGui, "imgui", "Show ImGui debug window (if available)"},
{ Wage::kDebugSound, "sound", "Show sound debug information"},
{ Wage::kDebugLoading, "loading", "Show loading debug information" },
DEBUG_CHANNEL_END
};
static ADGameDescription s_fallbackDesc = {
"wage",
"",
AD_ENTRY1(0, 0),
Common::EN_ANY,
Common::kPlatformMacintosh,
ADGF_NO_FLAGS,
GUIO0()
};
class WageMetaEngineDetection : public AdvancedMetaEngineDetection {
mutable Common::String _filenameStr;
public:
WageMetaEngineDetection() : AdvancedMetaEngineDetection(Wage::gameDescriptions, wageGames) {
_md5Bytes = 2 * 1024 * 1024;
_guiOptions = GUIO4(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_TTS, GUIO_NOMUSIC);
}
const char *getName() const override {
return "wage";
}
const char *getEngineName() const override {
return "World Adventure Game Engine";
}
const char *getOriginalCopyright() const override {
return "World Builder (C) Silicon Beach Software";
}
const DebugChannelDef *getDebugChannels() const override {
return debugFlagList;
}
ADDetectedGame fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist, ADDetectedGameExtraInfo **extra) const override;
};
ADDetectedGame WageMetaEngineDetection::fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist, ADDetectedGameExtraInfo **extra) const {
SearchMan.addDirectory("WageMetaEngineDetection::fallbackDetect", fslist.begin()->getParent());
for (Common::FSList::const_iterator fs = fslist.begin(); fs != fslist.end(); ++fs) {
if (fs->isDirectory())
continue;
Common::Path filePath = Common::Path(fs->getPathInArchive());
Common::MacResManager resManager;
if (!resManager.open(filePath)) {
continue;
}
Common::MacFinderInfo finderInfo;
if (resManager.getFileFinderInfo(filePath, finderInfo)) {
if (READ_BE_UINT32(finderInfo.type) != MKTAG('A', 'P', 'P', 'L')) {
continue;
}
if (READ_BE_UINT32(finderInfo.creator) != MKTAG('W', 'E', 'D', 'T')) {
continue;
}
Common::Path outPath(fs->getFileName());
_filenameStr = outPath.toString();
s_fallbackDesc.filesDescriptions[0].fileName = _filenameStr.c_str();
ADDetectedGame game;
game.desc = &s_fallbackDesc;
FileProperties tmp;
if (getFileProperties(allFiles, kMD5MacResFork, filePath, tmp)) {
game.hasUnknownFiles = true;
game.matchedFiles[filePath] = tmp;
}
SearchMan.remove("WageMetaEngineDetection::fallbackDetect");
return game;
}
}
SearchMan.remove("WageMetaEngineDetection::fallbackDetect");
return ADDetectedGame();
}
REGISTER_PLUGIN_STATIC(WAGE_DETECTION, PLUGIN_TYPE_ENGINE_DETECTION, WageMetaEngineDetection);