diff options
Diffstat (limited to 'engines/sci/sci.cpp')
| -rw-r--r-- | engines/sci/sci.cpp | 69 | 
1 files changed, 56 insertions, 13 deletions
diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp index c1aadc3622..f32e0e16f9 100644 --- a/engines/sci/sci.cpp +++ b/engines/sci/sci.cpp @@ -38,6 +38,7 @@  #include "sci/engine/state.h"  #include "sci/engine/kernel.h"  #include "sci/engine/script.h"	// for script_adjust_opcode_formats +#include "sci/engine/script_patches.h"  #include "sci/engine/selector.h"	// for SELECTOR  #include "sci/sound/audio.h" @@ -112,6 +113,7 @@ SciEngine::SciEngine(OSystem *syst, const ADGameDescription *desc, SciGameId gam  	DebugMan.addDebugChannel(kDebugLevelDclInflate, "DCL", "DCL inflate debugging");  	DebugMan.addDebugChannel(kDebugLevelVM, "VM", "VM debugging");  	DebugMan.addDebugChannel(kDebugLevelScripts, "Scripts", "Notifies when scripts are unloaded"); +	DebugMan.addDebugChannel(kDebugLevelScriptPatcher, "ScriptPatcher", "Notifies when scripts are patched");  	DebugMan.addDebugChannel(kDebugLevelGC, "GC", "Garbage Collector debugging");  	DebugMan.addDebugChannel(kDebugLevelResMan, "ResMan", "Resource manager debugging");  	DebugMan.addDebugChannel(kDebugLevelOnStartup, "OnStartup", "Enter debugger at start of game"); @@ -135,7 +137,7 @@ SciEngine::SciEngine(OSystem *syst, const ADGameDescription *desc, SciGameId gam  	SearchMan.addSubDirectoryMatching(gameDataDir, "duk");	// Duck movie files in Phantasmagoria 2  	SearchMan.addSubDirectoryMatching(gameDataDir, "Robot Folder"); // Mac robot files  	SearchMan.addSubDirectoryMatching(gameDataDir, "Sound Folder"); // Mac audio files -	SearchMan.addSubDirectoryMatching(gameDataDir, "Voices Folder"); // Mac audio36 files +	SearchMan.addSubDirectoryMatching(gameDataDir, "Voices Folder", 0, 2, true); // Mac audio36 files (recursive for Torin)  	SearchMan.addSubDirectoryMatching(gameDataDir, "Voices"); // Mac audio36 files  	SearchMan.addSubDirectoryMatching(gameDataDir, "VMD Folder"); // Mac VMD files @@ -183,6 +185,7 @@ SciEngine::~SciEngine() {  	delete[] _opcode_formats; +	delete _scriptPatcher;  	delete _resMan;	// should be deleted last  	g_sci = 0;  } @@ -216,14 +219,16 @@ Common::Error SciEngine::run() {  	// Add the after market GM patches for the specified game, if they exist  	_resMan->addNewGMPatch(_gameId);  	_gameObjectAddress = _resMan->findGameObject(); - -	SegManager *segMan = new SegManager(_resMan); +	 +	_scriptPatcher = new ScriptPatcher(); +	SegManager *segMan = new SegManager(_resMan, _scriptPatcher);  	// Initialize the game screen  	_gfxScreen = new GfxScreen(_resMan);  	_gfxScreen->enableUndithering(ConfMan.getBool("disable_dithering"));  	_kernel = new Kernel(_resMan, segMan); +	_kernel->init();  	_features = new GameFeatures(segMan, _kernel);  	// Only SCI0, SCI01 and SCI1 EGA games used a parser @@ -881,8 +886,18 @@ void SciEngine::syncSoundSettings() {  	}  } +// used by Script Patcher. Used to find out, if Laura Bow 2/King's Quest 6 need patching for Speech+Subtitles - or not +bool SciEngine::speechAndSubtitlesEnabled() { +	bool subtitlesOn = ConfMan.getBool("subtitles"); +	bool speechOn = !ConfMan.getBool("speech_mute"); +	 +	if (isCD() && subtitlesOn && speechOn) +		return true; +	return false; +} +  void SciEngine::syncIngameAudioOptions() { -	// Now, sync the in-game speech/subtitles settings for SCI1.1 CD games +	// Sync the in-game speech/subtitles settings for SCI1.1 CD games  	if (isCD() && getSciVersion() == SCI_VERSION_1_1) {  		bool subtitlesOn = ConfMan.getBool("subtitles");  		bool speechOn = !ConfMan.getBool("speech_mute"); @@ -893,16 +908,16 @@ void SciEngine::syncIngameAudioOptions() {  			_gamestate->variables[VAR_GLOBAL][90] = make_reg(0, 2);	// speech  		} else if (subtitlesOn && speechOn) {  			// Is it a game that supports simultaneous speech and subtitles? -			if (getGameId() == GID_SQ4 -				|| getGameId() == GID_FREDDYPHARKAS -				|| getGameId() == GID_ECOQUEST -				|| getGameId() == GID_LSL6 -				// TODO: The following need script patches for simultaneous speech and subtitles -				//|| getGameId() == GID_KQ6 -				//|| getGameId() == GID_LAURABOW2 -				) { +			switch (_gameId) { +			case GID_SQ4: +			case GID_FREDDYPHARKAS: +			case GID_ECOQUEST: +			case GID_LSL6: +			case GID_LAURABOW2: +			case GID_KQ6:  				_gamestate->variables[VAR_GLOBAL][90] = make_reg(0, 3);	// speech + subtitles -			} else { +				break; +			default:  				// Game does not support speech and subtitles, set it to speech  				_gamestate->variables[VAR_GLOBAL][90] = make_reg(0, 2);	// speech  			} @@ -910,6 +925,34 @@ void SciEngine::syncIngameAudioOptions() {  	}  } +void SciEngine::updateScummVMAudioOptions() { +	// Update ScummVM's speech/subtitles settings for SCI1.1 CD games, +	// depending on the in-game settings +	if (isCD() && getSciVersion() == SCI_VERSION_1_1) { +		uint16 ingameSetting = _gamestate->variables[VAR_GLOBAL][90].getOffset(); +		 +		switch (ingameSetting) { +		case 1: +			// subtitles +			ConfMan.setBool("subtitles", true); +			ConfMan.setBool("speech_mute", true); +			break; +		case 2: +			// speech +			ConfMan.setBool("subtitles", false); +			ConfMan.setBool("speech_mute", false); +			break; +		case 3: +			// speech + subtitles +			ConfMan.setBool("subtitles", true); +			ConfMan.setBool("speech_mute", false); +			break; +		default: +			break; +		} +	} +} +  void SciEngine::loadMacExecutable() {  	if (getPlatform() != Common::kPlatformMacintosh || getSciVersion() < SCI_VERSION_1_EARLY || getSciVersion() > SCI_VERSION_1_1)  		return;  | 
