流图编辑器
FlowGraph将触发时机、战斗结算、数据计算与表现请求连接成了一条可以直接阅读和验证的行为链
Card、Status 与 Enemy 的 Behavior 决定了它们在战斗中的触发时机、结算过程与最终反馈,在 Game Card Editor 中选择需要编辑的 Card、Status 或 Enemy,Behavior 区域会显示当前行为摘要,并提供 Edit FlowGraph 入口

Card 与 Status 的摘要列出根图中的 Entry,Enemy 的摘要则统计 Patterns、LeafIntents 与 Actions

上图中的 OnCardPlayed 是当前 Card 根图中的 Entry,点击 Edit FlowGraph 后,FlowGraph Editor 会打开这张卡牌拥有的行为图
每张行为图都隶属于一个 Card、Status 或 Enemy
一条完整的行为链
打开随包卡牌 Poison Arrow 后,可以在画布中看到它从出牌到结算和表现反馈的完整过程

上图从左侧的 On Card Played 开始,依次连接 Deal Damage、Play Effect、Change Status 与第二个 Play Effect,控制线排定实际执行顺序,Deal Damage.Dealt 则把真实伤害交给浮动文字使用,一张行为图由以下四类信息共同构成:
| 画布元素 | 承担的职责 | 在 Poison Arrow 中的作用 |
|---|---|---|
Entry | 在战斗、回合、卡牌、状态或事件的指定时机启动行为 | On Card Played 在卡牌成功打出后启动行为 |
| 控制连接 | 决定节点先后顺序 | 先造成伤害,再播放反馈并施加状态 |
| 数据连接 | 把运行时对象和结果交给下游节点 | 将真实伤害传给浮动文字的 Amount 输入 |
| 节点字段 | 保存不会随本次执行改变的创作值 | 伤害量、状态引用与表现类型 |
这四类信息都在画布上完成连接与配置,页眉和工具栏用于定位资产、整理画布并查看 Issues,右侧参考抽屉则用于解释当前节点的输入、输出与字段
想了解这些画布元素如何进入运行时并完成一轮执行的,详见 FlowGraph 执行模型
从 Entry 接出第一条可执行路径
双击空白画布、右键选择 Create Node,或点击工具栏中的创建按钮,都会打开一个 Add Node 菜单
输入文字时,搜索会按节点显示名称过滤结果,按分类浏览时则可以直接查看当前拥有者可用的节点族

