常见状态模式
六类状态原型背后的节点链:持续伤害、属性增益、属性减益、伤害吸收、反伤和控制。每个配方都是演示里真实存在的状态,可以直接打开对照。
面向需要搭建状态体系的作者:参考 Poison、Strength、Thorns、Buffer、Silence 这些已验证的图。状态是挂在单位身上的规则:它跨回合存在、对发生的事做出反应,还能在数值落地前改写它。制作一个状态分为两部分:资产字段决定层数如何表现,Behavior 图决定状态实际行为。下面每个模式都在演示状态数据库里存在,可以边看本页边打开对应图。

层数行为写在资产上
Workbench 的 Status 模式里有三个字段控制叠层,全都不需要节点:
| 字段 | 选项 | 玩家体验到的效果 |
|---|---|---|
| Stack Rule | Additive / Max / Replace | 新施加的层数叠加、保留较大值,或直接覆盖当前层数 |
| Max Stacks | -1 或正数上限 | -1 表示不封顶;设了上限就会把超出的部分静默截掉 |
| Decay Rule | PerTurn / Never | 每回合自动掉一层,或一直保留直到被移除 |
动图之前先把这三项定下来。经典状态行为里有一半("层数每回合衰减""最多叠三层")纯粹是资产配置。
持续伤害(Poison)
状态文本:"At the start of your turn, take 1 damage per stack, ignoring armor, then lose 1 stack."
演示 Poison 的资产配置:减益开启,Stack Rule Additive,Decay Rule PerTurn,Max Stacks -1。图就是上面那张截图:
On Turn Start → Deal Damage,起作用的是三处设置:
- Target 是
Self。在状态图里,Self指携带这个状态的单位,不管它是谁。 - Amount 不是手填的,而是来自
Status Info的Stacks输出,也就是当前层数。这个节点的 Status 字段留空时,读的就是图所属的那个状态。接了线的端口永远压过字段里手填的数字。 - Ignore Armor 开启,让毒伤对满护甲的单位也照扣不误。
注意缺了什么:图里没有"掉一层"的节点。那件事由资产上的 Decay Rule PerTurn 负责。演示里的 Burn 是同一副骨架,改用 On Turn End 在回合结束时结算;Bleed 则把入口换成 On Attack Taken,持有者每挨一次攻击就痛一次。
属性增益(Strength)
状态文本:"Your attacks deal 1 extra damage per stack."
改数值的增益自己不打伤害,它在数值经过时拦截并改写,靠的是 Hook 入口:
Damage Dealt Hook → Math Binary → Write Hook
Damage Dealt Hook在持有者即将造成伤害时触发,把待结算的数值放在Value输出上。Math Binary(Add)把这个值和Status Info→Stacks相加。Write Hook提交调整后的数字,这一击就打得更重。
演示 Strength 的 Decay Rule 是 Never,增益会一直留到被其他规则移除为止。
属性减益(Weak、Vulnerable)
减益就是同一条 Hook 链换个方向。通过 Damage Dealt Hook 压低持有者打出去的伤害,或通过 Damage Taken Hook 抬高它受到的伤害。选 Hook 时问一句"改的是谁的数值":Hook 永远属于持有者,所以"这个单位打人变轻"和"这个单位挨打变疼"都是挂在这个单位身上的状态。
做减法时,结果先过一个 Clamp 再进 Write Hook。不然减益叠大了会把伤害减成负数,等于给目标回血。
演示里有个值得留意的设计:Weak 和 Vulnerable 用一个 Constant 做固定幅度的调整,没有去读 Status Info → Stacks。多叠的层数只延长持续时间,不加深惩罚。两种缩放方式都成立,关键是卡面文本要和你接的那种对得上。
伤害吸收(Buffer)
状态文本:"Each stack prevents 1 HP of loss, then is consumed."
HP Loss Hook → Math Binary 计算链 → Write Hook,再加一个 Change Status 烧掉层数:
HP Loss Hook拦截 HP 损失,待结算数值在Value上。- 数学节点算出层数能吸收多少、剩下多少。
Write Hook提交削减后的损失,Change Status(负数 Amount,目标Self)消耗掉用掉的那几层。
凡是"用自身层数抵消传入数值"的状态,都可以采用这个模式。
反伤(Thorns)
状态文本:"When you take damage, deal 1 damage per stack to the attacker."
反应型状态用普通 Entry 而不是 Hook,因为它是对事件做出回应,不是改写数值:
On Damage Taken → Deal Damage
On Damage Taken在持有者挨打后触发,把攻击者放在Source输出上。- 把
Source连进伤害节点的 Target 端口,反弹就会命中攻击来源,而不是某个写死的目标。 - Amount 照旧来自
Status Info→Stacks。
反弹出去的也是伤害。如果两个单位都带反伤类状态,在 Play Mode 里让它们互殴一次,用 Monitor 的 Flow tab 确认这场往来按你的预期收场。
控制状态(Silence)
状态文本:"Cannot play Skill cards. Lose 1 stack each turn."
控制效果否决一个决定,而不是改一个数字。演示 Silence 的图:
Card Playable Hook → Card Info → Condition → Branch → Cancel Hook
Card Playable Hook在战斗判断一张卡能否打出时触发,候选卡在Card输出上。Card Info读出这张卡的Type,Condition拿它和一个设为Skill的Constant比较。True分支上的Cancel Hook否决这次出牌。只要状态还在,这张卡就留在手牌里打不出去。
Silence 文本里"每回合掉 1 层"那一半照旧由 Decay Rule PerTurn 提供,不需要任何节点。演示里其他几个"锁"各自拉了不同的闸,而不是重复这套否决:Stunned 用 On Turn Start 接 Skip Next Turn 让持有者整个回合跳过(Max Stacks 为 1,叠不上去);Frozen 通过 Damage Dealt Hook 压低打出的伤害;Restricted 通过 Draw Count Hook 削减抽牌数。想印什么效果文本,就拉对应的那道闸。
状态制作检查清单
- 显示名称说清了规则吗?至少不能和规则矛盾。
- 是增益还是减益?
IsDebuff决定 UI 怎么呈现它。 - 新施加时是叠加、取最大还是覆盖?这是 Stack Rule 的事,不是图逻辑。
- 层数要不要每回合衰减?这是 Decay Rule 的事,不是节点。
- 行为需要哪一半:Entry(响应事件)、Hook(改写数值),还是两者都要?
- 玩家能看到图标和真实变化的层数吗?测试对局时在 Monitor 的
Unittab 里确认。