Files
aibis-dream/Docs/Yarn维修节点类型规范.md
T

12 KiB
Raw Blame History

Yarn 维修节点类型规范

本规范适用于 Assets/Yarn/FP/ 下的维修流程脚本,包括:

  • FP_Huoshan1
  • FP_Peipei1 / FP_Peipei2 / FP_Peipei3
  • FP_Shitou1 / FP_Shitou2
  • FP_Prologue

注意FP_Day*_sleep 属于梦境脚本,沿用《Yarn 节点类型规范.md》;FP_Day*_begin/mid/night 属于外出/日常脚本,不在本规范范围内。


1. 节点类型与跳转权限

类型 标签 职责 跳转权限 内容限制
start start 引擎入口 仅单出口 <<jump>> 无叙事文本,仅做环境初始化与跳转
init init 变量声明与初始状态 仅单出口 <<jump>> <<declare>> / <<set>> / 全局参数初始化
center center 阶段调度中枢 可多出口 <<jump>> 仅按 $gameStage 分发,无文本、无选项
content content 阶段内容节点 通常单出口 可含叙事文本、局部选项、小游戏指令
performance performance 原子化线性演出节点 单出口 timeline、cutscene 等,禁止选项
event event C# 调用的事件响应入口 单/多出口 <<jump>> 仅轻量路由,禁止大段叙事
function function 纯指令封装 禁止 <<jump>> 仅 Command,无文本;命名加 _Func 后缀
end end 维修结束/收尾 单出口 可含少量结束演出,最终必须 <<NextYarn>>

附加标记(可附加到任何类型):

  • deprecated:已废弃节点,运行时不可达。
  • wip:待编辑/占位节点,运行时不可达。

2. 命名规则

类型 命名示例 规则
start Start 固定命名,首字母大写
init VarsInit数据初始化 建议统一为 VarsInit;如项目已有 数据初始化,可保留但同一 project 内保持一致
center Center 固定命名,每个维修 Yarn project 一个
content Stage1开头对话检查情绪旋钮调节 阶段入口建议用 StageN;阶段内子节点用中文动宾/名词短语
performance 地铁到站演出手术动画滤波器启动动画 中文描述性名称,明确表达演出内容
event EmoPlugInIntoEyeViewOnSalesTurnComplete OnXxx 或模块名 + 事件名,表达触发来源
function Wave_Show_FuncWave_Hide_FuncModule_HighlightOff_Func 领域_动作_Func模块_动作_FuncPascalCase;必须带 _Func 后缀
end EndStage8_End 统一用 End 或带阶段前缀的结束名

3. 各类型详细规范

3.1 start 节点

Yarn Spinner 默认从名为 Start 的节点开始运行。它不属于任何功能类型,职责仅是启动流程。

title: Start
tags: start
---
<<init_environment Day>>
<<init_actor 地铁医生 左边>>
<<show_actor 地铁医生>>

<<jump VarsInit>>
===

约束清单:

  • 固定命名为 Start,标签 start
  • 不写叙事文本、不声明变量、不含选项。
  • 仅做最小必要的环境初始化,然后跳转到 init

3.2 init 节点

集中声明维修流程所需变量,并设置初始全局参数。与梦境规范中的 InitParams 属于同一类型,只是节点名可按项目习惯选择 VarsInit数据初始化

title: VarsInit
tags: init
---
// 流程阶段
<<declare $gameStage=1>>

// 模块检查标记
<<declare $emoChecked=false>>
<<declare $memoryChecked=false>>
<<declare $logicChecked=false>>

// 小游戏相关状态
<<declare $salesTurnIndex=0>>
<<declare $knobFailCount=0>>

<<jump Center>>
===

约束清单:

  • 标签 init,固定命名为 VarsInit(或统一使用 数据初始化)。
  • 仅包含 <<declare>><<set>><<set_global_param>> 等初始化指令。
  • 禁止叙事文本、选项、<<jump>> 到非 center 节点。
  • 同一 project 内,init 节点的命名必须一致。

3.3 center 节点

唯一拥有多出口跳转权的节点,负责按 $gameStage 进行阶段调度。

title: Center
tags: center
---
// Stage1: 诊室开场
// Stage2: 后脑检查
// Stage3: 滤波器深入
// ...

<<if $gameStage == 1>>
    <<jump Stage1>>
<<elseif $gameStage == 2>>
    <<jump Stage2>>
<<elseif $gameStage == 3>>
    <<jump Stage3>>
<<elseif $gameStage == 999>>
    <<jump End>>
<<endif>>
===

约束清单:

  • 标签 center,固定命名为 Center
  • 仅按 $gameStageif 分发,不写叙事文本、不含选项。
  • 维修终止条件统一在此处理(如 $gameStage == 999 时跳转到 end)。
  • 是同一 project 内唯一应该读取 $gameStage 的节点。

3.4 content 节点

维修流程的核心单元,承载阶段中的实际内容:叙事、选项、小游戏指令等。

title: Stage1
tags: content
---
<<hide_dialog>>
<<switch_fix_system_to "Clinic">>
<<fade_out 1>>
<<jump 开头对话>>
===
title: 开头对话
tags: content
---
hs: 医——生——! #line:0bade9e

<<change_actor_state 捂头表情idle 火山>>
<<fade_in_actor 火山>>

// ... 叙事与演出 ...

<<set $gameStage = 2>>
<<jump Center>>
===

