SCI: Improved multilanguage support for SCI1 and SCI1.1.

svn-id: r43217
This commit is contained in:
Walter van Niftrik 2009-08-10 18:37:47 +00:00
parent bd71d79e73
commit dd9e569325
7 changed files with 86 additions and 13 deletions

View file

@ -172,15 +172,62 @@ Common::String EngineState::getLanguageString(const char *str, kLanguage lang) c
return Common::String(str);
}
kLanguage EngineState::getLanguage() {
kLanguage lang = K_LANG_ENGLISH;
if (((SciEngine*)g_engine)->getKernel()->_selectorMap.printLang != -1) {
EngineState *s = this;
lang = (kLanguage)GET_SEL32V(s->game_obj, printLang);
if ((_version == SCI_VERSION_1_1) || (lang == K_LANG_NONE)) {
// If language is set to none, we use the language from the game detector.
// SSCI reads this from resource.cfg (early games do not have a language
// setting in resource.cfg, but instead have the secondary language number
// hardcoded in the game script).
// SCI1.1 games always use the language setting from the config file
// (essentially disabling runtime language switching).
// Note: only a limited number of multilanguage games have been tested
// so far, so this information may not be 100% accurate.
switch (((Sci::SciEngine*)g_engine)->getLanguage()) {
case Common::FR_FRA:
lang = K_LANG_FRENCH;
break;
case Common::ES_ESP:
lang = K_LANG_SPANISH;
break;
case Common::IT_ITA:
lang = K_LANG_ITALIAN;
break;
case Common::DE_DEU:
lang = K_LANG_GERMAN;
break;
case Common::JA_JPN:
lang = K_LANG_JAPANESE;
break;
case Common::PT_BRA:
lang = K_LANG_PORTUGUESE;
break;
default:
lang = K_LANG_ENGLISH;
}
// Store language in printLang selector
PUT_SEL32V(s->game_obj, printLang, lang);
}
}
return lang;
}
Common::String EngineState::strSplit(const char *str, const char *sep) {
EngineState *s = this;
kLanguage lang = (kLanguage)GET_SEL32V(s->game_obj, printLang);
kLanguage subLang = (kLanguage)GET_SEL32V(s->game_obj, subtitleLang);
kLanguage lang = getLanguage();
kLanguage subLang = K_LANG_NONE;
// Use English when no language settings are present in the game
if (lang == K_LANG_NONE)
lang = K_LANG_ENGLISH;
if (((SciEngine*)g_engine)->getKernel()->_selectorMap.subtitleLang != -1)
subLang = (kLanguage)GET_SEL32V(s->game_obj, subtitleLang);
Common::String retval = getLanguageString(str, lang);