[Scummvm-cvs-logs] SF.net SVN: scummvm:[55561] scummvm/trunk/engines/sci

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Thu Jan 27 11:49:11 CET 2011


Revision: 55561
          http://scummvm.svn.sourceforge.net/scummvm/?rev=55561&view=rev
Author:   thebluegr
Date:     2011-01-27 10:49:11 +0000 (Thu, 27 Jan 2011)

Log Message:
-----------
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.

Modified Paths:
--------------
    scummvm/trunk/engines/sci/sci.cpp
    scummvm/trunk/engines/sci/sci.h

Modified: scummvm/trunk/engines/sci/sci.cpp
===================================================================
--- scummvm/trunk/engines/sci/sci.cpp	2011-01-27 07:58:57 UTC (rev 55560)
+++ scummvm/trunk/engines/sci/sci.cpp	2011-01-27 10:49:11 UTC (rev 55561)
@@ -262,20 +262,9 @@
 	debug("Emulating SCI version %s\n", getSciVersionDesc(getSciVersion()));
 
 	// Patch in our save/restore code, so that dialogs are replaced
-	patchGameSaveRestore(segMan);
+	patchGameSaveRestore();
+	setLauncherLanguage();
 
-	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);
-		}
-	}
-
 	// Check whether loading a savestate was requested
 	int directSaveSlotLoading = ConfMan.getInt("save_slot");
 	if (directSaveSlotLoading >= 0) {
@@ -434,7 +423,8 @@
 	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 @@
 			_gamestate->_segMan->resetSegMan();
 			initGame();
 			initStackBaseWithSelector(SELECTOR(play));
-			patchGameSaveRestore(_gamestate->_segMan);
+			patchGameSaveRestore();
+			setLauncherLanguage();
 			_gamestate->gameIsRestarting = GAMEISRESTARTING_RESTART;
 			if (_gfxMenu)
 				_gfxMenu->reset();
@@ -689,7 +680,8 @@
 			_gamestate->abortScriptProcessing = kAbortNone;
 			_gamestate->_executionStack.clear();
 			initStackBaseWithSelector(SELECTOR(replay));
-			patchGameSaveRestore(_gamestate->_segMan);
+			patchGameSaveRestore();
+			setLauncherLanguage();
 			_gamestate->shrinkStackToBase();
 			_gamestate->abortScriptProcessing = kAbortNone;
 
@@ -798,6 +790,19 @@
 	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)

Modified: scummvm/trunk/engines/sci/sci.h
===================================================================
--- scummvm/trunk/engines/sci/sci.h	2011-01-27 07:58:57 UTC (rev 55560)
+++ scummvm/trunk/engines/sci/sci.h	2011-01-27 10:49:11 UTC (rev 55561)
@@ -268,7 +268,7 @@
 	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 @@
 	void initStackBaseWithSelector(Selector selector);
 
 	bool gameHasFanMadePatch();
+	void setLauncherLanguage();
 
 	const ADGameDescription *_gameDescription;
 	const SciGameId _gameId;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list