diff --git a/osu.Game.Rulesets.Catch/Scoring/CatchScoreProcessor.cs b/osu.Game.Rulesets.Catch/Scoring/CatchScoreProcessor.cs index 5e33dd59b1..e1fda1a7b3 100644 --- a/osu.Game.Rulesets.Catch/Scoring/CatchScoreProcessor.cs +++ b/osu.Game.Rulesets.Catch/Scoring/CatchScoreProcessor.cs @@ -43,6 +43,6 @@ namespace osu.Game.Rulesets.Catch.Scoring Health.Value += Math.Max(result.Judgement.HealthIncreaseFor(result) - hpDrainRate, 0) * harshness; } - protected override HitWindows CreateHitWindows() => new CatchHitWindows(); + public override HitWindows CreateHitWindows() => new CatchHitWindows(); } } diff --git a/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs b/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs index b94b64fa36..cf3d0734fb 100644 --- a/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs +++ b/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs @@ -159,6 +159,6 @@ namespace osu.Game.Rulesets.Mania.Scoring } } - protected override HitWindows CreateHitWindows() => new ManiaHitWindows(); + public override HitWindows CreateHitWindows() => new ManiaHitWindows(); } } diff --git a/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs b/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs index 777588d6d7..4f97cc0da5 100644 --- a/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs +++ b/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs @@ -74,6 +74,6 @@ namespace osu.Game.Rulesets.Osu.Scoring protected override JudgementResult CreateResult(Judgement judgement) => new OsuJudgementResult(judgement); - protected override HitWindows CreateHitWindows() => new OsuHitWindows(); + public override HitWindows CreateHitWindows() => new OsuHitWindows(); } } diff --git a/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs b/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs index f7638a8122..73cd9ba821 100644 --- a/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs +++ b/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs @@ -67,6 +67,6 @@ namespace osu.Game.Rulesets.Taiko.Scoring Health.Value = 0; } - protected override HitWindows CreateHitWindows() => new TaikoHitWindows(); + public override HitWindows CreateHitWindows() => new TaikoHitWindows(); } } diff --git a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs index 53c4d6fa70..45f2cbd7c8 100644 --- a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs +++ b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs @@ -63,7 +63,7 @@ namespace osu.Game.Rulesets.Scoring /// /// Create a for this processor. /// - protected virtual HitWindows CreateHitWindows() => new HitWindows(); + public virtual HitWindows CreateHitWindows() => new HitWindows(); /// /// The current rank. diff --git a/osu.Game/Scoring/Legacy/LegacyScoreParser.cs b/osu.Game/Scoring/Legacy/LegacyScoreParser.cs index e43be257c4..f89f8e80bf 100644 --- a/osu.Game/Scoring/Legacy/LegacyScoreParser.cs +++ b/osu.Game/Scoring/Legacy/LegacyScoreParser.cs @@ -57,12 +57,32 @@ namespace osu.Game.Scoring.Legacy var countKatu = (int)sr.ReadUInt16(); var countMiss = (int)sr.ReadUInt16(); - score.ScoreInfo.Statistics[HitResult.Great] = count300; - score.ScoreInfo.Statistics[HitResult.Good] = count100; - score.ScoreInfo.Statistics[HitResult.Meh] = count50; - score.ScoreInfo.Statistics[HitResult.Perfect] = countGeki; - score.ScoreInfo.Statistics[HitResult.Ok] = countKatu; - score.ScoreInfo.Statistics[HitResult.Miss] = countMiss; + switch (currentRuleset.LegacyID) + { + case 0: + score.ScoreInfo.Statistics[HitResult.Great] = count300; + score.ScoreInfo.Statistics[HitResult.Good] = count100; + score.ScoreInfo.Statistics[HitResult.Meh] = count50; + score.ScoreInfo.Statistics[HitResult.Miss] = countMiss; + break; + case 1: + score.ScoreInfo.Statistics[HitResult.Great] = count300; + score.ScoreInfo.Statistics[HitResult.Good] = count100; + score.ScoreInfo.Statistics[HitResult.Miss] = countMiss; + break; + case 2: + score.ScoreInfo.Statistics[HitResult.Perfect] = count300; + score.ScoreInfo.Statistics[HitResult.Miss] = countMiss; + break; + case 3: + score.ScoreInfo.Statistics[HitResult.Perfect] = countGeki; + score.ScoreInfo.Statistics[HitResult.Great] = count300; + score.ScoreInfo.Statistics[HitResult.Good] = countKatu; + score.ScoreInfo.Statistics[HitResult.Ok] = count100; + score.ScoreInfo.Statistics[HitResult.Meh] = count50; + score.ScoreInfo.Statistics[HitResult.Miss] = countMiss; + break; + } score.ScoreInfo.TotalScore = sr.ReadInt32(); score.ScoreInfo.MaxCombo = sr.ReadUInt16(); @@ -116,12 +136,12 @@ namespace osu.Game.Scoring.Legacy protected void CalculateAccuracy(ScoreInfo score) { - int countMiss = score.Statistics[HitResult.Miss]; - int count50 = score.Statistics[HitResult.Meh]; - int count100 = score.Statistics[HitResult.Good]; - int count300 = score.Statistics[HitResult.Great]; - int countGeki = score.Statistics[HitResult.Perfect]; - int countKatu = score.Statistics[HitResult.Ok]; + score.Statistics.TryGetValue(HitResult.Miss, out int countMiss); + score.Statistics.TryGetValue(HitResult.Meh, out int count50); + score.Statistics.TryGetValue(HitResult.Good, out int count100); + score.Statistics.TryGetValue(HitResult.Great, out int count300); + score.Statistics.TryGetValue(HitResult.Perfect, out int countGeki); + score.Statistics.TryGetValue(HitResult.Ok, out int countKatu); switch (score.Ruleset.ID) {