diff --git a/gameSource/LivingLifePage.cpp b/gameSource/LivingLifePage.cpp index f4ca62de5..8d3ccbcfa 100644 --- a/gameSource/LivingLifePage.cpp +++ b/gameSource/LivingLifePage.cpp @@ -5776,7 +5776,7 @@ void LivingLifePage::handleAnimSound( int inObjectID, double inAge, - playSound( u, + playCryingSound( u, getVectorFromCamera( inPosX, inPosY ) ); } @@ -11464,8 +11464,9 @@ void LivingLifePage::draw( doublePair inViewCenter, // make sure it can be heard, even // if paused setSoundLoudness( 1.0 ); + float hungerLoudness = SettingsManager::getFloatSetting( "HungerLoudness", 1.0 ); playSoundSprite( mHungerSound, - getSoundEffectsLoudness(), + getSoundEffectsLoudness() * hungerLoudness, // middle 0.5 ); } @@ -22770,8 +22771,9 @@ void LivingLifePage::step() { // make sure it can be heard // even if paused setSoundLoudness( 1.0 ); + float hungerLoudness = SettingsManager::getFloatSetting( "HungerLoudness", 1.0 ); playSoundSprite( mHungerSound, - getSoundEffectsLoudness(), + getSoundEffectsLoudness() * hungerLoudness, // middle 0.5 ); } diff --git a/gameSource/SettingsPage.cpp b/gameSource/SettingsPage.cpp index e4c54350e..1b93d8890 100644 --- a/gameSource/SettingsPage.cpp +++ b/gameSource/SettingsPage.cpp @@ -109,6 +109,12 @@ SettingsPage::SettingsPage() mTrippingEffectDisabledBox( 0, 168, 4 ), // Sound + mCryingLoudnessSlider( mainFont, 0, 40, 4, 200, 30, + 0.0, 1.0, + "CRYING LOUDNESS", true ), + mHungerLoudnessSlider( mainFont, 0, 40, 4, 200, 30, + 0.0, 1.0, + "HUNGER LOUDNESS", true ), mMusicLoudnessSlider( mainFont, 0, 40, 4, 200, 30, 0.0, 1.0, translate( "musicLoudness" ), true ), @@ -189,6 +195,10 @@ SettingsPage::SettingsPage() mSoundEffectsLoudnessSlider.addActionListener( this ); addComponent( &mMusicLoudnessSlider ); mMusicLoudnessSlider.addActionListener( this ); + addComponent( &mCryingLoudnessSlider ); + mCryingLoudnessSlider.addActionListener( this ); + addComponent( &mHungerLoudnessSlider ); + mHungerLoudnessSlider.addActionListener( this ); // Screen addComponent( &mTrippingEffectDisabledBox ); @@ -766,6 +776,36 @@ void SettingsPage::actionPerformed( GUIComponent *inTarget ) { setMusicLoudness( mMusicLoudnessSlider.getValue(), true ); } } + else if( inTarget == &mCryingLoudnessSlider ) { + setMusicLoudness( 0 ); + mMusicStartTime = 0; + + if( ! mCryingLoudnessSlider.isPointerDown() ) { + float cryingLoudness = mCryingLoudnessSlider.getValue(); + + setCryingLoudness( cryingLoudness ); + + SoundSpriteHandle mCryingSound = loadSoundSprite( "otherSounds", "cryingTest.aiff" ); + playSoundSprite( mCryingSound, + getSoundEffectsLoudness() * cryingLoudness, + 0.5 ); + } + } + else if( inTarget == &mHungerLoudnessSlider ) { + setMusicLoudness( 0 ); + mMusicStartTime = 0; + + if( ! mHungerLoudnessSlider.isPointerDown() ) { + float hungerLoudness = mHungerLoudnessSlider.getValue(); + + SettingsManager::setSetting( "HungerLoudness", hungerLoudness ); + + SoundSpriteHandle mHungerSound = loadSoundSprite( "otherSounds", "hunger.aiff" ); + playSoundSprite( mHungerSound, + getSoundEffectsLoudness() * hungerLoudness, + 0.5 ); + } + } else if( inTarget == &mCopyButton ) { char *address = mCustomServerAddressField.getText(); @@ -1350,6 +1390,8 @@ void SettingsPage::makeActive( char inFresh ) { mMusicLoudnessSlider.setValue( musicLoudness ); mSoundEffectsLoudnessSlider.setValue( getSoundEffectsLoudness() ); + mCryingLoudnessSlider.setValue( getCryingLoudness() ); + mHungerLoudnessSlider.setValue( SettingsManager::getFloatSetting( "HungerLoudness", 1.0 ) ); setMusicLoudness( 0 ); mMusicStartTime = 0; @@ -1420,8 +1462,10 @@ void SettingsPage::updatePage() { mCursorModeSet->setPosition( 0, 0 ); mCursorScaleSlider.setPosition( -80, -lineSpacing * 3 ); - mMusicLoudnessSlider.setPosition( 0, lineSpacing / 2 ); - mSoundEffectsLoudnessSlider.setPosition( 0, - lineSpacing / 2 ); + mMusicLoudnessSlider.setPosition( 0, lineSpacing * 2 ); + mSoundEffectsLoudnessSlider.setPosition( 0, lineSpacing ); + mCryingLoudnessSlider.setPosition( 0, - lineSpacing ); + mHungerLoudnessSlider.setPosition( 0, - lineSpacing * 2 ); mTargetFrameRateField.setPosition( 5, lineSpacing ); mVsyncBox.setPosition( 0, 0 ); @@ -1476,6 +1520,8 @@ void SettingsPage::updatePage() { mMusicLoudnessSlider.setVisible( mPage == 3 ); mSoundEffectsLoudnessSlider.setVisible( mPage == 3 ); + mCryingLoudnessSlider.setVisible( mPage == 3 ); + mHungerLoudnessSlider.setVisible( mPage == 3 ); #ifdef USE_DISCORD mEnableDiscordRichPresence.setVisible(mPage == 4); diff --git a/gameSource/SettingsPage.h b/gameSource/SettingsPage.h index de0ca9986..741a2d5c2 100644 --- a/gameSource/SettingsPage.h +++ b/gameSource/SettingsPage.h @@ -107,6 +107,8 @@ class SettingsPage : public GamePage, public ActionListener { // Sound ValueSlider mMusicLoudnessSlider; ValueSlider mSoundEffectsLoudnessSlider; + ValueSlider mCryingLoudnessSlider; + ValueSlider mHungerLoudnessSlider; #ifdef USE_DISCORD // Discord diff --git a/gameSource/otherSounds/cryingTest.aiff b/gameSource/otherSounds/cryingTest.aiff new file mode 100644 index 000000000..0ee69e27a Binary files /dev/null and b/gameSource/otherSounds/cryingTest.aiff differ diff --git a/gameSource/settings/cryingLoudness.ini b/gameSource/settings/cryingLoudness.ini new file mode 100644 index 000000000..d3827e75a --- /dev/null +++ b/gameSource/settings/cryingLoudness.ini @@ -0,0 +1 @@ +1.0 diff --git a/gameSource/settings/hungerLoudness.ini b/gameSource/settings/hungerLoudness.ini new file mode 100644 index 000000000..d3827e75a --- /dev/null +++ b/gameSource/settings/hungerLoudness.ini @@ -0,0 +1 @@ +1.0 diff --git a/gameSource/soundBank.cpp b/gameSource/soundBank.cpp index c1036f656..31f7c5c6e 100644 --- a/gameSource/soundBank.cpp +++ b/gameSource/soundBank.cpp @@ -109,6 +109,19 @@ int getMaxSoundID() { } +static double cryingLoudness = 1.0; + +void setCryingLoudness( double inLoudness ) { + cryingLoudness = inLoudness; + + SettingsManager::setSetting( "cryingLoudness", + (float)cryingLoudness ); + } + +double getCryingLoudness() { + return cryingLoudness; + } + static int16_t *readAIFFFile( File *inFile, int *outNumSamples ) { int numBytes; @@ -374,6 +387,9 @@ int initSoundBankStart( char *outRebuildingCache ) { soundEffectsLoudness = SettingsManager::getFloatSetting( "soundEffectsLoudness", 1.0 ); + + cryingLoudness = + SettingsManager::getFloatSetting( "cryingLoudness", 1.0 ); soundEffectsOff = SettingsManager::getIntSetting( "soundEffectsOff", 0 ); @@ -1134,6 +1150,18 @@ void playSound( SoundUsage inUsage, } +void playCryingSound( SoundUsage inUsage, + doublePair inVectorFromCameraToSoundSource ) { + //set new soundEffectsLoudness temporarily to soften sound of baby cries + double tempSoundEffectsLoudness = soundEffectsLoudness; + soundEffectsLoudness *= cryingLoudness; + + playSound( inUsage, inVectorFromCameraToSoundSource ); + + soundEffectsLoudness = tempSoundEffectsLoudness; //revert changes + } + + void playSound( SoundSpriteHandle inSoundSprite, double inVolumeTweak, diff --git a/gameSource/soundBank.h b/gameSource/soundBank.h index 314a7f068..1c46e80c8 100644 --- a/gameSource/soundBank.h +++ b/gameSource/soundBank.h @@ -70,6 +70,11 @@ void setSoundEffectsLoudness( double inLoudness ); double getSoundEffectsLoudness(); +// defaults to 1.0 +void setCryingLoudness( double inLoudness ); + +double getCryingLoudness(); + // defaults to on void setSoundEffectsOff( char inOff ); @@ -96,6 +101,9 @@ void playSound( SoundUsage inUsage, void playSound( SoundUsage inUsage, doublePair inVectorFromCameraToSoundSource ); +void playCryingSound( SoundUsage inUsage, + doublePair inVectorFromCameraToSoundSource ); + // leverage stereo positioning code on a raw sound sprite // still offer a volume tweak on top of stereo positioning