故事脚本
故事脚本的文法完全基于 Markdown,因此您不需要对您的编辑器进行任何配置就可以开始编写您的故事。
标题与段落
使用标题来说明当前说话的人物,使用 --- 分隔符来清空当前说话的人物。
每一段独立文本之间使用两个回车分割。
# 纳西妲
「你好呀」
# 我
「……」
「……你好」
---
突然有个羽毛球上前向我搭话,我莫名感觉到有些慌乱
定睛一看,才发现是个少女
上面的样例中,所有位于 # 我 和 --- 之间的文本都会被当作 我 说的。
背景
若要添加/更换背景,可以使用  的格式进行声明。
人物立绘
人物立绘使用  的方式来进行初始化声明。
<name>用于唯一确定立绘的人物名称,以便后续操作的时候方便区分目标。- 关于位置
<position>和大小<size>的有关内容,请参考大小与位置章节。 - 关于转场
<transition>和动画<animation>的有关内容,请参考转场与动画章节。
注意:人物名称是必选项,其他都是可选。当需要对人物立绘进行更新的时候,只需要给予相同的人物名称即可。
当需要移除立绘的时候,使用  操作,引擎会在动画完成之后移除相应的动画对象。
背景音乐
背景音乐使用  的语法进行声明。
引擎会先淡出当前正在播放的背景音乐,之后开始播放当前的音乐。

其他操作
-
原地等待若干时间(毫秒)
[wait](#2000)
流程控制
使用链接元素进行流程的控制。
-
跳转到其他剧情文件
[goto](./xxx.md) -
跳转到其他剧情文件并结束游戏
[end](./xxx.md)
分支选项
我们使用无序列表来迫使用户做出一次选择。
无序列表中只能包含纯文本内容。
- 好啊
- 还是算了
之后可以用有序列表来根据用户的选择执行对应的操作。
有序列表中可以包含任何可解析的标签,当用户在上一次选择某条分支之后,程序会自动执行对应分支内的代码。
1. [goto](./happy_end.md)
2. [goto](./bad_end.md)
上文中如果您之前选择 好啊,那么将会跳转到 ./happy_end.md 中的剧情,否则会跳转到 ./bad_end.md 中的剧情。
角色语音
角色语音使用  的方式声明,会与当前的文本段落自动绑定。
# 纳西妲

「你说的对,但是原神是……」

「后面忘了」
如果语音不能与任何文本匹配,或者一个段落中出现了多个语音文件,那么会抛出一个编译错误。
音效
对于只需要播放一次的简单音效,使用  的方式声明。

内嵌代码(未实现)
可以使用 <script></script> 标签、代码块,以及行内代码的方式进行内嵌 JavaScript 代码。
<script>
var a = 114514;
</script>
```js
var b = 1919810;
```
# 纳西妲
`if (a > b) {`
「我觉得您说的对」
`} else {`
「我觉得您说的不对」
`}`
以上代码会被编译成
export default async function* (ctx) {
var a = 114514;
var b = 1919810;
if (a > b) {
yield /* 纳西妲:「我觉得您说的对」 */ [];
} else {
yield /* 纳西妲:「我觉得您说的不对」 */ [];
}
}
关于程序运行时的上下文对象 ctx,可以查看关于 ctx 的有关文档。