Nothing as of now
-
Adjustments:
- When passing an osu!std map to
TaikoGradualDifficultyAttributes
orManiaGradualDifficultyAttributes
, it now automatically converts the map internally. For osu!catch is was already happening trivially.
- When passing an osu!std map to
-
Fixes:
- Fixed passed object count for taiko by ignoring non-circles
- Fixed a niche panic on UTF-16 encoded maps (#18)
- Fixed an occasional underflow when calculating accuracy pp
- Fixed an infinite loop on special ctb maps
-
Adjustments:
- When passing an osu!std map to
TaikoPP
orManiaPP
, it now automatically converts the map internally. For osu!catch it was already happening trivially.
- When passing an osu!std map to
-
Fixes:
- The fields
section_len
for all strain structs no longer depends on the clock rate.
- The fields
Big changes including the most recent osu!, taiko, and mania updates, aswell as various breaking changes.
-
Breaking changes:
TimingPoint
andDifficultyPoint
no longer contain akiai
fieldDifficultyPoint
now has the additional fieldsbpm_mult
andgenerate_ticks
Beatmap
now stores timing- and difficulty points in aSortedVec
Beatmap
now has the additional fieldeffect_points
- For the performance calculators
OsuPP
,TaikoPP
,ManiaPP
, andAnyPP
the methodmisses
has been renamed ton_misses
- The accuracy method for
OsuPP
,TaikoPP
, andManiaPP
is no longer required to be called last ManiaPP
no longer has ascore
method. Instead it hasn320
,n300
.n200
,n100
,n50
, andn_misses
methods, aswell as astate
method- Gradual performance calculation for mania now requires a
ManiaScoreState
instead ofscore
ManiaDifficultyAttributes
now have amax_combo
field and methodOsuDifficultyAttributes
now have aspeed_note_count
fieldOsuPerformanceAttributes
andTaikoPerformanceAttributes
now have aeffective_miss_count
fieldTaikoDifficultyAttributes
now have apeak
andhit_window
field- Some other things I likely forgot about :S
-
Additions:
- The performance calculators
OsuPP
,TaikoPP
,ManiaPP
, andAnyPP
now have ahitresult_priority
method to specify how hitresults should be generated
- The performance calculators
-
Fixes:
- Fixed a bunch of fringe yet significant bugs for taiko and mania converts
- Fixed various floating point inaccuracies for osu!standard
- Fixed parsing difficulty points from .osu files
- Instead of throwing an error, invalid lines during parsing will just be ignored in some cases
- Fixed an unsafe transmute between incompatible types while parsing sliders
- Fixes:
- Fixed stack overflow bug when allocating ticks for some sliders on converted catch maps (#14)
- Breaking changes:
Beatmap::attributes
now returns a new typeBeatmapAttributesBuilder
to allow for more fine-grained calculations.BeatmapAttributes
now contains expected values and also includes aBeatmapHitWindows
field containing the AR (preempt) and OD (great) hit windows in milliseconds. (#15)
- Fixes:
- Parsing edge sounds is now mindful about overflowing a byte (ref. ranked map id 80799)
- Parsing the event section now attempts to read non-ASCII before eventually failing (ref. ranked map id 49374)
- Fixes:
- Slider velocity is now adjusted properly for taiko converts
- Fixed missing slider sounds for taiko converts
- Breaking changes:
- Replaced the simple
Strains
struct with a new struct{Mode}Strains
that contains more detail w.r.t. the mode. - Renamed all
GameMode
variants to more idiomatic names - Renamed
ParseError::IOError
toParseError::IoError
- Replaced the simple
- Additions:
- Added the
ControlPoint
andControlPointerIter
types to the public interface TimingPoint
andDifficultyPoint
now implementDefault
- Added new methods to
Beatmap
:convert_mode
: Convert a map into another mode. (doesn't do anything if the starting map is not osu!standard)control_points
: Return an iterator over all control points of a maptotal_break_time
: Return the accumulated break time in millisecondstiming_point_at
: Return the timing point for the given timestampdifficulty_point_at
: Return the difficulty point for the given timestamp if available
- Added the
- Breaking changes:
- Moved some types to a different module. The following types can now be found in
rosu_pp::beatmap
:Beatmap
BeatmapAttributes
ControlPoint
ControlPointIter
DifficultyPoint
GameMode
TimingPoint
- Added a new field
kiai: bool
to bothTimingPoint
andDifficultyPoint
to denote whether the current timing section is in kiai mode - Added a new field
breaks: Vec<Break>
toBeatmap
that contains all breaks throughout the map - Added a new field
edge_sounds: Vec<u8>
to theSlider
variant ofHitObjectKind
to denote the sample played on slider heads, ends, and repeats
- Moved some types to a different module. The following types can now be found in
- Other:
- Small performance improvements for osu!taiko calculations
- Fixes:
- Fixed parsing non-UTF-8 encoded files and improved parse performance overall (#9)
- Handle missing approach rate properly this time
- Fixes:
- Performance calculation for taiko & mania now considers custom clock rates properly
- Fixes:
- Fixed panic on maps with 0 objects
- Fixed droplet timings on juicestreams with span count >1
- Fixed timing point parsing on some (older) maps where "uninherited" value did not coincide with beat length
- Fixed handling .osu files with missing difficulty attributes
- Fixed huge memory allocations caused by incorrectly parsing .osu files
- Breaking changes:
- The
stars
andstrains
functions for all modes were removed. Instead use the{Mode}Stars
builder pattern which is similar to{Mode}PP
. BeatmapExt::stars
's definition was adjusted to use theAnyStars
builder struct- Store
HitObject::sound
inBeatmap::sounds
instead to reduce the struct size - Removed the mode features
osu
,fruits
,taiko
, andmania
. Now all modes are always supported. - Renamed the
rosu_pp::fruits
module torosu_pp::catch
. Similarly, all structsFruits{Name}
were renamed toCatch{Name}
and enums over the mode have theirFruits
variant renamed toCatch
- Renamed
Mods
' methodspeed
toclock_rate
- The
- Additions:
- Added
AttributeProvider
impl for{Mode}PerformanceAttributes
- Added the method
clock_rate
to{Mode}PP
and{Mode}Stars
to consider a custom clock rate instead of the one dictated by mods.
- Added
- Fixed out of bounds panic on maps with single-control-point linear sliders
- Fixed incorrect attributes on maps with only 1 or 2 hit objects for all modes
- Added method
Beatmap::from_path
so the file does not have to be created manually forBeatmap::parse
. - Added a bunch of documentation.
- Added method
Beatmap::bpm
- Added method
max_combo
forDifficultyAttributes
,PerformanceAttributes
, and all{Mode}PerformanceAttributes
- Added methods
TaikoDifficultyAttributes::max_combo
andOsuDifficultyAttributes::max_combo
- Added structs
{Mode}GradualDifficultyAttributes
to calculate a map's difficulty after every or every few objects instead of calling the mode'sstars
function over and over. - Added structs
{Mode}GradualPerformanceAttributes
to calculate the performance on a map after every or every few objects instead of using{Mode}PP
over and over. - Added
BeatmapExt::gradual_difficulty
andBeatmapExt::gradual_performance
to gradually calculate the difficulty or performance on maps of any mode, hit object by hit object. - Added methods
{Mode}PP::state
that take a{Mode}ScoreState
(same forAnyPP
andScoreState
) to set all parameters at once. - [BREAKING] Removed the
ParseError
variantsInvalidPathType
andInvalidTimingSignature
and renamedInvalidFloatingPoint
toInvalidDecimalNumber
. - [BREAKING] Removed the
last_control_point
field ofHitObjectKind::Slider
when neither theosu
nor thefruits
feature is enabled. - [BREAKING] Added the field
TaikoDifficultyAttributes::max_combo
- [BREAKING] Renamed the
attributes
field todifficulty
for all{Mode}PerformanceAttributes
structs - [BREAKING] Replaced field
FruitsDifficultyAttributes::max_combo
by a method with the same name
- [BREAKING] With the importance of sliders for osu!standard, the
no_sliders_no_leniency
feature became too inaccurate. Additionally, since considering sliders now inherently drags performance down a little more, the difference betweenno_leniency
andall_included
became too small. Hence, the three osu featuresno_sliders_no_leniency
,no_leniency
, andall_included
were removed. When theosu
feature is enabled, it will now essentially useall_included
under the hood. Additionally, instead of importing throughrosu_pp::osu::{version}
, you now have to import throughrosu_pp::osu
. - [BREAKING] Instead of returning
PpResult
, performance calculations now return{Mode}PerformanceAttributes
andPpResult
has been renamed toPerformanceAttributes
. - [BREAKING] Instead of returning
StarResult
, difficulty calculations now return{Mode}DifficultyAttributes
andStarResult
has been renamed toDifficultyAttributes
. - [BREAKING] Various fields and methods now include
f64
instead off32
to stay true to osu!'s original code - Added internal binary crate
pp-gen
to calculate difficulty & pp values viaPerformanceCalculator.dll
- Added internal binary crate
pp-plot
to plot out differences betweenpp-gen
's output androsu-pp
values - osu: Updated up to commit 9fb2402781ad91c197d51aeec716b0000f52c4d1 (2021-11-12)
- Reduced amount of required features of
async_std
andasync_tokio
- Fixed a panic for some mania difficulty calculations on converts
- Updated the difficulty & pp changes from 21.07.27
- Fixed dead loop when reading empty
.osu
files (#2 - @Pure-Peace) - Updated osu's clockrate bugfix for all modes
-
osu & fruits:
-
Fixed specific slider patterns
-
Optimized Bezier, Catmull, and other small things
Benchmarking for osu!standard showed a 25%+ improvement for performance aswell as accuracy
-
-
fruits:
- Fixed tick timing for reverse sliders
-
taiko:
- Micro optimizations
- parse & osu:
- Cleanup and tiny optimizations
- Async beatmap parsing through features
async_tokio
orasync_std
(#1 - @Pure-Peace) - [BREAKING] Hide various parsing related types further inwards, i.e.
rosu_pp::parse::some_type
instead ofrosu_pp::some_type
- Affected types:
DifficultyPoint
,HitObject
,Pos2
,TimingPoint
,HitObjectKind
,PathType
,HitSound
- Affected types:
-
parse:
- Efficiently handle huge amounts of curvepoints
-
osu:
- Fixed panic on unwrapping unavailable hit results
- Fixed occasional underflow when calculating pp with passed_objects
-
taiko:
- Fixed missing flooring of hitwindow for pp calculation
-
fruits:
- Fixed passed objects in star calculation
-
mania:
- Fixed pp calculation on HR