diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index 324648586c..017c5f5872 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -15,6 +15,11 @@ OverlayScreens=ScreenSystemLayer,ScreenSyncOverlay,ScreenDebugOverlay EditMode=2 MaxCourseEntriesBeforeShowVarious=6 +[Gameplay] +ComboIsPerRow=GAMESTATE:GetPlayMode() == PLAY_MODE_REGULAR +MinScoreToContinueCombo=%function() if GAMESTATE:GetPlayMode() == PLAY_MODE_ONI then return TNS_PERFECT else return TNS_GREAT end end +MinScoreToMaintainCombo=TNS_GREAT + [Screen] InitCommand= AllowOperatorMenuButton=1 diff --git a/stepmania/src/ScoreKeeperMAX2.cpp b/stepmania/src/ScoreKeeperMAX2.cpp index 6e02ba4f18..c81bfd5ad9 100644 --- a/stepmania/src/ScoreKeeperMAX2.cpp +++ b/stepmania/src/ScoreKeeperMAX2.cpp @@ -33,6 +33,11 @@ void ScoreKeeperMAX2::Load( ASSERT( apSongs.size() == apSteps.size() ); ASSERT( apSongs.size() == asModifiers.size() ); + /* True if a jump is one to combo, false if combo is purely based on tap count. */ + m_bComboIsPerRow = THEME->GetMetricB( "Gameplay", "ComboIsPerRow" ); + m_MinScoreToContinueCombo = (TapNoteScore) THEME->GetMetricI( "Gameplay", "MinScoreToContinueCombo" ); + m_MinScoreToMaintainCombo = (TapNoteScore) THEME->GetMetricI( "Gameplay", "MinScoreToMaintainCombo" ); + // // Fill in STATSMAN->m_CurStageStats, calculate multiplier // @@ -357,32 +362,11 @@ void ScoreKeeperMAX2::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTa // // Regular combo // - -/* - Your combo counter only increased with a "Marvelous/Perfect", and double Marvelous/Perfect steps (left and right, etc.) - only add 1 to your combo instead of 2. The combo counter thus becomes a "Marvelous/Perfect" counter. -*/ - /* True if a jump is one to combo, false if combo is purely based on tap count. */ - bool ComboIsPerRow = true; - switch( PREFSMAN->m_ScoringType ) - { - case PrefsManager::SCORING_MAX2: - ComboIsPerRow = (GAMESTATE->m_PlayMode == PLAY_MODE_ONI); - break; - case PrefsManager::SCORING_5TH: - ComboIsPerRow = true; - break; - default: - ASSERT(0); - } - const int ComboCountIfHit = ComboIsPerRow? 1: iNumTapsInRow; - TapNoteScore MinScoreToContinueCombo = GAMESTATE->m_PlayMode == PLAY_MODE_ONI? TNS_PERFECT:TNS_GREAT; - TapNoteScore MinScoreToMaintainCombo = TNS_GREAT; - - if( scoreOfLastTap >= MinScoreToContinueCombo ) - m_pPlayerStageStats->iCurCombo += ComboCountIfHit; + const int iComboCountIfHit = m_bComboIsPerRow? 1: iNumTapsInRow; + if( scoreOfLastTap >= m_MinScoreToContinueCombo ) + m_pPlayerStageStats->iCurCombo += iComboCountIfHit; else - if( scoreOfLastTap < MinScoreToMaintainCombo ) + if( scoreOfLastTap < m_MinScoreToMaintainCombo ) m_pPlayerStageStats->iCurCombo = 0; AddScore( scoreOfLastTap ); // only score once per row diff --git a/stepmania/src/ScoreKeeperMAX2.h b/stepmania/src/ScoreKeeperMAX2.h index 34ea3be4b3..db050dd50f 100644 --- a/stepmania/src/ScoreKeeperMAX2.h +++ b/stepmania/src/ScoreKeeperMAX2.h @@ -22,6 +22,10 @@ class ScoreKeeperMAX2: public ScoreKeeper bool m_bIsLastSongInCourse; bool m_bIsBeginner; + bool m_bComboIsPerRow; + TapNoteScore m_MinScoreToContinueCombo; + TapNoteScore m_MinScoreToMaintainCombo; + vector m_apSteps; void AddScore( TapNoteScore score );