Skip to content
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

Scaling miss penalization according to the number of hitobjects in a map #103

Open
DavidHusicka opened this issue Jul 31, 2019 · 2 comments

Comments

@DavidHusicka
Copy link

DavidHusicka commented Jul 31, 2019

Draft

At the moment, there are in the code these two parts which penalizes players if they make a miss. These misses are not scaled so longer maps got much lower pp count plays in average.

	// Penalize misses exponentially. This mainly fixes tag4 maps and the likes until a per-hitobject solution is available
	_aimValue *= pow(0.97f, _numMiss);

	// Penalize misses exponentially. This mainly fixes tag4 maps and the likes until a per-hitobject solution is available
	_speedValue *= pow(0.97f, _numMiss);

This could be simply fixed by multiplying the power by numTotalHits/576 ratio as shown here. By this, penalization would be scaled according to the hitobject count.

	// Penalize misses exponentially. This mainly fixes tag4 maps and the likes until a per-hitobject solution is available
	_aimValue *= pow(0.97f, _numMiss*(numTotalHits/576));

	// Penalize misses exponentially. This mainly fixes tag4 maps and the likes until a per-hitobject solution is available
	_speedValue *= pow(0.97f, _numMiss*(numTotalHits/576));

Why 576

Average map in osu! is a 90 - 120 seconds long. These maps have mostly 550 - 600 hitobjects so mean is 575 so the 576 is pretty close. In my opinion if average hitobject count would be counted, 576 would be closer than 575.

576 is 1001000000 in binary which makes it faster for computers to work with (it has only one '1' digit in the number if we don't count the first digit) so the computation won't take much longer.

Edit

I think that numTotalHits is count of hitobjects. Correct me if I am wrong. I also forgot that numTotalHits nor 576 is not float so it will have to be written as numTotalHits/576f but you got the point.

@holly-hacker
Copy link

Average map in osu! is a 90 - 120 seconds long. These maps have mostly 550 - 600 hitobjects...

I don't think this applies to every difficulty range. An Easy difficulty doesn't have the same note density as an Expert.

@DavidHusicka
Copy link
Author

DavidHusicka commented Jul 31, 2019

Average map in osu! is a 90 - 120 seconds long. These maps have mostly 550 - 600 hitobjects...

I don't think this applies to every difficulty range. An Easy difficulty doesn't have the same note density as an Expert.

I got the point but it's about establishing the average and I find this number pretty convinient to be honest. Lower number would result in higher penalization which would not be pleased by most of the people. Also higher number would not penalize same as the current system.

Edit: I think that current pp system is pretty balanced and this is about getting as close to it as possible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants