add pref "JudgeWindowAdd" to account for differences in input sampling rate

This commit is contained in:
Chris Danford
2004-06-27 00:03:06 +00:00
parent 6ea5cb233c
commit 3818cab51d
3 changed files with 31 additions and 29 deletions
+25 -27
View File
@@ -50,6 +50,7 @@ CachedThemeMetricB HOLD_JUDGMENTS_UNDER_FIELD ("Player","HoldJudgmentsUnderField
static const float StepSearchDistanceBackwards = 1.0f; static const float StepSearchDistanceBackwards = 1.0f;
static const float StepSearchDistanceForwards = 1.0f; static const float StepSearchDistanceForwards = 1.0f;
#define ADJUSTED_WINDOW( judge ) ((PREFSMAN->m_fJudgeWindowSeconds##judge * PREFSMAN->m_fJudgeWindowScale) + PREFSMAN->m_fJudgeWindowAdd)
PlayerMinus::PlayerMinus() PlayerMinus::PlayerMinus()
@@ -375,7 +376,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_fJudgeWindowSecondsOK; fLife -= fDeltaTime/ADJUSTED_WINDOW(OK);
fLife = max( fLife, 0 ); // clamp fLife = max( fLife, 0 ); // clamp
// } // }
} }
@@ -663,7 +664,6 @@ void PlayerMinus::Step( int col, RageTimer tm )
// fStepSeconds, fMusicSeconds, fNoteOffset ); // fStepSeconds, fMusicSeconds, fNoteOffset );
const float fSecondsFromPerfect = fabsf( fNoteOffset ); const float fSecondsFromPerfect = fabsf( fNoteOffset );
float fScaledSecondsFromPerfect = fSecondsFromPerfect / PREFSMAN->m_fJudgeWindowScale;
TapNote tn = GetTapNote(col,iIndexOverlappingNote); TapNote tn = GetTapNote(col,iIndexOverlappingNote);
@@ -680,23 +680,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 */
float fScaledSecondsFromPerfect = fSecondsFromPerfect / PREFSMAN->m_fJudgeWindowScale; if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Marvelous) ) score = TNS_PERFECT;
if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsMarvelous ) score = TNS_PERFECT; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Perfect) ) score = TNS_PERFECT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsPerfect ) score = TNS_PERFECT; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Great) ) score = TNS_PERFECT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGreat ) score = TNS_PERFECT; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Good) ) score = TNS_GOOD;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGood ) score = TNS_GOOD; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Boo) ) 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; if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Marvelous) ) score = TNS_MARVELOUS;
if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsMarvelous ) score = TNS_MARVELOUS; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Perfect) ) score = TNS_PERFECT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsPerfect ) score = TNS_PERFECT; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Great) ) score = TNS_GREAT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGreat ) score = TNS_GREAT; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Good) ) score = TNS_GREAT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGood ) score = TNS_GREAT; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Boo) ) score = TNS_MISS;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsBoo ) score = TNS_MISS;
else score = TNS_NONE; else score = TNS_NONE;
} }
@@ -705,7 +703,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_fJudgeWindowSecondsMine ) if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Mine) )
{ {
m_soundMine.Play(); m_soundMine.Play();
score = TNS_HIT_MINE; score = TNS_HIT_MINE;
@@ -723,7 +721,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_fJudgeWindowSecondsAttack ) if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Attack) )
{ {
m_soundAttackLaunch.Play(); m_soundAttackLaunch.Play();
// put attack in effect // put attack in effect
@@ -749,21 +747,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_fJudgeWindowSecondsMarvelous ) score = TNS_PERFECT; if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Marvelous) ) score = TNS_PERFECT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsPerfect ) score = TNS_PERFECT; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Perfect) ) score = TNS_PERFECT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGreat ) score = TNS_PERFECT; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Great) ) score = TNS_PERFECT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGood ) score = TNS_GOOD; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Good) ) score = TNS_GOOD;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsBoo ) score = TNS_MISS; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Boo) ) 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_fJudgeWindowSecondsMarvelous ) score = TNS_MARVELOUS; if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Marvelous) ) score = TNS_MARVELOUS;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsPerfect ) score = TNS_PERFECT; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Perfect) ) score = TNS_PERFECT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGreat ) score = TNS_GREAT; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Great) ) score = TNS_GREAT;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsGood ) score = TNS_GOOD; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Good) ) score = TNS_GOOD;
else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsBoo ) score = TNS_BOO; else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Boo) ) score = TNS_BOO;
else score = TNS_NONE; else score = TNS_NONE;
} }
} }
@@ -1294,7 +1292,7 @@ void PlayerMinus::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tapScor
float PlayerMinus::GetMaxStepDistanceSeconds() float PlayerMinus::GetMaxStepDistanceSeconds()
{ {
return GAMESTATE->m_SongOptions.m_fMusicRate * PREFSMAN->m_fJudgeWindowSecondsBoo * PREFSMAN->m_fJudgeWindowScale; return GAMESTATE->m_SongOptions.m_fMusicRate * ADJUSTED_WINDOW(Boo);
} }
void PlayerMinus::FadeToFail() void PlayerMinus::FadeToFail()
+5 -2
View File
@@ -57,6 +57,7 @@ void PrefsManager::Init()
m_bEventMode = false; m_bEventMode = false;
m_bAutoPlay = false; m_bAutoPlay = false;
m_fJudgeWindowScale = 1.0f; m_fJudgeWindowScale = 1.0f;
m_fJudgeWindowAdd = 0;
m_fLifeDifficultyScale = 1.0f; m_fLifeDifficultyScale = 1.0f;
m_fJudgeWindowSecondsMarvelous = 0.0225f; m_fJudgeWindowSecondsMarvelous = 0.0225f;
m_fJudgeWindowSecondsPerfect = 0.045f; m_fJudgeWindowSecondsPerfect = 0.045f;
@@ -352,7 +353,7 @@ void PrefsManager::ReadPrefsFromFile( CString sIni )
ini.GetValue( "Options", "EventMode", m_bEventMode ); ini.GetValue( "Options", "EventMode", m_bEventMode );
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", "JudgeWindowAdd", m_fJudgeWindowAdd );
ini.GetValue( "Options", "JudgeWindowSecondsMarvelous", m_fJudgeWindowSecondsMarvelous ); ini.GetValue( "Options", "JudgeWindowSecondsMarvelous", m_fJudgeWindowSecondsMarvelous );
ini.GetValue( "Options", "JudgeWindowSecondsPerfect", m_fJudgeWindowSecondsPerfect ); ini.GetValue( "Options", "JudgeWindowSecondsPerfect", m_fJudgeWindowSecondsPerfect );
ini.GetValue( "Options", "JudgeWindowSecondsGreat", m_fJudgeWindowSecondsGreat ); ini.GetValue( "Options", "JudgeWindowSecondsGreat", m_fJudgeWindowSecondsGreat );
@@ -361,6 +362,7 @@ void PrefsManager::ReadPrefsFromFile( CString sIni )
ini.GetValue( "Options", "JudgeWindowSecondsOK", m_fJudgeWindowSecondsOK ); ini.GetValue( "Options", "JudgeWindowSecondsOK", m_fJudgeWindowSecondsOK );
ini.GetValue( "Options", "JudgeWindowSecondsMine", m_fJudgeWindowSecondsMine ); ini.GetValue( "Options", "JudgeWindowSecondsMine", m_fJudgeWindowSecondsMine );
ini.GetValue( "Options", "JudgeWindowSecondsAttack", m_fJudgeWindowSecondsAttack ); ini.GetValue( "Options", "JudgeWindowSecondsAttack", m_fJudgeWindowSecondsAttack );
ini.GetValue( "Options", "LifeDifficultyScale", m_fLifeDifficultyScale );
ini.GetValue( "Options", "LifeDeltaPercentChangeMarvelous", m_fLifeDeltaPercentChangeMarvelous ); ini.GetValue( "Options", "LifeDeltaPercentChangeMarvelous", m_fLifeDeltaPercentChangeMarvelous );
ini.GetValue( "Options", "LifeDeltaPercentChangePerfect", m_fLifeDeltaPercentChangePerfect ); ini.GetValue( "Options", "LifeDeltaPercentChangePerfect", m_fLifeDeltaPercentChangePerfect );
ini.GetValue( "Options", "LifeDeltaPercentChangeGreat", m_fLifeDeltaPercentChangeGreat ); ini.GetValue( "Options", "LifeDeltaPercentChangeGreat", m_fLifeDeltaPercentChangeGreat );
@@ -584,7 +586,7 @@ void PrefsManager::SaveGlobalPrefsToDisk() const
ini.SetValue( "Options", "EventMode", m_bEventMode ); ini.SetValue( "Options", "EventMode", m_bEventMode );
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", "JudgeWindowAdd", m_fJudgeWindowAdd );
ini.SetValue( "Options", "JudgeWindowSecondsMarvelous", m_fJudgeWindowSecondsMarvelous ); ini.SetValue( "Options", "JudgeWindowSecondsMarvelous", m_fJudgeWindowSecondsMarvelous );
ini.SetValue( "Options", "JudgeWindowSecondsPerfect", m_fJudgeWindowSecondsPerfect ); ini.SetValue( "Options", "JudgeWindowSecondsPerfect", m_fJudgeWindowSecondsPerfect );
ini.SetValue( "Options", "JudgeWindowSecondsGreat", m_fJudgeWindowSecondsGreat ); ini.SetValue( "Options", "JudgeWindowSecondsGreat", m_fJudgeWindowSecondsGreat );
@@ -593,6 +595,7 @@ void PrefsManager::SaveGlobalPrefsToDisk() const
ini.SetValue( "Options", "JudgeWindowSecondsOK", m_fJudgeWindowSecondsOK ); ini.SetValue( "Options", "JudgeWindowSecondsOK", m_fJudgeWindowSecondsOK );
ini.SetValue( "Options", "JudgeWindowSecondsMine", m_fJudgeWindowSecondsMine ); ini.SetValue( "Options", "JudgeWindowSecondsMine", m_fJudgeWindowSecondsMine );
ini.SetValue( "Options", "JudgeWindowSecondsAttack", m_fJudgeWindowSecondsAttack ); ini.SetValue( "Options", "JudgeWindowSecondsAttack", m_fJudgeWindowSecondsAttack );
ini.SetValue( "Options", "LifeDifficultyScale", m_fLifeDifficultyScale );
ini.SetValue( "Options", "LifeDeltaPercentChangeMarvelous", m_fLifeDeltaPercentChangeMarvelous ); ini.SetValue( "Options", "LifeDeltaPercentChangeMarvelous", m_fLifeDeltaPercentChangeMarvelous );
ini.SetValue( "Options", "LifeDeltaPercentChangePerfect", m_fLifeDeltaPercentChangePerfect ); ini.SetValue( "Options", "LifeDeltaPercentChangePerfect", m_fLifeDeltaPercentChangePerfect );
ini.SetValue( "Options", "LifeDeltaPercentChangeGreat", m_fLifeDeltaPercentChangeGreat ); ini.SetValue( "Options", "LifeDeltaPercentChangeGreat", m_fLifeDeltaPercentChangeGreat );
+1
View File
@@ -51,6 +51,7 @@ public:
bool m_bShowDanger; bool m_bShowDanger;
float m_fJudgeWindowScale; float m_fJudgeWindowScale;
float m_fJudgeWindowAdd; // this is useful for compensating for changes in sampling rate between devices
float m_fJudgeWindowSecondsMarvelous; float m_fJudgeWindowSecondsMarvelous;
float m_fJudgeWindowSecondsPerfect; float m_fJudgeWindowSecondsPerfect;
float m_fJudgeWindowSecondsGreat; float m_fJudgeWindowSecondsGreat;