aboutsummaryrefslogtreecommitdiff
path: root/engines/wintermute
diff options
context:
space:
mode:
authorEinar Johan Trøan Sømåen2012-08-13 04:37:07 +0200
committerEinar Johan Trøan Sømåen2012-08-13 04:37:07 +0200
commit101ad689c5063e3eb91a2255ba154348069b14ad (patch)
treeb6398391ceccf8d5dbea4db2fb63f28dbb8b0451 /engines/wintermute
parenta3703506919a67173b3447115cdc85c0f1711ed6 (diff)
downloadscummvm-rg350-101ad689c5063e3eb91a2255ba154348069b14ad.tar.gz
scummvm-rg350-101ad689c5063e3eb91a2255ba154348069b14ad.tar.bz2
scummvm-rg350-101ad689c5063e3eb91a2255ba154348069b14ad.zip
WINTERMUTE: Add language-filtering for Czech, Italian, Polish and Russian.
No detection-support is added for those languages at this point though.
Diffstat (limited to 'engines/wintermute')
-rw-r--r--engines/wintermute/base/base_engine.cpp8
-rw-r--r--engines/wintermute/base/base_engine.h5
-rw-r--r--engines/wintermute/base/base_file_manager.cpp15
-rw-r--r--engines/wintermute/base/base_file_manager.h4
-rw-r--r--engines/wintermute/wintermute.cpp4
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);