上图显示的是 Card Behavior 的 Add Node 菜单,搜索框下方只保留当前 Card 可以使用的八类节点,Card 与 Status 可以使用 Hook,Enemy 则以 Intent 取代 Hook,三种拥有者可使用的所有内置节点族如下:
| 节点族 | 在行为图中承担的工作 |
|---|---|
Entry | 在战斗、回合、卡牌、状态、伤害、能量、事件或单位相关时机启动行为 |
Hook | 在 GCS 提交某项结算前启动 Hook 路径,并输出当前值 |
Flow | 使用 Sequence、Branch、Switch、Gate、Loop、While、Foreach、Wait、Choice 与 Delayed Trigger 组织执行路径 |
Action | 改变 HP、护甲、能量、卡牌、状态、回合、变量或单位等战斗状态 |
Get | 读取当前单位、目标、卡牌信息、牌堆、事件参数或变量 |
Operator | 比较、计算、筛选、排序、选择、转换、随机化或合并数据 |
FX | 请求 VFX、SFX、动画、浮动文字、相机震动、滑动或闪烁反馈 |
Intent | 为 Enemy 选择并预告下一步行动,再执行对应的行为节点链 |
Event | 触发 GCS 内部事件或可选的 GES 事件 |
节点连接规则
-
除 Enemy 的
On Enemy Behavior Start之外,普通 Entry 节点与 Hook 路径都可以直接连接真正改变战斗状态的 Action -
而Enemy 的
On Enemy Behavior Start,必须先进入 Pattern 或Leaf Intent,选定Leaf Intent后,再从它的Out连接 Action 与 FX -
需要动态计算时,在 Action 前接入 Get 与 Operator,需要画面或声音反馈时,再把 FX 接到结算之后
-
Hook 节点只负责在结算提交前启动路径并提供当前值,需要改写或取消结果时,应继续连接 Action 类别中的
Write Hook或Cancel Hook
画布操作
| 操作 | 结果 |
|---|---|
| 从输出端拖到输入端 | 建立控制连接或数据连接 |
| 从已连接的输入端开始拖动 | 拿起原有连线并重新连接 |
单击连线后按 Delete | 删除当前连接 |
| 拖动节点 | 移动节点并显示邻近节点的对齐引导线 |
| 双击节点标题 | 修改这个节点在当前图中的显示名称 |
| 点击标题旁的折叠箭头 | 折叠或展开节点字段 |
按住 Shift 单击或拖动空白画布 | 扩展选择或框选多个节点 |
端口连接规则
- 控制输出只能连接一个后续步骤,控制输入则可以汇合多条路径
- 数据输出可以供多个节点读取,数据输入则只接收一个来源
- 端口类型不兼容时,连线会显示为红色并附带警告,悬停可以查看不兼容原因,普通节点之间的错误连接还会进入右上角显示的 Issues
- Group 边界连接则需要直接根据画布警告修正
控制路径与数据路径的汇合
下面的Rapid Fire 展示了控制路径与数据路径在同一张图中的配合方式:
- 一条控制路径从
On Card Played进入Loop,每次循环执行Deal Damage与Play Effect - 另一条数据路径则通过
All Enemies和Random Elements提供随机目标,伤害节点与浮动文字分别读取这项结果

上面这幅图中的 Selector 会在每次数据读取时重新求值,因此图中的两条读取可能得到不同目标,如需让伤害与表现严格落在同一单位上,应在循环体内先用 Pick Element 取得单个单位并通过 Set Variable 保存,再让两个下游节点读取同一个 Variable
卡牌常用的出牌、抽牌、弃牌、消耗、选择与延迟触发组合见 卡牌行为配方
在固定字段与输入端口之间切换
节点字段适合保存固定创作值,输入端口适合接收本次执行才确定的动态值,例如下图中的 Deal Damage 把 Amount = 3 保留为固定字段,当伤害需要由护甲、状态层数或其他计算结果决定时,再点击字段右侧的 ◉ 或 ○ 将它切换为输入端口

只有支持动态输入的字段才会显示这个控件
节点卡片还支持以下局部整理操作:
| 操作 | 用途 |
|---|---|
| 双击字段标签 | 为字段设置只在当前图中显示的名称 |
| 双击普通节点的端口名称 | 修改端口显示标签,固定的 In、Out 与 Group 边界端口不会改变 |
| 上下拖动普通节点的端口名称 | 在同一侧调整端口顺序,减少数据线交叉 |
| 编辑数量字段 | 新增或移除 Branch、Case、Step 等动态端口 |
| 读取结果输出 | 将 Action 的真实结算结果继续传给后续节点 |
- 输入值与结果值并不总是相同,
Deal Damage.Amount表示本次伤害请求的输入值,Deal Damage.Dealt则表示经过护甲、状态与 Hook 处理后的真实结算结果 - 浮动伤害文字或后续判断应读取
Dealt,倘若直接复用Amount,则会忽略结算过程中已经发生的变化
此外,流图窗口内还可按 Tab 展开右侧的节点参考抽屉,选中节点后即可查看节点的用途、输入、输出、字段以及相关的执行时机等完整信息:

用导航与 Group 整理大型行为图
节点数量增加后,先用聚焦和缩放控制可见范围,再把已经稳定的局部流程收进 Group,让主控制路径继续保持从左到右

