aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2011-01-27 10:49:11 +0000
committerFilippos Karapetis2011-01-27 10:49:11 +0000
commita6e9fe69c368464cf57487b4f79f10a51e9622aa (patch)
treef91612ab93c35e2cee7e33a71cbf940444ffa357
parent73a440cfe250e3a06c46e832eaf76b7f668b91e2 (diff)
downloadscummvm-rg350-a6e9fe69c368464cf57487b4f79f10a51e9622aa.tar.gz
scummvm-rg350-a6e9fe69c368464cf57487b4f79f10a51e9622aa.tar.bz2
scummvm-rg350-a6e9fe69c368464cf57487b4f79f10a51e9622aa.zip
SCI: Set the printLang and parseLang selectors again when restarting, if necessary.
This sets the language again correctly to the language selected in the launcher when restarting multilingual games. svn-id: r55561
-rw-r--r--engines/sci/sci.cpp37
-rw-r--r--engines/sci/sci.h3
2 files changed, 23 insertions, 17 deletions
diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp
index 92b4fc4e68..2552e7bf43 100644
--- a/engines/sci/sci.cpp
+++ b/engines/sci/sci.cpp
@@ -262,19 +262,8 @@ Common::Error SciEngine::run() {
debug("Emulating SCI version %s\n", getSciVersionDesc(getSciVersion()));
// Patch in our save/restore code, so that dialogs are replaced
- patchGameSaveRestore(segMan);
-
- if (_gameDescription->flags & ADGF_ADDENGLISH) {
- // if game is multilingual
- Common::Language selectedLanguage = Common::parseLanguage(ConfMan.get("language"));
- if (selectedLanguage == Common::EN_ANY) {
- // and english was selected as language
- if (SELECTOR(printLang) != -1) // set text language to english
- writeSelectorValue(segMan, _gameObjectAddress, SELECTOR(printLang), 1);
- if (SELECTOR(parseLang) != -1) // and set parser language to english as well
- writeSelectorValue(segMan, _gameObjectAddress, SELECTOR(parseLang), 1);
- }
- }
+ patchGameSaveRestore();
+ setLauncherLanguage();
// Check whether loading a savestate was requested
int directSaveSlotLoading = ConfMan.getInt("save_slot");
@@ -434,7 +423,8 @@ static byte patchGameRestoreSave[] = {
0x48, // ret
};
-void SciEngine::patchGameSaveRestore(SegManager *segMan) {
+void SciEngine::patchGameSaveRestore() {
+ SegManager *segMan = _gamestate->_segMan;
const Object *gameObject = segMan->getObject(_gameObjectAddress);
const uint16 gameMethodCount = gameObject->getMethodCount();
const Object *gameSuperObject = segMan->getObject(_gameSuperClassAddress);
@@ -680,7 +670,8 @@ void SciEngine::runGame() {
_gamestate->_segMan->resetSegMan();
initGame();
initStackBaseWithSelector(SELECTOR(play));
- patchGameSaveRestore(_gamestate->_segMan);
+ patchGameSaveRestore();
+ setLauncherLanguage();
_gamestate->gameIsRestarting = GAMEISRESTARTING_RESTART;
if (_gfxMenu)
_gfxMenu->reset();
@@ -689,7 +680,8 @@ void SciEngine::runGame() {
_gamestate->abortScriptProcessing = kAbortNone;
_gamestate->_executionStack.clear();
initStackBaseWithSelector(SELECTOR(replay));
- patchGameSaveRestore(_gamestate->_segMan);
+ patchGameSaveRestore();
+ setLauncherLanguage();
_gamestate->shrinkStackToBase();
_gamestate->abortScriptProcessing = kAbortNone;
@@ -798,6 +790,19 @@ int SciEngine::inQfGImportRoom() const {
return 0;
}
+void SciEngine::setLauncherLanguage() {
+ if (_gameDescription->flags & ADGF_ADDENGLISH) {
+ // If game is multilingual
+ if (Common::parseLanguage(ConfMan.get("language")) == Common::EN_ANY) {
+ // and English was selected as language
+ if (SELECTOR(printLang) != -1) // set text language to English
+ writeSelectorValue(_gamestate->_segMan, _gameObjectAddress, SELECTOR(printLang), K_LANG_ENGLISH);
+ if (SELECTOR(parseLang) != -1) // and set parser language to English as well
+ writeSelectorValue(_gamestate->_segMan, _gameObjectAddress, SELECTOR(parseLang), K_LANG_ENGLISH);
+ }
+ }
+}
+
void SciEngine::pauseEngineIntern(bool pause) {
_mixer->pauseAll(pause);
if (_soundCmd)
diff --git a/engines/sci/sci.h b/engines/sci/sci.h
index 1120154e8c..86e54fec03 100644
--- a/engines/sci/sci.h
+++ b/engines/sci/sci.h
@@ -268,7 +268,7 @@ public:
bool checkExportBreakpoint(uint16 script, uint16 pubfunct);
bool checkSelectorBreakpoint(BreakpointType breakpointType, reg_t send_obj, int selector);
- void patchGameSaveRestore(SegManager *segMan);
+ void patchGameSaveRestore();
public:
@@ -352,6 +352,7 @@ private:
void initStackBaseWithSelector(Selector selector);
bool gameHasFanMadePatch();
+ void setLauncherLanguage();
const ADGameDescription *_gameDescription;
const SciGameId _gameId;