ScummVM API documentation
metaengine.h
1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  *
21  */
22 
23 #ifndef ENGINES_METAENGINE_H
24 #define ENGINES_METAENGINE_H
25 
26 #include "common/achievements.h"
27 #include "common/scummsys.h"
28 #include "common/error.h"
29 #include "common/array.h"
30 
31 #include "engines/game.h"
32 #include "engines/savestate.h"
33 
34 #include "base/plugins.h"
35 
36 class Engine;
37 class OSystem;
38 
39 namespace Common {
40 class Keymap;
41 class FSList;
42 class OutSaveFile;
43 class String;
44 
45 typedef SeekableReadStream InSaveFile;
46 }
47 
48 namespace Graphics {
49 struct Surface;
50 }
51 
52 namespace GUI {
53 class GuiObject;
54 class OptionsContainerWidget;
55 }
56 
71  const char *label;
72  const char *tooltip;
73  const char *configOption;
74  bool defaultState;
75 };
76 
80 typedef Common::Array<ExtraGuiOption> ExtraGuiOptions;
81 
85 enum { kSavegameFilePattern = -99 };
86 
87 #define EXTENDED_SAVE_VERSION 4
88 
93  char id[6];
94  uint8 version;
95  Common::String saveName;
96  Common::String description;
97  uint32 date;
98  uint16 time;
99  uint32 playtime;
100  Graphics::Surface *thumbnail;
101  bool isAutosave;
104  memset(id, 0, 6);
105  version = 0;
106  date = 0;
107  time = 0;
108  playtime = 0;
109  thumbnail = nullptr;
110  isAutosave = false;
111  }
112 };
113 
125 class MetaEngineDetection : public PluginObject {
126 public:
127  virtual ~MetaEngineDetection() {}
128 
130  virtual const char *getEngineId() const = 0;
131 
133  virtual const char *getOriginalCopyright() const = 0;
134 
136  virtual PlainGameList getSupportedGames() const = 0;
137 
139  virtual PlainGameDescriptor findGame(const char *gameId) const = 0;
140 
146  virtual DetectedGames detectGames(const Common::FSList &fslist) const = 0;
147 
162  virtual const ExtraGuiOptions getExtraGuiOptions(const Common::String &target) const {
163  return ExtraGuiOptions();
164  }
165 
172  virtual void registerDefaultSettings(const Common::String &target) const;
173 
188  virtual GUI::OptionsContainerWidget *buildEngineOptionsWidgetStatic(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const;
189 };
190 
204 class MetaEngine : public PluginObject {
205 private:
209  static void saveScreenThumbnail(Common::OutSaveFile *saveFile);
210 public:
211  virtual ~MetaEngine() {}
212 
223  virtual const char *getName() const = 0;
224 
238  virtual Common::Error createInstance(OSystem *syst, Engine **engine) const = 0;
239 
259  virtual SaveStateList listSaves(const char *target) const;
260 
271  SaveStateList listSaves(const char *target, bool saveMode) const;
272 
278  virtual int getAutosaveSlot() const {
279  return 0;
280  }
281 
292  virtual int getMaximumSaveSlot() const {
293  // For games using the new save format, assume 99 slots by default
294  return hasFeature(kSavesUseExtendedFormat) ? 99 : 0;
295  }
296 
309  virtual void removeSaveState(const char *target, int slot) const;
310 
320  virtual SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;
321 
330  virtual Common::String getSavegameFile(int saveGameIdx, const char *target = nullptr) const;
331 
337  Common::String getSavegameFilePattern(const char *target = nullptr) const {
338  return getSavegameFile(kSavegameFilePattern, target);
339  }
340 
344  virtual Common::Array<Common::Keymap *> initKeymaps(const char *target) const;
345 
349  virtual const ExtraGuiOptions getExtraGuiOptions(const Common::String &target) const {
350  return ExtraGuiOptions();
351  }
352 
369  virtual GUI::OptionsContainerWidget *buildEngineOptionsWidgetDynamic(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const;
370 
386 
391 
398 
414 
423 
432 
441 
456 
467  kSavesUseExtendedFormat
468  };
469 
479  virtual const Common::AchievementsInfo getAchievementsInfo(const Common::String &target) const {
480  return Common::AchievementsInfo();
481  }
482 
488  virtual bool hasFeature(MetaEngineFeature f) const;
489 
493  static void appendExtendedSave(Common::OutSaveFile *saveFile, uint32 playtime, Common::String desc, bool isAutosave);
497  static void parseSavegameHeader(ExtendedSavegameHeader *header, SaveStateDescriptor *desc);
501  static void fillDummyHeader(ExtendedSavegameHeader *header);
505  static WARN_UNUSED_RESULT bool readSavegameHeader(Common::InSaveFile *in, ExtendedSavegameHeader *header, bool skipThumbnail = true);
506 };
507 
511 class EngineManager : public Common::Singleton<EngineManager> {
512 public:
518  DetectionResults detectGames(const Common::FSList &fslist) const;
519 
521  const Plugin *findPlugin(const Common::String &engineId) const;
522 
530  const PluginList &getPlugins(const PluginType fetchPluginType = PLUGIN_TYPE_ENGINE_DETECTION) const;
531 
533  QualifiedGameDescriptor findTarget(const Common::String &target, const Plugin **plugin = NULL) const;
534 
542  QualifiedGameList findGamesMatching(const Common::String &engineId, const Common::String &gameId) const;
543 
549  Common::String createTargetForGame(const DetectedGame &game);
550 
552  void upgradeTargetIfNecessary(const Common::String &target) const;
553 
554 private:
556  QualifiedGameList findGameInLoadedPlugins(const Common::String &gameId) const;
557 
559  const Plugin *findLoadedPlugin(const Common::String &engineId) const;
560 
562  void upgradeTargetForEngineId(const Common::String &target) const;
563 };
564 
566 #define EngineMan EngineManager::instance()
567 
568 #endif
virtual int getAutosaveSlot() const
Definition: metaengine.h:278
bool isAutosave
Definition: metaengine.h:101
Definition: game.h:79
Definition: metaengine.h:204
Definition: metaengine.h:455
uint8 version
Definition: metaengine.h:94
Common::Array< SaveStateDescriptor > SaveStateList
Definition: savestate.h:275
MetaEngineFeature
Definition: metaengine.h:377
Definition: metaengine.h:390
Definition: game.h:124
Common::String getSavegameFilePattern(const char *target=nullptr) const
Definition: metaengine.h:337
virtual int getMaximumSaveSlot() const
Definition: metaengine.h:292
Definition: metaengine.h:511
const char * label
Definition: metaengine.h:71
Definition: metaengine.h:422
Definition: game.h:64
bool defaultState
Definition: metaengine.h:74
Common::Array< ExtraGuiOption > ExtraGuiOptions
Definition: metaengine.h:80
Definition: metaengine.h:52
Definition: game.h:49
Definition: savestate.h:55
Definition: metaengine.h:70
Definition: metaengine.h:397
Definition: game.h:217
Definition: advancedDetector.h:33
Definition: metaengine.h:48
Definition: metaengine.h:431
Definition: metaengine.h:413
const char * configOption
Definition: metaengine.h:73
Definition: metaengine.h:125
uint16 time
Definition: metaengine.h:98
virtual const Common::AchievementsInfo getAchievementsInfo(const Common::String &target) const
Definition: metaengine.h:479
Common::Array< DetectedGame > DetectedGames
Definition: game.h:203
Common::String saveName
Definition: metaengine.h:95
uint32 playtime
Definition: metaengine.h:99
Definition: metaengine.h:440
Definition: metaengine.h:385
Graphics::Surface * thumbnail
Definition: metaengine.h:100
uint32 date
Definition: metaengine.h:97
Definition: metaengine.h:92
virtual const ExtraGuiOptions getExtraGuiOptions(const Common::String &target) const
Definition: metaengine.h:349
Common::String description
Definition: metaengine.h:96
Definition: engine.h:143
virtual const ExtraGuiOptions getExtraGuiOptions(const Common::String &target) const
Definition: metaengine.h:162
const char * tooltip
Definition: metaengine.h:72