diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index b3c145ae26..3d903e7210 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -1349,6 +1349,30 @@ FrameOverP2Y= FrameOverP2OnCommand= FrameOverP2OffCommand= +[ScoreKeeperNormal] +PercentScoreWeightCheckpointHit=0 +PercentScoreWeightCheckpointMiss=0 +PercentScoreWeightHeld=3 +PercentScoreWeightHitMine=-2 +PercentScoreWeightLetGo=0 +PercentScoreWeightMiss=0 +PercentScoreWeightW1=3 +PercentScoreWeightW2=2 +PercentScoreWeightW3=1 +PercentScoreWeightW4=0 +PercentScoreWeightW5=0 +GradeWeightCheckpointHit=0 +GradeWeightCheckpointMiss=0 +GradeWeightHeld=6 +GradeWeightHitMine=-8 +GradeWeightLetGo=0 +GradeWeightMiss=-8 +GradeWeightW1=2 +GradeWeightW2=2 +GradeWeightW3=1 +GradeWeightW4=0 +GradeWeightW5=-4 + [ScoreKeeperRave] AttackDurationSeconds=3.0 diff --git a/src/ScoreKeeperNormal.cpp b/src/ScoreKeeperNormal.cpp index 2ff68dd11b..f4e92ac01c 100644 --- a/src/ScoreKeeperNormal.cpp +++ b/src/ScoreKeeperNormal.cpp @@ -21,51 +21,11 @@ #include "TimingData.h" #include "NoteDataWithScoring.h" +static RString PercentScoreWeightName( size_t i ) { return "PercentScoreWeight" + ScoreEventToString( (ScoreEvent)i ); } +static RString GradeWeightName( size_t i ) { return "GradeWeight" + ScoreEventToString( (ScoreEvent)i ); } -void PercentScoreWeightInit( size_t /*ScoreEvent*/ i, RString &sNameOut, int &defaultValueOut ) -{ - sNameOut = "PercentScoreWeight" + ScoreEventToString( (ScoreEvent)i ); - switch( i ) - { - default: - FAIL_M(ssprintf("Invalid ScoreEvent: %i", i)); - case SE_W1: defaultValueOut = 3; break; - case SE_W2: defaultValueOut = 2; break; - case SE_W3: defaultValueOut = 1; break; - case SE_W4: defaultValueOut = 0; break; - case SE_W5: defaultValueOut = 0; break; - case SE_Miss: defaultValueOut = 0; break; - case SE_HitMine: defaultValueOut = -2; break; - case SE_CheckpointHit: defaultValueOut = 0; break; - case SE_CheckpointMiss: defaultValueOut = 0; break; - case SE_Held: defaultValueOut = 3; break; - case SE_LetGo: defaultValueOut = 0; break; - } -} - -void GradeWeightInit( size_t /*ScoreEvent*/ i, RString &sNameOut, int &defaultValueOut ) -{ - sNameOut = "GradeWeight" + ScoreEventToString( (ScoreEvent)i ); - switch( i ) - { - default: - FAIL_M(ssprintf("Invalid ScoreEvent: %i", i)); - case SE_W1: defaultValueOut = 2; break; - case SE_W2: defaultValueOut = 2; break; - case SE_W3: defaultValueOut = 1; break; - case SE_W4: defaultValueOut = 0; break; - case SE_W5: defaultValueOut = -4; break; - case SE_Miss: defaultValueOut = -8; break; - case SE_HitMine: defaultValueOut = -8; break; - case SE_CheckpointHit: defaultValueOut = 0; break; - case SE_CheckpointMiss: defaultValueOut = 0; break; - case SE_Held: defaultValueOut = 6; break; - case SE_LetGo: defaultValueOut = 0; break; - } -} - -static Preference1D g_iPercentScoreWeight( PercentScoreWeightInit, NUM_ScoreEvent ); -static Preference1D g_iGradeWeight( GradeWeightInit, NUM_ScoreEvent ); +static ThemeMetric1D g_iPercentScoreWeight("ScoreKeeperNormal", PercentScoreWeightName, NUM_ScoreEvent ); +static ThemeMetric1D g_iGradeWeight("ScoreKeeperNormal", GradeWeightName, NUM_ScoreEvent ); ScoreKeeperNormal::ScoreKeeperNormal( PlayerState *pPlayerState, PlayerStageStats *pPlayerStageStats ): ScoreKeeper(pPlayerState, pPlayerStageStats) @@ -731,16 +691,16 @@ int ScoreKeeperNormal::TapNoteScoreToDancePoints( TapNoteScore tns, bool bBeginn switch( tns ) { DEFAULT_FAIL( tns ); - case TNS_None: iWeight = 0; break; - case TNS_HitMine: iWeight = g_iPercentScoreWeight[SE_HitMine]; break; - case TNS_Miss: iWeight = g_iPercentScoreWeight[SE_Miss]; break; - case TNS_W5: iWeight = g_iPercentScoreWeight[SE_W5]; break; - case TNS_W4: iWeight = g_iPercentScoreWeight[SE_W4]; break; - case TNS_W3: iWeight = g_iPercentScoreWeight[SE_W3]; break; - case TNS_W2: iWeight = g_iPercentScoreWeight[SE_W2]; break; - case TNS_W1: iWeight = g_iPercentScoreWeight[SE_W1]; break; - case TNS_CheckpointHit: iWeight = g_iPercentScoreWeight[SE_CheckpointHit]; break; - case TNS_CheckpointMiss:iWeight = g_iPercentScoreWeight[SE_CheckpointMiss]; break; + case TNS_None: iWeight = 0; break; + case TNS_HitMine: iWeight = g_iPercentScoreWeight.GetValue(SE_HitMine); break; + case TNS_Miss: iWeight = g_iPercentScoreWeight.GetValue(SE_Miss); break; + case TNS_W5: iWeight = g_iPercentScoreWeight.GetValue(SE_W5); break; + case TNS_W4: iWeight = g_iPercentScoreWeight.GetValue(SE_W4); break; + case TNS_W3: iWeight = g_iPercentScoreWeight.GetValue(SE_W3); break; + case TNS_W2: iWeight = g_iPercentScoreWeight.GetValue(SE_W2); break; + case TNS_W1: iWeight = g_iPercentScoreWeight.GetValue(SE_W1); break; + case TNS_CheckpointHit: iWeight = g_iPercentScoreWeight.GetValue(SE_CheckpointHit); break; + case TNS_CheckpointMiss:iWeight = g_iPercentScoreWeight.GetValue(SE_CheckpointMiss); break; } if( bBeginner && PREFSMAN->m_bMercifulBeginner ) iWeight = max( 0, iWeight ); @@ -753,9 +713,9 @@ int ScoreKeeperNormal::HoldNoteScoreToDancePoints( HoldNoteScore hns, bool bBegi switch( hns ) { DEFAULT_FAIL( hns ); - case HNS_None: iWeight = 0; break; - case HNS_LetGo: iWeight = g_iPercentScoreWeight[SE_LetGo]; break; - case HNS_Held: iWeight = g_iPercentScoreWeight[SE_Held]; break; + case HNS_None: iWeight = 0; break; + case HNS_LetGo: iWeight = g_iPercentScoreWeight.GetValue(SE_LetGo); break; + case HNS_Held: iWeight = g_iPercentScoreWeight.GetValue(SE_Held); break; } if( bBeginner && PREFSMAN->m_bMercifulBeginner ) iWeight = max( 0, iWeight ); @@ -773,17 +733,17 @@ int ScoreKeeperNormal::TapNoteScoreToGradePoints( TapNoteScore tns, bool bBeginn switch( tns ) { DEFAULT_FAIL( tns ); - case TNS_None: iWeight = 0; break; - case TNS_AvoidMine: iWeight = 0; break; - case TNS_HitMine: iWeight = g_iGradeWeight[SE_HitMine]; break; - case TNS_Miss: iWeight = g_iGradeWeight[SE_Miss]; break; - case TNS_W5: iWeight = g_iGradeWeight[SE_W5]; break; - case TNS_W4: iWeight = g_iGradeWeight[SE_W4]; break; - case TNS_W3: iWeight = g_iGradeWeight[SE_W3]; break; - case TNS_W2: iWeight = g_iGradeWeight[SE_W2]; break; - case TNS_W1: iWeight = g_iGradeWeight[SE_W1]; break; - case TNS_CheckpointHit: iWeight = g_iGradeWeight[SE_CheckpointHit]; break; - case TNS_CheckpointMiss:iWeight = g_iGradeWeight[SE_CheckpointMiss]; break; + case TNS_None: iWeight = 0; break; + case TNS_AvoidMine: iWeight = 0; break; + case TNS_HitMine: iWeight = g_iGradeWeight.GetValue(SE_HitMine); break; + case TNS_Miss: iWeight = g_iGradeWeight.GetValue(SE_Miss); break; + case TNS_W5: iWeight = g_iGradeWeight.GetValue(SE_W5); break; + case TNS_W4: iWeight = g_iGradeWeight.GetValue(SE_W4); break; + case TNS_W3: iWeight = g_iGradeWeight.GetValue(SE_W3); break; + case TNS_W2: iWeight = g_iGradeWeight.GetValue(SE_W2); break; + case TNS_W1: iWeight = g_iGradeWeight.GetValue(SE_W1); break; + case TNS_CheckpointHit: iWeight = g_iGradeWeight.GetValue(SE_CheckpointHit); break; + case TNS_CheckpointMiss:iWeight = g_iGradeWeight.GetValue(SE_CheckpointMiss); break; } if( bBeginner && PREFSMAN->m_bMercifulBeginner ) iWeight = max( 0, iWeight ); @@ -796,9 +756,9 @@ int ScoreKeeperNormal::HoldNoteScoreToGradePoints( HoldNoteScore hns, bool bBegi switch( hns ) { DEFAULT_FAIL( hns ); - case HNS_None: iWeight = 0; break; - case HNS_LetGo: iWeight = g_iGradeWeight[SE_LetGo]; break; - case HNS_Held: iWeight = g_iGradeWeight[SE_Held]; break; + case HNS_None: iWeight = 0; break; + case HNS_LetGo: iWeight = g_iGradeWeight.GetValue(SE_LetGo); break; + case HNS_Held: iWeight = g_iGradeWeight.GetValue(SE_Held); break; } if( bBeginner && PREFSMAN->m_bMercifulBeginner ) iWeight = max( 0, iWeight );