Files
SoundGame/docs/design/19-cipher-voice-ids.md
T
xsl 566241e05d feat(platform/P1): 配对码跨设备 + 认领打磨 + 键盘语音双套资产(两 agent 并行 + 集成收口)
配对码与认领(B):
- POST /api/pair/start|join:6 位码 10 分钟单次有效、仅存内存零泄露面、5 连错 per-IP 封锁 10 分钟;join=新设备档案按桶 LWW 并入老档案+token 改绑(复用 claim-merge);日志脱敏
- 大厅:生成配对码(speechSynthesis 逐位朗读+aria-live+重听)/从其他设备转入(one-time-code 输入框)/从本机移除/401 过期自愈引导/aria 补全/玩家名可听化
- api-smoke 12/12(配对全流程/频控/封锁/过期自愈/移除/digitsToCn)+ CDP 真浏览器 E2E 22/22

键盘语音双套资产(A,路线 a):
- 164 变体句(8 游戏 grep 实测,超出调研预估 153:含轻触/点两下/按住变体)×2 性别=328 生成 656 文件 36.9 分钟;触屏主资产零字节改动(PCM 逐样本比对后还原)
- 引擎 _candidates 三跳路由 key→gender→平铺(inputMode 跟随);缓存键 mode|gender|id;engine-input 新增 K9 路由断言(72 条)
- check_all_assets 增 key 列(两性别一致且 ⊆ 主集)8 游戏全绿;voice_text.json 增 __key__ 表;live control.mjs key 会话对照键盘措辞验收(集成)
- voice-ids 文档:8 游戏键盘变体小节由 KEY_LINES 程序化生成(与台词表逐字断言一致);补齐 storyline/escape/simon 三个历史缺失文档;design README 增 new8 索引
- mock 适配:playtest persona 加 maxTouchPoints=1 保持触屏链断言语义零改动

回归:12 套件全绿(8 playtest + guide 122 + engine-voice 19 + engine-input 72 + api-smoke 12/12)
同批入库:批次 2/3 已完稿设计文档(17-abyss/18-detective/19-cipher 全套,20-22 在途)
2026-09-10 00:43:23 +08:00

259 lines
25 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.
# 19b · 《暗码》(cipher) 语音台词表(voice ids,录音依据)
> **给音频总监的录制说明**
> - **双性别组**(报务员 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 字)✓。