约束清单:

  • 标签 content
  • 阶段入口节点建议命名为 StageN;阶段内子节点用中文描述性名称。
  • 阶段末尾通常做两件事:设置 $gameStage、跳回 Center
  • 允许内部嵌套局部选项,但选项应服务于当前阶段内容,不做跨阶段跳转。
  • 不应读取 $gameStage 做复杂分发(这是 center 的职责)。

3.5 performance 节点

原子化线性演出节点,用于 timeline、cutscene 等必须完整播放的演出。

title: 地铁到站演出
tags: performance
---
<<hide_dialog>>
<<play_timeline 地铁到站>>
<<wait 2>>
<<jump 诊室外2>>
===

约束清单:

  • 标签 performance
  • 禁止分支选项,必须单出口。
  • 保存点只能出现在 performance 节点的开始之前结束之后,节点内部不允许保存。
  • 可包含 timeline 播放、镜头运动、动画演出等线性指令。
  • 不宜包含需要玩家选择的选项或小游戏交互。

3.6 event 节点

由 C# 代码调用的事件响应入口,负责把外部游戏事件映射到对应阶段节点。

title: EmoPlugIn
tags: event
---
<<jump 检查情绪>>
===
title: OnSalesTurnComplete
tags: event
---
<<if $salesTurnIndex == 1>>
    <<jump 销售转动_语义合成>>
<<elseif $salesTurnIndex == 2>>
    <<jump 销售转动_语言审查>>
<<elseif $salesTurnIndex == 3>>
    <<jump 销售转动_异常检测>>
<<endif>>
===

约束清单:

  • 标签 event
  • 节点标题应表达触发来源,建议使用 OnXxx 或「模块 + 事件」形式。
  • 允许根据 $gameStage 或少量状态变量做轻量 if 分发。
  • 禁止大段对话、旁白、演出文本
  • 不应成为玩家直接阅读的内容节点。

3.7 function 节点

纯指令封装,零文本、零跳转,用于复用一组命令。与梦境规范的 function 保持一致,命名加 _Func 后缀。

title: Wave_Show_Func
tags: function
---
<<switch_emotion_wave_config "normal">>
<<show_emotion_wave 1>>
===
title: Wave_Hide_Func
tags: function
---
<<hide_emotion_wave 0.3>>
===

约束清单:

  • 标签 function
  • 命名必须带 _Func 后缀。
  • 禁止任何叙事文本、对话、选项
  • 禁止任何 <<jump>>
  • 仅包含演出或小游戏相关的 Command。

3.8 end 节点

维修流程的收尾节点,负责结束演出并触发下一段 Yarn。

title: End
tags: end
---
<<fade_out 1>>
<<wait 1>>

me: 今天就到这里吧。 #line:xxxxxxxx

<<hide_dialog>>
<<wait 2>>
<<NextYarn>>
===

约束清单:

  • 标签 end
  • 可含少量结束演出与收尾对话。
  • 最终必须调用 <<NextYarn>>,将控制权交还 C#。
  • 不要在一个维修脚本里设置多个 end 节点,除非剧情明确需要分支结局。

4. 控制流图

Start ──<<jump>>──> VarsInit / 数据初始化
  │
  ▼
Center ──<<jump>>──> Stage1content/performance 入口)
  │                      │
  │                      ├── content 子节点 ── ...
  │                      │
  │                      ├── performance 子节点 ──<<jump>>──> content 或 end
  │                      │
  │                      └── <<set $gameStage>> ──> <<jump Center>>
  │
  ├──<<jump>>──> End ──<<NextYarn>>
  │
  └── C# 调用 ──> event 节点 ──<<jump>>──> content 子流程

5. $gameStage 使用规范

  • $gameStagecenter 节点的调度主键。
  • 类型可以为 intstring,但同一 Yarn project 内必须保持一致
  • 只有 center 节点读取 $gameStage
  • content 节点在末尾写入 $gameStage,然后跳回 center
  • 终止值(如 999"流程结束")统一在 center 中处理。

6. 快速检查表

检查项 start init center content performance event function end
是否包含叙事文本? 禁止 禁止 禁止 允许 允许(演出文本) 禁止 禁止 允许(少量)
是否包含选项? 禁止 禁止 禁止 允许 禁止 禁止 禁止 禁止
是否有 <<jump>> 仅一个出口 仅一个出口 可多出口 通常一个出口 单出口 可有 禁止 最终 <<NextYarn>>
是否修改 $gameStage 禁止 可初始化 禁止 允许 禁止 尽量避免 禁止 禁止
是否被 C# 调用?
是否可作为保存边界? 是(仅开头/结尾)

7. 废弃与占位节点

  • 废弃或待编辑节点必须附加 deprecatedwip 标签。
  • 任何活跃节点不得 <<jump>>deprecated / wip 节点。
  • 任何 C# 代码不得调用 deprecated / wip 节点。
  • 建议:deprecated 用于已废弃的旧节点,wip 用于尚未完成的占位节点。

8. 设计原则

  • **start 负责启动**:最小初始化 + 跳转到 init
  • **init 负责配置**:所有变量声明集中管理。
  • **center 负责调度**:打开 center 即可一览整个维修流程阶段。
  • **content 负责内容**:阶段之间的叙事、选项、小游戏交互隔离,便于单独调整。
  • **performance 负责原子化演出**timeline、cutscene 等必须完整播放,保存边界清晰。
  • **event 负责桥接**:把 C# 事件翻译成 Yarn 内部跳转,不掺杂叙事。
  • **function 负责复用指令**:零文本零跳转,_Func 后缀与梦境规范保持一致。
  • **end 负责收尾**:统一出口,统一 <<NextYarn>>