Crate rosu_pp[][src]

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

Conversions are generally not supported.

Usage

use std::fs::File;
use rosu_pp::{Beatmap, BeatmapExt};

let file = match File::open("/path/to/file.osu") {
    Ok(file) => file,
    Err(why) => panic!("Could not open file: {}", why),
};

// Parse the map yourself
let map = match Beatmap::parse(file) {
    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.
// However, to calculate specific pp values, it is recommended
// to match on the map's mode yourself and modify the mode's
// pp calculator, e.g. `TaikoPP`, manually.
let result = map.pp()
    .mods(24) // HDHR
    .combo(1234)
    .misses(2)
    .accuracy(99.2)
    .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)
    .passed_objects(600)
    .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);

osu!standard versions

  • all_included: Both stack leniency & slider paths are considered so that the difficulty and pp calculation immitates osu! as close as possible. Pro: Most precise; Con: Least performant.
  • no_leniency: The positional offset of notes created by stack leniency is not considered. This means the jump distance inbetween notes might be slightly off, resulting in small inaccuracies. Since calculating these offsets is relatively expensive though, this version is considerably faster than all_included.
  • no_slider_no_leniency (i.e. oppai): In addition to not considering the positional offset caused by stack leniency, slider paths are also ignored. This means the travel distance of notes is completely omitted which may cause further inaccuracies. Since the slider paths don't have to be computed though, it is generally faster than no_leniency.

Note: If the fruits feature is enabled, sliders will be parsed regardless, resulting in a reduced performance advantage of no_sliders_no_leniency.

Features

FlagDescription
defaultEnable all modes and choose the no_leniency version for osu!standard.
taikoEnable osu!taiko.
fruitsEnable osu!ctb.
maniaEnable osu!mania.
osuEnable osu!standard. Requires to also enable exactly one of the features no_leniency, no_sliders_no_leniency, or all_included.
no_leniencyWhen calculating difficulty attributes in osu!standard, ignore stack leniency but consider sliders. Solid middleground between performance and precision, hence the default version.
no_sliders_no_leniencyWhen calculating difficulty attributes in osu!standard, ignore stack leniency and sliders. Best performance but slightly less precision than no_leniency.
all_includedWhen calculating difficulty attributes in osu!standard, consider both stack leniency and sliders. Best precision but significantly worse performance than no_leniency.

Roadmap

  • osu sr versions
    • [x] all included
    • [x] no_leniency
    • [x] no_sliders_no_leniency
  • [x] taiko sr
  • [x] ctb sr
  • [x] mania sr

  • [x] osu pp
  • [x] taiko pp
  • [x] ctb pp
  • [x] mania pp

  • [x] refactoring
  • [x] benchmarking

Modules

fruits
mania
osu
taiko

Structs

Beatmap

The main beatmap struct containing all data relevant for difficulty and pp calculation

BeatmapAttributes

Summary struct for a Beatmap's attributes.

DifficultyPoint

TimingPoint that depends on a previous one.

FruitsPP

Calculator for pp on osu!ctb maps.

HitObject

"Intermediate" hitobject created through parsing. Each mode will handle them differently.

ManiaPP

Calculator for pp on osu!mania maps.

OsuPP

Calculator for pp on osu!standard maps.

Pos2

Simple (x, y) coordinate / vector

PpResult

Basic struct containing the result of a PP calculation.

Strains

The result of calculating the strains on a map. Suitable to plot the difficulty of a map over time.

TaikoPP

Calculator for pp on osu!taiko maps.

TimingPoint

New rhythm speed change.

Enums

AnyPP

Calculator for pp on maps of any mode.

GameMode

The mode of a beatmap.

HitObjectKind

Further data related to specific object types.

ParseError
PathType

The type of curve of a slider.

StarResult

Basic enum containing the result of a star calculation based on the mode.

Traits

AttributeProvider
BeatmapExt
HitSound
Mods

Type Definitions

ParseResult