常见卡牌模式
逐节点拆解经典卡牌原型:攻击、护甲、施加状态、抽牌、多段攻击、群体伤害和条件收益。
面向已经掌握 FlowGraph 基础操作的卡牌作者:这里给出可直接复用的节点链,不重复基础原理。每个配方都先给出它产出的卡牌文本,再给节点链和关键设置项。文中出现的节点都是内置节点,在 Add Node 搜索框里输入名字就能找到。数值和表现可以按设计调整,结构保持一致即可。
两张演示卡已经把这里的大部分模式做出来了:Hunter 卡组里的 Poison Arrow(攻击加状态)和 Rapid Fire(随机目标多段攻击),可以打开对照着看。

攻击(Strike)
卡牌文本:"Deal 6 damage to the selected enemy."
On Card Played → Deal Damage
- 把卡牌的 Target Mode 设为
SingleEnemyUnit,让玩家自己选目标。 - 伤害节点的 Target 保持
Opponent。在卡牌图里,它解析为这张卡打向的那个敌人。 - 在 Amount 里直接填数字;数值需要计算时,用 Operator 节点连进这个端口。
Deal Damage 会把实际造成的伤害(扣除护甲后)输出到 Dealt 端口,后续节点可以拿真实数字做文章,而不是卡面上印的那个。演示里的 Poison 状态就是把 Dealt 直接接进飘字。
勾上 Ignore Armor,这一下就会无视护甲。演示中的 Poison 用它保证回合开始的毒伤一定打进血量。
护甲(Block)
卡牌文本:"Gain 5 armor."
On Card Played → Change Armor
- Target Mode 用
Self或None,这张卡没什么可瞄准的。 Change Armor上保持 Target 为Self、Mode 为Delta,把 Amount 设成 5。
Set 模式是覆盖当前值而不是叠加,留给"将护甲设为 X"这种文案用。护甲能不能留到下回合由遭遇战的战斗规则决定(演示里每回合开始清零),不归这张卡管。
施加状态
卡牌文本:"Apply 2 Poison."
On Card Played → Change Status
- 在节点的 Status 下拉里选状态。列表来自你的状态数据库,不需要手动输入,也就不会打错。
- Mode 保持
Delta,Amount 设为 2。负数会移除层数,Set则强制设成指定层数。 - 减益把 Target 指向
Opponent,增益指向Self。
Poison Arrow 在伤害步骤之后跑的正是这条链:先打伤害,再上两层 Poison,每一步都带自己的效果组。
这 2 层和目标身上已有的层数怎么合并(叠加、取较大值还是覆盖),由状态资产上的 Stack Rule 决定,不归这张卡管。卡牌只负责把层数递过去,层数变成什么样是状态自己的事。
抽牌
卡牌文本:"Draw 2 cards."
On Card Played → Draw Cards
Mode 设为 Count,Count 设为 2。另一个模式 ToHandLimit 会一直抽到手牌满,对应"抽满手牌"类文案。后续节点应该读 Drawn 输出而不是默认抽了几张,因为手牌上限规则可能把抽牌截断。
多段攻击
卡牌文本:"Deal 3 damage 4 times, hitting a random enemy each time."
这就是演示卡 Rapid Fire 的原样:

On Card Played → Loop(Count 4),其 Body 分支执行 Deal Damage(Amount 3)。伤害节点的 Target 端口由 Random Elements(Count 1)提供,后者从 All Enemies 里取。
Rapid Fire 自己的 Target Mode 是 AllEnemyUnits:它对全场乱射,从头到尾不需要玩家瞄准。
每次循环都是一次独立的伤害结算,所以按次触发的规则(护甲、Thorns、伤害 Hook)会触发四次,这通常正是多段文案想表达的。想让多段全部打在玩家选中的同一个敌人身上,就移除随机选择:Target Mode 换成 SingleEnemyUnit,伤害目标留在 Opponent。
群体伤害
卡牌文本:"Deal 6 damage to all enemies."
On Card Played → Deal Damage,把 Target 切成 AllEnemies。一个节点,打全场存活敌人。
卡牌的 Target Mode 用 AllEnemyUnits 或 None。全体伤害的卡还要玩家先点一个目标,看起来就像个 bug。
条件收益
卡牌文本:"If the target is Marked, draw a card."
用 Get 和 Operator 节点搭出判断,再用 Branch 分流:
Unit Status Stacks读目标身上有几层 Marked。Condition把这个数字和 0 比较。Branch从 Condition 输入接收比较结果,把控制流分到True或False。- 把
Draw Cards放在True分支。除非卡牌文本承诺了保底效果,False分支留空即可。
判断读的是 Branch 执行那一刻的层数:同一张卡如果在前一个节点刚施加了 Marked,这些新层数也会被算进去。Marked 已在演示状态数据库中提供,不需要新建状态就能在 Hunter 遭遇战里直接测试这张卡。
弃牌与消耗(exhaust)
卡牌文本:"Choose a card in your hand. Exhaust it, then gain 2 armor."
On Card Played → Choice →(OnChosen)Move Cards → Change Armor
Choice节点的 Options 输入接Card Piles(pile 设为 Hand),玩家看到的提示语写进 Prompt。- 玩家挑选期间战斗会暂停。选完后控制流沿
OnChosen继续,选中的卡从Chosen输出。 - 把
Chosen连进Move Cards,目标牌堆设为Exhaust(或Discard)。 - 最后接
Change Armor,做法同护甲配方。
Allow Skip 会加一个跳过按钮,控制流改走 Skipped 分支。发卡之前先想清楚跳过意味着什么:Skipped 分支留空就是什么都不发生,而且不会有任何提示。
卡牌文案检查清单
完成前把成品文案和图对照读一遍:
- "Selected enemy" 意味着玩家要瞄准,Target Mode 必须是
SingleEnemyUnit。 - "All enemies" 意味着不需要指定单体目标:
AllEnemyUnits或None。 - 牌堆要写准。抽牌堆、弃牌堆、手牌是三个不同的地方。
- 条件写在收益前面,按玩家读卡的顺序来。
- 卡面数字会和节点数值渐渐脱节。Description token 可以把实时数值注入文本,见卡牌类型、标签与 token。