1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-05 09:42:54 +08:00

Remove mods from difficulty attributes

This commit is contained in:
minisbett 2024-11-17 18:14:25 +01:00
parent e88dff0c87
commit 6e2f8cf4c2
No known key found for this signature in database
GPG Key ID: 2DB6D529C95A0403
9 changed files with 10 additions and 40 deletions

View File

@ -1,12 +1,10 @@
// 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;
using System.Collections.Generic; using System.Collections.Generic;
using Newtonsoft.Json; using Newtonsoft.Json;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Rulesets.Difficulty; using osu.Game.Rulesets.Difficulty;
using osu.Game.Rulesets.Mods;
namespace osu.Game.Rulesets.Catch.Difficulty namespace osu.Game.Rulesets.Catch.Difficulty
{ {
@ -14,9 +12,6 @@ namespace osu.Game.Rulesets.Catch.Difficulty
{ {
public CatchDifficultyAttributes() { } public CatchDifficultyAttributes() { }
/// <inheritdoc/>
public Mod[] Mods { get; set; } = Array.Empty<Mod>();
/// <inheritdoc/> /// <inheritdoc/>
public double StarRating { get; set; } public double StarRating { get; set; }

View File

@ -33,7 +33,7 @@ namespace osu.Game.Rulesets.Catch.Difficulty
protected override IDifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate) protected override IDifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
{ {
if (beatmap.HitObjects.Count == 0) if (beatmap.HitObjects.Count == 0)
return new CatchDifficultyAttributes { Mods = mods }; return new CatchDifficultyAttributes();
// this is the same as osu!, so there's potential to share the implementation... maybe // this is the same as osu!, so there's potential to share the implementation... maybe
double preempt = IBeatmapDifficultyInfo.DifficultyRange(beatmap.Difficulty.ApproachRate, 1800, 1200, 450) / clockRate; double preempt = IBeatmapDifficultyInfo.DifficultyRange(beatmap.Difficulty.ApproachRate, 1800, 1200, 450) / clockRate;
@ -41,7 +41,6 @@ namespace osu.Game.Rulesets.Catch.Difficulty
CatchDifficultyAttributes attributes = new CatchDifficultyAttributes CatchDifficultyAttributes attributes = new CatchDifficultyAttributes
{ {
StarRating = Math.Sqrt(skills[0].DifficultyValue()) * difficulty_multiplier, StarRating = Math.Sqrt(skills[0].DifficultyValue()) * difficulty_multiplier,
Mods = mods,
ApproachRate = preempt > 1200.0 ? -(preempt - 1800.0) / 120.0 : -(preempt - 1200.0) / 150.0 + 5.0, ApproachRate = preempt > 1200.0 ? -(preempt - 1800.0) / 120.0 : -(preempt - 1200.0) / 150.0 + 5.0,
MaxCombo = beatmap.GetMaxCombo(), MaxCombo = beatmap.GetMaxCombo(),
}; };

View File

@ -1,12 +1,10 @@
// 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;
using System.Collections.Generic; using System.Collections.Generic;
using Newtonsoft.Json; using Newtonsoft.Json;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Rulesets.Difficulty; using osu.Game.Rulesets.Difficulty;
using osu.Game.Rulesets.Mods;
namespace osu.Game.Rulesets.Mania.Difficulty namespace osu.Game.Rulesets.Mania.Difficulty
{ {
@ -14,9 +12,6 @@ namespace osu.Game.Rulesets.Mania.Difficulty
{ {
public ManiaDifficultyAttributes() { } public ManiaDifficultyAttributes() { }
/// <inheritdoc/>
public Mod[] Mods { get; set; } = Array.Empty<Mod>();
/// <inheritdoc/> /// <inheritdoc/>
public double StarRating { get; set; } public double StarRating { get; set; }

View File

@ -41,7 +41,7 @@ namespace osu.Game.Rulesets.Mania.Difficulty
protected override IDifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate) protected override IDifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
{ {
if (beatmap.HitObjects.Count == 0) if (beatmap.HitObjects.Count == 0)
return new ManiaDifficultyAttributes { Mods = mods }; return new ManiaDifficultyAttributes();
HitWindows hitWindows = new ManiaHitWindows(); HitWindows hitWindows = new ManiaHitWindows();
hitWindows.SetDifficulty(beatmap.Difficulty.OverallDifficulty); hitWindows.SetDifficulty(beatmap.Difficulty.OverallDifficulty);
@ -49,7 +49,6 @@ namespace osu.Game.Rulesets.Mania.Difficulty
ManiaDifficultyAttributes attributes = new ManiaDifficultyAttributes ManiaDifficultyAttributes attributes = new ManiaDifficultyAttributes
{ {
StarRating = skills[0].DifficultyValue() * difficulty_multiplier, StarRating = skills[0].DifficultyValue() * difficulty_multiplier,
Mods = mods,
// In osu-stable mania, rate-adjustment mods don't affect the hit window. // In osu-stable mania, rate-adjustment mods don't affect the hit window.
// This is done the way it is to introduce fractional differences in order to match osu-stable for the time being. // This is done the way it is to introduce fractional differences in order to match osu-stable for the time being.
GreatHitWindow = Math.Ceiling((int)(getHitWindow300(mods) * clockRate) / clockRate), GreatHitWindow = Math.Ceiling((int)(getHitWindow300(mods) * clockRate) / clockRate),

View File

@ -1,9 +1,7 @@
// 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;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using JetBrains.Annotations; using JetBrains.Annotations;
using Newtonsoft.Json; using Newtonsoft.Json;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
@ -16,9 +14,6 @@ namespace osu.Game.Rulesets.Osu.Difficulty
{ {
public OsuDifficultyAttributes() { } public OsuDifficultyAttributes() { }
/// <inheritdoc/>
public Mod[] Mods { get; set; } = Array.Empty<Mod>();
/// <inheritdoc/> /// <inheritdoc/>
public double StarRating { get; set; } public double StarRating { get; set; }
@ -45,10 +40,10 @@ namespace osu.Game.Rulesets.Osu.Difficulty
public double SpeedNoteCount { get; set; } public double SpeedNoteCount { get; set; }
/// <summary> /// <summary>
/// The difficulty corresponding to the flashlight skill. /// The difficulty corresponding to the flashlight skill. A null value indicates the non-existence of <see cref="Mods.OsuModFlashlight"/>.
/// </summary> /// </summary>
[JsonProperty("flashlight_difficulty")] [JsonProperty("flashlight_difficulty")]
public double FlashlightDifficulty { get; set; } public double? FlashlightDifficulty { get; set; }
/// <summary> /// <summary>
/// Describes how much of <see cref="AimDifficulty"/> is contributed to by hitcircles or sliders. /// Describes how much of <see cref="AimDifficulty"/> is contributed to by hitcircles or sliders.
@ -112,7 +107,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty
yield return (IDifficultyAttributes.ATTRIB_ID_DIFFICULTY, StarRating); yield return (IDifficultyAttributes.ATTRIB_ID_DIFFICULTY, StarRating);
if (ShouldSerializeFlashlightDifficulty()) if (ShouldSerializeFlashlightDifficulty())
yield return (IDifficultyAttributes.ATTRIB_ID_FLASHLIGHT, FlashlightDifficulty); yield return (IDifficultyAttributes.ATTRIB_ID_FLASHLIGHT, FlashlightDifficulty!);
yield return (IDifficultyAttributes.ATTRIB_ID_SLIDER_FACTOR, SliderFactor); yield return (IDifficultyAttributes.ATTRIB_ID_SLIDER_FACTOR, SliderFactor);
@ -147,7 +142,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty
// unless the fields are also renamed. // unless the fields are also renamed.
[UsedImplicitly] [UsedImplicitly]
public bool ShouldSerializeFlashlightDifficulty() => Mods.Any(m => m is ModFlashlight); public bool ShouldSerializeFlashlightDifficulty() => FlashlightDifficulty is not null;
#endregion #endregion
} }

View File

@ -34,14 +34,14 @@ namespace osu.Game.Rulesets.Osu.Difficulty
protected override IDifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate) protected override IDifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
{ {
if (beatmap.HitObjects.Count == 0) if (beatmap.HitObjects.Count == 0)
return new OsuDifficultyAttributes { Mods = mods }; return new OsuDifficultyAttributes();
double aimRating = Math.Sqrt(skills[0].DifficultyValue()) * difficulty_multiplier; double aimRating = Math.Sqrt(skills[0].DifficultyValue()) * difficulty_multiplier;
double aimRatingNoSliders = Math.Sqrt(skills[1].DifficultyValue()) * difficulty_multiplier; double aimRatingNoSliders = Math.Sqrt(skills[1].DifficultyValue()) * difficulty_multiplier;
double speedRating = Math.Sqrt(skills[2].DifficultyValue()) * difficulty_multiplier; double speedRating = Math.Sqrt(skills[2].DifficultyValue()) * difficulty_multiplier;
double speedNotes = ((Speed)skills[2]).RelevantNoteCount(); double speedNotes = ((Speed)skills[2]).RelevantNoteCount();
double flashlightRating = 0.0; double flashlightRating = 0;
if (mods.Any(h => h is OsuModFlashlight)) if (mods.Any(h => h is OsuModFlashlight))
flashlightRating = Math.Sqrt(skills[3].DifficultyValue()) * difficulty_multiplier; flashlightRating = Math.Sqrt(skills[3].DifficultyValue()) * difficulty_multiplier;
@ -97,11 +97,10 @@ namespace osu.Game.Rulesets.Osu.Difficulty
OsuDifficultyAttributes attributes = new OsuDifficultyAttributes OsuDifficultyAttributes attributes = new OsuDifficultyAttributes
{ {
StarRating = starRating, StarRating = starRating,
Mods = mods,
AimDifficulty = aimRating, AimDifficulty = aimRating,
SpeedDifficulty = speedRating, SpeedDifficulty = speedRating,
SpeedNoteCount = speedNotes, SpeedNoteCount = speedNotes,
FlashlightDifficulty = flashlightRating, FlashlightDifficulty = mods.Any(x => x is OsuModFlashlight) ? flashlightRating : null,
SliderFactor = sliderFactor, SliderFactor = sliderFactor,
AimDifficultStrainCount = aimDifficultyStrainCount, AimDifficultStrainCount = aimDifficultyStrainCount,
SpeedDifficultStrainCount = speedDifficultyStrainCount, SpeedDifficultStrainCount = speedDifficultyStrainCount,

View File

@ -1,12 +1,10 @@
// 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;
using System.Collections.Generic; using System.Collections.Generic;
using Newtonsoft.Json; using Newtonsoft.Json;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Rulesets.Difficulty; using osu.Game.Rulesets.Difficulty;
using osu.Game.Rulesets.Mods;
namespace osu.Game.Rulesets.Taiko.Difficulty namespace osu.Game.Rulesets.Taiko.Difficulty
{ {
@ -14,9 +12,6 @@ namespace osu.Game.Rulesets.Taiko.Difficulty
{ {
public TaikoDifficultyAttributes() { } public TaikoDifficultyAttributes() { }
/// <inheritdoc/>
public Mod[] Mods { get; set; } = Array.Empty<Mod>();
/// <inheritdoc/> /// <inheritdoc/>
public double StarRating { get; set; } public double StarRating { get; set; }

View File

@ -74,7 +74,7 @@ namespace osu.Game.Rulesets.Taiko.Difficulty
protected override IDifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate) protected override IDifficultyAttributes CreateDifficultyAttributes(IBeatmap beatmap, Mod[] mods, Skill[] skills, double clockRate)
{ {
if (beatmap.HitObjects.Count == 0) if (beatmap.HitObjects.Count == 0)
return new TaikoDifficultyAttributes { Mods = mods }; return new TaikoDifficultyAttributes();
Colour colour = (Colour)skills.First(x => x is Colour); Colour colour = (Colour)skills.First(x => x is Colour);
Rhythm rhythm = (Rhythm)skills.First(x => x is Rhythm); Rhythm rhythm = (Rhythm)skills.First(x => x is Rhythm);
@ -93,7 +93,6 @@ namespace osu.Game.Rulesets.Taiko.Difficulty
TaikoDifficultyAttributes attributes = new TaikoDifficultyAttributes TaikoDifficultyAttributes attributes = new TaikoDifficultyAttributes
{ {
StarRating = starRating, StarRating = starRating,
Mods = mods,
StaminaDifficulty = staminaRating, StaminaDifficulty = staminaRating,
RhythmDifficulty = rhythmRating, RhythmDifficulty = rhythmRating,
ColourDifficulty = colourRating, ColourDifficulty = colourRating,

View File

@ -4,7 +4,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using Newtonsoft.Json; using Newtonsoft.Json;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Rulesets.Mods;
namespace osu.Game.Rulesets.Difficulty namespace osu.Game.Rulesets.Difficulty
{ {
@ -29,11 +28,6 @@ namespace osu.Game.Rulesets.Difficulty
protected const int ATTRIB_ID_AIM_DIFFICULT_STRAIN_COUNT = 25; protected const int ATTRIB_ID_AIM_DIFFICULT_STRAIN_COUNT = 25;
protected const int ATTRIB_ID_OK_HIT_WINDOW = 27; protected const int ATTRIB_ID_OK_HIT_WINDOW = 27;
/// <summary>
/// The mods which were applied to the beatmap.
/// </summary>
public Mod[] Mods { get; set; }
/// <summary> /// <summary>
/// The combined star rating of all skills. /// The combined star rating of all skills.
/// </summary> /// </summary>