Files
SoundGame/docs/design/17-abyss-voice-ids.md
T
xsl ee5d4d2544 feat(playbook): 26 号交互手册全量落地——剩余 12 款深度重构 + 语音全量重制
storyline/escape/simon 首批之后的推广收官:15 款全部按 26 号模式运行
(发言权/回执/三档提示/迷茫接管/手势阶梯/断点复述),旧「双击重听/格挡/
菜单确认」等反模式口径全线废除,开场零规则念白(首句即动手)。

游戏层(12 款):rpg(格挡=前摇窗口内再单击)/ rhythm / space / radio /
dungeon / abyss / detective / cipher / teahouse / keeper / bridge /
hunt(联机切片):
- 每款 game.js 接引擎六模块 + makeInputPipeline(doubleTapWindow:0);
  四向玩法类 swipeCore + 长按帮助;双击是玩法的(space 护盾 / hunt
  旋风斩)按手势阶梯阶段 3 分档恢复双击窗口(doubletapCore)
- 每款 playtest 重写:玩法断言 + §6.2 乱点机器人(无声操作 / 被动
  原句重复 / 打断失败 = 0);15 款 3900+ 断言全绿
- 12 份 docs/design/26-apply-*.md 施工单 + tools/voice_lines_26/
  台词清单 + voice-ids 文档同步 + 转写会话剧本按新口径重写

引擎层(web/engine/,6 处修复):pipeline 增 doubletapCore;novice
teachLine 带 voice/ 前缀(此前教学句被静默丢弃);confusion.record
前置到新手门(锁定手势的乱点也计信号);InvalidHints 播完恢复解释前
状态(根治孤儿 BUSY);WaitPoint takeover(2) 台账去重;台账只在
speak 真正播出时登记。遗留引擎债登记 roadmap §3.1。

语音资产:台词表合并(新增 ~250 系统句 / 改 ~50 旧口径 / 删 ~110
废止句;合并器 tools/merge_voice_lines_26.py + 引用校验器
tools/validate_voice_refs.py),GPU 重录 1536 wav → 4204 ogg/m4a
落地,check_all_assets + validate_voice_refs 双绿;键盘变体同步扩表。

大厅/文档:15 款统一新交互口径(「新交互」徽标退役);README /
HANDOVER / rpg README 旧口径修正;roadmap P0-P3 置完成。
2026-10-02 12:33:20 +08:00

