diff --git a/osu.Game.Rulesets.Catch.Tests/CatchBeatmapConversionTest.cs b/osu.Game.Rulesets.Catch.Tests/CatchBeatmapConversionTest.cs index d70b171ff2..d1fe213a32 100644 --- a/osu.Game.Rulesets.Catch.Tests/CatchBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Catch.Tests/CatchBeatmapConversionTest.cs @@ -29,6 +29,7 @@ namespace osu.Game.Rulesets.Catch.Tests [TestCase("basic-hyperdash")] [TestCase("pixel-jump")] [TestCase("tiny-ticks")] + [TestCase("v8-tick-distance")] public new void Test(string name, params Type[] mods) => base.Test(name, mods); protected override IEnumerable CreateConvertValue(HitObject hitObject) diff --git a/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapConverter.cs b/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapConverter.cs index 6a24c26844..8c460586b0 100644 --- a/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapConverter.cs +++ b/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapConverter.cs @@ -9,6 +9,7 @@ using System.Threading; using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Objects; using osu.Framework.Extensions.IEnumerableExtensions; +using osu.Game.Beatmaps.Legacy; namespace osu.Game.Rulesets.Catch.Beatmaps { @@ -42,6 +43,9 @@ namespace osu.Game.Rulesets.Catch.Beatmaps NewCombo = comboData?.NewCombo ?? false, ComboOffset = comboData?.ComboOffset ?? 0, LegacyConvertedY = yPositionData?.Y ?? CatchHitObject.DEFAULT_LEGACY_CONVERT_Y, + // prior to v8, speed multipliers don't adjust for how many ticks are generated over the same distance. + // this results in more (or less) ticks being generated in SliderVelocityMultiplierBindable.Value = value; } + /// + /// An extra multiplier that affects the number of s generated by this . + /// An increase in this value increases , which reduces the number of ticks generated. + /// + public double TickDistanceMultiplier = 1; + [JsonIgnore] private double velocityFactor; @@ -51,7 +57,7 @@ namespace osu.Game.Rulesets.Catch.Objects public double Velocity => velocityFactor * SliderVelocityMultiplier; [JsonIgnore] - public double TickDistance => tickDistanceFactor * SliderVelocityMultiplier; + public double TickDistance => tickDistanceFactor * TickDistanceMultiplier; /// /// The length of one span of this . diff --git a/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/v8-tick-distance-expected-conversion.json b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/v8-tick-distance-expected-conversion.json new file mode 100644 index 0000000000..82167f37dd --- /dev/null +++ b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/v8-tick-distance-expected-conversion.json @@ -0,0 +1,54 @@ +{ + "Mappings": [ + { + "StartTime": 81593.0, + "Objects": [ + { + "StartTime": 81593.0, + "Position": 384.0, + "HyperDash": false + }, + { + "StartTime": 81652.0, + "Position": 377.608948, + "HyperDash": false + }, + { + "StartTime": 81712.0, + "Position": 390.3638, + "HyperDash": false + }, + { + "StartTime": 81772.0, + "Position": 407.118683, + "HyperDash": false + }, + { + "StartTime": 81832.0, + "Position": 433.873535, + "HyperDash": false + }, + { + "StartTime": 81891.0, + "Position": 444.482483, + "HyperDash": false + }, + { + "StartTime": 81951.0, + "Position": 437.237366, + "HyperDash": false + }, + { + "StartTime": 82011.0, + "Position": 443.992218, + "HyperDash": false + }, + { + "StartTime": 82107.0, + "Position": 459.0, + "HyperDash": false + } + ] + } + ] +} \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/v8-tick-distance.osu b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/v8-tick-distance.osu new file mode 100644 index 0000000000..9fdba9dc0b --- /dev/null +++ b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/v8-tick-distance.osu @@ -0,0 +1,19 @@ +osu file format v7 + +[General] +StackLeniency: 0.7 +Mode: 0 + +[Difficulty] +HPDrainRate:5 +CircleSize:4 +OverallDifficulty:8 +SliderMultiplier:1 +SliderTickRate:1 + +[TimingPoints] +336,342.857142857143,4,1,0,100,1,0 +81588,-200,4,2,0,100,0,0 + +[HitObjects] +384,72,81593,2,12,B|464:72,1,75,4|4 \ No newline at end of file