[Scummvm-cvs-logs] SF.net SVN: scummvm: [30124] scummvm/trunk/engines/sword1

sev at users.sourceforge.net sev at users.sourceforge.net
Tue Jan 1 17:42:06 CET 2008


Revision: 30124
          http://scummvm.svn.sourceforge.net/scummvm/?rev=30124&view=rev
Author:   sev
Date:     2008-01-01 08:42:05 -0800 (Tue, 01 Jan 2008)

Log Message:
-----------
Patch #1733017: "SWORD1: Possible patch for bug #1730183"

Modified Paths:
--------------
    scummvm/trunk/engines/sword1/control.cpp
    scummvm/trunk/engines/sword1/sword1.cpp

Modified: scummvm/trunk/engines/sword1/control.cpp
===================================================================
--- scummvm/trunk/engines/sword1/control.cpp	2008-01-01 16:26:22 UTC (rev 30123)
+++ scummvm/trunk/engines/sword1/control.cpp	2008-01-01 16:42:05 UTC (rev 30124)
@@ -221,6 +221,14 @@
 	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 @@
 		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);

Modified: scummvm/trunk/engines/sword1/sword1.cpp
===================================================================
--- scummvm/trunk/engines/sword1/sword1.cpp	2008-01-01 16:26:22 UTC (rev 30123)
+++ scummvm/trunk/engines/sword1/sword1.cpp	2008-01-01 16:42:05 UTC (rev 30124)
@@ -241,17 +241,51 @@
 	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;
+	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);
+	}
 
-	_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 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;
 	_systemVars.controlPanelMode = CP_NEWGAME;


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