From 26d3ea2b95211abbbb23932be98d25d9bbb6c379 Mon Sep 17 00:00:00 2001 From: Xexxar <38889014+Xexxar@users.noreply.github.com> Date: Wed, 16 May 2018 14:48:21 -0500 Subject: [PATCH 1/9] Lets fix high bpm! (220 BPM+ Buff) Hello! I've been wanting to propose this for a while and I've been trying to come up with a good way to build up data but after several nights of trying to convince a friend to help me I decided to compile some small results and ask others (Reddit, w/e) to assist me. It is widely accepted that high BPM streams are currently not accounted for / balanced properly in the current algorithm. What I am proposing is a buff to all streams that exceed 220 bpm. What I am doing in my edit to the code is checking the MS between the previous note and the one we're currently looking at. If it is below `68` (220 BPM 1/4th), then we start scaling it linearly via the following formula. `speedBonus = 68 / current.DeltaTime;` Which provides a bonus of 1.09x for 240 BPM, 1.18x for 260 BPM, 1.36x for 300 BPM, etc. Here is an example of this code in action with some values for SS's on several maps: http://puu.sh/AnpoZ/35b3c81c3c.png I am willing to collect more data, but my coding knowledge is very limited so doing it by hand is very tedious and not effective at all. If there are people who have the necessary skills and would like to assist, please do so using this PR thread so we can build better statistics and understand how this change will effect much more of the game. The only way this change can be implemented is if we have proper data to show the effects of this change, so lets get to it! Thank you for reading --- osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs index b807f2003747..e44890cc5abb 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs @@ -20,18 +20,24 @@ public class Speed : Skill protected override double StrainValueOf(OsuDifficultyHitObject current) { double distance = current.Distance; + double speedBonus = 1.0; + + if(current.DeltaTime < 68) // 68 = 220 BPM 1/4th snapping in MS. + { + speedBonus = 68 / current.DeltaTime; // 1.09x for 240 BPM, 1.18x for 260 BPM, 1.36x for 300 BPM, etc. + } double speedValue; if (distance > single_spacing_threshold) - speedValue = 2.5; + speedValue = speedBonus * 2.5; else if (distance > stream_spacing_threshold) - speedValue = 1.6 + 0.9 * (distance - stream_spacing_threshold) / (single_spacing_threshold - stream_spacing_threshold); + speedValue = speedBonus * (1.6 + 0.9 * (distance - stream_spacing_threshold) / (single_spacing_threshold - stream_spacing_threshold)); else if (distance > almost_diameter) - speedValue = 1.2 + 0.4 * (distance - almost_diameter) / (stream_spacing_threshold - almost_diameter); + speedValue = speedBonus * (1.2 + 0.4 * (distance - almost_diameter) / (stream_spacing_threshold - almost_diameter)); else if (distance > almost_diameter / 2) - speedValue = 0.95 + 0.25 * (distance - almost_diameter / 2) / (almost_diameter / 2); + speedValue = speedBonus * (0.95 + 0.25 * (distance - almost_diameter / 2) / (almost_diameter / 2)); else - speedValue = 0.95; + speedValue = speedBonus * 0.95; return speedValue / current.DeltaTime; } From 996754956874c0725593878a8eebbf172e8b8b0f Mon Sep 17 00:00:00 2001 From: Xexxar <38889014+Xexxar@users.noreply.github.com> Date: Wed, 16 May 2018 15:43:54 -0500 Subject: [PATCH 2/9] Update Speed.cs --- osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs index e44890cc5abb..3c89f5681db1 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs @@ -29,17 +29,17 @@ protected override double StrainValueOf(OsuDifficultyHitObject current) double speedValue; if (distance > single_spacing_threshold) - speedValue = speedBonus * 2.5; + speedValue = 2.5; else if (distance > stream_spacing_threshold) - speedValue = speedBonus * (1.6 + 0.9 * (distance - stream_spacing_threshold) / (single_spacing_threshold - stream_spacing_threshold)); + speedValue = 1.6 + 0.9 * (distance - stream_spacing_threshold) / (single_spacing_threshold - stream_spacing_threshold); else if (distance > almost_diameter) - speedValue = speedBonus * (1.2 + 0.4 * (distance - almost_diameter) / (stream_spacing_threshold - almost_diameter)); + speedValue = 1.2 + 0.4 * (distance - almost_diameter) / (stream_spacing_threshold - almost_diameter); else if (distance > almost_diameter / 2) - speedValue = speedBonus * (0.95 + 0.25 * (distance - almost_diameter / 2) / (almost_diameter / 2)); + speedValue = 0.95 + 0.25 * (distance - almost_diameter / 2) / (almost_diameter / 2); else - speedValue = speedBonus * 0.95; + speedValue = 0.95; - return speedValue / current.DeltaTime; + return (speedValue * speedBonus) / current.DeltaTime; } } } From 8793ebfed6b04e1acacab753f20534452b43b80e Mon Sep 17 00:00:00 2001 From: Xexxar <38889014+Xexxar@users.noreply.github.com> Date: Wed, 16 May 2018 17:13:43 -0500 Subject: [PATCH 3/9] Update Speed.cs --- osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs index 3c89f5681db1..6241981a9733 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs @@ -20,8 +20,7 @@ public class Speed : Skill protected override double StrainValueOf(OsuDifficultyHitObject current) { double distance = current.Distance; - double speedBonus = 1.0; - + double speedBonus = 1.0; if(current.DeltaTime < 68) // 68 = 220 BPM 1/4th snapping in MS. { speedBonus = 68 / current.DeltaTime; // 1.09x for 240 BPM, 1.18x for 260 BPM, 1.36x for 300 BPM, etc. From ee4f9310e11e5a3e6fa1e7c82f51355b53f29ce3 Mon Sep 17 00:00:00 2001 From: Xexxar <38889014+Xexxar@users.noreply.github.com> Date: Thu, 17 May 2018 13:42:53 -0500 Subject: [PATCH 4/9] Update Speed.cs --- osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs index 6241981a9733..3c89f5681db1 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs @@ -20,7 +20,8 @@ public class Speed : Skill protected override double StrainValueOf(OsuDifficultyHitObject current) { double distance = current.Distance; - double speedBonus = 1.0; + double speedBonus = 1.0; + if(current.DeltaTime < 68) // 68 = 220 BPM 1/4th snapping in MS. { speedBonus = 68 / current.DeltaTime; // 1.09x for 240 BPM, 1.18x for 260 BPM, 1.36x for 300 BPM, etc. From 6bab1c6079f5e2ddf6d9a08c2abce49ab5a58e2c Mon Sep 17 00:00:00 2001 From: Xexxar <38889014+Xexxar@users.noreply.github.com> Date: Sun, 20 May 2018 17:45:13 -0500 Subject: [PATCH 5/9] Update Speed.cs --- osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs index 3c89f5681db1..6241981a9733 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs @@ -20,8 +20,7 @@ public class Speed : Skill protected override double StrainValueOf(OsuDifficultyHitObject current) { double distance = current.Distance; - double speedBonus = 1.0; - + double speedBonus = 1.0; if(current.DeltaTime < 68) // 68 = 220 BPM 1/4th snapping in MS. { speedBonus = 68 / current.DeltaTime; // 1.09x for 240 BPM, 1.18x for 260 BPM, 1.36x for 300 BPM, etc. From da71e37338f9bd86608ab7fc673e23eb230f8731 Mon Sep 17 00:00:00 2001 From: Xexxar <38889014+Xexxar@users.noreply.github.com> Date: Mon, 21 May 2018 02:50:49 -0500 Subject: [PATCH 6/9] Update Speed.cs --- osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs index 6241981a9733..476635f538f6 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs @@ -20,8 +20,8 @@ public class Speed : Skill protected override double StrainValueOf(OsuDifficultyHitObject current) { double distance = current.Distance; - double speedBonus = 1.0; - if(current.DeltaTime < 68) // 68 = 220 BPM 1/4th snapping in MS. + double speedBonus = 1.0; + if(current.DeltaTime < 68) // 68 = 220 BPM 1/4th snapping in MS. { speedBonus = 68 / current.DeltaTime; // 1.09x for 240 BPM, 1.18x for 260 BPM, 1.36x for 300 BPM, etc. } From 47bdc285fe3cd060d957e22e022f0dce189eb54d Mon Sep 17 00:00:00 2001 From: Xexxar <38889014+Xexxar@users.noreply.github.com> Date: Tue, 22 May 2018 12:00:15 -0500 Subject: [PATCH 7/9] Update Speed.cs --- osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs index 476635f538f6..4fca7ac0a8ca 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs @@ -38,7 +38,7 @@ protected override double StrainValueOf(OsuDifficultyHitObject current) else speedValue = 0.95; - return (speedValue * speedBonus) / current.DeltaTime; + return speedValue * speedBonus / current.DeltaTime; } } } From 891b1023dd1a500c9f9a3549c8578965da696c1a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 18 Oct 2018 18:42:47 +0900 Subject: [PATCH 8/9] Stylistic fixes --- osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs index 21b338ac811e..611192a9c5b6 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs @@ -20,11 +20,10 @@ public class Speed : Skill protected override double StrainValueOf(OsuDifficultyHitObject current) { double distance = current.TravelDistance + current.JumpDistance; + double speedBonus = 1.0; - if(current.DeltaTime < 68) // 68 = 220 BPM 1/4th snapping in MS. - { + if (current.DeltaTime < 68) // 68 = 220 BPM 1/4th snapping in MS. speedBonus = 68 / current.DeltaTime; // 1.09x for 240 BPM, 1.18x for 260 BPM, 1.36x for 300 BPM, etc. - } double speedValue; if (distance > single_spacing_threshold) From 07331350c3114c42ec1d6a09935da756f59841d3 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 18 Oct 2018 18:44:11 +0900 Subject: [PATCH 9/9] Fix possible div-by-0 --- osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs index 611192a9c5b6..dc2a9d77f50f 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Speed.cs @@ -22,8 +22,8 @@ protected override double StrainValueOf(OsuDifficultyHitObject current) double distance = current.TravelDistance + current.JumpDistance; double speedBonus = 1.0; - if (current.DeltaTime < 68) // 68 = 220 BPM 1/4th snapping in MS. - speedBonus = 68 / current.DeltaTime; // 1.09x for 240 BPM, 1.18x for 260 BPM, 1.36x for 300 BPM, etc. + if (current.StrainTime < 68) // 68 = 220 BPM 1/4th snapping in MS. + speedBonus = 68 / current.StrainTime; // 1.09x for 240 BPM, 1.18x for 260 BPM, 1.36x for 300 BPM, etc. double speedValue; if (distance > single_spacing_threshold)