From c8fc9ddeae8e7eba5f2c37c118a7791a31706572 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Tue, 20 Jan 2004 07:09:44 +0000 Subject: [PATCH] options name cleanup, fixes --- stepmania/src/CombinedLifeMeterTug.cpp | 18 +- stepmania/src/Grade.cpp | 35 ++- stepmania/src/Grade.h | 5 +- stepmania/src/LifeMeterBar.cpp | 26 +- stepmania/src/Player.cpp | 48 ++-- stepmania/src/PrefsManager.cpp | 325 +++++++++++++------------ stepmania/src/PrefsManager.h | 122 +++++----- stepmania/src/ScoreKeeperMAX2.cpp | 18 +- stepmania/src/ScoreKeeperRave.cpp | 16 +- stepmania/src/ScreenEvaluation.cpp | 10 +- stepmania/src/StageStats.cpp | 63 ++--- 11 files changed, 348 insertions(+), 338 deletions(-) diff --git a/stepmania/src/CombinedLifeMeterTug.cpp b/stepmania/src/CombinedLifeMeterTug.cpp index b07693cfb7..6d1a5b03ac 100644 --- a/stepmania/src/CombinedLifeMeterTug.cpp +++ b/stepmania/src/CombinedLifeMeterTug.cpp @@ -68,12 +68,12 @@ void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, TapNoteScore score ) float fPercentToMove = 0; switch( score ) { - case TNS_MARVELOUS: fPercentToMove = PREFSMAN->m_fTugMeterMarvelousPercentChange; break; - case TNS_PERFECT: fPercentToMove = PREFSMAN->m_fTugMeterPerfectPercentChange; break; - case TNS_GREAT: fPercentToMove = PREFSMAN->m_fTugMeterGreatPercentChange; break; - case TNS_GOOD: fPercentToMove = PREFSMAN->m_fTugMeterGoodPercentChange; break; - case TNS_BOO: fPercentToMove = PREFSMAN->m_fTugMeterBooPercentChange; break; - case TNS_MISS: fPercentToMove = PREFSMAN->m_fTugMeterMissPercentChange; break; + case TNS_MARVELOUS: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeMarvelous; break; + case TNS_PERFECT: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangePerfect; break; + case TNS_GREAT: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeGreat; break; + case TNS_GOOD: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeGood; break; + case TNS_BOO: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeBoo; break; + case TNS_MISS: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeMiss; break; default: ASSERT(0); break; } @@ -90,8 +90,8 @@ void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, HoldNoteScore score, Tap float fPercentToMove = 0; switch( score ) { - case HNS_OK: fPercentToMove = PREFSMAN->m_fTugMeterOKPercentChange; break; - case HNS_NG: fPercentToMove = PREFSMAN->m_fTugMeterNGPercentChange; break; + case HNS_OK: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeOK; break; + case HNS_NG: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeNG; break; default: ASSERT(0); break; } @@ -100,7 +100,7 @@ void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, HoldNoteScore score, Tap void CombinedLifeMeterTug::ChangeLifeMine( PlayerNumber pn ) { - float fPercentToMove = PREFSMAN->m_fTugMeterHitMinePercentChange; + float fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeHitMine; ChangeLife( pn, fPercentToMove ); } diff --git a/stepmania/src/Grade.cpp b/stepmania/src/Grade.cpp index f94be74ac6..9919d08932 100644 --- a/stepmania/src/Grade.cpp +++ b/stepmania/src/Grade.cpp @@ -21,7 +21,25 @@ CString GradeToString( Grade g ) case GRADE_NO_DATA: return "NoData"; case GRADE_FAILED: return "Failed"; default: - return ssprintf("%02d",g); + return ssprintf("%02d",g+1); + } +}; + +CString GradeToOldString( Grade g ) +{ + // string is meant to be human readable + switch( g ) + { + case GRADE_TIER_1: return "AAAA"; + case GRADE_TIER_2: return "AAA"; + case GRADE_TIER_3: return "AA"; + case GRADE_TIER_4: return "A"; + case GRADE_TIER_5: return "B"; + case GRADE_TIER_6: return "C"; + case GRADE_TIER_7: return "D"; + case GRADE_FAILED: return "E"; + case GRADE_NO_DATA: return "N"; + default: return "N"; } }; @@ -30,7 +48,7 @@ Grade StringToGrade( const CString &sGrade ) CString s = sGrade; s.MakeUpper(); - // letters for backward compatibility + // for backward compatibility if ( s == "AAAA" ) return GRADE_TIER_1; else if( s == "AAA" ) return GRADE_TIER_2; else if( s == "AA" ) return GRADE_TIER_3; @@ -39,16 +57,17 @@ Grade StringToGrade( const CString &sGrade ) else if( s == "C" ) return GRADE_TIER_6; else if( s == "D" ) return GRADE_TIER_7; else if( s == "E" ) return GRADE_FAILED; - else if( s == "FAILED" ) return GRADE_FAILED; + else if( s == "N" ) return GRADE_NO_DATA; + + + // new style + if ( s == "FAILED" ) return GRADE_FAILED; else if( s == "NODATA" ) return GRADE_NO_DATA; #define MY_IS_DIGIT( c ) (c>='0'&&c<='9') - // If the string is a two digit number... - if( s.length()==2 && MY_IS_DIGIT(s[0]) && MY_IS_DIGIT(s[1]) ) - { - return (Grade)atoi(s); - } + if( s.length()==2 && MY_IS_DIGIT(s[0]) && MY_IS_DIGIT(s[1]) ) // if it's a two digit number... + return (Grade)(atoi(s)-1); ASSERT(0); return GRADE_NO_DATA; diff --git a/stepmania/src/Grade.h b/stepmania/src/Grade.h index a02e39704f..df458a65f6 100644 --- a/stepmania/src/Grade.h +++ b/stepmania/src/Grade.h @@ -16,7 +16,6 @@ #define NUM_GRADE_TIERS 20 enum Grade { - GRADE_NO_DATA=0, GRADE_TIER_1, // = AAAA GRADE_TIER_2, // = AAA GRADE_TIER_3, // = AA @@ -38,10 +37,12 @@ enum Grade GRADE_TIER_19, GRADE_TIER_20, GRADE_FAILED, // = E - NUM_GRADES + NUM_GRADES, + GRADE_NO_DATA, // ~GRADE_INVALID }; CString GradeToString( Grade g ); +CString GradeToOldString( Grade g ); // "AAA", "B", etc for backward compatibility Grade StringToGrade( const CString &s ); #endif diff --git a/stepmania/src/LifeMeterBar.cpp b/stepmania/src/LifeMeterBar.cpp index f762da2283..a8d58859ab 100644 --- a/stepmania/src/LifeMeterBar.cpp +++ b/stepmania/src/LifeMeterBar.cpp @@ -287,12 +287,12 @@ void LifeMeterBar::ChangeLife( TapNoteScore score ) case SongOptions::DRAIN_NORMAL: switch( score ) { - case TNS_MARVELOUS: fDeltaLife = PREFSMAN->m_fLifeDeltaMarvelousPercentChange; break; - case TNS_PERFECT: fDeltaLife = PREFSMAN->m_fLifeDeltaPerfectPercentChange; break; - case TNS_GREAT: fDeltaLife = PREFSMAN->m_fLifeDeltaGreatPercentChange; break; - case TNS_GOOD: fDeltaLife = PREFSMAN->m_fLifeDeltaGoodPercentChange; break; - case TNS_BOO: fDeltaLife = PREFSMAN->m_fLifeDeltaBooPercentChange; break; - case TNS_MISS: fDeltaLife = PREFSMAN->m_fLifeDeltaMissPercentChange; break; + case TNS_MARVELOUS: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeMarvelous; break; + case TNS_PERFECT: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangePerfect; break; + case TNS_GREAT: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeGreat; break; + case TNS_GOOD: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeGood; break; + case TNS_BOO: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeBoo; break; + case TNS_MISS: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeMiss; break; default: ASSERT(0); } @@ -306,8 +306,8 @@ void LifeMeterBar::ChangeLife( TapNoteScore score ) case TNS_PERFECT: fDeltaLife = +0.000f; break; case TNS_GREAT: fDeltaLife = +0.000f; break; case TNS_GOOD: fDeltaLife = +0.000f; break; - case TNS_BOO: fDeltaLife = PREFSMAN->m_fLifeDeltaBooPercentChange; break; - case TNS_MISS: fDeltaLife = PREFSMAN->m_fLifeDeltaMissPercentChange; break; + case TNS_BOO: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeBoo; break; + case TNS_MISS: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeMiss; break; default: ASSERT(0); } @@ -345,8 +345,8 @@ void LifeMeterBar::ChangeLife( HoldNoteScore score, TapNoteScore tscore ) case SongOptions::DRAIN_NORMAL: switch( score ) { - case HNS_OK: fDeltaLife = PREFSMAN->m_fLifeDeltaOKPercentChange; break; - case HNS_NG: fDeltaLife = PREFSMAN->m_fLifeDeltaNGPercentChange; break; + case HNS_OK: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeOK; break; + case HNS_NG: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeNG; break; default: ASSERT(0); } @@ -357,7 +357,7 @@ void LifeMeterBar::ChangeLife( HoldNoteScore score, TapNoteScore tscore ) switch( score ) { case HNS_OK: fDeltaLife = +0.000f; break; - case HNS_NG: fDeltaLife = PREFSMAN->m_fLifeDeltaNGPercentChange; break; + case HNS_NG: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeNG; break; default: ASSERT(0); } @@ -445,12 +445,12 @@ void LifeMeterBar::ChangeLifeMine() switch( GAMESTATE->m_SongOptions.m_DrainType ) { case SongOptions::DRAIN_NORMAL: - fDeltaLife = PREFSMAN->m_fLifeDeltaHitMinePercentChange; + fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeHitMine; if( IsHot() ) fDeltaLife = -0.10f; // make it take a while to get back to "doing great" break; case SongOptions::DRAIN_NO_RECOVER: - fDeltaLife = PREFSMAN->m_fLifeDeltaHitMinePercentChange; + fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeHitMine; break; case SongOptions::DRAIN_SUDDEN_DEATH: fDeltaLife = -1.0; diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index ede0b70cd2..c3f65a2c0e 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -344,7 +344,7 @@ void PlayerMinus::Update( float fDeltaTime ) // if( fSongBeat-hn.fStartBeat > GAMESTATE->m_fCurBPS * GetMaxStepDistanceSeconds() ) // { // Decrease life - fLife -= fDeltaTime/PREFSMAN->m_fJudgeWindowOKSeconds; + fLife -= fDeltaTime/PREFSMAN->m_fJudgeWindowSecondsOK; fLife = max( fLife, 0 ); // clamp // } } @@ -624,22 +624,22 @@ void PlayerMinus::Step( int col, RageTimer tm ) /* 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; + if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsMarvelous ) score = TNS_PERFECT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsPerfect ) score = TNS_PERFECT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGreat ) score = TNS_PERFECT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGood ) score = TNS_GOOD; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsBoo ) score = TNS_MISS; else score = TNS_NONE; } else if(GAMESTATE->m_CurGame == GAME_PNM) { /* PNM Goods = Great / Boo = Miss */ 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_GREAT; - else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowBooSeconds ) score = TNS_MISS; + if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsMarvelous ) score = TNS_MARVELOUS; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsPerfect ) score = TNS_PERFECT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGreat ) score = TNS_GREAT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGood ) score = TNS_GREAT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsBoo ) score = TNS_MISS; else score = TNS_NONE; } @@ -648,7 +648,7 @@ void PlayerMinus::Step( int col, RageTimer tm ) { case TAP_MINE: // stepped too close to mine? - if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowMineSeconds ) + if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsMine ) { m_soundMine.Play(); score = TNS_HIT_MINE; @@ -666,7 +666,7 @@ void PlayerMinus::Step( int col, RageTimer tm ) if( IsTapAttack(tn) ) { score = TNS_NONE; // don't score this as anything - if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowAttackSeconds ) + if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsAttack ) { m_soundAttackLaunch.Play(); // put attack in effect @@ -692,21 +692,21 @@ void PlayerMinus::Step( int col, RageTimer tm ) { /* 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; + if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsMarvelous ) score = TNS_PERFECT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsPerfect ) score = TNS_PERFECT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGreat ) score = TNS_PERFECT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGood ) score = TNS_GOOD; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsBoo ) 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; + if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsMarvelous ) score = TNS_MARVELOUS; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsPerfect ) score = TNS_PERFECT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGreat ) score = TNS_GREAT; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGood ) score = TNS_GOOD; + else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsBoo ) score = TNS_BOO; else score = TNS_NONE; } } @@ -1219,7 +1219,7 @@ void PlayerMinus::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tapScor float PlayerMinus::GetMaxStepDistanceSeconds() { - return GAMESTATE->m_SongOptions.m_fMusicRate * PREFSMAN->m_fJudgeWindowBooSeconds * PREFSMAN->m_fJudgeWindowScale; + return GAMESTATE->m_SongOptions.m_fMusicRate * PREFSMAN->m_fJudgeWindowSecondsBoo * PREFSMAN->m_fJudgeWindowScale; } void PlayerMinus::FadeToFail() diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index b95a34f7b4..e1f1fb6a61 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -62,33 +62,33 @@ PrefsManager::PrefsManager() m_bAutoPlay = false; m_fJudgeWindowScale = 1.0f; m_fLifeDifficultyScale = 1.0f; - m_fJudgeWindowMarvelousSeconds = 0.0225f; - m_fJudgeWindowPerfectSeconds = 0.045f; - m_fJudgeWindowGreatSeconds = 0.090f; - 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.090f; // same as great - m_fJudgeWindowAttackSeconds = 0.135f; - m_fLifeDeltaMarvelousPercentChange = +0.008f; - m_fLifeDeltaPerfectPercentChange = +0.008f; - m_fLifeDeltaGreatPercentChange = +0.004f; - m_fLifeDeltaGoodPercentChange = +0.000f; - m_fLifeDeltaBooPercentChange = -0.040f; - m_fLifeDeltaMissPercentChange = -0.080f; - m_fLifeDeltaHitMinePercentChange = -0.160f; - m_fLifeDeltaOKPercentChange = +0.008f; - m_fLifeDeltaNGPercentChange = -0.080f; + m_fJudgeWindowSecondsMarvelous = 0.0225f; + m_fJudgeWindowSecondsPerfect = 0.045f; + m_fJudgeWindowSecondsGreat = 0.090f; + m_fJudgeWindowSecondsGood = 0.135f; + m_fJudgeWindowSecondsBoo = 0.180f; + m_fJudgeWindowSecondsOK = 0.250f; // allow enough time to take foot off and put back on + m_fJudgeWindowSecondsMine = 0.090f; // same as great + m_fJudgeWindowSecondsAttack = 0.135f; + m_fLifeDeltaPercentChangeMarvelous = +0.008f; + m_fLifeDeltaPercentChangePerfect = +0.008f; + m_fLifeDeltaPercentChangeGreat = +0.004f; + m_fLifeDeltaPercentChangeGood = +0.000f; + m_fLifeDeltaPercentChangeBoo = -0.040f; + m_fLifeDeltaPercentChangeMiss = -0.080f; + m_fLifeDeltaPercentChangeHitMine = -0.160f; + m_fLifeDeltaPercentChangeOK = +0.008f; + m_fLifeDeltaPercentChangeNG = -0.080f; - m_fTugMeterMarvelousPercentChange = +0.010f; - m_fTugMeterPerfectPercentChange = +0.008f; - m_fTugMeterGreatPercentChange = +0.004f; - m_fTugMeterGoodPercentChange = +0.000f; - m_fTugMeterBooPercentChange = -0.010f; - m_fTugMeterMissPercentChange = -0.020f; - m_fTugMeterHitMinePercentChange = -0.040f; - m_fTugMeterOKPercentChange = +0.008f; - m_fTugMeterNGPercentChange = -0.020f; + m_fTugMeterPercentChangeMarvelous = +0.010f; + m_fTugMeterPercentChangePerfect = +0.008f; + m_fTugMeterPercentChangeGreat = +0.004f; + m_fTugMeterPercentChangeGood = +0.000f; + m_fTugMeterPercentChangeBoo = -0.010f; + m_fTugMeterPercentChangeMiss = -0.020f; + m_fTugMeterPercentChangeHitMine = -0.040f; + m_fTugMeterPercentChangeOK = +0.008f; + m_fTugMeterPercentChangeNG = -0.020f; m_iRegenComboAfterFail = 10; // cumulative m_iRegenComboAfterMiss = 5; // cumulative @@ -97,26 +97,25 @@ PrefsManager::PrefsManager() m_bTwoPlayerRecovery = true; m_bMercifulDrain = true; - m_iPercentScoreMarvelousWeight = 3; - m_iPercentScorePerfectWeight = 2; - m_iPercentScoreGreatWeight = 1; - m_iPercentScoreGoodWeight = 0; - m_iPercentScoreBooWeight = 0; - m_iPercentScoreMissWeight = 0; - m_iPercentScoreOKWeight = 3; - m_iPercentScoreNGWeight = 0; - m_iPercentScoreHitMineWeight = -2; - m_iGradeMarvelousWeight = 2; - m_iGradePerfectWeight = 2; - m_iGradeGreatWeight = 1; - m_iGradeGoodWeight = 0; - m_iGradeBooWeight = -4; - m_iGradeMissWeight = -8; - m_iGradeHitMineWeight = -8; - m_iGradeOKWeight = 6; - m_iGradeNGWeight = 0; - m_bGradeTier1IsAllMarvelouses = true; - m_bGradeTier2IsAllPerfects = true; + m_iPercentScoreWeightMarvelous = 3; + m_iPercentScoreWeightPerfect = 2; + m_iPercentScoreWeightGreat = 1; + m_iPercentScoreWeightGood = 0; + m_iPercentScoreWeightBoo = 0; + m_iPercentScoreWeightMiss = 0; + m_iPercentScoreWeightOK = 3; + m_iPercentScoreWeightNG = 0; + m_iPercentScoreWeightHitMine = -2; + m_iGradeWeightMarvelous = 2; + m_iGradeWeightPerfect = 2; + m_iGradeWeightGreat = 1; + m_iGradeWeightGood = 0; + m_iGradeWeightBoo = -4; + m_iGradeWeightMiss = -8; + m_iGradeWeightHitMine = -8; + m_iGradeWeightOK = 6; + m_iGradeWeightNG = 0; + m_bGradeTier02IsAllPerfects = true; for( int i=0; im_iPercentScoreHitMineWeight, - PREFSMAN->m_iPercentScoreMissWeight, - PREFSMAN->m_iPercentScoreBooWeight, - PREFSMAN->m_iPercentScoreGoodWeight, - PREFSMAN->m_iPercentScoreGreatWeight, - PREFSMAN->m_iPercentScorePerfectWeight, - PREFSMAN->m_iPercentScoreMarvelousWeight, + PREFSMAN->m_iPercentScoreWeightHitMine, + PREFSMAN->m_iPercentScoreWeightMiss, + PREFSMAN->m_iPercentScoreWeightBoo, + PREFSMAN->m_iPercentScoreWeightGood, + PREFSMAN->m_iPercentScoreWeightGreat, + PREFSMAN->m_iPercentScoreWeightPerfect, + PREFSMAN->m_iPercentScoreWeightMarvelous, }; return TapScoreValues[tns]; } @@ -475,8 +475,8 @@ int ScoreKeeperMAX2::HoldNoteScoreToDancePoints( HoldNoteScore hns ) int HoldScoreValues[NUM_TAP_NOTE_SCORES] = { 0, - PREFSMAN->m_iPercentScoreNGWeight, - PREFSMAN->m_iPercentScoreOKWeight, + PREFSMAN->m_iPercentScoreWeightNG, + PREFSMAN->m_iPercentScoreWeightOK, }; return HoldScoreValues[hns]; } diff --git a/stepmania/src/ScoreKeeperRave.cpp b/stepmania/src/ScoreKeeperRave.cpp index 05f2a93575..3d81eaa224 100644 --- a/stepmania/src/ScoreKeeperRave.cpp +++ b/stepmania/src/ScoreKeeperRave.cpp @@ -39,7 +39,7 @@ void ScoreKeeperRave::HandleTapScore( TapNoteScore score ) float fPercentToMove = 0; switch( score ) { - case TNS_HIT_MINE: fPercentToMove = PREFSMAN->m_fSuperMeterHitMinePercentChange; break; + case TNS_HIT_MINE: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeHitMine; break; } AddSuperMeterDelta( fPercentToMove ); @@ -52,12 +52,12 @@ void ScoreKeeperRave::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTa float fPercentToMove; switch( scoreOfLastTap ) { - case TNS_MARVELOUS: fPercentToMove = PREFSMAN->m_fSuperMeterMarvelousPercentChange; break; - case TNS_PERFECT: fPercentToMove = PREFSMAN->m_fSuperMeterPerfectPercentChange; break; - case TNS_GREAT: fPercentToMove = PREFSMAN->m_fSuperMeterGreatPercentChange; break; - case TNS_GOOD: fPercentToMove = PREFSMAN->m_fSuperMeterGoodPercentChange; break; - case TNS_BOO: fPercentToMove = PREFSMAN->m_fSuperMeterBooPercentChange; break; - case TNS_MISS: fPercentToMove = PREFSMAN->m_fSuperMeterMissPercentChange; break; + case TNS_MARVELOUS: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeMarvelous; break; + case TNS_PERFECT: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangePerfect; break; + case TNS_GREAT: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeGreat; break; + case TNS_GOOD: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeGood; break; + case TNS_BOO: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeBoo; break; + case TNS_MISS: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeMiss; break; default: ASSERT(0); fPercentToMove = +0.00f; break; } AddSuperMeterDelta( fPercentToMove ); @@ -68,7 +68,7 @@ void ScoreKeeperRave::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tap float fPercentToMove = 0; switch( tapScore ) { - case TNS_HIT_MINE: fPercentToMove = PREFSMAN->m_fSuperMeterHitMinePercentChange; break; + case TNS_HIT_MINE: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeHitMine; break; } AddSuperMeterDelta( fPercentToMove ); } diff --git a/stepmania/src/ScreenEvaluation.cpp b/stepmania/src/ScreenEvaluation.cpp index e8073e8b0e..4ebf99a2c2 100644 --- a/stepmania/src/ScreenEvaluation.cpp +++ b/stepmania/src/ScreenEvaluation.cpp @@ -201,10 +201,10 @@ ScreenEvaluation::ScreenEvaluation( CString sClassName ) : Screen(sClassName) } } - Grade max_grade = GRADE_NO_DATA; + Grade best_grade = GRADE_NO_DATA; for( p=0; pm_bUseUnlockSystem && @@ -822,20 +822,20 @@ ScreenEvaluation::ScreenEvaluation( CString sClassName ) : Screen(sClassName) } break; default: - SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation "+GradeToString(max_grade)) ); + SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation "+GradeToString(best_grade)) ); break; } break; case course: case summary: - SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final "+GradeToString(max_grade)) ); + SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final "+GradeToOldString(best_grade)) ); break; default: ASSERT(0); } } - switch( max_grade ) + switch( best_grade ) { case GRADE_TIER_1: case GRADE_TIER_2: diff --git a/stepmania/src/StageStats.cpp b/stepmania/src/StageStats.cpp index d1e7aa18d9..c1cb0a67b6 100644 --- a/stepmania/src/StageStats.cpp +++ b/stepmania/src/StageStats.cpp @@ -149,19 +149,19 @@ Grade StageStats::GetGrade( PlayerNumber pn ) const int TapScoreValues[NUM_TAP_NOTE_SCORES] = { 0, - PREFSMAN->m_iGradeHitMineWeight, - PREFSMAN->m_iGradeMissWeight, - PREFSMAN->m_iGradeBooWeight, - PREFSMAN->m_iGradeGoodWeight, - PREFSMAN->m_iGradeGreatWeight, - PREFSMAN->m_iGradePerfectWeight, - PREFSMAN->m_iGradeMarvelousWeight, + PREFSMAN->m_iGradeWeightHitMine, + PREFSMAN->m_iGradeWeightMiss, + PREFSMAN->m_iGradeWeightBoo, + PREFSMAN->m_iGradeWeightGood, + PREFSMAN->m_iGradeWeightGreat, + PREFSMAN->m_iGradeWeightPerfect, + PREFSMAN->m_iGradeWeightMarvelous, }; int HoldScoreValues[NUM_HOLD_NOTE_SCORES] = { 0, - PREFSMAN->m_iGradeNGWeight, - PREFSMAN->m_iGradeOKWeight, + PREFSMAN->m_iGradeWeightNG, + PREFSMAN->m_iGradeWeightOK, }; float Possible = 0, Actual = 0; @@ -178,48 +178,29 @@ Grade StageStats::GetGrade( PlayerNumber pn ) const Possible += iHoldNoteScores[pn][i] * HoldScoreValues[HNS_OK]; } - float fPercentDancePoints = Actual / Possible; - fPercentDancePoints = max( 0.f, fPercentDancePoints ); - LOG->Trace( "GetGrade: Actual: %f, Possible: %f, Percent: %f", Actual, Possible, fPercentDancePoints ); + float fPercent = Actual / Possible; + LOG->Trace( "GetGrade: Actual: %f, Possible: %f, Percent: %f", Actual, Possible, fPercent ); - /* check for "AAAA". Check DP == 100%: if we're using eg. "LITTLE", we might have all - * marvelouses but still not qualify for a AAAA. */ - if( PREFSMAN->m_bGradeTier1IsAllMarvelouses && - fPercentDancePoints > .9999 && - iTapNoteScores[pn][TNS_MARVELOUS] > 0 && - iTapNoteScores[pn][TNS_PERFECT] == 0 && - iTapNoteScores[pn][TNS_GREAT] == 0 && - iTapNoteScores[pn][TNS_GOOD] == 0 && - iTapNoteScores[pn][TNS_BOO] == 0 && - iTapNoteScores[pn][TNS_MISS] == 0 && - iHoldNoteScores[pn][HNS_NG] == 0 ) - return GRADE_TIER_1; + // calculate grade - if( PREFSMAN->m_bGradeTier2IsAllPerfects && - fPercentDancePoints > .9999 && +#define ROUNDING_ERROR 0.00001f + Grade grade = (Grade)(NUM_GRADE_TIERS-1); // lowest non-failing grade + + for( int g=0; g= PREFSMAN->m_fGradePercentTier[g]-ROUNDING_ERROR ) + grade = (Grade)g; + + if( PREFSMAN->m_bGradeTier02IsAllPerfects && iTapNoteScores[pn][TNS_PERFECT] > 0 && iTapNoteScores[pn][TNS_GREAT] == 0 && iTapNoteScores[pn][TNS_GOOD] == 0 && iTapNoteScores[pn][TNS_BOO] == 0 && iTapNoteScores[pn][TNS_MISS] == 0 && + iTapNoteScores[pn][TNS_HIT_MINE] == 0 && iHoldNoteScores[pn][HNS_NG] == 0 ) return GRADE_TIER_2; - - // Start checking at TIER_3 if m_bGradeTier2IsAllPerfects is true. - // Start checking at TIER_2 if m_bGradeTier1IsAllMarvelouses is true. - int g; - if( PREFSMAN->m_bGradeTier2IsAllPerfects ) - g = 2; - else if( PREFSMAN->m_bGradeTier1IsAllMarvelouses ) - g = 1; - else - g = 0; - for( ; g= PREFSMAN->m_fGradePercentTier[g] ) - return (Grade)(GRADE_TIER_1+g); - - return (Grade)(GRADE_TIER_1+NUM_GRADE_TIERS-1); + return grade; } bool StageStats::OnePassed() const