Takes an osu!mania beatmap and fixes any found star rating inflated patterns.
When calculating star rating, osu!mania considers the density of notes to be a huge factor of difficulty. However, this can easily be abused by short and close LN (Mania Hold) patterns. It does not correctly reflect the difficulty of the map, causing the star rating and performance points to be heavily inflated.
What exactly do you consider an inflated pattern?
- The start times of two LNs are too close together, but not directly on top of each other. For example, if the player has to hit LNs on 1/8th notes, consider that inflated.
- If the two LNs have a less than 1/4th beat hold time. (LN can be tapped instead of held to get a 300)
If one or more of these cases are true, it will replace the current LN patterns with a normal note, thus making it the same beatmap playability wise, while reducing the star rating to its REAL value
from deflate import fix_star_rating
# The beatmap that you are checking and fixing inflated patterns for
beatmap_path = "./Chip Skylark - Shiny Teeth (Of Mass M Remix) (Swan) [Vibro Teeth].osu"
# The new difficulty name (Version) of the beatmap
new_difficulty_name = "fixed"
# The output file path of the beatmap
output_path = "./Chip Skylark - Shiny Teeth (Of Mass M Remix) (Swan) [fixed].osu"
fix_star_rating(beatmap_path, new_difficulty_name, output_path)
Here, you can see exactly what it does.
- The image on the left is a pattern that inflates the star rating to: 14.46 Stars | 7184 PP
- The image on the right is a pattern that plays exactly the same but deflates the star rating to: 8.77 Stars | 1596 PP
The following PP & difficulty calculations are from semyon422's omppc.
Original Beatmap Data (Left Image)
Mods info
modsString none
scoreMult 1
timeRate 1
odMult 1
Beatmap info:
starRate 14.464003375837
noteCount 1207
scaled OD 0
real OD 0
scaled HP 6
real HP 6
Play info
scaled score 1000000
real score 1000000.0
accuracy 100.0
strainValue 6526.3997063184
accValue 10.850884109379
PP 7184.7614017897
Fixed Beatmap Data (Right Image)
Mods info
modsString none
scoreMult 1
timeRate 1
odMult 1
Beatmap info:
starRate 8.7766056821245
noteCount 1207
scaled OD 0.0
real OD 0.0
scaled HP 6.0
real HP 6.0
Play info
scaled score 1000000
real score 1000000.0
accuracy 100.0
strainValue 1445.1466416127
accValue 10.850884109379
PP 1596.3129606526
Total PP Data (Inflated vs. Deflated)
Since Ripple, an osu! private server has an issue with ranked inflated vibro AND 7k maps, here's a comparison between a few top player's performance points total for the old maps vs. the deflated ones:
Statistically, the amount of total pp will reduce by around 30-40%. That's A LOT if it were to be used, making top 7k players balanced or even higher than 4k vibro players in most cases. Normal 4k players are barely affected at all by this, with only a difference total pp of around 10-100.
arpia97 - (#3 Vibro Player)
-----------------------------
Deflated Top 50 Performance Data
User: arpia97
Old Total: 265,906.65pp
Deflated Total: 98,133.10pp
---------------------------------
Jakads - (#26 7k Player)
-----------------------------
Deflated Top 50 Performance Data
User: Jakads
Old Total: 162,926.55pp
Deflated Total: 94,057.14pp
---------------------------------
Swan - (#18 Vibro Player)
-----------------------------
Deflated Top 50 Performance Data
User: Swan
Old Total: 177,014.69pp
Deflated Total: 64,281.80pp
---------------------------------
ThereSM - (#1,149 Normal 4k Player)
-----------------------------
Deflated Top 50 Performance Data
User: ThereSM
Old Total: 11,249.85pp
Deflated Total: 11,235.80pp
---------------------------------
All the code in this repository is licensed under MIT