-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Replace the length bonus with a new bonus dependant on object difficulty #30924
base: pp-dev
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Upon initial review I mostly have questions around reasons/rationale for some of these, as they don't really explain themselves.
I have one other open question though - how feasible would it be for the length bonuses to be modeled under the idea that length bonus starts at 1.0
and either stays the same or increases? Essentially, can we have the length bonus actually act as a bonus and not a factor that is generally applied?
My naive first assumption would be that you could remove the non-1.0 base from the formulas and then adjust the global multiplier to compensate and essentially simplify the bonus, but feel free to correct me if I'm wrong.
@@ -79,7 +96,7 @@ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beat | |||
); | |||
|
|||
double starRating = basePerformance > 0.00001 | |||
? Math.Cbrt(OsuPerformanceCalculator.PERFORMANCE_BASE_MULTIPLIER) * 0.027 * (Math.Cbrt(100000 / Math.Pow(2, 1 / 1.1) * basePerformance) + 4) | |||
? Math.Cbrt(OsuPerformanceCalculator.PERFORMANCE_BASE_MULTIPLIER) * 0.026 * (Math.Cbrt(100000 / Math.Pow(2, 1 / 1.1) * basePerformance) + 4) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why?
Pretty sure this was changed because adding length bonus juiced up some maps way too much, kermit can probably elaborate better
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
puttng length bonus into star rating increases star rating for everything, so I decreased multiplier to account for that and keep the average about the same
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Was changing PERFORMANCE_BASE_MULTIPLIER
not good enough? Ideally we avoid touching the actual formula if we can help it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
changing PERFORMANCE_BASE_MULTIPLIER
would affect final pp values, when the problem is with the star rating => pp relationship. Including length in star rating means that for the same pp value star rating will be higher, and so the multiplier in the formula is decreased to keep it on average the same.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah sure that makes sense.
double aimLengthBonus = (aimRelevantObjectCount < 25 ? 0.8 + aimRelevantObjectCount / 150.0 : 0.9 + Math.Min(1.5, aimRelevantObjectCount / 375.0) + | ||
(aimRelevantObjectCount > 562.5 ? Math.Log10(aimRelevantObjectCount / 562.5) : 0)); | ||
aimRating *= Math.Cbrt(aimLengthBonus); | ||
double aimNoSlidersLengthBonus = (aimNoSlidersRelevantObjectCount < 25 ? 0.8 + aimNoSlidersRelevantObjectCount / 150.0 : 0.9 + aimNoSlidersRelevantObjectCount / 375.0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it intended that the no sliders bonus is missing half of the bonus? If so, why?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it intended that the no sliders bonus is missing half of the bonus? If so, why?
Yes this is an oversight, it's supposed to be the same length bonus. Happened when we added the fix for the very long consistent maps, will fix
double aimLengthBonus = (aimRelevantObjectCount < 25 ? 0.8 + aimRelevantObjectCount / 150.0 : 0.9 + Math.Min(1.5, aimRelevantObjectCount / 375.0) + | ||
(aimRelevantObjectCount > 562.5 ? Math.Log10(aimRelevantObjectCount / 562.5) : 0)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A lot of this feels particularly random/arbitrary upon reading. Why aimRelevantCount < 25
? Why aimRelevantObjectCount > 562.5
on the second part of the bonus (this one is particularly more questionable for me - 562.5
?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The initial arbitrary curve change is for the ringtone nerf in place due to strain reduction removal, it can be removed in case a better way to nerf such maps is implemented. The second part with the super specific 562.5 is basically where the log begins to fix the pp drop issue for incredibly long maps. It could probably be made to look more pretty but I didn't see too much of an issue personally.
it would be possible, but I don't really see the purpose. It's doing the exact same thing, just taking out a common factor and moving it somewhere else. |
fix-aim-length-bonus
In my opinion it makes the intent of the bonus a little clearer, and also for people touching other places of the system it would be easier to balance changes around the length bonus since they don't have both factors reducing difficulty. |
Making the bonuses start from 1 makes them look even more unnecessarily complex since we have to multiply everything by the common factor. Making them look prettier requires value changes which takes us back to the balancing stage. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just tiny formatting things I noticed. I can live with not making the length bonus 1-based, it was just an idea.
//Being consistently difficult for 1000 notes should be worth more than being consistently difficult for 100. | ||
double totalStrains = ObjectStrains.Count; | ||
double lengthFactor = 0.74 * Math.Pow(0.9987, totalStrains); | ||
//// Use a weighted sum of all strains. Constants are arbitrary and give nice values |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we fix up the formatting on these comments
: 0.9 + Math.Min(1.5, aimRelevantObjectCount / 375.0) + | ||
(aimRelevantObjectCount > 562.5 ? Math.Log10(aimRelevantObjectCount / 562.5) : 0); | ||
aimRating *= Math.Cbrt(aimLengthBonus); | ||
double aimNoSlidersLengthBonus = aimNoSlidersRelevantObjectCount < 25 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nitpicking but can we add some whitespace between these bonuses just to make it easier to digest
make curves start from 1, remove ringtone nerf
fix comment formatting
make logs make more sense
The current length bonus depends only on object count, which means maps with very short difficulty spikes and a large amount of easy objects receive excess length bonus (such as Save Me), while maps with very consistent difficulty do not receive sufficient length bonus (such as Devour Me, Colossus)
The new bonus using a weighted sum similar to that used in the miss penalty (however it is slightly different, and a different variable is used to prevent unwanted changes to the miss penalty), and uses the result of that as a length factor.
This is intended to go alongside #30923 and the #30925, both of which aid in creating a suitable base for this new bonus to function.