自定义游戏状态
由模组定义位置、时间、战斗与效果,并用世界卡和文档卡片展示。
本页目录
游戏状态使用普通文档字段保存。位置、场景、参与者、时间、回合、效果和胜负条件的结构与含义,由模组规则决定;平台提供字段、引用、计算、权限和布局,不要求统一的场景或战斗模型。
决定事实保存在哪里
角色的生命、行装和效果可以保存在角色文档;NPC、怪物、机关和任务保存各自的状态;全局阶段、时间或引用名单可以放在世界文档。具体划分由模组决定,同一事实只保留一份来源,需要汇总时用计算字段派生。
作者可以把位置定义为引用、多人参与关系、区域标签或其他满足规则的结构。平台不会按字段名自动判断谁在场、谁同行、谁能行动或何时轮到某人;不自动创建场景或为角色安排入场。公开聊天也不自动代表角色得知了其他位置的信息,知情与行动范围仍由模组规则和主持裁定解释。
字段继续遵守声明的类型、枚举、可修改权限、引用目标和计算规则。让主持负责更新的事实使用可修改字段,派生结果使用计算字段,秘密放在主持字段或通过显示条件揭示。建模方法见字段建模与计算选择。
在左侧世界卡安排区域
需要常驻概览时,给文档类型声明 designation: "world_state",并配置 layout.sheet。同一类型可以提供多份状态文档,也可以让探索、战斗、任务等不同类型分别声明这一用途。每份文档独立维护状态并显示自己的卡片,不要求额外建立一份总览文档;需要集中展示时,仍可在一张卡片中分组或嵌入其他文档。
世界卡按房间资料顺序放在游戏左侧小队下方,每张以文档名称为标题,可以独立折叠。每份文档按自己的公开投影和类型的 displayWhen 决定是否显示,隐藏一张卡不影响其他卡。它与角色卡共用 Handlebars 模板:作者用 HTML、CSS 和模板条件安排分组、文本、数值与资源条,并通过 {{#if ...}} 控制区域何时出现。未配置 sheet 时不显示世界卡。具体结构见自定义布局与游戏卡片。
例如,战斗模组可以用普通布尔或枚举字段控制“战斗”分组出现;追逐模组可以安排进度条;调查模组可以列出已查明线索。区域名称、条件和含义均由作者定义。
展示怪物和其他引用文档
作者可以声明一个普通引用列表,用来记录当前需要展示的怪物、NPC、任务或其他文档。字段名任意,列表可以由主持维护,也可以根据模组字段计算生成;它不会被平台解释为角色归属或回合名单。
在世界卡模板中遍历该引用列表,用 <tarp-reference value="{{this}}" display="sheet"> 嵌入每个目标文档自己的 sheet。普通详情也可使用 ReferenceCollection 的 display: "sheets"。同一套布局可以显示生命、护甲、伤势、异常效果,也可以只显示已经查明的描述;目标不要求角色用途。配置见嵌入文档卡片。
实际状态保存在目标文档,世界文档只维护引用。多只同类怪物需要独立状态时,使用不同文档实例。列表何时加入或移除对象、倒地对象是否保留、谁能看到哪些信息,均需由作者说明。隐藏资料不会显示,卡片与详情读取本局当前公开值。
开局初始化
开局背景写在方案的 description 或开场叙述中,当前位置等事实保存在模组自定义状态文档中。需要初始化资源、位置或参与关系时,在开局的 opening.instructions 中明确要读取、检查和保存哪些字段;纯预写开场不会替作者修改游戏状态。
开场失败、停止或恢复不撤销已经保存的数据,初始化指令应说明如何识别已完成步骤,避免重复授予资源。配置见开局方案。
由模组决定何时结束
作者在规则或 hostPrompt 中定义整段冒险的结束条件,以及结束前必须保存的结算。主持判断满足条件后,先保存变化,再调用 end_adventure,成功后完成公开尾声。平台不读取特定的结局字段,也不要求“进行中/成功/失败”三种值。
结局仍可以作为普通字段保存,用于展示结局名称、评分或其他信息;写入这些字段本身不会结束房间。阶段切换、角色倒地或离开某处也不会隐式结束冒险。
结束后保留聊天和资料,停止新行动、掷骰及资料修改。房间管理仍支持手动结束与重新开启;重新开启后的游戏状态如何继续,由模组规则解释。
验收自定义状态
使用模组 CLI检查字段、引用、计算和布局,再用独立测试局验证:初始化不重复;状态按规则变化;世界卡及引用卡片展示正确;隐藏资料不提前暴露;结束前结算已保存,结束后不再执行新行动。平台校验不替代模组自己的玩法一致性检查。