154 lines
3.9 KiB
Markdown
154 lines
3.9 KiB
Markdown
# 选项已探索追踪说明
|
||
|
||
> **状态**:方案已定,运行时已实现(内存态)
|
||
> **读者**:剧情策划、关卡策划、写 Yarn 的同学
|
||
> **参考脚本**:[FP_Day1_sleep.yarn](../Assets/Yarn/FP/FP_Day1_sleep/FP_Day1_sleep.yarn)
|
||
|
||
## 1. 用途
|
||
|
||
用于可反复探索的选项列表。玩家点过某个选项后,该选项会显示为**已探索**;如果相关剧情变量变化,选项可以重新变回未探索,提示玩家这里可能有新内容。
|
||
|
||
## 2. 基本规则
|
||
|
||
| 写法 | 含义 |
|
||
| --- | --- |
|
||
| `tags: hub` / `tags: detour` | 节点内选项默认追踪 |
|
||
| `tags: linear` / 无 tags | 节点内选项默认不追踪 |
|
||
| `#deps:变量名` | 变量变化后,取消该选项的已探索状态 |
|
||
| `#track` | 强制追踪 |
|
||
| `#notrack` | 强制不追踪,适合“返回 / 走开 / 下楼”等操作按钮 |
|
||
|
||
`#deps:` 里的变量名不写 `$`,多个变量用英文逗号分隔:
|
||
|
||
```yarn
|
||
->女孩 #deps:ppStage,scj
|
||
```
|
||
|
||
`<<if>>` 只控制选项是否显示;`#deps:` 才表示“变量变化后这里有新内容”。
|
||
|
||
```yarn
|
||
->地上 <<if $gameStage < 2>> #deps:gameStage
|
||
<<detour 检查地上>>
|
||
<<jump 天台>>
|
||
```
|
||
|
||
优先级:
|
||
|
||
```text
|
||
#notrack > #track / #deps:... > 节点 tags 默认规则
|
||
```
|
||
|
||
## 3. 常见写法
|
||
|
||
### 3.1 普通探索菜单
|
||
|
||
`hub` 里的选项默认会追踪,不需要额外写标记。
|
||
|
||
```yarn
|
||
title: 教室
|
||
tags: hub
|
||
---
|
||
->观察
|
||
<<detour 观察>>
|
||
<<jump 教室>>
|
||
->趴回去再睡会
|
||
<<detour 趴回去再睡会>>
|
||
<<jump 教室>>
|
||
->离开教室 #notrack
|
||
<<jump 走廊>>
|
||
===
|
||
```
|
||
|
||
### 3.2 内容随剧情阶段变化
|
||
|
||
如果选项内容会随变量变化,就写 `#deps:`。
|
||
|
||
```yarn
|
||
title: 走廊
|
||
tags: hub
|
||
---
|
||
->女孩 #deps:ppStage,scj
|
||
<<detour 女孩>>
|
||
<<jump 走廊>>
|
||
->窗外 <<if $gameStage == 0>>
|
||
<<detour 走廊窗外>>
|
||
<<jump 走廊>>
|
||
===
|
||
```
|
||
|
||
这里“女孩”会在 `$ppStage` 或 `$scj` 变化后重新变成未探索;“窗外”只是受条件控制显示,不会因为 `$gameStage` 变化自动刷新已探索状态。
|
||
|
||
### 3.3 父入口和子选项
|
||
|
||
父入口不会自动汇总子选项。进入过“女孩”只代表外层“女孩”已探索,不代表里面的“交谈”也已探索。
|
||
|
||
```yarn
|
||
title: 走廊
|
||
tags: hub
|
||
---
|
||
->女孩 #deps:ppStage,scj
|
||
<<detour 女孩>>
|
||
<<jump 走廊>>
|
||
===
|
||
|
||
title: 女孩
|
||
tags: detour
|
||
---
|
||
->交谈 #deps:ppStage,scj
|
||
<<detour 女孩_交谈>>
|
||
->走开 #notrack
|
||
===
|
||
```
|
||
|
||
### 3.4 同名选项的不同分支
|
||
|
||
同一个选项文字在不同条件下可以代表不同内容。内容会变的分支写 `#deps:` 即可。
|
||
|
||
```yarn
|
||
title: 天文台
|
||
tags: hub
|
||
---
|
||
->往里看 <<if $wyjStage == 3>>
|
||
<<jump 海边>>
|
||
->往里看 <<if $wyjStage != 3>> #deps:wyjStage
|
||
<<detour 往里看_还不能进入>>
|
||
<<jump 天文台>>
|
||
===
|
||
```
|
||
|
||
### 3.5 线性剧情里的选择
|
||
|
||
`linear` 默认不追踪,适合一次性选择。
|
||
|
||
```yarn
|
||
title: 教室苏醒
|
||
tags: linear
|
||
---
|
||
->梦到机器人
|
||
me: 我梦见我是一个机器人......
|
||
->梦到我是医生
|
||
me: 我梦见我成了一个医生......
|
||
->不记得了
|
||
me: 我不记得梦的内容了。
|
||
<<jump 教室>>
|
||
===
|
||
```
|
||
|
||
如果线性节点里某个选项确实需要标记,可以单独加 `#track`。
|
||
|
||
## 4. 写作检查
|
||
|
||
- 可反复返回的探索列表,优先放在 `hub` 或 `detour`。
|
||
- 普通探索选项不用额外标记。
|
||
- 内容会随变量变化的选项,加 `#deps:变量名`。
|
||
- `#deps:` 只写真正会让内容变新的变量,不要把所有相关变量都塞进去。
|
||
- `<<if>>` 管显示,`#deps:` 管刷新已探索状态。
|
||
- 纯操作按钮优先加 `#notrack`。
|
||
- 父入口和子选项各自独立。
|
||
- 不要手写或复制 `#line:` 标签;行标签交给 Yarn / 本地化流程生成和维护。
|
||
|
||
## 5. 运行时补充
|
||
|
||
本期已探索状态只保存在内存里,不进存档。开始新的 Yarn project、回主界面、执行 `<<NextYarn>>` 或退出游戏时会清空。同一段探索内在 `hub` / `detour` 之间来回跳转不会清空。
|
||
|