3.3.2 • Published 2 months ago

@rian8337/osu-droid-replay-analyzer v3.3.2

Weekly downloads
-
License
MIT
Repository
github
Last release
2 months ago

About

A replay analyzer for osu!droid.

Features

This module allows parsing osu!droid replay files (.odr) to get replay information.

Additionally, it provides a detection system to detect whether the player used three fingers or more to stream or two hands to jump.

Two hand detection is still a WIP.

Specific Requirements

This module has no specific requirements, however installed modules in installation may have specific requirements. It's advised to check them.

Installation

npm i @rian8337/osu-base @rian8337/osu-droid-replay-analyzer

or

yarn add @rian8337/osu-base @rian8337/osu-droid-replay-analyzer

Usage

To use the replay analyzer, you need a replay file (.odr).

Obtaining a replay file

There are multiple ways to get one.

Obtaining a replay file with a score ID

If you know a score's ID, you can use it to directly retrieve a replay:

import { MapInfo } from "@rian8337/osu-base";
import { ReplayAnalyzer } from "@rian8337/osu-droid-replay-analyzer";

// Obtaining a beatmap file is optional, however it allows the replay analyzer to output more data
// for old replays (replay version 1 or 2)
const beatmapInfo = await MapInfo.getInformation(901854);

if (!beatmapInfo.title) {
    return console.log("Beatmap not found");
}

// A `ReplayAnalyzer` instance that contains the replay
const replay = await new ReplayAnalyzer({
    scoreID: 12948732,
    map: beatmapInfo.map,
}).analyze();

// The data of the replay
const { data } = replay;

if (!data) {
    return console.log("Replay not found");
}

console.log(data);

Obtaining a local replay file

import { readFile } from "fs";
import { MapInfo } from "@rian8337/osu-base";
import { ReplayAnalyzer } from "@rian8337/osu-droid-replay-analyzer";

readFile("path/to/file.odr", async (err, replayData) => {
    if (err) throw err;

    // Obtaining a beatmap file is optional, however it allows the replay analyzer to output more data
    // for old replays (replay version 1 or 2)
    const beatmapInfo = await MapInfo.getInformation(901854);

    if (!beatmapInfo.title) {
        return console.log("Beatmap not found");
    }

    // A `ReplayAnalyzer` instance that contains the replay
    const replay = new ReplayAnalyzer({ scoreID: 0, map: beatmapInfo.map });

    replay.originalODR = replayData;

    await replay.analyze();

    // The data of the replay
    const { data } = replay;

    console.log(data);
});

Playstyle detections

To use this, you need to have a calculated instance of a beatmap from @rian8337/osu-difficulty-calculator or @rian8337/osu-rebalance-difficulty-calculator:

npm i @rian8337/osu-difficulty-calculator @rian8337/osu-rebalance-difficulty-calculator

or

yarn add @rian8337/osu-difficulty-calculator @rian8337/osu-rebalance-difficulty-calculator

You can exclude a difficulty module that you don't plan to use.

import { MapInfo, MapStats } from "@rian8337/osu-base";
import { DroidStarRating } from "@rian8337/osu-difficulty-calculator";
import { ReplayAnalyzer } from "@rian8337/osu-droid-replay-analyzer";

const beatmapInfo = await MapInfo.getInformation(901854);

if (!beatmapInfo.title) {
    return console.log("Beatmap not found");
}

// A `ReplayAnalyzer` instance that contains the replay
const replay = await new ReplayAnalyzer({
    scoreID: 12948732,
    map: beatmapInfo.map,
}).analyze();

// The data of the replay
const { data } = replay;

if (!data) {
    return console.log("Replay not found");
}

const stats = new MapStats({
    ar: data.forcedAR,
    speedMultiplier: data.speedModification,
    isForceAR: !isNaN(data.forcedAR),
    // In osu!droid version 1.6.7 and below, there exists a bug where NC is slower than DT in a few beatmaps
    // This option checks for said condition
    oldStatistics: data.replayVersion <= 3,
});

replay.map = new DroidStarRating().calculate({
    map: beatmapInfo.map,
    mods: data.convertedMods,
    stats: stats,
});

// Check for three-finger usage
replay.checkFor3Finger();

// Check for two-hand usage
replay.checkFor2Hand();
4.0.0-beta.22

2 months ago

4.0.0-beta.21

2 months ago

4.0.0-beta.20

2 months ago

4.0.0-beta.19

2 months ago

4.0.0-beta.18

2 months ago

4.0.0-beta.17

2 months ago

4.0.0-beta.16

2 months ago

4.0.0-beta.15

5 months ago

4.0.0-beta.14

6 months ago

4.0.0-beta.13

7 months ago

4.0.0-beta.12

8 months ago

4.0.0-beta.11

10 months ago

4.0.0-beta.10

11 months ago

4.0.0-beta.8

12 months ago

4.0.0-beta.9

11 months ago

3.3.1

1 year ago

4.0.0-beta.7

1 year ago

3.3.0

1 year ago

4.0.0-beta.6

1 year ago

4.0.0-beta.5

1 year ago

4.0.0-beta.4

1 year ago

4.0.0-beta.3

1 year ago

4.0.0-beta.2

1 year ago

3.3.2

1 year ago

4.0.0-beta.1

1 year ago