上图中的工具栏从左到右,依次为选择、平移、聚焦、节点创建、Group、缩放、Undo 与 Redo 控件,常用手势按实际工作分为四组:
| 工作范围 | 目标 | 手势或按键 |
|---|---|---|
| 导航 | 平移画布 | 中键拖动,或选择 Pan 工具后拖动 |
| 导航 | 缩放画布 | 鼠标滚轮、工具栏 − 与 +,或双击百分比输入 25–200% |
| 导航 | 聚焦整张图 | Space |
| 导航 | 聚焦选区,未选择时聚焦整张图 | Ctrl + F |
| 选择与编辑 | 全选节点 | Ctrl + A |
| 选择与编辑 | 复制、粘贴、剪切 | Ctrl + C、Ctrl + V、Ctrl + X |
| 选择与编辑 | 删除选中的节点或连线 | Delete 或 Backspace |
| 选择与编辑 | 撤销、重做 | Ctrl + Z、Ctrl + Y,或 Ctrl + Shift + Z |
| Group | 将任意两个以上节点收进 Group | Ctrl + G |
| Group | 进入或退出选中的 Group | Ctrl + →、Ctrl + ← |
| Group | 解包 Group 并保留内部节点 | Delete 或 Backspace |
| Group | 连同内部节点删除 Group | Shift + Delete 或 Shift + Backspace |
| 查看 | 开关节点参考抽屉 | Tab |
| 查看 | 打开完整快捷键说明 | ? |
| 查看 | 关闭当前帮助或窗口 | Esc |
macOS 使用 Cmd 代替表中的 Ctrl
点击页眉右侧的 ? 会打开快捷帮助菜单,按导航、选择、节点编辑、字段与端口、Group 等职责集中展示全部手势:

把一段完整流程收进 Group
Group 可以将多个节点组合成一个可以进入的子图,它适合用于封装目标选择、重复结算或一段完整的表现流程,让父图只保留最重要的执行关系

常用操作
- 选中至少两个节点,再按
Ctrl+G,会把全部选中节点共同收进一个新的外层 Group(已有 Group 也可以参与选择) - 双击 Group 主体或按
Ctrl+→进入内部 - 双击标题或使用右键菜单为 Group 重命名
- 使用左上角面包屑或
Ctrl+←返回父图 - 选中 Group 后按
Delete会解包并保留内部节点 - 需要连同Group节点与内部节点一起删除,使用
Shift+Delete
-
进入 Group 后仍可调整内部普通节点的字段名称、端口名称与顺序
-
未在 Group 内继续连接的输入和输出会自动成为边界端口
-
单击字段标签则可以让需要经常调整的字段直接显示在 Group 正面,再次单击即可收回
-
Group 不会自动判断哪些边界端口有用,要让父图保持简洁,应先完成内部连接,再只把需要频繁调整的字段显示到 Group 正面
-
Group 不在 Add Node 菜单中,需要从当前选区创建
-
当内部只剩一个节点时,为了避免留下没有层级价值的空壳,Group将会自动解包
-
复制 Group 时,内部节点和内部连接会一并复制,粘贴结果是与原 Group 分离的独立副本
-
Card Group 只能粘贴到 Card Behavior,Status Group 和 Enemy Group 也分别只能在相同拥有者类型间复制
Group 的边界端口、正面字段与进入方式详见 Group 节点
同一套画布覆盖 Card、Status 与 Enemy
Card、Status 与 Enemy 共用相同的节点编辑、连线、Group 与校验方式,差别仅在各自能接收的 Entry、可读取的拥有者上下文,以及 Enemy 专属的 Intent
| 拥有者 | 典型 Entry | 当前内容特有的行为组织 |
|---|---|---|
| Card | On Card Played | 围绕本次卡牌、选中目标与实际结算结果组织行为 |
| Status | On Turn Start | 读取当前状态的 Type、Tags 与 Stacks,并在回合或结算时机持续响应 |
| Enemy | On Enemy Behavior Start | 使用 Pattern 与 Leaf Intent 选择、预告并执行下一步行动 |
Status Behavior链
随包附带的预设状态 Poison 使用回合入口启动伤害,并直接读取当前状态层数作为本次结算值

