wiki

.osr (format berkas)

.osr merupakan format berkas yang menguraikan rincian tayangan ulang osu! tertentu. Berkas .osr hanya akan dapat diputar apabila klien permainan memiliki beatmap yang digunakan untuk merekam berkas ini secara persis.

Jenis data

Nama Byte Keterangan
Byte 1 Nilai 8-bit tunggal.
Short 2 Nilai ujung terkecil (little endian) 2-byte.
Integer 4 Nilai ujung terkecil (little endian) 4-byte.
Long 8 Nilai ujung terkecil (little endian) 8-byte.
ULEB128 Bervariasi Integer dengan panjang yang bervariasi. Lihat ULEB128 untuk keterangan lebih lanjut.
String Bervariasi Memiliki tiga bagian; data ini akan selalu diawali oleh byte tunggal yang bernilai 0x00 atau 0x0b (11 desimal). Apabila byte ini bernilai 0x00, kedua bagian lainnya akan bernilai kosong. Apabila byte ini bernilai 0x0b, maka byte ini akan diikuti dengan ULEB128 (yang menandakan panjang string yang bersangkutan) dan lalu string itu sendiri yang dienkode dengan UTF-8. Lihat UTF-8 untuk keterangan lebih lanjut.

Format

Offset byte tidak disertakan dalam tabel ini karena masing-masing byte dapat memiliki panjang nilai yang berbeda-beda.

Jenis data Keterangan
Byte Mode permainan (0 = osu!, 1 = osu!taiko, 2 = osu!catch, 3 = osu!mania)
Integer Versi permainan pada saat tayangan ulang dihasilkan (mis. 20131216)
String Hash MD5 beatmap
String Nama pemain
String Hash MD5 tayangan ulang (yang meliputi atribut tayangan ulang tertentu)
Short Jumlah penilaian 300 yang diperoleh
Short Jumlah penilaian 100 pada osu!, 150 pada osu!taiko, 100 pada osu!catch, dan 100 pada osu!mania yang diperoleh
Short Jumlah penilaian 50 pada osu!, buah kecil pada osu!catch, dan penilaian 50 pada osu!mania yang diperoleh
Short Jumlah penilaian Geki pada osu! dan Max 300 pada osu!mania yang diperoleh
Short Jumlah penilaian Katu pada osu! dan 200 pada osu!mania yang diperoleh
Short Jumlah miss
Integer Jumlah skor yang ditampilkan pada laporan skor
Short Kombo terbesar yang ditampilkan pada laporan skor
Byte Keterangan perfect/full combo (1 = permainan yang berlangsung tanpa miss, tanpa slider break, dan tanpa slider yang dilepas terlalu awal)
Integer Mod yang digunakan. Lihat tabel di bawah untuk nilai masing-masing mod.
String Kondisi HP bar: dalam bentuk pasangan u/v yang terpisah oleh koma, di mana u merupakan waktu yang telah ditempuh pada lagu dan v merupakan nilai floating point 0 - 1 yang menggambarkan persentase HP yang dimiliki pada titik u ini (0 = HP bar kosong, 1 = HP bar penuh)
Long Keterangan waktu (Tick Windows)
Integer Jumlah byte dalam data tayangan ulang yang terkompres
Byte Array Data tayangan ulang yang terkompres
Long ID online skor
Double Informasi mod tambahan. Hanya ada apabila mod Target Practice diaktifkan.

Informasi mod tambahan:

Mod Informasi yang disimpan
Target Practice Total akurasi dari seluruh objek yang dikenai. Bagi angka ini dengan jumlah target yang ada pada beatmap untuk memperoleh nilai akurasi yang ditampilkan di dalam permainan.

Sisa data yang ada akan mengandung informasi seputar pergerakan mouse dan penekanan tuts keyboard dalam bentuk stream LZMA.

Pada saat didekompresi, sisa data ini akan mengeluarkan teks yang berisikan berbagai data yang terpisah oleh koma. Masing-masing bagian dari teks ini merupakan gambaran dari tindakan tertentu, sebagaimana yang ditunjukkan oleh 4 angka dalam bentuk w | x | y | z berikut:

Bagian Jenis data Keterangan
w Long Waktu setelah tindakan sebelumnya dalam satuan milidetik
x Float Koordinat sumbu-x kursor dari 0 - 512
y Float Koordinat sumbu-y kursor dari 0 - 384
z Integer Kombinasi bit dari tuts keyboard/tombol mouse yang ditekan (M1 = 1, M2 = 2, K1 = 4, K2 = 8, Smoke 16) (K1 selalu digunakan bersamaan dengan M1; K2 selalu digunakan bersamaan dengan M2; 1+4=5, 2+8=10)

Pada tayangan ulang yang direkam pada osu! versi 20130319 atau yang lebih baru, nomor benih acak (RNG seed) 32-bit yang digunakan pada skor akan dienkodekan ke dalam frame tayangan ulang tambahan di akhir stream LZMA dengan format -12345|0|0|nomor benih.

Mod

Sebagaimana yang tertera pada dokumentasi API osu!.

Mod Nilai (BitOffset) Keterangan
Tidak ada 0
NoFail 1 (0)
Easy 2 (1)
TouchDevice 4 (2) Menggantikan mod NoVideo yang tidak lagi digunakan
Hidden 8 (3)
HardRock 16 (4)
SuddenDeath 32 (5)
Double Time 64 (6)
Relax 128 (7)
HalfTime 256 (8)
Nightcore 512 (9) Selalu digunakan bersamaan dengan DT: 512 + 64 = 576. Menggantikan mod Taiko yang tidak lagi digunakan
Flashlight 1024 (10)
Autoplay 2048 (11)
SpunOut 4096 (12)
Relax2 8192 (13) Mod 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) Mod Cinema
TargetPractice 8388608 (23) Khusus osu! versi Cutting Edge
Key9 16777216 (24)
Coop 33554432 (25)
Key1 67108864 (26)
Key3 134217728 (27)
Key2 268435456 (28)
ScoreV2 536870912 (29)
Mirror 1073741824 (30)
/