Files
SoundGame/docs/design/04-space-voice-ids.md
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

220 lines
15 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.
# 04a · 《盲航》重构版语音台词表(voice ids,R4 录音依据)
> **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` 在游戏正文设计单里点名,补进本表后再进生成脚本。
> **给音频总监的录制说明**
> - 设计依据:[04-space-rebuild.md](04-space-rebuild.md)。闪避为**同向**(左来左滑),台词已全部按此写死,不存在反向表述。
> - 旁白双性别:**female = Serena,male = Uncle_Fu**(R1 音色分配表)。落 `web/space/audio/voice/female|male/<id>.{ogg,m4a}`。
> - instruct 全表统一(同游戏同 instruct,00 文档 §3.2):
> - female(Serena):`平静清晰的女声,像飞船领航员,沉稳可信`
> - male(Uncle_Fu):`低沉醇厚的男声,像飞船领航员,沉稳有力`
> - 演练的紧迫感靠台词文案表达,instruct 不变。
> - 全部整句、无数字拼接:方位/次数/存活时间/躲避数全部按句写死或分档。
> - 多音字已规避("重新听"不写"重听";无"撞着/着陆"类风险)。
> - 管线:`tools/gen_voice_dual.py` 照录本表。**本表全量替换 R1 生成的 space 语音**(旧 id 见表末映射)。
## D 组 · 交互式演练(14 句)
| id | 台词全文 | 触发 |
|---|---|---|
| `drill_welcome` | 欢迎登上盲航。你只有一双耳朵。 | D0 |
| `drill_rule` | 陨石来了,会有声音告诉你方位。 | D0 |
| `drill_left` | 听,左边有陨石。向左滑,把它拨开! | D1 |
| `drill_right` | 这次在右边。向右滑! | D2 |
| `drill_up` | 上面有东西,声音又尖又高。向上滑! | D3 |
| `drill_down` | 下面是低沉的轰隆。向下滑! | D4 |
| `drill_good` | 漂亮。 | 演练做对(D1/D3 播) |
| `drill_retry_left` | 那是左边来的,向左滑。 | D1 做错重教 |
| `drill_retry_right` | 那是右边来的,向右滑。 | D2 做错重教 |
| `drill_retry_up` | 声音又高又尖,是上面,向上滑。 | D3 做错重教 |
| `drill_retry_down` | 轰隆声在下面,向下滑。 | D4 做错重教 |
| `drill_moveon` | 没关系,跟着我,我们继续。 | 同一步失败 2 次自动带过 |
| `drill_done` | 四个方向你都会了。引擎点火,出发! | D5 |
| `drill_skip` | 跳过演练,直接出发。 | 下滑跳过 |
## P 组 · 保护期(5 句)
| id | 台词全文 | 触发 |
|---|---|---|
| `protect_left` | 训练护盾接住了。那颗在左边,听到左边的呼啸,向左滑。 | 保护期被撞(左) |
| `protect_right` | 训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。 | 保护期被撞(右) |
| `protect_up` | 训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。 | 保护期被撞(上) |
| `protect_down` | 训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。 | 保护期被撞(下) |
| `protect_end` | 训练护盾关闭。接下来,靠你自己了。 | 第 60 秒 |
## F 组 · 单击/双击分批引入(6 句)
| id | 台词全文 | 触发 |
|---|---|---|
| `feat_boost` | 试试单击,引擎会短促加速,直接冲过空隙。 | 第 20 秒引入 |
| `feat_boost_done` | 感觉到了吗?加速的时候,陨石撞不上你。 | 单击后确认 |
| `feat_shield` | 双击展开护盾,能挡下一次撞击。 | 第 45 秒引入 |
| `feat_shield_done` | 护盾展开后会自动充能,好了我会告诉你。 | 双击后确认 |
| `shield_ready` | 护盾充能完毕。 | 30 秒冷却结束(沿用 R1 id,重录) |
| `shield_block` | 护盾挡下了撞击。 | 护盾生效(沿用 R1 id,重录) |
## H 组 · 被撞归因(5 句,保护期后)
| id | 台词全文 | 触发 |
|---|---|---|
| `hit_left` | 左边撞上的。听到左边的呼啸,向左滑。 | 第 1/2 次被撞(左) |
| `hit_right` | 右边撞上的。听到右边的呼啸,向右滑。 | 右 |
| `hit_up` | 上面撞上的。听到高高的呼啸,向上滑。 | 上 |
| `hit_down` | 下面撞上的。听到低沉的轰隆,向下滑。 | 下 |
| `hit_last` | 船体只剩最后一次了,小心! | 第 2 次被撞后接在方位句后 |
## M 组 · 里程碑(4 句)
| id | 台词全文 | 触发(躲过数) |
|---|---|---|
| `ms_10` | 十颗了,稳。 | 10 |
| `ms_25` | 二十五颗,老练的飞行员。 | 25 |
| `ms_50` | 五十颗,传奇。 | 50 |
| `ms_100` | 一百颗!天空属于你。 | 100 |
## R 组 · 结算(10 句)
| id | 台词全文 | 触发 |
|---|---|---|
| `time_1` | 不到三十秒,再试一次。 | 存活 <30s |
| `time_2` | 超过三十秒,有进步。 | 30~60s |
| `time_3` | 超过一分钟,合格的飞行员。 | 60~120s |
| `time_4` | 超过两分钟,王牌飞行员。 | ≥120s |
| `dodge_1` | 只拨开几颗。 | 躲过 <5 |
| `dodge_2` | 拨开了十来颗。 | 5~14 |
| `dodge_3` | 拨开了几十颗。 | 15~49 |
| `dodge_4` | 拨开了一大群,漂亮。 | ≥50 |
| `new_record` | 新纪录! | 破纪录(插在 time_* 后) |
| `restart_hint` | 单击再飞一次,下滑回大厅。 | 结算尾 |
## Y 组 · 菜单与系统(8 句)
| id | 台词全文 | 触发 |
|---|---|---|
| `second_run_ask` | 上滑重新听演练,单击直接出发。 | 二周目开场 |
| `menu_main` | ~~菜单。左右滑选择,单击确认。~~ → **勘误(R 终审)**:菜单约定已改(00 §5.2),以音频重录版"菜单。单击切换,双击确认。"为准。 | 下滑呼出 |
| `menu_resume` | 继续飞行。 | 菜单项 |
| `menu_lobby` | 回大厅。 | 菜单项 |
| `menu_help` | 重新听教学要点。 | 菜单项 |
| `help_recap` | 左边来向左滑,右边来向右滑,上面来向上滑,下面来向下滑。单击加速,双击护盾。 | 帮助重听(>25 字,生成期拆两句拼接:句 1 四方位,句 2 单击双击) |
| `settings_hint` | 音色、语速、背景音乐,请回大厅修改。 | 菜单内 |
| `paused` | 已暂停。 | 菜单打开时 |
---
**合计 52 句 × 2 性别 = 104 条**(×2 格式 = 208 文件)。
旧 id 处置:R1 生成的 `num*/n_*/intro1-4/hit1/hit2/gameover/restart` 全部弃用(数字拼接与旧教学);`shield_ready`/`shield_block` 沿用 id 重录。平铺旧文件按 R1 约定在切换验证后统一清理。
---
## 键盘变体(key,P1 输入平权路线 a,24 句)
「生效输入模式=键盘」(settings.input=key,或 auto 且键盘在跟/纯桌面初始判定,
web/engine/gesture.js inputMode())时,引擎 voice 候选链前置加载
`web/space/audio/voice/<gender>/key/<id>.{ogg,m4a}`,变体缺失回退主资产——触屏措辞零改动。
>
> 措辞规范(02-input-parity.md §4.3 路线 a + P1 裁定):向左滑→按左方向键(四向同理,
> WASD 不进台词);单击/轻触屏幕→按空格;双击→按回车;按住/长按→按住空格;
> 复合短语(左右滑→左右方向键、滑动→方向键)按语义等价展开;只改操作词,其余
> 内容一字不动,不新增「重」类多音字。本表与 `tools/gen_voice_dual.py` 的
> `KEY_LINES` 逐字一致(两表一致铁律:改一处必改另一处)。
> 资产:×2 性别 = 24×2 条、×2 格式 = 24×4 文件;管线 `gen_voice_dual.py --only-variants`
> 生成 → `--convert` 落盘,终检 `tools/check_all_assets.py`(key 两性别一致且 ⊆ 主集)。
| id | 键盘台词全文(触屏原句见本表上方对应 id) |
|---|---|
| `drill_left` | 听,左边有陨石。按左方向键,把它拨开! |
| `drill_right` | 这次在右边。按右方向键! |
| `drill_up` | 上面有东西,声音又尖又高。按上方向键! |
| `drill_down` | 下面是低沉的轰隆。按下方向键! |
| `drill_retry_left` | 那是左边来的,按左方向键。 |
| `drill_retry_right` | 那是右边来的,按右方向键。 |
| `drill_retry_up` | 声音又高又尖,是上面,按上方向键。 |
| `drill_retry_down` | 轰隆声在下面,按下方向键。 |
| `protect_left` | 训练护盾接住了。那颗在左边,听到左边的呼啸,按左方向键。 |
| `protect_right` | 训练护盾接住了。那颗在右边,听到右边的呼啸,按右方向键。 |
| `protect_up` | 训练护盾接住了。那颗在上面,听到高高的呼啸,按上方向键。 |
| `protect_down` | 训练护盾接住了。那颗在下面,听到低沉的轰隆,按下方向键。 |
| `feat_boost` | 试试按空格,引擎会短促加速,直接冲过空隙。 |
| `feat_shield` | 按回车展开护盾,能挡下一次撞击。 |
| `hit_left` | 左边撞上的。听到左边的呼啸,按左方向键。 |
| `hit_right` | 右边撞上的。听到右边的呼啸,按右方向键。 |
| `hit_up` | 上面撞上的。听到高高的呼啸,按上方向键。 |
| `hit_down` | 下面撞上的。听到低沉的轰隆,按下方向键。 |
| `restart_hint` | 按空格再飞一次,按下方向键回大厅。 |
| `second_run_ask` | 按上方向键重新听演练,按空格直接出发。 |
| `menu_main` | 菜单。按空格切换选项,按回车确认。 |
| `help_recap` | 左边来按左方向键,右边来按右方向键,上面来按上方向键,下面来按下方向键。按空格加速,按回车护盾。 |
| `skip_hint` | 按空格可跳过旁白。 |
| `gd_hit_hint` | 被撞了。听方位,按对应方向键就能拨开。 |
---
## R5 追加 · space polish 轮新增(2 句 × 2 性别 = 4 条;取证依据 research/space-polish/round1/)
> 本轮(R5)只追加,不改上方任何旧表。instruct 沿用全表 `_SPC` 常量(两性别同游戏同 instruct,00 文档 §3.2)。
> 台词已同步 `tools/gen_voice_dual.py` 的 SPACE_LINES(两表一致铁律)与 `web/harness/voice_text.json` 的 space 键。
> 无键盘变体:两句均不含操作词(space 键盘变体表 24 句不增)。
| id | 台词全文 | 触发 |
|---|---|---|
| `protect_soon` | 训练护盾还剩十秒。 | 开局第 50s(保护期剩 10s 预告;queue 不顶句,被菜单/分批引入打断由 _rearmRunTimers 补播) |
| `boost_not_ready` | 引擎还在冷却,稍等一下。 | 加速冷却中单击(R5 归因真话:拒绝必须有回音,此前冷却单击全静默);与护盾拒绝共用 4s 去抖 |
## R6 · 26 号对齐改造(设计单 04-space-rebuild.md 附录 C;施工记录 26-apply-space.md)
> 交互权威 26 号手册。本轮删 D0 零操作欢迎、删单击/双击保护期插课、菜单改左右滑 + 单击
> (00 §5.4)、帮助一律长按、新手期无双击。增量清单原文 = `tools/voice_lines_26/space.md`
>(生成并表时逐字并入 `tools/gen_voice_dual.py` SPACE_LINES,两表一致铁律;
>`web/harness/voice_text.json` space 键已同步)。类别:critical / content / hint / feedback。
**新增(18 句 × 2 性别)**:
| id | 台词全文 | 类别 | 触发 |
|---|---|---|---|
| `hint_tap` | 单击。 | hint | settle / reopen / ask 等待点 `_short` 档 |
| `d_short_left` | 向左滑。 | hint | d1 等待点 `_short`;迷茫 L2 限定方向 |
| `d_short_right` | 向右滑。 | hint | d2 等待点 `_short`;迷茫 L2 |
| `d_short_up` | 向上滑。 | hint | d3 等待点 `_short`;迷茫 L2 |
| `d_short_down` | 向下滑。 | hint | d4 等待点 `_short`;迷茫 L2 |
| `hint_swipe` | 向声音那边滑。 | hint | 迷茫 L1;演练等待点单击首次解释 |
| `inv_tap` | 现在只要滑。 | feedback | 对局未解锁加速时单击首次解释 |
| `inv_whiff` | 现在没有这边的陨石。 | feedback | 挥空首次解释 |
| `miss` | 没拨到。声音一响就滑。 | feedback | 演练没出手归因(禁说「慢了」) |
| `lp_run` | 引擎舱。躲开呼啸。向声音那边滑。 | hint | 长按 = 我在哪(≤20 字) |
| `lp_teach` | 想知道在哪,按住屏幕。 | content | 第一次成功闪避后教长按帮助(阶段 1) |
| `sys_turn_teach` | 听到这个声音,就是轮到你了。 | content | 教「轮到你」状态(D2 后一次;与 storyline 同文案) |
| `sys_say_again` | 再说一遍: | hint | 主动重听前缀(结算/菜单长按与阶段 3 双击) |
| `sys_unlock_down` | 向下滑,可以打开菜单。 | content | 第一局结束教阶段 2(挂结算链尾) |
| `sys_demo` | 听我做一次。 | hint | 迷茫 L3 / 演练 2 次失败演示 |
| `sys_now_you` | 现在你来。 | hint | L3 演示后交回话轮 |
| `resume_ask` | 上次飞到一半。单击继续,右滑重开。 | hint | 断点复述询问(reopen 等待点 `_full`) |
| `resume_recap` | 你在航道上。躲开呼啸。向声音那边滑。 | content | 续玩复述句(count-in 前) |
**修改(9 句,id 不变重录)**:`drill_left`「听,左边有陨石。向左滑。」(critical);
`drill_right`「这次在右边。」;`drill_up`「上面,向上滑。」;`drill_down`「下面,向下滑。」
(04 §0.5 d1~d4 `_full`,压进指令字数);`feat_boost`「点一下,加速。现在试试。」与
`feat_shield`「双击,展开护盾。现在试试。」(04 §4 解锁教学,替代保护期第 20s/45s 插课);
`help_recap`「听到哪边来,就向哪边滑。按住屏幕问路。」(删单击加速/双击护盾口径);
`menu_main`「菜单。左右滑切换,单击确认。」(00 §5.4,旧「单击切换,双击确认」废止);
`restart_hint`「单击,再飞一次。」(critical 承诺段;菜单入口改由 `sys_unlock_down` 教)。
**删除(9 句)**:`drill_welcome` / `drill_rule`(D0 零操作欢迎,04 §2)、`drill_skip`
(演练不再提供下滑跳过)、`skip_hint`(开场零操作旁白已删)、`paused`(对局中不开菜单)、
`settings_hint`(菜单帮助只留 help_recap 一句)、`feat_boost_done`(boost 音即反馈)、
`gd_hit_hint` / `gd_last_life`(向导层让位 Floor:hit_<dir> 与 hit_last 已覆盖)。
上方 D 组 / F 组 / Y 组表中对应行按本节口径废止;`second_run_ask` 保留。
**通用句取舍**:`sys_first_tap` 不引入(开场第一句 = D1 指令,§4.10 第一句就让玩家拨一颗);
`sys_unlock_up` 不引入(up 是玩法闪避方向,阶段 1 教的是长按 → `lp_teach`);
`sys_unlock_dt` 不引入(阶段 3 以后双击 = 护盾而非重听,教学用 `feat_shield`)。
**键盘变体**:新增 18 条 + 重录覆盖(`drill_right/up/down` 变体移除——修改后主句不含
操作词,动作提示由 `d_short_*` 变体承担);多音字口径维持「重新听」(全表无「重听」)。