.osr 是一种包含 osu! 回放信息的文件格式。想要使用它,回放所指定的地图必须存在于 "Songs" 文件夹。
名称 | 字节数 | 描述 |
---|---|---|
Byte | 1 | 一个单独的 8bit 值。 |
Short | 2 | 一个 2-byte 长的小端值。 |
Integer | 4 | 一个 4-byte 长的小端值。 |
Long | 8 | 一个 8-byte 长的小端值。 |
ULEB128 | 可变 | 一个长度可变的 Integer。参阅 ULEB128。 |
String | 可变 | 拥有三部分: 第一个 byte 如果是 0x00,表示下面两部分不存在。如果是 0x0b(十进制为11),表示下面两部分存在。如果是 0x0b,下面会有一个 ULEB128,代表字符串的长度。然后是字符串本身,使用 UTF-8 编码,参阅 UTF-8。 |
由于长度可变,字节偏移不包含在此表中。
数据类型 | 描述 |
---|---|
Byte | 该回放的游戏模式(0 = osu!, 1 = osu!taiko, 2 = osu!catch, 3 = osu!mania) |
Integer | 创建该回放文件的游戏版本(例如:20131216) |
String | 该地图的 MD5 hash 值 |
String | 玩家名称 |
String | 回放文件的 MD5 hash(包含回放的确定属性) |
Short | “300” 判定的数量 |
Short | “100” 判定(osu!),“150” 判定(Taiko),“100” 判定(CTB),“100” 判定(osu!mania)的数量 |
Short | “50” 判定(osu!),小水果(CTB),“50” 判定(osu!mania)的数量 |
Short | “激”判定(osu!),彩色 “300” 判定(osu!mania)的数量 |
Short | “喝”判定(osu!),“200” 判定(osu!mania)的数量 |
Short | Miss 的数量 |
Integer | 结算界面显示的总分 |
Short | 结算界面显示的最大连击数 |
Byte | Perfect/full combo(1 = 没有Miss和断滑条,并且没有提前完成的滑条) |
Integer | 使用的 Mods 。参阅下方的 Mods 值列表。 |
String | 生命值图像:用逗号分隔的 u/v 组,u 代表此时的时间(毫秒),v 是一个 Float 浮点值(从0到1)表示此时的生命值(0=空生命值条,1=满生命值条)。 |
Long | 时间戳(Windows ticks) |
Integer | 以 byte 表示的压缩后的回放数据的长度 |
Byte 数组 | 压缩后的回放数据 |
Long | 在线分数 ID |
Double | 附加的 mod 信息。只在 Target Practice 开启时存在 |
附加的Mod信息:
Mod | 储存的信息 |
---|---|
Target Practice | 所有击打的总精确度。将该值除以地图中物件的数量就可以得到游戏中应显示的精确度。 |
剩余的数据包括在一个 LZMA 流里的鼠标移动与按键的信息。
解压缩之后,文本包括一些用逗号分隔的数据。每一块数据反映了一个动作,表现在下面的表格里的4个数字: w | x | y | z.
部分 | 数据类型 | 描述 |
---|---|---|
w | Long | 距离上个动作的时间(毫秒) |
x | Float | 鼠标的X坐标(从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。) |
在 20130319
版本或之后版本创建的回放内,用于分数的32位随机整数 seed 会以 -12345|0|0|seed
的格式编码进LZMA流末尾的附加回放帧中。
可见于 osu! API。
Mod | 值(BitOffset) | 注释 |
---|---|---|
None | 0 | |
NoFail | 1 (0) | |
Easy | 2 (1) | |
TouchDevice | 4 (2) | 替换未使用的 No Video |
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) | 仅 osu!cuttingedge |
Key9 | 16777216 (24) | |
Coop | 33554432 (25) | |
Key1 | 67108864 (26) | |
Key3 | 134217728 (27) | |
Key2 | 268435456 (28) | |
ScoreV2 | 536870912 (29) | |
Mirror | 1073741824 (30) |