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

Add a velocity multiplier to taiko hit objects.

This will be usable from the editor moving forward also - where every hit object can have its own velocity multiplier on top of the control point one.
This commit is contained in:
smoogipooo 2017-04-03 17:19:46 +09:00
parent aad8851460
commit d7ed392f27
3 changed files with 16 additions and 9 deletions

View File

@ -26,8 +26,6 @@ namespace osu.Game.Modes.Taiko.Beatmaps
public Beatmap<TaikoHitObject> Convert(Beatmap original) public Beatmap<TaikoHitObject> Convert(Beatmap original)
{ {
if (original is LegacyBeatmap)
original.TimingInfo.ControlPoints.ForEach(c => c.VelocityAdjustment /= legacy_velocity_scale);
return new Beatmap<TaikoHitObject>(original) return new Beatmap<TaikoHitObject>(original)
{ {
@ -73,7 +71,8 @@ namespace osu.Game.Modes.Taiko.Beatmaps
{ {
StartTime = obj.StartTime, StartTime = obj.StartTime,
Sample = obj.Sample, Sample = obj.Sample,
IsStrong = strong IsStrong = strong,
VelocityMultiplier = legacy_velocity_scale
}; };
} }
} }
@ -85,7 +84,8 @@ namespace osu.Game.Modes.Taiko.Beatmaps
Sample = obj.Sample, Sample = obj.Sample,
IsStrong = strong, IsStrong = strong,
Distance = distanceData.Distance * (repeatsData?.RepeatCount ?? 1) * legacy_velocity_scale, Distance = distanceData.Distance * (repeatsData?.RepeatCount ?? 1) * legacy_velocity_scale,
TickRate = beatmap.BeatmapInfo.Difficulty.SliderTickRate == 3 ? 3 : 4 TickRate = beatmap.BeatmapInfo.Difficulty.SliderTickRate == 3 ? 3 : 4,
VelocityMultiplier = legacy_velocity_scale
}; };
} }
} }
@ -98,9 +98,9 @@ namespace osu.Game.Modes.Taiko.Beatmaps
StartTime = obj.StartTime, StartTime = obj.StartTime,
Sample = obj.Sample, Sample = obj.Sample,
IsStrong = strong, IsStrong = strong,
EndTime = endTimeData.EndTime, EndTime = endTimeData.EndTime,
RequiredHits = (int)Math.Max(1, endTimeData.Duration / 1000 * hitMultiplier) RequiredHits = (int)Math.Max(1, endTimeData.Duration / 1000 * hitMultiplier),
VelocityMultiplier = legacy_velocity_scale
}; };
} }
else else
@ -113,7 +113,8 @@ namespace osu.Game.Modes.Taiko.Beatmaps
{ {
StartTime = obj.StartTime, StartTime = obj.StartTime,
Sample = obj.Sample, Sample = obj.Sample,
IsStrong = strong IsStrong = strong,
VelocityMultiplier = legacy_velocity_scale
}; };
} }
else else
@ -123,6 +124,7 @@ namespace osu.Game.Modes.Taiko.Beatmaps
StartTime = obj.StartTime, StartTime = obj.StartTime,
Sample = obj.Sample, Sample = obj.Sample,
IsStrong = strong, IsStrong = strong,
VelocityMultiplier = legacy_velocity_scale
}; };
} }
} }

View File

@ -69,7 +69,7 @@ namespace osu.Game.Modes.Taiko.Objects
{ {
base.ApplyDefaults(timing, difficulty); base.ApplyDefaults(timing, difficulty);
Velocity = base_distance * difficulty.SliderMultiplier * difficulty.SliderTickRate * timing.BeatLengthAt(StartTime) * timing.SpeedMultiplierAt(StartTime); Velocity = base_distance * difficulty.SliderMultiplier * VelocityMultiplier / timing.BeatLengthAt(StartTime);
tickSpacing = timing.BeatLengthAt(StartTime) / TickRate; tickSpacing = timing.BeatLengthAt(StartTime) / TickRate;
RequiredGoodHits = TotalTicks * Math.Min(0.15, 0.05 + 0.10 / 6 * difficulty.OverallDifficulty); RequiredGoodHits = TotalTicks * Math.Min(0.15, 0.05 + 0.10 / 6 * difficulty.OverallDifficulty);

View File

@ -19,6 +19,11 @@ namespace osu.Game.Modes.Taiko.Objects
/// </summary> /// </summary>
private const double base_scroll_time = 6000; private const double base_scroll_time = 6000;
/// <summary>
/// The velocity multiplier applied to this hit object.
/// </summary>
public float VelocityMultiplier = 1;
/// <summary> /// <summary>
/// The time to scroll in the HitObject. /// The time to scroll in the HitObject.
/// </summary> /// </summary>
@ -39,7 +44,7 @@ namespace osu.Game.Modes.Taiko.Objects
{ {
base.ApplyDefaults(timing, difficulty); base.ApplyDefaults(timing, difficulty);
PreEmpt = base_scroll_time / difficulty.SliderMultiplier * timing.BeatLengthAt(StartTime) * timing.SpeedMultiplierAt(StartTime) / 1000; PreEmpt = base_scroll_time / difficulty.SliderMultiplier * timing.BeatLengthAt(StartTime) * timing.SpeedMultiplierAt(StartTime) / VelocityMultiplier / 1000;
ControlPoint overridePoint; ControlPoint overridePoint;
Kiai = timing.TimingPointAt(StartTime, out overridePoint).KiaiMode; Kiai = timing.TimingPointAt(StartTime, out overridePoint).KiaiMode;