2021-11-21 17:28:23 +01:00
2021-11-14 16:03:35 +01:00
2021-11-14 16:21:58 +01:00
2021-11-21 17:28:23 +01:00
2021-11-21 12:02:22 +01:00
2021-01-08 09:22:55 +01:00
2021-11-21 17:28:23 +01:00

crates.io docs

rosu-pp

A standalone crate to calculate star ratings and performance points for all osu! gamemodes.

Conversions between game modes (i.e. "converts") are generally not supported.

Async is supported through features, see below.

Usage

use rosu_pp::{Beatmap, BeatmapExt};

// Parse the map yourself
let map = match Beatmap::from_path("/path/to/file.osu") {
    Ok(map) => map,
    Err(why) => panic!("Error while parsing map: {}", why),
};

// If `BeatmapExt` is included, you can make use of
// some methods on `Beatmap` to make your life simpler.
let result = map.pp()
    .mods(24) // HDHR
    .combo(1234)
    .misses(2)
    .accuracy(99.2) // should be called last
    .calculate();

println!("PP: {}", result.pp());

// If you intend to reuse the current map-mod combination,
// make use of the previous result!
// If attributes are given, then stars & co don't have to be recalculated.
let next_result = map.pp()
    .mods(24) // HDHR
    .attributes(result) // recycle
    .combo(543)
    .misses(5)
    .n50(3)
    .accuracy(96.5)
    .calculate();

println!("Next PP: {}", next_result.pp());

let stars = map.stars(16, None).stars(); // HR
let max_pp = map.max_pp(16).pp();

println!("Stars: {} | Max PP: {}", stars, max_pp);

With async

If either the async_tokio or async_std feature is enabled, beatmap parsing will be async.

use rosu_pp::{Beatmap, BeatmapExt};

// Parse the map asynchronously
let map = match Beatmap::from_path("/path/to/file.osu").await {
    Ok(map) => map,
    Err(why) => panic!("Error while parsing map: {}", why),
};

// The rest stays the same
let result = map.pp()
    .mods(24) // HDHR
    .combo(1234)
    .misses(2)
    .accuracy(99.2)
    .calculate();

println!("PP: {}", result.pp());

Features

Flag Description
default Enable all modes.
osu Enable osu!standard.
taiko Enable osu!taiko.
fruits Enable osu!ctb.
mania Enable osu!mania.
async_tokio Beatmap parsing will be async through tokio
async_std Beatmap parsing will be async through async-std

Accuracy

Here are some plots showing the differences of rosu-pp's values and osu!'s official osu-tools.

Note that osu-tools was used on this commit which is currently (2021-11-14) accurate for osu!standard but for other modes it might include changes that were not applied into stable and thus not implemented in rosu-pp.

osu!standard: (very accurate, flashlight has the highest average but is still very small)

osu!mania: (close to perfect values)

osu!catch: (pretty accurate)

osu!taiko: (decently accurate, potentially more imprecise due to non-live changes in osu-tools)

S
Description
PP and star calculation for all osu! gamemodes
Readme MIT 3.1 MiB
Languages
Rust 100%