diff --git a/Docs/Yarn节点类型规范.md b/Docs/Yarn节点类型规范.md new file mode 100644 index 000000000..201d5e304 --- /dev/null +++ b/Docs/Yarn节点类型规范.md @@ -0,0 +1,276 @@ +# Yarn 节点类型规范 + +## 1. 节点类型与跳转权限 + + +| 标签 | 职责 | 跳转权限 | 内容限制 | +| ---------- | ---- | ----------------------- | ---------------------- | +| `hub` | 导航中枢 | **可 `<>` 多个节点** | 仅选项骨架,无叙事文本 | +| `linear` | 线性演出 | **仅可 `<>` 到一个节点** | 可有叙事文本和演出指令 | +| `detour` | 内容片段 | **禁止 `<>`** | 可有叙事文本、画面指令、局部选项 | +| `function` | 功能函数 | **禁止 `<>`** | **禁止任何文字内容,仅 Command** | + + +--- + +## 2. 命名规则 + + +| 节点标签 | 命名示例 | 规则 | +| ----------------- | ----------------------- | ----------------- | +| `hub` | `教室`、`天台`、`走廊` | 场景名或状态名 | +| `linear` | `海边`、`开场动画` | 事件名或过场名 | +| `detour` | `观察`、`趴回去再睡会`、`女孩` | 中文动宾/名词短语 | +| `function`(只读) | `展示山_Func` | **`_Func` 后缀**;不修改 `$` 变量 | +| `function`(写入) | `捡起矢车菊_Set` | **`_Set` 后缀**;会修改 `$` 变量 | +| `function`(初始化特例) | `InitParams` | **无后缀**;仅 declare | +| `Start`(引擎入口特例) | `Start` | **固定命名,不属于四类标签** | + + +--- + +## 3. 各类型详细规范 + +### 3.0 Start 节点(引擎入口) + +Yarn Spinner 默认从名为 `Start` 的节点开始运行。它**不属于** hub / linear / detour / function 四类,**不加**上述 `tags`,职责仅是启动流程,不写叙事。 + +```yarn +title: Start +--- +<> +<> +=== +``` + +**约束清单:** + +- **固定命名**:节点 title 必须为 `Start` +- **极简**:仅初始化 + 跳转到首个 linear(或首个 hub);不写 ``、对话、选项 +- **InitParams**:通过 `<>` 调用;变量声明集中在 `InitParams` function 节点,不散落在 Start +- **唯一出口**:末尾仅一个 `<>`,指向正式剧情入口(通常为 linear) + +叙事、演出、分支选项一律放在 `Start` 之后的首个 linear(如 `开场`)及后续节点中。 + +--- + +### 3.1 hub 节点 + +唯一拥有多出口跳转权的节点类型,负责场景导航。 + +```yarn +title: 天台 +tags: hub +--- +<> + +->检查 + <> + <> # 允许:返回自身 hub +->上去 <> + <> + <> # 允许:返回自身 hub +->上楼 + <> + <> # 允许:跳转到其他 hub +->进入天文台 <> + <> + <> # 允许:跳转到其他 hub +=== +``` + +**约束清单:** + +- 仅存放选项骨架和流程骨架,不写叙事文本 +- 选项目标为 detour(内容)或 `<>` 到其他 hub/linear +- 循环回自身时必须显式 `<>` + +--- + +### 3.2 linear 节点 + +仅允许一个出口,用于强制剧情推进。 + +```yarn +title: 海边 +tags: linear +--- +<> +<> +你的身体仿佛正在黑暗中褪去。 + +# ... 大量线性叙事 ... + +<> +<> +<> + +<> # 仅一个出口 +=== +``` + +**约束清单:** + +- 无分支选项(或仅有伪选项无实际分流) +- 末尾只能有一个 `<>` 目标(或 `<>`) +- 可包含演出指令和叙事文本 + +--- + +### 3.3 detour 节点 + +禁止任何 `<>`,执行完毕后控制权交还调用方。 + +```yarn +title: 天台检查 +tags: detour +--- +->窗户 + 天文台下面有一排窗户... +->地上 <> + 地上排布着黑乎乎脏兮兮的隔热砖... + <> + <> + <> +->远眺 + <> +=== +``` + +**约束清单:** + +- **禁止任何 `<>`** +- 允许内部嵌套选项(仅限局部选择,不影响全局导航) +- 允许调用其他 detour(`<>`)和 function(`<>`) +- 负责叙事文本、画面指令、局部状态变更 + +--- + +### 3.4 function 节点 + +纯指令容器,零文本。统一 `tags: function`,按是否修改 `$` 变量区分后缀: + +| 后缀 | 职责 | 修改 `$` 变量? | +| ---- | ---- | ------------- | +| `_Func` | 只读:根据当前变量输出演出 | 禁止 | +| `_Set` | 写入:变更进度/状态(可含演出指令) | 允许 | +| 无后缀 | `InitParams`:全局变量声明 | 仅 `<>` | + +`set_global_param`(场景、音量等展示上下文)不计入「修改 `$` 变量」。 + +**只读示例(`_Func`)** + +```yarn +title: 展示走廊_Func +tags: function +--- +<> + <> +<> + <> +<> + <> +<> +=== +``` + +**写入示例(`_Set`)** + +```yarn +title: 捡起矢车菊_Set +tags: function +--- +<> +<> + <> +<> + <> +<> +<> +=== +``` + +**特例:InitParams** + +`InitParams` 的职责是全局变量声明与初始值设定,属于项目启动时的根级配置,不加 `_Func` / `_Set` 后缀。 + +```yarn +title: InitParams +tags: function +--- +<> +<> +<> +=== +``` + +**约束清单:** + +- **零文字**:禁止任何对话、旁白、选项文字 +- **零跳转**:禁止任何 `<>` +- **纯 Command**:仅 `<>`、`<>`、`<>`、`<>`、`<>` 等指令 +- **后缀语义**:`_Func` 禁止 `<>` / `<>`;`_Set` 必须含至少一处 `$` 变量写入 +- **标签大写**:`tags: function`(首字母大写) + +--- + +## 4. 调用关系图 + +``` +Start ──<>──> InitParams + │ + │ <> + ▼ +linear(如:开场)──>> hub / linear / NextYarn + +┌─────────┐ <> ┌─────────┐ +│ hub │ ─────────────────> │ hub │ +│ (多出口) │ │ (多出口) │ +└────┬────┘ └─────────┘ + │ + │ <> ┌─────────┐ + └──────────────>│ detour │ ──>> 可嵌套调用其他 detour + │(无jump) │ + └────┬────┘ + │ + ▼ + 自然返回调用方 hub + +┌─────────┐ <> ┌─────────┐ +│ hub │ ─────────────────>│ linear │ +│ (多出口) │ │(单出口) │ +└─────────┘ └────┬────┘ + │ + │ <> 到下一 hub/linear/NextYarn + ▼ + +┌─────────┐ +│function │ 被 hub/detour/linear 通过 <> 调用 +│(零文本) │ +└─────────┘ +``` + +--- + +## 5. 快速检查表 + + +| 检查项 | Start | hub | linear | detour | function | +| --------------- | ----- | ----- | -------- | -------- | ---------------------- | +| 是否包含选项骨架? | 禁止 | 必须 | 禁止 | 仅局部 | 禁止 | +| 是否包含叙事文本? | 禁止 | 禁止 | 允许 | 允许 | **禁止** | +| 是否有 `<>`? | 仅一个出口 | 允许多出口 | 仅一个出口 | **禁止** | **禁止** | +| 后缀是否正确? | - | - | - | - | **`_Func` / `_Set`,InitParams 无后缀** | +| 标签是否正确? | 无 tags | `hub` | `linear` | `detour` | `function` | + + +--- + +## 6. 设计原则 + +- **Start 负责启动**:InitParams + 跳转入口,与叙事彻底分离 +- **hub 负责路由**:打开任意 hub 即可一览场景结构,无需滚屏 +- **linear 负责推进**:无分支过场,单向流动 +- **detour 负责填充**:内容抽离后可被多处复用,修改不影响整体结构 +- **function 负责纯逻辑**:零文本保证指令安全;`_Func` 只读、`_Set` 写入,后缀一眼识别副作用 +