跳到主要内容

状态创作

GCS · Authoring

定义一层状态意味着什么、层数如何合并与衰减,以及状态在各个战斗时机执行什么行为。

适合在 Workbench Status 模式中制作 buff、debuff 和计数器的开发者。

状态是挂在单位身上的 buff、debuff、计数器和持续规则。一个清晰的状态应说明它的含义,明确显示有益或有害,并让层数与衰减规则符合该含义。在 Workbench > Status 中创作状态;Demo 自带 30 个状态,包括 Poison、Burn、Strength 和 Marked。

Workbench Status 模式:状态列表、叠层规则 Inspector 和图标预览

每个列表行的名称下方会显示叠层与衰减规则(Demo 的 Strength 显示 Additive · Never)。浏览列表时,可以直接区分哪些状态会持续保留、哪些状态会自行衰减。


创作顺序

  1. 先用玩家的语言决定"一层"是什么意思。
  2. 填写 NameDescriptionTypeIcon
  3. 设置 Stack RuleMax StacksDecay RuleShow Stack Count
  4. 只有当 Tags 对过滤或目标选择有用时才添加。
  5. 如果状态要响应战斗时机或修改数值,打开 Edit FlowGraph
  6. 从卡牌或敌人施加这个状态,进战斗测试。

如果"一层"无法用一句话说明,例如"一层 Poison 每回合造成 1 点伤害",状态语义还不够明确,不建议开始配置。


基础字段

字段作用
Name显示名称。非空时 Workbench 会同步重命名状态资产。
Description面向玩家的规则或风味文本。写清这个状态只是被动标记,还是自己会做事。
TypeBuff / Debuff 开关。只是显示分类,不参与目标选择。
Tags用于过滤和目标选择的自由标签。没有自动行为。

有益效果使用 Buff,有害效果使用 Debuff。既不明显有益也不明显有害的计数器,可选择更接近的类型,并保持中性描述。


视觉字段

Icon 是显示在单位状态栏上的 sprite。早期测试可以使用临时图标,但名称和层数规则需要先保持清晰,因为玩家查看状态时首先看到这些信息。


层数与衰减

字段作用
Stack Rule再次施加时如何与已有层数合并。Additive 相加,Max 取较高值,Replace 覆盖。
Max Stacks正数是层数上限,-1 表示不设上限,0 几乎必然是配置失误,校验会警告。
Decay RuleNever 表示层数一直保留,直到被移除。PerTurn 在持有者自己的回合结束时减 1 层。
Show Stack Count是否在状态图标上显示数字。纯开关型标记应关闭。

Status inspector 的 Stack 面板:Stack Rule、Max Stacks、Decay Rule、Show Stack Count

需要明确三个语义。

第一,重复施加不会出现第二个图标。新层数会先经过 hook(先是施加者的 Inflict Status Hook,再是持有者的 Receive Status Hook,任一环节都可以削减或取消本次施加),然后按 Stack Rule 与当前层数合并,最后由 Max Stacks 封顶。

第二,PerTurn 的减层时机跟随持有者:挂在玩家身上的状态在玩家回合结束时减 1 层,挂在敌人身上的状态在那个敌人自己行动结束时减 1 层。

第三,最后一层消失分为两种情况。衰减清空时,状态视为"到期":图的 On Status Expired 入口运行,代码收到 OnStatusExpired。被效果移除时(Remove Statuses 节点、净化、层数被改到零),状态视为"被移除":对应 On Status RemovedOnStatusRemoved。清理反应应挂在与设计匹配的时机上;需要同时覆盖两种情况时,可以同时使用两个入口。

Demo 的 Poison 是完整示例:Debuff、Additive、不设上限、PerTurn 衰减、显示层数。每一项设置都服务于它的规则定义。

Workbench Status 模式中选中 Poison:Debuff 类型、Additive 叠层规则、PerTurn 衰减和图标预览

提示

不要把层数当作隐藏状态使用。数字会影响玩法,通常应向玩家显示;如果状态只是开关,关闭数字显示,避免界面上出现没有意义的 1


行为图

当状态需要时机或反应式行为时,在 Behavior 区域点击 Edit FlowGraph。常见模式:

行为示例
回合时机回合开始获得护甲,回合结束受到伤害。
反应通过 hook 修改数值、响应打出卡牌、响应层数变化。
清理条件满足后移除自身。
表现施加或触发时播放 buff/debuff 效果。

FlowGraph 窗口中打开的 Demo Poison 状态行为图

Demo 的 Strength 展示了没有回合时机的反应型状态:一个 Damage Dealt Hook 给持有者的每次攻击增加每层 1 点伤害,这个 hook 就是整张图。预览列的 Behavior Summary 折叠面板会把这套结构压缩成一行,不打开图就能确认状态的形态。

Strength 状态的 Behavior Summary 折叠面板:一个 Hook 入口写入一个 group

还有一个值得了解的时机:On Status Received 入口会在 hook 放行的每次施加时运行,包括合并进已有层数的重复施加,因此适合挂"施加时"的特效或音效。

Burn 是回合时机模式的最小形态:一个 On Turn End 入口驱动指向持有者的 Deal Damage 节点,伤害数值直接连自状态自身的层数,灼烧特效排在伤害之后。

FlowGraph 编辑器中的 Demo Burn 状态图:On Turn End 连向作用于持有者的 Deal Damage,Amount 来自 Status Info 的层数,后接 Play Effect 组

标记型状态不需要行为图。像 Marked 这样的状态,可能只需要名称、图标和层数规则;读取该标记的卡牌会在自己的行为图中处理它。


施加状态

只有当某个环节施加状态时,它才会出现在战斗里:

  • 卡牌图施加层数。Poison Arrow 的 Change Status 节点给目标叠 2 层 Poison。
  • 敌人图在行动中施加层数。
  • 另一个状态发生反应并施加层数。
  • 运行时代码通过战斗 controller 施加层数。

一个存在于数据库中、但没有任何内容施加它的状态,不会出现在战斗中。这不是状态定义错误,而是缺少施加入口。预览列的 Used By 面板可用于排查:Demo 的 Strength 会列出 Rally、Intimidate、Lord of Ruin 三张卡、Ritual 状态和三个敌人,这些就是该 buff 进入战斗的入口。


校验

Status 模式报告:

  • Name 为空是错误。
  • Max Stacks 恰好为 0 是警告,并提示改成 -1(不限层数)或一个正数上限。
  • FlowGraph 校验器的发现是警告。

校验无法判断描述是否符合设计。发布前仍需审阅状态名称、描述和实际行为是否一致。


常见错误

症状可能原因
状态从不出现状态数据库未启用、图施加的是另一个状态,或目标解析没有返回单位。
实际层数比施加的少Max Stacks 在合并时封了顶,或某个 Inflict / Receive Status Hook 削减了传入层数。
层数让玩家困惑Max Stacks、Stack Rule 或 Show Stack Count 与玩家理解的含义矛盾。
状态消失得太早Decay Rule 是 PerTurn,而设计想要的是持续状态。
状态从不触发行为图缺少匹配的入口或 hook。
表现为有害状态但实际是 buffType 设置错误,或名称与描述存在误导。