340 lines
34 KiB
Markdown
Raw 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.
# 17b · 《深海回音》(abyss) 语音台词表(voice ids,录音依据)
> **26 号对齐(资产清单,不是交互宪法)**
> - 交互与新手手势以 [26-audio-interaction-playbook.md](26-audio-interaction-playbook.md) 和对应游戏正文为准。
> - 本表仍是 TTS id 事实源的**登记副本**(生成以 `tools/gen_voice_dual.py` 为准)。含「双击重听 / 双击使用 / 双击格挡 / 单击循环菜单」的句子 **停用或按游戏正文重录**。
> - 写作:指令 ≤12 字,短句档 ≤6 字,叙事 ≤25 字;每句标 `critical` / `content` / `hint` / `feedback`。游戏主动提示不得原样重复;重听前加「再说一遍:」。
> - 键盘变体:新手期回车当空格(单击)。删除「按回车=重听」类旧口径,或仅在阶段 3 解锁双击后启用。
> - 共用新句见 [14-guide-layer.md](14-guide-layer.md) §7(`sys_first_tap` 等)。各游戏 `_full` / `_short` 在游戏正文设计单里点名,补进本表后再进生成脚本。
> **给音频总监的录制说明**
> - **双性别组**(潜航员 DIVER + 调度/系统 DECK,126 句):落 `web/abyss/audio/voice/female|male/<id>.{ogg,m4a}`,两性别 id 集合完全一致(含全部 `_k` 变体)。
> - **DIVER(潜航员=玩家)**:female = `Serena`,instruct 常量 `低沉冷静的年轻女声,深潜救援员,干练沉着,水下通讯的轻微气声`;male = `Uncle_Fu`,instruct 常量 `低沉冷静的男声,深潜救援员,干练沉着,水下通讯的轻微气声`。
> - **DECK(母船调度/系统音/向导 gd_*)**:female = `Vivian`,instruct 常量 `清晰稳定的女声,母船潜水调度员,专业干脆,隔着耳机下达指令`;male = `Dylan`,instruct 常量 `清晰稳定的男声,母船潜水调度员,专业干脆,隔着耳机下达指令`。
> - 区分度设计:玩家(头戴耳机的自语音)与调度(母船通讯声)共用 speaker 池但**不同 speaker 配对**——female 侧玩家 Serena / 调度 Vivian、male 侧玩家 Uncle_Fu / 调度 Dylan,同场景高频对话的两者永不同 speaker。
> - **NPC 平铺组**(21 句):单音色、**不做双性别**,平铺落 `web/abyss/audio/voice/<id>.{ogg,m4a}`(引擎平铺回退命中),转码时按 §电台滤波 加带通。船员共 4 人(≤5 约束),同一角色 speaker+instruct 恒定,区分度风险逐个标注:
> | 角色 | speaker | instruct 常量 | 区分度风险 |
> |---|---|---|---|
> | 小舟(23 岁声呐兵,女) | `Serena` | `年轻女声,二十三岁声呐兵,缺氧后发虚,强撑着干脆` | **中**:与 female 玩家同 speaker,靠年龄感 instruct + 电台滤波(420-3200Hz)区分,请试听确认 |
> | 老白(50 岁轮机长,男) | `Uncle_Fu` | `沙哑爽朗的中年男声,五十岁轮机长,忍着伤痛开玩笑` | **中**:与 male 玩家同 speaker,靠沙哑 instruct + 滤波(350-3000Hz)区分,请试听确认 |
> | 陈医官(45 岁船医,女) | `Vivian` | `平静沙哑的中年女声,四十五岁船医,专业镇定,语气温和` | **低**:与 female 调度同 speaker 不同 instruct + 滤波(400-3100Hz),且从不同场 |
> | 高船长(58 岁船长,男) | `Eric` | `低沉苍老的男声,五十八岁船长,疲惫克制,有老舵手的威严` | **低**:male 侧唯一 Eric + 滤波(300-2800Hz) |
> - **电台滤波(转码侧)**:NPC 全部走带通+轻压缩(参数见上表,详表见 17-abyss.md §5.3/§6.1);DIVER/DECK 不滤波(母船级音质)——「电台里的人」与「耳机里的人」靠音质差立住。试听不可读的句子回退未滤波原声(宁窄勿脏)。
> - **称呼规则**:船员对玩家一律称「救援员/你」,**全表禁用**「姑娘/小哥/大哥/大姐/叔叔」类性别化称呼(玩家性别随用户设置变化)。
> - **键盘变体(PC 键盘通道,P1 机制)**:带 `_k` 后缀的 id 为键盘措辞版(「按空格」「回车」「左箭头/右箭头/上箭头/下箭头」),与触屏版**成对生成、成对落盘**(`check_all_assets` 校验 `_k` 配对);运行时由 `gesture.inputMode()` 选择:`key` → `<id>_k`,`touch` → `<id>`,`auto` 跟随最近使用通道,`_k` 缺失回退无后缀版。变体共 **11 对**,全部集中在下方 §G0 操作提示句区与 §D1 首个抉择(dv1_teach / p1),以粗体标注。
> - **数字规避**:潜次/氧气全部分档整句(prog_d1..d4、oxy_full/ok/low/crit、oxy_gain);句内数字(三千米/三格/四潜/十二小时/四小时/一小时/三页)写死在整句里,禁止运行时拼接。
> - **禁语速词**:instruct 不含任何语速描述(引擎 SoundTouch 变速);NPC 句靠短句+逗号停顿实现「水下慢半拍」听感。
> - 管线:`tools/gen_voice_dual.py` 照录(SPEAKERS 表需新增 abyss 行);多音字自查见文末注记。
## G0 组 · 系统/向导/状态(DECK 双性别 ×37)
### G0.a 操作提示句(含键盘变体,9 对 18 句——键盘玩家听这一区就够)
| id | 台词全文 | 触发 |
|---|---|---|
| `gd_brief` | 单击继续简报。要选择时,向左或向右滑。 | 开场链最前(full 档,F8 先例) |
| **`gd_brief_k`** | 按空格继续简报。要选择时,用左右方向键。 | 同上(inputMode=key) |
| `gd_continue` | 单击屏幕,继续。 | 叙事链末看门狗第 1 级(full 25s / standard 13s) |
| **`gd_continue_k`** | 按空格,继续。 | 同上(key) |
| `gd_again` | 还在吗?单击继续。 | 看门狗第 2 级(50s / 30s),新句不逐字重播 |
| **`gd_again_k`** | 还在吗?按空格继续。 | 同上(key) |
| `gd_ping1` | 声呐待命。单击,发脉冲。 | 搜索等待静默 10s(第 1 级) |
| **`gd_ping1_k`** | 声呐待命。按空格,发脉冲。 | 同上(key) |
| `gd_ping2` | 回波不会自己来。单击。 | 搜索等待静默 25s(第 2 级,**必须与第 1 级不同句**) |
| **`gd_ping2_k`** | 回波不会自己来。按空格。 | 同上(key) |
| `sys_help` | 单击继续,双击重新听。上滑听状态,下滑开菜单。选择时,左右滑。 | 上滑帮助 / 菜单内上滑 |
| **`sys_help_k`** | 空格继续,回车重新听。上箭头听状态,下箭头开菜单。选择时,左右箭头。 | 同上(key) |
| `sys_menu` | 菜单。单击切换选项,双击确认。 | 下滑呼出模态菜单 |
| **`sys_menu_k`** | 菜单。空格切换选项,回车确认。 | 同上(key) |
| `sys_skip` | 听过的句子再播时,单击就能跳过。 | 开场每局一次(skip_hint 先例;R2-F6 改词,见文末修订记录) |
| **`sys_skip_k`** | 听过的句子再播时,按空格跳过。 | 同上(key) |
| `sys_continue_ask` | 检测到你的下潜记录。单击继续上次,右滑开始新救援。 | 有存档进游戏 |
| **`sys_continue_ask_k`** | 检测到你的下潜记录。空格继续上次,右箭头开始新救援。 | 同上(key) |
### G0.b 状态/系统句(无手势词,无变体)
| id | 台词全文 | 触发 |
|---|---|---|
| `gd_invalid` | 这个手势,水里用不上。 | 无效手势(error 震,idle-only,同局限次) |
| `gd_prog1` | 滑动在这里用不上。想想调度刚说的话。 | 无进展轨 60s(第 1 级,乱按抢救) |
| `gd_prog2` | 别乱。停一下,想想下一步。 | 无进展轨 120s(第 2 级) |
| `sys_menu_resume` | 回到水下。 | 菜单项 |
| `sys_menu_restart` | 重新开始这次救援。 | 菜单项 |
| `sys_menu_lobby` | 保存并回大厅。 | 菜单项(确认后跳转前播) |
| `sys_settings` | 音色、语速、背景音乐,请回大厅修改。 | 菜单内设置提示 |
| `sys_new_dive` | 新的一次下潜,开始了。 | 新救援开始 / 菜单重开 |
| `prog_d1` | 现在是第一次下潜。 | 上滑状态链(按当前潜次选播) |
| `prog_d2` | 现在是第二次下潜。 | 同上 |
| `prog_d3` | 现在是第三次下潜。 | 同上 |
| `prog_d4` | 现在是最后一次下潜。 | 同上 |
| `prog_saved1` | 已经救上一个人。 | 上滑状态链·已救人数(R2-F10,saved=1) |
| `prog_saved2` | 已经救上两个人。 | 同上(saved=2) |
| `prog_saved3` | 已经救上三个人。 | 同上(saved=3) |
| `prog_saved4` | 已经救上四个人。 | 同上(saved=4) |
| `prog_saved5` | 五个人都在甲板上了。 | 同上(saved=5;saved=0 不播人数句) |
| `oxy_full` | 气瓶还足,救得动。 | 氧气 ≥9(跨档时挂上浮结算链;上滑状态链) |
| `oxy_ok` | 氧气还够两潜。 | 氧气 6-8(floor(oxy/3)=2,句义逐格为真) |
| `oxy_low` | 氧气告急,只够最后一潜。 | 氧气 3-5;此后垫 sfx/breath_loop |
| `oxy_crit` | 氧气见底,必须上浮。 | 氧气 0-2·**水下**(DIVE/COMMS);各播报位附 warning 震 |
| `oxy_crit_deck` | 氧气见底,一潜都下不去了。 | 氧气 0-2·**水面**(SURFACE/ENDING;R2-F5,句义=floor(0..2/3)=0 潜,逐格为真) |
| `oxy_gain` | 应急瓶接上了,多三格。 | D2 上浮后补给(全局唯一一次) |
| `dry_a` | 气瓶用干了。立刻上浮。 | mid-dive 氧气 floor 至 0,干涸链首句 |
| `dry_b` | 气花在了人身上。人,都上来了。 | 干涸链归因句(真话:气耗在走心选择上) |
## G1 组 · 开场(双性别 ×4)
| id | 声部 | 台词全文 | 触发 |
|---|---|---|---|
| `b_open` | 潜航员 | 风停了。我站在问海号甲板上,下面三千米,是海燕号。 | INTRO(配 sfx/amb_deck) |
| `b_rule` | 调度 | 规矩就一条:气不够一潜,人就必须上浮。 | INTRO(一句规矩,P4;与取消门一致) |
| `b_goal` | 调度 | 海燕号,五个人。你的双瓶,够下四潜。 | INTRO(氧气预算承诺) |
| `b_go` | 调度 | 第一潜,找船。耳朵交给声呐。 | INTRO,随后自动下潜 |
## D1 组 · 第一潜·找船·小舟(教学潜)(双性别 13 + 小舟平铺 5 = 18)
| id | 声部 | 台词全文 | 触发 |
|---|---|---|---|
| `dv1_down` | 调度 | 下潜开始。水会越来越黑,声音会越来越多。 | 下潜链(垫 sfx/amb_deep) |
| `dv1_teach` | 调度 | 到深度了。声呐静了。单击,发一枚脉冲。 | 搜索等待武装(教「单击=脉冲」,配 turn cue) |
| **`dv1_teach_k`** | 调度 | 到深度了。声呐静了。按空格,发一枚脉冲。 | 同上(key) |
| `dv1_metal` | 调度 | 金属回波,钢板。听见这个,就是海燕号的船身。 | 首枚回波解读(**教「金属回波=钢板」,配 echo_metal_l**) |
| `dv1_link` | 调度 | 回波后面有杂音,是电台!接通了。 | 通讯接通(配 link_beep) |
| `z1_a` | 小舟 | ……有人吗?声呐兵,小舟。我们还活着,全艇五个人。 | 通话主干(垫 sfx/static_burst) |
| `z1_b` | 小舟 | 轮机长老白困在机舱,陈医官和小郑在病舱,船长在指挥舱。 | 通话主干 |
| `z1_knock` | 小舟 | 等等,你听。管子里,有人在敲。 | 线索音引入(**配 sfx/pipe_knock 两遍**) |
| `p1` | 调度 | 管路在响。向左滑,停下来听敲管的暗号。向右滑,先带小舟上浮。 | 抉择提示(播完即可选) |
| **`p1_k`** | 调度 | 管路在响。左箭头,停下来听敲管的暗号。右箭头,先带小舟上浮。 | 同上(key;首个抉择的键位绑定) |
| `d1_listen` | 潜航员 | 都别出声。管子那头,敲得很稳。 | p1 左(knowsPipe=true,-1 气) |
| `d1_code` | 调度 | 是老白的暗号:腿被压住,先泄压,再撬。记住这个敲法。 | p1 左·收(情报句,D2 兑现) |
| `d1_up` | 潜航员 | 小舟,抓住我的肩锁。我们上。 | p1 右 |
| `z1_bye` | 小舟 | 好。上面……是不是天亮了? | p1 右·反应 |
| `p2` | 调度 | 小舟想回去拿声呐日志。向左滑,等她。向右滑,直接上浮。 | 抉择提示 |
| `d1_log` | 小舟 | 日志里有失事前,最后一段录音。给你,替我们收好。 | p2 左(hasLog=true,-1 气) |
| `d1_nolog` | 潜航员 | 日志可以补,人不能等。走了。 | p2 右 |
| `d1_surf` | 调度 | 小舟出水,第一潜收工。往返,扣三格气。 | 上浮结算(配 surf_splash+ascent_chime;教「每潜扣 3」) |
## D2 组 · 第二潜·机舱·老白(双性别 14 + 老白平铺 4 = 18)
| id | 声部 | 台词全文 | 触发 |
|---|---|---|---|
| `dv2_down` | 调度 | 第二潜,机舱。顺着敲管的声音走。 | 下潜链 |
| `dv2_found` | 调度 | 碎石回波后面,敲管声密了。机舱到了。 | 搜索解读(配 echo_debris+pipe_knock) |
| `bai_a` | 老白 | 哈哈,救援的?我这腿,跟冷却管缠上了。 | 通话主干 |
| `bai_b` | 老白 | 艇上的药板烧了。病舱那两个,比我悬。 | 通话主干(埋 D3 险) |
| `p3` | 调度 | 钢梁压着腿。向左滑,泄压后慢慢撬。向右滑,切割枪,快切。 | 抉择提示 |
| `d2_pry` | 潜航员 | 老白,忍住。先泄压,再撬。 | p3 左 |
| `d2_pry_ok` | 调度 | 暗号没白听。管子一松,钢梁抬起来了。 | p3 左·收(**条件 knowsPipe=true,-0 气**) |
| `d2_pry_slow` | 调度 | 摸着找泄压阀,多费了一格气。腿,出来了。 | p3 左·收(条件 knowsPipe=false,-1 气) |
| `d2_cut` | 潜航员 | 切割枪。老白,闭眼,憋气。 | p3 右 |
| `d2_flash` | 调度 | 火花炸了一下,虚惊。老白咳着,腿抽出来了。 | p3 右·收(**危机拍:danger 签名+spark_flash 前置 2s**) |
| `bai_out` | 老白 | 腿还在!我的腿还在!走,我给你带路。 | 两路汇合(正反馈) |
| `p4` | 调度 | 老白要去关电池舱阀门。向左滑,陪他去。向右滑,直接上浮。 | 抉择提示 |
| `d2_valve` | 潜航员 | 电池舱我陪你去。这片海不能脏。 | p4 左(valve=true,-2 气;配 valve_close) |
| `d2_valve_e` | 调度 | 阀门关死了。两格气,换一片干净海。 | p4 左·收(账目真实:明说两格) |
| `bai_thanks` | 老白 | 这片海养着一村人。这份情,我记一辈子。 | p4 左·反应 |
| `d2_leave` | 潜航员 | 阀门交给母船。你先上,腿要紧。 | p4 右 |
| `d2_surf` | 调度 | 老白出水。他一直扒着舱门,往水里看。 | 上浮结算 |
| `d2_supply` | 调度 | 潜友阿凯捎来应急瓶。甲板上,粥给你温着。 | 补给剧情(随后 oxy_gain +3,全局唯一) |
## D3 组 · 第三潜·病舱·陈医官/小郑(双性别 12 + 陈医官平铺 4 = 16)
> 小郑为无台词角色(重伤固定于吊床,radio 老主播「带子里只有电流声」先例);其状态由调度句 d3_chen_e/d3_stay_lost 承载。
| id | 声部 | 台词全文 | 触发 |
|---|---|---|---|
| `dv3_down` | 调度 | 第三潜,病舱。海燕号在倾斜,别恋战。 | 下潜链 |
| `dv3_groan` | 调度 | 回波发闷。船体在呻吟,它撑不久了。 | 搜索解读(**配 echo_groan,D4 险预告**) |
| `chen_a` | 陈医官 | 你来了。小郑股骨断了,我给他固定好了。 | 通话主干 |
| `chen_b` | 陈医官 | 救援钟一次带一个。我是医生,我最后走。 | 通话主干(抉择铺垫) |
| `p5` | 调度 | 病舱一次只能走一个。向左滑,先带陈医官。向右滑,先带小郑。 | 抉择提示(无气差的双义抉择) |
| `d3_chen` | 潜航员 | 陈医官,你的手在抖。这次,听我的。 | p5 左(陈医官上,stayer=zheng) |
| `chen_up` | 陈医官 | ……好。小郑,等我,上面给你热粥。 | p5 左·反应 |
| `d3_chen_e` | 调度 | 陈医官出水。小郑固定在吊床上,呼吸平稳。 | p5 左·收 |
| `d3_zheng` | 潜航员 | 小郑先走。陈医官,下一潜,就是你的。 | p5 右(小郑上,stayer=chen) |
| `d3_zheng_e` | 调度 | 小郑吊上去了。他一路,都没敢出声。 | p5 右·收 |
| `chen_stay` | 陈医官 | 去吧。我守着灯,灯不灭,人就不散。 | p5 右·留守宣言 |
| `p6` | 调度 | 留守的人要空气。向左滑,留下你的备用瓶。向右滑,约定下一潜来接。 | 抉择提示 |
| `d3_spare` | 潜航员 | 备用瓶留下。灯,给我亮着。 | p6 左(spareGift=true,-2 气,可触发干涸链) |
| `d3_spare_e` | 调度 | 备用瓶挂上了,能多撑十二小时。 | p6 左·收(账目:时间量而非气格) |
| `d3_promise` | 潜航员 | 四小时内,我下来。等我。 | p6 右 |
| `d3_surf` | 调度 | 病舱的人出水。海燕号的呻吟,隔着水都听得见。 | 上浮结算(随后走氧气门) |
## D4 组 · 第四潜·指挥舱·高船长(高潮)(双性别 18 + 高船长 7 + 陈医官 1 = 26)
| id | 声部 | 台词全文 | 触发 |
|---|---|---|---|
| `dv4_none` | 调度 | 气不够一潜了。第四潜,取消。 | **氧气门·取消形态**(oxy≤2;800ms 手势死窗) |
| `gao_final` | 高船长 | 别下来。带他们回家,就算救完了。海燕号,通话结束。 | 取消链·船长的最后通讯(随后直达 ◆p9) |
| `dv4_down` | 调度 | 最后一潜,指挥舱。海燕号,撑不住了。 | 下潜链(双载/单载共用) |
| `dv4_dual` | 调度 | 两个人下同一潜。这趟往返,扣四格气。 | 下潜链·**仅双载形态**追加(R2-F4:D4 双载 3+1 扣账口播,不再无声扣款) |
| `dv4_slide` | 调度 | 它滑了!抓稳索缆,指挥舱里还有人! | 搜索危机拍(**danger 签名+landslide 前置 2s 渐强+danger 震**) |
| `gao_a` | 高船长 | 救援员。我船上,还剩两个活人。 | 通话主干 |
| `gao_b` | 高船长 | 都带走,我最后上。这是船长的规矩。 | 通话主干 |
| `p7` | 调度 | 双人上浮。向左滑,逐站减压慢慢浮。向右滑,违规直浮,搏一把。 | 抉择提示(**双载形态**:oxy≥4) |
| `p7_chen` | 调度 | 气只够带一个。向左滑,带船长。向右滑,带陈医官。 | 抉择提示(**单载形态·留守=陈医官**:oxy=3) |
| `p7_zheng` | 调度 | 气只够带一个。向左滑,带船长。向右滑,带小郑。 | 抉择提示(单载形态·留守=小郑) |
| `d4_slow` | 潜航员 | 逐站停,慢慢浮。规矩不能破。 | p7 左·双载(-2 气) |
| `d4_slow_e` | 调度 | 减压站一个个过。气瓶在跳,人稳着。 | p7 左·双载·收 |
| `d4_fast` | 潜航员 | 来不及了。直浮! | p7 右·双载 |
| `d4_fast_e` | 调度 | 违规快浮。医疗舱的灯,先给你们开好。 | p7 右·双载·收(回响伏笔) |
| `d4_pick_gao` | 潜航员 | 船长,抓住我。海燕号的事,上面再说。 | p7 左·单载(带船长) |
| `d4_pick_chen` | 潜航员 | 陈医官,轮到你了。抓住,上浮。 | p7 右·单载·留守=陈医官 |
| `d4_pick_zheng` | 潜航员 | 小郑,吊床连人一起。走了。 | p7 右·单载·留守=小郑 |
| `chen_last` | 陈医官 | 去吧。灯我留着,人齐了就熄。 | 单载·带走船长时留守者=陈医官的留别 |
| `d4_stay_lost` | 调度 | 另一位,留在了倾斜的船舱。航标灯,替所有人亮着。 | 单载·带走船长时留守者=小郑的留别(克制措辞) |
| `gao_last` | 高船长 | 航标灯替我留着。就说,船长睡了。 | 单载·带走留守者时船长的留别(p8 跳过,直达上浮) |
| `gao_c` | 高船长 | 三年前……没什么。走吧,别耽误。 | 心结引入(**条件 hasLog=false**) |
| `gao_confess` | 高船长 | 日志你拿了?里面写着。是我下令,多采了一小时。 | 心结引入(**条件 hasLog=true**,替代 gao_c) |
| `p8` | 调度 | 船长的话没说完。向左滑,把你听到的说出来。向右滑,什么都不问,拉他上浮。 | 抉择提示(船长在乘时可 达,30 字全表最长句) |
| `d4_talk` | 潜航员 | 日志我听完了。海燕号为什么沉,我会带上去。走吧。 | p8 左(gaoPeace=true) |
| `gao_peace` | 高船长 | ……好。这一次,听救援员的。 | p8 左·反应 |
| `d4_silent` | 潜航员 | 纪律就是纪律。抓住,上浮。 | p8 右 |
| `d4_surf` | 调度 | 最后一潜收工。问海号的甲板,从没这么亮过。 | 上浮结算 |
## F9 组 · 签收抉择(心结)(双性别 ×7)
| id | 声部 | 台词全文 | 触发 |
|---|---|---|---|
| `g9_in` | 调度 | 医疗舱躺满了。你的气瓶剩多少,你比我清楚。 | 收队签收引入(SURFACE(4)/取消链之后) |
| `g9_knot` | 潜航员 | 三年前,也是这条沟。我按时上浮了,搭档没有。 | 心结自述(玩家背景) |
| `p9` | 调度 | 海燕号的船钟,还挂在沉船上。向左滑,用最后的气,下去取。向右滑,进医疗舱。 | 抉择提示(左路需 oxy≥1) |
| `g9_dry` | 调度 | 一格气都不剩了。能带的,你都带回来了。 | **p9 左路封锁句**(oxy<1:播出后自动走右,不摆假选项) |
| `d9_bell` | 潜航员 | 最后一潜。不为救人,为个交代。 | p9 左(bell=true;配 bell_toll 后接 d9_bello) |
| `d9_bello` | 调度 | 船钟出水。海燕号的声音,回家了。 | p9 左·收 |
| `d9_rest` | 潜航员 | 交代,留给明天的人。我去医疗舱。 | p9 右 |
## EP 组 · 结局与尾声回响(双性别 22;结局 8 + 回响 14)
| id | 声部 | 台词全文 | 触发 |
|---|---|---|---|
| `e1_a` | 潜航员 | 五个人都在甲板上。船钟的第一声,是替这条沟敲的。 | 结局 e1(saved=5 且 p9=左)主句 |
| `e1_b` | 潜航员 | 三年了,我终于敢往下看。明天,想再潜一次。 | e1 收(钩子) |
| `e2_a` | 潜航员 | 五个人都救上来了。船钟,留在了沟底。 | 结局 e2(saved=5 且 p9=右)主句 |
| `e2_b` | 潜航员 | 没人怪我。可半夜醒来,总听见钟在响。 | e2 收(钩子) |
| `e3_a` | 潜航员 | 没能都带回来。可我到底下去了,敲响了那口钟。 | 结局 e3(saved<5 且 p9=左)主句 |
| `e3_b` | 潜航员 | 钟声替他们,在沟底响了一声。这样,也好。 | e3 收(钩子) |
| `e4_a` | 潜航员 | 我按规矩上浮了。规矩里,没写怎么难过。 | 结局 e4(saved<5 且 p9=右)主句 |
| `e4_b` | 潜航员 | 沟底很安静。安静得,像三年前那天。 | e4 收(钩子;心结回环) |
| `ep_lead` | 调度 | 收队了。调度台给你记一笔——他们,后来怎样了。 | 结局链后尾声引入 |
| `ep_zhou_ok` | 调度 | 小舟:归队报告打了三页。她说,声音都记得。 | 尾声(bond_zhou=1:p1 左或 p2 左) |
| `ep_zhou_no` | 调度 | 小舟:声呐日志没了。她凭记忆,重新描了一遍海图。 | 尾声(bond_zhou=0) |
| `ep_bai_ok` | 调度 | 老白:腿保住了。阀门那夜之后,见人就夸你。 | 尾声(bond_bai=1:p3 左或 p4 左) |
| `ep_bai_no` | 调度 | 老白:腿打了钢钉。他说,瘸着也值。 | 尾声(bond_bai=0) |
| `ep_chen_ok` | 调度 | 陈医官:回了医院。诊室里,挂着一盏海底的灯。 | 尾声(陈医官生还) |
| `ep_chen_lost` | 调度 | 陈医官:她守着灯,到最后一小时。灯,还亮着。 | 尾声(陈医官留守未归) |
| `ep_zheng_ok` | 调度 | 小郑:拆了石膏,第一件事,去看海。 | 尾声(小郑生还) |
| `ep_zheng_lost` | 调度 | 小郑:吊床随船,滑进了沟底。他没来得及看日出。 | 尾声(小郑留守未归) |
| `ep_gao_peace` | 调度 | 高船长:退役申请自己写的。第一行写着:数据不如人。 | 尾声(船长生还且 p8 左) |
| `ep_gao_up` | 调度 | 高船长:上了岸,一直没说话。听说,他在学敲管语。 | 尾声(船长生还且 p8 右) |
| `ep_gao_lost` | 调度 | 高船长:随海燕号留在沟底。航标灯,还亮着。 | 尾声(船长未归) |
| `ep_trench_bell` | 调度 | 沟底:船钟挂在问海号桅杆上。风一过,就响一声。 | 尾声(bell=true) |
| `ep_trench_deep` | 调度 | 沟底:很深,很静。海燕号睡在里面,像睡着了。 | 尾声(bell=false) |
---
**合计:155 句**(GPU 预算 ≤170 ✓;R2 修订后)
- 双性别 134 句(DIVER 潜航员 30 + DECK 调度/系统 104,含 `_k` 键盘变体 11)×2 性别 = 268 文件;
- NPC 平铺 21 句(小舟 5 / 老白 4 / 陈医官 5 / 高船长 7)= 21 文件;
- 合计 289 条音频 ×2 格式(ogg+m4a)= **578 文件**。
- 键盘变体 11 对:gd_brief / gd_continue / gd_again / gd_ping1 / gd_ping2 / sys_help / sys_menu / sys_skip / sys_continue_ask / dv1_teach / p1(成对生成,`check_all_assets` 校验 `_k` 配对与双性别集合一致)。
- 每结局专属台词齐备:e1/e2/e3/e4 各 2 句 + 尾声回响 14 句(好感/存活/flag 选播)。
- 每局实走抉择 7-9 个(p7 单载右路跳过 p8;D4 取消路径跳过 p7/p8),抉择提示 p1..p9 共 9 个。
## 多音字 / 发音风险自查注记
| 风险词 | 处理 |
|---|---|
| 重听 | 全表写「重新听」(sys_help / sys_help_k),无「重听」字样;「重写」规避为「日志可以补」(d1_nolog) |
| 壳(ké/qiào) | 全表不用「壳」,写「钢板 / 船身」(dv1_metal) |
| 脏(zāng/zàng) | 「这片海不能脏」(d2_valve)为 zāng 正确常用读法,保留,试听确认 |
| 闷(mēn/mèn) | 「回波发闷」(dv3_groan)为 mèn 常用读法,保留,试听确认 |
| 颤(chàn/zhàn) | 台词侧用「发抖」(d3_chen);instruct 描述不进语音,不受影响 |
| 塞 / 巷 / 挣 / 血 / 露 / 降(jiàng 外义)/ 率 / 传(zhuàn 义) | 全表未使用(「撑住」「股骨断了」替代;下潜 qián 恒用) |
| 教(jiāo/jiào) | 未使用;「船长」zhǎng、「数据」shùjù、「调度」diàodù 为固定词 |
| 了 / 还 / 得 | 常规句式常见读法,逐句人工试听项(d3_zheng_e「都没敢出声」、d1_surf「扣三格气」等) |
| 数字 | 句内数字全部写死(三千米 / 三格 / 四潜 / 两格 / 十二小时 / 四小时 / 一小时 / 三页 / 一盏),序号与档位用分档整句(prog_d1..d4、oxy_*) |
## 台词侧自查
- 单句 ≤40 字:全表最长 = p8 与 p9(各 30 字),次长 sys_help_k(28 字)、p6(27 字)✓;NPC 句平均 ≤20 字(P4 语速感靠短句+逗号,不用 instruct 语速词)✓。
- 船员 ≤4 人、speaker+instruct 恒定、区分度风险逐个标注 ✓(小舟 Serena / 老白 Uncle_Fu / 陈医官 Vivian / 高船长 Eric)。
- 称呼合规:船员对玩家只用「救援员 / 你」,性别化称呼零出现 ✓。
- 每个结局(e1..e4)专属主句+钩子各 2 句齐备,尾声救/未救双线齐备 ✓。
- 归因真话律:负向收尾句(dry_b / gao_final / chen_last / d4_stay_lost / gao_last / ep_*_lost / e4_b)全部指向玩家实际选择或真实处境,无「运气不好」类假归因、无惩罚性措辞 ✓。
- 向导 gd_* 13 句(gd_brief/gd_continue/gd_again/gd_ping1/gd_ping2 各带 _k 变体,gd_invalid/gd_prog1/gd_prog2 无变体)符合 14 号 §6 台词规范(一句一义、无重复句式、单句 ≤18 字)✓。
- 氧气档位句与数值一一对应(oxy_full≥9 / ok=6-8 / low=3-5 / crit=0-2,均按 floor(oxy/3) 可下潜次数措辞),账目真实 ✓。
## R2 修订记录(2026-09-13,依据 research/new8/abyss/round1/synthesis.md)
| # | 改动 | 依据 |
|---|---|---|
| R2-F4 | 新增 `dv4_dual`(双性别,仅双载形态下潜链追加):D4 双载起播 3+1=4 格扣账口播化 | R1 P1 心算账对不上耳朵(无声扣款) |
| R2-F5 | 新增 `oxy_crit_deck` 水面变体;`oxy_crit` 限水下场景 | R1 crit「必须上浮」在甲板播出=错场景措辞(档位表原注「水面=一潜都下不去」义落地) |
| R2-F6 | `sys_skip`/`sys_skip_k` 改词:「听过的句子再播时,单击/按空格就能跳过」——与 G5 复播可即掐(首播保护)机制对齐 | R1 live P1-2:旧词「想跳过这句,单击就行」在 F5 首播保护下名存实亡 |
| R2-F10 | 新增 `prog_saved1..5`(双性别):上滑状态链 G6 顺序改为 潜次→已救人数→氧档→帮助;saved=0 不播 | R1 P3:被打断后要捡回「船上躺着谁」 |
以上四组为新增/改词;其余裁定(148 句中未改词的 146 句原文、触发条件、滤波参数)不变。
## R3 · 26 号深度重构(设计单 26-apply-abyss.md;施工台词清单 `tools/voice_lines_26/abyss.md`)
> 交互权威 26 号手册;玩法正文 = 17-abyss.md 附录 C。本轮开场第一句改 critical 指令
> 「点一下屏幕。」(b_rule / gd_brief 规矩念白废除)、等待点三档提示统一 sys_hint_* /
> 主动重听「再说一遍:」前缀、手势阶梯三阶段教学句、菜单改左右滑换项 + 单击确认
>(00 §5.4)、「双击重听回波」废止(搜索等待再单击=再发脉冲,自然再听)。增量清单
> 原文 = `tools/voice_lines_26/abyss.md`(生成并表时逐字并入 `tools/gen_voice_dual.py`
> ABYSS_DECK_LINES,两表一致铁律)。类别:critical / content / hint / feedback。
> 系统/交互层句子全部走 **DECK 母船调度组**(=系统音,与 radio PROD 组同型)。
**新增(23 句 × 双性别,DECK 组;其中 4 条由引擎播出但资产照落本目录)**:
| id | 台词全文 | 类别 | 触发 |
|---|---|---|---|
| `sys_first_tap` | 点一下屏幕。 | critical | 冷启动第一句(≤3s,不可打断,§4.10) |
| `sys_first_tap_short` | 点一下。 | hint | intro 等待点 `_short` 档 |
| `sys_turn_teach` | 听到这个声音,就是轮到你了。 | content | 「轮到你」交接提示音首现教学(全局一次,原则 2) |
| `sys_hint_ping_full` | 单击,发一枚脉冲。 | hint | 搜索等待 full 档(8s;与 dv1_teach 动作词一致) |
| `sys_hint_ping_short` | 单击。 | hint | 搜索等待 `_short` 档(18s) |
| `sys_hint_continue_full` | 单击,继续。 | hint | continue 等待点 full 档(13s;COMMS 链末复用) |
| `sys_hint_continue_short` | 单击。 | hint | continue/settle 等待点 `_short` 档 |
| `sys_hint_choice_short` | 左右滑,选。 | hint | choice 等待点 `_short` 档(25s 台账降档) |
| `sys_hint_settle_full` | 单击,开始新救援。 | hint | 结算等待点 full 档(20s;结局链听完后的动作句) |
| `sys_only_choice` | 现在,只要左右滑。 | hint | 迷茫 L2 抉择点缩小选择 |
| `sys_demo_continue` | 听我做一次。 | hint | 迷茫 L3 演示前缀(intro/continue) |
| `sys_demo_choice` | 左右滑,都可以。现在你来。 | hint | 迷茫 L3 抉择点演示(不替玩家选) |
| `sys_act_ping` | 点一下,发脉冲。 | feedback | 搜索等待无效滑动首次解释(17 号 §7)+ 上滑状态链动作句 |
| `status_choice` | 正在抉择。左右滑。 | hint | 抉择等待点上滑「我在哪」动作句 |
| `menu_help` | 左右滑换项,点一下确认。 | content | 菜单说明(menu 等待点 full 档 + 菜单内上滑重听) |
| `inv_nosel` | 现在不用选。单击继续。 | feedback | 非抉择点滑动首次解释(原则 7) |
| `inv_up_locked` | 上滑还没解锁。先单击继续。 | feedback | up 未解锁首次解释(阶段 0) |
| `inv_down_locked` | 菜单,玩完一局解锁。单击继续。 | feedback | down 未解锁首次解释(阶段 <2) |
| `sys_menu_restart_confirm` | 再点一下,确认重开。 | feedback | 「重新开始」二次确认(00 §5.4 破坏性操作) |
| `sys_say_again` | 再说一遍: | hint | 主动重听前缀(engine/hints.js 播出,全项目一句) |
| `sys_unlock_up` | 想知道自己在哪,就向上滑。 | content | 阶段 1 教学句(挂第一次脉冲成功后的回波链尾;engine/novice.js teachLine 播出) |
| `sys_unlock_down` | 向下滑,可以打开菜单。 | content | 阶段 2 教学句(挂首局结局链尾;engine/novice.js) |
| `sys_unlock_dt` | 没听清,就双击,再听一遍。 | content | 阶段 3 教学句(第 3 局;双击=重听等待点完整句;engine/novice.js) |
**修改(1 句,id 不变重录)**:`sys_menu`「菜单。左右滑换项,点一下确认。」(原
「菜单。单击切换选项,双击确认。」= 旧菜单口径,00 §5.4 废止;`sys_menu_k` 同步重录
「菜单。左右方向键换项,按空格确认。」)。其余既有句不动(sys_skip / sys_continue_ask /
sys_new_dive / 菜单三项 / gd_invalid / prog_* / oxy_* / dry_* / prog_saved* 与全部剧情句;
dv1_teach「单击,发一枚脉冲」与新 sys_hint_ping_full 动作词一致,不重录)。
**删除(10 句)**:`gd_brief` / `gd_continue` / `gd_again` / `gd_ping1` / `gd_ping2`
(向导层让位三档提示 sys_hint_ping_*/continue_*,原则 7/9)、`gd_prog1` / `gd_prog2`
(迷茫接管 L1 改用等待点 `_short` 档,原则 8 不说教)、`sys_help`(全局帮助溢出废止,
含旧「双击重新听」口径)、`sys_settings`(菜单仅三项,永无播出位)、`b_rule`(开场
规矩念白,§4.10 砍掉;氧气账目契约由档位句与取消链 dv4_none 承载)。上方 G0 / G1 组
表中对应行按本节口径废止;「双击重听回波」无专属台词 id(旧实现复用回波资产),
台词层无删项、代码层已清理。合计 123 − 10 + 23 = **136 句**(双性别)+ NPC 21。
**键盘变体**:新增 20 条(sys_first_tap / sys_first_tap_short / sys_hint_ping_full /
sys_hint_ping_short / sys_hint_continue_full / sys_hint_continue_short /
sys_hint_choice_short / sys_hint_settle_full / sys_only_choice / sys_demo_choice /
sys_act_ping / status_choice / menu_help / inv_nosel / inv_up_locked / inv_down_locked /
sys_menu_restart_confirm / sys_unlock_up / sys_unlock_down / sys_unlock_dt,措辞照
KEY_LINES["storyline"]「按空格 / 左右方向键 / 按回车」)+ `sys_menu` 重录;删除
6 对(gd_brief / gd_continue / gd_again / gd_ping1 / gd_ping2 / sys_help 随主句停用);
保留 4 对(sys_skip / sys_continue_ask / dv1_teach / p1)。变体合计 11 − 6 + 21 = **26 对**。
多音字口径维持全表无「重听」(一律「重新听」/「再听一遍」/「重开」)。