add pref "JudgeWindowAdd" to account for differences in input sampling rate
This commit is contained in:
+25
-27
@@ -50,6 +50,7 @@ CachedThemeMetricB HOLD_JUDGMENTS_UNDER_FIELD ("Player","HoldJudgmentsUnderField
|
||||
static const float StepSearchDistanceBackwards = 1.0f;
|
||||
static const float StepSearchDistanceForwards = 1.0f;
|
||||
|
||||
#define ADJUSTED_WINDOW( judge ) ((PREFSMAN->m_fJudgeWindowSeconds##judge * PREFSMAN->m_fJudgeWindowScale) + PREFSMAN->m_fJudgeWindowAdd)
|
||||
|
||||
|
||||
PlayerMinus::PlayerMinus()
|
||||
@@ -375,7 +376,7 @@ void PlayerMinus::Update( float fDeltaTime )
|
||||
// if( fSongBeat-hn.fStartBeat > GAMESTATE->m_fCurBPS * GetMaxStepDistanceSeconds() )
|
||||
// {
|
||||
// Decrease life
|
||||
fLife -= fDeltaTime/PREFSMAN->m_fJudgeWindowSecondsOK;
|
||||
fLife -= fDeltaTime/ADJUSTED_WINDOW(OK);
|
||||
fLife = max( fLife, 0 ); // clamp
|
||||
// }
|
||||
}
|
||||
@@ -663,7 +664,6 @@ void PlayerMinus::Step( int col, RageTimer tm )
|
||||
// fStepSeconds, fMusicSeconds, fNoteOffset );
|
||||
|
||||
const float fSecondsFromPerfect = fabsf( fNoteOffset );
|
||||
float fScaledSecondsFromPerfect = fSecondsFromPerfect / PREFSMAN->m_fJudgeWindowScale;
|
||||
|
||||
|
||||
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. */
|
||||
/* Ez2 is only perfect / good / miss */
|
||||
float fScaledSecondsFromPerfect = fSecondsFromPerfect / PREFSMAN->m_fJudgeWindowScale;
|
||||
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;
|
||||
if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Marvelous) ) score = TNS_PERFECT;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Perfect) ) score = TNS_PERFECT;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Great) ) score = TNS_PERFECT;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Good) ) score = TNS_GOOD;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Boo) ) 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_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;
|
||||
if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Marvelous) ) score = TNS_MARVELOUS;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Perfect) ) score = TNS_PERFECT;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Great) ) score = TNS_GREAT;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Good) ) score = TNS_GREAT;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Boo) ) score = TNS_MISS;
|
||||
else score = TNS_NONE;
|
||||
}
|
||||
|
||||
@@ -705,7 +703,7 @@ void PlayerMinus::Step( int col, RageTimer tm )
|
||||
{
|
||||
case TAP_MINE:
|
||||
// stepped too close to mine?
|
||||
if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsMine )
|
||||
if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Mine) )
|
||||
{
|
||||
m_soundMine.Play();
|
||||
score = TNS_HIT_MINE;
|
||||
@@ -723,7 +721,7 @@ void PlayerMinus::Step( int col, RageTimer tm )
|
||||
if( IsTapAttack(tn) )
|
||||
{
|
||||
score = TNS_NONE; // don't score this as anything
|
||||
if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowSecondsAttack )
|
||||
if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Attack) )
|
||||
{
|
||||
m_soundAttackLaunch.Play();
|
||||
// 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. */
|
||||
/* Ez2 is only perfect / good / 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;
|
||||
if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Marvelous) ) score = TNS_PERFECT;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Perfect) ) score = TNS_PERFECT;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Great) ) score = TNS_PERFECT;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Good) ) score = TNS_GOOD;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Boo) ) 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_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;
|
||||
if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Marvelous) ) score = TNS_MARVELOUS;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Perfect) ) score = TNS_PERFECT;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Great) ) score = TNS_GREAT;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Good) ) score = TNS_GOOD;
|
||||
else if( fSecondsFromPerfect <= ADJUSTED_WINDOW(Boo) ) score = TNS_BOO;
|
||||
else score = TNS_NONE;
|
||||
}
|
||||
}
|
||||
@@ -1294,7 +1292,7 @@ void PlayerMinus::HandleHoldScore( HoldNoteScore holdScore, TapNoteScore tapScor
|
||||
|
||||
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()
|
||||
|
||||
@@ -57,6 +57,7 @@ void PrefsManager::Init()
|
||||
m_bEventMode = false;
|
||||
m_bAutoPlay = false;
|
||||
m_fJudgeWindowScale = 1.0f;
|
||||
m_fJudgeWindowAdd = 0;
|
||||
m_fLifeDifficultyScale = 1.0f;
|
||||
m_fJudgeWindowSecondsMarvelous = 0.0225f;
|
||||
m_fJudgeWindowSecondsPerfect = 0.045f;
|
||||
@@ -352,7 +353,7 @@ void PrefsManager::ReadPrefsFromFile( CString sIni )
|
||||
ini.GetValue( "Options", "EventMode", m_bEventMode );
|
||||
ini.GetValue( "Options", "AutoPlay", m_bAutoPlay );
|
||||
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", "JudgeWindowSecondsPerfect", m_fJudgeWindowSecondsPerfect );
|
||||
ini.GetValue( "Options", "JudgeWindowSecondsGreat", m_fJudgeWindowSecondsGreat );
|
||||
@@ -361,6 +362,7 @@ void PrefsManager::ReadPrefsFromFile( CString sIni )
|
||||
ini.GetValue( "Options", "JudgeWindowSecondsOK", m_fJudgeWindowSecondsOK );
|
||||
ini.GetValue( "Options", "JudgeWindowSecondsMine", m_fJudgeWindowSecondsMine );
|
||||
ini.GetValue( "Options", "JudgeWindowSecondsAttack", m_fJudgeWindowSecondsAttack );
|
||||
ini.GetValue( "Options", "LifeDifficultyScale", m_fLifeDifficultyScale );
|
||||
ini.GetValue( "Options", "LifeDeltaPercentChangeMarvelous", m_fLifeDeltaPercentChangeMarvelous );
|
||||
ini.GetValue( "Options", "LifeDeltaPercentChangePerfect", m_fLifeDeltaPercentChangePerfect );
|
||||
ini.GetValue( "Options", "LifeDeltaPercentChangeGreat", m_fLifeDeltaPercentChangeGreat );
|
||||
@@ -584,7 +586,7 @@ void PrefsManager::SaveGlobalPrefsToDisk() const
|
||||
ini.SetValue( "Options", "EventMode", m_bEventMode );
|
||||
ini.SetValue( "Options", "AutoPlay", m_bAutoPlay );
|
||||
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", "JudgeWindowSecondsPerfect", m_fJudgeWindowSecondsPerfect );
|
||||
ini.SetValue( "Options", "JudgeWindowSecondsGreat", m_fJudgeWindowSecondsGreat );
|
||||
@@ -593,6 +595,7 @@ void PrefsManager::SaveGlobalPrefsToDisk() const
|
||||
ini.SetValue( "Options", "JudgeWindowSecondsOK", m_fJudgeWindowSecondsOK );
|
||||
ini.SetValue( "Options", "JudgeWindowSecondsMine", m_fJudgeWindowSecondsMine );
|
||||
ini.SetValue( "Options", "JudgeWindowSecondsAttack", m_fJudgeWindowSecondsAttack );
|
||||
ini.SetValue( "Options", "LifeDifficultyScale", m_fLifeDifficultyScale );
|
||||
ini.SetValue( "Options", "LifeDeltaPercentChangeMarvelous", m_fLifeDeltaPercentChangeMarvelous );
|
||||
ini.SetValue( "Options", "LifeDeltaPercentChangePerfect", m_fLifeDeltaPercentChangePerfect );
|
||||
ini.SetValue( "Options", "LifeDeltaPercentChangeGreat", m_fLifeDeltaPercentChangeGreat );
|
||||
|
||||
@@ -51,6 +51,7 @@ public:
|
||||
bool m_bShowDanger;
|
||||
|
||||
float m_fJudgeWindowScale;
|
||||
float m_fJudgeWindowAdd; // this is useful for compensating for changes in sampling rate between devices
|
||||
float m_fJudgeWindowSecondsMarvelous;
|
||||
float m_fJudgeWindowSecondsPerfect;
|
||||
float m_fJudgeWindowSecondsGreat;
|
||||
|
||||
Reference in New Issue
Block a user