Files
SoundGame/docs/design/19-cipher-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

353 lines
33 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.
# 19b · 《暗码》(cipher) 语音台词表(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` 在游戏正文设计单里点名,补进本表后再进生成脚本。
> **给音频总监的录制说明**
> - **双性别组**(报务员 OP + 北风电台 WIND,134 句):落 `web/cipher/audio/voice/female|male/<id>.{ogg,m4a}`,两性别 id 集合完全一致(含全部 `_k` 变体)。
> - **OP(报务员=玩家)**:female = `Serena`,instruct 常量 `压低而冷静的年轻女声,报务员,值夜班,克制的紧张`;male = `Uncle_Fu`,instruct 常量 `压低而冷静的男声,报务员,值夜班,克制的紧张`。
> - **WIND(北风电台=上线联络+系统音/向导 gd_*)**:female = `Vivian`,instruct 常量 `清晰平稳的女声,电台联络声,隔着电流,字字清楚`;male = `Dylan`,instruct 常量 `清晰平稳的男声,电台联络声,隔着电流,字字清楚`。
> - 区分度设计:你(耳机旁的自语)与北风(电波里传来的控制声)共用 speaker 池但**不同 speaker 配对**——female 侧你 Serena / 北风 Vivian、male 侧你 Uncle_Fu / 北风 Dylan,同场景高频对话的两者永不同 speaker(radio 主播/导播先例)。
> - **NPC 平铺组**(5 句):单音色、**不做双性别**,平铺落 `web/cipher/audio/voice/<id>.{ogg,m4a}`(引擎平铺回退命中)。有台词人物仅 2 人:北风(已并入 WIND 双性别组,向导人设 L4,radio 导播同型)+ 处长(明线上级,本表 NPC)。另有**无台词角色**「快手七」(对家报务手,存在=电波里的手法音,零台词零资产,abyss 小郑先例)。**不加滤波**(detective 先例:处长是当面训话,区分度靠 speaker+instruct+语境;「电波里的人」与「身边的人」靠 WIND/OP 音色对立立住):
> | 角色 | speaker | instruct 常量 | 区分度风险 |
> |---|---|---|---|
> | 处长(明线上级,50 余岁) | `Eric` | `威严冷淡的中年男声,电讯处长,官腔,话里有话` | **低**:male 侧唯一 Eric,与两侧双性别组均不同 speaker |
> - **称呼规则**:处长对玩家一律称「值机员/你」,北风称「你」,**全表禁用**「姑娘/小哥/先生/同志」类性别化称呼(玩家性别随设置变化)。
> - **键盘变体(PC 键盘通道,P1 机制)**:带 `_k` 后缀的 id 为键盘措辞版(「按空格」「回车」「左箭头/右箭头/上箭头/下箭头」),与触屏版**成对生成、成对落盘**(`check_all_assets` 校验 `_k` 配对);运行时由 `gesture.inputMode()` 选择:`key` → `<id>_k`,`touch` → `<id>`,`auto` 跟随最近使用通道,`_k` 缺失回退无后缀版。变体共 **11 对**,全部集中在 §G0.a 操作提示句区与 §M1 首个候选导航/首个叙事抉择(dv1_teach2 / p2),以粗体标注。
> - **数字规避**:电文序号/密码本页数/暴露档位全部分档整句(prog_t1..t4、book_3..0、exp_calm/low/mid/hot);句内数字(民国二十九年/零点/丑时/三时/两点五十九分/一刻钟)写死在整句里,禁止运行时拼接。
> - **禁语速词**:instruct 不含任何语速描述(引擎 SoundTouch 变速);NPC 句靠短句+逗号停顿实现「官腔慢半拍」听感。
> - **摩尔斯不在本表**:电文/候选/重听/慢放的滴答声为运行时程序合成(`web/cipher/morse.js`,19-cipher.md §2.1),零文件资产,勿排产。
> - 管线:`tools/gen_voice_dual.py` 照录(SPEAKERS 表需新增 cipher 行 + CIPHER_NPC 平铺表);多音字自查见文末注记。
## G0 组 · 系统/向导/状态(WIND 双性别 ×39)
### 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_tune1` | 电文在等。左右滑,听候选词。 | DECODE 浏览静默 10s(第 1 级) |
| **`gd_tune1_k`** | 电文在等。左右方向键,听候选词。 | 同上(key) |
| `gd_tune2` | 双击,把电文再听一遍。再双击,会放慢。 | DECODE 浏览静默 25s(第 2 级,**必须与第 1 级不同句**;同时是慢放机制的常驻教学) |
| **`gd_tune2_k`** | 按回车,把电文再听一遍。再按一次,会放慢。 | 同上(key) |
| `sys_help` | 单击选定,双击重新听电文。上滑听状态,下滑开菜单。选择时,左右滑。 | 上滑帮助链尾 / 菜单内上滑 |
| **`sys_help_k`** | 空格选定,回车重新听电文。上箭头听状态,下箭头开菜单。选择时,左右箭头。 | 同上(key) |
| `sys_menu` | 菜单。单击切换选项,双击确认。 | 下滑呼出模态菜单 |
| **`sys_menu_k`** | 菜单。空格切换选项,回车确认。 | 同上(key) |
| `sys_skip` | 想跳过这句,单击就行。 | 开场每局一次(skip_hint 先例) |
| **`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_book` | 翻密码本,换一个字母。 | 菜单项(长按捷径的冗余入口,P4) |
| `sys_menu_restart` | 重新开始今晚。 | 菜单项 |
| `sys_menu_lobby` | 保存并回大厅。 | 菜单项(确认后跳转前播) |
| `sys_settings` | 音色、语速、背景音乐,请回大厅修改。 | 菜单内设置提示 |
| `sys_new_night` | 新的夜班,开始了。 | 新夜班开始 / 菜单重开 |
### G0.c 分档状态句(整句账目,逐值为真)
| id | 台词全文 | 触发 |
|---|---|---|
| `prog_t1` | 现在是今晚第一封电文。 | 上滑状态链(按当前封选播) |
| `prog_t2` | 现在是第二封,内部通报。 | 同上 |
| `prog_t3` | 现在是第三封,交接电文。 | 同上 |
| `prog_t4` | 第四封,最后一封。 | 同上 |
| `book_3` | 密码本,还剩三页。 | 状态链(余页=3;开局) |
| `book_2` | 密码本,还剩两页。 | 余页=2 |
| `book_1` | 密码本,只剩最后一页。 | 余页=1 |
| `book_0` | 密码本,一页都不剩了。 | 余页=0 |
| `exp_calm` | 这一晚,还没人看你第二眼。 | 暴露度 0(跨档时挂夜结算链尾;状态链) |
| `exp_low` | 处长端着茶,多看了你一眼。 | 暴露度 1-2 |
| `exp_mid` | 走廊里的脚步声,慢了下来。 | 暴露度 3-4 |
| `exp_hot` | 门外,好像有人换了岗。 | 暴露度 ≥5;各播报位附 warning 震 |
## G1 组 · 开场(双性别 3 + 处长平铺 1)
| id | 声部 | 台词全文 | 触发 |
|---|---|---|---|
| `b_open` | 你 | 民国二十九年,江城。电讯处的夜班,从零点的电波声开始。 | INTRO(配 sfx/amb_room) |
| `b_rule` | 北风 | 北风问候你。规矩就一条:听不清,就再听一遍。 | INTRO(一句规矩,P4;重听/慢放承诺) |
| `b_goal` | 北风 | 今晚频道里有四封密电。每一个字,都要过你的耳朵。 | INTRO(四封承诺;随后第一封起播) |
| `b_chief` | 处长 | 四封电文,一封都不许漏。你的耳朵,是处里最值钱的东西。 | INTRO 收尾(处长夜令,明线口径;配 sfx/tea_cup) |
## M1 组 · 第一封·船期·教学(双性别 19,含 _k 2)
> 真词 **BAY=货船**;候选 DAY=客车 / RAY=巡逻艇;辨析位=第 1 字母。T1 译错**无限重选零惩罚**,恒收敛真词。
| id | 声部 | 台词全文 | 触发 |
|---|---|---|---|
| `rx1_in` | 北风 | 第一封。江上船队的调度,拍得很稳。 | RX 引入(配 sfx/tune_seek,随后摩尔斯首播 BAY) |
| `dv1_teach` | 北风 | 电文进来了。先双击,把它重新听一遍。 | 首播后 DECODE 教学 ①(教「双击=重听」) |
| `dv1_teach2` | 北风 | 左右滑,听密码本上的候选词。单击,选定一个。 | DECODE 教学 ②(教候选导航+两段确认首击) |
| **`dv1_teach2_k`** | 北风 | 左右方向键,听密码本上的候选词。空格,选定一个。 | 同上(key;候选导航键位绑定) |
| `dv1_ask` | 北风 | 密码本第一页。三个词,哪个是它? | 抉择提示(choiceArmed;进浏览自动预听候选 1) |
| `cand_bay` | 北风 | 货船。 | 候选预听报名(候选摩尔斯 620Hz 对照档之后接播;全 DECODE 复用本封) |
| `cand_day` | 北风 | 客车。 | 同上 |
| `cand_ray` | 北风 | 巡逻艇。 | 同上 |
| `dv1_right` | 北风 | 货船,译对了。药品,装在货船的底舱。 | T1 译对判定(success 震;首个正反馈 ≈t+2min) |
| `dv1_wrong` | 北风 | 不对。听清楚:B,一长,三短。 | T1 译错即时归因(真话:真词首字母的摩尔斯写死在句里;无限重选) |
| `hint_t1` | 北风 | 我教你一页:第一个字母,是 B。一长,三短。 | T1 翻密码本(**首次免费不扣页**,Prime→Teach;配 sfx/paper_page) |
| `cf_confirm` | 北风 | 就这个词?再单击,定下来。 | 两段确认第 1 击(全 DECODE 共用;随后电文重播原速一遍) |
| `p2` | 北风 | 药品船,丑时过江。向左滑,把船期报给北风。向右滑,压进值机日志。 | 叙事抉择提示(播完即可选) |
| **`p2_k`** | 北风 | 药品船,丑时过江。左箭头,把船期报给北风。右箭头,压进值机日志。 | 同上(key;首个叙事抉择键位绑定) |
| `r1a_send` | 你 | 北风,北风。货船,丑时过江,接住。 | p2 左(报船期;配 sfx/key_send) |
| `r1a_e` | 北风 | 收到。江上有人等你。第一封,做得稳。 | p2 左·收(med_ok 预埋;expose+0) |
| `r1b_hold` | 你 | 先压一压。这一船的事,得看清楚再说。 | p2 右(压日志;expose+1) |
| `r1b_e` | 北风 | 日志下面压着的,是三箱药。船,不会等你。 | p2 右·收(诚实复盘,非惩罚) |
| `n1` | 北风 | 零点半。挂钟走了半圈,雨没有停。 | NIGHT(1) 过渡句(随后跨档 exp_* 如有) |
## M2 组 · 第二封·名单(双性别 16 + 处长平铺 1)
> 真词 **TOP=黑名单**;候选 TAP=窃听令 / TIP=线人费;辨析位=第 2 字母。正片起**译错不揭穿**:rev_* 按玩家所选播「你的认知」;expose +1。
| id | 声部 | 台词全文 | 触发 |
|---|---|---|---|
| `rx2_in` | 北风 | 第二封。手法很急,是内部通报。 | RX 引入(摩尔斯首播 TOP) |
| `dv2_ask` | 北风 | 密码本第二页。三个词,选一个。 | 抉择提示 |
| `cand_top` | 北风 | 黑名单。 | 候选预听报名 |
| `cand_tap` | 北风 | 窃听令。 | 同上 |
| `cand_tip` | 北风 | 线人费。 | 同上 |
| `rev_top` | 北风 | 黑名单。头一个代号,叫码头。 | 译 TOP·揭晓(你的认知:码头=你的交通员;驱动 p4_known) |
| `rev_tap` | 北风 | 窃听令。今夜,有人要装耳朵。 | 译 TAP·揭晓(误读分支;expose+1) |
| `rev_tip` | 北风 | 线人费。月底之前,有人要收钱。 | 译 TIP·揭晓(误读分支;expose+1) |
| `p4_known` | 北风 | 名单上有码头。向左滑,暗号示警,让他连夜搬家。向右滑,按流程呈报处长。 | 抉择提示(**条件 t2=top**) |
| `p4_blind` | 北风 | 一封通报。向左滑,压进抽屉,谁的耳朵也别装。向右滑,按流程呈报处长。 | 抉择提示(条件 t2≠top) |
| `r2a_act` | 你 | 有的字,不能落进卷宗。 | p4 左·暗处理(known=示警码头 / blind=压下通报;expose+1) |
| `r2a_e` | 北风 | 这一页,从今天起,不存在了。 | p4 左·收(ep_list_ok 预埋) |
| `r2b_act` | 你 | 通报誊清,呈处长。 | p4 右·呈报(mateListed=true;expose+0) |
| `r2b_e` | 北风 | 名单进了卷宗。码头,自己多保重。 | p4 右·收(ep_list_no 预埋) |
| `m2_chief` | 处长 | 嗯,译得很全。去吧。 | p4 右·处长收报(配 sfx/pen_scratch;通用真话:你誊了什么它就收什么) |
| `hint_t2` | 北风 | 翻到这页:第二个字母,是 O。三长。 | 翻密码本(扣 1 页;辨析位=O ⟹ 候选唯一) |
| `n2` | 北风 | 一点整。处长的灯,还亮着。 | NIGHT(2) 过渡句 |
## M3 组 · 第三封·交接(双性别 16)
> 真词 **HAND=今夜交接**;候选 SAND=明晨交接 / LAND=地点变更;辨析位=第 1 字母(H 四短 vs S 三短,全作最狠听辨——慢放价值兑现段)。
| id | 声部 | 台词全文 | 触发 |
|---|---|---|---|
| `rx3_in` | 北风 | 第三封。很短,手法有点抖。 | RX 引入(摩尔斯首播 HAND) |
| `dv3_ask` | 北风 | 密码本第三页。三个词,选一个。 | 抉择提示 |
| `cand_hand` | 北风 | 今夜交接。 | 候选预听报名 |
| `cand_sand` | 北风 | 明晨交接。 | 同上 |
| `cand_land` | 北风 | 地点变更。 | 同上 |
| `rev_hand` | 北风 | 今夜交接。丑时,老码头。 | 译 HAND·揭晓(你的行动按「今夜」展开) |
| `rev_sand` | 北风 | 明晨交接。天亮再说。 | 译 SAND·揭晓(误读:你按「明晨」行动;expose+1) |
| `rev_land` | 北风 | 地点变更。等下一封。 | 译 LAND·揭晓(误读:你按「等」行动;expose+1) |
| `p6` | 北风 | 交接在你手里。向左滑,亲自去码头跑一趟。向右滑,留书暗号,托给下一班。 | 抉择提示(固定文本,known/blind 共用——行动时机由你的认知决定) |
| `r3a_go` | 你 | 口令我背得出。今夜,我亲自去。 | p6 左·亲自去(expose+2;按你的认知时间出门) |
| `r3a_e` | 北风 | 值班室空了一刻钟。值机日志,停了一行。 | p6 左·收(expose+2 的纸面依据;成败留尾声) |
| `r3b_act` | 你 | 暗号夹进交接簿,让雨替我跑这一趟。 | p6 右·留书(expose+0) |
| `r3b_e_ok` | 北风 | 交接赶上了。袋子,连夜上了船。 | p6 右·收(**条件 t3=hand**;ep_hand_ok 预埋) |
| `r3b_e_no` | 北风 | 交接的袋子,在码头放到了天亮。 | p6 右·收(条件 t3≠hand——误译的戏剧性反讽:约定时间本身错了) |
| `hint_t3` | 北风 | 翻到这页:第一个字母,是 H。四短。 | 翻密码本(扣 1 页) |
| `n3` | 北风 | 一点三刻。雨小了,频道里很静。 | NIGHT(3) 过渡句(随后走氧气门式签收) |
## M4 组 · 第四封·处置令·高潮(双性别 15 + 处长平铺 3)
> 真词 **SPY=内线确认**;候选 SAY=约谈 / SLY=内部排查;辨析位=第 2 字母。rev_spy 挂全作唯一 danger 拍(step_halt 前置 2s);RELAY(4) 起 BGM 切 `bgm/closing`。
| id | 声部 | 台词全文 | 触发 |
|---|---|---|---|
| `rx4_in` | 北风 | 第四封。最后一个手法,你听过——快手七。 | RX 引入(无台词角色登场=手法音;摩尔斯首播 SPY) |
| `dv4_ask` | 北风 | 密码本第四页。三个词,选一个。 | 抉择提示 |
| `cand_spy` | 北风 | 内线确认。 | 候选预听报名 |
| `cand_say` | 北风 | 约谈。 | 同上 |
| `cand_sly` | 北风 | 内部排查。 | 同上 |
| `rev_spy` | 北风 | 内线确认,今夜三时收网。代号,耳机。 | 译 SPY·揭晓(**danger 拍**:「耳机」=你自己的代号;expose+0 但驱动 p9_known) |
| `rev_say` | 北风 | 明早九时,约谈相关人员。 | 译 SAY·揭晓(误读:危机被读成了例行公事;expose+1) |
| `rev_sly` | 北风 | 即日起,排查站内三人。 | 译 SLY·揭晓(误读;expose+1) |
| `m4_chief_a` | 处长 | 值机员,今晚的频道,很热闹啊。 | 处长试探 ①(p8 前铺垫;配 sfx/tea_cup) |
| `m4_chief_b` | 处长 | 你的耳朵最好。听见什么,记得……要报。 | 处长试探 ②(施压;配 sfx/pen_scratch) |
| `p8_known` | 北风 | 三点之前。向左滑,拍一封假电,说北风昨夜已撤。向右滑,手离开放键器,装傻。 | 抉择提示(**条件 t4=spy**;全表最长句 30 字) |
| `p8_blind` | 北风 | 收台之前。向左滑,回一封例行电文,搅一搅水。向右滑,什么都不做。 | 抉择提示(条件 t4≠top;p9 将按 blind 版走) |
| `r4a_feed` | 你 | 戴上手键。这一封,借快手七的手法。 | p8 左·反喂(**配 sfx/key_send**;expose+2,feed=true) |
| `r4a_e` | 北风 | 假电出了门。对家的耳朵,听得出换人了吗。 | p8 左·收(悬而未决——真相在尾声) |
| `r4b_act` | 你 | 手,离开放键器。我只是个值机的。 | p8 右·装傻(expose+0) |
| `r4b_e` | 北风 | 有时,什么都不做,就是做了。 | p8 右·收 |
| `hint_t4` | 北风 | 翻到这页:第二个字母,是 P。短,两长,短。 | 翻密码本(扣 1 页) |
| `m4_chief_c` | 处长 | 行。去睡吧,明天还有明天的事。 | p8 右·处长收场(仅右路播出) |
## F9 组 · 签收抉择·最后一电(双性别 9)
| id | 声部 | 台词全文 | 触发 |
|---|---|---|---|
| `g9_in` | 北风 | 频道要收了。最后一件事,是你自己。 | 签收引入(NIGHT(3)/M4 之后) |
| `g9_knot` | 你 | 三年前,我译错了一封电。那之后,我再没见过我的上线。 | 心结自述(玩家背景;与「译错也是剧情」主题闭环) |
| `p9_known` | 北风 | 收网之前。向左滑,开机,发最后一电。向右滑,关机,装睡到天亮。 | 终局抉择提示(**条件 t4=spy**) |
| `p9_blind` | 北风 | 北风在等答复。向左滑,开机,把今晚发出去。向右滑,例行收台。 | 终局抉择提示(条件 t4≠spy——你不知道那是什么电) |
| `d9_send` | 你 | 北风,北风。处置令,今夜三时。撤。 | p9 左·发报(**配 sfx/key_send**;expose+2,结局判定用 p9 前值) |
| `d9_send_e` | 北风 | 收到了。你的手法,我听了一整晚。快走。 | p9 左·低暴露收(**p9 前 expose≤4**;e1 入口) |
| `d9_caught_e` | 北风 | 信号被咬住了。别回头,走水路。快。 | p9 左·高暴露收(**≥5**;danger 签名 + e3 入口) |
| `d9_sleep` | 你 | 机关上了。雨声里,只剩挂钟。 | p9 右·关机 |
| `d9_sleepe` | 北风 | 天亮之前,还有两个钟头。守住。 | p9 右·收 |
## EP 组 · 结局与尾声回响(双性别 17;结局 8 + 回响 9)
| id | 声部 | 台词全文 | 触发 |
|---|---|---|---|
| `e1_a` | 你 | 电波追不上我了。码头的灯,一盏一盏地灭。 | 结局 e1(≤4 且发报)主句(配 sfx/dawn_bell) |
| `e1_b` | 你 | 新的密码本,在城外渡口等我。黎明,比想象中安静。 | e1 收(钩子) |
| `e2_a` | 你 | 交了班,一切照旧。没人知道今晚频道里发生过什么。 | 结局 e2(≤4 且关机)主句 |
| `e2_b` | 你 | 只是北风的呼叫,到天亮也没人接。下一次,我会接吗。 | e2 收(钩子) |
| `e3_a` | 你 | 我把警报拍了三遍。门开的时候,挂钟正好敲三点。 | 结局 e3(≥5 且发报)主句(配 sfx/lock_click) |
| `e3_b` | 你 | 审讯室的灯,也很亮。可码头那边,一个人都没少。 | e3 收(钩子;你的暴露换同伴撤尽) |
| `e4_a` | 你 | 两点五十九分,脚步停在门口。我把最后一页密码,塞进了炉子。 | 结局 e4(≥5 且关机)主句(配 sfx/lock_click) |
| `e4_b` | 你 | 耳机还挂着。里面有一封电文,永远译不完了。 | e4 收(钩子) |
| `ep_lead` | 北风 | 天亮了。北风给你记了最后一笔账——今晚的事,都有了去向。 | 尾声引入 |
| `ep_med_ok` | 北风 | 药品:货船丑时靠岸,三箱药,一箱不少。 | 尾声(t1=bay 且 p2=左) |
| `ep_med_no` | 北风 | 药品:没人接住那三箱药。船,白白过了江。 | 尾声(其余——压下或译错,真话) |
| `ep_list_ok` | 北风 | 名单:码头连夜搬了家。卷宗里,少了一个人。 | 尾声(p4=左) |
| `ep_list_no` | 北风 | 名单:天亮时,多了一个红圈。 | 尾声(p4=右——呈报的真实代价) |
| `ep_hand_ok` | 北风 | 交接:胶卷上了船,手很稳。 | 尾声(t3=hand) |
| `ep_hand_no` | 北风 | 交接:码头的灯,白亮了一夜。 | 尾声(t3≠hand) |
| `ep_spy_ok` | 北风 | 处置令:你译对了它。北风,撤在你前头。 | 尾声(t4=spy) |
| `ep_spy_no` | 北风 | 处置令:差的那三个字母,差了一整条命。 | 尾声(t4≠spy——全作归因真话的收束句) |
---
**合计:139 句**(预算 ≤150 ✓)
- 双性别 134 句(OP 你 20 + WIND 北风/系统 114,含 `_k` 键盘变体 11)×2 性别 = 268 文件;
- NPC 平铺 5 句(处长)= 5 文件;
- 合计 273 条音频 ×2 格式(ogg+m4a)= **546 文件**。
- 键盘变体 11 对:gd_brief / gd_continue / gd_again / gd_tune1 / gd_tune2 / sys_help / sys_menu / sys_skip / sys_continue_ask / dv1_teach2 / p2(成对生成,`check_all_assets` 校验 `_k` 配对与双性别集合一致)。
- 每结局专属台词齐备:e1/e2/e3/e4 各 2 句 + 尾声回响 9 句(译文/抉择 flag 选播)。
- 每局实走 9 个抉择点(4 译词 p1/p3/p5/p7 恒 3 候选 + p2/p4/p6/p8/p9 恒 2 选项,无跳点路径)。
- 摩尔斯滴答声零文件(运行时 `morse.js` 合成,19-cipher.md §2.1),本表不含。
## 多音字 / 发音风险自查注记
| 风险词 | 处理 |
|---|---|
| 重听 | 全表写「重新听」(sys_help / gd_tune2),无「重听」字样 |
| 长(cháng/zhǎng) | 「一长三短」「三长」「两长」为 cháng 正确常用读法,保留,试听确认 |
| 处(chǔ/chù) | 「处长」「处置令」为固定词,保留,试听确认 |
| 卷(juǎn/juàn) | 「胶卷」juǎn 与「卷宗」juàn 两读并存(ep_hand_ok/r2a_act),逐句人工试听项 |
| 塞(sāi/sè) | 「塞进了炉子」(e4_a)为 sāi 常用读法,保留,试听确认 |
| 行(xíng/háng) | 「行。去睡吧」(m4_chief_c)为 xíng,试听确认 |
| 着(zhe/zháo) | 「耳机还挂着」「守住」为常见读法,逐句试听项 |
| 得(de/dé) | 「译得很全」「打得稳」等助词 de,逐句试听项 |
| 教(jiāo/jiào) | 「我教你一页」为 jiāo 常用读法,保留 |
| 答(dá/dā) | 「在等答复」为 dá,保留 |
| 差(chà/chā/chāi) | 「差的那三个字母」「差了一整条命」为 chà,试听确认 |
| 圈(quān/juàn) | 「多了一个红圈」为 quān,保留 |
| 英文字母 | hint_t1..t4 / dv1_wrong 句内单字母(B/O/H/P)朗读为风险项,逐句试听;误读时改写为「字母 B」式带「字母」前缀重生成 |
| 挣/血/露/巷/降/率/传(zhuàn 义) | 全表未使用(「暴露」不进台词,仅存档 summary) |
| 了 / 还 / 中 | 常规句式常见读法,逐句人工试听项(「收住了吗」「挂钟走了半圈」等) |
| 数字 | 句内数字全部汉字写死(民国二十九年/零点/零点半/一点整/一点三刻/丑时/三时/明早九时/三点/两点五十九分/一刻钟/两个钟头/三箱/三年前),序号与档位用分档整句(prog_t*/book_*/exp_*) |
## 台词侧自查
- 单句 ≤40 字:全表最长 = p8_known(30 字),次长 p6/p4_known(29 字)、sys_help(27 字)✓;NPC 处长句 ≤23 字(最长 b_chief,P4 语速感靠短句+逗号,不用 instruct 语速词)✓。
- 有台词人物 2 人(北风=WIND 双性别组、处长=平铺),无台词角色快手七零资产 ✓;同一角色 speaker+instruct 恒定、区分度风险逐个标注 ✓。
- 称呼合规:处长对玩家只用「值机员/你」,北风称「你」,性别化称呼零出现 ✓。
- 每个结局(e1..e4)专属主句+钩子各 2 句齐备,尾声救/错过双线齐备(ep_* 由 flags 单源选播)✓。
- 归因真话律:dv1_wrong 的字母/码与真词 BAY 一致;rev_* 只播玩家认知不冒认真相;ep_med_no/ep_hand_no/ep_spy_no 与 flags 一致;无「运气不好」类假归因、无惩罚性措辞 ✓。
- 分档账目真实:book_3/2/1/0 与余页一一对应;exp_calm/low/mid/hot 与 0/1-2/3-4/≥5 一一对应;prog_t1..t4 分封整句 ✓。
- 向导 gd_* 13 句(gd_brief/gd_continue/gd_again/gd_tune1/gd_tune2 各带 _k 变体,gd_invalid/gd_prog1/gd_prog2 无变体)符合 14 号 §6 台词规范(一句一义、无重复句式、单句 ≤18 字)✓。
---
## R2 增补(2026-09-14,round1 synthesis F3 修复)
EP.b 组新增 4 句结局收集计数(结算链尾播报,数字规避分档整句;存档 endings 账同源):
| id | 声部 | 台词全文 | 触发 |
|---|---|---|---|
| `end_c1` | 北风 | 这是你在电波里挣下的第一个结局。 | 结算链尾(结局收集数=1) |
| `end_c2` | 北风 | 这是你在电波里挣下的第二个结局。 | 结算链尾(=2) |
| `end_c3` | 北风 | 这是你在电波里挣下的第三个结局。 | 结算链尾(=3) |
| `end_c4` | 北风 | 四个结局,都收进你的密码本了。 | 结算链尾(=4) |
- 合计 139 → **143 句**(WIND 114 → 118;双性别 134 → 138;音频文件 273 → 281 条 ×2 格式)。
- 无 `_k` 变体(无操作词);instruct 复用 WIND 常量;数字为分档整句无拼接。
- 配套修复(同轮,无新台词):F1 NIGHT 链首纸面标记音(复用现有 sfx,零新增资产);
F2 book_1 播报位附 warning 震(exp_hot 同机制)。
---
## R4 · 26 号深度重构(设计单 26-apply-cipher.md;施工台词清单 `tools/voice_lines_26/cipher.md`)
> 交互权威 26 号手册。本轮开场第一句改 critical 指令「点一下屏幕。」(b_rule/gd_brief
> 规矩念白废除,b_open/b_goal/b_chief 移驻 NIGHT(1) 链首补全叙事)、等待点三档提示
> 统一 sys_hint_* / gd_tune1_short / cf_hint_*、主动重听「再说一遍:」前缀、手势阶梯
> 三阶段教学句、菜单改左右滑换项 + 单击确认(00 §5.4)、**「双击重听/慢放」「长按翻
> 密码本」旧口径全部废止**(双击=阶段 3 阶梯重听电文原速→再请求慢放;翻本走菜单项
> 或迷茫 L3)。增量清单原文 = `tools/voice_lines_26/cipher.md`(生成并表时逐字并入
> `tools/gen_voice_dual.py` CIPHER_WIND_LINES,两表一致铁律;`web/harness/
> voice_text.json` cipher 主表已同步,142 条)。类别:critical / content / hint /
> feedback。系统/交互层句子全部走 **WIND 北风组**(北风电台=上线联络+系统音,与
> radio 的 PROD 导播组同型;与既有 sys_skip 同组)。
**新增(20 句 × 双性别,WIND 组;其中 4 条由引擎播出但资产照落本目录)**:
| id | 台词全文 | 类别 | 触发 |
|---|---|---|---|
| `sys_first_tap` | 点一下屏幕。 | critical | 冷启动第一句(≤3s,不可打断) |
| `sys_first_tap_short` | 点一下。 | hint | intro 等待点 `_short` 档(full=null:指令句刚说过) |
| `sys_turn_teach` | 听到这个声音,就是轮到你了。 | content | 「轮到你」等待声首现教学(首夜开场第一下单击后,全局一次;与 storyline 同文案) |
| `sys_hint_continue_full` | 单击,继续。 | hint | continue 等待点 full 档(13s) |
| `sys_hint_continue_short` | 单击。 | hint | continue/settle 等待点 `_short` 档 |
| `sys_hint_choice_short` | 左右滑,选。 | hint | choice 等待点 `_short` 档(25s 台账降档后首档) |
| `sys_hint_again_full` | 单击,重新开始。 | hint | settle 等待点 full 档 / 结算态左右滑解释句 |
| `gd_tune1_short` | 左右滑。 | hint | decode 等待点 `_short` 档(25s);menu 等待点 `_short` 复用同资产 |
| `cf_hint_full` | 单击,定下这个词。 | hint | confirm 等待点 full 档(10s,19 号附录 C §5 原句) |
| `cf_hint_short` | 单击。 | hint | confirm 等待点 `_short` 档(20s) |
| `sys_only_choice` | 现在,只要左右滑。 | hint | 迷茫 L2 抉择点缩小选择(restrictLine) |
| `sys_demo_continue` | 听我做一次。 | hint | 迷茫 L3 演示前缀(intro/continue:替玩家走一步) |
| `sys_demo_choice` | 左右滑,都可以。现在你来。 | hint | 迷茫 L3 抉择点演示(不替玩家做有后果的选) |
| `sys_say_again` | 再说一遍: | hint | 主动重听前缀(engine/hints.js 播出,全项目一句) |
| `sys_unlock_up` | 想知道自己在哪,就向上滑。 | content | 手势阶梯阶段 1 教学句(T1 译对挂 dv1_right 揭晓链尾;engine/novice.js teachLine 播出) |
| `sys_unlock_down` | 向下滑,可以打开菜单。 | content | 阶段 2 教学句(首局结局链尾;engine/novice.js) |
| `sys_unlock_dt` | 没听清,就双击,再听一遍。 | content | 阶段 3 教学句(重听电文原速→再请求慢放 0.5×) |
| `inv_up_locked` | 上滑还没解锁。先单击继续。 | feedback | up 未解锁首次解释(原则 7) |
| `inv_down_locked` | 菜单,玩完一局解锁。单击继续。 | feedback | down 未解锁首次解释 |
| `inv_nosel` | 现在不用选。单击继续。 | feedback | 非抉择点滑动首次解释(叙事段左右滑) |
**修改(3 句,id 不变重录)**:`dv1_teach`「向右滑,听下一个词。」(原「电文进来了。
先双击,把它重新听一遍。」= 双击重听口径,随阶段 3 阶梯废止;19 号附录 C §6 原句,
critical);`sys_menu`「菜单。左右滑换项,点一下确认。」(原「单击切换选项,双击确认」
= 旧菜单口径,00 §5.4 废止);`gd_invalid`「这个手势,值机室里用不上。单击,继续。」
(补正确做法,原则 7 首次解释=原因+正确做法)。
**删除(10 句)**:`gd_brief` / `gd_continue` / `gd_again` / `gd_tune2`(向导层让位
三档提示,原则 9;gd_tune2=双击重听/慢放常驻教学废止)/ `gd_prog1` / `gd_prog2`
(无进展轨让位迷茫接管,且含双击口径)/ `sys_help`(帮助溢出废止,含「双击重新听」
旧口径)/ `b_rule`(开场规矩念白,§4.10 零规则念白)/ `dv1_teach2`(两段确认教学
停用,一句只教一个)/ `dv1_ask`(T1 职能并入 dv1_teach 改写版;dv2/dv3/dv4_ask
保留)。上方 G0 / G1 / M1 组表中对应行按本节口径废止。
**计数(并表后)**:主句 132 − 10 + 20 = **142**(WIND 107 → 117,OP 20 与 NPC 平铺
5 不动;`web/harness/voice_text.json` 已同步);`_k` 变体 11 → 24 对(删 6:
gd_brief/gd_continue/gd_again/gd_tune2/sys_help/dv1_teach2;新增 19:17 条新增句
+ dv1_teach/gd_invalid 改写句;sys_menu 重录替换);双性别组 138 → 161 句,总计
**166 句**。上方头注「134 句 / 11 对变体」与 R2 节「143 句」按本节口径更新
(R2 计数含变体:主句 127 + 变体 11 = 138)。
**键盘变体**:措辞照 KEY_LINES["storyline"](「按空格」「左右方向键」「按回车」);
新增句无操作词不列(sys_turn_teach / sys_say_again / sys_demo_continue 落回主资产);
修改句变体全部重录:`dv1_teach`「向右方向键,听下一个词。」、`sys_menu`「菜单。
左右方向键换项,按空格确认。」、`gd_invalid`「这个手势,值机室里用不上。按空格
继续。」。既有 gd_tune1 / sys_skip / sys_continue_ask / p2 变体不动;删除句变体随
主句停用(b_rule / dv1_ask 本无变体)。多音字口径维持全表无「重听」(一律
「重新听」/「再听一遍」)。