From 78d5be779fc47b551c595242511235c7bfb36d2e Mon Sep 17 00:00:00 2001 From: Flameshadowxeroshin Date: Wed, 1 May 2013 22:11:27 -0500 Subject: [PATCH] Add metric [Gameplay] UseInternalScoring. Turn it off to prevent the game from touching custom scoring stuff. It is by default on. --- Themes/_fallback/metrics.ini | 1 + src/ScoreKeeperNormal.cpp | 133 ++++++++++++++++++----------------- src/ScoreKeeperNormal.h | 1 + 3 files changed, 71 insertions(+), 64 deletions(-) diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index 0502e26b1a..247ec13a85 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -572,6 +572,7 @@ MinScoreToMaintainCombo=ComboMaintain() MaxScoreToIncrementMissCombo='TapNoteScore_Miss' MineHitIncrementsMissCombo=false AvoidMineIncrementsCombo=false +UseInternalScoring=true # When you hit it, you know. ToastyTriggersAt=250 diff --git a/src/ScoreKeeperNormal.cpp b/src/ScoreKeeperNormal.cpp index 9c7748f091..2ff68dd11b 100644 --- a/src/ScoreKeeperNormal.cpp +++ b/src/ScoreKeeperNormal.cpp @@ -89,6 +89,7 @@ void ScoreKeeperNormal::Load( m_MaxScoreToIncrementMissCombo.Load( "Gameplay", "MaxScoreToIncrementMissCombo" ); m_MineHitIncrementsMissCombo.Load( "Gameplay", "MineHitIncrementsMissCombo" ); m_AvoidMineIncrementsCombo.Load( "Gameplay", "AvoidMineIncrementsCombo" ); + m_UseInternalScoring.Load( "Gameplay", "UseInternalScoring" ); // Toasty triggers (idea from 3.9+) // Multiple toasty support doesn't seem to be working right now. @@ -299,76 +300,80 @@ void ScoreKeeperNormal::HandleTapScoreNone() void ScoreKeeperNormal::AddScoreInternal( TapNoteScore score ) { - int &iScore = m_pPlayerStageStats->m_iScore; - int &iCurMaxScore = m_pPlayerStageStats->m_iCurMaxScore; - - // See Aaron In Japan for more details about the scoring formulas. - // Note: this assumes no custom scoring systems are in use. - int p = 0; // score multiplier - - switch( score ) + if( m_UseInternalScoring ) { - case TNS_W1: p = 10; break; - case TNS_W2: p = GAMESTATE->ShowW1()? 9:10; break; - case TNS_W3: p = 5; break; - default: p = 0; break; - } + + int &iScore = m_pPlayerStageStats->m_iScore; + int &iCurMaxScore = m_pPlayerStageStats->m_iCurMaxScore; - m_iTapNotesHit++; + // See Aaron In Japan for more details about the scoring formulas. + // Note: this assumes no custom scoring systems are in use. + int p = 0; // score multiplier - const int N = m_iNumTapsAndHolds; - const int sum = (N * (N + 1)) / 2; - const int Z = m_iMaxPossiblePoints/10; - - // Don't use a multiplier if the player has failed - if( m_pPlayerStageStats->m_bFailed ) - { - iScore += p; - // make score evenly divisible by 5 - // only update this on the next step, to make it less *obvious* - /* Round to the nearest 5, instead of always rounding down, so a base score - * of 9 will round to 10, not 5. */ - if (p > 0) - iScore = ((iScore+2) / 5) * 5; - } - else - { - iScore += GetScore(p, Z, sum, m_iTapNotesHit); - const int &iCurrentCombo = m_pPlayerStageStats->m_iCurCombo; - iScore += m_ComboBonusFactor[score] * iCurrentCombo; - } - - // Subtract the maximum this step could have been worth from the bonus. - m_iPointBonus -= GetScore(10, Z, sum, m_iTapNotesHit); - // And add the maximum this step could have been worth to the max score up to now. - iCurMaxScore += GetScore(10, Z, sum, m_iTapNotesHit); - - if ( m_iTapNotesHit == m_iNumTapsAndHolds && score >= TNS_W2 ) - { - if( !m_pPlayerStageStats->m_bFailed ) - iScore += m_iPointBonus; - if ( m_bIsLastSongInCourse ) + switch( score ) { - iScore += 100000000 - m_iMaxScoreSoFar; - iCurMaxScore += 100000000 - m_iMaxScoreSoFar; - - /* If we're in Endless mode, we'll come around here again, so reset - * the bonus counter. */ - m_iMaxScoreSoFar = 0; + case TNS_W1: p = 10; break; + case TNS_W2: p = GAMESTATE->ShowW1()? 9:10; break; + case TNS_W3: p = 5; break; + default: p = 0; break; } - iCurMaxScore += m_iPointBonus; + + m_iTapNotesHit++; + + const int N = m_iNumTapsAndHolds; + const int sum = (N * (N + 1)) / 2; + const int Z = m_iMaxPossiblePoints/10; + + // Don't use a multiplier if the player has failed + if( m_pPlayerStageStats->m_bFailed ) + { + iScore += p; + // make score evenly divisible by 5 + // only update this on the next step, to make it less *obvious* + /* Round to the nearest 5, instead of always rounding down, so a base score + * of 9 will round to 10, not 5. */ + if (p > 0) + iScore = ((iScore+2) / 5) * 5; + } + else + { + iScore += GetScore(p, Z, sum, m_iTapNotesHit); + const int &iCurrentCombo = m_pPlayerStageStats->m_iCurCombo; + iScore += m_ComboBonusFactor[score] * iCurrentCombo; + } + + // Subtract the maximum this step could have been worth from the bonus. + m_iPointBonus -= GetScore(10, Z, sum, m_iTapNotesHit); + // And add the maximum this step could have been worth to the max score up to now. + iCurMaxScore += GetScore(10, Z, sum, m_iTapNotesHit); + + if ( m_iTapNotesHit == m_iNumTapsAndHolds && score >= TNS_W2 ) + { + if( !m_pPlayerStageStats->m_bFailed ) + iScore += m_iPointBonus; + if ( m_bIsLastSongInCourse ) + { + iScore += 100000000 - m_iMaxScoreSoFar; + iCurMaxScore += 100000000 - m_iMaxScoreSoFar; + + /* If we're in Endless mode, we'll come around here again, so reset + * the bonus counter. */ + m_iMaxScoreSoFar = 0; + } + iCurMaxScore += m_iPointBonus; + } + + ASSERT_M( iScore >= 0, "iScore < 0 before re-rounding" ); + + // Undo rounding from the last tap, and re-round. + iScore += m_iScoreRemainder; + m_iScoreRemainder = (iScore % m_iRoundTo); + iScore = iScore - m_iScoreRemainder; + + ASSERT_M( iScore >= 0, "iScore < 0 after re-rounding" ); + + // LOG->Trace( "score: %i", iScore ); } - - ASSERT_M( iScore >= 0, "iScore < 0 before re-rounding" ); - - // Undo rounding from the last tap, and re-round. - iScore += m_iScoreRemainder; - m_iScoreRemainder = (iScore % m_iRoundTo); - iScore = iScore - m_iScoreRemainder; - - ASSERT_M( iScore >= 0, "iScore < 0 after re-rounding" ); - - // LOG->Trace( "score: %i", iScore ); } void ScoreKeeperNormal::HandleTapScore( const TapNote &tn ) diff --git a/src/ScoreKeeperNormal.h b/src/ScoreKeeperNormal.h index 20e8b78a42..59da85f0d1 100644 --- a/src/ScoreKeeperNormal.h +++ b/src/ScoreKeeperNormal.h @@ -40,6 +40,7 @@ class ScoreKeeperNormal: public ScoreKeeper ThemeMetric m_MaxScoreToIncrementMissCombo; ThemeMetric m_MineHitIncrementsMissCombo; ThemeMetric m_AvoidMineIncrementsCombo; + ThemeMetric m_UseInternalScoring; //ThemeMetric m_vToastyTriggers; ThemeMetric m_ToastyTrigger;