mirror of
https://github.com/ppy/osu.git
synced 2024-11-14 01:47:25 +08:00
7c65a9de75
`TestSceneScoring` included a local simulation of stable's Score V1 algorithm. One of the parts of said algorithm is a mysterious "score multiplier", influenced by - among others - the beatmap's drain rate, overall difficulty, circle size, object count, drain length, and active mods. (An implementation of this already exists in lazer source, in `OsuLegacyScoreSimulator`, but more on this later.) However, `TestSceneScoring` had this multiplier in _two_ places, with _two_ distinct values, one of which being 1 (i.e. basically off). Unfortunately, the place that had 1 as the multiplier was the wrong one. Stable calculates the score increase for every hit in two stages; first, it takes the raw numerical value of the judgement, but then applies a combo-based bonus on top of it: scoreIncrease += (int)(Math.Max(0, ComboCounter.HitCombo - 1) * (scoreIncrease / 25 * ScoreMultiplier)); On the face of it, it may appear that the `ScoreMultiplier` factor can be factored out and applied at the end only when returning total score. However, once the above formula is rewritten as: scoreIncrease = scoreIncrease + (int)(Math.Max(0, ComboCounter.HitCombo - 1) * (scoreIncrease / 25 * ScoreMultiplier)); = scoreIncrease * (1 + (Math.Max(0, ComboCounter.HitCombo - 1) / 25 * ScoreMultiplier)) it becomes clear that that assumption is actually _incorrect_, and the `ScoreMultiplier` _must_ be applied to every score increase individually. The above was cross-checked experimentally against stable source on an example test map with 100 objects, and a replay hitting them perfectly. |
||
---|---|---|
.. | ||
OsuPlayerTestScene.cs | ||
SkinnableHUDComponentTestScene.cs | ||
TestSceneAllRulesetPlayers.cs | ||
TestSceneAutoplay.cs | ||
TestSceneBeatmapOffsetControl.cs | ||
TestSceneBeatmapSkinFallbacks.cs | ||
TestSceneBezierConverter.cs | ||
TestSceneBreakTracker.cs | ||
TestSceneClicksPerSecondCalculator.cs | ||
TestSceneColourHitErrorMeter.cs | ||
TestSceneCompletionCancellation.cs | ||
TestSceneDefaultSongProgressGraph.cs | ||
TestSceneDrawableScrollingRuleset.cs | ||
TestSceneDrawableStoryboardSprite.cs | ||
TestSceneFailAnimation.cs | ||
TestSceneFailingLayer.cs | ||
TestSceneFailJudgement.cs | ||
TestSceneFrameStabilityContainer.cs | ||
TestSceneGameplayLeaderboard.cs | ||
TestSceneGameplayMenuOverlay.cs | ||
TestSceneGameplayRewinding.cs | ||
TestSceneGameplaySamplePlayback.cs | ||
TestSceneGameplaySampleTriggerSource.cs | ||
TestSceneHitErrorMeter.cs | ||
TestSceneHoldForMenuButton.cs | ||
TestSceneHUDOverlay.cs | ||
TestSceneJudgementCounter.cs | ||
TestSceneKeyBindings.cs | ||
TestSceneKeyCounter.cs | ||
TestSceneLeadIn.cs | ||
TestSceneLetterboxOverlay.cs | ||
TestSceneMedalOverlay.cs | ||
TestSceneModValidity.cs | ||
TestSceneNightcoreBeatContainer.cs | ||
TestSceneOverlayActivation.cs | ||
TestSceneParticleExplosion.cs | ||
TestSceneParticleSpewer.cs | ||
TestScenePause.cs | ||
TestScenePauseWhenInactive.cs | ||
TestScenePerformancePointsCounter.cs | ||
TestScenePlayerLoader.cs | ||
TestScenePlayerLocalScoreImport.cs | ||
TestScenePlayerReferenceLeaking.cs | ||
TestScenePlayerScoreSubmission.cs | ||
TestScenePoolingRuleset.cs | ||
TestSceneReplay.cs | ||
TestSceneReplayDownloadButton.cs | ||
TestSceneReplayPlayer.cs | ||
TestSceneReplayRecorder.cs | ||
TestSceneScoring.cs | ||
TestSceneScrollingHitObjects.cs | ||
TestSceneSkinEditor.cs | ||
TestSceneSkinEditorComponentsList.cs | ||
TestSceneSkinEditorMultipleSkins.cs | ||
TestSceneSkinnableAccuracyCounter.cs | ||
TestSceneSkinnableComboCounter.cs | ||
TestSceneSkinnableDrawable.cs | ||
TestSceneSkinnableHealthDisplay.cs | ||
TestSceneSkinnableHUDOverlay.cs | ||
TestSceneSkinnableScoreCounter.cs | ||
TestSceneSkinnableSound.cs | ||
TestSceneSkipOverlay.cs | ||
TestSceneSliderPath.cs | ||
TestSceneSoloGameplayLeaderboard.cs | ||
TestSceneSongProgress.cs | ||
TestSceneSpectator.cs | ||
TestSceneSpectatorHost.cs | ||
TestSceneSpectatorPlayback.cs | ||
TestSceneStarCounter.cs | ||
TestSceneStoryboard.cs | ||
TestSceneStoryboardSamplePlayback.cs | ||
TestSceneStoryboardWithOutro.cs | ||
TestSceneUnknownMod.cs | ||
TestSceneUnstableRateCounter.cs |