diff --git a/stepmania/src/GameConstantsAndTypes.cpp b/stepmania/src/GameConstantsAndTypes.cpp index a6a82b65b6..f08114f7d1 100644 --- a/stepmania/src/GameConstantsAndTypes.cpp +++ b/stepmania/src/GameConstantsAndTypes.cpp @@ -126,6 +126,7 @@ StringToX( SortOrder ); static const CString TapNoteScoreNames[NUM_TAP_NOTE_SCORES] = { "None", "HitMine", + "AvoidMine", "Miss", "Boo", "Good", diff --git a/stepmania/src/GameConstantsAndTypes.h b/stepmania/src/GameConstantsAndTypes.h index 87dece5024..f2f1daa84f 100644 --- a/stepmania/src/GameConstantsAndTypes.h +++ b/stepmania/src/GameConstantsAndTypes.h @@ -128,13 +128,14 @@ inline bool IsSongSort( SortOrder so ) { return so >= SORT_PREFERRED && so <= SO enum TapNoteScore { TNS_NONE, TNS_HIT_MINE, + TNS_AVOIDED_MINE, TNS_MISS, TNS_BOO, TNS_GOOD, TNS_GREAT, TNS_PERFECT, TNS_MARVELOUS, - NUM_TAP_NOTE_SCORES + NUM_TAP_NOTE_SCORES, }; #define FOREACH_TapNoteScore( tns ) FOREACH_ENUM( TapNoteScore, NUM_TAP_NOTE_SCORES, tns ) const CString& TapNoteScoreToString( TapNoteScore tns ); diff --git a/stepmania/src/NoteDataWithScoring.cpp b/stepmania/src/NoteDataWithScoring.cpp index 40b2ce7d5b..6797af5e41 100644 --- a/stepmania/src/NoteDataWithScoring.cpp +++ b/stepmania/src/NoteDataWithScoring.cpp @@ -77,7 +77,7 @@ int GetSuccessfulMines( const NoteData &in, int iStartIndex = 0, int iEndIndex = for( int t=0; tiTotalError += MAX_PRO_TIMING_ERROR; + } m_NoteData.SetTapNote( t, r, tn ); - - if( m_pPlayerStageStats ) - m_pPlayerStageStats->iTotalError += MAX_PRO_TIMING_ERROR; } if( MissedNoteOnThisRow ) diff --git a/stepmania/src/PlayerStageStats.cpp b/stepmania/src/PlayerStageStats.cpp index dc8e719a1c..72863ae8f1 100644 --- a/stepmania/src/PlayerStageStats.cpp +++ b/stepmania/src/PlayerStageStats.cpp @@ -129,15 +129,16 @@ Grade PlayerStageStats::GetGrade() const int iTapScoreValue; switch( tns ) { - case TNS_NONE: iTapScoreValue = 0; break; - case TNS_HIT_MINE: iTapScoreValue = PREFSMAN->m_iGradeWeightHitMine; break; - case TNS_MISS: iTapScoreValue = PREFSMAN->m_iGradeWeightMiss; break; - case TNS_BOO: iTapScoreValue = PREFSMAN->m_iGradeWeightBoo; break; - case TNS_GOOD: iTapScoreValue = PREFSMAN->m_iGradeWeightGood; break; - case TNS_GREAT: iTapScoreValue = PREFSMAN->m_iGradeWeightGreat; break; - case TNS_PERFECT: iTapScoreValue = PREFSMAN->m_iGradeWeightPerfect; break; - case TNS_MARVELOUS: iTapScoreValue = PREFSMAN->m_iGradeWeightMarvelous; break; - default: FAIL_M( ssprintf("%i", tns) ); break; + case TNS_NONE: iTapScoreValue = 0; break; + case TNS_AVOIDED_MINE: iTapScoreValue = 0; break; + case TNS_HIT_MINE: iTapScoreValue = PREFSMAN->m_iGradeWeightHitMine; break; + case TNS_MISS: iTapScoreValue = PREFSMAN->m_iGradeWeightMiss; break; + case TNS_BOO: iTapScoreValue = PREFSMAN->m_iGradeWeightBoo; break; + case TNS_GOOD: iTapScoreValue = PREFSMAN->m_iGradeWeightGood; break; + case TNS_GREAT: iTapScoreValue = PREFSMAN->m_iGradeWeightGreat; break; + case TNS_PERFECT: iTapScoreValue = PREFSMAN->m_iGradeWeightPerfect; break; + case TNS_MARVELOUS: iTapScoreValue = PREFSMAN->m_iGradeWeightMarvelous; break; + default: FAIL_M( ssprintf("%i", tns) ); break; } Actual += iTapNoteScores[tns] * iTapScoreValue; if( tns != TNS_HIT_MINE ) diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index d59ac10d2c..698dec21ee 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -1435,19 +1435,27 @@ void ScreenGameplay::Update( float fDeltaTime ) { TapNoteScore tns = m_Player[p].GetLastTapNoteScore(); - ANIM_STATES_2D StateMap[NUM_TAP_NOTE_SCORES] = - { - AS2D_MISS, /* TNS_NONE (shouldn't happen) */ - AS2D_MISS, /* TNS_HIT_MINE (shouldn't happen) */ - AS2D_MISS, /* TNS_MISS */ - AS2D_MISS, /* TNS_BOO */ - AS2D_GOOD, /* TNS_GOOD */ - AS2D_GOOD, /* TNS_GREAT */ - AS2D_GREAT, /* TNS_PERFECT */ - AS2D_GREAT /* TNS_MARVELOUS */ - }; + ANIM_STATES_2D state = AS2D_MISS; + + switch( tns ) + { + case TNS_NONE: + case TNS_MISS: + case TNS_BOO: + state = AS2D_MISS; + break; + case TNS_GOOD: + case TNS_GREAT: + state = AS2D_GOOD; + break; + case TNS_PERFECT: + case TNS_MARVELOUS: + state = AS2D_GREAT; + break; + default: + ASSERT(0); + } - ANIM_STATES_2D state = StateMap[tns]; if( state == AS2D_GREAT && m_pLifeMeter[p] && m_pLifeMeter[p]->GetLife() == 1.0f ) // full life state = AS2D_FEVER;