diff --git a/osu.Android.props b/osu.Android.props
index eab2be1b72..24a0d20874 100644
--- a/osu.Android.props
+++ b/osu.Android.props
@@ -52,7 +52,7 @@
-
+
diff --git a/osu.Game.Rulesets.Catch/Difficulty/CatchDifficultyAttributes.cs b/osu.Game.Rulesets.Catch/Difficulty/CatchDifficultyAttributes.cs
index 39a58d336d..8e069d7d16 100644
--- a/osu.Game.Rulesets.Catch/Difficulty/CatchDifficultyAttributes.cs
+++ b/osu.Game.Rulesets.Catch/Difficulty/CatchDifficultyAttributes.cs
@@ -9,6 +9,12 @@ namespace osu.Game.Rulesets.Catch.Difficulty
{
public class CatchDifficultyAttributes : DifficultyAttributes
{
+ ///
+ /// The perceived approach rate inclusive of rate-adjusting mods (DT/HT/etc).
+ ///
+ ///
+ /// Rate-adjusting mods don't directly affect the approach rate difficulty value, but have a perceived effect as a result of adjusting audio timing.
+ ///
[JsonProperty("approach_rate")]
public double ApproachRate { get; set; }
diff --git a/osu.Game.Rulesets.Mania/Difficulty/ManiaDifficultyAttributes.cs b/osu.Game.Rulesets.Mania/Difficulty/ManiaDifficultyAttributes.cs
index 979a04ddf8..5b7a460079 100644
--- a/osu.Game.Rulesets.Mania/Difficulty/ManiaDifficultyAttributes.cs
+++ b/osu.Game.Rulesets.Mania/Difficulty/ManiaDifficultyAttributes.cs
@@ -9,9 +9,18 @@ namespace osu.Game.Rulesets.Mania.Difficulty
{
public class ManiaDifficultyAttributes : DifficultyAttributes
{
+ ///
+ /// The hit window for a GREAT hit inclusive of rate-adjusting mods (DT/HT/etc).
+ ///
+ ///
+ /// Rate-adjusting mods do not affect the hit window at all in osu-stable.
+ ///
[JsonProperty("great_hit_window")]
public double GreatHitWindow { get; set; }
+ ///
+ /// The score multiplier applied via score-reducing mods.
+ ///
[JsonProperty("score_multiplier")]
public double ScoreMultiplier { get; set; }
diff --git a/osu.Game.Rulesets.Mania/Difficulty/ManiaDifficultyCalculator.cs b/osu.Game.Rulesets.Mania/Difficulty/ManiaDifficultyCalculator.cs
index 1f82eb7ccd..b17aa7fc4d 100644
--- a/osu.Game.Rulesets.Mania/Difficulty/ManiaDifficultyCalculator.cs
+++ b/osu.Game.Rulesets.Mania/Difficulty/ManiaDifficultyCalculator.cs
@@ -48,7 +48,9 @@ namespace osu.Game.Rulesets.Mania.Difficulty
{
StarRating = skills[0].DifficultyValue() * star_scaling_factor,
Mods = mods,
- GreatHitWindow = Math.Ceiling(getHitWindow300(mods) / clockRate),
+ // 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.
+ GreatHitWindow = Math.Ceiling((int)(getHitWindow300(mods) * clockRate) / clockRate),
ScoreMultiplier = getScoreMultiplier(mods),
MaxCombo = beatmap.HitObjects.Sum(h => h is HoldNote ? 2 : 1),
};
@@ -108,7 +110,7 @@ namespace osu.Game.Rulesets.Mania.Difficulty
}
}
- private int getHitWindow300(Mod[] mods)
+ private double getHitWindow300(Mod[] mods)
{
if (isForCurrentRuleset)
{
@@ -121,19 +123,14 @@ namespace osu.Game.Rulesets.Mania.Difficulty
return applyModAdjustments(47, mods);
- static int applyModAdjustments(double value, Mod[] mods)
+ static double applyModAdjustments(double value, Mod[] mods)
{
if (mods.Any(m => m is ManiaModHardRock))
value /= 1.4;
else if (mods.Any(m => m is ManiaModEasy))
value *= 1.4;
- if (mods.Any(m => m is ManiaModDoubleTime))
- value *= 1.5;
- else if (mods.Any(m => m is ManiaModHalfTime))
- value *= 0.75;
-
- return (int)value;
+ return value;
}
}
diff --git a/osu.Game.Rulesets.Mania/Skinning/Legacy/LegacyStageBackground.cs b/osu.Game.Rulesets.Mania/Skinning/Legacy/LegacyStageBackground.cs
index 952fc7ddd6..fdacc75c92 100644
--- a/osu.Game.Rulesets.Mania/Skinning/Legacy/LegacyStageBackground.cs
+++ b/osu.Game.Rulesets.Mania/Skinning/Legacy/LegacyStageBackground.cs
@@ -98,8 +98,7 @@ namespace osu.Game.Rulesets.Mania.Skinning.Legacy
float rightLineWidth = skin.GetManiaSkinConfig(LegacyManiaSkinConfigurationLookups.RightLineWidth, columnIndex)?.Value ?? 1;
bool hasLeftLine = leftLineWidth > 0;
- bool hasRightLine = rightLineWidth > 0 && skin.GetConfig(SkinConfiguration.LegacySetting.Version)?.Value >= 2.4m
- || isLastColumn;
+ bool hasRightLine = (rightLineWidth > 0 && skin.GetConfig(SkinConfiguration.LegacySetting.Version)?.Value >= 2.4m) || isLastColumn;
Color4 lineColour = skin.GetManiaSkinConfig(LegacyManiaSkinConfigurationLookups.ColumnLineColour, columnIndex)?.Value ?? Color4.White;
Color4 backgroundColour = skin.GetManiaSkinConfig(LegacyManiaSkinConfigurationLookups.ColumnBackgroundColour, columnIndex)?.Value ?? Color4.Black;
diff --git a/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyAttributes.cs b/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyAttributes.cs
index 126a9b0183..3deed4ea3d 100644
--- a/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyAttributes.cs
+++ b/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyAttributes.cs
@@ -12,30 +12,68 @@ namespace osu.Game.Rulesets.Osu.Difficulty
{
public class OsuDifficultyAttributes : DifficultyAttributes
{
+ ///
+ /// The difficulty corresponding to the aim skill.
+ ///
[JsonProperty("aim_difficulty")]
public double AimDifficulty { get; set; }
+ ///
+ /// The difficulty corresponding to the speed skill.
+ ///
[JsonProperty("speed_difficulty")]
public double SpeedDifficulty { get; set; }
+ ///
+ /// The difficulty corresponding to the flashlight skill.
+ ///
[JsonProperty("flashlight_difficulty")]
public double FlashlightDifficulty { get; set; }
+ ///
+ /// Describes how much of is contributed to by hitcircles or sliders.
+ /// A value closer to 1.0 indicates most of is contributed by hitcircles.
+ /// A value closer to 0.0 indicates most of is contributed by sliders.
+ ///
[JsonProperty("slider_factor")]
public double SliderFactor { get; set; }
+ ///
+ /// The perceived approach rate inclusive of rate-adjusting mods (DT/HT/etc).
+ ///
+ ///
+ /// Rate-adjusting mods don't directly affect the approach rate difficulty value, but have a perceived effect as a result of adjusting audio timing.
+ ///
[JsonProperty("approach_rate")]
public double ApproachRate { get; set; }
+ ///
+ /// The perceived overall difficulty inclusive of rate-adjusting mods (DT/HT/etc).
+ ///
+ ///
+ /// Rate-adjusting mods don't directly affect the overall difficulty value, but have a perceived effect as a result of adjusting audio timing.
+ ///
[JsonProperty("overall_difficulty")]
public double OverallDifficulty { get; set; }
+ ///
+ /// The beatmap's drain rate. This doesn't scale with rate-adjusting mods.
+ ///
public double DrainRate { get; set; }
+ ///
+ /// The number of hitcircles in the beatmap.
+ ///
public int HitCircleCount { get; set; }
+ ///
+ /// The number of sliders in the beatmap.
+ ///
public int SliderCount { get; set; }
+ ///
+ /// The number of spinners in the beatmap.
+ ///
public int SpinnerCount { get; set; }
public override IEnumerable<(int attributeId, object value)> ToDatabaseAttributes()
diff --git a/osu.Game.Rulesets.Taiko/Difficulty/TaikoDifficultyAttributes.cs b/osu.Game.Rulesets.Taiko/Difficulty/TaikoDifficultyAttributes.cs
index 31f5a6f570..3dc5438072 100644
--- a/osu.Game.Rulesets.Taiko/Difficulty/TaikoDifficultyAttributes.cs
+++ b/osu.Game.Rulesets.Taiko/Difficulty/TaikoDifficultyAttributes.cs
@@ -9,18 +9,39 @@ namespace osu.Game.Rulesets.Taiko.Difficulty
{
public class TaikoDifficultyAttributes : DifficultyAttributes
{
+ ///
+ /// The difficulty corresponding to the stamina skill.
+ ///
[JsonProperty("stamina_difficulty")]
public double StaminaDifficulty { get; set; }
+ ///
+ /// The difficulty corresponding to the rhythm skill.
+ ///
[JsonProperty("rhythm_difficulty")]
public double RhythmDifficulty { get; set; }
+ ///
+ /// The difficulty corresponding to the colour skill.
+ ///
[JsonProperty("colour_difficulty")]
public double ColourDifficulty { get; set; }
+ ///
+ /// The perceived approach rate inclusive of rate-adjusting mods (DT/HT/etc).
+ ///
+ ///
+ /// Rate-adjusting mods don't directly affect the approach rate difficulty value, but have a perceived effect as a result of adjusting audio timing.
+ ///
[JsonProperty("approach_rate")]
public double ApproachRate { get; set; }
+ ///
+ /// The perceived hit window for a GREAT hit inclusive of rate-adjusting mods (DT/HT/etc).
+ ///
+ ///
+ /// Rate-adjusting mods don't directly affect the hit window, but have a perceived effect as a result of adjusting audio timing.
+ ///
[JsonProperty("great_hit_window")]
public double GreatHitWindow { get; set; }
diff --git a/osu.Game/Rulesets/Difficulty/DifficultyAttributes.cs b/osu.Game/Rulesets/Difficulty/DifficultyAttributes.cs
index 991b567f57..ec3d22b67a 100644
--- a/osu.Game/Rulesets/Difficulty/DifficultyAttributes.cs
+++ b/osu.Game/Rulesets/Difficulty/DifficultyAttributes.cs
@@ -31,7 +31,7 @@ namespace osu.Game.Rulesets.Difficulty
public Mod[] Mods { get; set; }
///
- /// The combined star rating of all skill.
+ /// The combined star rating of all skills.
///
[JsonProperty("star_rating", Order = -3)]
public double StarRating { get; set; }
diff --git a/osu.Game/Screens/OnlinePlay/DrawableRoomPlaylistItem.cs b/osu.Game/Screens/OnlinePlay/DrawableRoomPlaylistItem.cs
index 8d840280b3..25b36e0774 100644
--- a/osu.Game/Screens/OnlinePlay/DrawableRoomPlaylistItem.cs
+++ b/osu.Game/Screens/OnlinePlay/DrawableRoomPlaylistItem.cs
@@ -273,10 +273,14 @@ namespace osu.Game.Screens.OnlinePlay
if (beatmap != null)
{
- beatmapText.AddLink(beatmap.GetDisplayTitleRomanisable(), LinkAction.OpenBeatmap, beatmap.OnlineID.ToString(), null, text =>
- {
- text.Truncate = true;
- });
+ beatmapText.AddLink(beatmap.GetDisplayTitleRomanisable(includeCreator: false),
+ LinkAction.OpenBeatmap,
+ beatmap.OnlineID.ToString(),
+ null,
+ text =>
+ {
+ text.Truncate = true;
+ });
}
authorText.Clear();
diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj
index 7b50c804ff..4c6f81defa 100644
--- a/osu.Game/osu.Game.csproj
+++ b/osu.Game/osu.Game.csproj
@@ -36,7 +36,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/osu.iOS.props b/osu.iOS.props
index 03a105673c..99b9de3fe2 100644
--- a/osu.iOS.props
+++ b/osu.iOS.props
@@ -60,7 +60,7 @@
-
+
@@ -83,7 +83,7 @@
-
+