3.2.1

1 year ago

3.2.0

1 year ago

3.1.1

1 year ago

3.1.0

1 year ago

3.0.0-beta.33

1 year ago

3.0.0-beta.34

1 year ago

3.0.0-beta.35

1 year ago

3.0.0

1 year ago

4.0.0-beta.0

1 year ago

3.0.0-beta.30

1 year ago

3.0.0-beta.31

1 year ago

3.0.0-beta.32

1 year ago

3.0.0-beta.26

1 year ago

2.4.0

1 year ago

2.3.0

1 year ago

3.0.0-beta.20

1 year ago

3.0.0-beta.21

1 year ago

3.0.0-beta.22

1 year ago

3.0.0-beta.23

1 year ago

3.0.0-beta.24

1 year ago

3.0.0-beta.25

1 year ago

3.0.0-beta.19

1 year ago

3.0.0-beta.13

2 years ago

3.0.0-beta.14

2 years ago

3.0.0-beta.15

2 years ago

3.0.0-beta.16

2 years ago

3.0.0-beta.17

2 years ago

3.0.0-beta.18

1 year ago

3.0.0-beta.1

2 years ago

3.0.0-beta.0

2 years ago

3.0.0-beta.3

2 years ago

3.0.0-beta.2

2 years ago

3.0.0-beta.5

2 years ago

3.0.0-beta.4

2 years ago

3.0.0-beta.7

2 years ago

3.0.0-beta.6

2 years ago

3.0.0-beta.9

2 years ago

3.0.0-beta.8

2 years ago

2.2.0

2 years ago

3.0.0-beta.10

2 years ago

3.0.0-beta.11

2 years ago

3.0.0-beta.12

2 years ago

2.1.4

2 years ago

2.1.3

2 years ago

2.0.1

2 years ago

2.0.0

2 years ago

2.0.2-beta.0

2 years ago

2.0.2-beta.1

2 years ago

2.1.0-beta.1

2 years ago

2.1.0-beta.0

2 years ago

2.1.0-beta.3

2 years ago

2.1.0-beta.2

2 years ago

2.1.0-beta.5

2 years ago

2.1.0-beta.4

2 years ago

2.1.1-beta.0

2 years ago

2.1.2

2 years ago

2.1.1

2 years ago

2.0.0-alpha.32

2 years ago

2.0.0-alpha.31

2 years ago

2.1.0

2 years ago

2.0.0-alpha.7

2 years ago

2.0.0-alpha.8

2 years ago

2.0.0-alpha.9

2 years ago

2.0.0-alpha.11

2 years ago

2.0.0-alpha.3

2 years ago

2.0.0-alpha.10

2 years ago

2.0.0-alpha.4

2 years ago

2.0.0-alpha.5

2 years ago

2.0.0-alpha.6

2 years ago

2.0.0-alpha.0

2 years ago

2.0.0-alpha.1

2 years ago

2.0.0-alpha.2

2 years ago

2.0.0-alpha.19

2 years ago

2.0.0-alpha.18

2 years ago

2.0.0-alpha.17

2 years ago

2.0.0-alpha.16

2 years ago

2.0.0-alpha.15

2 years ago

2.0.0-alpha.14

2 years ago

2.0.0-alpha.13

2 years ago

2.0.0-alpha.12

2 years ago

1.4.18-alpha.0

2 years ago

2.0.0-alpha.30

2 years ago

2.0.0-alpha.22

2 years ago

2.0.0-alpha.21

2 years ago

2.0.0-alpha.20

2 years ago

2.0.0-alpha.29

2 years ago

2.0.0-alpha.28

2 years ago

2.0.0-alpha.27

2 years ago

2.0.0-alpha.26

2 years ago

1.4.17

2 years ago

2.0.0-alpha.25

2 years ago

2.0.0-alpha.24

2 years ago

2.0.0-alpha.23

2 years ago

1.4.13-alpha.1

2 years ago

1.4.13-alpha.0

2 years ago

1.4.12-alpha.4

2 years ago

1.4.12-alpha.3

2 years ago

1.4.12-alpha.2

2 years ago

1.4.12-alpha.1

2 years ago

1.4.12-alpha.0

2 years ago

1.4.13

2 years ago

1.4.12

2 years ago

1.4.15

2 years ago

1.4.12-alpha.8

2 years ago

1.4.16

2 years ago

1.4.12-alpha.7

2 years ago

1.4.12-alpha.6

2 years ago

1.4.12-alpha.5

2 years ago

1.4.6

2 years ago

1.2.8

2 years ago

1.4.5

2 years ago

1.2.7

2 years ago

1.4.4

2 years ago

1.2.6

2 years ago

1.4.3

2 years ago

1.2.5

2 years ago

1.4.2

2 years ago

1.2.4

2 years ago

1.4.1

2 years ago

1.3.0

2 years ago

1.4.9-alpha.0

2 years ago

1.4.9-alpha.1

2 years ago

1.4.9

2 years ago

1.4.8

2 years ago

1.4.10

2 years ago

1.4.7

2 years ago

1.2.9

2 years ago

1.4.11-alpha.0

2 years ago

1.4.8-alpha.1

2 years ago

1.4.8-alpha.0

2 years ago

1.2.3

2 years ago

1.2.1

2 years ago

1.2.0

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago