options name cleanup, fixes

This commit is contained in:
Chris Danford
2004-01-20 07:09:44 +00:00
parent 42e0413e0f
commit c8fc9ddeae
11 changed files with 348 additions and 338 deletions
+9 -9
View File
@@ -68,12 +68,12 @@ void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, TapNoteScore score )
float fPercentToMove = 0; float fPercentToMove = 0;
switch( score ) switch( score )
{ {
case TNS_MARVELOUS: fPercentToMove = PREFSMAN->m_fTugMeterMarvelousPercentChange; break; case TNS_MARVELOUS: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeMarvelous; break;
case TNS_PERFECT: fPercentToMove = PREFSMAN->m_fTugMeterPerfectPercentChange; break; case TNS_PERFECT: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangePerfect; break;
case TNS_GREAT: fPercentToMove = PREFSMAN->m_fTugMeterGreatPercentChange; break; case TNS_GREAT: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeGreat; break;
case TNS_GOOD: fPercentToMove = PREFSMAN->m_fTugMeterGoodPercentChange; break; case TNS_GOOD: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeGood; break;
case TNS_BOO: fPercentToMove = PREFSMAN->m_fTugMeterBooPercentChange; break; case TNS_BOO: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeBoo; break;
case TNS_MISS: fPercentToMove = PREFSMAN->m_fTugMeterMissPercentChange; break; case TNS_MISS: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeMiss; break;
default: ASSERT(0); break; default: ASSERT(0); break;
} }
@@ -90,8 +90,8 @@ void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, HoldNoteScore score, Tap
float fPercentToMove = 0; float fPercentToMove = 0;
switch( score ) switch( score )
{ {
case HNS_OK: fPercentToMove = PREFSMAN->m_fTugMeterOKPercentChange; break; case HNS_OK: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeOK; break;
case HNS_NG: fPercentToMove = PREFSMAN->m_fTugMeterNGPercentChange; break; case HNS_NG: fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeNG; break;
default: ASSERT(0); break; default: ASSERT(0); break;
} }
@@ -100,7 +100,7 @@ void CombinedLifeMeterTug::ChangeLife( PlayerNumber pn, HoldNoteScore score, Tap
void CombinedLifeMeterTug::ChangeLifeMine( PlayerNumber pn ) void CombinedLifeMeterTug::ChangeLifeMine( PlayerNumber pn )
{ {
float fPercentToMove = PREFSMAN->m_fTugMeterHitMinePercentChange; float fPercentToMove = PREFSMAN->m_fTugMeterPercentChangeHitMine;
ChangeLife( pn, fPercentToMove ); ChangeLife( pn, fPercentToMove );
} }
+27 -8
View File
@@ -21,7 +21,25 @@ CString GradeToString( Grade g )
case GRADE_NO_DATA: return "NoData"; case GRADE_NO_DATA: return "NoData";
case GRADE_FAILED: return "Failed"; case GRADE_FAILED: return "Failed";
default: 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; CString s = sGrade;
s.MakeUpper(); s.MakeUpper();
// letters for backward compatibility // for backward compatibility
if ( s == "AAAA" ) return GRADE_TIER_1; if ( s == "AAAA" ) return GRADE_TIER_1;
else if( s == "AAA" ) return GRADE_TIER_2; else if( s == "AAA" ) return GRADE_TIER_2;
else if( s == "AA" ) return GRADE_TIER_3; 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 == "C" ) return GRADE_TIER_6;
else if( s == "D" ) return GRADE_TIER_7; else if( s == "D" ) return GRADE_TIER_7;
else if( s == "E" ) return GRADE_FAILED; 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; else if( s == "NODATA" ) return GRADE_NO_DATA;
#define MY_IS_DIGIT( c ) (c>='0'&&c<='9') #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]) ) // if it's a two digit number...
if( s.length()==2 && MY_IS_DIGIT(s[0]) && MY_IS_DIGIT(s[1]) ) return (Grade)(atoi(s)-1);
{
return (Grade)atoi(s);
}
ASSERT(0); ASSERT(0);
return GRADE_NO_DATA; return GRADE_NO_DATA;
+3 -2
View File
@@ -16,7 +16,6 @@
#define NUM_GRADE_TIERS 20 #define NUM_GRADE_TIERS 20
enum Grade enum Grade
{ {
GRADE_NO_DATA=0,
GRADE_TIER_1, // = AAAA GRADE_TIER_1, // = AAAA
GRADE_TIER_2, // = AAA GRADE_TIER_2, // = AAA
GRADE_TIER_3, // = AA GRADE_TIER_3, // = AA
@@ -38,10 +37,12 @@ enum Grade
GRADE_TIER_19, GRADE_TIER_19,
GRADE_TIER_20, GRADE_TIER_20,
GRADE_FAILED, // = E GRADE_FAILED, // = E
NUM_GRADES NUM_GRADES,
GRADE_NO_DATA, // ~GRADE_INVALID
}; };
CString GradeToString( Grade g ); CString GradeToString( Grade g );
CString GradeToOldString( Grade g ); // "AAA", "B", etc for backward compatibility
Grade StringToGrade( const CString &s ); Grade StringToGrade( const CString &s );
#endif #endif
+13 -13
View File
@@ -287,12 +287,12 @@ void LifeMeterBar::ChangeLife( TapNoteScore score )
case SongOptions::DRAIN_NORMAL: case SongOptions::DRAIN_NORMAL:
switch( score ) switch( score )
{ {
case TNS_MARVELOUS: fDeltaLife = PREFSMAN->m_fLifeDeltaMarvelousPercentChange; break; case TNS_MARVELOUS: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeMarvelous; break;
case TNS_PERFECT: fDeltaLife = PREFSMAN->m_fLifeDeltaPerfectPercentChange; break; case TNS_PERFECT: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangePerfect; break;
case TNS_GREAT: fDeltaLife = PREFSMAN->m_fLifeDeltaGreatPercentChange; break; case TNS_GREAT: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeGreat; break;
case TNS_GOOD: fDeltaLife = PREFSMAN->m_fLifeDeltaGoodPercentChange; break; case TNS_GOOD: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeGood; break;
case TNS_BOO: fDeltaLife = PREFSMAN->m_fLifeDeltaBooPercentChange; break; case TNS_BOO: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeBoo; break;
case TNS_MISS: fDeltaLife = PREFSMAN->m_fLifeDeltaMissPercentChange; break; case TNS_MISS: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeMiss; break;
default: default:
ASSERT(0); ASSERT(0);
} }
@@ -306,8 +306,8 @@ void LifeMeterBar::ChangeLife( TapNoteScore score )
case TNS_PERFECT: fDeltaLife = +0.000f; break; case TNS_PERFECT: fDeltaLife = +0.000f; break;
case TNS_GREAT: fDeltaLife = +0.000f; break; case TNS_GREAT: fDeltaLife = +0.000f; break;
case TNS_GOOD: fDeltaLife = +0.000f; break; case TNS_GOOD: fDeltaLife = +0.000f; break;
case TNS_BOO: fDeltaLife = PREFSMAN->m_fLifeDeltaBooPercentChange; break; case TNS_BOO: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeBoo; break;
case TNS_MISS: fDeltaLife = PREFSMAN->m_fLifeDeltaMissPercentChange; break; case TNS_MISS: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeMiss; break;
default: default:
ASSERT(0); ASSERT(0);
} }
@@ -345,8 +345,8 @@ void LifeMeterBar::ChangeLife( HoldNoteScore score, TapNoteScore tscore )
case SongOptions::DRAIN_NORMAL: case SongOptions::DRAIN_NORMAL:
switch( score ) switch( score )
{ {
case HNS_OK: fDeltaLife = PREFSMAN->m_fLifeDeltaOKPercentChange; break; case HNS_OK: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeOK; break;
case HNS_NG: fDeltaLife = PREFSMAN->m_fLifeDeltaNGPercentChange; break; case HNS_NG: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeNG; break;
default: default:
ASSERT(0); ASSERT(0);
} }
@@ -357,7 +357,7 @@ void LifeMeterBar::ChangeLife( HoldNoteScore score, TapNoteScore tscore )
switch( score ) switch( score )
{ {
case HNS_OK: fDeltaLife = +0.000f; break; case HNS_OK: fDeltaLife = +0.000f; break;
case HNS_NG: fDeltaLife = PREFSMAN->m_fLifeDeltaNGPercentChange; break; case HNS_NG: fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeNG; break;
default: default:
ASSERT(0); ASSERT(0);
} }
@@ -445,12 +445,12 @@ void LifeMeterBar::ChangeLifeMine()
switch( GAMESTATE->m_SongOptions.m_DrainType ) switch( GAMESTATE->m_SongOptions.m_DrainType )
{ {
case SongOptions::DRAIN_NORMAL: case SongOptions::DRAIN_NORMAL:
fDeltaLife = PREFSMAN->m_fLifeDeltaHitMinePercentChange; fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeHitMine;
if( IsHot() ) if( IsHot() )
fDeltaLife = -0.10f; // make it take a while to get back to "doing great" fDeltaLife = -0.10f; // make it take a while to get back to "doing great"
break; break;
case SongOptions::DRAIN_NO_RECOVER: case SongOptions::DRAIN_NO_RECOVER:
fDeltaLife = PREFSMAN->m_fLifeDeltaHitMinePercentChange; fDeltaLife = PREFSMAN->m_fLifeDeltaPercentChangeHitMine;
break; break;
case SongOptions::DRAIN_SUDDEN_DEATH: case SongOptions::DRAIN_SUDDEN_DEATH:
fDeltaLife = -1.0; fDeltaLife = -1.0;
+24 -24
View File
@@ -344,7 +344,7 @@ void PlayerMinus::Update( float fDeltaTime )
// if( fSongBeat-hn.fStartBeat > GAMESTATE->m_fCurBPS * GetMaxStepDistanceSeconds() ) // if( fSongBeat-hn.fStartBeat > GAMESTATE->m_fCurBPS * GetMaxStepDistanceSeconds() )
// { // {
// Decrease life // Decrease life
fLife -= fDeltaTime/PREFSMAN->m_fJudgeWindowOKSeconds; fLife -= fDeltaTime/PREFSMAN->m_fJudgeWindowSecondsOK;
fLife = max( fLife, 0 ); // clamp 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. */ /* 1 is normal. 2 means scoring is half as hard; .5 means it's twice as hard. */
/* Ez2 is only perfect / good / miss */ /* Ez2 is only perfect / good / miss */
float fScaledSecondsFromPerfect = fSecondsFromPerfect / PREFSMAN->m_fJudgeWindowScale; float fScaledSecondsFromPerfect = fSecondsFromPerfect / PREFSMAN->m_fJudgeWindowScale;
if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowMarvelousSeconds ) score = TNS_PERFECT; if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsMarvelous ) score = TNS_PERFECT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowPerfectSeconds ) score = TNS_PERFECT; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsPerfect ) score = TNS_PERFECT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGreatSeconds ) score = TNS_PERFECT; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGreat ) score = TNS_PERFECT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGoodSeconds ) score = TNS_GOOD; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGood ) score = TNS_GOOD;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowBooSeconds ) score = TNS_MISS; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsBoo ) score = TNS_MISS;
else score = TNS_NONE; else score = TNS_NONE;
} }
else if(GAMESTATE->m_CurGame == GAME_PNM) else if(GAMESTATE->m_CurGame == GAME_PNM)
{ {
/* PNM Goods = Great / Boo = Miss */ /* PNM Goods = Great / Boo = Miss */
float fScaledSecondsFromPerfect = fSecondsFromPerfect / PREFSMAN->m_fJudgeWindowScale; float fScaledSecondsFromPerfect = fSecondsFromPerfect / PREFSMAN->m_fJudgeWindowScale;
if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowMarvelousSeconds ) score = TNS_MARVELOUS; if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsMarvelous ) score = TNS_MARVELOUS;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowPerfectSeconds ) score = TNS_PERFECT; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsPerfect ) score = TNS_PERFECT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGreatSeconds ) score = TNS_GREAT; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGreat ) score = TNS_GREAT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGoodSeconds ) score = TNS_GREAT; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGood ) score = TNS_GREAT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowBooSeconds ) score = TNS_MISS; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsBoo ) score = TNS_MISS;
else score = TNS_NONE; else score = TNS_NONE;
} }
@@ -648,7 +648,7 @@ void PlayerMinus::Step( int col, RageTimer tm )
{ {
case TAP_MINE: case TAP_MINE:
// stepped too close to mine? // stepped too close to mine?
if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowMineSeconds ) if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsMine )
{ {
m_soundMine.Play(); m_soundMine.Play();
score = TNS_HIT_MINE; score = TNS_HIT_MINE;
@@ -666,7 +666,7 @@ void PlayerMinus::Step( int col, RageTimer tm )
if( IsTapAttack(tn) ) if( IsTapAttack(tn) )
{ {
score = TNS_NONE; // don't score this as anything score = TNS_NONE; // don't score this as anything
if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowAttackSeconds ) if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsAttack )
{ {
m_soundAttackLaunch.Play(); m_soundAttackLaunch.Play();
// put attack in effect // 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. */ /* 1 is normal. 2 means scoring is half as hard; .5 means it's twice as hard. */
/* Ez2 is only perfect / good / miss */ /* Ez2 is only perfect / good / miss */
if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowMarvelousSeconds ) score = TNS_PERFECT; if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsMarvelous ) score = TNS_PERFECT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowPerfectSeconds ) score = TNS_PERFECT; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsPerfect ) score = TNS_PERFECT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGreatSeconds ) score = TNS_PERFECT; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGreat ) score = TNS_PERFECT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGoodSeconds ) score = TNS_GOOD; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGood ) score = TNS_GOOD;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowBooSeconds ) score = TNS_MISS; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsBoo ) score = TNS_MISS;
else score = TNS_NONE; else score = TNS_NONE;
} }
else else
{ {
/* 1 is normal. 2 means scoring is half as hard; .5 means it's twice as hard. */ /* 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; if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsMarvelous ) score = TNS_MARVELOUS;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowPerfectSeconds ) score = TNS_PERFECT; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsPerfect ) score = TNS_PERFECT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGreatSeconds ) score = TNS_GREAT; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGreat ) score = TNS_GREAT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGoodSeconds ) score = TNS_GOOD; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGood ) score = TNS_GOOD;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowBooSeconds ) score = TNS_BOO; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsBoo ) score = TNS_BOO;
else score = TNS_NONE; else score = TNS_NONE;
} }
} }
@@ -1219,7 +1219,7 @@ void PlayerMinus::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tapScor
float PlayerMinus::GetMaxStepDistanceSeconds() 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() void PlayerMinus::FadeToFail()
+164 -161
View File
@@ -62,33 +62,33 @@ PrefsManager::PrefsManager()
m_bAutoPlay = false; m_bAutoPlay = false;
m_fJudgeWindowScale = 1.0f; m_fJudgeWindowScale = 1.0f;
m_fLifeDifficultyScale = 1.0f; m_fLifeDifficultyScale = 1.0f;
m_fJudgeWindowMarvelousSeconds = 0.0225f; m_fJudgeWindowSecondsMarvelous = 0.0225f;
m_fJudgeWindowPerfectSeconds = 0.045f; m_fJudgeWindowSecondsPerfect = 0.045f;
m_fJudgeWindowGreatSeconds = 0.090f; m_fJudgeWindowSecondsGreat = 0.090f;
m_fJudgeWindowGoodSeconds = 0.135f; m_fJudgeWindowSecondsGood = 0.135f;
m_fJudgeWindowBooSeconds = 0.180f; m_fJudgeWindowSecondsBoo = 0.180f;
m_fJudgeWindowOKSeconds = 0.250f; // allow enough time to take foot off and put back on m_fJudgeWindowSecondsOK = 0.250f; // allow enough time to take foot off and put back on
m_fJudgeWindowMineSeconds = 0.090f; // same as great m_fJudgeWindowSecondsMine = 0.090f; // same as great
m_fJudgeWindowAttackSeconds = 0.135f; m_fJudgeWindowSecondsAttack = 0.135f;
m_fLifeDeltaMarvelousPercentChange = +0.008f; m_fLifeDeltaPercentChangeMarvelous = +0.008f;
m_fLifeDeltaPerfectPercentChange = +0.008f; m_fLifeDeltaPercentChangePerfect = +0.008f;
m_fLifeDeltaGreatPercentChange = +0.004f; m_fLifeDeltaPercentChangeGreat = +0.004f;
m_fLifeDeltaGoodPercentChange = +0.000f; m_fLifeDeltaPercentChangeGood = +0.000f;
m_fLifeDeltaBooPercentChange = -0.040f; m_fLifeDeltaPercentChangeBoo = -0.040f;
m_fLifeDeltaMissPercentChange = -0.080f; m_fLifeDeltaPercentChangeMiss = -0.080f;
m_fLifeDeltaHitMinePercentChange = -0.160f; m_fLifeDeltaPercentChangeHitMine = -0.160f;
m_fLifeDeltaOKPercentChange = +0.008f; m_fLifeDeltaPercentChangeOK = +0.008f;
m_fLifeDeltaNGPercentChange = -0.080f; m_fLifeDeltaPercentChangeNG = -0.080f;
m_fTugMeterMarvelousPercentChange = +0.010f; m_fTugMeterPercentChangeMarvelous = +0.010f;
m_fTugMeterPerfectPercentChange = +0.008f; m_fTugMeterPercentChangePerfect = +0.008f;
m_fTugMeterGreatPercentChange = +0.004f; m_fTugMeterPercentChangeGreat = +0.004f;
m_fTugMeterGoodPercentChange = +0.000f; m_fTugMeterPercentChangeGood = +0.000f;
m_fTugMeterBooPercentChange = -0.010f; m_fTugMeterPercentChangeBoo = -0.010f;
m_fTugMeterMissPercentChange = -0.020f; m_fTugMeterPercentChangeMiss = -0.020f;
m_fTugMeterHitMinePercentChange = -0.040f; m_fTugMeterPercentChangeHitMine = -0.040f;
m_fTugMeterOKPercentChange = +0.008f; m_fTugMeterPercentChangeOK = +0.008f;
m_fTugMeterNGPercentChange = -0.020f; m_fTugMeterPercentChangeNG = -0.020f;
m_iRegenComboAfterFail = 10; // cumulative m_iRegenComboAfterFail = 10; // cumulative
m_iRegenComboAfterMiss = 5; // cumulative m_iRegenComboAfterMiss = 5; // cumulative
@@ -97,26 +97,25 @@ PrefsManager::PrefsManager()
m_bTwoPlayerRecovery = true; m_bTwoPlayerRecovery = true;
m_bMercifulDrain = true; m_bMercifulDrain = true;
m_iPercentScoreMarvelousWeight = 3; m_iPercentScoreWeightMarvelous = 3;
m_iPercentScorePerfectWeight = 2; m_iPercentScoreWeightPerfect = 2;
m_iPercentScoreGreatWeight = 1; m_iPercentScoreWeightGreat = 1;
m_iPercentScoreGoodWeight = 0; m_iPercentScoreWeightGood = 0;
m_iPercentScoreBooWeight = 0; m_iPercentScoreWeightBoo = 0;
m_iPercentScoreMissWeight = 0; m_iPercentScoreWeightMiss = 0;
m_iPercentScoreOKWeight = 3; m_iPercentScoreWeightOK = 3;
m_iPercentScoreNGWeight = 0; m_iPercentScoreWeightNG = 0;
m_iPercentScoreHitMineWeight = -2; m_iPercentScoreWeightHitMine = -2;
m_iGradeMarvelousWeight = 2; m_iGradeWeightMarvelous = 2;
m_iGradePerfectWeight = 2; m_iGradeWeightPerfect = 2;
m_iGradeGreatWeight = 1; m_iGradeWeightGreat = 1;
m_iGradeGoodWeight = 0; m_iGradeWeightGood = 0;
m_iGradeBooWeight = -4; m_iGradeWeightBoo = -4;
m_iGradeMissWeight = -8; m_iGradeWeightMiss = -8;
m_iGradeHitMineWeight = -8; m_iGradeWeightHitMine = -8;
m_iGradeOKWeight = 6; m_iGradeWeightOK = 6;
m_iGradeNGWeight = 0; m_iGradeWeightNG = 0;
m_bGradeTier1IsAllMarvelouses = true; m_bGradeTier02IsAllPerfects = true;
m_bGradeTier2IsAllPerfects = true;
for( int i=0; i<NUM_GRADE_TIERS; i++ ) for( int i=0; i<NUM_GRADE_TIERS; i++ )
m_fGradePercentTier[i] = 0; m_fGradePercentTier[i] = 0;
m_fGradePercentTier[GRADE_TIER_1] = 1.0f; m_fGradePercentTier[GRADE_TIER_1] = 1.0f;
@@ -126,15 +125,15 @@ PrefsManager::PrefsManager()
m_fGradePercentTier[GRADE_TIER_5] = 0.65f; // B m_fGradePercentTier[GRADE_TIER_5] = 0.65f; // B
m_fGradePercentTier[GRADE_TIER_6] = 0.45f; // C m_fGradePercentTier[GRADE_TIER_6] = 0.45f; // C
m_fSuperMeterMarvelousPercentChange = +0.05f; m_fSuperMeterPercentChangeMarvelous = +0.05f;
m_fSuperMeterPerfectPercentChange = +0.04f; m_fSuperMeterPercentChangePerfect = +0.04f;
m_fSuperMeterGreatPercentChange = +0.02f; m_fSuperMeterPercentChangeGreat = +0.02f;
m_fSuperMeterGoodPercentChange = +0.00f; m_fSuperMeterPercentChangeGood = +0.00f;
m_fSuperMeterBooPercentChange = -0.00f; m_fSuperMeterPercentChangeBoo = -0.00f;
m_fSuperMeterMissPercentChange = -0.20f; m_fSuperMeterPercentChangeMiss = -0.20f;
m_fSuperMeterHitMinePercentChange = -0.40f; m_fSuperMeterPercentChangeHitMine = -0.40f;
m_fSuperMeterOKPercentChange = +0.04f; m_fSuperMeterPercentChangeOK = +0.04f;
m_fSuperMeterNGPercentChange = -0.20f; m_fSuperMeterPercentChangeNG = -0.20f;
m_bMercifulSuperMeter = true; m_bMercifulSuperMeter = true;
m_bDelayedEscape = true; m_bDelayedEscape = true;
@@ -318,32 +317,32 @@ void PrefsManager::ReadGlobalPrefsFromDisk()
ini.GetValue( "Options", "AutoPlay", m_bAutoPlay ); ini.GetValue( "Options", "AutoPlay", m_bAutoPlay );
ini.GetValue( "Options", "JudgeWindowScale", m_fJudgeWindowScale ); ini.GetValue( "Options", "JudgeWindowScale", m_fJudgeWindowScale );
ini.GetValue( "Options", "LifeDifficultyScale", m_fLifeDifficultyScale ); ini.GetValue( "Options", "LifeDifficultyScale", m_fLifeDifficultyScale );
ini.GetValue( "Options", "JudgeWindowMarvelousSeconds", m_fJudgeWindowMarvelousSeconds ); ini.GetValue( "Options", "JudgeWindowSecondsMarvelous", m_fJudgeWindowSecondsMarvelous );
ini.GetValue( "Options", "JudgeWindowPerfectSeconds", m_fJudgeWindowPerfectSeconds ); ini.GetValue( "Options", "JudgeWindowSecondsPerfect", m_fJudgeWindowSecondsPerfect );
ini.GetValue( "Options", "JudgeWindowGreatSeconds", m_fJudgeWindowGreatSeconds ); ini.GetValue( "Options", "JudgeWindowSecondsGreat", m_fJudgeWindowSecondsGreat );
ini.GetValue( "Options", "JudgeWindowGoodSeconds", m_fJudgeWindowGoodSeconds ); ini.GetValue( "Options", "JudgeWindowSecondsGood", m_fJudgeWindowSecondsGood );
ini.GetValue( "Options", "JudgeWindowBooSeconds", m_fJudgeWindowBooSeconds ); ini.GetValue( "Options", "JudgeWindowSecondsBoo", m_fJudgeWindowSecondsBoo );
ini.GetValue( "Options", "JudgeWindowOKSeconds", m_fJudgeWindowOKSeconds ); ini.GetValue( "Options", "JudgeWindowSecondsOK", m_fJudgeWindowSecondsOK );
ini.GetValue( "Options", "JudgeWindowMineSeconds", m_fJudgeWindowMineSeconds ); ini.GetValue( "Options", "JudgeWindowSecondsMine", m_fJudgeWindowSecondsMine );
ini.GetValue( "Options", "JudgeWindowAttackSeconds", m_fJudgeWindowAttackSeconds ); ini.GetValue( "Options", "JudgeWindowSecondsAttack", m_fJudgeWindowSecondsAttack );
ini.GetValue( "Options", "LifeDeltaMarvelousPercentChange", m_fLifeDeltaMarvelousPercentChange ); ini.GetValue( "Options", "LifeDeltaPercentChangeMarvelous", m_fLifeDeltaPercentChangeMarvelous );
ini.GetValue( "Options", "LifeDeltaPerfectPercentChange", m_fLifeDeltaPerfectPercentChange ); ini.GetValue( "Options", "LifeDeltaPercentChangePerfect", m_fLifeDeltaPercentChangePerfect );
ini.GetValue( "Options", "LifeDeltaGreatPercentChange", m_fLifeDeltaGreatPercentChange ); ini.GetValue( "Options", "LifeDeltaPercentChangeGreat", m_fLifeDeltaPercentChangeGreat );
ini.GetValue( "Options", "LifeDeltaGoodPercentChange", m_fLifeDeltaGoodPercentChange ); ini.GetValue( "Options", "LifeDeltaPercentChangeGood", m_fLifeDeltaPercentChangeGood );
ini.GetValue( "Options", "LifeDeltaBooPercentChange", m_fLifeDeltaBooPercentChange ); ini.GetValue( "Options", "LifeDeltaPercentChangeBoo", m_fLifeDeltaPercentChangeBoo );
ini.GetValue( "Options", "LifeDeltaMissPercentChange", m_fLifeDeltaMissPercentChange ); ini.GetValue( "Options", "LifeDeltaPercentChangeMiss", m_fLifeDeltaPercentChangeMiss );
ini.GetValue( "Options", "LifeDeltaHitMinePercentChange", m_fLifeDeltaHitMinePercentChange ); ini.GetValue( "Options", "LifeDeltaPercentChangeHitMine", m_fLifeDeltaPercentChangeHitMine );
ini.GetValue( "Options", "LifeDeltaOKPercentChange", m_fLifeDeltaOKPercentChange ); ini.GetValue( "Options", "LifeDeltaPercentChangeOK", m_fLifeDeltaPercentChangeOK );
ini.GetValue( "Options", "LifeDeltaNGPercentChange", m_fLifeDeltaNGPercentChange ); ini.GetValue( "Options", "LifeDeltaPercentChangeNG", m_fLifeDeltaPercentChangeNG );
ini.GetValue( "Options", "TugMeterMarvelousPercentChange", m_fTugMeterMarvelousPercentChange ); ini.GetValue( "Options", "TugMeterPercentChangeMarvelous", m_fTugMeterPercentChangeMarvelous );
ini.GetValue( "Options", "TugMeterPerfectPercentChange", m_fTugMeterPerfectPercentChange ); ini.GetValue( "Options", "TugMeterPercentChangePerfect", m_fTugMeterPercentChangePerfect );
ini.GetValue( "Options", "TugMeterGreatPercentChange", m_fTugMeterGreatPercentChange ); ini.GetValue( "Options", "TugMeterPercentChangeGreat", m_fTugMeterPercentChangeGreat );
ini.GetValue( "Options", "TugMeterGoodPercentChange", m_fTugMeterGoodPercentChange ); ini.GetValue( "Options", "TugMeterPercentChangeGood", m_fTugMeterPercentChangeGood );
ini.GetValue( "Options", "TugMeterBooPercentChange", m_fTugMeterBooPercentChange ); ini.GetValue( "Options", "TugMeterPercentChangeBoo", m_fTugMeterPercentChangeBoo );
ini.GetValue( "Options", "TugMeterMissPercentChange", m_fTugMeterMissPercentChange ); ini.GetValue( "Options", "TugMeterPercentChangeMiss", m_fTugMeterPercentChangeMiss );
ini.GetValue( "Options", "TugMeterHitMinePercentChange", m_fTugMeterHitMinePercentChange ); ini.GetValue( "Options", "TugMeterPercentChangeHitMine", m_fTugMeterPercentChangeHitMine );
ini.GetValue( "Options", "TugMeterOKPercentChange", m_fTugMeterOKPercentChange ); ini.GetValue( "Options", "TugMeterPercentChangeOK", m_fTugMeterPercentChangeOK );
ini.GetValue( "Options", "TugMeterNGPercentChange", m_fTugMeterNGPercentChange ); ini.GetValue( "Options", "TugMeterPercentChangeNG", m_fTugMeterPercentChangeNG );
ini.GetValue( "Options", "RegenComboAfterFail", m_iRegenComboAfterFail ); ini.GetValue( "Options", "RegenComboAfterFail", m_iRegenComboAfterFail );
ini.GetValue( "Options", "RegenComboAfterMiss", m_iRegenComboAfterMiss ); ini.GetValue( "Options", "RegenComboAfterMiss", m_iRegenComboAfterMiss );
ini.GetValue( "Options", "MaxRegenComboAfterFail", m_iMaxRegenComboAfterFail ); ini.GetValue( "Options", "MaxRegenComboAfterFail", m_iMaxRegenComboAfterFail );
@@ -351,40 +350,42 @@ void PrefsManager::ReadGlobalPrefsFromDisk()
ini.GetValue( "Options", "TwoPlayerRecovery", m_bTwoPlayerRecovery ); ini.GetValue( "Options", "TwoPlayerRecovery", m_bTwoPlayerRecovery );
ini.GetValue( "Options", "MercifulDrain", m_bMercifulDrain ); ini.GetValue( "Options", "MercifulDrain", m_bMercifulDrain );
ini.GetValue( "Options", "PercentScoreMarvelousWeight", m_iPercentScoreMarvelousWeight ); ini.GetValue( "Options", "PercentScoreWeightMarvelous", m_iPercentScoreWeightMarvelous );
ini.GetValue( "Options", "PercentScorePerfectWeight", m_iPercentScorePerfectWeight ); ini.GetValue( "Options", "PercentScoreWeightPerfect", m_iPercentScoreWeightPerfect );
ini.GetValue( "Options", "PercentScoreGreatWeight", m_iPercentScoreGreatWeight ); ini.GetValue( "Options", "PercentScoreWeightGreat", m_iPercentScoreWeightGreat );
ini.GetValue( "Options", "PercentScoreGoodWeight", m_iPercentScoreGoodWeight ); ini.GetValue( "Options", "PercentScoreWeightGood", m_iPercentScoreWeightGood );
ini.GetValue( "Options", "PercentScoreBooWeight", m_iPercentScoreBooWeight ); ini.GetValue( "Options", "PercentScoreWeightBoo", m_iPercentScoreWeightBoo );
ini.GetValue( "Options", "PercentScoreMissWeight", m_iPercentScoreMissWeight ); ini.GetValue( "Options", "PercentScoreWeightMiss", m_iPercentScoreWeightMiss );
ini.GetValue( "Options", "PercentScoreOKWeight", m_iPercentScoreOKWeight ); ini.GetValue( "Options", "PercentScoreWeightOK", m_iPercentScoreWeightOK );
ini.GetValue( "Options", "PercentScoreNGWeight", m_iPercentScoreNGWeight ); ini.GetValue( "Options", "PercentScoreWeightNG", m_iPercentScoreWeightNG );
ini.GetValue( "Options", "PercentScoreHitMineWeight", m_iPercentScoreHitMineWeight ); ini.GetValue( "Options", "PercentScoreWeightHitMine", m_iPercentScoreWeightHitMine );
ini.GetValue( "Options", "GradeMarvelousWeight", m_iGradeMarvelousWeight ); ini.GetValue( "Options", "GradeWeightMarvelous", m_iGradeWeightMarvelous );
ini.GetValue( "Options", "GradePerfectWeight", m_iGradePerfectWeight ); ini.GetValue( "Options", "GradeWeightPerfect", m_iGradeWeightPerfect );
ini.GetValue( "Options", "GradeGreatWeight", m_iGradeGreatWeight ); ini.GetValue( "Options", "GradeWeightGreat", m_iGradeWeightGreat );
ini.GetValue( "Options", "GradeGoodWeight", m_iGradeGoodWeight ); ini.GetValue( "Options", "GradeWeightGood", m_iGradeWeightGood );
ini.GetValue( "Options", "GradeBooWeight", m_iGradeBooWeight ); ini.GetValue( "Options", "GradeWeightBoo", m_iGradeWeightBoo );
ini.GetValue( "Options", "GradeMissWeight", m_iGradeMissWeight ); ini.GetValue( "Options", "GradeWeightMiss", m_iGradeWeightMiss );
ini.GetValue( "Options", "GradeHitMineWeight", m_iGradeHitMineWeight ); ini.GetValue( "Options", "GradeWeightHitMine", m_iGradeWeightHitMine );
ini.GetValue( "Options", "GradeOKWeight", m_iGradeOKWeight ); ini.GetValue( "Options", "GradeWeightOK", m_iGradeWeightOK );
ini.GetValue( "Options", "GradeNGWeight", m_iGradeNGWeight ); ini.GetValue( "Options", "GradeWeightNG", m_iGradeWeightNG );
for( int g=0; g<NUM_GRADE_TIERS; g++ ) for( int g=0; g<NUM_GRADE_TIERS; g++ )
{ {
Grade grade = (Grade)g; Grade grade = (Grade)g;
CString s = GradeToString( grade ); CString s = GradeToString( grade );
ini.GetValue( "Options", "GradePercentTier"+s, m_fGradePercentTier[g] ); ini.GetValue( "Options", "GradePercentTier"+s, m_fGradePercentTier[g] );
} }
ini.GetValue( "Options", "GradeTier02IsAllPerfects", m_bGradeTier02IsAllPerfects );
ini.GetValue( "Options", "SuperMeterMarvelousPercentChange",m_fSuperMeterMarvelousPercentChange ); ini.GetValue( "Options", "SuperMeterPercentChangeMarvelous",m_fSuperMeterPercentChangeMarvelous );
ini.GetValue( "Options", "SuperMeterPerfectPercentChange", m_fSuperMeterPerfectPercentChange ); ini.GetValue( "Options", "SuperMeterPercentChangePerfect", m_fSuperMeterPercentChangePerfect );
ini.GetValue( "Options", "SuperMeterGreatPercentChange", m_fSuperMeterGreatPercentChange ); ini.GetValue( "Options", "SuperMeterPercentChangeGreat", m_fSuperMeterPercentChangeGreat );
ini.GetValue( "Options", "SuperMeterGoodPercentChange", m_fSuperMeterGoodPercentChange ); ini.GetValue( "Options", "SuperMeterPercentChangeGood", m_fSuperMeterPercentChangeGood );
ini.GetValue( "Options", "SuperMeterBooPercentChange", m_fSuperMeterBooPercentChange ); ini.GetValue( "Options", "SuperMeterPercentChangeBoo", m_fSuperMeterPercentChangeBoo );
ini.GetValue( "Options", "SuperMeterMissPercentChange", m_fSuperMeterMissPercentChange ); ini.GetValue( "Options", "SuperMeterPercentChangeMiss", m_fSuperMeterPercentChangeMiss );
ini.GetValue( "Options", "SuperMeterHitMinePercentChange", m_fSuperMeterHitMinePercentChange ); ini.GetValue( "Options", "SuperMeterPercentChangeHitMine", m_fSuperMeterPercentChangeHitMine );
ini.GetValue( "Options", "SuperMeterOKPercentChange", m_fSuperMeterOKPercentChange ); ini.GetValue( "Options", "SuperMeterPercentChangeOK", m_fSuperMeterPercentChangeOK );
ini.GetValue( "Options", "SuperMeterNGPercentChange", m_fSuperMeterNGPercentChange ); ini.GetValue( "Options", "SuperMeterPercentChangeNG", m_fSuperMeterPercentChangeNG );
ini.GetValue( "Options", "MercifulSuperMeter", m_bMercifulSuperMeter ); ini.GetValue( "Options", "MercifulSuperMeter", m_bMercifulSuperMeter );
ini.GetValue( "Options", "DelayedEscape", m_bDelayedEscape ); ini.GetValue( "Options", "DelayedEscape", m_bDelayedEscape );
@@ -524,32 +525,32 @@ void PrefsManager::SaveGlobalPrefsToDisk() const
ini.SetValue( "Options", "AutoPlay", m_bAutoPlay ); ini.SetValue( "Options", "AutoPlay", m_bAutoPlay );
ini.SetValue( "Options", "JudgeWindowScale", m_fJudgeWindowScale ); ini.SetValue( "Options", "JudgeWindowScale", m_fJudgeWindowScale );
ini.SetValue( "Options", "LifeDifficultyScale", m_fLifeDifficultyScale ); ini.SetValue( "Options", "LifeDifficultyScale", m_fLifeDifficultyScale );
ini.SetValue( "Options", "JudgeWindowMarvelousSeconds", m_fJudgeWindowMarvelousSeconds ); ini.SetValue( "Options", "JudgeWindowSecondsMarvelous", m_fJudgeWindowSecondsMarvelous );
ini.SetValue( "Options", "JudgeWindowPerfectSeconds", m_fJudgeWindowPerfectSeconds ); ini.SetValue( "Options", "JudgeWindowSecondsPerfect", m_fJudgeWindowSecondsPerfect );
ini.SetValue( "Options", "JudgeWindowGreatSeconds", m_fJudgeWindowGreatSeconds ); ini.SetValue( "Options", "JudgeWindowSecondsGreat", m_fJudgeWindowSecondsGreat );
ini.SetValue( "Options", "JudgeWindowGoodSeconds", m_fJudgeWindowGoodSeconds ); ini.SetValue( "Options", "JudgeWindowSecondsGood", m_fJudgeWindowSecondsGood );
ini.SetValue( "Options", "JudgeWindowBooSeconds", m_fJudgeWindowBooSeconds ); ini.SetValue( "Options", "JudgeWindowSecondsBoo", m_fJudgeWindowSecondsBoo );
ini.SetValue( "Options", "JudgeWindowOKSeconds", m_fJudgeWindowOKSeconds ); ini.SetValue( "Options", "JudgeWindowSecondsOK", m_fJudgeWindowSecondsOK );
ini.SetValue( "Options", "JudgeWindowMineSeconds", m_fJudgeWindowMineSeconds ); ini.SetValue( "Options", "JudgeWindowSecondsMine", m_fJudgeWindowSecondsMine );
ini.SetValue( "Options", "JudgeWindowAttackSeconds", m_fJudgeWindowAttackSeconds ); ini.SetValue( "Options", "JudgeWindowSecondsAttack", m_fJudgeWindowSecondsAttack );
ini.SetValue( "Options", "LifeDeltaMarvelousPercentChange", m_fLifeDeltaMarvelousPercentChange ); ini.SetValue( "Options", "LifeDeltaPercentChangeMarvelous", m_fLifeDeltaPercentChangeMarvelous );
ini.SetValue( "Options", "LifeDeltaPerfectPercentChange", m_fLifeDeltaPerfectPercentChange ); ini.SetValue( "Options", "LifeDeltaPercentChangePerfect", m_fLifeDeltaPercentChangePerfect );
ini.SetValue( "Options", "LifeDeltaGreatPercentChange", m_fLifeDeltaGreatPercentChange ); ini.SetValue( "Options", "LifeDeltaPercentChangeGreat", m_fLifeDeltaPercentChangeGreat );
ini.SetValue( "Options", "LifeDeltaGoodPercentChange", m_fLifeDeltaGoodPercentChange ); ini.SetValue( "Options", "LifeDeltaPercentChangeGood", m_fLifeDeltaPercentChangeGood );
ini.SetValue( "Options", "LifeDeltaBooPercentChange", m_fLifeDeltaBooPercentChange ); ini.SetValue( "Options", "LifeDeltaPercentChangeBoo", m_fLifeDeltaPercentChangeBoo );
ini.SetValue( "Options", "LifeDeltaMissPercentChange", m_fLifeDeltaMissPercentChange ); ini.SetValue( "Options", "LifeDeltaPercentChangeMiss", m_fLifeDeltaPercentChangeMiss );
ini.SetValue( "Options", "LifeDeltaHitMinePercentChange", m_fLifeDeltaHitMinePercentChange ); ini.SetValue( "Options", "LifeDeltaPercentChangeHitMine", m_fLifeDeltaPercentChangeHitMine );
ini.SetValue( "Options", "LifeDeltaOKPercentChange", m_fLifeDeltaOKPercentChange ); ini.SetValue( "Options", "LifeDeltaPercentChangeOK", m_fLifeDeltaPercentChangeOK );
ini.SetValue( "Options", "LifeDeltaNGPercentChange", m_fLifeDeltaNGPercentChange ); ini.SetValue( "Options", "LifeDeltaPercentChangeNG", m_fLifeDeltaPercentChangeNG );
ini.SetValue( "Options", "TugMeterMarvelousPercentChange", m_fTugMeterMarvelousPercentChange ); ini.SetValue( "Options", "TugMeterPercentChangeMarvelous", m_fTugMeterPercentChangeMarvelous );
ini.SetValue( "Options", "TugMeterPerfectPercentChange", m_fTugMeterPerfectPercentChange ); ini.SetValue( "Options", "TugMeterPercentChangePerfect", m_fTugMeterPercentChangePerfect );
ini.SetValue( "Options", "TugMeterGreatPercentChange", m_fTugMeterGreatPercentChange ); ini.SetValue( "Options", "TugMeterPercentChangeGreat", m_fTugMeterPercentChangeGreat );
ini.SetValue( "Options", "TugMeterGoodPercentChange", m_fTugMeterGoodPercentChange ); ini.SetValue( "Options", "TugMeterPercentChangeGood", m_fTugMeterPercentChangeGood );
ini.SetValue( "Options", "TugMeterBooPercentChange", m_fTugMeterBooPercentChange ); ini.SetValue( "Options", "TugMeterPercentChangeBoo", m_fTugMeterPercentChangeBoo );
ini.SetValue( "Options", "TugMeterMissPercentChange", m_fTugMeterMissPercentChange ); ini.SetValue( "Options", "TugMeterPercentChangeMiss", m_fTugMeterPercentChangeMiss );
ini.SetValue( "Options", "TugMeterHitMinePercentChange", m_fTugMeterHitMinePercentChange ); ini.SetValue( "Options", "TugMeterPercentChangeHitMine", m_fTugMeterPercentChangeHitMine );
ini.SetValue( "Options", "TugMeterOKPercentChange", m_fTugMeterOKPercentChange ); ini.SetValue( "Options", "TugMeterPercentChangeOK", m_fTugMeterPercentChangeOK );
ini.SetValue( "Options", "TugMeterNGPercentChange", m_fTugMeterNGPercentChange ); ini.SetValue( "Options", "TugMeterPercentChangeNG", m_fTugMeterPercentChangeNG );
ini.SetValue( "Options", "RegenComboAfterFail", m_iRegenComboAfterFail ); ini.SetValue( "Options", "RegenComboAfterFail", m_iRegenComboAfterFail );
ini.SetValue( "Options", "RegenComboAfterMiss", m_iRegenComboAfterMiss ); ini.SetValue( "Options", "RegenComboAfterMiss", m_iRegenComboAfterMiss );
ini.SetValue( "Options", "MaxRegenComboAfterFail", m_iMaxRegenComboAfterFail ); ini.SetValue( "Options", "MaxRegenComboAfterFail", m_iMaxRegenComboAfterFail );
@@ -557,40 +558,42 @@ void PrefsManager::SaveGlobalPrefsToDisk() const
ini.SetValue( "Options", "TwoPlayerRecovery", m_bTwoPlayerRecovery ); ini.SetValue( "Options", "TwoPlayerRecovery", m_bTwoPlayerRecovery );
ini.SetValue( "Options", "MercifulDrain", m_bMercifulDrain ); ini.SetValue( "Options", "MercifulDrain", m_bMercifulDrain );
ini.SetValue( "Options", "PercentScoreMarvelousWeight", m_iPercentScoreMarvelousWeight ); ini.SetValue( "Options", "PercentScoreWeightMarvelous", m_iPercentScoreWeightMarvelous );
ini.SetValue( "Options", "PercentScorePerfectWeight", m_iPercentScorePerfectWeight ); ini.SetValue( "Options", "PercentScoreWeightPerfect", m_iPercentScoreWeightPerfect );
ini.SetValue( "Options", "PercentScoreGreatWeight", m_iPercentScoreGreatWeight ); ini.SetValue( "Options", "PercentScoreWeightGreat", m_iPercentScoreWeightGreat );
ini.SetValue( "Options", "PercentScoreGoodWeight", m_iPercentScoreGoodWeight ); ini.SetValue( "Options", "PercentScoreWeightGood", m_iPercentScoreWeightGood );
ini.SetValue( "Options", "PercentScoreBooWeight", m_iPercentScoreBooWeight ); ini.SetValue( "Options", "PercentScoreWeightBoo", m_iPercentScoreWeightBoo );
ini.SetValue( "Options", "PercentScoreMissWeight", m_iPercentScoreMissWeight ); ini.SetValue( "Options", "PercentScoreWeightMiss", m_iPercentScoreWeightMiss );
ini.SetValue( "Options", "PercentScoreOKWeight", m_iPercentScoreOKWeight ); ini.SetValue( "Options", "PercentScoreWeightOK", m_iPercentScoreWeightOK );
ini.SetValue( "Options", "PercentScoreNGWeight", m_iPercentScoreNGWeight ); ini.SetValue( "Options", "PercentScoreWeightNG", m_iPercentScoreWeightNG );
ini.SetValue( "Options", "PercentScoreHitMineWeight", m_iPercentScoreHitMineWeight ); ini.SetValue( "Options", "PercentScoreWeightHitMine", m_iPercentScoreWeightHitMine );
ini.SetValue( "Options", "GradeMarvelousWeight", m_iGradeMarvelousWeight ); ini.SetValue( "Options", "GradeWeightMarvelous", m_iGradeWeightMarvelous );
ini.SetValue( "Options", "GradePerfectWeight", m_iGradePerfectWeight ); ini.SetValue( "Options", "GradeWeightPerfect", m_iGradeWeightPerfect );
ini.SetValue( "Options", "GradeGreatWeight", m_iGradeGreatWeight ); ini.SetValue( "Options", "GradeWeightGreat", m_iGradeWeightGreat );
ini.SetValue( "Options", "GradeGoodWeight", m_iGradeGoodWeight ); ini.SetValue( "Options", "GradeWeightGood", m_iGradeWeightGood );
ini.SetValue( "Options", "GradeBooWeight", m_iGradeBooWeight ); ini.SetValue( "Options", "GradeWeightBoo", m_iGradeWeightBoo );
ini.SetValue( "Options", "GradeMissWeight", m_iGradeMissWeight ); ini.SetValue( "Options", "GradeWeightMiss", m_iGradeWeightMiss );
ini.SetValue( "Options", "GradeHitMineWeight", m_iGradeHitMineWeight ); ini.SetValue( "Options", "GradeWeightHitMine", m_iGradeWeightHitMine );
ini.SetValue( "Options", "GradeOKWeight", m_iGradeOKWeight ); ini.SetValue( "Options", "GradeWeightOK", m_iGradeWeightOK );
ini.SetValue( "Options", "GradeNGWeight", m_iGradeNGWeight ); ini.SetValue( "Options", "GradeWeightNG", m_iGradeWeightNG );
for( int g=0; g<NUM_GRADE_TIERS; g++ ) for( int g=0; g<NUM_GRADE_TIERS; g++ )
{ {
Grade grade = (Grade)g; Grade grade = (Grade)g;
CString s = GradeToString( grade ); CString s = GradeToString( grade );
ini.SetValue( "Options", "GradePercentTier"+s, m_fGradePercentTier[g] ); ini.SetValue( "Options", "GradePercentTier"+s, m_fGradePercentTier[g] );
} }
ini.SetValue( "Options", "GradeTier02IsAllPerfects", m_bGradeTier02IsAllPerfects );
ini.SetValue( "Options", "SuperMeterMarvelousPercentChange",m_fSuperMeterMarvelousPercentChange ); ini.SetValue( "Options", "SuperMeterPercentChangeMarvelous",m_fSuperMeterPercentChangeMarvelous );
ini.SetValue( "Options", "SuperMeterPerfectPercentChange", m_fSuperMeterPerfectPercentChange ); ini.SetValue( "Options", "SuperMeterPercentChangePerfect", m_fSuperMeterPercentChangePerfect );
ini.SetValue( "Options", "SuperMeterGreatPercentChange", m_fSuperMeterGreatPercentChange ); ini.SetValue( "Options", "SuperMeterPercentChangeGreat", m_fSuperMeterPercentChangeGreat );
ini.SetValue( "Options", "SuperMeterGoodPercentChange", m_fSuperMeterGoodPercentChange ); ini.SetValue( "Options", "SuperMeterPercentChangeGood", m_fSuperMeterPercentChangeGood );
ini.SetValue( "Options", "SuperMeterBooPercentChange", m_fSuperMeterBooPercentChange ); ini.SetValue( "Options", "SuperMeterPercentChangeBoo", m_fSuperMeterPercentChangeBoo );
ini.SetValue( "Options", "SuperMeterMissPercentChange", m_fSuperMeterMissPercentChange ); ini.SetValue( "Options", "SuperMeterPercentChangeMiss", m_fSuperMeterPercentChangeMiss );
ini.SetValue( "Options", "SuperMeterHitMinePercentChange", m_fSuperMeterHitMinePercentChange ); ini.SetValue( "Options", "SuperMeterPercentChangeHitMine", m_fSuperMeterPercentChangeHitMine );
ini.SetValue( "Options", "SuperMeterOKPercentChange", m_fSuperMeterOKPercentChange ); ini.SetValue( "Options", "SuperMeterPercentChangeOK", m_fSuperMeterPercentChangeOK );
ini.SetValue( "Options", "SuperMeterNGPercentChange", m_fSuperMeterNGPercentChange ); ini.SetValue( "Options", "SuperMeterPercentChangeNG", m_fSuperMeterPercentChangeNG );
ini.SetValue( "Options", "MercifulSuperMeter", m_bMercifulSuperMeter ); ini.SetValue( "Options", "MercifulSuperMeter", m_bMercifulSuperMeter );
ini.SetValue( "Options", "DelayedEscape", m_bDelayedEscape ); ini.SetValue( "Options", "DelayedEscape", m_bDelayedEscape );
+64 -58
View File
@@ -58,74 +58,80 @@ public:
bool m_bEventMode; bool m_bEventMode;
float m_fJudgeWindowScale; float m_fJudgeWindowScale;
float m_fJudgeWindowSecondsMarvelous;
float m_fJudgeWindowSecondsPerfect;
float m_fJudgeWindowSecondsGreat;
float m_fJudgeWindowSecondsGood;
float m_fJudgeWindowSecondsBoo;
float m_fJudgeWindowSecondsOK;
float m_fJudgeWindowSecondsMine;
float m_fJudgeWindowSecondsAttack;
float m_fLifeDifficultyScale; float m_fLifeDifficultyScale;
float m_fJudgeWindowMarvelousSeconds; float m_fLifeDeltaPercentChangeMarvelous;
float m_fJudgeWindowPerfectSeconds; float m_fLifeDeltaPercentChangePerfect;
float m_fJudgeWindowGreatSeconds; float m_fLifeDeltaPercentChangeGreat;
float m_fJudgeWindowGoodSeconds; float m_fLifeDeltaPercentChangeGood;
float m_fJudgeWindowBooSeconds; float m_fLifeDeltaPercentChangeBoo;
float m_fJudgeWindowOKSeconds; float m_fLifeDeltaPercentChangeMiss;
float m_fJudgeWindowMineSeconds; float m_fLifeDeltaPercentChangeHitMine;
float m_fJudgeWindowAttackSeconds; float m_fLifeDeltaPercentChangeOK;
float m_fLifeDeltaPercentChangeNG;
float m_fLifeDeltaMarvelousPercentChange;
float m_fLifeDeltaPerfectPercentChange;
float m_fLifeDeltaGreatPercentChange;
float m_fLifeDeltaGoodPercentChange;
float m_fLifeDeltaBooPercentChange;
float m_fLifeDeltaMissPercentChange;
float m_fLifeDeltaHitMinePercentChange;
float m_fLifeDeltaOKPercentChange;
float m_fLifeDeltaNGPercentChange;
// tug meter used in rave // tug meter used in rave
float m_fTugMeterMarvelousPercentChange; float m_fTugMeterPercentChangeMarvelous;
float m_fTugMeterPerfectPercentChange; float m_fTugMeterPercentChangePerfect;
float m_fTugMeterGreatPercentChange; float m_fTugMeterPercentChangeGreat;
float m_fTugMeterGoodPercentChange; float m_fTugMeterPercentChangeGood;
float m_fTugMeterBooPercentChange; float m_fTugMeterPercentChangeBoo;
float m_fTugMeterMissPercentChange; float m_fTugMeterPercentChangeMiss;
float m_fTugMeterHitMinePercentChange; float m_fTugMeterPercentChangeHitMine;
float m_fTugMeterOKPercentChange; float m_fTugMeterPercentChangeOK;
float m_fTugMeterNGPercentChange; float m_fTugMeterPercentChangeNG;
// Whoever added these: Please add a comment saying what they do. -Chris
int m_iRegenComboAfterFail; int m_iRegenComboAfterFail;
int m_iRegenComboAfterMiss; int m_iRegenComboAfterMiss;
int m_iMaxRegenComboAfterFail; int m_iMaxRegenComboAfterFail;
int m_iMaxRegenComboAfterMiss; int m_iMaxRegenComboAfterMiss;
bool m_bTwoPlayerRecovery; bool m_bTwoPlayerRecovery;
bool m_bMercifulDrain; bool m_bMercifulDrain; // negative life deltas are scaled by the players life percentage
int m_iPercentScoreMarvelousWeight; // percent score (the number that is shown on the screen and saved to memory card)
int m_iPercentScorePerfectWeight; int m_iPercentScoreWeightMarvelous;
int m_iPercentScoreGreatWeight; int m_iPercentScoreWeightPerfect;
int m_iPercentScoreGoodWeight; int m_iPercentScoreWeightGreat;
int m_iPercentScoreBooWeight; int m_iPercentScoreWeightGood;
int m_iPercentScoreMissWeight; int m_iPercentScoreWeightBoo;
int m_iPercentScoreHitMineWeight; int m_iPercentScoreWeightMiss;
int m_iPercentScoreOKWeight; int m_iPercentScoreWeightHitMine;
int m_iPercentScoreNGWeight; int m_iPercentScoreWeightOK;
int m_iGradeMarvelousWeight; int m_iPercentScoreWeightNG;
int m_iGradePerfectWeight;
int m_iGradeGreatWeight;
int m_iGradeGoodWeight;
int m_iGradeBooWeight;
int m_iGradeMissWeight;
int m_iGradeHitMineWeight;
int m_iGradeOKWeight;
int m_iGradeNGWeight;
bool m_bGradeTier1IsAllMarvelouses;
bool m_bGradeTier2IsAllPerfects;
float m_fGradePercentTier[NUM_GRADE_TIERS];
float m_fSuperMeterMarvelousPercentChange; // grades are calculated based on a percentage, but might have different weights than the percent score
float m_fSuperMeterPerfectPercentChange; int m_iGradeWeightMarvelous;
float m_fSuperMeterGreatPercentChange; int m_iGradeWeightPerfect;
float m_fSuperMeterGoodPercentChange; int m_iGradeWeightGreat;
float m_fSuperMeterBooPercentChange; int m_iGradeWeightGood;
float m_fSuperMeterMissPercentChange; int m_iGradeWeightBoo;
float m_fSuperMeterHitMinePercentChange; int m_iGradeWeightMiss;
float m_fSuperMeterOKPercentChange; int m_iGradeWeightHitMine;
float m_fSuperMeterNGPercentChange; int m_iGradeWeightOK;
bool m_bMercifulSuperMeter; int m_iGradeWeightNG;
float m_fGradePercentTier[NUM_GRADE_TIERS]; // the minimum percent necessary achieve a grade
bool m_bGradeTier02IsAllPerfects; // DDR special case. If true, m_fGradePercentTier[GRADE_TIER_2] is ignored
float m_fSuperMeterPercentChangeMarvelous;
float m_fSuperMeterPercentChangePerfect;
float m_fSuperMeterPercentChangeGreat;
float m_fSuperMeterPercentChangeGood;
float m_fSuperMeterPercentChangeBoo;
float m_fSuperMeterPercentChangeMiss;
float m_fSuperMeterPercentChangeHitMine;
float m_fSuperMeterPercentChangeOK;
float m_fSuperMeterPercentChangeNG;
bool m_bMercifulSuperMeter; // negative super deltas are scaled by the players life percentage
bool m_bAutoPlay; bool m_bAutoPlay;
bool m_bDelayedEscape; bool m_bDelayedEscape;
+9 -9
View File
@@ -459,13 +459,13 @@ int ScoreKeeperMAX2::TapNoteScoreToDancePoints( TapNoteScore tns )
int TapScoreValues[NUM_TAP_NOTE_SCORES] = int TapScoreValues[NUM_TAP_NOTE_SCORES] =
{ {
0, 0,
PREFSMAN->m_iPercentScoreHitMineWeight, PREFSMAN->m_iPercentScoreWeightHitMine,
PREFSMAN->m_iPercentScoreMissWeight, PREFSMAN->m_iPercentScoreWeightMiss,
PREFSMAN->m_iPercentScoreBooWeight, PREFSMAN->m_iPercentScoreWeightBoo,
PREFSMAN->m_iPercentScoreGoodWeight, PREFSMAN->m_iPercentScoreWeightGood,
PREFSMAN->m_iPercentScoreGreatWeight, PREFSMAN->m_iPercentScoreWeightGreat,
PREFSMAN->m_iPercentScorePerfectWeight, PREFSMAN->m_iPercentScoreWeightPerfect,
PREFSMAN->m_iPercentScoreMarvelousWeight, PREFSMAN->m_iPercentScoreWeightMarvelous,
}; };
return TapScoreValues[tns]; return TapScoreValues[tns];
} }
@@ -475,8 +475,8 @@ int ScoreKeeperMAX2::HoldNoteScoreToDancePoints( HoldNoteScore hns )
int HoldScoreValues[NUM_TAP_NOTE_SCORES] = int HoldScoreValues[NUM_TAP_NOTE_SCORES] =
{ {
0, 0,
PREFSMAN->m_iPercentScoreNGWeight, PREFSMAN->m_iPercentScoreWeightNG,
PREFSMAN->m_iPercentScoreOKWeight, PREFSMAN->m_iPercentScoreWeightOK,
}; };
return HoldScoreValues[hns]; return HoldScoreValues[hns];
} }
+8 -8
View File
@@ -39,7 +39,7 @@ void ScoreKeeperRave::HandleTapScore( TapNoteScore score )
float fPercentToMove = 0; float fPercentToMove = 0;
switch( score ) switch( score )
{ {
case TNS_HIT_MINE: fPercentToMove = PREFSMAN->m_fSuperMeterHitMinePercentChange; break; case TNS_HIT_MINE: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeHitMine; break;
} }
AddSuperMeterDelta( fPercentToMove ); AddSuperMeterDelta( fPercentToMove );
@@ -52,12 +52,12 @@ void ScoreKeeperRave::HandleTapRowScore( TapNoteScore scoreOfLastTap, int iNumTa
float fPercentToMove; float fPercentToMove;
switch( scoreOfLastTap ) switch( scoreOfLastTap )
{ {
case TNS_MARVELOUS: fPercentToMove = PREFSMAN->m_fSuperMeterMarvelousPercentChange; break; case TNS_MARVELOUS: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeMarvelous; break;
case TNS_PERFECT: fPercentToMove = PREFSMAN->m_fSuperMeterPerfectPercentChange; break; case TNS_PERFECT: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangePerfect; break;
case TNS_GREAT: fPercentToMove = PREFSMAN->m_fSuperMeterGreatPercentChange; break; case TNS_GREAT: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeGreat; break;
case TNS_GOOD: fPercentToMove = PREFSMAN->m_fSuperMeterGoodPercentChange; break; case TNS_GOOD: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeGood; break;
case TNS_BOO: fPercentToMove = PREFSMAN->m_fSuperMeterBooPercentChange; break; case TNS_BOO: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeBoo; break;
case TNS_MISS: fPercentToMove = PREFSMAN->m_fSuperMeterMissPercentChange; break; case TNS_MISS: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeMiss; break;
default: ASSERT(0); fPercentToMove = +0.00f; break; default: ASSERT(0); fPercentToMove = +0.00f; break;
} }
AddSuperMeterDelta( fPercentToMove ); AddSuperMeterDelta( fPercentToMove );
@@ -68,7 +68,7 @@ void ScoreKeeperRave::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tap
float fPercentToMove = 0; float fPercentToMove = 0;
switch( tapScore ) switch( tapScore )
{ {
case TNS_HIT_MINE: fPercentToMove = PREFSMAN->m_fSuperMeterHitMinePercentChange; break; case TNS_HIT_MINE: fPercentToMove = PREFSMAN->m_fSuperMeterPercentChangeHitMine; break;
} }
AddSuperMeterDelta( fPercentToMove ); AddSuperMeterDelta( fPercentToMove );
} }
+5 -5
View File
@@ -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; p<NUM_PLAYERS; p++ ) for( p=0; p<NUM_PLAYERS; p++ )
{ {
max_grade = max( max_grade, grade[p] ); best_grade = min( best_grade, grade[p] );
// if its extra stage, update # passed stages // if its extra stage, update # passed stages
if (PREFSMAN->m_bUseUnlockSystem && if (PREFSMAN->m_bUseUnlockSystem &&
@@ -822,20 +822,20 @@ ScreenEvaluation::ScreenEvaluation( CString sClassName ) : Screen(sClassName)
} }
break; break;
default: default:
SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation "+GradeToString(max_grade)) ); SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation "+GradeToString(best_grade)) );
break; break;
} }
break; break;
case course: case course:
case summary: case summary:
SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final "+GradeToString(max_grade)) ); SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final "+GradeToOldString(best_grade)) );
break; break;
default: default:
ASSERT(0); ASSERT(0);
} }
} }
switch( max_grade ) switch( best_grade )
{ {
case GRADE_TIER_1: case GRADE_TIER_1:
case GRADE_TIER_2: case GRADE_TIER_2:
+22 -41
View File
@@ -149,19 +149,19 @@ Grade StageStats::GetGrade( PlayerNumber pn ) const
int TapScoreValues[NUM_TAP_NOTE_SCORES] = int TapScoreValues[NUM_TAP_NOTE_SCORES] =
{ {
0, 0,
PREFSMAN->m_iGradeHitMineWeight, PREFSMAN->m_iGradeWeightHitMine,
PREFSMAN->m_iGradeMissWeight, PREFSMAN->m_iGradeWeightMiss,
PREFSMAN->m_iGradeBooWeight, PREFSMAN->m_iGradeWeightBoo,
PREFSMAN->m_iGradeGoodWeight, PREFSMAN->m_iGradeWeightGood,
PREFSMAN->m_iGradeGreatWeight, PREFSMAN->m_iGradeWeightGreat,
PREFSMAN->m_iGradePerfectWeight, PREFSMAN->m_iGradeWeightPerfect,
PREFSMAN->m_iGradeMarvelousWeight, PREFSMAN->m_iGradeWeightMarvelous,
}; };
int HoldScoreValues[NUM_HOLD_NOTE_SCORES] = int HoldScoreValues[NUM_HOLD_NOTE_SCORES] =
{ {
0, 0,
PREFSMAN->m_iGradeNGWeight, PREFSMAN->m_iGradeWeightNG,
PREFSMAN->m_iGradeOKWeight, PREFSMAN->m_iGradeWeightOK,
}; };
float Possible = 0, Actual = 0; float Possible = 0, Actual = 0;
@@ -178,48 +178,29 @@ Grade StageStats::GetGrade( PlayerNumber pn ) const
Possible += iHoldNoteScores[pn][i] * HoldScoreValues[HNS_OK]; Possible += iHoldNoteScores[pn][i] * HoldScoreValues[HNS_OK];
} }
float fPercentDancePoints = Actual / Possible; float fPercent = Actual / Possible;
fPercentDancePoints = max( 0.f, fPercentDancePoints ); LOG->Trace( "GetGrade: Actual: %f, Possible: %f, Percent: %f", Actual, Possible, fPercent );
LOG->Trace( "GetGrade: Actual: %f, Possible: %f, Percent: %f", Actual, Possible, fPercentDancePoints );
/* check for "AAAA". Check DP == 100%: if we're using eg. "LITTLE", we might have all // calculate grade
* 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;
if( PREFSMAN->m_bGradeTier2IsAllPerfects && #define ROUNDING_ERROR 0.00001f
fPercentDancePoints > .9999 && Grade grade = (Grade)(NUM_GRADE_TIERS-1); // lowest non-failing grade
for( int g=0; g<NUM_GRADES; g++ )
if( fPercent >= PREFSMAN->m_fGradePercentTier[g]-ROUNDING_ERROR )
grade = (Grade)g;
if( PREFSMAN->m_bGradeTier02IsAllPerfects &&
iTapNoteScores[pn][TNS_PERFECT] > 0 && iTapNoteScores[pn][TNS_PERFECT] > 0 &&
iTapNoteScores[pn][TNS_GREAT] == 0 && iTapNoteScores[pn][TNS_GREAT] == 0 &&
iTapNoteScores[pn][TNS_GOOD] == 0 && iTapNoteScores[pn][TNS_GOOD] == 0 &&
iTapNoteScores[pn][TNS_BOO] == 0 && iTapNoteScores[pn][TNS_BOO] == 0 &&
iTapNoteScores[pn][TNS_MISS] == 0 && iTapNoteScores[pn][TNS_MISS] == 0 &&
iTapNoteScores[pn][TNS_HIT_MINE] == 0 &&
iHoldNoteScores[pn][HNS_NG] == 0 ) iHoldNoteScores[pn][HNS_NG] == 0 )
return GRADE_TIER_2; return GRADE_TIER_2;
return grade;
// 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<NUM_GRADE_TIERS; g++ )
if( fPercentDancePoints >= PREFSMAN->m_fGradePercentTier[g] )
return (Grade)(GRADE_TIER_1+g);
return (Grade)(GRADE_TIER_1+NUM_GRADE_TIERS-1);
} }
bool StageStats::OnePassed() const bool StageStats::OnePassed() const