diff options
-rw-r--r-- | engines/wintermute/base/base_engine.cpp | 8 | ||||
-rw-r--r-- | engines/wintermute/base/base_engine.h | 5 | ||||
-rw-r--r-- | engines/wintermute/base/base_file_manager.cpp | 15 | ||||
-rw-r--r-- | engines/wintermute/base/base_file_manager.h | 4 | ||||
-rw-r--r-- | engines/wintermute/wintermute.cpp | 4 |
5 files changed, 24 insertions, 12 deletions
diff --git a/engines/wintermute/base/base_engine.cpp b/engines/wintermute/base/base_engine.cpp index 3447407866..2368f8b106 100644 --- a/engines/wintermute/base/base_engine.cpp +++ b/engines/wintermute/base/base_engine.cpp @@ -46,8 +46,8 @@ BaseEngine::BaseEngine() { _gameId = ""; } -void BaseEngine::init() { - _fileManager = new BaseFileManager(); +void BaseEngine::init(Common::Language lang) { + _fileManager = new BaseFileManager(lang); // Don't forget to register your random source _rnd = new Common::RandomSource("Wintermute"); _classReg = new SystemClassRegistry(); @@ -60,9 +60,9 @@ BaseEngine::~BaseEngine() { delete _classReg; } -void BaseEngine::createInstance(const Common::String &gameid) { +void BaseEngine::createInstance(const Common::String &gameid, Common::Language lang) { instance()._gameId = gameid; - instance().init(); + instance().init(lang); } void BaseEngine::LOG(bool res, const char *fmt, ...) { diff --git a/engines/wintermute/base/base_engine.h b/engines/wintermute/base/base_engine.h index 32007ef571..1cef7b33ba 100644 --- a/engines/wintermute/base/base_engine.h +++ b/engines/wintermute/base/base_engine.h @@ -32,6 +32,7 @@ #include "common/str.h" #include "common/singleton.h" #include "common/random.h" +#include "common/language.h" namespace Wintermute { @@ -40,7 +41,7 @@ class BaseRegistry; class BaseGame; class SystemClassRegistry; class BaseEngine : public Common::Singleton<Wintermute::BaseEngine> { - void init(); + void init(Common::Language lang); BaseFileManager *_fileManager; Common::String _gameId; BaseGame *_gameRef; @@ -50,7 +51,7 @@ class BaseEngine : public Common::Singleton<Wintermute::BaseEngine> { public: BaseEngine(); ~BaseEngine(); - static void createInstance(const Common::String &gameid); + static void createInstance(const Common::String &gameid, Common::Language lang); void setGameRef(BaseGame *gameRef) { _gameRef = gameRef; } Common::RandomSource *getRandomSource() { return _rnd; } diff --git a/engines/wintermute/base/base_file_manager.cpp b/engines/wintermute/base/base_file_manager.cpp index f7a3b6a3fb..01b11352b5 100644 --- a/engines/wintermute/base/base_file_manager.cpp +++ b/engines/wintermute/base/base_file_manager.cpp @@ -53,7 +53,8 @@ namespace Wintermute { //////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
-BaseFileManager::BaseFileManager() {
+BaseFileManager::BaseFileManager(Common::Language lang) {
+ _language = lang;
initPaths();
registerPackages();
}
@@ -191,10 +192,18 @@ bool BaseFileManager::registerPackages() { }
// Avoid registering all the language files
// TODO: Select based on the gameDesc.
- if (fileIt->getParent().getName() == "language") {
+ if (_language != Common::UNK_LANG && fileIt->getParent().getName() == "language") {
Common::String parentName = fileIt->getParent().getName();
Common::String dcpName = fileIt->getName();
- if (fileIt->getName() != "english.dcp") {
+ if (_language == Common::EN_ANY && fileIt->getName() != "english.dcp") {
+ continue;
+ } else if (_language == Common::CZ_CZE && fileIt->getName() != "czech.dcp") {
+ continue;
+ } else if (_language == Common::IT_ITA && fileIt->getName() != "italian.dcp") {
+ continue;
+ } else if (_language == Common::PL_POL && fileIt->getName() != "polish.dcp") {
+ continue;
+ } else if (_language == Common::RU_RUS && fileIt->getName() != "russian.dcp") {
continue;
}
}
diff --git a/engines/wintermute/base/base_file_manager.h b/engines/wintermute/base/base_file_manager.h index 91b1add1c8..5e18a95786 100644 --- a/engines/wintermute/base/base_file_manager.h +++ b/engines/wintermute/base/base_file_manager.h @@ -33,6 +33,7 @@ #include "common/str.h"
#include "common/fs.h"
#include "common/file.h"
+#include "common/language.h"
namespace Wintermute {
class BaseFileManager {
@@ -44,7 +45,7 @@ public: Common::SeekableReadStream *openFile(const Common::String &filename, bool absPathWarning = true, bool keepTrackOf = true);
byte *readWholeFile(const Common::String &filename, uint32 *size = NULL, bool mustExist = true);
- BaseFileManager();
+ BaseFileManager(Common::Language lang);
virtual ~BaseFileManager();
// Used only for detection
bool registerPackages(const Common::FSList &fslist);
@@ -65,6 +66,7 @@ private: bool registerPackage(Common::FSNode package, const Common::String &filename = "", bool searchSignature = false);
Common::SearchSet _packages;
Common::Array<Common::SeekableReadStream *> _openFiles;
+ Common::Language _language;
// This class is intentionally not a subclass of Base, as it needs to be used by
// the detector too, without launching the entire engine:
};
diff --git a/engines/wintermute/wintermute.cpp b/engines/wintermute/wintermute.cpp index 6008a92c26..9ada07293f 100644 --- a/engines/wintermute/wintermute.cpp +++ b/engines/wintermute/wintermute.cpp @@ -126,7 +126,7 @@ Common::Error WintermuteEngine::run() { } int WintermuteEngine::init() { - BaseEngine::createInstance(_targetName); + BaseEngine::createInstance(_targetName, _gameDescription->language); _game = new AdGame(_targetName); if (!_game) { return 1; @@ -296,7 +296,7 @@ bool WintermuteEngine::getGameInfo(const Common::FSList &fslist, Common::String caption = name = "(invalid)"; Common::SeekableReadStream *stream = NULL; // Quick-fix, instead of possibly breaking the persistence-system, let's just roll with it - BaseFileManager *fileMan = new BaseFileManager(); + BaseFileManager *fileMan = new BaseFileManager(Common::UNK_LANG); fileMan->registerPackages(fslist); stream = fileMan->openFile("startup.settings", false, false); |