aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine
diff options
context:
space:
mode:
authorMartin Kiewitz2010-07-19 13:50:06 +0000
committerMartin Kiewitz2010-07-19 13:50:06 +0000
commit2a0cff5c6ddc8409ef7daeead61b8e89479fe5a0 (patch)
treeca4db08bfe426fa6928b5ec8e243f62dd29f9112 /engines/sci/engine
parent8ea7eec267d925783e5762f54991e0d3879f7bd9 (diff)
downloadscummvm-rg350-2a0cff5c6ddc8409ef7daeead61b8e89479fe5a0.tar.gz
scummvm-rg350-2a0cff5c6ddc8409ef7daeead61b8e89479fe5a0.tar.bz2
scummvm-rg350-2a0cff5c6ddc8409ef7daeead61b8e89479fe5a0.zip
SCI: implement foreign vocabulary support
not fully working, extended chars do not work currently as input svn-id: r51027
Diffstat (limited to 'engines/sci/engine')
-rw-r--r--engines/sci/engine/kparse.cpp1
-rw-r--r--engines/sci/engine/state.cpp12
2 files changed, 13 insertions, 0 deletions
diff --git a/engines/sci/engine/kparse.cpp b/engines/sci/engine/kparse.cpp
index 4287e7c96b..8714981034 100644
--- a/engines/sci/engine/kparse.cpp
+++ b/engines/sci/engine/kparse.cpp
@@ -93,6 +93,7 @@ reg_t kParse(EngineState *s, int argc, reg_t *argv) {
char *error;
ResultWordList words;
reg_t event = argv[1];
+ g_sci->checkVocabularySwitch();
Vocabulary *voc = g_sci->getVocabulary();
voc->parser_event = event;
reg_t params[2] = { voc->parser_base, stringpos };
diff --git a/engines/sci/engine/state.cpp b/engines/sci/engine/state.cpp
index 36b03c0ad9..e07373b466 100644
--- a/engines/sci/engine/state.cpp
+++ b/engines/sci/engine/state.cpp
@@ -324,4 +324,16 @@ Common::String SciEngine::strSplit(const char *str, const char *sep) {
return retval;
}
+void SciEngine::checkVocabularySwitch() {
+ uint16 parserLanguage = 1;
+ if (SELECTOR(parseLang) != -1)
+ parserLanguage = readSelectorValue(_gamestate->_segMan, _gameObj, SELECTOR(parseLang));
+
+ if (parserLanguage != _vocabularyLanguage) {
+ delete _vocabulary;
+ _vocabulary = new Vocabulary(_resMan, parserLanguage > 1 ? true : false);
+ _vocabularyLanguage = parserLanguage;
+ }
+}
+
} // End of namespace Sci