Rizline 谱面格式说明
Rizline 谱面采用 JSON 格式,可以使用任何文本编辑器进行编写。
概念
WARNING
以下概念为笔者设定仅方便理解,不代表官方定义。
我们约定:
为像素单位, 为画面宽度, 为画面高度。 :每分钟节拍数 (Beats Per Minute)。 :单位时间, ,相当于四分音符。
结构
根结构 root
fileVersion
int
:文件版本,作用尚不明确,目前已出现的值为0
和1
。songsName
string
:曲名,作用尚不明确。- 该值在部分谱面为对应曲目的正确名称,在其他谱面为空字符串。
themes
Array<Theme>
:主题列表,记录谱面的各个颜色主题。- 该列表第一个元素为初始主题,后面的元素为挑战(Riztime)主题。
challengeTimes
Array<ChallengeTime>
:挑战(Riztime)时间列表。- 该列表元素与挑战主题依次对应,因此其个数总比
themes
少 1 个元素。
- 该列表元素与挑战主题依次对应,因此其个数总比
bPM
float
:基准 BPM,即每分钟节拍数 (Beats Per Minute)。- 确定了单位
时值(可能改变)。
- 确定了单位
bpmShifts
Array<BpmShift>
:BPM 变化列表,记录谱面的 BPM 变化。offset
float
:谱面偏移,作用尚不明确,目前已出现的值为0.0
。lines
Array<Line>
:线列表,记录谱面中出现的各种线。canvasMoves
Array<CanvasMove>
:图层列表,记录图层的移动事件。- 附加于对应
canvasIndex
的LinePoint
额外的位置偏移,可以产生线的形状变化效果。
- 附加于对应
cameraMove
CameraMove
:相机移动事件,记录谱面的相机视角变化。- 附加于谱面整体的缩放和水平移动,可以产生视角聚焦的效果。
你知道的太多了(基于v1.2.6
)
fileVersion
仅在 Tempest 的 IN 难度谱面为1
,在其他谱面均为0
。lines
列表元素个数在不同谱面之间存在较大差异。- 在 Bring Me Back 的 EZ 难度谱面,该列表元素个数为
1
。 - 在 Conway's Child 的 IN 难度谱面,该列表元素个数为
3354
。
- 在 Bring Me Back 的 EZ 难度谱面,该列表元素个数为
主题 Theme
- colorsList
Array<Color>
:颜色列表。- 该列表包含三个元素,分别表示背景颜色、音符颜色、血条/特效颜色。
挑战时间 ChallengeTime
在开始时刻,动画从屏幕正下方开始以半圆的形状逐渐扩展,经过一段过渡时间切换到对应的挑战主题;在结束时刻,动画从屏幕正上方开始以半圆的形状逐渐收缩,经过一段过渡时间回到初始主题。动画重叠时以最上层的动画为准。
- checkPoint
float
:检查点,作用尚不明确。 - start
float
:开始时刻,单位。 - end
float
:结束时刻,单位。 - transTime
float
:过渡时间(单位:秒)。
BPM 变化 BpmShift
- time
float
:时刻,单位,表示 BPM 变化发生的时间点。 - value
float
:值,比例系数,无单位,与bPM的乘积即为变化生效时的实时 BPM。 - easeType
int
:过渡类型,无意义,目前已出现的值为0
。 - floorPosition
float
:累计值(单位:秒),表示time时刻的累计偏移量。
线 Line
- linePoints
Array<LinePoint>
:线点列表,记录线的关键点。 - notes
Array<Note>
:音符列表,记录线上的音符。 - judgeRingColor
Array<ColorPoint>
:判定圈颜色列表,记录线的判定圈的颜色变化,在其第一个元素的时刻之后生效。生效时显示对应颜色的判定圈;否则不显示判定圈。 - lineColor
Array<ColorPoint>
:线颜色列表,记录线的整体颜色变化,在其第一个元素的时刻之后生效。生效时对应的 rgba 通道与线点的 rgb 通道混合,同时保留线点的 a 通道;否则线点的 rgba 通道颜色不变。
图层移动 CanvasMove
- index
int
:索引,从0
开始,与所在列表该元素的数组下标一致。 - xPositionKeyPoints
Array<KeyPoint>
:X 位置关键帧列表,记录该图层水平偏移。 - speedKeyPoints
Array<KeyPoint>
:速度关键帧列表,记录该图层垂直偏移。
相机移动 CameraMove
- scaleKeyPoints
Array<KeyPoint>
:缩放关键帧列表,记录整体缩放倍率。 - xPositionKeyPoints
Array<KeyPoint>
:X 位置关键帧列表,记录整体水平偏移。- 注意视觉上的移动方向与其数值增减相反,可以理解为谱面实际位置不变而相机移动。
线点 LinePoint
- time
float
:时刻,单位,表示该线点到达判定位置的时刻。 - xPosition
float
:X 坐标,单位。 - color
Color
:颜色,记录该线点颜色,与相邻线点的连线颜色均匀过渡。 - easeType
int
:过渡类型,记录该线点与下一个线点之间连线的水平位置的过渡类型。 - canvasIndex
int
:图层索引,记录该线点所在图层的index
。 - floorPosition
float
:累计值(单位),表示该线点在对应图层中相对于初始时刻的累计垂直距离,通过该线点所在图层的 speedKeyPoints
计算而来。
音符 Note
type
int
:音符的类型,目前可用的值为0
1
2
。0
:Tap 音符,在判定时刻点击屏幕。1
:Drag 音符,在判定时刻点击或按住屏幕。2
:Hold 音符,在判定时刻点击并长按直至音符消失。
time
float
:判定时刻,单位,表示该音符到达判定位置的时刻。 floorPosition
float
:累计值(单位),表示该音符所在线条在指定时刻相对于初始时刻的累计垂直距离,通过对应线点所在图层的 speedKeyPoints
计算而来(需要验证),确保音符位于线上。otherInformations
Array<float>
:附加信息列表。- 对于非 Hold 音符,该列表为空数组。
- 对于 Hold 音符,该列表有 3 个元素,分别表示 Hold 尾的
time
、canvasIndex
和floorPosition
。
颜色点 ColorPoint
- startColor
Color
:开始颜色。 - endColor
Color
:结束颜色。 - time
float
:时刻,单位。
关键点 KeyPoint
time
float
:时刻,单位。 value
float
:值。- 对于
speedKeyPoints
的元素,该值单位。 - 对于
xPositionKeyPoints
的元素,该值单位。 - 对于
scaleKeyPoints
的元素,该值为比例系数,无单位。
- 对于
easeType
int
:过渡类型,记录该关键点与下一个关键点之间连线的值的过渡类型。- 对于
speedKeyPoints
的元素,该值恒为0
。
- 对于
floorPosition
float
:累计值。对于
speedKeyPoints
的元素,该值单位,表示累计垂直距离。其大致计算公式为: 其中,
value
为speedKeyPoints
的计算值,scale
为scaleKeyPoints
的计算值,speed
为游戏内设置的谱面流速,为实际累计高度(单位 )。此公式中的所有常数均为实测得到,并非精确值。 对于
xPositionKeyPoints
和scaleKeyPoints
的元素,该值恒为0
。
颜色 Color
- r
int
:红色分量(0-255)。 - g
int
:绿色分量(0-255)。 - b
int
:蓝色分量(0-255)。 - a
int
:alpha 分量(0-255),即不透明度。- 值为
0
表示完全透明;值为255
表示完全不透明。
- 值为