wiki

.osr (формат файла)

.osr - это формат файла, содержащий информацию о реплее osu!. Для его запуска карта, указанная в файле, должна находиться в папке "Songs".

Типы данных

Название Размер Описание
Byte 1 8-битное значение
Short 2 2-байтовое значение с прямым порядком байтов
Integer 4 4-байтовое значение с прямым порядком байтов
Long 8 8-байтовое значение с прямым порядком байтов
ULEB128 Любой Целое число переменной длины ULEB128
String Любой Состоит их трех частей: Первая часть имеет тип Byte и равна 0x00 (указывает, что следующие две части отсутствуют) или 0x0b (указывает, что следующие две части присутствуют). Если это 0x0b, тогда во второй части будет ULEB128, представляющий длину третьей части в байтах, а затем сама строка, закодированная в UTF-8

Формат файла

Байтовые смещения не включены в эту таблицу из-за значений переменной длины.

Тип данных Описание
Byte Игровой режим реплея (0 = osu!, 1 = osu!taiko, 2 = osu!catch, 3 = osu!mania)
Integer Версия игры на момент создания повтора (например, 20131216)
String MD5-хэш карты
String Ник игрока
String MD5-хэш реплея (определяется его некоторыми свойствами)
Short Число попаданий в "300"
Short Число попаданий в "100" в osu!, "150" в osu!taiko, "100" в osu!catch, "100" в osu!mania
Short Число попаданий в "50" в osu!, "50" в osu!mania, или маленьких фруктов в osu!catch
Short Число идеальных комбо (Geki) в osu! или "MAX" в osu!mania
Short Число неидеальных комбо (Katu) в osu! или "200" в osu!mania
Short Число промахов
Integer Суммарное число полученных очков
Short Самое большое набранное комбо
Byte Идеальное комбо (1 = без промахов, слайдербрейков и пропущенных концов слайдеров)
Integer Используемые моды (см. таблицу значений)
String Уровень здоровья: разделенные запятыми пары u/v, где u — это время в миллисекундах в песне, а v — значение с плавающей запятой от 0 до 1, равное количеству здоровья в данный момент времени (0 = полоска здоровья пуста, 1 = полоска здоровья заполнена)
Long Отметка времени (Windows ticks)
Integer Длина сжатых данных реплея (в байтах)
Byte Array Сжатые данные реплея
Long Онлайн-идентификатор результата
Double Дополнительная информация о модах. Присутствует только при включенном моде Target Practice

Дополнительная информация о модах:

Мод Описание
Target Practice Суммарная точность всех попаданий. Разделите её на количество целей на карте, чтобы получить точность, отображаемую в игре

Остальные данные содержат информацию о движении мыши и нажатиях клавиш в виде потока LZMA.

При распаковке текст содержит данные, разделенные запятыми. Каждая часть обозначает действие, представленное 4 числами в виде: w | x | y | z.

Число Тип данных Описание
w Long Время в миллисекундах с момента предыдущего действия
x Float Координата Х курсора в диапазоне 0 - 512
y Float Координата Y курсора в диапазоне 0 - 384
z Integer Битовая сумма нажатых кнопок мыши и клавиш (M1 = 1, M2 = 2, K1 = 4, K2 = 8, дым = 16). K1 всегда используется с M1, а K2 — с M2: 1 + 4 = 5; 2 + 8 = 10

В реплеях, записанных в версии osu! 20130319 и позднее, 32-битное случайное целое число (seed), используемое в результате, будет закодировано в дополнительный кадр реплея в конце потока LZMA в формате -12345|0|0|seed.

Моды

Указаны согласно osu! API.

Мод Значение (битовый сдвиг) Примечание
None 0
NoFail 1 (0)
Easy 2 (1)
TouchDevice 4 (2) Заменяет неиспользуемый мод NoVideo
Hidden 8 (3)
HardRock 16 (4)
SuddenDeath 32 (5)
DoubleTime 64 (6)
Relax 128 (7)
HalfTime 256 (8)
Nightcore 512 (9) Всегда используется вместе с DT: 512 + 64 = 576
Flashlight 1024 (10)
Autoplay 2048 (11)
SpunOut 4096 (12)
Relax2 8192 (13) Autopilot
Perfect 16384 (14)
Key4 32768 (15)
Key5 65536 (16)
Key6 131072 (17)
Key7 262144 (18)
Key8 524288 (19)
keyMod 1015808 k4+k5+k6+k7+k8
FadeIn 1048576 (20)
Random 2097152 (21)
LastMod 4194304 (22) Cinema
TargetPractice 8388608 (23) Только в ветке обновлений cuttingedge
Key9 16777216 (24)
Coop 33554432 (25)
Key1 67108864 (26)
Key3 134217728 (27)
Key2 268435456 (28)
ScoreV2 536870912 (29)
Mirror 1073741824 (30)