From 24c44d29dd1f12f055ace702912775998903dbb0 Mon Sep 17 00:00:00 2001 From: aryanrawlani28 Date: Mon, 5 Oct 2020 01:16:32 +0530 Subject: [PATCH] STARK: Split detection code & adapt to new plugins. --- engines/stark/detection.cpp | 100 +------------------------- engines/stark/metaengine.cpp | 131 +++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 97 deletions(-) create mode 100644 engines/stark/metaengine.cpp diff --git a/engines/stark/detection.cpp b/engines/stark/detection.cpp index ebc320b6a4b..78c1649220a 100644 --- a/engines/stark/detection.cpp +++ b/engines/stark/detection.cpp @@ -21,12 +21,7 @@ */ #include "engines/advancedDetector.h" -#include "engines/stark/savemetadata.h" -#include "engines/stark/stark.h" -#include "engines/stark/services/stateprovider.h" -#include "common/savefile.h" -#include "common/system.h" #include "common/translation.h" namespace Stark { @@ -370,9 +365,9 @@ static const ADExtraGuiOptionsMap optionsList[] = { AD_EXTRA_GUI_OPTIONS_TERMINATOR }; -class StarkMetaEngine : public AdvancedMetaEngine { +class StarkMetaEngineStatic : public AdvancedMetaEngineStatic { public: - StarkMetaEngine() : AdvancedMetaEngine(gameDescriptions, sizeof(ADGameDescription), starkGames, optionsList) { + StarkMetaEngineStatic() : AdvancedMetaEngineStatic(gameDescriptions, sizeof(ADGameDescription), starkGames, optionsList) { _guiOptions = GUIO4(GUIO_NOMIDI, GAMEOPTION_ASSETS_MOD, GAMEOPTION_LINEAR_FILTERING, GAMEOPTION_FONT_ANTIALIASING); } @@ -387,97 +382,8 @@ public: const char *getOriginalCopyright() const override { return "(C) Funcom"; } - - bool hasFeature(MetaEngineFeature f) const override { - return - (f == kSupportsListSaves) || - (f == kSupportsLoadingDuringStartup) || - (f == kSupportsDeleteSave) || - (f == kSavesSupportThumbnail) || - (f == kSavesSupportMetaInfo) || - (f == kSavesSupportPlayTime) || - (f == kSavesSupportCreationDate); - } - - int getMaximumSaveSlot() const override { - return 999; - } - - SaveStateList listSaves(const char *target) const override { - Common::StringArray filenames = StarkEngine::listSaveNames(target); - - SaveStateList saveList; - for (Common::StringArray::const_iterator filename = filenames.begin(); filename != filenames.end(); ++filename) { - int slot = StarkEngine::getSaveNameSlot(target, *filename); - - // Read the description from the save - Common::String description; - Common::InSaveFile *save = g_system->getSavefileManager()->openForLoading(*filename); - if (save) { - StateReadStream stream(save); - description = stream.readString(); - } - - saveList.push_back(SaveStateDescriptor(slot, description)); - } - - Common::sort(saveList.begin(), saveList.end(), SaveStateDescriptorSlotComparator()); - return saveList; - } - - SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const override { - Common::String filename = StarkEngine::formatSaveName(target, slot); - Common::InSaveFile *save = g_system->getSavefileManager()->openForLoading(filename); - if (!save) { - return SaveStateDescriptor(); - } - - SaveStateDescriptor descriptor; - descriptor.setSaveSlot(slot); - - SaveMetadata metadata; - Common::ErrorCode readError = metadata.read(save, filename); - if (readError != Common::kNoError) { - delete save; - return descriptor; - } - - descriptor.setDescription(metadata.description); - - if (metadata.version >= 9) { - Graphics::Surface *thumb = metadata.readGameScreenThumbnail(save); - descriptor.setThumbnail(thumb); - descriptor.setPlayTime(metadata.totalPlayTime); - descriptor.setSaveDate(metadata.saveYear, metadata.saveMonth, metadata.saveDay); - descriptor.setSaveTime(metadata.saveHour, metadata.saveMinute); - } - - if (metadata.version >= 13) { - descriptor.setAutosave(metadata.isAutoSave); - } - - delete save; - - return descriptor; - } - - void removeSaveState(const char *target, int slot) const override { - Common::String filename = StarkEngine::formatSaveName(target, slot); - g_system->getSavefileManager()->removeSavefile(filename); - } - - bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const override { - if (desc) - *engine = new StarkEngine(syst, desc); - - return desc != nullptr; - } }; } // End of namespace Stark -#if PLUGIN_ENABLED_DYNAMIC(STARK) - REGISTER_PLUGIN_DYNAMIC(STARK, PLUGIN_TYPE_ENGINE, Stark::StarkMetaEngine); -#else - REGISTER_PLUGIN_STATIC(STARK, PLUGIN_TYPE_ENGINE, Stark::StarkMetaEngine); -#endif +REGISTER_PLUGIN_STATIC(STARK_DETECTION, PLUGIN_TYPE_METAENGINE, Stark::StarkMetaEngineStatic); diff --git a/engines/stark/metaengine.cpp b/engines/stark/metaengine.cpp new file mode 100644 index 00000000000..73015c18720 --- /dev/null +++ b/engines/stark/metaengine.cpp @@ -0,0 +1,131 @@ +/* ResidualVM - A 3D game interpreter + * + * ResidualVM 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 "engines/advancedDetector.h" +#include "engines/stark/savemetadata.h" +#include "engines/stark/stark.h" +#include "engines/stark/services/stateprovider.h" + +#include "common/savefile.h" +#include "common/system.h" + +namespace Stark { + +class StarkMetaEngine : public AdvancedMetaEngine { +public: + const char *getName() const override { + return "stark"; + } + + bool hasFeature(MetaEngineFeature f) const override { + return + (f == kSupportsListSaves) || + (f == kSupportsLoadingDuringStartup) || + (f == kSupportsDeleteSave) || + (f == kSavesSupportThumbnail) || + (f == kSavesSupportMetaInfo) || + (f == kSavesSupportPlayTime) || + (f == kSavesSupportCreationDate); + } + + int getMaximumSaveSlot() const override { + return 999; + } + + SaveStateList listSaves(const char *target) const override { + Common::StringArray filenames = StarkEngine::listSaveNames(target); + + SaveStateList saveList; + for (Common::StringArray::const_iterator filename = filenames.begin(); filename != filenames.end(); ++filename) { + int slot = StarkEngine::getSaveNameSlot(target, *filename); + + // Read the description from the save + Common::String description; + Common::InSaveFile *save = g_system->getSavefileManager()->openForLoading(*filename); + if (save) { + StateReadStream stream(save); + description = stream.readString(); + } + + saveList.push_back(SaveStateDescriptor(slot, description)); + } + + Common::sort(saveList.begin(), saveList.end(), SaveStateDescriptorSlotComparator()); + return saveList; + } + + SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const override { + Common::String filename = StarkEngine::formatSaveName(target, slot); + Common::InSaveFile *save = g_system->getSavefileManager()->openForLoading(filename); + if (!save) { + return SaveStateDescriptor(); + } + + SaveStateDescriptor descriptor; + descriptor.setSaveSlot(slot); + + SaveMetadata metadata; + Common::ErrorCode readError = metadata.read(save, filename); + if (readError != Common::kNoError) { + delete save; + return descriptor; + } + + descriptor.setDescription(metadata.description); + + if (metadata.version >= 9) { + Graphics::Surface *thumb = metadata.readGameScreenThumbnail(save); + descriptor.setThumbnail(thumb); + descriptor.setPlayTime(metadata.totalPlayTime); + descriptor.setSaveDate(metadata.saveYear, metadata.saveMonth, metadata.saveDay); + descriptor.setSaveTime(metadata.saveHour, metadata.saveMinute); + } + + if (metadata.version >= 13) { + descriptor.setAutosave(metadata.isAutoSave); + } + + delete save; + + return descriptor; + } + + void removeSaveState(const char *target, int slot) const override { + Common::String filename = StarkEngine::formatSaveName(target, slot); + g_system->getSavefileManager()->removeSavefile(filename); + } + + bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const override { + if (desc) + *engine = new StarkEngine(syst, desc); + + return desc != nullptr; + } +}; + +} // End of namespace Stark + +#if PLUGIN_ENABLED_DYNAMIC(STARK) + REGISTER_PLUGIN_DYNAMIC(STARK, PLUGIN_TYPE_ENGINE, Stark::StarkMetaEngine); +#else + REGISTER_PLUGIN_STATIC(STARK, PLUGIN_TYPE_ENGINE, Stark::StarkMetaEngine); +#endif