入口与 Hook
入口在某件事发生后启动一张图;Hook 让图在 GCS 提交某个值之前改写它。本页收录全部 33 个入口和 18 个 Hook,附触发时机、输出与宿主。
创作时可以把这一页作为时机索引。先选对入口或 Hook,再继续搭建后续节点。入口和 Hook 是 FlowGraph 的时机语言。放任何其他节点之前,先决定行为该从什么时候开始,以及它是响应一个时机,还是改写一个值。

demo 的 Poison 状态是典型的状态宿主图:On Turn Start 入口按状态自身的层数结算伤害,表现跟在后面。状态是 GCS 中反应能力最强的宿主,这也是下面的表格大多列着它的原因。
入口还是 Hook?
| 你想要…… | 用 |
|---|---|
| 在某个战斗时机发生后响应 | 入口 |
| 在 GCS 提交某个值之前改变它 | Hook |
| 驱动敌人的回合 | On Enemy Behavior Start 加 Intent 模式节点 |
| 从一张图触发另一张图 | Raise Internal Event 加 On Internal Event |
| 桥接到 GES | Raise GES Event 加 On GES Event |
入口更容易推理,因为它运行时事件已经结束。Hook 需要更谨慎:它处在一次仍可能被其他 Hook 修改或取消的计算之中。
谁能监听什么
每个宿主只拿到对它有意义的入口,Add Node 菜单会强制执行这一点。卡牌响应自己的牌堆生命周期和回合边界,状态响应大多数发生在单位身上的事件,敌人只有一个启动回合的入口。
| 宿主 | 可用时机点 |
|---|---|
| Card | 七个卡牌入口、On Turn Start、On Turn End、On Draw Pile Shuffled、两个事件入口、全部 Hook |
| Status | 战斗、回合、阶段、伤害、HP、护甲、能量、状态、单位入口,外加 On Card Drawn、两个事件入口、全部 Hook |
| Enemy | On Enemy Behavior Start、两个事件入口、Intent 模式节点 |
如果某个行为需要当前宿主用不了的入口(例如"这张卡在任何单位死亡时触发"),把它实现为状态,让卡牌去施加那个状态。
一个回合里入口在哪触发
一个玩家回合加敌方阶段,按触发顺序:
有两个细节需要特别注意。第一回合没有抽牌阶段,因为起手牌在战斗开始时就已抽好。敌方阶段里每个敌人都有自己的行动顺序:它身上的状态先触发 On Turn Start,它经由 On Enemy Behavior Start 行动,然后它的状态触发 On Turn End。所以挂在敌人身上的 Poison 在该敌人自己的行动步 tick,而不是在玩家回合 tick。
战斗与回合入口
这些入口都不输出数据,只提供时机。
| 入口 | 宿主 | 何时触发 | 用于 |
|---|---|---|---|
| On Battle Start | Status | 战斗开始时触发一次 | 开场 buff、初始变量、首回合设置。每回合逻辑交给 On Turn Start |
| On Battle End | Status | 战斗结束时触发一次,无论胜负 | 收尾和战斗结束效果。胜负画面属于场景 UI,不属于图 |
| On Turn Start | Card, Status | 状态上:持有单位自己的回合开始时。卡牌上:玩家回合开始时,对手牌里的每张卡各触发一次 | 能量变化、状态 tick、每回合计数 |
| On Turn End | Card, Status | 状态上:持有单位自己的回合结束时。卡牌上:玩家回合结束、手牌被弃掉之前,对手牌里的每张卡各触发一次 | 回合结束伤害、衰减、延迟清理 |
| On Draw Phase | Status | 玩家回合开始、每回合抽牌之前。第 1 回合不触发;起手牌在战斗开始时抽取 | 抽牌阶段反应。逐张卡的反应用 On Card Drawn |
| On Discard Phase | Status | 玩家回合结束、手牌被弃掉之前 | 回合结束弃牌反应 |
| On Draw Pile Shuffled | Card | 弃牌堆被重新洗回抽牌堆时 | 洗牌反应、遗物式机制 |
卡牌入口
每个卡牌入口都输出涉事的 Card,下游节点可以经 Card Info 读它的费用或类型。全部是卡牌宿主;唯一状态也能监听的是 On Card Drawn。
| 入口 | 宿主 | 何时触发 | 用于 |
|---|---|---|---|
| On Card Drawn | Card, Status | 抽牌把卡送进手牌时,每张卡一次 | 抽到触发、抽牌计数 |
| On Card Played | Card | GCS 接受这次出牌时。卡牌的主要效果就写在这里 | 卡牌自己的效果。想改费用或可打出性,用 Hook |
| On Card Discarded | Card | 卡牌被弃掉时,无论来自回合结束弃牌还是弃牌效果 | 弃牌协同 |
| On Card Exhausted | Card | 卡牌被消耗时:带 Exhaust 的卡被打出、带 Ethereal 的卡在回合结束、或效果直接消耗它 | 消耗协同和清理 |
| On Card Retained | Card | 卡牌跨过回合结束留在手牌时,无论因为 Retain 关键词还是保留整手牌的战斗规则 | 保留协同 |
| On Card Added To Hand | Card | 效果在抽牌步之外把卡创建或移入手牌时 | 生成卡牌反应。抽到的卡用 On Card Drawn |
| On Card Added To Deck | Card | 效果把卡加进抽牌堆时 | 构筑和召唤卡牌反应 |
伤害、HP、护甲和单位入口
这些全部是状态宿主:该做出反应的单位携带一个状态,图就写在状态上。输出里的 Source 是造成变化的单位,Target 是承受变化的单位。
| 入口 | 输出 | 何时触发 | 用于 |
|---|---|---|---|
| On Damage Dealt | Amount, Source, Target | 持有者造成的伤害落地之后。Amount 是实际穿透的伤害 | 出手后的追击:吸血、命中附带效果。想提高伤害本身,用 Damage Dealt Hook |
| On Damage Taken | Amount, Source, Target | 持有者受到任何来源的伤害之后 | 荆棘、反击、受击反应。想减免伤害,用 Damage Taken Hook |
| On Attack Taken | Amount, Source, Target | 攻击命中持有者之后。状态 tick 等非攻击伤害不触发 | 只对攻击生效的反应 |
| On HP Gained | Amount, Source, Target | 持有者被治疗之后 | 治疗反应。想改治疗量,用 HP Gain Hook |
| On HP Lost | Amount, Source, Target | 持有者损失 HP 之后,无论是否来自伤害 | 流血、献祭反应 |
| On Armor Gained | Amount, Source, Target | 持有者获得护甲之后 | 获得护甲协同 |
| On Armor Lost | Amount, Source, Target | 持有者损失护甲之后 | 破甲反应 |
| On Unit Spawned | Unit | 单位被召唤上场之后 | 召唤反应 |
| On Unit Died | Was Kill, Source, Target | 每次死亡触发两轮:死者身上的状态先跑一轮,Was Kill 为否;击杀者身上的状态再跑一轮,Was Kill 为是。Source 是击杀者,Target 是死者 | 死者侧的亡语、击杀侧的奖励。一个状态同时处理两侧逻辑时,按 Was Kill 分支 |
能量与状态入口
同样是状态宿主。
| 入口 | 输出 | 何时触发 | 用于 |
|---|---|---|---|
| On Energy Gained | Amount | 玩家获得能量之后 | 获得能量反应。想改数值,用 Energy Gain Hook |
| On Energy Spent | Amount | 玩家消耗能量之后 | 消耗反应和计数。想改卡牌费用,用 Card Cost Hook |
| On Status Inflicted | Status, Stacks, Source, Target | 持有者向其他单位施加状态之后 | 施加方效果:"每当你施加减益"。想改层数,用 Inflict Status Hook |
| On Status Received | Status, Stacks, Source, Target | 状态落到持有者身上之后 | 接收方反应 |
| On Status Expired | Status, Target | 持有者身上的状态自然耗尽时,层数或持续时间归零 | 过期效果 |
| On Status Removed | Status, Stacks, Target | 持有者身上的状态被效果移除时:净化、驱散 | 驱散反应,与自然过期区分 |
| On Status Stacks Changed | Status, Stacks, Target | 持有者身上某状态的层数变动时,增减都算。Stacks 是新的层数 | "叠到 5 层"这类阈值效果 |
敌人与事件入口
| 入口 | 输出 | 宿主 | 何时触发 |
|---|---|---|---|
| On Enemy Behavior Start | 无 | Enemy | 每张敌人图的根。GCS 用它选出敌人预告的意图,并在敌方阶段轮到该敌人行动时再次运行它 |
| On Internal Event | 经 Event Arg 读取 | 全部 | 战斗中任何地方运行了同名 EventName 的 Raise Internal Event 时 |
| On GES Event | 经 Event Arg 读取 | 全部 | 指定的 Game Event System 事件被触发时,无论来自 GCS 内外 |

