diff options
| author | Eugene Sandulenko | 2008-01-01 16:42:05 +0000 | 
|---|---|---|
| committer | Eugene Sandulenko | 2008-01-01 16:42:05 +0000 | 
| commit | 23313cb82ee260c08826ea95d5c67636f9667c52 (patch) | |
| tree | 090290d8b7903e52c62f9c8a07c60ce6b10e7a2f | |
| parent | 308b02f4ca5d179aab3cedd8ad9bd97c0685be73 (diff) | |
| download | scummvm-rg350-23313cb82ee260c08826ea95d5c67636f9667c52.tar.gz scummvm-rg350-23313cb82ee260c08826ea95d5c67636f9667c52.tar.bz2 scummvm-rg350-23313cb82ee260c08826ea95d5c67636f9667c52.zip  | |
Patch #1733017: "SWORD1: Possible patch for bug #1730183"
svn-id: r30124
| -rw-r--r-- | engines/sword1/control.cpp | 27 | ||||
| -rw-r--r-- | engines/sword1/sword1.cpp | 54 | 
2 files changed, 71 insertions, 10 deletions
diff --git a/engines/sword1/control.cpp b/engines/sword1/control.cpp index 0ac32162b0..c2c6befbfd 100644 --- a/engines/sword1/control.cpp +++ b/engines/sword1/control.cpp @@ -221,6 +221,14 @@ void Control::askForCd(void) {  	free(_screenBuf);  } +static int volToBalance(int volL, int volR) { +	if (volL + volR == 0) { +		return 50; +	} else { +		return (100 * volL / (volL + volR)); +	} +} +  uint8 Control::runPanel(void) {  	_mouseDown = false;  	_restoreBuf = NULL; @@ -310,6 +318,25 @@ uint8 Control::runPanel(void) {  		delay(1000 / 12);  		newMode = getClicks(mode, &retVal);  	} while ((newMode != BUTTON_DONE) && (retVal == 0) && (!SwordEngine::_systemVars.engineQuit)); + +	if (SwordEngine::_systemVars.controlPanelMode == CP_NORMAL) { +		uint8 volL, volR; +		_music->giveVolume(&volL, &volR); +		ConfMan.setInt("music_volume", (int)((volR + volL) / 2)); +		ConfMan.setInt("music_balance", volToBalance(volL, volR)); + +		_sound->giveSpeechVol(&volL, &volR); +		ConfMan.setInt("speech_volume", (int)((volR + volL) / 2)); +		ConfMan.setInt("speech_balance", volToBalance(volL, volR)); + +		_sound->giveSfxVol(&volL, &volR); +		ConfMan.setInt("sfx_volume", (int)((volR + volL) / 2)); +		ConfMan.setInt("sfx_balance", volToBalance(volL, volR)); + +		ConfMan.setBool("subtitles", SwordEngine::_systemVars.showText == 1); +		ConfMan.flushToDisk(); +	} +  	destroyButtons();  	_resMan->resClose(fontId);  	_resMan->resClose(redFontId); diff --git a/engines/sword1/sword1.cpp b/engines/sword1/sword1.cpp index 04328c0571..5af045e0f3 100644 --- a/engines/sword1/sword1.cpp +++ b/engines/sword1/sword1.cpp @@ -241,16 +241,50 @@ int SwordEngine::init() {  	uint musicVol = ConfMan.getInt("music_volume");  	uint speechVol = ConfMan.getInt("speech_volume");  	uint sfxVol = ConfMan.getInt("sfx_volume"); -	if (musicVol > 255) -		musicVol = 255; -	if (speechVol > 255) -		speechVol = 255; -	if (sfxVol > 255) -		sfxVol = 255; - -	_music->setVolume(musicVol, musicVol);      // these routines expect left and right volume, -	_sound->setSpeechVol(speechVol, speechVol); // but our config manager doesn't support it. -	_sound->setSfxVol(sfxVol, sfxVol); +	uint musicBal = 50; +	if (ConfMan.hasKey("music_balance")) { +		musicBal = CLIP(ConfMan.getInt("music_balance"), 0, 100); +	} +	uint speechBal = 50; +	if (ConfMan.hasKey("speech_balance")) { +		speechBal = CLIP(ConfMan.getInt("speech_balance"), 0, 100); +	} +	uint sfxBal = 50; +	if (ConfMan.hasKey("sfx_balance")) { +		sfxBal = CLIP(ConfMan.getInt("sfx_balance"), 0, 100); +	} + +	uint musicVolL = 2 * musicVol * musicBal / 100; +	uint musicVolR = 2 * musicVol - musicVolL; + +	uint speechVolL = 2 * speechVol * speechBal / 100; +	uint speechVolR = 2 * speechVol - speechVolL; + +	uint sfxVolL = 2 * sfxVol * sfxBal / 100; +	uint sfxVolR = 2 * sfxVol - sfxVolL; + +	if (musicVolR > 255) { +		musicVolR = 255; +	} +	if (musicVolL > 255) { +		musicVolL = 255; +	} +	if (speechVolR > 255) { +		speechVolR = 255; +	} +	if (speechVolL > 255) { +		speechVolL = 255; +	} +	if (sfxVolR > 255) { +		sfxVolR = 255; +	} +	if (sfxVolL > 255) { +		sfxVolL = 255; +	} + +	_music->setVolume(musicVolL, musicVolR); +	_sound->setSpeechVol(speechVolL, speechVolR); +	_sound->setSfxVol(sfxVolL, sfxVolR);  	_systemVars.justRestoredGame = 0;  	_systemVars.currentCD = 0;  | 
