From 03dae97ff313547e20d59dd60c388e7a8aea3422 Mon Sep 17 00:00:00 2001 From: Salman Alshamrani Date: Tue, 5 Aug 2025 10:24:54 +0300 Subject: [PATCH] Fix special cases of mania beatmaps not playing sliding samples Apparently mania sliders are a thing. See https://github.com/ppy/osu/pull/34500#issuecomment-3150610188 --- .../Patterns/Legacy/PassThroughPatternGenerator.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/PassThroughPatternGenerator.cs b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/PassThroughPatternGenerator.cs index efeb99e8b4..b3cb871f1f 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/PassThroughPatternGenerator.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/PassThroughPatternGenerator.cs @@ -3,8 +3,10 @@ using System.Collections.Generic; using osu.Game.Beatmaps; +using osu.Game.Beatmaps.Legacy; using osu.Game.Rulesets.Mania.Objects; using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Objects.Legacy; using osu.Game.Rulesets.Objects.Types; using osu.Game.Utils; @@ -30,12 +32,18 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy if (HitObject is IHasDuration endTimeData) { + // despite the beatmap originally made for mania, if the object is parsed as a slider rather than a hold, sliding samples should still be played. + // this is seemingly only possible to achieve by modifying the .osu file directly, but online beatmaps that do that exist + // (see second and fourth notes of https://osu.ppy.sh/beatmapsets/73883#mania/216407) + bool playSlidingSamples = (HitObject is IHasLegacyHitObjectType hasType && hasType.LegacyType == LegacyHitObjectType.Slider) || HitObject is IHasPath; + pattern.Add(new HoldNote { StartTime = HitObject.StartTime, Duration = endTimeData.Duration, Column = column, Samples = HitObject.Samples, + PlaySlidingSamples = playSlidingSamples, NodeSamples = (HitObject as IHasRepeats)?.NodeSamples ?? HoldNote.CreateDefaultNodeSamples(HitObject) }); }