跳到主要内容

常见卡牌模式

GCS · Recipes

逐节点拆解经典卡牌原型:攻击、护甲、施加状态、抽牌、多段攻击、群体伤害和条件收益。

面向已经掌握 FlowGraph 基础操作的卡牌作者:这里给出可直接复用的节点链,不重复基础原理。

每个配方都先给出它产出的卡牌文本,再给节点链和关键设置项。文中出现的节点都是内置节点,在 Add Node 搜索框里输入名字就能找到。数值和表现可以按设计调整,结构保持一致即可。

两张演示卡已经把这里的大部分模式做出来了:Hunter 卡组里的 Poison Arrow(攻击加状态)和 Rapid Fire(随机目标多段攻击),可以打开对照着看。

FlowGraph 编辑器中的 Poison Arrow:On Card Played 依次执行 Deal Damage、Play Effect 组、Change Status


攻击(Strike)

卡牌文本:"Deal 6 damage to the selected enemy."

On Card PlayedDeal Damage

  1. 把卡牌的 Target Mode 设为 SingleEnemyUnit,让玩家自己选目标。
  2. 伤害节点的 Target 保持 Opponent。在卡牌图里,它解析为这张卡打向的那个敌人。
  3. Amount 里直接填数字;数值需要计算时,用 Operator 节点连进这个端口。

Deal Damage 会把实际造成的伤害(扣除护甲后)输出到 Dealt 端口,后续节点可以拿真实数字做文章,而不是卡面上印的那个。演示里的 Poison 状态就是把 Dealt 直接接进飘字。

提示

勾上 Ignore Armor,这一下就会无视护甲。演示中的 Poison 用它保证回合开始的毒伤一定打进血量。


护甲(Block)

卡牌文本:"Gain 5 armor."

On Card PlayedChange Armor

  1. Target Mode 用 SelfNone,这张卡没什么可瞄准的。
  2. Change Armor 上保持 TargetSelfModeDelta,把 Amount 设成 5。

Set 模式是覆盖当前值而不是叠加,留给"将护甲设为 X"这种文案用。护甲能不能留到下回合由遭遇战的战斗规则决定(演示里每回合开始清零),不归这张卡管。


施加状态

卡牌文本:"Apply 2 Poison."

On Card PlayedChange Status

  1. 在节点的 Status 下拉里选状态。列表来自你的状态数据库,不需要手动输入,也就不会打错。
  2. Mode 保持 DeltaAmount 设为 2。负数会移除层数,Set 则强制设成指定层数。
  3. 减益把 Target 指向 Opponent,增益指向 Self

Poison Arrow 在伤害步骤之后跑的正是这条链:先打伤害,再上两层 Poison,每一步都带自己的效果组。

这 2 层和目标身上已有的层数怎么合并(叠加、取较大值还是覆盖),由状态资产上的 Stack Rule 决定,不归这张卡管。卡牌只负责把层数递过去,层数变成什么样是状态自己的事。


抽牌

卡牌文本:"Draw 2 cards."

On Card PlayedDraw Cards

Mode 设为 CountCount 设为 2。另一个模式 ToHandLimit 会一直抽到手牌满,对应"抽满手牌"类文案。后续节点应该读 Drawn 输出而不是默认抽了几张,因为手牌上限规则可能把抽牌截断。


多段攻击

卡牌文本:"Deal 3 damage 4 times, hitting a random enemy each time."

这就是演示卡 Rapid Fire 的原样:

FlowGraph 编辑器中的 Rapid Fire:Count 为 4 的 Loop,每次循环对一个随机敌人造成伤害

On Card PlayedLoop(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 PlayedDeal Damage,把 Target 切成 AllEnemies。一个节点,打全场存活敌人。

卡牌的 Target Mode 用 AllEnemyUnitsNone。全体伤害的卡还要玩家先点一个目标,看起来就像个 bug。


条件收益

卡牌文本:"If the target is Marked, draw a card."

用 Get 和 Operator 节点搭出判断,再用 Branch 分流:

  1. Unit Status Stacks 读目标身上有几层 Marked。
  2. Condition 把这个数字和 0 比较。
  3. BranchCondition 输入接收比较结果,把控制流分到 TrueFalse
  4. Draw Cards 放在 True 分支。除非卡牌文本承诺了保底效果,False 分支留空即可。

判断读的是 Branch 执行那一刻的层数:同一张卡如果在前一个节点刚施加了 Marked,这些新层数也会被算进去。Marked 已在演示状态数据库中提供,不需要新建状态就能在 Hunter 遭遇战里直接测试这张卡。


弃牌与消耗(exhaust)

卡牌文本:"Choose a card in your hand. Exhaust it, then gain 2 armor."

On Card PlayedChoice →(OnChosenMove CardsChange Armor

  1. Choice 节点的 Options 输入接 Card Piles(pile 设为 Hand),玩家看到的提示语写进 Prompt
  2. 玩家挑选期间战斗会暂停。选完后控制流沿 OnChosen 继续,选中的卡从 Chosen 输出。
  3. Chosen 连进 Move Cards,目标牌堆设为 Exhaust(或 Discard)。
  4. 最后接 Change Armor,做法同护甲配方。

Allow Skip 会加一个跳过按钮,控制流改走 Skipped 分支。发卡之前先想清楚跳过意味着什么:Skipped 分支留空就是什么都不发生,而且不会有任何提示。


卡牌文案检查清单

完成前把成品文案和图对照读一遍:

  • "Selected enemy" 意味着玩家要瞄准,Target Mode 必须是 SingleEnemyUnit
  • "All enemies" 意味着不需要指定单体目标:AllEnemyUnitsNone
  • 牌堆要写准。抽牌堆、弃牌堆、手牌是三个不同的地方。
  • 条件写在收益前面,按玩家读卡的顺序来。
  • 卡面数字会和节点数值渐渐脱节。Description token 可以把实时数值注入文本,见卡牌类型、标签与 token