MOHAWK: Split detection features & adapt to new plugins.

This commit is contained in:
aryanrawlani28 2020-08-08 00:06:42 +05:30 committed by Eugene Sandulenko
parent 45ad55df2d
commit 52a420f4b1
5 changed files with 404 additions and 302 deletions

2
configure vendored
View file

@ -6170,7 +6170,7 @@ declare -a static_detect_engines=("PLUMBERS" "AGI" "SCUMM" "SKY" "DREAMWEB" "DRA
"TEENAGENT" "TESTBED" "TINSEL" "TITANIC" "TOLTECS" "TONY" "TOON" "TEENAGENT" "TESTBED" "TINSEL" "TITANIC" "TOLTECS" "TONY" "TOON"
"TOUCHE" "TSAGE" "TUCKER" "VOYEUR" "WAGE" "AVALANCHE" "BBVS" "TOUCHE" "TSAGE" "TUCKER" "VOYEUR" "WAGE" "AVALANCHE" "BBVS"
"BLADERUNNER" "CHEWY" "CINE" "CRUISE" "CRYO" "CRYOMNI3D" "DIRECTOR" "BLADERUNNER" "CHEWY" "CINE" "CRUISE" "CRYO" "CRYOMNI3D" "DIRECTOR"
"FULLPIPE" "SAGA" "XEEN" "WINTERMUTE" "SCI") "FULLPIPE" "SAGA" "XEEN" "WINTERMUTE" "SCI" "MOHAWK")
detectId="_DETECTION" detectId="_DETECTION"
echo "Creating engines/plugins_table.h" echo "Creating engines/plugins_table.h"

View file

