Skip to content

认识关卡文件

ADOFAI 的关卡文件 .adofai 本质上是一个 JSON 文件。

顶层结构

json
{
  "settings": { ... },      // 关卡设置:BPM、曲名、作者等
  "angleData": [ ... ],     // 每个地板的路径角度
  "pathData": "...",        // 路径数据字符串
  "actions": [ ... ],       // 事件列表:判定、特效、转动等
  "decorations": [ ... ]    // 装饰物
}

常用字段

字段说明
settings.bpm关卡 BPM
settings.artist关卡作者
settings.song歌曲名称
angleData每个地板的角度数据
actions事件列表,例如 TwirlMoveTrackSetSpeed

事件示例

json
{
  "floor": 10,
  "eventType": "Twirl",
  "twirl": true
}

上面的事件表示:在第 10 个地板处执行 Twirl(转向)。

Path Data 编码

pathData 是 ADOFAI 用字符表示路径方向的字符串,例如 "REJW"angleData 则是每个地板的角度数值数组。两者表达同一信息,可相互转换。

标准方向字符 → 绝对角度

字符角度字符角度字符角度字符角度
R0p15J30E45
T60o75U90q105
G120Q135H150W165
L180x195N210Z225
F240V255D270Y285
B300C315M330A345
!999(终点)

特殊偏移字符 → 相对角度

字符偏移字符偏移
5+726-72
7+528-52
9-30h+120
j-120t+60
y+300

偏移字符不是绝对角度,而是相对上一角度的变化:

result = previous_angle + offset

未知字符则沿用当前角度。

示例

"REJW" 转换结果(按 R=0, E=45, J=30, W=165):

[0, 45, 30, 165]

用库转换

各库都提供 pathData 与 angleData 的互转能力,例如 ADOFAI-JS

ts
import { pathData } from 'adofai'

pathData.pathDataTable                       // 字符 → 角度映射表
const angleData = pathData.parseToangleData("REJW")  // [0, 45, 30, 165]

为什么需要库

直接用 JSON 操作关卡文件很繁琐:格式不规范(尾部逗号、字符串里的换行)、超大文件性能差、事件类型多。这就是 ADOFAI-JSSharpFAI 等库存在的意义。

An organization that researches and expands the functions of ADOFAI