Taplot 里选完支线之后剧情接不上,多数时候不是某条支线写错了,而是多条分支同时生效时没人定过谁先谁后。可以按四步收口:先列出这次播放里待生效的选项,再按统一优先级排序,然后做同一节点/同一角色状态的冲突检测,最后用观众视角按路径回放,确认看不出接缝。这四步的判断依据都应来自配置、播放日志或页面行为,不要靠通读剧本凭感觉下结论。
分支乱序的根因通常是优先级没有落成一份共用规则表,而不是单条支线写错。适用场景:一次播放里多个选项同时生效的互动剧情。操作动作:列待生效清单并标注触发时刻与作用范围,按主线推进>角色关系>氛围细节排序,按路径回放比对关键台词与角色状态。验证方式:以回放结果和播放日志为准。风险边界:组合无法穷尽时,优先保证主线路径可见的连贯,其余按规则表兜底。
把一次播放里所有待生效的选项列出来
先把这次播放里可能生效的选项列成清单,再谈优先级。关键区分是即时生效与延后生效:即时生效的选项在触发节点当场改状态或替换台词;延后生效的选项只登记一个标记,等到后续节点、章节结束或路径判定时才结算。冲突大多发生在同一层内,层次分不清,就容易把顺序问题误判成两条分支互斥。
一份够用的待生效清单至少包含下面几列,字段名按 Taplot 实际配置替换:
| 选项 ID | 触发时刻 | 生效方式 | 作用范围 | 可被覆盖 |
|---|---|---|---|---|
| choice_03 | 进入 N12 时 | 即时 | 当前节点台词 | 是 |
| choice_07 | 进入 N12 时 | 即时 | 角色关系值 | 否 |
| choice_11 | 章节结束时 | 延后 | 章节标记 | 是 |
清单可以先按一段配置骨架整理,跑一次播放后对照日志里的生效顺序:
node: N12
options:
- id: choice_03
trigger: on_enter
scope: node.line
effect: set_text
priority_group: main
- id: choice_07
trigger: on_enter
scope: role.affinity
effect: add_flag
priority_group: relation
- id: choice_11
trigger: deferred
scope: chapter.end
effect: set_flag
priority_group: ambience
验证方式很直接:播放到相关节点,看日志里打印的生效顺序是否与清单一致;如果某一项从未出现在日志里,说明触发条件没命中,而不是被覆盖。作用范围要写到具体对象(节点台词、角色关系值、章节标记),只写影响剧情这类描述没法用于后续排序。
给分支定优先级:主线推进优先于角色关系,角色关系优先于氛围细节
三类的判定标准可以先粗分,边界不清楚的分支按更高的一类登记:
| 分支类型 | 判定标准 | 典型改动对象 |
|---|---|---|
| 主线推进 | 改动章节开关、必经事件、结局分支 | 章节标记、结局判定 |
| 角色关系 | 改动角色关系值、角色状态、称呼与对手戏走向 | 关系值、角色状态、称呼 |
| 氛围细节 | 只改环境描述、旁白语气、非关键演出 | 描述文本、旁白、演出参数 |
排序规则建议固定成一条:主线推进优先于角色关系,角色关系优先于氛围细节;同一类内冲突,先按触发时刻先后,再按选项 ID 做稳定排序。高优先级覆盖低优先级时不要静默丢弃,记一条被覆盖日志,方便回查。排序结果应记录在团队共用的规则表里,配置里只引用优先级分组名,不把具体顺序硬编码进剧本正文,否则改一次顺序要翻所有节点。
处理两个分支同时改写同一段剧情的情况
与其通读剧本找冲突,不如把每条分支的改动整理成集合,再机械比对:两条分支是否改到同一节点、或同一角色状态。命中同一处且逻辑上不可能同时成立,就是不可同时生效的组合。下面这段伪代码只用于说明比对逻辑,实际可以在导出分支配置后离线跑:
for a, b in pairs(branches):
if a.nodes & b.nodes:
report('同一节点', a.id, b.id, a.nodes & b.nodes)
if a.state_keys & b.state_keys:
report('同一角色状态', a.id, b.id, a.state_keys & b.state_keys)
把结果整理成不可同时生效组合清单,比在剧本里加注释更清楚:
| 分支 A | 分支 B | 冲突点 | 处理动作 |
|---|---|---|---|
| choice_03 | choice_09 | 同一节点 N12 的结局判定 | 保留主线分支,氛围分支改为延后生效 |
| choice_07 | choice_14 | 同一角色关系值 | 保留角色关系分支,另一条记被覆盖 |
| choice_11 | choice_15 | 章节结束标记 | 合并为一个标记,或拆成两个独立字段 |
处理动作通常只有几种:保留高优先级、降级为延后生效、合并改动物、拆成独立字段。具体选哪一种,需要结合改动是否可逆、能否合并来判断,不能只看谁写得更早。
用观众视角走一遍,确认看不出接缝
规则表是给制作方看的,观众只看结果。走查时把配置放一边,按路径从头播放,记录每条路径的关键台词与角色状态,再前后对比找矛盾。步骤可以是:单开一条路径完整播放;记录每个关键节点的台词与角色状态;与上一个节点的期望值比较;换下一条路径重复。只看结果、不看实现,是这一步的重点。
| 路径 ID | 节点 | 关键台词或角色状态 | 上一层期望 | 实际结果 | 是否矛盾 |
|---|---|---|---|---|---|
| P-01 | N12 | 角色甲称呼为旧识 | 未见面应为陌生人 | 旧识 | 是 |
| P-01 | N18 | 章节标记=已离队 | 已在 N12 离队 | 已离队 | 否 |
| P-02 | N12 | 角色甲称呼为陌生人 | 未见面应为陌生人 | 一致 | 否 |
矛盾位置通常集中在延后生效的选项上:登记时没有立刻体现,等到章节结束才结算,中间几段就会显得前后不一致。发现矛盾后回到冲突清单,确认是优先级排错了,还是这条路径本就不该同时命中两个选项。走查不必覆盖所有组合,先保证主线路径和主要支线路径。
把优先级规则写成团队共用的表
规则表要让写剧本、做分支配置、剪片子的人看同一份。建议固定四个字段:分支类型、优先级序号、冲突示例、处理动作。冲突示例尽量写具体节点或字段,避免和另一条支线冲突这种没法核对的描述。
| 分支类型 | 优先级序号 | 冲突示例 | 处理动作 |
|---|---|---|---|
| 主线推进 | 1 | N12 结局判定与氛围分支同改 | 保留主线,氛围分支改为延后生效 |
| 角色关系 | 2 | N12 角色关系值与另一支线同改 | 保留高序号,另一条记被覆盖 |
| 氛围细节 | 3 | 旁白文本重叠 | 允许后触发者覆盖,但保留日志 |
规则表放在团队能看到的位置,配置里只引用优先级分组名;每次新增分支类型,先补规则表再改配置。这样下一次再遇到选了支线剧情乱了,可以直接查表定位:是顺序还没定,还是两条分支确实不可同时生效。