ttrpg-tools/content/docs/yarn-spinner.md

75 lines
2.7 KiB
Markdown
Raw Permalink Normal View History

2026-03-02 14:44:12 +08:00
# Yarn Spinner 编写
Yarn Spinner是一种文字冒险文本格式可用于描述ttrpg冒险。
2026-03-02 16:17:08 +08:00
不要使用`markdown`格式语法,如标题,加粗等。冒号也有特殊含义(代表台词)。只使用纯文本描述冒险内容。
2026-03-02 14:44:12 +08:00
## 基本结构
2026-03-04 17:37:45 +08:00
每个`地点`遭遇使用一个`节点`来描述。然后,为每个遭遇里的每个`交互`创建一个`节点`。
2026-03-02 14:44:12 +08:00
```yarn-spinner
title: 节点名称
---
描述文本
角色: 角色台词
-> 选项描述1
<<命令1>>
-> 选项描述2
<<命令2>>
===
```
对于`随机`遭遇而言,使用多个`title`相同的节点。
2026-03-03 14:22:50 +08:00
使用`when: `来为节点触发添加条件。
如果没有条件,则使用`when: always`。
2026-03-02 14:44:12 +08:00
若需要节点只触发一次,可以结合`变量`。
```yarn-spinner
title: 随机遭遇
when: $villager_encountered == false
---
村民: 森林里有一只大狼!
<<set $villager_encountered to true>>
===
```
## 跳转
`<<jump 节点名称>>`:跳转节点
`<<detour 节点名称>>`:跳转节点,并在节点执行结束后返回
`<<return>>`:返回`detour`跳转来源节点
2026-03-04 17:37:45 +08:00
玩家在地点之间移动时,根据路径内容,插入`<<detour 随机遭遇>>`来触发随机遭遇。
2026-03-02 14:44:12 +08:00
随机遭遇可以使用`<<return>>`来返回主线。
2026-03-03 14:22:50 +08:00
在玩家可以反复尝试的遭遇中,在结尾添加`<<jump 节点名称>>```,跳转到自身的开头。
2026-03-02 14:44:12 +08:00
## 命令和函数
使用命令读写时间。不要创建变量。
2026-03-03 14:22:50 +08:00
- `<<add_hour>>``<<add_minute>>``<<add_day>>`:触发时间流逝。
- `$time_day``$time_hour``$time_minute`读取24小时制当前时间。
- `$hour_total`:总共流逝的时间。
2026-03-02 14:44:12 +08:00
使用以下命令操作角色属性:
2026-03-03 14:22:50 +08:00
- ```<<damage str 4>>```:造成角色属性损伤。
2026-03-02 14:44:12 +08:00
- ```<<heal str 4>>```:解除属性创伤,并恢复角色属性损伤。
- ```<<set $result to check("nodeId:checkId", "wis")>> ```:检定角色属性。成功返回正值代表成功进度,失败返回负值代表失败进度。
- ```<<if $result >= 3>>```:处理检定成功进度。
- ```<<if $result <= -2>>```:处理检定失败进度。
2026-03-03 14:22:50 +08:00
- ```<<if $result > 0>>```:如果既没有达成成功进度也没有达成失败进度,暗示玩家应该继续尝试。
2026-03-04 17:37:45 +08:00
- 检定后总是在文本中描述玩家当前的进度(但不要描述难度和机会)。使用`{$result}`来显示进度。
2026-03-03 14:22:50 +08:00
直接使用变量来记录玩家物品。没有背包限制。
- ```<<set $item_light_armor to $item_light_armor + 1>>```:添加物品。
- ```<<if $item_gold >= 100)>>```:检查物品。
2026-03-02 14:44:12 +08:00
2026-03-03 14:22:50 +08:00
直接使用变量来记录势力计划、地点、事件的进度。
2026-03-02 14:44:12 +08:00
## 文件分割
2026-03-04 17:37:45 +08:00
按照遭遇拆分文件,每个遭遇都是一个文件。
2026-03-02 14:44:12 +08:00
2026-03-04 17:37:45 +08:00
只要使用匹配的遭遇title就可以跳转到其他文件内的遭遇。