ttrpg-tools/content/yarn-spinner.md

79 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Yarn Spinner 编写
Yarn Spinner是一种文字冒险文本格式可用于描述ttrpg冒险。
不要使用`markdown`格式语法,如标题,加粗等。只使用纯文本描述冒险内容。
## 基本结构
每个`主线`和`支线`遭遇使用一个`节点`来描述。然后,为每个遭遇里的每个交互创建一个`节点`。
```yarn-spinner
title: 节点名称
---
描述文本
角色: 角色台词
-> 选项描述1
<<命令1>>
-> 选项描述2
<<命令2>>
===
```
对于`随机`遭遇而言,使用多个`title`相同的节点。
可以使用`when: `来为节点触发添加条件。
若需要节点只触发一次,可以结合`变量`。
```yarn-spinner
title: 随机遭遇
when: $villager_encountered == false
---
村民: 森林里有一只大狼!
<<set $villager_encountered to true>>
===
```
## 跳转
`<<jump 节点名称>>`:跳转节点
`<<detour 节点名称>>`:跳转节点,并在节点执行结束后返回
`<<return>>`:返回`detour`跳转来源节点
玩家在主线/支线地点之间移动时,根据路径内容,插入`<<detour 随机遭遇>>`来触发随机遭遇。
随机遭遇可以使用`<<return>>`来返回主线。
## 休息与睡觉
在合适的地方可以休息。如果时间在晚0点到早6点之间可以睡觉。
## 命令和函数
使用命令读写时间。不要创建变量。
- ```<<time_pass>>```:时间流逝,若休息则使用`<<time_pass true>>`。若在夜间休息则休息至第二天6点否则休息1小时。
- ```<<if time_of_day() <= 6>>```读取24小时制当前时间。午夜为0点。
- ```<<if time_of_game() >= 72>>```:总共流逝的时间。
使用以下命令操作角色属性:
- ```<<damage str 4>>```:造成角色属性损伤。若可耐受,则使用```<<damage str 4 true>>```。
- ```<<heal str 4>>```:解除属性创伤,并恢复角色属性损伤。
- ```<<buff str 4 4>>```:施加属性修改值,持续一定小时数。
- ```<<set $result to check("nodeId:checkId", "wis")>> ```:检定角色属性。成功返回正值代表成功进度,失败返回负值代表失败进度。
- ```<<if $result >= 3>>```:处理检定成功进度。
- ```<<if $result <= -2>>```:处理检定失败进度。
- ```<<if $result > 0>>```:如果既没有成功也没有失败,暗示玩家应该继续尝试。
使用以下命令操作角色物品:
- ```<<add_item light_armor 1>>```:添加物品。
- ```<<if consume_item("gold", 100)>>```:消耗物品。
- ```<<if has_item("gold", 100)>>```:检查物品。
## 文件分割
可以把遭遇拆分为多个文件。每个文件不要超过300行。
只要使用匹配的遭遇title就可以跳转到其他文件内的遭遇。
每个交互机会应当有自己的节点。若检定既没有成功也没有失败,则应当允许玩家再次尝试或者返回遭遇。
使用变量来存储其他世界状态。