mirror of
https://github.com/ppy/osu.git
synced 2025-02-06 04:53:06 +08:00
Simplify standardized scoring to BasePortion (raw scoring) + ComboPortion (highest combo)
This commit is contained in:
parent
3619f7c1eb
commit
ba3e44cd71
@ -89,8 +89,8 @@ namespace osu.Game.Rulesets.Mania.Scoring
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private double hpMultiplier = 1;
|
private double hpMultiplier = 1;
|
||||||
|
|
||||||
protected override double ComboPortion => 0.2f;
|
protected override double BasePortion => 0.8;
|
||||||
protected override double AccuracyPortion => 0.8f;
|
protected override double ComboPortion => 0.2;
|
||||||
|
|
||||||
public ManiaScoreProcessor()
|
public ManiaScoreProcessor()
|
||||||
{
|
{
|
||||||
|
@ -16,8 +16,8 @@ namespace osu.Game.Rulesets.Osu.Scoring
|
|||||||
{
|
{
|
||||||
internal class OsuScoreProcessor : ScoreProcessor<OsuHitObject>
|
internal class OsuScoreProcessor : ScoreProcessor<OsuHitObject>
|
||||||
{
|
{
|
||||||
|
protected override double BasePortion => 0.3;
|
||||||
protected override double ComboPortion => 0.7;
|
protected override double ComboPortion => 0.7;
|
||||||
protected override double AccuracyPortion => 0.3;
|
|
||||||
|
|
||||||
public OsuScoreProcessor()
|
public OsuScoreProcessor()
|
||||||
{
|
{
|
||||||
|
@ -55,8 +55,8 @@ namespace osu.Game.Rulesets.Taiko.Scoring
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public override bool HasFailed => Hits == MaxHits && Health.Value <= 0.5;
|
public override bool HasFailed => Hits == MaxHits && Health.Value <= 0.5;
|
||||||
|
|
||||||
|
protected override double BasePortion => 0.8;
|
||||||
protected override double ComboPortion => 0.2;
|
protected override double ComboPortion => 0.2;
|
||||||
protected override double AccuracyPortion => 0.8;
|
|
||||||
|
|
||||||
private double hpIncreaseTick;
|
private double hpIncreaseTick;
|
||||||
private double hpIncreaseGreat;
|
private double hpIncreaseGreat;
|
||||||
|
@ -156,16 +156,17 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
|
|
||||||
protected sealed override bool HasCompleted => Hits == MaxHits;
|
protected sealed override bool HasCompleted => Hits == MaxHits;
|
||||||
|
|
||||||
|
protected virtual double BasePortion => 0.5f;
|
||||||
protected virtual double ComboPortion => 0.5f;
|
protected virtual double ComboPortion => 0.5f;
|
||||||
protected virtual double AccuracyPortion => 0.5f;
|
|
||||||
|
|
||||||
protected int MaxHits { get; private set; }
|
protected int MaxHits { get; private set; }
|
||||||
protected int Hits { get; private set; }
|
protected int Hits { get; private set; }
|
||||||
|
|
||||||
private double maxHighestCombo;
|
private double maxHighestCombo;
|
||||||
private double maxComboScore;
|
|
||||||
private double rollingMaxComboScore;
|
private double maxBaseScore;
|
||||||
private double comboScore;
|
private double rollingMaxBaseScore;
|
||||||
|
private double baseScore;
|
||||||
|
|
||||||
protected ScoreProcessor()
|
protected ScoreProcessor()
|
||||||
{
|
{
|
||||||
@ -216,8 +217,8 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
comboScore += judgement.NumericResult;
|
baseScore += judgement.NumericResult;
|
||||||
rollingMaxComboScore += judgement.MaxNumericResult;
|
rollingMaxBaseScore += judgement.MaxNumericResult;
|
||||||
}
|
}
|
||||||
else if (judgement.IsHit)
|
else if (judgement.IsHit)
|
||||||
bonusScore += judgement.NumericResult;
|
bonusScore += judgement.NumericResult;
|
||||||
@ -225,20 +226,16 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
if (judgement.AffectsAccuracy)
|
if (judgement.AffectsAccuracy)
|
||||||
Hits++;
|
Hits++;
|
||||||
|
|
||||||
if (rollingMaxComboScore != 0)
|
if (rollingMaxBaseScore != 0)
|
||||||
Accuracy.Value = comboScore / rollingMaxComboScore;
|
Accuracy.Value = baseScore / rollingMaxBaseScore;
|
||||||
|
|
||||||
switch (Mode.Value)
|
switch (Mode.Value)
|
||||||
{
|
{
|
||||||
case ScoringMode.Standardised:
|
case ScoringMode.Standardised:
|
||||||
TotalScore.Value =
|
TotalScore.Value = max_score * (BasePortion * baseScore / maxBaseScore + ComboPortion * HighestCombo / maxHighestCombo) + bonusScore;
|
||||||
max_score *
|
|
||||||
(ComboPortion * (comboScore * Math.Log(HighestCombo + 1, 2)) / (maxComboScore * Math.Log(maxHighestCombo + 1, 2))
|
|
||||||
+ AccuracyPortion * Accuracy)
|
|
||||||
+ bonusScore;
|
|
||||||
break;
|
break;
|
||||||
case ScoringMode.Exponential:
|
case ScoringMode.Exponential:
|
||||||
TotalScore.Value = (comboScore + bonusScore) * Math.Log(HighestCombo + 1, 2);
|
TotalScore.Value = (baseScore + bonusScore) * Math.Log(HighestCombo + 1, 2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -249,14 +246,14 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
{
|
{
|
||||||
MaxHits = Hits;
|
MaxHits = Hits;
|
||||||
maxHighestCombo = HighestCombo;
|
maxHighestCombo = HighestCombo;
|
||||||
maxComboScore = comboScore;
|
maxBaseScore = baseScore;
|
||||||
}
|
}
|
||||||
|
|
||||||
base.Reset(storeResults);
|
base.Reset(storeResults);
|
||||||
|
|
||||||
Hits = 0;
|
Hits = 0;
|
||||||
comboScore = 0;
|
baseScore = 0;
|
||||||
rollingMaxComboScore = 0;
|
rollingMaxBaseScore = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user