ppy / osu-performance

Calculates user performance aggregates from scores

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

An addition of SD(ObjectSpacing) to aim_pp with the goal to compensate high variance stream maps

kornkaobat opened this issue · comments

Straight forward idea to add pp based upon the value of S.D.(of ObjectSpacing) throughout the map. Need some feedbacks (pros and cons) first before adding some math formulas to work on.

Pros

Rebalance https://osu.ppy.sh/beatmapsets/837869#osu/1754266

Rebalance https://osu.ppy.sh/beatmapsets/303778#osu/680689

Possibly add some nerf to 1-2 consistent jumps from this S.D. algorithm

Needs further explanation how this will help provided example patterns and resultant values by plugging in those patterns into proposed formula(s).

commented

This whole repo in the pp calculation code.

Pretty sure your idea will do exactly the opposite of what you want to achieve. If i understand correctly, you want to buff spacing inconsistencies and the current meta is already about inconsistent maps.

The code is not that hard to find and the repo is small. Here you it anyway

https://github.com/ppy/osu-performance/blob/master/src/performance/osu/OsuScore.cpp

commented

If you compare a regular diff spike jump farm map to the rubik's cube map you're referring to you'll see that farm maps are actually far less consistent in object spacing. Your approach would only work on streams where spacing changes are actually hard to follow. It can't fix jumps and overall promotes more diffspikes instead of consistent difficulty (which is harder to execute)

commented

It's already been like that from the beginning

commented

I'm sure there will be thousands of examples where it'll break pp, but you're free to try, we can't be sure without data

So how many notes will the algorithm take into account? Since these examples use 5, I'll assume 5. So now let me evaluate some basic common patterns @ 180 BPM:

Double taps [xx-xx-x]:
000 ->333 : 333
333 ->666 : 333
666 ->1333 : 666
1333 ->1666 : 333
1666 -> 2000 : 333
1666 ->2666 : 666
Standard Deviation, σ: 156.97770542341354

Triple taps case 1 [xxx-xx]:
000 ->333 : 333
333 ->666 : 333
666 ->999 : 333
1333 ->1666 : 666
1666 -> 2000 : 333
2000 ->2333 : 333
Standard Deviation, σ: 124.10177275123833

Triple taps case 2 [x-xxx-x]:
000 ->333 : 333
333 ->999 : 666
999 ->1333 : 333
1333 ->1666 : 333
1666 -> 2000 : 333
2000 ->2666 : 666
Standard Deviation, σ: 156.97770542341354

Double taps are moderately hard, triple taps are easy enough. One triple tap case shows same result as double tap case, so amount of notes taken into account should definitely not be 5. Observing the timing intervals between notes in the example the stdev is significantly high for simple cases. In fact it will be higher the lower the bpm. So how does this help?

@abraker95 I am confused, please use X,Y coordinates or display it in osu map editor.

There are no X,Y coordinates because these examples do not depend on spatial configuration, and these are arbitrary examples. When you are testing formulas going into editor to make a pattern is cumbersome. You can plug in mathematical descriptions of patterns like I did to simplify and speed up formula validation.

Certain fix for bpm problem is using xy=k Hyperbola equation where x=S.D. and y=bpm results in k=value for further calculation.

I have no idea what this is saying

commented

it will be the whole Last Klai stream that will be taken into account.

How are you going to determine where that stream begins and ends? Streams often have sliders on downbeats so you cant just assume "a lot of circles means stream".
You should also try and test your idea on other maps, rubik's cube is quite an extreme one and you shouldn't be balancing everything around just it

commented

With values like this you better just look at delta's rebalance imo, rubik's cube is already 929pp for ss there

commented

There's no issue yet, but there're: Incomplete document explaining things, source code and a web calculator

I don't think you understand how PP calculation works. No map data gets sent to osu servers because the map data is already stored on the servers. Which means spacingsdev would be calculated there too.

it is definitely something we can add - we have the facilities to store new variables for performance calculation use.

There is a full implementation of difficulty and PP in the main repo https://github.com/ppy/osu/tree/master/osu.Game.Rulesets.Osu/Difficulty, and tools to run it https://github.com/ppy/osu-tools

I feel like that should be in the readme somewhere, it's probably what most people are looking for when tehy click this repo

There is already infrastructure to do everything that you want, but the relevant code isn't just in this repo. This repo only contains code to load beatmap difficulty attributes from a database and calculate the PP of a replay. That's why there's nothing about object spacing here. The code that calculates these difficulty attributes and knows about object spacing can be found in the links I posted.

You don't need to just yet, you can do everything in osu-tools and the main osu repo, just install the recommended requirements and follow "getting started" from the osu-tools readme, then you can start editing stuff in osu.Game.Rulesets.Difficulty and see the results.

This repo is just for use on the server to quickly calculate pp without having to do the hard calculations every time. osu-tools also calculates pp, but calculates map difficulty too, and that part is likely what you want to change.

commented

Just test it and see the results
e: but first move public static double GetStandardDeviation(List values) { ... } and public static double StreamDeterminant(double deltadist,double deltatime) { ... } out of StrainValueOf or it wont compile

Most comments I've made have been deleted due to me losing hope that this project will stride forward. A lot of temporary white paper is currently stored here : Osu! Dev Discord. More to come soon, especially my repo for anyone to use.

For all of my old deleted comments see https://gitmemory.com/kornkaobat