diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index cde7c3a4a0..3c94f5bd04 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -518,6 +518,7 @@ void PlayerMinus::Step( int col, RageTimer tm ) const float fNoteOffset = (fStepSeconds - fMusicSeconds) / GAMESTATE->m_SongOptions.m_fMusicRate; // account for music rate const float fSecondsFromPerfect = fabsf( fNoteOffset ); + float fScaledSecondsFromPerfect = fSecondsFromPerfect / PREFSMAN->m_fJudgeWindowScale; TapNote tn = GetTapNote(col,iIndexOverlappingNote); @@ -528,37 +529,45 @@ void PlayerMinus::Step( int col, RageTimer tm ) switch( GAMESTATE->m_PlayerController[m_PlayerNumber] ) { case PC_HUMAN: { - if(GAMESTATE->m_CurGame == GAME_EZ2) - { - /* 1 is normal. 2 means scoring is half as hard; .5 means it's twice as hard. */ - /* Ez2 is only perfect / good / miss */ - float fScaledSecondsFromPerfect = fSecondsFromPerfect / PREFSMAN->m_fJudgeWindowScale; - if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowMarvelousSeconds ) score = TNS_PERFECT; - else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowPerfectSeconds ) score = TNS_PERFECT; - else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGreatSeconds ) score = TNS_PERFECT; - else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGoodSeconds ) score = TNS_GOOD; - else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowBooSeconds ) score = TNS_MISS; - else score = TNS_NONE; - } - else - { - /* 1 is normal. 2 means scoring is half as hard; .5 means it's twice as hard. */ - float fScaledSecondsFromPerfect = fSecondsFromPerfect / PREFSMAN->m_fJudgeWindowScale; - if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowMarvelousSeconds ) score = TNS_MARVELOUS; - else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowPerfectSeconds ) score = TNS_PERFECT; - else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGreatSeconds ) score = TNS_GREAT; - else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGoodSeconds ) score = TNS_GOOD; - else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowBooSeconds ) score = TNS_BOO; - else score = TNS_NONE; - } - // Penalize for stepping on mines - if( tn == TAP_MINE && score > TNS_NONE ) - { - m_soundMineExplosion.Play(); - score = TNS_MISS; - m_pNoteField->TapMine( col, TNS_MISS ); - } + if( tn == TAP_MINE ) + { + // stepped too close to mine? + if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowMineSeconds ) + { + m_soundMineExplosion.Play(); + score = TNS_MISS; + m_pNoteField->TapMine( col, TNS_MISS ); + } + else + { + score = TNS_NONE; + } + } + else // not a mine + { + if(GAMESTATE->m_CurGame == GAME_EZ2) + { + /* 1 is normal. 2 means scoring is half as hard; .5 means it's twice as hard. */ + /* Ez2 is only perfect / good / miss */ + if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowMarvelousSeconds ) score = TNS_PERFECT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowPerfectSeconds ) score = TNS_PERFECT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGreatSeconds ) score = TNS_PERFECT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGoodSeconds ) score = TNS_GOOD; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowBooSeconds ) score = TNS_MISS; + else score = TNS_NONE; + } + else + { + /* 1 is normal. 2 means scoring is half as hard; .5 means it's twice as hard. */ + if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowMarvelousSeconds ) score = TNS_MARVELOUS; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowPerfectSeconds ) score = TNS_PERFECT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGreatSeconds ) score = TNS_GREAT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGoodSeconds ) score = TNS_GOOD; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowBooSeconds ) score = TNS_BOO; + else score = TNS_NONE; + } + } break; } case PC_CPU: diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index f7cf5260fa..7684ff5a13 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -64,6 +64,7 @@ PrefsManager::PrefsManager() m_fJudgeWindowGoodSeconds = 0.135f; m_fJudgeWindowBooSeconds = 0.180f; m_fJudgeWindowOKSeconds = 0.250f; // allow enough time to take foot off and put back on + m_fJudgeWindowMineSeconds = 0.135f; m_fLifeDifficultyScale = 1.0f; m_iRegenComboAfterFail = 10; // cumulative m_iRegenComboAfterMiss = 5; // cumulative @@ -229,6 +230,7 @@ void PrefsManager::ReadGlobalPrefsFromDisk() ini.GetValue( "Options", "JudgeWindowGoodSeconds", m_fJudgeWindowGoodSeconds ); ini.GetValue( "Options", "JudgeWindowBooSeconds", m_fJudgeWindowBooSeconds ); ini.GetValue( "Options", "JudgeWindowOKSeconds", m_fJudgeWindowOKSeconds ); + ini.GetValue( "Options", "JudgeWindowMineSeconds", m_fJudgeWindowMineSeconds ); ini.GetValue( "Options", "LifeDifficultyScale", m_fLifeDifficultyScale ); ini.GetValue( "Options", "RegenComboAfterFail", m_iRegenComboAfterFail ); ini.GetValue( "Options", "RegenComboAfterMiss", m_iRegenComboAfterMiss ); @@ -368,6 +370,7 @@ void PrefsManager::SaveGlobalPrefsToDisk() const ini.SetValue( "Options", "JudgeWindowGoodSeconds", m_fJudgeWindowGoodSeconds ); ini.SetValue( "Options", "JudgeWindowBooSeconds", m_fJudgeWindowBooSeconds ); ini.SetValue( "Options", "JudgeWindowOKSeconds", m_fJudgeWindowOKSeconds ); + ini.SetValue( "Options", "JudgeWindowMineSeconds", m_fJudgeWindowMineSeconds ); ini.SetValue( "Options", "LifeDifficultyScale", m_fLifeDifficultyScale ); ini.SetValue( "Options", "RegenComboAfterFail", m_iRegenComboAfterFail ); ini.SetValue( "Options", "RegenComboAfterMiss", m_iRegenComboAfterMiss ); diff --git a/stepmania/src/PrefsManager.h b/stepmania/src/PrefsManager.h index b9f8c5c486..1dbe861a52 100644 --- a/stepmania/src/PrefsManager.h +++ b/stepmania/src/PrefsManager.h @@ -56,6 +56,7 @@ public: float m_fJudgeWindowGoodSeconds; float m_fJudgeWindowBooSeconds; float m_fJudgeWindowOKSeconds; + float m_fJudgeWindowMineSeconds; int m_iRegenComboAfterFail; int m_iRegenComboAfterMiss; int m_iMaxRegenComboAfterFail;