跳到主要内容

FlowGraph 配方

GCS · FlowGraph Authoring

十六个图模式,覆盖卡牌游戏最常用的行为,全部对照内置节点集核实过。可以先采用这些结构,再按具体设计调整字段。

面向已掌握 FlowGraph 基础、想从可用的起点而不是空白画布开始的创作者。

下面每个配方按控制顺序列出节点,并标出关键字段。demo 内容用的就是这些形状,你可以随时对照已发布的卡牌、状态和敌人交叉验证。


对选中目标造成伤害

用于普通攻击卡。

  1. On Card Played
  2. Deal DamageTargetSource = OpponentAmount 设为卡牌伤害
  3. Deal Damage.Dealt 连进 Show Floating Text.Amount
  4. Play VFXPlay SFX 放在伤害节点之后

Opponent 解析为玩家出牌时选中的单位。显示数字使用 Dealt 输出,而不是 Amount 字段:护甲、Hook 和阻止都会影响最终伤害。


对所有敌人造成伤害

用于 AoE 攻击。

  1. On Card Played
  2. Deal DamageTargetSource = AllEnemies
  3. 伤害之后接 Shake Camera 或全屏 Play VFX

不需要任何选择器节点,枚举选项本身就是完整的目标集。只有需要收窄集合时才改用连线(All Enemies -> Filter -> Deal Damage.Target);每个敌人需要单独表现节奏时用 Foreach


多次攻击随机敌人

demo 的 Rapid Fire,也是多段随机攻击的基础模式。这张卡的文本是 "Deal 3 damage to a random enemy 4 times",图结构直接对应这句效果文本。

Rapid Fire 卡牌图:Loop 节点驱动循环体内的 Deal Damage,All Enemies 经 Random Elements 连入目标端口

  1. On Card Played
  2. LoopCount = 4
  3. Body 上,Deal DamageAmount = 3
  4. 连线 All Enemies -> Random ElementsCount = 1)-> Deal Damage.Target
  5. 表现放进循环体内,每次命中一个节奏点

目标每次迭代重新随机,因为 Deal Damage 每次拉取时 Random Elements 都会重新求值。四次攻击,可能是四个不同的敌人。


低于半血时治疗

用于条件治疗。

  1. Self Unit 或入口的 Target 输出选中单位
  2. 连进 Unit Info
  3. Unit Info.HP% 连进 Condition 的输入 A,设 Op = Less,输入 B 传入 50(用 Constant 即可)
  4. Condition 连进 Branch.Condition
  5. True 上,Change HPAffect = CurrentMode = DeltaAmount 为正数
  6. 治疗浮动文字连 Change HP.Changed

比较 HP%,不要比较原始 HP。"低于半血"说的是百分比,而不同单位的最大 HP 不一样。


按本回合出牌数获得护甲

用于连击、蓄势类卡牌。

  1. On Card Played
  2. Cards Played This Turn -> Count
  3. 需要缩放时加一个 Math Binary
  4. Change ArmorTargetSource = Self,把算出的数字连进 Amount

固定"获得 5 点护甲"的卡不需要这些节点:直接设置字段即可。


对所有敌人施加状态

用于中毒、灼烧、虚弱这类铺场效果。

  1. On Card Played
  2. Change Status,在 Status 里选好状态,Mode = DeltaAmount 设为层数,TargetSource = AllEnemies

只有部分敌人应该受到影响时(比如只有受过伤的敌人),再加 All Enemies -> Filter -> Change Status.Target


消耗状态换取额外伤害

用于把层数花掉换收益的卡。

  1. On Card Played
  2. 对目标单位和该状态使用 Unit Status Stacks
  3. ConditionOp = Greater 与 0 比较,接 Branch
  4. True 上,Math Binary 算出加成,然后 Deal Damage
  5. Change Status 用负数 Amount 移除花掉的层数

层数在伤害之后再移除。结算过程中,Hook 和分支可能还需要原始层数。


抽到手牌上限

  1. On Card Played
  2. Draw CardsMode = ToHandLimit