@ -22,111 +22,22 @@
#include "base/plugins.h" #include "base/plugins.h"
#include "backends/keymapper/action.h"
#include "backends/keymapper/keymap.h"
#include "engines/advancedDetector.h" #include "engines/advancedDetector.h"
#include "common/config-manager.h" #include "common/config-manager.h"
#include "common/savefile.h"
#include "common/system.h"
#include "common/textconsole.h" #include "common/textconsole.h"
#include "common/translation.h" #include "common/translation.h"
#include "mohawk/dialogs.h" #include "mohawk/detection.h"
#include "mohawk/livingbooks.h" #include "mohawk/detection_enums.h"
#ifdef ENABLE_CSTIME
#include "mohawk/cstime.h"
#endif
#ifdef ENABLE_MYST
#include "mohawk/myst.h"
#include "mohawk/myst_state.h"
#endif
#ifdef ENABLE_MYSTME
#ifndef ENABLE_MYST
#error "Myst must be enabled for building Myst ME. Specify --enable-engine=myst,mystme"
#endif
#endif
#ifdef ENABLE_RIVEN #ifdef ENABLE_RIVEN
#include "mohawk/riven.h" #include "mohawk/riven_metaengine/metaengine.h"
#include "mohawk/riven_saveload.h" #endif // ENABLE_RIVEN
#endif
namespace Mohawk {
struct MohawkGameDescription {
ADGameDescription desc;
uint8 gameType;
uint32 features;
const char *appName;
};
const char* MohawkEngine::getGameId() const {
return _gameDescription->desc.gameId;
}
uint32 MohawkEngine::getFeatures() const {
return _gameDescription->features;
}
bool MohawkEngine::isGameVariant(MohawkGameFeatures feature) const {
return (_gameDescription->features & feature) != 0;
}
Common::Platform MohawkEngine::getPlatform() const {
return _gameDescription->desc.platform;
}
const char *MohawkEngine::getAppName() const {
return _gameDescription->appName;
}
uint8 MohawkEngine::getGameType() const {
return _gameDescription->gameType;
}
Common::String MohawkEngine_LivingBooks::getBookInfoFileName() const {
return _gameDescription->desc.filesDescriptions[0].fileName;
}
Common::Language MohawkEngine::getLanguage() const {
return _gameDescription->desc.language;
}
bool MohawkEngine::hasFeature(EngineFeature f) const {
return
(f == kSupportsReturnToLauncher);
}
#ifdef ENABLE_MYST #ifdef ENABLE_MYST
#include "mohawk/myst_metaengine/metaengine.h"
#endif // ENABLE_MYST
bool MohawkEngine_Myst::hasFeature(EngineFeature f) const {
return
MohawkEngine::hasFeature(f)
|| (f == kSupportsLoadingDuringRuntime)
|| (f == kSupportsSavingDuringRuntime)
|| (f == kSupportsChangingOptionsDuringRuntime);
}
#endif
#ifdef ENABLE_RIVEN
bool MohawkEngine_Riven::hasFeature(EngineFeature f) const {
return
MohawkEngine::hasFeature(f)
|| (f == kSupportsLoadingDuringRuntime)
|| (f == kSupportsSavingDuringRuntime)
|| (f == kSupportsChangingOptionsDuringRuntime);
}
#endif
} // End of Namespace Mohawk
static const PlainGameDescriptor mohawkGames[] = { static const PlainGameDescriptor mohawkGames[] = {
{"myst", "Myst"}, {"myst", "Myst"},
@ -196,16 +107,7 @@ public:
DetectedGame toDetectedGame(const ADDetectedGame &adGame) const override; DetectedGame toDetectedGame(const ADDetectedGame &adGame) const override;
bool hasFeature(MetaEngineFeature f) const override;
bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const override;
SaveStateList listSaves(const char *target) const override;
SaveStateList listSavesForPrefix(const char *prefix, const char *extension) const;
int getMaximumSaveSlot() const override { return 999; }
void removeSaveState(const char *target, int slot) const override;
SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const override;
Common::KeymapArray initKeymaps(const char *target) const override;
void registerDefaultSettings(const Common::String &target) const override; void registerDefaultSettings(const Common::String &target) const override;
GUI::OptionsContainerWidget *buildEngineOptionsWidget(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const override;
}; };
DetectedGame MohawkMetaEngine::toDetectedGame(const ADDetectedGame &adGame) const { DetectedGame MohawkMetaEngine::toDetectedGame(const ADDetectedGame &adGame) const {
@ -218,7 +120,7 @@ DetectedGame MohawkMetaEngine::toDetectedGame(const ADDetectedGame &adGame) cons
if (game.gameId == "myst" if (game.gameId == "myst"
&& Common::checkGameGUIOption(GAMEOPTION_25TH, game.getGUIOptions()) && Common::checkGameGUIOption(GAMEOPTION_25TH, game.getGUIOptions())
&& Common::checkGameGUIOption(GAMEOPTION_ME, game.getGUIOptions())) { && Common::checkGameGUIOption(GAMEOPTION_ME, game.getGUIOptions())) {
const Mohawk::MystLanguage *languages = Mohawk::MohawkEngine_Myst::listLanguages(); const Mohawk::MystLanguage *languages = Mohawk::MohawkMetaEngine_Myst::listLanguages();
while (languages->language != Common::UNK_LANG) { while (languages->language != Common::UNK_LANG) {
game.appendGUIOptions(Common::getGameGUIOptionsDescriptionLanguage(languages->language)); game.appendGUIOptions(Common::getGameGUIOptionsDescriptionLanguage(languages->language));
languages++; languages++;
@ -229,7 +131,7 @@ DetectedGame MohawkMetaEngine::toDetectedGame(const ADDetectedGame &adGame) cons
#ifdef ENABLE_RIVEN #ifdef ENABLE_RIVEN
if (game.gameId == "riven" if (game.gameId == "riven"
&& Common::checkGameGUIOption(GAMEOPTION_25TH, game.getGUIOptions())) { && Common::checkGameGUIOption(GAMEOPTION_25TH, game.getGUIOptions())) {
const Mohawk::RivenLanguage *languages = Mohawk::MohawkEngine_Riven::listLanguages(); const Mohawk::RivenLanguage *languages = Mohawk::MohawkMetaEngine_Riven::listLanguages();
while (languages->language != Common::UNK_LANG) { while (languages->language != Common::UNK_LANG) {
game.appendGUIOptions(Common::getGameGUIOptionsDescriptionLanguage(languages->language)); game.appendGUIOptions(Common::getGameGUIOptionsDescriptionLanguage(languages->language));
languages++; languages++;
@ -240,212 +142,21 @@ DetectedGame MohawkMetaEngine::toDetectedGame(const ADDetectedGame &adGame) cons
return game; return game;
} }
bool MohawkMetaEngine::hasFeature(MetaEngineFeature f) const {
return
(f == kSupportsListSaves)
|| (f == kSupportsLoadingDuringStartup)
|| (f == kSupportsDeleteSave)
|| (f == kSavesSupportMetaInfo)
|| (f == kSavesSupportThumbnail)
|| (f == kSavesSupportCreationDate)
|| (f == kSavesSupportPlayTime);
}
SaveStateList MohawkMetaEngine::listSavesForPrefix(const char *prefix, const char *extension) const {
Common::String pattern = Common::String::format("%s-###.%s", prefix, extension);
Common::StringArray filenames = g_system->getSavefileManager()->listSavefiles(pattern);
size_t prefixLen = strlen(prefix);
SaveStateList saveList;
for (Common::StringArray::const_iterator filename = filenames.begin(); filename != filenames.end(); ++filename) {
// Extract the slot number from the filename
char slot[4];
slot[0] = (*filename)[prefixLen + 1];
slot[1] = (*filename)[prefixLen + 2];
slot[2] = (*filename)[prefixLen + 3];
slot[3] = '\0';
int slotNum = atoi(slot);
saveList.push_back(SaveStateDescriptor(slotNum, ""));
}
Common::sort(saveList.begin(), saveList.end(), SaveStateDescriptorSlotComparator());
return saveList;
}
SaveStateList MohawkMetaEngine::listSaves(const char *target) const {
Common::String gameId = ConfMan.get("gameid", target);
SaveStateList saveList;
// Loading games is only supported in Myst/Riven currently.
#ifdef ENABLE_MYST
if (gameId == "myst") {
saveList = listSavesForPrefix("myst", "mys");
for (SaveStateList::iterator save = saveList.begin(); save != saveList.end(); ++save) {
// Read the description from the save
int slot = save->getSaveSlot();
Common::String description = Mohawk::MystGameState::querySaveDescription(slot);
save->setDescription(description);
}
}
#endif
#ifdef ENABLE_RIVEN
if (gameId == "riven") {
saveList = listSavesForPrefix("riven", "rvn");
for (SaveStateList::iterator save = saveList.begin(); save != saveList.end(); ++save) {
// Read the description from the save
int slot = save->getSaveSlot();
Common::String description = Mohawk::RivenSaveLoad::querySaveDescription(slot);
save->setDescription(description);
}
}
#endif
return saveList;
}
void MohawkMetaEngine::removeSaveState(const char *target, int slot) const {
Common::String gameId = ConfMan.get("gameid", target);
// Removing saved games is only supported in Myst/Riven currently.
#ifdef ENABLE_MYST
if (gameId == "myst") {
Mohawk::MystGameState::deleteSave(slot);
}
#endif
#ifdef ENABLE_RIVEN
if (gameId == "riven") {
Mohawk::RivenSaveLoad::deleteSave(slot);
}
#endif
}
SaveStateDescriptor MohawkMetaEngine::querySaveMetaInfos(const char *target, int slot) const {
Common::String gameId = ConfMan.get("gameid", target);
#ifdef ENABLE_MYST
if (gameId == "myst") {
return Mohawk::MystGameState::querySaveMetaInfos(slot);
}
#endif
#ifdef ENABLE_RIVEN
if (gameId == "riven") {
return Mohawk::RivenSaveLoad::querySaveMetaInfos(slot);
} else
#endif
{
return SaveStateDescriptor();
}
}
Common::KeymapArray MohawkMetaEngine::initKeymaps(const char *target) const {
Common::String gameId = ConfMan.get("gameid", target);
#ifdef ENABLE_MYST
if (gameId == "myst" || gameId == "makingofmyst") {
return Mohawk::MohawkEngine_Myst::initKeymaps(target);
}
#endif
#ifdef ENABLE_RIVEN
if (gameId == "riven") {
return Mohawk::MohawkEngine_Riven::initKeymaps(target);
}
#endif
return AdvancedMetaEngine::initKeymaps(target);
}
void MohawkMetaEngine::registerDefaultSettings(const Common::String &target) const { void MohawkMetaEngine::registerDefaultSettings(const Common::String &target) const {
Common::String gameId = ConfMan.get("gameid", target); Common::String gameId = ConfMan.get("gameid", target);
#ifdef ENABLE_MYST #ifdef ENABLE_MYST
if (gameId == "myst" || gameId == "makingofmyst") { if (gameId == "myst" || gameId == "makingofmyst") {
return Mohawk::MohawkEngine_Myst::registerDefaultSettings(); return Mohawk::MohawkMetaEngine_Myst::registerDefaultSettings();
} }
#endif #endif
#ifdef ENABLE_RIVEN #ifdef ENABLE_RIVEN
if (gameId == "riven") { if (gameId == "riven") {
return Mohawk::MohawkEngine_Riven::registerDefaultSettings(); return Mohawk::MohawkMetaEngine_Riven::registerDefaultSettings();
} }
#endif #endif
return AdvancedMetaEngine::registerDefaultSettings(target); return AdvancedMetaEngine::registerDefaultSettings(target);
} }
GUI::OptionsContainerWidget *MohawkMetaEngine::buildEngineOptionsWidget(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const { REGISTER_PLUGIN_STATIC(MOHAWK_DETECTION, PLUGIN_TYPE_METAENGINE, MohawkMetaEngine);
Common::String gameId = ConfMan.get("gameid", target);
#ifdef ENABLE_MYST
if (gameId == "myst" || gameId == "makingofmyst") {
return new Mohawk::MystOptionsWidget(boss, name, target);
}
#endif
#ifdef ENABLE_RIVEN
if (gameId == "riven") {
return new Mohawk::RivenOptionsWidget(boss, name, target);
}
#endif
return AdvancedMetaEngine::buildEngineOptionsWidget(boss, name, target);
}
bool MohawkMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
const Mohawk::MohawkGameDescription *gd = (const Mohawk::MohawkGameDescription *)desc;
if (gd) {
switch (gd->gameType) {
case Mohawk::GType_MYST:
case Mohawk::GType_MAKINGOF:
#ifdef ENABLE_MYST
#ifndef ENABLE_MYSTME
if (gd->features & Mohawk::GF_ME) {
warning("Myst ME support not compiled in");
return false;
}
#endif
*engine = new Mohawk::MohawkEngine_Myst(syst, gd);
break;
#else
warning("Myst support not compiled in");
return false;
#endif
case Mohawk::GType_RIVEN:
#ifdef ENABLE_RIVEN
*engine = new Mohawk::MohawkEngine_Riven(syst, gd);
break;
#else
warning("Riven support not compiled in");
return false;
#endif
case Mohawk::GType_LIVINGBOOKSV1:
case Mohawk::GType_LIVINGBOOKSV2:
case Mohawk::GType_LIVINGBOOKSV3:
case Mohawk::GType_LIVINGBOOKSV4:
case Mohawk::GType_LIVINGBOOKSV5:
*engine = new Mohawk::MohawkEngine_LivingBooks(syst, gd);
break;
case Mohawk::GType_CSTIME:
#ifdef ENABLE_CSTIME
*engine = new Mohawk::MohawkEngine_CSTime(syst, gd);
break;
#else
warning("CSTime support not compiled in");
return false;
#endif
default:
error("Unknown Mohawk Engine");
}
}
return (gd != nullptr);
}
#if PLUGIN_ENABLED_DYNAMIC(MOHAWK)
REGISTER_PLUGIN_DYNAMIC(MOHAWK, PLUGIN_TYPE_ENGINE, MohawkMetaEngine);
#else
REGISTER_PLUGIN_STATIC(MOHAWK, PLUGIN_TYPE_ENGINE, MohawkMetaEngine);
#endif

View file

@ -0,0 +1,38 @@
/* 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 2
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#ifndef MOHAWK_DETECTION_H
#define MOHAWK_DETECTION_H
namespace Mohawk {
struct MohawkGameDescription {
ADGameDescription desc;
uint8 gameType;
uint32 features;
const char *appName;
};
} // End of namespace Mohawk
#endif

View file

@ -0,0 +1,333 @@
/* 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 2
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#include "backends/keymapper/action.h"
#include "backends/keymapper/keymap.h"
#include "common/savefile.h"
#include "common/system.h"
#include "engines/advancedDetector.h"
#include "mohawk/mohawk.h"
#include "mohawk/dialogs.h"
#include "mohawk/livingbooks.h"
#ifdef ENABLE_CSTIME
#include "mohawk/cstime.h"
#endif
#ifdef ENABLE_MYST
#include "mohawk/myst.h"
#include "mohawk/myst_state.h"
#endif
#ifdef ENABLE_MYSTME
#ifndef ENABLE_MYST
#error "Myst must be enabled for building Myst ME. Specify --enable-engine=myst,mystme"
#endif
#endif
#ifdef ENABLE_RIVEN
#include "mohawk/riven.h"
#include "mohawk/riven_saveload.h"
#endif
#include "mohawk/detection.h"
namespace Mohawk {
const char* MohawkEngine::getGameId() const {
return _gameDescription->desc.gameId;
}
uint32 MohawkEngine::getFeatures() const {
return _gameDescription->features;
}
bool MohawkEngine::isGameVariant(MohawkGameFeatures feature) const {
return (_gameDescription->features & feature) != 0;
}
Common::Platform MohawkEngine::getPlatform() const {
return _gameDescription->desc.platform;
}
const char *MohawkEngine::getAppName() const {
return _gameDescription->appName;
}
uint8 MohawkEngine::getGameType() const {
return _gameDescription->gameType;
}
Common::String MohawkEngine_LivingBooks::getBookInfoFileName() const {
return _gameDescription->desc.filesDescriptions[0].fileName;
}
Common::Language MohawkEngine::getLanguage() const {
return _gameDescription->desc.language;
}
bool MohawkEngine::hasFeature(EngineFeature f) const {
return
(f == kSupportsReturnToLauncher);
}
#ifdef ENABLE_MYST
bool MohawkEngine_Myst::hasFeature(EngineFeature f) const {
return
MohawkEngine::hasFeature(f)
|| (f == kSupportsLoadingDuringRuntime)
|| (f == kSupportsSavingDuringRuntime)
|| (f == kSupportsChangingOptionsDuringRuntime);
}
#endif
#ifdef ENABLE_RIVEN
bool MohawkEngine_Riven::hasFeature(EngineFeature f) const {
return
MohawkEngine::hasFeature(f)
|| (f == kSupportsLoadingDuringRuntime)
|| (f == kSupportsSavingDuringRuntime)
|| (f == kSupportsChangingOptionsDuringRuntime);
}
#endif
} // End of Namespace Mohawk
class MohawkMetaEngineConnect : public AdvancedMetaEngineConnect {
public:
const char *getName() const override {
return "mohawk";
}
bool hasFeature(MetaEngineFeature f) const override;
bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const override;
SaveStateList listSaves(const char *target) const override;
SaveStateList listSavesForPrefix(const char *prefix, const char *extension) const;
int getMaximumSaveSlot() const override { return 999; }
void removeSaveState(const char *target, int slot) const override;
SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const override;
Common::KeymapArray initKeymaps(const char *target) const override;
GUI::OptionsContainerWidget *buildEngineOptionsWidgetDynamic(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const override;
};
bool MohawkMetaEngineConnect::hasFeature(MetaEngineFeature f) const {
return
(f == kSupportsListSaves)
|| (f == kSupportsLoadingDuringStartup)
|| (f == kSupportsDeleteSave)
|| (f == kSavesSupportMetaInfo)
|| (f == kSavesSupportThumbnail)
|| (f == kSavesSupportCreationDate)
|| (f == kSavesSupportPlayTime);
}
SaveStateList MohawkMetaEngineConnect::listSavesForPrefix(const char *prefix, const char *extension) const {
Common::String pattern = Common::String::format("%s-###.%s", prefix, extension);
Common::StringArray filenames = g_system->getSavefileManager()->listSavefiles(pattern);
size_t prefixLen = strlen(prefix);
SaveStateList saveList;
for (Common::StringArray::const_iterator filename = filenames.begin(); filename != filenames.end(); ++filename) {
// Extract the slot number from the filename
char slot[4];
slot[0] = (*filename)[prefixLen + 1];
slot[1] = (*filename)[prefixLen + 2];
slot[2] = (*filename)[prefixLen + 3];
slot[3] = '\0';
int slotNum = atoi(slot);
saveList.push_back(SaveStateDescriptor(slotNum, ""));
}
Common::sort(saveList.begin(), saveList.end(), SaveStateDescriptorSlotComparator());
return saveList;
}
SaveStateList MohawkMetaEngineConnect::listSaves(const char *target) const {
Common::String gameId = ConfMan.get("gameid", target);
SaveStateList saveList;
// Loading games is only supported in Myst/Riven currently.
#ifdef ENABLE_MYST
if (gameId == "myst") {
saveList = listSavesForPrefix("myst", "mys");
for (SaveStateList::iterator save = saveList.begin(); save != saveList.end(); ++save) {
// Read the description from the save
int slot = save->getSaveSlot();
Common::String description = Mohawk::MystGameState::querySaveDescription(slot);
save->setDescription(description);
}
}
#endif
#ifdef ENABLE_RIVEN
if (gameId == "riven") {
saveList = listSavesForPrefix("riven", "rvn");
for (SaveStateList::iterator save = saveList.begin(); save != saveList.end(); ++save) {
// Read the description from the save
int slot = save->getSaveSlot();
Common::String description = Mohawk::RivenSaveLoad::querySaveDescription(slot);
save->setDescription(description);
}
}
#endif
return saveList;
}
void MohawkMetaEngineConnect::removeSaveState(const char *target, int slot) const {
Common::String gameId = ConfMan.get("gameid", target);
// Removing saved games is only supported in Myst/Riven currently.
#ifdef ENABLE_MYST
if (gameId == "myst") {
Mohawk::MystGameState::deleteSave(slot);
}
#endif
#ifdef ENABLE_RIVEN
if (gameId == "riven") {
Mohawk::RivenSaveLoad::deleteSave(slot);
}
#endif
}
SaveStateDescriptor MohawkMetaEngineConnect::querySaveMetaInfos(const char *target, int slot) const {
Common::String gameId = ConfMan.get("gameid", target);
#ifdef ENABLE_MYST
if (gameId == "myst") {
return Mohawk::MystGameState::querySaveMetaInfos(slot);
}
#endif
#ifdef ENABLE_RIVEN
if (gameId == "riven") {
return Mohawk::RivenSaveLoad::querySaveMetaInfos(slot);
} else
#endif
{
return SaveStateDescriptor();
}
}
Common::KeymapArray MohawkMetaEngineConnect::initKeymaps(const char *target) const {
Common::String gameId = ConfMan.get("gameid", target);
#ifdef ENABLE_MYST
if (gameId == "myst" || gameId == "makingofmyst") {
return Mohawk::MohawkEngine_Myst::initKeymaps(target);
}
#endif
#ifdef ENABLE_RIVEN
if (gameId == "riven") {
return Mohawk::MohawkEngine_Riven::initKeymaps(target);
}
#endif
return AdvancedMetaEngineConnect::initKeymaps(target);
}
bool MohawkMetaEngineConnect::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
const Mohawk::MohawkGameDescription *gd = (const Mohawk::MohawkGameDescription *)desc;
if (gd) {
switch (gd->gameType) {
case Mohawk::GType_MYST:
case Mohawk::GType_MAKINGOF:
#ifdef ENABLE_MYST
#ifndef ENABLE_MYSTME
if (gd->features & Mohawk::GF_ME) {
warning("Myst ME support not compiled in");
return false;
}
#endif
*engine = new Mohawk::MohawkEngine_Myst(syst, gd);
break;
#else
warning("Myst support not compiled in");
return false;
#endif
case Mohawk::GType_RIVEN:
#ifdef ENABLE_RIVEN
*engine = new Mohawk::MohawkEngine_Riven(syst, gd);
break;
#else
warning("Riven support not compiled in");
return false;
#endif
case Mohawk::GType_LIVINGBOOKSV1:
case Mohawk::GType_LIVINGBOOKSV2:
case Mohawk::GType_LIVINGBOOKSV3:
case Mohawk::GType_LIVINGBOOKSV4:
case Mohawk::GType_LIVINGBOOKSV5:
*engine = new Mohawk::MohawkEngine_LivingBooks(syst, gd);
break;
case Mohawk::GType_CSTIME:
#ifdef ENABLE_CSTIME
*engine = new Mohawk::MohawkEngine_CSTime(syst, gd);
break;
#else
warning("CSTime support not compiled in");
return false;
#endif
default:
error("Unknown Mohawk Engine");
}
}
return (gd != nullptr);
}
GUI::OptionsContainerWidget *MohawkMetaEngineConnect::buildEngineOptionsWidgetDynamic(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const {
Common::String gameId = ConfMan.get("gameid", target);
#ifdef ENABLE_MYST
if (gameId == "myst" || gameId == "makingofmyst") {
return new Mohawk::MystOptionsWidget(boss, name, target);
}
#endif
#ifdef ENABLE_RIVEN
if (gameId == "riven") {
return new Mohawk::RivenOptionsWidget(boss, name, target);
}
#endif
return MetaEngineConnect::buildEngineOptionsWidgetDynamic(boss, name, target);
}
#if PLUGIN_ENABLED_DYNAMIC(MOHAWK)
REGISTER_PLUGIN_DYNAMIC(MOHAWK, PLUGIN_TYPE_ENGINE, MohawkMetaEngineConnect);
#else
REGISTER_PLUGIN_STATIC(MOHAWK, PLUGIN_TYPE_ENGINE, MohawkMetaEngineConnect);
#endif

View file

@ -4,7 +4,6 @@ MODULE_OBJS = \
bitmap.o \ bitmap.o \
console.o \ console.o \
cursors.o \ cursors.o \
detection.o \
dialogs.o \ dialogs.o \
graphics.o \ graphics.o \
installer_archive.o \ installer_archive.o \
@ -12,6 +11,7 @@ MODULE_OBJS = \
livingbooks_code.o \ livingbooks_code.o \
livingbooks_graphics.o \ livingbooks_graphics.o \
livingbooks_lbx.o \ livingbooks_lbx.o \
metaengine.o \
mohawk.o \ mohawk.o \
resource.o \ resource.o \
sound.o \ sound.o \
@ -30,6 +30,7 @@ endif
ifdef ENABLE_MYST ifdef ENABLE_MYST
MODULE_OBJS += \ MODULE_OBJS += \
myst_metaengine/metaengine.o \
myst.o \ myst.o \
myst_areas.o \ myst_areas.o \
myst_card.o \ myst_card.o \
@ -55,6 +56,7 @@ endif
ifdef ENABLE_RIVEN ifdef ENABLE_RIVEN
MODULE_OBJS += \ MODULE_OBJS += \
riven_metaengine/metaengine.o \
riven.o \ riven.o \
riven_card.o \ riven_card.o \
riven_graphics.o \ riven_graphics.o \
@ -83,3 +85,21 @@ endif
# Include common rules # Include common rules
include $(srcdir)/rules.mk include $(srcdir)/rules.mk
# Detection objects
DETECT_OBJS += $(MODULE)/detection.o
# If we're building a dynamic module, build the relevant
# submodule. A static part already will have these, so
# no need to add them again.
ifeq ($(ENABLE_MOHAWK), DYNAMIC_PLUGIN)
ifdef ENABLE_MYST
DETECT_OBJS += $(MODULE)/myst_metaengine/metaengine.o
endif
ifdef ENABLE_RIVEN
DETECT_OBJS += $(MODULE)/riven_metaengine/metaengine.o
endif
endif