demo 的 Mire Reaper 展示了敌人图的形状:On Enemy Behavior Start 接一个 Weighted Random Pattern,每条分支以 Leaf Intent 收尾,预告敌人下回合的执行内容。
Hook 入口
Hook 不等某个时机,它在对应的值正在计算、结果落地之前运行。Hook 通过输出暴露待定的值。要改变它,算出新值后运行 Write Hook;要彻底阻止这次操作,运行 Cancel Hook。Hook 对卡牌图和状态图开放;实践中几乎都写在状态上。
每个 Hook 入口带三个共享设置:
| 设置 | 含义 |
|---|---|
Priority | 多个 Hook 拦截同一个值时按优先级依次运行,"伤害翻倍"和"伤害上限 10"可以刻意排序 |
Scope | Battle 表示整场战斗生效;Turns 表示限定回合数 |
Turns | Scope = Turns 时 Hook 保持生效的回合数 |
| Hook | 输出 | 何时介入 | 用于 |
|---|---|---|---|
| Damage Dealt Hook | Value, Source, Target | 计算持有者造成的伤害时 | 在应用前提高或降低伤害。命中后的反应用 On Damage Dealt |
| Damage Taken Hook | Value, Source, Target | 计算持有者受到的伤害时 | 减伤、易伤、抗性 |
| Attack Taken Hook | Value, Source, Target | 计算命中持有者的攻击(不含状态伤害)时 | 攻击专属的减免或放大 |
| HP Gain Hook | Value, Source, Target | 计算持有者的治疗量时 | 放大或压制治疗 |
| HP Loss Hook | Value, Source, Target | 计算持有者的非伤害 HP 损失时 | 修改献祭式损耗。伤害用伤害类 Hook |
| Armor Gain Hook | Value, Source, Target | 计算持有者即将获得的护甲时 | Dexterity 式护甲加成 |
| Armor Loss Hook | Value, Source, Target | 计算持有者即将损失的护甲时 | 护甲保护 |
| Armor Reset Hook | Value, Target | 计算回合开始的护甲重置时 | Barricade 式跨回合留甲 |
| Energy Gain Hook | Value | 计算玩家即将获得的能量时 | 放大能量获取 |
| Energy Spend Hook | Value | 计算玩家即将消耗的能量时 | 消耗折扣或加价 |
| Energy Per Turn Hook | Value | 计算每回合能量补充时 | 改变能量基线 |
| Inflict Status Hook | Status, Stacks, Source, Target | 计算持有者即将向外施加的层数时 | 放大你施加的减益 |
| Receive Status Hook | Status, Stacks, Source, Target | 计算即将落到持有者身上的层数时 | 状态抗性或易感 |
| Status Damage Hook | Value, Source, Target | 计算某个状态 tick 的伤害时。用 Hook 的 Status 字段指定针对哪个状态 | 只调整 Poison 或 Burn 的 tick,不影响攻击伤害 |
| Card Cost Hook | Card, Value | 计算一张卡的能量费用时 | 费用折扣与惩罚 |
| Card Playable Hook | Card, Playable | GCS 检查一张卡能否打出时 | 锁牌,比如 Silence 生效期间 |
| Draw Count Hook | Value | 计算即将抽的牌数时 | 多抽或少抽 |
| Hand Size Hook | Value | 计算手牌上限时 | 提高或降低手牌上限 |
Hook 写入模式
一张 Hook 图几乎总是这个形状:
- 从 Hook 入口开始,读取
Value(按需再读Source、Target、Card或Status) - 用
Condition、Math Binary、Unit Info或Card Info算出新值 - 运行
Write Hook,数值用Kind = Int,可打出性用Kind = Bool - 只有当预期结果是"这件事完全不发生"时,才用
Cancel Hook
实例,"这个单位持有 Plated Armor 层数时,受到的伤害减少 2 点":
Damage Taken Hook- 对 Hook 的
Target和 Plated Armor 状态使用Unit Status Stacks Condition设Op = Greater,与 0 比较Branch- 在
True上,Math Binary从Value减 2 Write Hook,Kind = Int
一张永远走不到 Write Hook 的 Hook 图不会改写任何值。图可以正常执行,VFX 也可以播放,但原值会保持不变。Issues 徽标没有报错而数值没有变化时,先检查这一条。
事件入口模式
内部事件让发送方和接收方保持松耦合:
- 发送方运行
Raise Internal Event,设置EventName和可选的参数绑定 - 接收方的图以同名的
On Internal Event开始 - 接收方用
Event Arg逐个读取命名值
校验器会标记 EventName 为空的 On Internal Event 入口,所以先把事件命名好。GES 那一对只在行为确实需要跨进 Game Event System 时使用;逻辑留在 GCS 内部时,优先使用内部事件,排查也更直接。