osu/osu.Game/Database
Bartłomiej Dach 08609e19d6
Fix osu! standardised score estimation algorithm violating basic invariants
As it turns out, the "lower" and "upper" estimates of the combo portion
of the score being converted were misnomers. In selected cases
(scores with high accuracy but combo being lower than max by more than
a few objects) the janky score-based math could overestimate the count
of remaining objects in a map. For instance, in one case the numbers
worked out something like this:

- Accuracy: practically 100%
- Max combo on beatmap: 571x
- Max combo for score: 551x

The score-based estimation attempts to extract a "remaining object
count" from score, by doing something along of sqrt(571^2 - 551^2). That
comes out to _almost 150_. Which leads to the estimation overshooting
the total max combo count on the beatmap by some hundred objects.

To curtail this nonsense, enforce some basic invariants:

- Neither estimate is allowed to exceed maximum achievable
- Ensure that lower estimate is really lower and upper is really upper
  by just looking at the values and making sure that is so rather than
  just saying that it is.
2024-03-06 11:40:10 +01:00
..
BackgroundDataStoreProcessor.cs Inline last version which touched ranks when checking for upgrade 2024-02-24 13:55:44 +01:00
BeatmapExporter.cs change .osz2 to .olz (osu lazer zip) 2023-07-12 15:04:06 +02:00
BeatmapLookupCache.cs
EmptyRealmSet.cs Bring realm library up-to-date 2023-07-06 13:37:43 +09:00
ICanAcceptFiles.cs
IHasFiles.cs
IHasGuidPrimaryKey.cs
IHasNamedFiles.cs
IHasOnlineID.cs
IHasPrimaryKey.cs
IHasRealmFiles.cs Remove IScoreInfo : IHasNamedFiles inheritance 2023-10-26 14:58:33 +02:00
IModelDownloader.cs
IModelFileManager.cs
IModelImporter.cs
IModelManager.cs
ImportParameters.cs Fix skin editor freezing game if opened during active gameplay 2023-10-27 14:34:30 +02:00
ImportProgressNotification.cs
ImportTask.cs Bring back disposal of stream after copy-out to MemoryStream 2023-09-14 19:36:35 +02:00
INamedFile.cs
INamedFileInfo.cs
INamedFileUsage.cs
IPostNotifications.cs
ISoftDelete.cs
LegacyArchiveExporter.cs Move all conversion code to LegacyBeatmapExporter 2023-07-13 00:20:01 +02:00
LegacyBeatmapExporter.cs Fix incorrect legacy conversion when B-splines are used 2023-11-20 15:08:58 +09:00
LegacyBeatmapImporter.cs Fix legacy beatmap importer not always handling nested paths correctly 2023-10-03 16:01:17 +09:00
LegacyCollectionImporter.cs
LegacyExporter.cs
LegacyImportManager.cs Extract common method for determining stable import usability of directory 2023-12-15 15:42:19 +01:00
LegacyModelImporter.cs
LegacyScoreExporter.cs
LegacyScoreImporter.cs
LegacySkinExporter.cs
LegacySkinImporter.cs
Live.cs
MemoryCachingComponent.cs
MissingBeatmapNotification.cs Fix notification text sets overwriting each other 2023-09-19 11:12:58 +02:00
ModelDownloader.cs
ModelManager.cs Add feedback to delete button even when no-op 2024-02-18 21:52:23 -08:00
OnlineLookupCache.cs
RealmAccess.cs Add versioning of local scores 2023-12-21 18:37:15 +09:00
RealmArchiveModelImporter.cs Use new LINQ Order() instead of OrderBy() when possible 2024-02-08 18:01:00 +01:00
RealmExtensions.cs Fill out xmldoc and adjust inline commentary 2023-08-16 09:40:46 +02:00
RealmFileStore.cs Reference property via nameof rather than hardcoding 2024-01-09 11:49:42 +01:00
RealmLive.cs Add helper method for safer realm Find<T> 2023-08-16 15:37:09 +09:00
RealmLiveUnmanaged.cs
RealmObjectExtensions.cs Remove outdated xmldoc 2023-07-06 22:01:02 +02:00
StandardisedScoreMigrationTools.cs Fix osu! standardised score estimation algorithm violating basic invariants 2024-03-06 11:40:10 +01:00
TooManyDownloadsNotification.cs
UserLookupCache.cs