Files
2026-10-01 23:26:47 +08:00

185 lines
9.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 17 · 《深海回音》(abyss) — 深海救援叙事 RPG
> **给开发的实现要点摘要**
> 1. 交互权威:26 号手册。叙事范式对齐 [26-apply-storyline.md](26-apply-storyline.md)。搜索等待的单击=发声呐脉冲,等同宪法「检查」,**不是**四向滑动玩法,帮助用上滑。
> 2. 骨架同 radio:节点链 + seqToken + pendingChoice。宏状态 INTRO / DIVE / COMMS / SURFACE / ENDING + MENU。
> 3. 氧气=步进资源,无实时倒计时、无中途死亡。软失败=少一潜/少带一人。声呐与语音互斥(sonarGate)。
> 4. 台词 [17-abyss-voice-ids.md](17-abyss-voice-ids.md)(148 句:双性别 127 + NPC 21)。废除双击重听回波:搜索等待再单击=再发脉冲(自然再听)。
> 5. 章程 N2:15–25 分钟、9 抉择(实走 7–9)、4 结局。
---
## 附录 C · 设计单
### 1. 一句话核心动作
**听一段救援,单击继续或发声呐;听到选项时左右滑做决定。**
### 2. 玩家能感知的状态(3 个)
| 状态 | 听感 | Floor |
|---|---|---|
| 听讲 | 调度/船员语音,BGM 整链压低 | SPEAKING |
| 轮到你 | turn → 等待声;搜索等待用深海 amb + 余音 | YOUR_TURN |
| 危险 | danger 签名 + 火花/滑坡(仅 D2/D4) | SPEAKING/BUSY |
氧气档靠跨档句与 breath_loop(low/crit),不单开第四态。
### 3. 新手手势与解锁
| 手势 | 含义 | 解锁 |
|---|---|---|
| 单击 | 继续 / 搜索等待发脉冲 / 跳过当前句 | 阶段 0 |
| 左/右滑 | 抉择 | 阶段 0 |
| 上滑 | 我在哪(潜次 → 已救人数 → 氧档 → 一个动作) | 阶段 1(第一次脉冲成功后) |
| 下滑 | 菜单 | 阶段 2(第一次结局) |
| 双击 | 按单击。阶段 3=重听当前等待点完整句 | 阶段 3 |
| 长按 | 新手 invalid;之后旁白加速 | — |
### 4. 状态 × 手势矩阵(新手期)
| 状态 \ 手势 | 单击 | 左/右滑 | 上滑 | 下滑(未解锁) | 双击 | 连点 |
|---|---|---|---|---|---|---|
| 游戏在说 | 跳句 + ok(p*/锚句/档位句不可跳 → busy) | 抉择点缓存,不盲选;否则 invalid | 打断,我在哪 | invalid | 按单击 | 400ms busy |
| 等你继续 | 继续 | invalid | 我在哪 | invalid | 按单击 | busy |
| 搜索等待 | **脉冲** sonar_ping(silent-ok) | invalid +「点一下,发脉冲。」 | 「第 N 潜。点一下发脉冲。」 | invalid | 按单击=再脉冲 | 冷却/连点 busy |
| 等你选择 | 再听选项 | 抉择 | 「左右滑。」 | invalid | 按单击 | 迷茫 |
| 结算 | 新救援 | invalid | 结局+氧档一句 | 菜单(阶段2) | 按单击 | 第一下 |
| 菜单 | 确认当前项 | 左上一项 / 右下一项 | 重听说明 | 关闭 | 按单击 | busy |
搜索中再点=再听回波,废除「双击=重听上一条回波」。玩家脉冲**先于**向导散句(先掐 gd 再出 ping)。
### 5. 等待点
| id | 期待 | full | short | 静默 | L2 | L3 |
|---|---|---|---|---|---|---|
| intro | tap | 「点一下屏幕。」 | 「点一下。」 | 6s/15s | tap | 替点 |
| ping | tap | 「单击,发一枚脉冲。」 | 「点一下。」 | 8s/18s | tap | 替发脉冲 |
| continue | tap | 「单击,继续。」 | 「单击。」 | 13s/30s | tap | 替继续 |
| choice | L/R | pN | 「左右滑,选。」 | 25s/50s | 左右滑 | 演示 |
| settle | tap | 「单击,重新开始。」 | 「单击。」 | 20s/45s | tap | 提示音 |
COMMS 链末 full 档静默 13s/30s(不对齐旧 25/50)。乱滑不推进节点:迷茫 L1 短句 → L2 只留期待手势 → L3 演示脉冲或选择。
### 6. 首 3 分钟
| 时间 | 播 | 期待 | 没做 | 做错 |
|---|---|---|---|---|
| 0~3s | 甲板风浪 →「点一下屏幕。」 | 单击 | 「点一下。」 | 滑动 invalid |
| 3~8s | ok → 极短目标句 → 下潜声 →「点一下,发脉冲。」 | 单击脉冲 | 「点一下。」 | 滑动 invalid |
| 8~10s | sonar_ping → 静默一拍 → echo_metal →「金属回波,钢板。」 | —(第一次成功) | | |
| 10~20s | turn 教学 → 接通小舟 | 单击继续 | 三档 | inv_nosel |
| 20~60s | p1 听暗号/直接上 | 左右滑 | 复述 p1 | 不盲选 |
| ≈60s | 解锁上滑 | 上滑 | 「向上滑。」 | |
| 60~180s | p2 → 上浮扣 3 格 → 档位句 | 单击/滑 | 接管 | 归因真话 |
### 7. 失败表
| 类型 | 判定 | 归因 | 回到 | 新手期 |
|---|---|---|---|---|
| 搜索滑动 | DIVE 等待滑 | 「点一下,发脉冲。」 | 原地 | 无 |
| 非抉择滑动 | | 「现在不用选。」 | 原地 | 无 |
| 氧气门取消第四潜 | SURFACE(3) oxy≤2 | 取消链指向实际花气的左选择 | 签收 p9 | 已救者不失去 |
| 干涸 | mid-dive floor 0 | dry_b 指向最后那个左选择 | 上浮结算 | 人已上吊索仍救出 |
| 迷茫 | 信号≥2 | L1–L3 | 原地 | 无 |
### 8. 台词类别
- `critical`:sys_first_tap;dv1_teach「点一下,发脉冲」
- `content`:b_*、dv*、船员对白、p1–p9、e*、ep_*、dv4_dual、oxy_*(水面 crit 用 oxy_crit_deck「一潜都下不去了。」)
- `hint`:gd_ping1/2、prog_dN、prog_savedN、oxy 档、sys_continue_ask
- `feedback`:inv_*、dry_b、gao_final 留别句
- 停用:任何「双击重听回波」句
148 句(含 `_k` 11 对);音频 127×2+21=275 条 ×2 格式。
### 9. 断点复述
保存:每潜进入、抉择后、SURFACE/ENDING、菜单保存。回来 sys_continue_ask;单击重播当前节点(恢复首句锁)。上滑:第 N 潜。已救 K 人。氧档。点一下或左右滑。
### 10. 测试记录
`web/abyss/test/playtest.mjs`。改:双击不重听回波;菜单左右+单击确认;首次脉冲 ≤10s;回波与 voice 零重叠仍失败即不通过。真人待测。
---
## 1. 概述
深潜救援员,声呐里是「海燕号」。氧气在倒数,但全是事件点扣格:无实时倒计时、无死亡。最优省气路径全员生还。与 radio 同骨架,压力源=氧气稀缺(宽限化)。
## 2. 状态机
| 状态 | 内容 | BGM |
|---|---|---|
| INTRO | 极短甲板口播 | deck |
| DIVE | 下潜 auto → 搜索单击脉冲 → 回波+接通 | dive |
| COMMS | 对白+抉择 | comms |
| SURFACE | 扣账+档位+补给(D2),auto | deck |
| ENDING | 结局+回响 | ending |
| MENU | 覆盖 | deck 低响 |
```
INTRO ──单击──> DIVE(1) ──脉冲找到──> COMMS ──> SURFACE ──> DIVE(2)…
SURFACE(3) 氧气门:oxy≥4 双载 / =3 单载 / ≤2 取消链
──> ◆p9 ──> ENDING
```
取消链/干涸链/结局链/签收链入口 800ms 手势死窗。档位句纳入尾句保护(不可单击掐)。非 auto 叙事尾句**首播**保护,复播可掐。
## 3. 抉择树
D1 找船·小舟:教学脉冲 → p1 听暗号(−1, knowsPipe) / 直接上 → p2 等日志(−1, hasLog) / 不等 → 扣 3。
D2 机舱·老白:p3 慢撬(knowsPipe?0:−1) / 快切(危机拍火花)→ p4 关阀门(−2, valve) / 走 → 应急瓶 +3(全局一次)。
D3 病舱:p5 先陈 / 先郑(stayer)→ p6 留瓶(−2, spareGift) / 约定。
D4:双载 p7 慢浮(−2)/快浮;单载 p7 带船长/带留守;p8 说出来(gaoPeace)/不问。
p9 取钟(需 oxy≥1)/ 进医疗舱;oxy<1 封锁左路(g9_dry,不摆假选项)。
| 结局 | 条件 |
|---|---|
| e1 海燕归钟 | saved=5 且 p9 左 |
| e2 满载的黎明 | saved=5 且 p9 右 |
| e3 最后一潜 | saved<5 且 p9 左 |
| e4 按规程上浮 | saved<5 且 p9 右 |
跨潜仅标量:oxy、saved×5、stayer、flag×6。约 70 节点。
## 4. 氧气经济
初值 12;D2 后 +3,总预算 15。每潜起扣 3。抉择耗气见上。mid-dive 负数 floor 0。档位=floor(oxy/3):full≥9 / ok 6–8 / low 3–5 / crit 0–2。水面 crit 用 oxy_crit_deck。双载 D4 口播 dv4_dual「这趟往返,扣四格气。」
SURFACE(3) 时 oxy=6−lefts → 双载 lefts≤2;单载=3;取消≥4。教学潜与机舱潜预算上永不卡死。
船员:小舟/老白恒活;陈/郑/船长按 p5/p6/氧气门/p7。好感只影响 ep 选播。
## 5. 声呐双通道
信息类回波与 voice **零重叠**(sonarGate)。搜索段:脉冲 → 静默一拍 → 回波 → 解读。回波时长:金属 3300 / 敲管 3500 / 呻吟 5000ms。玩家脉冲抢先于向导散句。语音在播时远程脉冲垫 −6dB。并发前景 ≤2。
教学承诺:金属回波=船身(凡「船身」节点必播 echo_metal*);单击=脉冲;四潜=基础 3×4=12;氧气门=oxy<3 取消;每潜扣 3;敲管=老白;补给恰 +3 一次。
## 6. 音频资产
BGM:deck / dive / comms / ending。SFX:sonar_ping、echo_metal_l/r、echo_debris、echo_groan、pipe_knock、link_beep、static_burst、amb_deep、amb_deck、breath_loop、spark_flash、valve_close、landslide、surf_splash、ascent_chime、bell_toll。
Voice:潜航员 30 + 调度 97(双性别)+ 船员 21 平铺滤波。D4 danger 震间隔 1100ms。crit 档 warning 震按「进入该档」去重。
## 7. 存档
```json
{
"phase": "COMMS", "node": "bai_b", "dive": 2, "oxy": 6,
"saved": { "zhou": 1, "bai": 0, "chen": 0, "zheng": 0, "gao": 0 },
"flags": { "knowsPipe": true }
}
```
summary:`第N潜·<舱段> · 氧气K格 · 结局X/4`。
## 8. playtest 指针
四结局 + 氧气逐点、sonarGate 零重叠、教学承诺、结算死窗、pendingChoice:保留。删除双击回波重听与菜单双击确认。乱按 96s 必须被迷茫/三档救出,不得静默死局。