From 482a5fb467e6694fb54c75f718563992657edf97 Mon Sep 17 00:00:00 2001 From: Einar Johan Trøan Sømåen Date: Sun, 29 Jul 2012 02:59:14 +0200 Subject: WINTERMUTE: Make the BaseEngine-singleton use Common::Singleton as super-class --- engines/wintermute/base/base_engine.cpp | 47 ++++++---------------- engines/wintermute/base/base_engine.h | 9 ++--- engines/wintermute/base/base_file_manager.cpp | 15 ++++--- engines/wintermute/base/base_game.cpp | 22 +++++----- engines/wintermute/base/base_parser.cpp | 2 +- .../wintermute/base/base_persistence_manager.cpp | 9 +++-- engines/wintermute/base/base_persistence_manager.h | 3 +- engines/wintermute/base/base_registry.cpp | 4 +- .../base/gfx/osystem/base_render_osystem.cpp | 6 +-- .../wintermute/base/scriptables/script_engine.cpp | 11 +++-- .../wintermute/base/sound/base_sound_manager.cpp | 4 +- engines/wintermute/detection.cpp | 6 +-- engines/wintermute/wintermute.cpp | 11 ++--- 13 files changed, 63 insertions(+), 86 deletions(-) (limited to 'engines') diff --git a/engines/wintermute/base/base_engine.cpp b/engines/wintermute/base/base_engine.cpp index cd6e9c9e3b..0185d973fa 100644 --- a/engines/wintermute/base/base_engine.cpp +++ b/engines/wintermute/base/base_engine.cpp @@ -32,24 +32,17 @@ #include "engines/wintermute/base/base_engine.h" #include "engines/wintermute/wintermute.h" #include "common/system.h" +namespace Common { +DECLARE_SINGLETON(WinterMute::BaseEngine); +} namespace WinterMute { -BaseEngine *BaseEngine::_instance = 0; - /* -class BaseEngine { - static BaseEngine *_instance; - BaseEngine(); - BaseFileManager *_fileManager; - BaseRegistry *_registry; -public: - ~BaseEngine(); - BaseEngine *getInstance(); - BaseFileManager *getFileMan() { return _fileManager; } - BaseRegistry *getRegistry() { return _registry; } -};*/ BaseEngine::BaseEngine() { - + _fileManager = NULL; + _registry = NULL; + _gameRef = NULL; + _gameId = ""; } void BaseEngine::init() { @@ -63,25 +56,9 @@ BaseEngine::~BaseEngine() { delete _registry; } -BaseEngine *BaseEngine::getInstance() { - if (!_instance) - assert(0); - return _instance; -} - void BaseEngine::createInstance(const Common::String &gameid) { - if (_instance) { - delete _instance; - _instance = NULL; - } - _instance = new BaseEngine(); - _instance->_gameId = gameid; - _instance->init(); -} - -void BaseEngine::destroyInstance() { - delete _instance; - _instance = NULL; + instance()._gameId = gameid; + instance().init(); } void BaseEngine::LOG(bool res, const char *fmt, ...) { @@ -98,11 +75,11 @@ void BaseEngine::LOG(bool res, const char *fmt, ...) { vsprintf(buff, fmt, va); va_end(va); - if (_instance && _instance->_gameRef) { - _instance->_gameRef->LOG("%s", buff); + if (instance()._gameRef) { + instance()._gameRef->LOG("%s", buff); } else { debugCN(kWinterMuteDebugLog, "%02d:%02d:%02d: %s\n", hours, mins, secs, buff); } } -} // end of namespace WinterMute \ No newline at end of file +} // end of namespace WinterMute diff --git a/engines/wintermute/base/base_engine.h b/engines/wintermute/base/base_engine.h index 5782c012d8..d45d979f25 100644 --- a/engines/wintermute/base/base_engine.h +++ b/engines/wintermute/base/base_engine.h @@ -27,26 +27,23 @@ */ #include "common/str.h" + #include "common/singleton.h" namespace WinterMute { class BaseFileManager; class BaseRegistry; class BaseGame; -class BaseEngine { - static BaseEngine *_instance; - BaseEngine(); +class BaseEngine : public Common::Singleton { void init(); BaseFileManager *_fileManager; BaseRegistry *_registry; Common::String _gameId; BaseGame *_gameRef; public: + BaseEngine(); ~BaseEngine(); static void createInstance(const Common::String &gameid); - static BaseEngine *getInstance(); - static void destroyInstance(); - void setGameRef(BaseGame *gameRef) { _gameRef = gameRef; } BaseGame *getGameRef() { return _gameRef; } diff --git a/engines/wintermute/base/base_file_manager.cpp b/engines/wintermute/base/base_file_manager.cpp index 83047ca75c..801729c5e8 100644 --- a/engines/wintermute/base/base_file_manager.cpp +++ b/engines/wintermute/base/base_file_manager.cpp @@ -147,15 +147,14 @@ bool BaseFileManager::reloadPaths() { ////////////////////////////////////////////////////////////////////////// bool BaseFileManager::initPaths() { - BaseEngine *enginePtr = BaseEngine::getInstance(); - if (!enginePtr) { // This function only works when the game-registry is loaded + if (!BaseEngine::instance().getRegistry()) { // This function only works when the game-registry is loaded return STATUS_FAILED; } AnsiString pathList; // single files paths - pathList = enginePtr->getRegistry()->readString("Resource", "CustomPaths", ""); + pathList = BaseEngine::instance().getRegistry()->readString("Resource", "CustomPaths", ""); Common::StringTokenizer *entries = new Common::StringTokenizer(pathList, ";"); // numPaths = BaseUtils::strNumEntries(pathList.c_str(), ';'); while (!entries->empty()) { @@ -172,7 +171,7 @@ bool BaseFileManager::initPaths() { const Common::FSNode gameData(ConfMan.get("path")); addPath(PATH_PACKAGE, gameData); - pathList = enginePtr->getRegistry()->readString("Resource", "PackagePaths", ""); + pathList = BaseEngine::instance().getRegistry()->readString("Resource", "PackagePaths", ""); entries = new Common::StringTokenizer(pathList, ";"); while (!entries->empty()) { Common::String path = entries->nextToken(); @@ -271,7 +270,7 @@ Common::SeekableReadStream *BaseFileManager::openPkgFile(const Common::String &f bool BaseFileManager::hasFile(const Common::String &filename) { if (scumm_strnicmp(filename.c_str(), "savegame:", 9) == 0) { - BasePersistenceManager pm(BaseEngine::getInstance()->getGameId()); + BasePersistenceManager pm(BaseEngine::instance().getGameId()); if (filename.size() <= 9) { return false; } @@ -323,7 +322,7 @@ Common::SeekableReadStream *BaseFileManager::openFileRaw(const Common::String &f Common::SeekableReadStream *ret = NULL; if (scumm_strnicmp(filename.c_str(), "savegame:", 9) == 0) { - if (!BaseEngine::getInstance()) { + if (!BaseEngine::instance().getGameRef()) { error("Attempt to load filename: %s without BaseEngine-object, this is unsupported", filename.c_str()); } BaseSaveThumbFile *saveThumbFile = new BaseSaveThumbFile(); @@ -354,8 +353,8 @@ Common::SeekableReadStream *BaseFileManager::openFileRaw(const Common::String &f } BaseFileManager *BaseFileManager::getEngineInstance() { - if (BaseEngine::getInstance()) { - return BaseEngine::getInstance()->getFileManager(); + if (BaseEngine::instance().getFileManager()) { + return BaseEngine::instance().getFileManager(); } return NULL; } diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp index 687e394920..6fea190e01 100644 --- a/engines/wintermute/base/base_game.cpp +++ b/engines/wintermute/base/base_game.cpp @@ -279,7 +279,7 @@ BaseGame::~BaseGame() { getDebugMgr()->onGameShutdown(); - BaseEngine::getInstance()->getRegistry()->writeBool("System", "LastRun", true); + BaseEngine::instance().getRegistry()->writeBool("System", "LastRun", true); cleanup(); @@ -1549,7 +1549,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack stack->correctParams(2); const char *key = stack->pop()->getString(); int val = stack->pop()->getInt(); - BaseEngine::getInstance()->getRegistry()->writeInt("PrivateSettings", key, val); + BaseEngine::instance().getRegistry()->writeInt("PrivateSettings", key, val); stack->pushNULL(); return STATUS_OK; } @@ -1561,7 +1561,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack stack->correctParams(2); const char *key = stack->pop()->getString(); int initVal = stack->pop()->getInt(); - stack->pushInt(BaseEngine::getInstance()->getRegistry()->readInt("PrivateSettings", key, initVal)); + stack->pushInt(BaseEngine::instance().getRegistry()->readInt("PrivateSettings", key, initVal)); return STATUS_OK; } @@ -1572,7 +1572,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack stack->correctParams(2); const char *key = stack->pop()->getString(); const char *val = stack->pop()->getString(); - BaseEngine::getInstance()->getRegistry()->writeString("PrivateSettings", key, val); + BaseEngine::instance().getRegistry()->writeString("PrivateSettings", key, val); stack->pushNULL(); return STATUS_OK; } @@ -1584,7 +1584,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack stack->correctParams(2); const char *key = stack->pop()->getString(); const char *initVal = stack->pop()->getString(); - AnsiString val = BaseEngine::getInstance()->getRegistry()->readString("PrivateSettings", key, initVal); + AnsiString val = BaseEngine::instance().getRegistry()->readString("PrivateSettings", key, initVal); stack->pushString(val.c_str()); return STATUS_OK; } @@ -2642,7 +2642,7 @@ ScValue *BaseGame::scGetProperty(const char *name) { // MostRecentSaveSlot (RO) ////////////////////////////////////////////////////////////////////////// else if (strcmp(name, "MostRecentSaveSlot") == 0) { - _scValue->setInt(BaseEngine::getInstance()->getRegistry()->readInt("System", "MostRecentSaveSlot", -1)); + _scValue->setInt(BaseEngine::instance().getRegistry()->readInt("System", "MostRecentSaveSlot", -1)); return _scValue; } @@ -3349,7 +3349,7 @@ bool BaseGame::saveGame(int slot, const char *desc, bool quickSave) { if (DID_SUCCEED(ret = SystemClassRegistry::getInstance()->saveTable(_gameRef, pm, quickSave))) { if (DID_SUCCEED(ret = SystemClassRegistry::getInstance()->saveInstances(_gameRef, pm, quickSave))) { if (DID_SUCCEED(ret = pm->saveFile(filename))) { - BaseEngine::getInstance()->getRegistry()->writeInt("System", "MostRecentSaveSlot", slot); + BaseEngine::instance().getRegistry()->writeInt("System", "MostRecentSaveSlot", slot); } } } @@ -3688,7 +3688,7 @@ bool BaseGame::loadSettings(const char *filename) { break; case TOKEN_REGISTRY_PATH: - BaseEngine::getInstance()->getRegistry()->setBasePath((char *)params); + BaseEngine::instance().getRegistry()->setBasePath((char *)params); break; case TOKEN_RICH_SAVED_GAMES: @@ -3712,8 +3712,8 @@ bool BaseGame::loadSettings(const char *filename) { ret = STATUS_FAILED; } - _settingsAllowWindowed = BaseEngine::getInstance()->getRegistry()->readBool("Debug", "AllowWindowed", _settingsAllowWindowed); - _compressedSavegames = BaseEngine::getInstance()->getRegistry()->readBool("Debug", "CompressedSavegames", _compressedSavegames); + _settingsAllowWindowed = BaseEngine::instance().getRegistry()->readBool("Debug", "AllowWindowed", _settingsAllowWindowed); + _compressedSavegames = BaseEngine::instance().getRegistry()->readBool("Debug", "CompressedSavegames", _compressedSavegames); //_compressedSavegames = false; delete[] origBuffer; @@ -4713,7 +4713,7 @@ bool BaseGame::isDoubleClick(int buttonIndex) { ////////////////////////////////////////////////////////////////////////// void BaseGame::autoSaveOnExit() { _soundMgr->saveSettings(); - BaseEngine::getInstance()->getRegistry()->saveValues(); + BaseEngine::instance().getRegistry()->saveValues(); if (!_autoSaveOnExit) { return; diff --git a/engines/wintermute/base/base_parser.cpp b/engines/wintermute/base/base_parser.cpp index 5dba8f9317..5d5a2d534d 100644 --- a/engines/wintermute/base/base_parser.cpp +++ b/engines/wintermute/base/base_parser.cpp @@ -123,7 +123,7 @@ int32 BaseParser::getCommand(char **buf, TokenDesc *tokens, char **params) { if (!*buf) { return PARSERR_TOKENNOTFOUND; } - BaseEngine::getInstance()->getGameRef()->miniUpdate(); + BaseEngine::instance().getGameRef()->miniUpdate(); char *name; return getObject(buf, tokens, &name, params); } diff --git a/engines/wintermute/base/base_persistence_manager.cpp b/engines/wintermute/base/base_persistence_manager.cpp index 2d30395928..ddc5e15d92 100644 --- a/engines/wintermute/base/base_persistence_manager.cpp +++ b/engines/wintermute/base/base_persistence_manager.cpp @@ -53,15 +53,16 @@ namespace WinterMute { #define SAVE_MAGIC_2 0x32564153 ////////////////////////////////////////////////////////////////////////// -BasePersistenceManager::BasePersistenceManager(const char *savePrefix) { +BasePersistenceManager::BasePersistenceManager(const char *savePrefix, bool deleteSingleton) { _saving = false; // _buffer = NULL; // _bufferSize = 0; _offset = 0; _saveStream = NULL; _loadStream = NULL; - if (BaseEngine::getInstance()) { - _gameRef = BaseEngine::getInstance()->getGameRef(); + _deleteSingleton = deleteSingleton; + if (BaseEngine::instance().getGameRef()) { + _gameRef = BaseEngine::instance().getGameRef(); } else { _gameRef = NULL; } @@ -89,6 +90,8 @@ BasePersistenceManager::BasePersistenceManager(const char *savePrefix) { ////////////////////////////////////////////////////////////////////////// BasePersistenceManager::~BasePersistenceManager() { cleanup(); + if (_deleteSingleton) + BaseEngine::destroy(); } diff --git a/engines/wintermute/base/base_persistence_manager.h b/engines/wintermute/base/base_persistence_manager.h index 30fac6e191..87892b42f3 100644 --- a/engines/wintermute/base/base_persistence_manager.h +++ b/engines/wintermute/base/base_persistence_manager.h @@ -87,7 +87,7 @@ public: bool transfer(const char *name, Common::String *val); bool transfer(const char *name, Vector2 *val); bool transfer(const char *name, AnsiStringArray &Val); - BasePersistenceManager(const char *savePrefix = NULL); + BasePersistenceManager(const char *savePrefix = NULL, bool deleteSingleton = false); virtual ~BasePersistenceManager(); bool checkVersion(byte verMajor, byte verMinor, byte verBuild); @@ -95,6 +95,7 @@ public: byte *_thumbnailData; Common::String getFilenameForSlot(int slot) const; private: + bool _deleteSingleton; bool readHeader(const Common::String &filename); TimeDate getTimeDate(); bool putTimeDate(const TimeDate &t); diff --git a/engines/wintermute/base/base_registry.cpp b/engines/wintermute/base/base_registry.cpp index 495f68b486..d03691ea42 100644 --- a/engines/wintermute/base/base_registry.cpp +++ b/engines/wintermute/base/base_registry.cpp @@ -175,13 +175,13 @@ char *BaseRegistry::getIniName() { ////////////////////////////////////////////////////////////////////////// void BaseRegistry::loadValues(bool local) { - Common::String filename = Common::String(BaseEngine::getInstance()->getGameId()) + "-settings.xml"; + Common::String filename = Common::String(BaseEngine::instance().getGameId()) + "-settings.xml"; loadXml(filename, _values); } ////////////////////////////////////////////////////////////////////////// void BaseRegistry::saveValues() { - Common::String filename = Common::String(BaseEngine::getInstance()->getGameId()) + "-settings.xml"; + Common::String filename = Common::String(BaseEngine::instance().getGameId()) + "-settings.xml"; saveXml(filename, _values); } diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp index 51b0c2dd36..6e18aaba29 100644 --- a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp +++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp @@ -127,8 +127,8 @@ bool BaseRenderOSystem::initRenderer(int width, int height, bool windowed) { //TODO: Tiny resolution-displays might want to do some resolution-selection logic here - _realWidth = BaseEngine::getInstance()->getRegistry()->readInt("Debug", "ForceResWidth", _width); - _realHeight = BaseEngine::getInstance()->getRegistry()->readInt("Debug", "ForceResHeight", _height); + _realWidth = BaseEngine::instance().getRegistry()->readInt("Debug", "ForceResWidth", _width); + _realHeight = BaseEngine::instance().getRegistry()->readInt("Debug", "ForceResHeight", _height); float origAspect = (float)_width / (float)_height; float realAspect = (float)_realWidth / (float)_realHeight; @@ -153,7 +153,7 @@ bool BaseRenderOSystem::initRenderer(int width, int height, bool windowed) { _ratioX = (float)(_realWidth - _borderLeft - _borderRight) / (float)_width; _ratioY = (float)(_realHeight - _borderTop - _borderBottom) / (float)_height; - //_windowed = BaseEngine::getInstance()->getRegistry()->readBool("Video", "Windowed", true); TODO + //_windowed = BaseEngine::instance().getRegistry()->readBool("Video", "Windowed", true); TODO Graphics::PixelFormat format(4, 8, 8, 8, 8, 24, 16, 8, 0); g_system->beginGFXTransaction(); diff --git a/engines/wintermute/base/scriptables/script_engine.cpp b/engines/wintermute/base/scriptables/script_engine.cpp index 9e11a7c5b4..96250dbb90 100644 --- a/engines/wintermute/base/scriptables/script_engine.cpp +++ b/engines/wintermute/base/scriptables/script_engine.cpp @@ -128,7 +128,6 @@ bool ScEngine::cleanup() { ////////////////////////////////////////////////////////////////////////// byte *ScEngine::loadFile(void *data, char *filename, uint32 *size) { - BaseGame *gameRef = (BaseGame *)data; return BaseFileManager::getEngineInstance()->readWholeFile(filename, size); } @@ -201,7 +200,7 @@ byte *ScEngine::getCompiledScript(const char *filename, uint32 *outSize, bool ig uint32 size; - byte *buffer = BaseEngine::getInstance()->getFileManager()->readWholeFile(filename, &size); + byte *buffer = BaseEngine::instance().getFileManager()->readWholeFile(filename, &size); if (!buffer) { _gameRef->LOG(0, "ScEngine::GetCompiledScript - error opening script '%s'", filename); return NULL; @@ -690,10 +689,10 @@ bool ScEngine::saveBreakpoints() { sprintf(key, "Breakpoint%d", count); sprintf(text, "%s:%d", _breakpoints[i]->_filename.c_str(), _breakpoints[i]->_lines[j]); - BaseEngine::getInstance()->getRegistry()->writeString("Debug", key, text); + BaseEngine::instance().getRegistry()->writeString("Debug", key, text); } } - BaseEngine::getInstance()->getRegistry()->writeInt("Debug", "NumBreakpoints", count); + BaseEngine::instance().getRegistry()->writeInt("Debug", "NumBreakpoints", count); return STATUS_OK; } @@ -706,11 +705,11 @@ bool ScEngine::loadBreakpoints() { char key[100]; - int count = BaseEngine::getInstance()->getRegistry()->readInt("Debug", "NumBreakpoints", 0); + int count = BaseEngine::instance().getRegistry()->readInt("Debug", "NumBreakpoints", 0); for (int i = 1; i <= count; i++) { /* uint32 bufSize = 512; */ sprintf(key, "Breakpoint%d", i); - AnsiString breakpoint = BaseEngine::getInstance()->getRegistry()->readString("Debug", key, ""); + AnsiString breakpoint = BaseEngine::instance().getRegistry()->readString("Debug", key, ""); char *path = BaseUtils::strEntry(0, breakpoint.c_str(), ':'); char *line = BaseUtils::strEntry(1, breakpoint.c_str(), ':'); diff --git a/engines/wintermute/base/sound/base_sound_manager.cpp b/engines/wintermute/base/sound/base_sound_manager.cpp index 61c7376c79..03f6fffb58 100644 --- a/engines/wintermute/base/sound/base_sound_manager.cpp +++ b/engines/wintermute/base/sound/base_sound_manager.cpp @@ -72,7 +72,7 @@ bool BaseSoundMgr::cleanup() { ////////////////////////////////////////////////////////////////////////// void BaseSoundMgr::saveSettings() { if (_soundAvailable) { - BaseEngine::getInstance()->getRegistry()->writeInt("Audio", "MasterVolume", _volumeMaster); + BaseEngine::instance().getRegistry()->writeInt("Audio", "MasterVolume", _volumeMaster); } } @@ -83,7 +83,7 @@ bool BaseSoundMgr::initialize() { if (!g_system->getMixer()->isReady()) { return STATUS_FAILED; } - _volumeMaster = BaseEngine::getInstance()->getRegistry()->readInt("Audio", "MasterVolume", 255); + _volumeMaster = BaseEngine::instance().getRegistry()->readInt("Audio", "MasterVolume", 255); _soundAvailable = true; return STATUS_OK; diff --git a/engines/wintermute/detection.cpp b/engines/wintermute/detection.cpp index 269ab28601..af2560fcf2 100644 --- a/engines/wintermute/detection.cpp +++ b/engines/wintermute/detection.cpp @@ -169,7 +169,7 @@ public: SaveStateList listSaves(const char *target) const { SaveStateList saves; - WinterMute::BasePersistenceManager pm(target); + WinterMute::BasePersistenceManager pm(target, true); for (int i = 0; i < getMaximumSaveSlot(); i++) { if (pm.getSaveExists(i)) { SaveStateDescriptor desc; @@ -185,12 +185,12 @@ public: } void removeSaveState(const char *target, int slot) const { - WinterMute::BasePersistenceManager pm(target); + WinterMute::BasePersistenceManager pm(target, true); pm.deleteSaveSlot(slot); } virtual SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const { - WinterMute::BasePersistenceManager pm(target); + WinterMute::BasePersistenceManager pm(target, true); SaveStateDescriptor retVal; retVal.setDescription("Invalid savegame"); pm.getSaveStateDesc(slot, retVal); diff --git a/engines/wintermute/wintermute.cpp b/engines/wintermute/wintermute.cpp index f2e811b45e..8e07569bf7 100644 --- a/engines/wintermute/wintermute.cpp +++ b/engines/wintermute/wintermute.cpp @@ -161,7 +161,7 @@ int WinterMuteEngine::init() { BaseEngine::createInstance(_targetName); _game = new AdGame(_targetName); if (!_game) return 1; - BaseEngine::getInstance()->setGameRef(_game); + BaseEngine::instance().setGameRef(_game); BasePlatform::initialize(_game, 0, NULL); bool windowedMode = !ConfMan.getBool("fullscreen"); @@ -194,11 +194,11 @@ int WinterMuteEngine::init() { }*/ - if (BaseEngine::getInstance()->getRegistry()->readBool("Debug", "DebugMode")) _game->DEBUG_DebugEnable("./wme.log"); + if (BaseEngine::instance().getRegistry()->readBool("Debug", "DebugMode")) _game->DEBUG_DebugEnable("./wme.log"); - _game->_debugShowFPS = BaseEngine::getInstance()->getRegistry()->readBool("Debug", "ShowFPS"); + _game->_debugShowFPS = BaseEngine::instance().getRegistry()->readBool("Debug", "ShowFPS"); - if (BaseEngine::getInstance()->getRegistry()->readBool("Debug", "DisableSmartCache")) { + if (BaseEngine::instance().getRegistry()->readBool("Debug", "DisableSmartCache")) { _game->LOG(0, "Smart cache is DISABLED"); _game->_smartCache = false; } @@ -337,7 +337,7 @@ int WinterMuteEngine::messageLoop() { void WinterMuteEngine::deinit() { delete _classReg; _classReg = NULL; - BaseEngine::destroyInstance(); + BaseEngine::destroy(); } bool WinterMuteEngine::getGameInfo(const Common::FSList &fslist, Common::String &name, Common::String &caption) { @@ -418,6 +418,7 @@ bool WinterMuteEngine::getGameInfo(const Common::FSList &fslist, Common::String delete stream; } delete fileMan; + BaseEngine::destroy(); return retVal; } -- cgit v1.2.3