--- title: "附录8 代码编写关卡" --- 点击[此处](../stuff/compiler.exe)下载。项目作者:硫酸铜。项目来源:[PyRD - 为视障谱师写节奏医生谱子的一种全新的尝试](https://github.com/qwedc001/pyrd)。 本附录为了介绍更为简明化,部分计算机术语被替代,可以前往我的github项目查找原文档(*作者注:有人能帮我写一下文档就好了,文档苦手伤不起*) 项目介绍:PyRD,又名Python Rhythm Doctor,旨在使用代码创建Rhythm Doctor的自定义关卡,这个项目发起的本心是为了方便节奏医生的视障玩家去制作优质的谱面,而不是对着一个冗长的JSON文件发愁。 后来经过节奏医生官方开发huantian的建议,将原有的Python写代码转换成了学习成本更低的YAML标记格式,引出github分支yaml,文档上方提供的下载就是用于翻译yaml为rdlevel的解释器(我并没有做检查语法功能,有大佬会写可以来提交pr) 此处文档以介绍分支yaml为主,在此分支下,解释器解释的文件后缀为.sprd(Simple RD) 如果你想直接使用python写rdlevel,你可以直接git clone以后将pyrd.py引入项目,然后根据里面提供的函数进行编写。 先通俗的解释一下.sprd文件的构造,建议配合文档末尾提供的示例对比学习。 .sprd文件主要分为三大块,分别是metadata(关卡信息),角色和小节具体内容。 ## Metadata关卡信息的填写 在每一块内,每一句是通过换行来分隔的,且在开头有1个空格,比如: ```yaml metadata: 艺术家 硫酸铜 歌曲 SimpleRD 难度 简单 癫痫 关 ``` 以上四句话分占四行,在中间有空格,空格前为参数,空格后为内容 metadata可以填写的参数有: ```yaml metadata: 艺术家:艺术家名称 歌曲:歌曲名称 作者:作者名称 描述:描述 癫痫:是/否 难度:简单/普通/困难/噩梦 标签:标签 rank所需错误数:[20,15,10,5] rank描述:["F","D","C","B","A","S"] ``` 当然,如果你选择全空着也不是不行,所有metadata此时都会填空。 ## Character角色信息的填写 角色是一行一个角色,角色只有参数,中间用英文逗号分割。 角色一共有十个参数,其中有五个参数是必填的,剩下五个是你想要填才填,不想填可以不填的。 如果你想要填一个,空一个,再填一个,那么要空过去的那个参数用英文句号.代替。 角色的五个必填参数按照顺序是: 角色名(不想写可以填无),节拍类型(普通拍/单发拍),角色在第几个房间,角色在第几个轨道,角色节拍音效(还没有写对照表,后期补上) 角色的五个选填参数按照顺序是: 在开始时隐藏轨道,节拍音量,节拍音调高低,节拍声象,节拍偏移,比如: ```yaml - [武士,普通拍,0,1,Stick] - [科尔,单发拍,0,2,Kick] ``` ## Bar每个小节的填写 针对于节拍部分,从第三块开始,接下来每一个小节都标上对应的数字,在之后的内容前再加上一个空格。比如: ```yaml 1: - [播放音乐,1,sndOrientalTechno,100,0] ``` 这里的语法是:- [内容,参数],内容之间/参数和内容之间用英文逗号分隔。 几个已经支持的语法:(带星号为可选参数,并且最后有一个“条件”参数,这个参数因为所有语法都支持所以不单独列出) ```yaml - [播放音乐,事件在当前小节第几拍,音乐名,BPM,偏移,*音乐音量,*音乐音高,*音乐音像] - [普通拍,事件在当前小节第几拍,事件在第几轨道,普通拍长度,摇摆拍设置] - [单发拍,事件在当前小节第几拍,事件在第几轨道,单发拍长度,*单发拍循环,*是否跳过此拍,*冰冻拍间隔,*单发拍类型,*是否播放方块音] - [设置静音,事件在当前小节第几拍,事件在第几轨道,静音模式(由6个字符组成,-代表正常,x代表静音),切分音拍,切分音摇摆] - [长按拍,事件在当前小节第几拍,事件在第几轨道,长按拍长度,长按拍摇摆,长按拍按住长度,长按拍X模式] - [自由拍开始,事件在当前小节第几拍,事件在第几轨道] - [自由拍脉冲,事件在当前小节第几拍,事件在第几轨道,脉冲行为,自定义脉冲] - [设置护士音效,事件在当前小节第几拍,说的内容是什么,*是谁的声音,*要提示的单发拍拍长,*音量] - [设置BPM,事件在当前小节第几拍,bpm] - [播放音效,事件在当前小节第几拍,音效文件,*音量,*音高,*音像,*偏移,*是否为自定义音效] - [设置数拍音效,事件在当前小节第几拍,事件在第几轨道,*数拍音效声音,*是否开启,*音量] - [朗读轨道,事件在当前小节第几拍,事件在第几轨道,信息种类,轨道自定义X,*是否跳过朗读"紊乱",*只发出声音,*朗读X拍] - [朗读说明,事件在当前小节第几拍,朗读文本,*说明分类] - [显示对话,事件在当前小节第几拍,对话文字,对话速度,*立绘位置,*播放音效] ``` 详细的参数类型可以在pyrd.py中找到,更详细的docs需要等到有时间再进行维护,或者你们谁维护了给我提交个pull request也行。 编写完成后,请执行python compiler.py 你的sprd文件名 (进阶)VFX语法(由群内0x4D2提供): ```yaml - [预设特效,事件在当前小节第几拍,事件在第几轨道,特效名称,*是否激活,*属性] ``` 只有个别特效具有 属性 参数。 - 对于 落雨/JPEG失真/马赛克/海底波浪/电影噪点/暴风雪/素描/色像差/模糊/径向模糊/色调偏移:强度,缓速时长,缓速 - 对于 自定义屏幕分隔/屏幕滚动:x/y - 对于 高光:阈值,强度,颜色,缓速时长,缓速 ```yaml - [设置背景,事件在当前小节第几拍,事件在第几轨道,模式,*颜色,*图片,*fps,*填充模式,*过滤器] ``` * 模式: 颜色/图片 * 对于 平铺 填充模式,有额外的参数:速度x,速度y,时长,缓速 ```yaml - [轨道涂色,事件在当前小节第几拍,事件在第几轨道,*受影响的轨道编号,*边框样式,*边框颜色,*边框透明度,*是否启动电击效果,*透明度,*是否填充,*填充颜色,*填充透明度] ``` * 受影响的轨道编号 如果为-1或"全部",则全部轨道均受影响, * 边框样式 无边框/轮廓/发光 * 透明度最大为100(不透明) ```yaml - [闪烁,事件在当前小节第几拍,事件在第几轨道,时长] ``` * 时长 短/中/长 ```yaml - [注释,事件在当前小节第几拍,事件在第几轨道,注释文字,*播放时是否显示注释,*注释颜色] ``` ## 示例:Github项目 exampleYAML.sprd ```yaml metadata: 艺术家: 节奏医生 歌曲: 1-1 作者: 卢毅 难度: 简单 癫痫: 关 描述: 这是一个关卡。 角色: - [武士,普通拍,0,1,Stick] - [科尔,单发拍,0,2,Kick] 小节: 1: - [PlayMusic,1,sndOrientalTechno,100,0] - [预设特效,1,0,落雨,开] - [设置背景,1,1,颜色,626262FF] - [轨道涂色,1,2,全部,发光] - [普通拍,1,1,1,0] 2: - [普通拍,1,1,1,0] 3: - [普通拍,1,1,1,0] 4: - [普通拍,1,1,1,0] - [设置护士音效,5,SayReaDyGetSetGoNew,.,1,100] 5: - [单发拍,1,2,1] - [单发拍,3,2,1] - [单发拍,5,2,1] - [单发拍,7,2,1] - [设置护士音效,8,JustSayStop,.,1,100] - [闪烁,1,0,长] - [闪烁,5,0,长] - [注释,1,1,插入两个闪光,动作,开] ```