卡牌承诺抽固定张数时用 Mode = CountCount 值,即使手牌可能中途抽满。


在抽牌堆创建一张卡

用于生成卡牌机制。

  1. On Card Played
  2. Add Cards,在 CardId 里选卡,Pile = DrawPosition 设为 TopBottomRandom
  3. 新卡要立刻升级、移动或展示时,使用 Added 输出

Add Cards 创建实例,Move Cards 搬运已有实例。如果目标卡牌还不存在,应使用 Add Cards,不要使用 Move Cards


让卡牌打折 N 回合

用于临时降费。

  1. Modify Card CostCardsSource 设为目标牌堆(或连入卡牌集合)
  2. Mode = DeltaAmount 为负数
  3. Duration = ForNTurnsTurns 设为持续回合数

Duration 还有 ThisTurnWholeBattle 可选。如果费用必须在每次检查时根据实时状态重算,改用 Card Cost Hook 而不是存一个修正值。


阻止一张卡被打出

用于沉默、眩晕、资源封锁类状态。

  1. 在状态的图上放 Card Playable Hook
  2. Card Info 检查 Hook 正在询问的这张卡
  3. ConditionContains 逻辑接 Branch
  4. 在封锁路径上,Write HookKind = BoolBoolValue = false

On Card Played 不能实现这个效果。它触发时,这张卡已经通过了可打出性检查。


减少受到的伤害

用于防御型状态。

  1. Damage Taken Hook
  2. 对 Hook 的 Target 使用 Unit Status Stacks
  3. Branch 判断层数是否存在
  4. True 上,Math BinaryValue 减去减免量
  5. 减免绝不能把攻击变成治疗时,加 Clamp 并设 Min = 0
  6. Write HookKind = Int

当修正在概念上属于攻击方("这个单位打得更疼"),把逻辑挪到攻击方状态的 Damage Dealt Hook 上。


敌人序列意图

用于按固定轮转行动的敌人。

Mire Reaper 敌人行为图,意图模式树分出多条各自的行为路径

demo 的 Hunter boss,Mire Reaper,使用的就是这种结构。

  1. On Enemy Behavior Start
  2. Sequence Pattern,每一步一条分支,RepeatCounts 控制每步重复几个回合再前进
  3. 每条分支上的 Leaf Intent 声明玩家看到的意图图标,然后接该步骤的行为节点

难以预测的敌人用 Weighted Random Pattern(按分支设 Weights)。


敌人 HP 阈值阶段

用于受伤后变招的 boss。

  1. On Enemy Behavior Start
  2. HP Threshold PatternThresholds 设为 15、40、70 这样的 HP 百分比
  3. 每个阈值区间一条行为路径,各自以 Leaf Intent 开头

阈值从上到下检查,当前 HP 低于或等于哪个阈值,第一个命中的分支就生效。所以最重伤的档要放在最前面:15、40、70 的列表里,血量 30% 的敌人命中的是 40 这一档。Default 在 HP 高于所有阈值时运行,承担开场轮转。


一次性与周期性敌人招式

用于只发动一次的狂暴,或每三回合一次的特殊招式。这两个节点属于 Intent 组,是敌人图专用工具。

  1. 在敌人的模式树里插入 Once Per Battle
  2. 一次性招式放在 Body 上,常规轮转从 Done 继续

Every N Turns 用法相同,多一个 N 字段:匹配的回合走 Body,其余回合走 Done

信息

玩家侧的"每场战斗一次"不需要这两个节点。改用战斗作用域变量记录:Set Variable 打开 BattleScope,效果运行前用 Branch 检查它。


抛出内部事件

用于一张图通知另一张图,而不直接连线。

  1. 发送方运行 Raise Internal Event,设置 EventName 和可选的参数绑定
  2. 接收方以同名的 On Internal Event 开始
  3. 接收方通过 Event Arg 读取值

同一张图内部的先后顺序不要用事件,控制线更清楚。事件的价值在于发送方和接收方是两个不该互相认识的资产。