diff --git a/content/QWEN.md b/content/QWEN.md index f26f97c..b37f427 100644 --- a/content/QWEN.md +++ b/content/QWEN.md @@ -1,97 +1,43 @@ # 要求 -编写ttrpg冒险。冒险将要使用./system.md描述的规则运行。 -若为yarn spinner编写,参考./yarn-spinner.md的内容。 +编写ttrpg冒险。冒险将要使用./docs/system.md描述的规则运行。 +若为yarn spinner编写,参考./docs/yarn-spinner.md的内容。 -每个冒险应该包含以下要素: +每个冒险应该详细设定以下要素: -- 简报:地理、环境、当前态势。 -- 后果:如果玩家什么都不做,将会默认发生的后果。 -- 压力:一些随机遭遇,将在冒险中随机发生。 -- 主线:一些逻辑上连续的遭遇。 -- 支线:一些独立的支线遭遇,完成可以获得资源帮助。 - -## 简报 - -应当确立以下内容: - -- 环境:地理特征,社会风貌,政治态势。 -- 当前态势:冒险要解决的事件当前的状态。 -- 势力:1-2种与事件相关的势力。 -- 玩家角色:玩家的身份,以及初始任务目标。 - -设计势力时,应当确立以下内容: - -- 1-2 名代表性NPC。 -- 势力当前的计划以及障碍。 -- 势力掌握的资源。 - -## 后果 - -随着时间的推移,如果玩家未能解决事件,则不好的事情会逐渐发生。 - -后果分三个阶段,每个阶段会引入新的规则,为玩家行动制造额外障碍。 - -在第三个阶段发生后,玩家行动将会遭受极大挑战,很可能很快失败。 - -## 压力 - -设计10条随机遭遇,用于玩家冒险中遇到的意外。 - -大部分应该为玩家制造危险。随着后果的发生,随机遭遇的危险程度也会随之提升。 - -## 主线 - -设计6条逻辑连续的遭遇,完成一条遭遇后会揭露下一条遭遇。 - -在完成最后一条遭遇后,玩家可以解决事件。 - -## 支线 - -设计6条逻辑独立的遭遇,每个遭遇会给玩家提供一些可能的资源。 - -每个遭遇位于一个独立地点,需要玩家投入时间探索或完成挑战。 - -## 地图设计 - -描述冒险发生的地理布局及各遭遇点之间的逻辑连接。 - -- 区域布局:描述主要地标及其空间关系。 -- 路径与环境:描述连接地点的路径特征及旅行中的风险。 -- 地点标注:明确主线遭遇(M1-M6)和支线遭遇(S1-S6)所在的地理位置。 - -设计多种路径连接地点,以允许玩家在探索中有选择的空间。 - -为路径设计多种特性,如隐藏、上锁、单向、经过之后坍塌等,以允许探索时有多样的体验。 - -使用`mermaid`语法绘制地图,并插入冒险文件中。 - -## 遭遇的设计 - -设计一项遭遇时,如果有NPC出现,则为出现的NPC设计动机、当前计划、当前遇到的障碍,以便玩家交互。 - -如果没有NPC,则设计2-4种可以交互的环境元素,尽量覆盖不同的玩家属性以及不同的交互性质。 - -每条遭遇都需要明确描述发生的场景地点。尽量设计不同风格的地点。 - -## 文本格式 - -输出时,使用markdown格式。 - -对于遭遇表而言,放在`csv`文件里: - -```csv -label,body -1,遭遇内容的markdown文本 -2,遭遇内容的markdown文本 -... -``` - -在冒险本体的markdown里,使用以下语法引用遭遇表: -`:md-table[./encounters.csv]` - -主线、支线、压力等每个类型,需要有独特的csv文件。 +- 背景:地点、环境、势力设定。(./docs/setting.md) +- 主题:玩家的身份以及任务目标。(./docs/theme.md) +- 秘密:任务中可能揭露的秘密。(./docs/mystery.md) +- 地点:玩家可以访问的地点。(./docs/location.md) +- 路径:在地点间移动期间可能遇到的事件。(./docs/route.md) ## 文件结构 -为每个冒险创建一个新文件夹。冒险本体以`adventure.md`保存。 +为每个`冒险`创建一个文件夹,包含以下内容: +- `adventure.md`:冒险本体,引用其他文件。 +- `locations.csv`:描述每个地点。 +- `cast.csv`:描述冒险中出现的npc,势力,怪物。 +- `curio.csv`:描述冒险中可能遇到的特殊物品或资源。 +- `route.csv`:描述冒险中在特定路径上可能遭遇的事件。 + +csv文件使用以下格式: + +```csv +label,body +1,markdown文本 +2,markdown文本 +... +``` + +npc名称等标题内容,也以markdown语法写在body里,而不是label里。 + +## 冒险本体 + +编写简报段落,确立以下内容: + +- 环境:地理特征,社会风貌,政治态势。 +- 当前态势:冒险要解决的事件当前的状态。 +- 玩家角色:玩家的身份,以及初始任务目标。 + +使用以下语法引用csv: +`:md-table[./locations.csv]{roll}` diff --git a/content/docs/location.md b/content/docs/location.md new file mode 100644 index 0000000..b0b90b3 --- /dev/null +++ b/content/docs/location.md @@ -0,0 +1,13 @@ +# 地点设计 + +1. 为主题中的每个遭遇设计一个地点。此外,再添加约3-5个地点,用于放置秘密线索。 + +2. 将地点连接起来,形成地图。确保每个地点都处于某种环状路径中,允许玩家总是前进不用回头。确保地点中有一些岔路,允许玩家在选择前进方向时有所选择。 + +3. 为地点添加一些危险元素,如陷阱、怪物袭击、悬崖等等。如果地点有岔路,为不同的岔路设计差异化的挑战元素。 + +4. 设计两处上锁的路径。将锁对应的钥匙安排到其他地点,以允许玩家获得钥匙并解锁路径。 + +5. 设计一处隐藏路径。玩家必须通过探索才能发现此路径。隐藏路径应该能允许玩家绕开危险,或者获得一些帮助物资。 + +6. 为地点添加一些辅助物资。辅助物资应当能帮助玩家恢复损伤,或者更好执行某些检定。 \ No newline at end of file diff --git a/content/docs/mystery.md b/content/docs/mystery.md new file mode 100644 index 0000000..768fc56 --- /dev/null +++ b/content/docs/mystery.md @@ -0,0 +1,15 @@ +# 秘密 + +玩家在冒险中,应当面对一些神秘现象或阴谋。 + +玩家可以通过调查来得知秘密的真相,但是真相与完成游戏目标没有直接关系。 + +得知真相会花费玩家额外的精力,但能够帮助玩家在最终决战前做好准备。 + +## 线索 + +将秘密拆分为5-6条线索。玩家可以在冒险中获得其中一些线索,并最终拼凑出秘密的真相。 + +只靠单独的线索无法获得秘密的完整真相。必须依赖至少3-4条线索的组合才行。 + +设计地点时,将秘密的线索分散安排到多个地点中。 \ No newline at end of file diff --git a/content/docs/route.md b/content/docs/route.md new file mode 100644 index 0000000..19e4750 --- /dev/null +++ b/content/docs/route.md @@ -0,0 +1,9 @@ +# 路径设计 + +根据冒险的背景设定,将一部分较为危险的路径划分为危险路径,并设计共6条随机遭遇。 + +随机遭遇不与特定的地点或路径绑定,而在路边随机发生。 + +随机遭遇通常为玩家带来风险,若不能完成豁免则会造成属性损伤。 + +设计风险时,尽可能覆盖多样的属性类型。 \ No newline at end of file diff --git a/content/docs/setting.md b/content/docs/setting.md new file mode 100644 index 0000000..f420e0b --- /dev/null +++ b/content/docs/setting.md @@ -0,0 +1,42 @@ +# 背景 + +为冒险设定背景。应包含以下内容: + +- 环境风貌:当地社会文化形态,以及环境生态。 +- 风格特色:冒险发生的地点(通常是一座大型建筑),该地点当前的状态与特点。 +- 上下文:在冒险发生前,这里发生过什么事情。 + +## 环境风貌 +- 人类活动:人迹罕至/偏僻的村落/城市郊区/城堡/富饶的农村/大型城市街区等等。 +- 环境生态:寒冷/炎热/河边/海边/山顶/林间/草原,甚至水下。 + +## 风格特色 +- 地点:家族庄园/大图书馆/集市/工坊/研究所/学院/军营/流民营地/藏宝库/工厂/墓穴/动物巢穴等等。 +- 构造:木制/石制/砂石/活生生的植物/冰封/玻璃/血肉/泥土/金属/大理石/菌菇/丝网等等。 + +## 上下文 +- 灾难背景:古战场/研究事故/诅咒/瘟疫/遭到袭击/闹鬼/石化/被怪物占据/被封印/遭天谴等等 + +## 世界观 + +冒险应当讲诉`中世纪剑与魔法`风格的故事。角色们通常具有一些超出常人的能力,较少受社会制度所约束,但也无法左右社会现状。 + +社会由`骑士`、`贵族`、`平民`、`先知`四种人群构成。 +- `骑士`精通武艺,受`先知`授予各种特殊能力,四处游历,保卫王国。 +- `贵族`掌握权力,确保王国的外交与内政秩序。 +- `平民`从事生产,为王国贡献粮食、手工制品与人力。 +- `先知`裁定纠纷,为王国的命运提供预言与计划。 + +此外,社会中还有各式各样的私人势力,在明里暗处中活跃,无法划分到上述角色中。 + +除了人类以外,王国中可能出现各种各样的奇异生物与超自然现象。它们会影响角色们的冒险,但是很难影响朝政与社会。 + +从欧洲民间传说以及童话故事中获取灵感。 + +## 势力设计 + +在冒险中,可将部分NPC设计为势力领袖,手下带领一群相互类似的NPC。 + +势力是势力领袖的衍生。通过为势力创建势力计划、掌握的资源、势力成员的典型特点,来塑造势力的特色。 + +- 势力目标:敛财/复仇/征服/保护/研究/创造/自保/探索/寻宝 \ No newline at end of file diff --git a/content/system.md b/content/docs/system.md similarity index 59% rename from content/system.md rename to content/docs/system.md index d58afd0..c5ad5b5 100644 --- a/content/system.md +++ b/content/docs/system.md @@ -29,39 +29,17 @@ 耐受度随玩家角色成长而提升,初始范围为1-6。 -在玩家l做好准备时,可消耗耐受用于抵抗属性损伤,每点耐受抵抗1点损伤。 +在玩家做好准备时,可消耗耐受用于抵抗属性损伤,每点耐受抵抗1点损伤。 -### 时间 +### 疲劳与恢复 -每天有24小时,玩家的每次基本行动花费1小时。 +结算疲劳时,掷一个`D6`属性骰,每一面代表一种属性。掷出的属性受到1点损伤。 -白天6点到晚上0点属于行动时间: +结算恢复时类似,掷出的属性恢复1点损伤。如果掷出的属性没有损伤或受到严重创伤,则恢复无效。 -- 在条件允许的情况下可以进行休息,每小时随机恢复1点属性损伤。 +### 检定与进度 -晚上0点到凌晨6点属于睡眠时间: - -- 若睡觉休息,每小时随机恢复1点属性损伤。 -- 若条件不允许,则即使休息也不能回复损伤。 -- 若不休息,则每小时随机遭受1点属性损伤。 - -### 属性骰 - -随机回复/扣减属性时,使用D6属性骰来决定随机回复/扣减的属性。 - -若掷恢复时,掷出的属性已满,则本次随机恢复没有效果。 - -### 基本行动 - -除休息外,玩家可进行以下行动,每次花费1小时: - -- 旅行:移动到另一地点。若旅途超过1小时,可能在半路遭遇随机遭遇。 -- 调查:检查当前地点,揭露更多线索或交互对象。 -- 交互:根据交互性质而定,可能有不同的检定、难度、机会。 - -### 交互行动 - -每条交互需要三种属性: +玩家可以通过检定来尝试交互。每条交互需要三种属性: - 主属性:玩家需要使用什么属性来进行此交互。 - 难度:玩家需要积累多少成功进度来成功完成此交互。 @@ -69,7 +47,7 @@ 如:`力量3/1`(力量,难度3,机会1)表示玩家使用力量属性检定,3成功进度后交互成功完成,1失败进度后交互失败且不可再尝试。 -每次进行交互时,掷D20检定骰,以及D4进度骰。 +每次进行检定时,掷D20检定骰,以及D4进度骰。 若检定骰小于等于玩家当前主属性,则获得进度骰数量成功进度,否则获得对应数量失败进度。 根据交互的挑战性质设计效果: @@ -81,7 +59,7 @@ 检定的难度/机会不会告知玩家。若没有触发成功也没有触发失败,则检定后仅告知当前成功/失败进度。 -### 状态 +### 后果 玩家状态 @@ -89,8 +67,8 @@ - 严重创伤:属性类型 - 标签:类型+持续事件,用于疾病、祝福、中毒等 - 资源:类型+数量,用于物品、金钱等 -- 成就:类型+等级,用于声望、技能等 世界状态 -- 进度:类型+id+成功进度+失败进度,用于势力计划、事件进展等。 +- 势力计划进度:id+成功进度 +- 事件发展进度:id+阶段 \ No newline at end of file diff --git a/content/docs/theme.md b/content/docs/theme.md new file mode 100644 index 0000000..60fed54 --- /dev/null +++ b/content/docs/theme.md @@ -0,0 +1,36 @@ +# 主题 + +为冒险设计主题。主题描述了冒险故事的主要目标与困难。 + +- 保护商队/调查神秘事件/杀死怪物/寻找宝藏/窃取重要物品/抵达地点/逃离地点 + +从主题出发,为冒险设计以下遭遇: + +- 1条最终决战 +- 1-2条预兆 +- 1-2条铺垫 +- 1-2条转折 + +每个遭遇都应该发生在一个独立的地点。 + +## 最终决战 + +在最终决战中,玩家必须面对主要困难,若是成功则可以完成主要目标。 + +## 预兆 + +在预兆遭遇中,玩家会遭遇一些看似与主要目标无关的场景或事件。 + +进行调查会揭露关于冒险秘密的信息,但玩家的行为不会直接影响主要目标。 + +## 铺垫 + +在铺垫遭遇中,将冒险的主要困难,以及相关的NPC、物品、现象介绍给玩家。 + +可能会立即向玩家施加挑战。赢得铺垫遭遇将提升玩家完成主要目标的机会。 + +## 转折 + +在转折遭遇中,玩家与重要NPC、物品、现象的关系将发生改变。 + +NPC立场可能发生逆转、NPC能力发生变化,或者冒险秘密开始揭露。 \ No newline at end of file diff --git a/content/yarn-spinner.md b/content/docs/yarn-spinner.md similarity index 81% rename from content/yarn-spinner.md rename to content/docs/yarn-spinner.md index dbc158c..876670b 100644 --- a/content/yarn-spinner.md +++ b/content/docs/yarn-spinner.md @@ -6,7 +6,7 @@ Yarn Spinner是一种文字冒险文本格式,可用于描述ttrpg冒险。 ## 基本结构 -每个`主线`和`支线`遭遇使用一个`节点`来描述。然后,为每个遭遇里的每个交互创建一个`节点`。 +每个`地点`遭遇使用一个`节点`来描述。然后,为每个遭遇里的每个`交互`创建一个`节点`。 ```yarn-spinner title: 节点名称 @@ -40,7 +40,7 @@ when: $villager_encountered == false `<>`:跳转节点,并在节点执行结束后返回 `<>`:返回`detour`跳转来源节点 -玩家在主线/支线地点之间移动时,根据路径内容,插入`<>`来触发随机遭遇。 +玩家在地点之间移动时,根据路径内容,插入`<>`来触发随机遭遇。 随机遭遇可以使用`<>`来返回主线。 @@ -60,7 +60,7 @@ when: $villager_encountered == false - ```<= 3>>```:处理检定成功进度。 - ```<>```:处理检定失败进度。 - ```< 0>>```:如果既没有达成成功进度也没有达成失败进度,暗示玩家应该继续尝试。 -- 检定后总是在文本中描述玩家当前的进度(但不要描述难度和机会) +- 检定后总是在文本中描述玩家当前的进度(但不要描述难度和机会)。使用`{$result}`来显示进度。 直接使用变量来记录玩家物品。没有背包限制。 - ```<>```:添加物品。 @@ -70,10 +70,6 @@ when: $villager_encountered == false ## 文件分割 -可以把遭遇拆分为多个文件。每个文件不要超过300行。 +按照遭遇拆分文件,每个遭遇都是一个文件。 -只要使用匹配的遭遇title就可以跳转到其他文件内的遭遇。 - -每个交互机会应当有自己的节点。若检定既没有成功也没有失败,则应当允许玩家再次尝试或者返回遭遇。 - -使用变量来存储其他世界状态。 \ No newline at end of file +只要使用匹配的遭遇title就可以跳转到其他文件内的遭遇。 \ No newline at end of file