上图从 On Turn Start 进入 Deal Damage,Status Info.Stacks 通过数据连接提供伤害量,结算结果随后交给 Play Effect,同一张图因此同时表达了触发时机、动态数值、战斗变化与表现反馈
想要了解状态的回合响应、层数读取与伤害修改组合,请见 状态行为配方,能够介入结算的时机见 Hook 节点
Enemy Behavior链
Enemy Behavior 在相同画布上增加 Intent 节点族,用 Pattern 选择下一项行动,Leaf Intent 中的 Intent 字段定义预览类型,Out 后方的节点链则负责实际执行
| Intent 节点 | 适合表达的行动规律 |
|---|---|
Leaf Intent | 定义意图类型,并将 Out 后方的节点链作为实际行动 |
Sequence Pattern | 按固定顺序轮换行动 |
Weighted Random Pattern | 在当前有效行动中按权重选择 |
HP Threshold Pattern | 根据生命阈值切换行动计划 |
Once Per Battle | 整场战斗最多选择一次的行动 |
Every N Turns | 每隔指定回合数才允许选择的行动 |
- 从
On Enemy Behavior Start接入 Pattern 后,每条选择路径都应落到一个Leaf Intent,设置 Intent 类型后,再从Out连接伤害、状态、卡牌或表现节点 - Attack、Defend 与 Heal 的预览数值不是填写在
Leaf Intent上,而是运行时从后方控制链中的第一个Deal Damage、Change Armor或正数Change HP提取可用数值

上图通过 HP Threshold Pattern 实现对生命值的分阶段控制,再由 Weighted Random Pattern 从当前有效的 Leaf Intent 中选择行动,对于每个叶子节点,始终沿着自己的 Out 继续连接表现节点。因此,意图类型、可用的预览数值以及实际行动均能够沿同一条分支继续前进与结算
- Intent在游戏运行时显示的规则,并不会分散到每个 Intent 节点中,而是采用在Encounter下集中配置的方式实现,这能极大的简化配置
Hidden不显示意图,IconOnly只显示图标,Full显示图标及可用的预览数值
敌人模式与行动体的常用组合见 敌人行为配方,全部叶节点与 Pattern 见 Intent 节点,显示规则与战斗配置见 遭遇战创作
可能的 Issues
FlowGraph Editor 会在编辑过程中持续检查可以静态确认的结构问题,页眉出现 Issues 徽标时可以打开问题列表,带 Node ID 的问题会在行末提供 Ping,用于定位相关y异常节点,当前检查将会覆盖以下问题:
| 问题范围 | Issues 能发现的情况 |
|---|---|
| 节点身份 | Node ID 缺失或重复 |
| 拥有者边界 | 当前 Card、Status 或 Enemy 不允许使用这个节点 |
| 事件入口 | On Internal Event 缺少事件名称,或 On GES Event 缺少事件引用 |
| 自定义数据节点 | 自定义 OperatorNode、SourceNode 或 SelectorNode 没有可发布的数据输出 |
| 普通节点连接引用 | 连接指向已经不存在的节点或端口 |
| 普通节点端口契约 | 输入与输出类型不兼容,或连接记录的 Kind 与输出端口不一致 |
| Group 内部 | 嵌套 Group 中存在上述结构问题 |
-
Group 边界连接目前不进入上述连接检查,边界连线变红或出现警告图标时,应直接根据悬停提示修正
-
Issues 不检查空图、缺少业务上必需的 Entry、不可达节点、未连接输入或行为结果是否符合设计,因此
0 Issues只表示当前结构检查通过,并不等于行为已经在战斗中正确执行 -
嵌套 Group 的问题同样会进入列表,从根图点击这类问题时不一定能够直接聚焦内部节点,应先进入对应 Group 再完成修复
-
同一批结构问题也会进入卡牌编辑器,常见修复方法见FlowGraph 创作错误