9.3 KiB
17 · 《深海回音》(abyss) — 深海救援叙事 RPG
给开发的实现要点摘要
- 交互权威:26 号手册。叙事范式对齐 26-apply-storyline.md。搜索等待的单击=发声呐脉冲,等同宪法「检查」,不是四向滑动玩法,帮助用上滑。
- 骨架同 radio:节点链 + seqToken + pendingChoice。宏状态 INTRO / DIVE / COMMS / SURFACE / ENDING + MENU。
- 氧气=步进资源,无实时倒计时、无中途死亡。软失败=少一潜/少带一人。声呐与语音互斥(sonarGate)。
- 台词 17-abyss-voice-ids.md(148 句:双性别 127 + NPC 21)。废除双击重听回波:搜索等待再单击=再发脉冲(自然再听)。
- 章程 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_askfeedback: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. 存档
{
"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 必须被迷茫/三档救出,不得静默死局。