diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index 84fe905085..73f1271901 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -109,6 +109,8 @@ PrefsManager::PrefsManager() #endif m_bTenFooterInRed = true; + m_sCustomSpeedMod = "C300"; + // set to 0 so people aren't shocked at first m_iProgressiveLifebar = 0; m_iProgressiveNonstopLifebar = 0; @@ -276,6 +278,9 @@ void PrefsManager::ReadGlobalPrefsFromDisk( bool bSwitchToLastPlayedGame ) ini.GetValueB( "Options", "ShowLogWindow", m_bShowLogWindow ); ini.GetValueB( "Options", "ShowBeginnerHelper", m_bShowBeginnerHelper ); ini.GetValue ( "Options", "Language", m_sLanguage ); + + ini.GetValue ( "Options", "CustomSpeedMod", m_sCustomSpeedMod ); + for( int p=0; pm_sCustomSpeedMod ) + && (po.m_fScrollBPM == ConvertModToNumber( PREFSMAN->m_sCustomSpeedMod) + || po.m_fScrollSpeed == ConvertModToNumber( PREFSMAN->m_sCustomSpeedMod ) ) ) + m_iSelectedOption[p][PO_SPEED] = 10; else m_iSelectedOption[p][PO_SPEED] = 3; m_iSelectedOption[p][PO_ACCEL] = po.GetFirstAccel()+1; @@ -260,6 +267,12 @@ void ScreenPlayerOptions::ImportOptions() } } + // initialize custom speed mod text + if (PREFSMAN->m_sCustomSpeedMod != "") + m_OptionRow[PO_SPEED].choices[10] = PREFSMAN->m_sCustomSpeedMod; + else + m_OptionRow[PO_SPEED].choices.pop_back(); + /* Default: */ m_iSelectedOption[p][PO_PERSPECTIVE] = 1; if(po.m_fPerspectiveTilt == -1) @@ -309,7 +322,22 @@ void ScreenPlayerOptions::ExportOptions() case 7: po.m_bTimeSpacing = false; po.m_fScrollSpeed = 5.0f; break; case 8: po.m_bTimeSpacing = false; po.m_fScrollSpeed = 8.0f; break; case 9: po.m_bTimeSpacing = true; po.m_fScrollSpeed = 1.0f; po.m_fScrollBPM = 200; break; - case 10:po.m_bTimeSpacing = true; po.m_fScrollSpeed = 1.0f; po.m_fScrollBPM = 300; break; + +// case 10:po.m_bTimeSpacing = true; po.m_fScrollSpeed = 1.0f; po.m_fScrollBPM = 300; break; + case 10: + po.m_bTimeSpacing = IsModTimeSpacing( PREFSMAN->m_sCustomSpeedMod ); + + if (po.m_bTimeSpacing) + { + po.m_fScrollSpeed = 1.0f; + po.m_fScrollBPM = ConvertModToNumber( PREFSMAN->m_sCustomSpeedMod ); + } + else + { + po.m_fScrollSpeed = ConvertModToNumber( PREFSMAN->m_sCustomSpeedMod ); + po.m_fScrollBPM = ConvertModToNumber( PREFSMAN->m_sCustomSpeedMod ); + } + break; default: ASSERT(0); } @@ -497,3 +525,25 @@ CString ScreenPlayerOptions::ConvertParamToThemeDifficulty( const CString &in ) default: return in; // something else } } + +float ScreenPlayerOptions::ConvertModToNumber(CString value) +{ + if (IsModTimeSpacing(value)) + { + return atof(value.c_str() + 1 ); + } + else + { + return atof(value.c_str() ); + } +} + +bool ScreenPlayerOptions::IsModTimeSpacing(CString value) +{ + ASSERT( value.GetLength() ); + + if (value[0] == 'C') + return true; + + return false; +} \ No newline at end of file diff --git a/stepmania/src/ScreenPlayerOptions.h b/stepmania/src/ScreenPlayerOptions.h index 4a10ccfc1c..d66dc9bb5f 100644 --- a/stepmania/src/ScreenPlayerOptions.h +++ b/stepmania/src/ScreenPlayerOptions.h @@ -34,6 +34,9 @@ private: CString ConvertParamToThemeDifficulty( const CString &in ) const; + float ConvertModToNumber( CString value ); + bool IsModTimeSpacing( CString value ); + bool m_bAcceptedChoices; bool m_bGoToOptions; Sprite m_sprOptionsMessage;