diff --git a/stepmania/src/PlayerStageStats.cpp b/stepmania/src/PlayerStageStats.cpp index f11ac79e0d..e0048f34b6 100644 --- a/stepmania/src/PlayerStageStats.cpp +++ b/stepmania/src/PlayerStageStats.cpp @@ -147,6 +147,8 @@ Grade PlayerStageStats::GetGrade() const case TNS_MARVELOUS: iTapScoreValue = PREFSMAN->m_iGradeWeightMarvelous; break; default: FAIL_M( ssprintf("%i", tns) ); break; } + if( PREFSMAN->m_bMercifulBeginner ) + iTapScoreValue = max( 0, iTapScoreValue ); fActual += iTapNoteScores[tns] * iTapScoreValue; } diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index a9c012aae1..3de4b0156b 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -139,7 +139,8 @@ PrefsManager::PrefsManager() : m_bMinimum1FullSongInCourses ( Options, "Minimum1FullSongInCourses", false ), // FEoS for 1st song, FailImmediate thereafter m_bFailOffInBeginner ( Options, "FailOffInBeginner", false ), m_bFailOffForFirstStageEasy ( Options, "FailOffForFirstStageEasy", false ), - + m_bMercifulBeginner ( Options, "MercifulBeginner", false ), + m_iPercentScoreWeightMarvelous ( Options, "PercentScoreWeightMarvelous", 3 ), m_iPercentScoreWeightPerfect ( Options, "PercentScoreWeightPerfect", 2 ), m_iPercentScoreWeightGreat ( Options, "PercentScoreWeightGreat", 1 ), diff --git a/stepmania/src/PrefsManager.h b/stepmania/src/PrefsManager.h index df7244ac2e..76c280ceb5 100644 --- a/stepmania/src/PrefsManager.h +++ b/stepmania/src/PrefsManager.h @@ -99,6 +99,7 @@ public: Preference m_bMinimum1FullSongInCourses; // FEoS for 1st song, FailImmediate thereafter Preference m_bFailOffInBeginner; Preference m_bFailOffForFirstStageEasy; + Preference m_bMercifulBeginner; // don't subtract from percent score or grade DP // percent score (the number that is shown on the screen and saved to memory card) Preference m_iPercentScoreWeightMarvelous; diff --git a/stepmania/src/ScoreKeeperMAX2.cpp b/stepmania/src/ScoreKeeperMAX2.cpp index e215d0a0d0..f63c19c7b4 100644 --- a/stepmania/src/ScoreKeeperMAX2.cpp +++ b/stepmania/src/ScoreKeeperMAX2.cpp @@ -216,8 +216,6 @@ void ScoreKeeperMAX2::AddScore( TapNoteScore score ) int &iScore = m_pPlayerStageStats->iScore; int &iCurMaxScore = m_pPlayerStageStats->iCurMaxScore; /* - http://www.aaroninjapan.com/ddr2.html - Regular scoring: Let p = score multiplier (Perfect = 10, Great = 5, other = 0) @@ -353,10 +351,6 @@ void ScoreKeeperMAX2::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTa // /* - http://www.aaroninjapan.com/ddr2.html - - Note on ONI Mode scoring - 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. */ @@ -483,30 +477,24 @@ int ScoreKeeperMAX2::TapNoteScoreToDancePoints( TapNoteScore tns ) if( !GAMESTATE->ShowMarvelous() && tns == TNS_MARVELOUS ) tns = TNS_PERFECT; -/* - http://www.aaroninjapan.com/ddr2.html - - Note on ONI Mode scoring - - The total number of Dance Points is calculated with Marvelous steps being worth 3 points, Perfects getting - 2 points, OKs getting 3 points, Greats getting 1 point, and everything else is worth 0 points. (Note: The - -*/ - /* This is used for Oni percentage displays. Grading values are currently in * StageStats::GetGrade. */ + int iWeight = 0; switch( tns ) { - case TNS_NONE: return 0; - case TNS_HIT_MINE: return PREFSMAN->m_iPercentScoreWeightHitMine; - case TNS_MISS: return PREFSMAN->m_iPercentScoreWeightMiss; - case TNS_BOO: return PREFSMAN->m_iPercentScoreWeightBoo; - case TNS_GOOD: return PREFSMAN->m_iPercentScoreWeightGood; - case TNS_GREAT: return PREFSMAN->m_iPercentScoreWeightGreat; - case TNS_PERFECT: return PREFSMAN->m_iPercentScoreWeightPerfect; - case TNS_MARVELOUS: return PREFSMAN->m_iPercentScoreWeightMarvelous; + case TNS_NONE: iWeight = 0; + case TNS_HIT_MINE: iWeight = PREFSMAN->m_iPercentScoreWeightHitMine; break; + case TNS_MISS: iWeight = PREFSMAN->m_iPercentScoreWeightMiss; break; + case TNS_BOO: iWeight = PREFSMAN->m_iPercentScoreWeightBoo; break; + case TNS_GOOD: iWeight = PREFSMAN->m_iPercentScoreWeightGood; break; + case TNS_GREAT: iWeight = PREFSMAN->m_iPercentScoreWeightGreat; break; + case TNS_PERFECT: iWeight = PREFSMAN->m_iPercentScoreWeightPerfect; break; + case TNS_MARVELOUS: iWeight = PREFSMAN->m_iPercentScoreWeightMarvelous; break; default: FAIL_M( ssprintf("%i", tns) ); } + if( PREFSMAN->m_bMercifulBeginner ) + iWeight = max( 0, iWeight ); + return iWeight; } int ScoreKeeperMAX2::HoldNoteScoreToDancePoints( HoldNoteScore hns )