diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini
index 95c20260a9..e062167212 100644
--- a/stepmania/Themes/default/metrics.ini
+++ b/stepmania/Themes/default/metrics.ini
@@ -16,12 +16,11 @@ ColorP2=1.0,0.5,0.2,1 // orange
InitialScreen=ScreenCompany
[Notes]
-
DefaultScrollDirection=0
[ScreenTitleMenu]
ChoicesX=320
-ChoicesStartY=104
+ChoicesStartY=92
ChoicesSpacingY=48
ChoicesShadowLength=5
HelpX=320
diff --git a/stepmania/src/ScreenSoundOptions.cpp b/stepmania/src/ScreenSoundOptions.cpp
index 845a3431ec..8b2e5fd1d1 100644
--- a/stepmania/src/ScreenSoundOptions.cpp
+++ b/stepmania/src/ScreenSoundOptions.cpp
@@ -29,7 +29,7 @@ enum {
NUM_SOUND_OPTIONS_LINES
};
OptionRowData g_SoundOptionsLines[NUM_SOUND_OPTIONS_LINES] = {
- { "Master\nVolume", 10, {"0","1","2","3","4","5","6","7","8","9"} },
+ { "Master\nVolume", 6, {"MUTE","20%","40%","60%","80%","100%"} },
};
ScreenSoundOptions::ScreenSoundOptions() :
@@ -62,24 +62,15 @@ void ScreenSoundOptions::Input( const DeviceInput& DeviceI, const InputEventType
void ScreenSoundOptions::ImportOptions()
{
- m_iSelectedOption[0][SO_MASTER_VOLUME] = PREFSMAN->m_fSoundVolume;
+ float fVolPercent = PREFSMAN->m_fSoundVolume;
+ m_iSelectedOption[0][SO_MASTER_VOLUME] = (int)(fVolPercent*5);
}
void ScreenSoundOptions::ExportOptions()
{
- switch( m_iSelectedOption[0][SO_MASTER_VOLUME] )
- {
- case 0:SOUNDMAN->SetPrefs(0.10000f);PREFSMAN->m_fSoundVolume = 0.10000f;break;
- case 1:SOUNDMAN->SetPrefs(0.20000f);PREFSMAN->m_fSoundVolume = 0.20000f;break;
- case 2:SOUNDMAN->SetPrefs(0.30000f);PREFSMAN->m_fSoundVolume = 0.30000f;break;
- case 3:SOUNDMAN->SetPrefs(0.40000f);PREFSMAN->m_fSoundVolume = 0.40000f;break;
- case 4:SOUNDMAN->SetPrefs(0.50000f);PREFSMAN->m_fSoundVolume = 0.50000f;break;
- case 5:SOUNDMAN->SetPrefs(0.60000f);PREFSMAN->m_fSoundVolume = 0.60000f;break;
- case 6:SOUNDMAN->SetPrefs(0.70000f);PREFSMAN->m_fSoundVolume = 0.70000f;break;
- case 7:SOUNDMAN->SetPrefs(0.80000f);PREFSMAN->m_fSoundVolume = 0.80000f;break;
- case 8:SOUNDMAN->SetPrefs(0.90000f);PREFSMAN->m_fSoundVolume = 0.90000f;break;
- case 9:SOUNDMAN->SetPrefs(1.00000f);PREFSMAN->m_fSoundVolume = 1.00000f;break;
- }
+ float fVolPercent = m_iSelectedOption[0][SO_MASTER_VOLUME] / 5.f;
+ SOUNDMAN->SetPrefs(fVolPercent);
+ PREFSMAN->m_fSoundVolume = fVolPercent;
}
void ScreenSoundOptions::GoToPrevState()
diff --git a/stepmania/src/Song.cpp b/stepmania/src/Song.cpp
index ff07791995..4060b71b35 100644
--- a/stepmania/src/Song.cpp
+++ b/stepmania/src/Song.cpp
@@ -41,7 +41,9 @@
#include "SDL_image.h"
-const int FILE_CACHE_VERSION = 109; // increment this when Song or Notes changes to invalidate cache
+const int FILE_CACHE_VERSION = 111; // increment this when Song or Notes changes to invalidate cache
+
+const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f;
static int CompareBPMSegments(const BPMSegment &seg1, const BPMSegment &seg2)
@@ -83,7 +85,7 @@ Song::Song()
m_bChangedSinceSave = false;
m_fBeat0OffsetInSeconds = 0;
m_fMusicSampleStartSeconds = 0;
- m_fMusicSampleLengthSeconds = 12.0f; // start fading out at m_fMusicSampleLengthSeconds-1 seconds
+ m_fMusicSampleLengthSeconds = DEFAULT_MUSIC_SAMPLE_LENGTH;
m_iMusicBytes = 0;
m_fMusicLengthSeconds = 0;
m_fFirstBeat = -1;
@@ -447,13 +449,21 @@ void Song::TidyUpData()
// We're going to try and do something intelligent here...
// The MusicSampleStart always seems to be about 100-120 beats into
// the song regardless of BPM. Let's take a shot-in-the dark guess.
- if( m_fMusicSampleStartSeconds == 0 )
+ if( m_fMusicSampleStartSeconds == 0 || m_fMusicSampleStartSeconds+m_fMusicSampleLengthSeconds > this->m_fMusicLengthSeconds )
+ {
m_fMusicSampleStartSeconds = this->GetElapsedTimeFromBeat( 100 );
+ if( m_fMusicSampleStartSeconds+m_fMusicSampleLengthSeconds > this->m_fMusicLengthSeconds )
+ {
+ int iBeat = (int)(m_fLastBeat/2);
+ iBeat = iBeat - iBeat%10;
+ m_fMusicSampleStartSeconds = this->GetElapsedTimeFromBeat( (float)iBeat ); // fix for BAG and other slow songs
+ }
+ }
/* Some DWIs have lengths in ms when they meant seconds, eg. #SAMPLELENGTH:10;.
* If the sample length is way too short, change it. */
- if( m_fMusicSampleLengthSeconds < 3 )
- m_fMusicSampleLengthSeconds = 10;
+ if( m_fMusicSampleLengthSeconds < 3 || m_fMusicSampleLengthSeconds > 30 )
+ m_fMusicSampleLengthSeconds = DEFAULT_MUSIC_SAMPLE_LENGTH;
//
// Here's the problem: We have a directory full of images. We want to determine which
diff --git a/stepmania/src/StepMania.vcproj b/stepmania/src/StepMania.vcproj
index ebf3b45f4b..b25ffd00fc 100644
--- a/stepmania/src/StepMania.vcproj
+++ b/stepmania/src/StepMania.vcproj
@@ -429,6 +429,12 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
+
+
+
+
diff --git a/stepmania/src/arch/Sound/DSoundHelpers.cpp b/stepmania/src/arch/Sound/DSoundHelpers.cpp
index 081e3f2fd5..d6d11b9628 100644
--- a/stepmania/src/arch/Sound/DSoundHelpers.cpp
+++ b/stepmania/src/arch/Sound/DSoundHelpers.cpp
@@ -126,7 +126,9 @@ void DSoundBuf::SetVolume(float vol)
{
ASSERT(vol >= 0);
ASSERT(vol <= 1);
-
+
+ if( vol == 0 )
+ vol = 0.001f; // fix log10f(0) == -INF
float vl2 = log10f(vol) / log10f(2); /* vol log 2 */
/* Volume is a multiplier; SetVolume wants attenuation in thousands of a