mirror of
https://github.com/ppy/osu.git
synced 2024-11-13 16:47:46 +08:00
Add method to retrieve legacy score multiplier
This commit is contained in:
parent
b4b7a7ea5e
commit
da2a4681d9
@ -2,10 +2,13 @@
|
|||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Rulesets.Catch.Mods;
|
||||||
using osu.Game.Rulesets.Catch.Objects;
|
using osu.Game.Rulesets.Catch.Objects;
|
||||||
using osu.Game.Rulesets.Judgements;
|
using osu.Game.Rulesets.Judgements;
|
||||||
|
using osu.Game.Rulesets.Mods;
|
||||||
using osu.Game.Rulesets.Objects;
|
using osu.Game.Rulesets.Objects;
|
||||||
using osu.Game.Rulesets.Objects.Types;
|
using osu.Game.Rulesets.Objects.Types;
|
||||||
using osu.Game.Rulesets.Scoring;
|
using osu.Game.Rulesets.Scoring;
|
||||||
@ -137,5 +140,53 @@ namespace osu.Game.Rulesets.Catch.Difficulty
|
|||||||
if (increaseCombo)
|
if (increaseCombo)
|
||||||
combo++;
|
combo++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double GetLegacyScoreMultiplier(IReadOnlyList<Mod> mods, LegacyBeatmapConversionDifficultyInfo difficulty)
|
||||||
|
{
|
||||||
|
bool scoreV2 = mods.Any(m => m is ModScoreV2);
|
||||||
|
|
||||||
|
double multiplier = 1.0;
|
||||||
|
|
||||||
|
foreach (var mod in mods)
|
||||||
|
{
|
||||||
|
switch (mod)
|
||||||
|
{
|
||||||
|
case CatchModNoFail:
|
||||||
|
multiplier *= scoreV2 ? 1.0 : 0.5;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CatchModEasy:
|
||||||
|
multiplier *= 0.5;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CatchModHalfTime:
|
||||||
|
case CatchModDaycore:
|
||||||
|
multiplier *= 0.3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CatchModHidden:
|
||||||
|
multiplier *= scoreV2 ? 1.0 : 1.06;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CatchModHardRock:
|
||||||
|
multiplier *= 1.12;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CatchModDoubleTime:
|
||||||
|
case CatchModNightcore:
|
||||||
|
multiplier *= 1.06;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CatchModFlashlight:
|
||||||
|
multiplier *= 1.12;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CatchModRelax:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return multiplier;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Rulesets.Mania.Beatmaps;
|
||||||
|
using osu.Game.Rulesets.Mania.Mods;
|
||||||
|
using osu.Game.Rulesets.Mods;
|
||||||
using osu.Game.Rulesets.Scoring.Legacy;
|
using osu.Game.Rulesets.Scoring.Legacy;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Mania.Difficulty
|
namespace osu.Game.Rulesets.Mania.Difficulty
|
||||||
@ -12,5 +17,50 @@ namespace osu.Game.Rulesets.Mania.Difficulty
|
|||||||
{
|
{
|
||||||
return new LegacyScoreAttributes { ComboScore = 1000000 };
|
return new LegacyScoreAttributes { ComboScore = 1000000 };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double GetLegacyScoreMultiplier(IReadOnlyList<Mod> mods, LegacyBeatmapConversionDifficultyInfo difficulty)
|
||||||
|
{
|
||||||
|
bool scoreV2 = mods.Any(m => m is ModScoreV2);
|
||||||
|
|
||||||
|
double multiplier = 1.0;
|
||||||
|
|
||||||
|
foreach (var mod in mods)
|
||||||
|
{
|
||||||
|
switch (mod)
|
||||||
|
{
|
||||||
|
case ManiaModNoFail:
|
||||||
|
multiplier *= scoreV2 ? 1.0 : 0.5;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ManiaModEasy:
|
||||||
|
multiplier *= 0.5;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ManiaModHalfTime:
|
||||||
|
case ManiaModDaycore:
|
||||||
|
multiplier *= 0.5;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (new ManiaRuleset().RulesetInfo.Equals(difficulty.SourceRuleset))
|
||||||
|
return multiplier;
|
||||||
|
|
||||||
|
// Apply key mod multipliers.
|
||||||
|
|
||||||
|
int originalColumns = ManiaBeatmapConverter.GetColumnCount(difficulty);
|
||||||
|
int actualColumns = originalColumns;
|
||||||
|
|
||||||
|
actualColumns = mods.OfType<ManiaKeyMod>().SingleOrDefault()?.KeyCount ?? actualColumns;
|
||||||
|
if (mods.Any(m => m is ManiaModDualStages))
|
||||||
|
actualColumns *= 2;
|
||||||
|
|
||||||
|
if (actualColumns > originalColumns)
|
||||||
|
multiplier *= 0.9;
|
||||||
|
else if (actualColumns < originalColumns)
|
||||||
|
multiplier *= 0.9 - 0.04 * (originalColumns - actualColumns);
|
||||||
|
|
||||||
|
return multiplier;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,14 @@
|
|||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Rulesets.Judgements;
|
using osu.Game.Rulesets.Judgements;
|
||||||
|
using osu.Game.Rulesets.Mods;
|
||||||
using osu.Game.Rulesets.Objects;
|
using osu.Game.Rulesets.Objects;
|
||||||
using osu.Game.Rulesets.Objects.Types;
|
using osu.Game.Rulesets.Objects.Types;
|
||||||
|
using osu.Game.Rulesets.Osu.Mods;
|
||||||
using osu.Game.Rulesets.Osu.Objects;
|
using osu.Game.Rulesets.Osu.Objects;
|
||||||
using osu.Game.Rulesets.Scoring;
|
using osu.Game.Rulesets.Scoring;
|
||||||
using osu.Game.Rulesets.Scoring.Legacy;
|
using osu.Game.Rulesets.Scoring.Legacy;
|
||||||
@ -174,5 +177,58 @@ namespace osu.Game.Rulesets.Osu.Difficulty
|
|||||||
if (increaseCombo)
|
if (increaseCombo)
|
||||||
combo++;
|
combo++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double GetLegacyScoreMultiplier(IReadOnlyList<Mod> mods, LegacyBeatmapConversionDifficultyInfo difficulty)
|
||||||
|
{
|
||||||
|
bool scoreV2 = mods.Any(m => m is ModScoreV2);
|
||||||
|
|
||||||
|
double multiplier = 1.0;
|
||||||
|
|
||||||
|
foreach (var mod in mods)
|
||||||
|
{
|
||||||
|
switch (mod)
|
||||||
|
{
|
||||||
|
case OsuModNoFail:
|
||||||
|
multiplier *= scoreV2 ? 1.0 : 0.5;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OsuModEasy:
|
||||||
|
multiplier *= 0.5;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OsuModHalfTime:
|
||||||
|
case OsuModDaycore:
|
||||||
|
multiplier *= 0.3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OsuModHidden:
|
||||||
|
multiplier *= 1.06;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OsuModHardRock:
|
||||||
|
multiplier *= scoreV2 ? 1.10 : 1.06;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OsuModDoubleTime:
|
||||||
|
case OsuModNightcore:
|
||||||
|
multiplier *= scoreV2 ? 1.20 : 1.12;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OsuModFlashlight:
|
||||||
|
multiplier *= 1.12;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OsuModSpunOut:
|
||||||
|
multiplier *= 0.9;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OsuModRelax:
|
||||||
|
case OsuModAutopilot:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return multiplier;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,13 +2,16 @@
|
|||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Rulesets.Judgements;
|
using osu.Game.Rulesets.Judgements;
|
||||||
|
using osu.Game.Rulesets.Mods;
|
||||||
using osu.Game.Rulesets.Objects;
|
using osu.Game.Rulesets.Objects;
|
||||||
using osu.Game.Rulesets.Objects.Types;
|
using osu.Game.Rulesets.Objects.Types;
|
||||||
using osu.Game.Rulesets.Scoring;
|
using osu.Game.Rulesets.Scoring;
|
||||||
using osu.Game.Rulesets.Scoring.Legacy;
|
using osu.Game.Rulesets.Scoring.Legacy;
|
||||||
|
using osu.Game.Rulesets.Taiko.Mods;
|
||||||
using osu.Game.Rulesets.Taiko.Objects;
|
using osu.Game.Rulesets.Taiko.Objects;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Taiko.Difficulty
|
namespace osu.Game.Rulesets.Taiko.Difficulty
|
||||||
@ -194,5 +197,47 @@ namespace osu.Game.Rulesets.Taiko.Difficulty
|
|||||||
if (increaseCombo)
|
if (increaseCombo)
|
||||||
combo++;
|
combo++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double GetLegacyScoreMultiplier(IReadOnlyList<Mod> mods, LegacyBeatmapConversionDifficultyInfo difficulty)
|
||||||
|
{
|
||||||
|
bool scoreV2 = mods.Any(m => m is ModScoreV2);
|
||||||
|
|
||||||
|
double multiplier = 1.0;
|
||||||
|
|
||||||
|
foreach (var mod in mods)
|
||||||
|
{
|
||||||
|
switch (mod)
|
||||||
|
{
|
||||||
|
case TaikoModNoFail:
|
||||||
|
multiplier *= scoreV2 ? 1.0 : 0.5;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TaikoModEasy:
|
||||||
|
multiplier *= 0.5;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TaikoModHalfTime:
|
||||||
|
case TaikoModDaycore:
|
||||||
|
multiplier *= 0.3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TaikoModHidden:
|
||||||
|
case TaikoModHardRock:
|
||||||
|
multiplier *= 1.06;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TaikoModDoubleTime:
|
||||||
|
case TaikoModNightcore:
|
||||||
|
case TaikoModFlashlight:
|
||||||
|
multiplier *= 1.12;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TaikoModRelax:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return multiplier;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Rulesets.Mods;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Scoring.Legacy
|
namespace osu.Game.Rulesets.Scoring.Legacy
|
||||||
{
|
{
|
||||||
@ -16,5 +18,13 @@ namespace osu.Game.Rulesets.Scoring.Legacy
|
|||||||
/// <param name="workingBeatmap">The working beatmap.</param>
|
/// <param name="workingBeatmap">The working beatmap.</param>
|
||||||
/// <param name="playableBeatmap">A playable version of the beatmap for the ruleset.</param>
|
/// <param name="playableBeatmap">A playable version of the beatmap for the ruleset.</param>
|
||||||
LegacyScoreAttributes Simulate(IWorkingBeatmap workingBeatmap, IBeatmap playableBeatmap);
|
LegacyScoreAttributes Simulate(IWorkingBeatmap workingBeatmap, IBeatmap playableBeatmap);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the legacy score multiplier for the mods. This is only used during legacy score conversion.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="mods">The mods.</param>
|
||||||
|
/// <param name="difficulty">Extra difficulty parameters.</param>
|
||||||
|
/// <returns>The legacy multiplier.</returns>
|
||||||
|
double GetLegacyScoreMultiplier(IReadOnlyList<Mod> mods, LegacyBeatmapConversionDifficultyInfo difficulty);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user