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).
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
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)
It's already been like that from the beginning
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
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
With values like this you better just look at delta's rebalance imo, rubik's cube is already 929pp for ss there
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.
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
idke.txt
gayzmcgee.txt
cookiezi.txt
whitecat.txt
ryuk.txt
vaxei.txt
Current pp values as of kornkaobat/osu#17