refactor: adventure format

This commit is contained in:
2026-03-04 17:37:45 +08:00
parent 02aad0415c
commit 292099819c
8 changed files with 166 additions and 131 deletions
+13
View File
@@ -0,0 +1,13 @@
# 地点设计
1. 为主题中的每个遭遇设计一个地点。此外,再添加约3-5个地点,用于放置秘密线索。
2. 将地点连接起来,形成地图。确保每个地点都处于某种环状路径中,允许玩家总是前进不用回头。确保地点中有一些岔路,允许玩家在选择前进方向时有所选择。
3. 为地点添加一些危险元素,如陷阱、怪物袭击、悬崖等等。如果地点有岔路,为不同的岔路设计差异化的挑战元素。
4. 设计两处上锁的路径。将锁对应的钥匙安排到其他地点,以允许玩家获得钥匙并解锁路径。
5. 设计一处隐藏路径。玩家必须通过探索才能发现此路径。隐藏路径应该能允许玩家绕开危险,或者获得一些帮助物资。
6. 为地点添加一些辅助物资。辅助物资应当能帮助玩家恢复损伤,或者更好执行某些检定。
+15
View File
@@ -0,0 +1,15 @@
# 秘密
玩家在冒险中,应当面对一些神秘现象或阴谋。
玩家可以通过调查来得知秘密的真相,但是真相与完成游戏目标没有直接关系。
得知真相会花费玩家额外的精力,但能够帮助玩家在最终决战前做好准备。
## 线索
将秘密拆分为5-6条线索。玩家可以在冒险中获得其中一些线索,并最终拼凑出秘密的真相。
只靠单独的线索无法获得秘密的完整真相。必须依赖至少3-4条线索的组合才行。
设计地点时,将秘密的线索分散安排到多个地点中。
+9
View File
@@ -0,0 +1,9 @@
# 路径设计
根据冒险的背景设定,将一部分较为危险的路径划分为危险路径,并设计共6条随机遭遇。
随机遭遇不与特定的地点或路径绑定,而在路边随机发生。
随机遭遇通常为玩家带来风险,若不能完成豁免则会造成属性损伤。
设计风险时,尽可能覆盖多样的属性类型。
+42
View File
@@ -0,0 +1,42 @@
# 背景
为冒险设定背景。应包含以下内容:
- 环境风貌:当地社会文化形态,以及环境生态。
- 风格特色:冒险发生的地点(通常是一座大型建筑),该地点当前的状态与特点。
- 上下文:在冒险发生前,这里发生过什么事情。
## 环境风貌
- 人类活动:人迹罕至/偏僻的村落/城市郊区/城堡/富饶的农村/大型城市街区等等。
- 环境生态:寒冷/炎热/河边/海边/山顶/林间/草原,甚至水下。
## 风格特色
- 地点:家族庄园/大图书馆/集市/工坊/研究所/学院/军营/流民营地/藏宝库/工厂/墓穴/动物巢穴等等。
- 构造:木制/石制/砂石/活生生的植物/冰封/玻璃/血肉/泥土/金属/大理石/菌菇/丝网等等。
## 上下文
- 灾难背景:古战场/研究事故/诅咒/瘟疫/遭到袭击/闹鬼/石化/被怪物占据/被封印/遭天谴等等
## 世界观
冒险应当讲诉`中世纪剑与魔法`风格的故事。角色们通常具有一些超出常人的能力,较少受社会制度所约束,但也无法左右社会现状。
社会由`骑士``贵族``平民``先知`四种人群构成。
- `骑士`精通武艺,受`先知`授予各种特殊能力,四处游历,保卫王国。
- `贵族`掌握权力,确保王国的外交与内政秩序。
- `平民`从事生产,为王国贡献粮食、手工制品与人力。
- `先知`裁定纠纷,为王国的命运提供预言与计划。
此外,社会中还有各式各样的私人势力,在明里暗处中活跃,无法划分到上述角色中。
除了人类以外,王国中可能出现各种各样的奇异生物与超自然现象。它们会影响角色们的冒险,但是很难影响朝政与社会。
从欧洲民间传说以及童话故事中获取灵感。
## 势力设计
在冒险中,可将部分NPC设计为势力领袖,手下带领一群相互类似的NPC。
势力是势力领袖的衍生。通过为势力创建势力计划、掌握的资源、势力成员的典型特点,来塑造势力的特色。
- 势力目标:敛财/复仇/征服/保护/研究/创造/自保/探索/寻宝
+74
View File
@@ -0,0 +1,74 @@
# 系统
## 玩家角色
只有一个玩家角色。
### 基本属性
玩家角色具有以下基本属性:
- 力量
- 体质
- 敏捷
- 感知
- 智力
- 魅力
每个基本属性范围1-19,会用于属性检定,掷D20小于等于属性则检定成功。
属性可能遭受损伤扣减,损伤需要通过休息来缓慢回复。
一次受到超过当前一半属性损伤时,会遭受严重创伤,该属性即使休息也不会回复损伤。
必须通过专家、专门地点或道具来解除严重创伤。
### 耐受
玩家具有一条耐受度属性,只需几分钟的调整即可完全恢复。
耐受度随玩家角色成长而提升,初始范围为1-6。
在玩家做好准备时,可消耗耐受用于抵抗属性损伤,每点耐受抵抗1点损伤。
### 疲劳与恢复
结算疲劳时,掷一个`D6`属性骰,每一面代表一种属性。掷出的属性受到1点损伤。
结算恢复时类似,掷出的属性恢复1点损伤。如果掷出的属性没有损伤或受到严重创伤,则恢复无效。
### 检定与进度
玩家可以通过检定来尝试交互。每条交互需要三种属性:
- 主属性:玩家需要使用什么属性来进行此交互。
- 难度:玩家需要积累多少成功进度来成功完成此交互。
- 机会:玩家积累多少失败进度后交互失败,且玩家不可再尝试。
如:`力量3/1`(力量,难度3,机会1)表示玩家使用力量属性检定,3成功进度后交互成功完成,1失败进度后交互失败且不可再尝试。
每次进行检定时,掷D20检定骰,以及D4进度骰。
若检定骰小于等于玩家当前主属性,则获得进度骰数量成功进度,否则获得对应数量失败进度。
根据交互的挑战性质设计效果:
- 应变:难度/机会都低,即使失败也能达到成功的效果,仅受到不可耐受的属性损伤。
- 挑战:难度高/机会低,失败后根据进度获取收益,且交互可再次尝试。
- 努力:难度/机会都高,失败无事发生。
- 风险:难度低/机会高,失败有较重大损失。
检定的难度/机会不会告知玩家。若没有触发成功也没有触发失败,则检定后仅告知当前成功/失败进度。
### 后果
玩家状态
- 属性损伤:属性类型+当前值
- 严重创伤:属性类型
- 标签:类型+持续事件,用于疾病、祝福、中毒等
- 资源:类型+数量,用于物品、金钱等
世界状态
- 势力计划进度:id+成功进度
- 事件发展进度:id+阶段
+36
View File
@@ -0,0 +1,36 @@
# 主题
为冒险设计主题。主题描述了冒险故事的主要目标与困难。
- 保护商队/调查神秘事件/杀死怪物/寻找宝藏/窃取重要物品/抵达地点/逃离地点
从主题出发,为冒险设计以下遭遇:
- 1条最终决战
- 1-2条预兆
- 1-2条铺垫
- 1-2条转折
每个遭遇都应该发生在一个独立的地点。
## 最终决战
在最终决战中,玩家必须面对主要困难,若是成功则可以完成主要目标。
## 预兆
在预兆遭遇中,玩家会遭遇一些看似与主要目标无关的场景或事件。
进行调查会揭露关于冒险秘密的信息,但玩家的行为不会直接影响主要目标。
## 铺垫
在铺垫遭遇中,将冒险的主要困难,以及相关的NPC、物品、现象介绍给玩家。
可能会立即向玩家施加挑战。赢得铺垫遭遇将提升玩家完成主要目标的机会。
## 转折
在转折遭遇中,玩家与重要NPC、物品、现象的关系将发生改变。
NPC立场可能发生逆转、NPC能力发生变化,或者冒险秘密开始揭露。
+75
View File
@@ -0,0 +1,75 @@
# Yarn Spinner 编写
Yarn Spinner是一种文字冒险文本格式,可用于描述ttrpg冒险。
不要使用`markdown`格式语法,如标题,加粗等。冒号也有特殊含义(代表台词)。只使用纯文本描述冒险内容。
## 基本结构
每个`地点`遭遇使用一个`节点`来描述。然后,为每个遭遇里的每个`交互`创建一个`节点`
```yarn-spinner
title: 节点名称
---
描述文本
角色: 角色台词
-> 选项描述1
<<命令1>>
-> 选项描述2
<<命令2>>
===
```
对于`随机`遭遇而言,使用多个`title`相同的节点。
使用`when: `来为节点触发添加条件。
如果没有条件,则使用`when: always`。
若需要节点只触发一次,可以结合`变量`。
```yarn-spinner
title: 随机遭遇
when: $villager_encountered == false
---
村民: 森林里有一只大狼!
<<set $villager_encountered to true>>
===
```
## 跳转
`<<jump 节点名称>>`:跳转节点
`<<detour 节点名称>>`:跳转节点,并在节点执行结束后返回
`<<return>>`:返回`detour`跳转来源节点
玩家在地点之间移动时,根据路径内容,插入`<<detour 随机遭遇>>`来触发随机遭遇。
随机遭遇可以使用`<<return>>`来返回主线。
在玩家可以反复尝试的遭遇中,在结尾添加`<<jump 节点名称>>```,跳转到自身的开头。
## 命令和函数
使用命令读写时间。不要创建变量。
- `<<add_hour>>``<<add_minute>>``<<add_day>>`:触发时间流逝。
- `$time_day``$time_hour``$time_minute`:读取24小时制当前时间。
- `$hour_total`:总共流逝的时间。
使用以下命令操作角色属性:
- ```<<damage str 4>>```:造成角色属性损伤。
- ```<<heal str 4>>```:解除属性创伤,并恢复角色属性损伤。
- ```<<set $result to check("nodeId:checkId", "wis")>> ```:检定角色属性。成功返回正值代表成功进度,失败返回负值代表失败进度。
- ```<<if $result >= 3>>```:处理检定成功进度。
- ```<<if $result <= -2>>```:处理检定失败进度。
- ```<<if $result > 0>>```:如果既没有达成成功进度也没有达成失败进度,暗示玩家应该继续尝试。
- 检定后总是在文本中描述玩家当前的进度(但不要描述难度和机会)。使用`{$result}`来显示进度。
直接使用变量来记录玩家物品。没有背包限制。
- ```<<set $item_light_armor to $item_light_armor + 1>>```:添加物品。
- ```<<if $item_gold >= 100)>>```:检查物品。
直接使用变量来记录势力计划、地点、事件的进度。
## 文件分割
按照遭遇拆分文件,每个遭遇都是一个文件。
只要使用匹配的遭遇title就可以跳转到其他文件内的遭遇。