Files
SoundGame/docs/design/20-teahouse-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

363 lines
29 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.
# 20b · 《深夜茶馆》语音台词表(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` 在游戏正文设计单里点名,补进本表后再进生成脚本。
> **给音频总监的录制说明**
> - **旁白双性别组**(98 句):旁白只做系统/指引/教学/状态/账目/氛围客人转述,**不念客人台词**。落 `web/teahouse/audio/voice/female|male/<id>.{ogg,m4a}`,两性别 id 集合完全一致。
> - female = `Serena`,instruct 常量:`温润平和的女声,深夜茶馆掌柜,从容安稳,像守着一炉将开的水`
> - male = `Uncle_Fu`,instruct 常量:`低沉温润的男声,深夜茶馆掌柜,从容安稳,像守着一炉将开的水`
> - 两常量全表统一(含教学/泡茶/账目/置办),禁止句级变体、禁语速词(引擎 SoundTouch 变速)。
> - **NPC 平铺组**(65 句):弧线客人台词=NPC 平铺单音色、**不做双性别**,落 `web/teahouse/audio/voice/<id>.{ogg,m4a}`(引擎平铺回退命中)。说话人 5 个(≤6 上限);**氛围客人(邮差/绣娘/醉客)零 NPC 句**,由旁白转述(amb_1..3)——成本与区分度双省。区分度风险逐人标注:
> | 角色 | speaker | instruct 常量 | 区分度风险 |
> |---|---|---|---|
> | 老周(58 岁修车师傅) | `Eric` | `沙哑洪亮的男声,修车铺老师傅,大嗓门,直爽热乎` | 低 |
> | 苏晚(29 岁夜班护士) | `Vivian` | `轻柔平稳的女声,夜班护士,温和疲惫,吐字干净` | 低 |
> | 陈拾(17 岁高三生) | `Dylan` | `年轻清亮的男声,高三学生,紧张,语速快,有点怯` | 低 |
> | 白老先生(74 岁) | `Uncle_Fu` | `苍老缓慢的男声,独居老先生,慢条斯理,带茶韵` | **中**:与 male 旁白同 speaker——sig_bai 前缀+苍老腔+人称差(客人第一人称/旁白第三人称),试听确认 |
> | 何雨眠(36 岁的姐) | `Serena` | `低哑爽利的女声,夜班出租车司机,利落,带笑带倦` | **中**:与 female 旁白同 speaker——sig_he 前缀+人称差+句间 0.6s,试听确认 |
> - **声音演技核心**:晚 2 反应句(话头展开)与晚 3 结局句(A 暖 / B 平 / C 涩 三方向)是本作表演高潮;情绪全部写在句内文本(省略号/破折号引导),instruct 恒定不变(音色漂移禁令)。
> - **数字规避**:进度/口碑/存款/进账/晚数全部分档整句(st_guest 5 档 / st_rep 4 档 / st_purse 3 档 / close_coin 3 档 / night 6 档);**客人序号不拼接**(st_guest 整句);价钱写死在整句里(十五文/二十文/十二文)。
> - **称呼中性**:旁白称玩家「你」;NPC 称「小掌柜/老板/师傅」(店主人称中性,旁白性别随设置变化不影响客人台词)。
> - **多音字自查**:见文末表(已排雷:全表「还」只用 hái 义、无「血爪挨壳酽」、「重听」一律写「重新听/再听一遍」、「空落落」改「空荡荡」)。
> - **键盘变体(V 组)**:操作提示句在 `gesture.inputMode()==='key'` 时改播 `_k` 变体(touch 回基础句);变体与基础句 id 一一对应、集中登记见文末 V 组。
> - 管线:`tools/gen_voice_dual.py` 照录(SPEAKERS 需新增 teahouse 行 + TEAHOUSE_NPC 平铺表);生成后 `--convert` 落盘 + `tools/check_all_assets.py` 终检(双格式配对、双性别集合一致)。
## G0 组 · 系统/菜单/帮助(旁白 ×10)
| id | 台词全文 | 触发/语境 |
|---|---|---|
| `sys_menu` | 菜单。单击切换,双击确认。 | 下滑呼出模态菜单 |
| `sys_menu_resume` | 回到堂前。 | 菜单项 |
| `sys_menu_upg` | 打烊置办。 | 菜单项(仅 CLOSE 态) |
| `sys_menu_save` | 保存并回大厅。 | 菜单项 |
| `sys_menu_help` | 重新听帮助。 | 菜单项 |
| `sys_saved` | 进度已保存。 | 存档写入后 |
| `settings_hint` | 音色、语速、背景音乐,请回大厅修改。 | 菜单内设置提示 |
| `sys_help` | 左右滑选茶,单击定下。听水声,双击提壶;滴答密,双击出汤。上滑状态,下滑菜单。 | 菜单内上滑 / 帮助项 |
| `sys_continue_ask` | 检测到没打烊的茶馆。单击继续,右滑两次重开新店。 | 有存档进游戏(TITLE) |
| `sys_reset_ask` | 重开新店?口碑和存款都从头来。再右滑一次,确认。 | TITLE 右滑(二次确认) |
## G1 组 · 开场/教学(旁白 ×17;water_*/steep_* 教学与正片共用)
| id | 台词全文 | 触发/语境 |
|---|---|---|
| `intro_1` | 巷子最深处,有一盏亮到后半夜的灯。 | 首晚开场链 1 |
| `intro_2` | 你接手了这家茶馆。今晚,是它易主后的头一晚。 | 开场链 2 |
| `intro_3` | 泡茶三步:选茶、候汤、出汤。手上的事,耳朵说了算。 | 开场链 3 |
| `tut_d0` | 先看茶柜。左右滑,一罐一罐听。 | D0 前(豁免教学起点) |
| `tut_tea` | 单击,选定这罐茶。 | D1 前 |
| `tut_water` | 灶上坐水。泡泡细密是将沸,咕嘟连片是滚透——听到细密,双击提壶。 | D2 前(豁免 E1 教学;R1-F1 对照口径前移) |
| `tut_steep` | 注水,闷泡。滴答由稀到密,密起来就是将好——双击,出汤。 | D3 前(R1-F1 对照口径前移) |
| `tut_serve` | 茶好了。单击,端出去。 | D4 前 |
| `tut_status` | 上滑,听今晚的局面:第几位客人,口碑如何;客人要的茶,上滑灶上随时再听。 | D5 前(R1-F3 需求重播入口明示) |
| `tut_done` | 都会了。往后每一晚,都这么泡。 | D6(教学完成) |
| `tut_skip` | 已跳过教学。左右滑选茶,单击选定,双击动手。 | 下滑跳过教学 |
| `water_early` | 急了,水还没醒透。这一步,偏了。 | 候汤早于窗(教学+正片) |
| `water_ok` | 正是时候。 | 候汤入窗 |
| `water_late` | 水滚老了。这一步,偏了。 | 候汤晚于窗/未出手 |
| `steep_early` | 出急了,茶还睡着。这一步,偏了。 | 闷泡早于窗 |
| `steep_ok` | 出汤,正好。 | 闷泡入窗 |
| `steep_late` | 闷过了,汤要发苦。这一步,偏了。 | 闷泡晚于窗/未出手 |
## G2 组 · 状态/茶名(旁白 ×18;茶名句=每罐口诀随身播报,知识单源)
| id | 台词全文 | 触发/语境 |
|---|---|---|
| `st_guest_1` | 今晚第一位客人。 | 状态链(当前客序 1) |
| `st_guest_2` | 今晚第二位客人。 | 客序 2 |
| `st_guest_3` | 今晚第三位客人。 | 客序 3 |
| `st_guest_4` | 今晚第四位客人。 | 客序 4 |
| `st_guest_5` | 今晚第五位客人。 | 客序 5(N6+ 超员兜底) |
| `st_rep_1` | 口碑还没立起来,街坊不知道巷子里有这家茶馆。 | 口碑 0-4(跨档播报+状态链) |
| `st_rep_2` | 有了回头客,口碑立住脚了。 | 口碑 5-11 |
| `st_rep_3` | 巷子口都在传你的茶,小有名气。 | 口碑 12-19 |
| `st_rep_4` | 一盏难求,茶客口耳相传。 | 口碑 ≥20 |
| `st_purse_1` | 钱箱见底,不到十文。 | 存款 <10 |
| `st_purse_2` | 钱箱周转得开,不愁明日开销。 | 存款 10-24 |
| `st_purse_3` | 手头宽裕,二十五文往上。 | 存款 ≥25 |
| `tea_longjing` | 龙井。绿茶性鲜:水将沸就提壶,出汤要快。 | 选茶预览(初始柜) |
| `tea_moli` | 茉莉花茶。香靠滚水激:水滚透再冲,出汤要快。 | 选茶预览(初始柜) |
| `tea_tieguanyin` | 铁观音。乌龙要滚水才醒,闷到滴答密了再出汤。 | 选茶预览(初始柜) |
| `tea_dianhong` | 滇红。红茶性暖,滚水冲,经得住闷,越闷越醇。 | 选茶预览(初始柜) |
| `tea_puer` | 普洱。老茶经泡:滚水才泡得开,多闷一会儿更醇。 | 选茶预览(茶柜扩容后) |
| `tea_yinzhen` | 白毫银针。嫩芽金贵:水将沸就提,闷到滴答密。 | 选茶预览(茶柜扩容后) |
## G3 组 · 泡茶衔接(旁白 ×5)
| id | 台词全文 | 触发/语境 |
|---|---|---|
| `brew_start` | 回到灶前。 | 每次进 BREW(可跳句) |
| `res_good` | 这一盏,泡得地道。 | 判定=好茶(不可跳) |
| `res_plain` | 这一盏,泡得中平。 | 判定=普通(不可跳) |
| `res_wrong` | 这一盏,泡岔了——不是客人今晚要的那口。 | 判定=错茶(不可跳,真话归因) |
| `serve_link` | 你把茶端了过去。 | 上茶转场 |
## G4 组 · 反应过场/氛围客人(旁白 ×9)
| id | 台词全文 | 触发/语境 |
|---|---|---|
| `bridge_good` | 客人把这盏茶喝得很慢,像是就着茶,把心事也喝顺了。 | 弧线客好茶反应句后 |
| `bridge_plain` | 茶喝完了,客人点点头,起身。 | 普通反应后 |
| `bridge_wrong` | 那盏茶凉在桌上,客人走的时候,没回头。 | 错茶反应后 |
| `amb_1` | 车铃一响,晚班的邮差探进头来。老规矩:茉莉花茶,要滚烫的。 | 氛围客·邮差点单(旁白转述) |
| `amb_2` | 门帘一挑,绣坊的阿姐收了工,想喝一盏清火的龙井。 | 氛围客·绣娘点单 |
| `amb_3` | 巷口的醉汉扶着门框,含含糊糊,只嚷嚷要最浓的滇红。 | 氛围客·醉客点单 |
| `amb_react_good` | 他喝得很慢,末了多搁下两文。 | 氛围客好茶(打赏 2 文) |
| `amb_react_plain` | 他喝完,点点头,搁下茶钱。 | 氛围客普通 |
| `amb_react_wrong` | 他抿了一口,搁下半盏,晃出去了。 | 氛围客错茶(免单) |
## G5 组 · 打烊/经济/置办(旁白 ×16)
| id | 台词全文 | 触发/语境 |
|---|---|---|
| `close_open` | 客人走尽了。收壶,打烊。 | 打烊链首(settle 签名同点) |
| `close_coin_1` | 今晚进账,不到十五文。 | 当晚收入 <15 |
| `close_coin_2` | 今晚进账,十五到二十四文。 | 收入 15-24 |
| `close_coin_3` | 今晚进账,二十五文往上。 | 收入 ≥25 |
| `rent_due` | 今天是房钱的日子,这一回,二十文。 | 房租夜链段(每 3 晚) |
| `rent_ok` | 房钱交清,秦婶没多话。 | 扣款足额 |
| `rent_short` | 房钱不够,差的那几文先记在账上。秦婶撂下一句:下回一起算。 | 扣款不足→欠账(danger 签名同点;不可跳) |
| `debt_clear` | 旧账清了,秦婶把那一页翻了过去。 | 还清欠账 |
| `st_debt_1` | 账上,还欠着秦婶的钱。 | 打烊链内 debt>0 时 |
| `settle_night` | 熄了灯,这一晚就过去了。单击,睡下。 | 打烊链尾(链锁解除后单击生效;键盘态播 settle_night_k) |
| `upg_open` | 要添置点什么?左右滑看,单击买定。 | CLOSE 菜单「打烊置办」二级列表入口 |
| `upg_cabinet` | 茶柜扩容,十五文。往后普洱、白毫银针,都上柜。 | 置办选项 1(报价=扣款) |
| `upg_teaware` | 添一副新茶具,十二文。手上更准,火候窗更宽。 | 置办选项 2 |
| `upg_sign` | 立一块招牌,二十文。要口碑立得住——十二分往上才挂。 | 置办选项 3 |
| `upg_none` | 眼下的钱和账,还置办不起。改日再说。 | 钱不够/有欠账(真话) |
| `upg_lock` | 招牌还挂不得:口碑得十二分往上,欠账也得清。 | 招招牌条件不足(真话) |
## G6 组 · 看门狗/纠错/复述(旁白 ×6)
| id | 台词全文 | 触发/语境 |
|---|---|---|
| `gd_serve` | 客人还在堂前。上滑,再听一遍他要的茶。 | SERVE 无操作轨 L1(10s,full,idle-only) |
| `gd_brew` | 还在灶上,听声动手,双击。 | BREW-TEA 无操作轨 L1(12s;时机窗内不播,只 earcon) |
| `gd_close` | 账报完了。单击,熄灯睡下。 | CLOSE 链完无操作 L1(15s) |
| `gd_invalid` | 这个操作,这里用不上。 | 无效手势纠错(onceKey 同局 1 次) |
| `hint_water` | 水听两遍:泡泡细密是将沸,咕嘟连片是滚透。 | 无进展轨 L2(90s,泡茶口诀)/菜单恢复 WATER 复述 |
| `recap_go` | 接着张罗。 | 中断复述链尾 |
## G7 组 · 晚数/章节(旁白 ×7)
| id | 台词全文 | 触发/语境 |
|---|---|---|
| `night_1` | 头一晚。灯亮了,水坐上,茶馆开门。 | N1 开场(lamp_light 后) |
| `night_2` | 第二晚。老客们,已经认得这条巷子。 | N2 开场 |
| `night_3` | 第三晚。今天,是收房钱的日子。 | N3 开场(预告房租) |
| `night_4` | 第四晚。熟客进门,都不用问位子了。 | N4 开场 |
| `night_5` | 第五晚。这一章的夜,快要听全了。 | N5 开场 |
| `night_more` | 又一夜。灯还亮着,茶还热着。 | N6+ 开场(无尽营业) |
| `chapter_end` | 第一章完。这条巷子的夜,你都听过了。茶馆的故事,还长。 | N5 打烊链内(settle_night 前) |
## V 组 · 键盘变体(旁白 ×10;`gesture.inputMode()==='key'` 时替代同名基础句)
| id | 替代基础句 | 台词全文 |
|---|---|---|
| `sys_help_k` | sys_help | 方向键选茶,空格定下。听水声,回车提壶;滴答密,回车出汤。上键状态,下键菜单。 |
| `tut_d0_k` | tut_d0 | 先看茶柜。左右方向键,一罐一罐听。 |
| `tut_tea_k` | tut_tea | 空格,选定这罐茶。 |
| `tut_water_k` | tut_water | 灶上坐水。泡泡细密是将沸,咕嘟连片是滚透——听到细密,回车提壶。 |
| `tut_steep_k` | tut_steep | 注水,闷泡。滴答由稀到密,密起来就是将好——回车,出汤。 |
| `tut_serve_k` | tut_serve | 茶好了。空格,端出去。 |
| `gd_serve_k` | gd_serve | 客人还在堂前。上键,再听一遍他要的茶。 |
| `gd_brew_k` | gd_brew | 还在灶上,听声动手,回车。 |
| `settle_night_k` | settle_night | 熄了灯,这一晚就过去了。按空格,睡下。 |
| `upg_open_k` | upg_open | 要添置点什么?左右方向键看,空格买定。 |
## N1 组 · 老周(NPC Eric 平铺 ×13,sig_zhou 前缀;弧线=与儿子的心结)
| id | 台词全文 | 线索标签 |
|---|---|---|
| `zhou_enter` | 小掌柜!老位置,还给我留着呢吧? | 进门句(三晚复用) |
| `zhou_o1` | 修了一天车,嗓子眼里全是机油味。就你那龙井,给我去去火。 | tea=longjing(明示,教学保送) |
| `zhou_r1_good` | 嚯!就是这个味儿!多谢啦,小掌柜。 | 晚1 好茶反应 |
| `zhou_r1_plain` | 嗯……还行。今天手底下,差了点意思。 | 晚1 普通 |
| `zhou_r1_wrong` | 这是我要的龙井吗?……算了算了,凑合喝。 | 晚1 错茶 |
| `zhou_o2` | 今天冷。来盏顶饱的、浓的,扛饿又扛冻。 | tea=dianhong(浓暖→红茶久闷) |
| `zhou_r2_good` | 对喽,暖到脚后跟了!跟你说——我儿子今天来电话了。 | 晚2 好(话头开) |
| `zhou_r2_plain` | 茶是茶,水是水,差点火候。儿子的事,改天再说吧。 | 晚2 普通(留白钩子) |
| `zhou_r2_wrong` | ……今晚这盏不对。儿子的事,不说也罢。 | 晚2 错 |
| `zhou_o3` | 今晚就想要头一回那盏。一样的,再来一份。 | tea=longjing(回环) |
| `zhou_e_a` | 明天铺子歇一天,儿子回来帮我盘货。这盏茶,记你头上了! | 结局 A(sum≥2,暖) |
| `zhou_e_b` | 电话里跟儿子拌了两句嘴。没事——茶还热着,日子还长。 | 结局 B(平) |
| `zhou_e_c` | 铺子我想关了,儿子叫我过去帮工。茶馆的灯,替我多亮会儿。 | 结局 C(涩) |
## N2 组 · 苏晚(NPC Vivian 平铺 ×13,sig_su 前缀;弧线=夜班去留)
| id | 台词全文 | 线索标签 |
|---|---|---|
| `su_enter` | 请问……还营业吗?我刚下夜班。 | 进门句 |
| `su_o1` | 胃里发凉,人空荡荡的。想要一盏暖的,别太冲,喝完好睡。 | tea=dianhong(暖不冲) |
| `su_r1_good` | 好暖……像被窝里塞了个汤婆子。谢谢你。 | 晚1 好 |
| `su_r1_plain` | 嗯,是热乎的。今晚,凑合能睡。 | 晚1 普通 |
| `su_r1_wrong` | 这盏……有点寒。没关系,是我没说清。 | 晚1 错 |
| `su_o2` | 今晚换个口味,想要香的。可我还得眯一会儿才接班。 | tea=moli(香+快出汤不浓) |
| `su_r2_good` | 真香啊……今夜走了位老人,家属拉着我的手道谢。这盏茶,敬他们。 | 晚2 好 |
| `su_r2_plain` | 茶还行。今夜病房平静,平静得累人。 | 晚2 普通 |
| `su_r2_wrong` | 香气没出来……像我今晚的运气。算了。 | 晚2 错 |
| `su_o3` | 最后一晚了,明天起不用值夜班。还是头一回那种,暖的。 | tea=dianhong(回环) |
| `su_e_a` | 我调去白天班啦,还能常来。给你带我们科的喜糖。 | 结局 A |
| `su_e_b` | 还在犹豫,夜班再值一季。好在这盏茶,够我撑到天亮。 | 结局 B |
| `su_e_c` | 我递了辞呈,往后去哪还没想好。但今晚茶馆的灯,我记住了。 | 结局 C |
## N3 组 · 陈拾(NPC Dylan 平铺 ×13,sig_shi 前缀;弧线=大考)
| id | 台词全文 | 线索标签 |
|---|---|---|
| `shi_enter` | 老板……还有位子吗?我背单词,背得头疼。 | 进门句 |
| `shi_o1` | 想喝点香的提提神,但别太浓——喝完回家还得睡,明天早读。 | tea=moli(香不浓) |
| `shi_r1_good` | 好香!脑子清醒了。这是我攒的早饭钱……值了。 | 晚1 好 |
| `shi_r1_plain` | 还行吧。单词它还是不进脑子。 | 晚1 普通 |
| `shi_r1_wrong` | 有点苦……没事,我泡的方便面更苦。 | 晚1 错 |
| `shi_o2` | 模拟考砸了,心里烧得慌。想喝口最清火的。 | tea=longjing(清火→绿) |
| `shi_r2_good` | 凉丝丝的,火气下去一半。老板,你说我还能考上吗?……算了,当我没问。 | 晚2 好 |
| `shi_r2_plain` | 茶一般,我也一般,挺配的。 | 晚2 普通 |
| `shi_r2_wrong` | 不是这个味儿……回家还得接着刷题。 | 晚2 错 |
| `shi_o3` | 考完了!今晚想喝口金贵的,犒劳自己。 | tea=yinzhen(金贵→银针,需茶柜) |
| `shi_e_a` | 成绩出来了,比模拟考高了四十多分!这盏茶,算我请全茶馆的! | 结局 A |
| `shi_e_b` | 考完了,心里反倒空荡荡的。去哪读书,听爸妈安排吧。 | 结局 B |
| `shi_e_c` | 考砸了,茶也不对味……但至少,这儿的灯一直亮着。 | 结局 C |
## N4 组 · 白老先生(NPC Uncle_Fu 平铺 ×13,sig_bai 前缀;弧线=老伴忌日)
| id | 台词全文 | 线索标签 |
|---|---|---|
| `bai_enter` | 小掌柜,给我的紫砂壶,留个座。 | 进门句 |
| `bai_o1` | 晚饭积了食。要一盏刮油的、经得住泡的,我喝得慢。 | tea=tieguanyin(刮油经泡→乌龙) |
| `bai_r1_good` | 好茶,有回甘。像我家老婆子腌的萝卜干,越嚼越有味。 | 晚1 好 |
| `bai_r1_plain` | 嗯,茶汤尚可。人老了,舌头也钝了。 | 晚1 普通 |
| `bai_r1_wrong` | 这不是我要的那口。不怪你——是我话没说全。 | 晚1 错 |
| `bai_o2` | 昨儿那盏不错。今晚想喝口陈的,越陈越好。 | tea=puer(陈→普洱,需茶柜) |
| `bai_r2_good` | 陈味出来了。四十年前,我跟老婆子初见,就是一盏普洱。 | 晚2 好(故事开) |
| `bai_r2_plain` | 茶汤淡了些。故事嘛,等茶好了再说。 | 晚2 普通(留白钩子) |
| `bai_r2_wrong` | ……不是我惦记的那口。罢了,回家睡了。 | 晚2 错 |
| `bai_o3` | 就馋那口陈味。老伙计,看你的手艺了。 | tea=puer(回环) |
| `bai_e_a` | 明儿我把棋盘搬来,你这儿灯亮,我天天来摆谱——就当,她还在看着。 | 结局 A |
| `bai_e_b` | 回去还是那间空屋子。不过睡前有盏茶垫着,梦能沉一点。 | 结局 B |
| `bai_e_c` | 下个月,我搬去养老院了。这把紫砂壶,留给茶馆吧。 | 结局 C |
## N5 组 · 何雨眠(NPC Serena 平铺 ×13,sig_he 前缀;弧线=攒学费)
| id | 台词全文 | 线索标签 |
|---|---|---|
| `he_enter` | 师傅,门口能停车不?——哦,我是说,喝茶。 | 进门句 |
| `he_o1` | 跑了一宿,眼睛发涩,脑子发木。要一盏清口的,不要浓的。 | tea=longjing(清口不浓→绿快出汤) |
| `he_r1_good` | 清亮,像拿凉水洗了把脸。今晚最后一单,稳了。 | 晚1 好 |
| `he_r1_plain` | 一般吧,能开就行。 | 晚1 普通 |
| `he_r1_wrong` | 不是这口……算了,我还得赶路。 | 晚1 错 |
| `he_o2` | 今晚不打算睡了,还要跑单。要最浓的,越浓越好。 | tea=puer(最浓→普洱久闷,需茶柜) |
| `he_r2_good` | 得劲儿!闺女的照片就贴在方向盘上——再跑俩月,学费就齐了。 | 晚2 好 |
| `he_r2_plain` | 不够劲,今晚里程表怕是要难看。 | 晚2 普通 |
| `he_r2_wrong` | 淡了。算了,我赶时间。 | 晚2 错 |
| `he_o3` | 最后一趟车收工。想要一盏柔的,收收心。 | tea=yinzhen(柔→银针,需茶柜) |
| `he_e_a` | 学费攒齐了,明天去看闺女。老师说她考了年级前十——这盏,我慢慢喝。 | 结局 A |
| `he_e_b` | 钱还差一点,再跑一个月。茶馆这盏灯,是我每晚的路标。 | 结局 B |
| `he_e_c` | 我把夜班退了。闺女在电话里说:妈,钱够用。这盏茶,我喝得最慢。 | 结局 C |
---
**合计:163 句 ≤170 上限**(旁白 98 ×2 性别 = 196 条 + NPC 平铺 65 条 = **261 条音频** ×2 格式 = 522 文件)。
分组账:G0 10 + G1 17 + G2 18 + G3 5 + G4 9 + G5 16 + G6 6 + G7 7 + V 10 = 98(旁白);N1-N5 各 13 = 65(NPC)。
链路汇总:
- 客人链 = `door_bell → steps_in → sig_* → enter → o_N`(点单毕自动进 BREW);
- 判定链 = `water_early/ok/late → steep_early/ok/late → res_good/plain/wrong → serve_link → sig_* → 反应/结局句 → bridge_*`(+coin/rep 音效);
- 状态链 = `[BREW:sig_*+o_N 重播] → st_guest_n → st_rep_m → st_purse_k`;
- 打烊链 = `close_open → close_coin_档 → [rent_due→rent_ok/rent_short] → [st_debt_1] → [chapter_end] → settle_night`(800ms 死窗+链锁);
- 中断复述链 = `st_guest_n → st_rep_m → [sig_*+o_N] → recap_go`。
矩阵对照与触发逻辑见 [20-teahouse.md](20-teahouse.md) §3/§6/§7;资产规模核对见其 §8。
### 多音字/发音风险自查(文本层已排雷+待试听清单)
| 位置 | 原文 | 风险 | 建议换写法 |
|---|---|---|---|
| tut_steep / steep_late 等 | 闷泡、闷到滴答密、闷过了 | 「闷」mēn/mèn(茶艺读 mèn) | 误读时改「扣着盖子泡」「浸过头」 |
| steep_early | 茶还睡着 | 「着」zhe/zháo(此处 zháo,入睡义) | 误读时改「茶还没醒透」 |
| bridge_good | 就着茶 | 「着」zhuó | 误读时改「配着茶」 |
| amb_2 | 门帘一挑 | 「挑」tiǎo | 误读时改「门帘一掀」 |
| he_r2_good | 得劲儿 | 「得」děi(口语) | 误读时改「真带劲」 |
| shi_r1_good / upg_lock | 攒的早饭钱 / 攒足了 | 「攒」zǎn/cuán | 误读时改「省下的早饭钱」「攒够」→「凑够」 |
| zhou_o3 / su_o3 | 头一回那盏 / 头一回那种 | 「回」口语连读 | 低风险,试听确认 |
| 多处 | 还在/还有/还得/还是 | 「还」全表只用 hái 义(已排 huán 义句) | — |
| 已排雷 | 全表 | 无「血爪挨壳酽」;「重听」一律写「重新听/再听一遍」;「空落落」统一「空荡荡」;数字全部整句写死(十五/二十/二十五/十二),无拼接 | — |
---
## R2 增量 · 26 号深度重构(2026-10)
> 施工单见 [26-apply-teahouse.md](26-apply-teahouse.md);清单副本
> `tools/voice_lines_26/teahouse.md`(与下表逐字一致,并入 `tools/gen_voice_dual.py`
> 时照抄)。本轮口径:废除「双击提壶/双击出汤/双击动手/单击切换+双击确认」,
> tap 动作词统一「点一下」;上表含旧口径的句子按本节重录或停用。
### 新增(旁白 ×14,`_TEA`)
| id | 台词全文 | 类别 / 触发 |
|---|---|---|
| `sys_first_tap` | 点一下屏幕。 | critical,开场第一句(≤3s) |
| `sys_tap_start` | 点一下开始。 | critical,已 drillDone 玩家开场 |
| `sys_turn_teach` | 听到这个声音,就是轮到你了。 | content,「轮到你」状态声首现教学 |
| `sys_say_again` | 再说一遍: | hint 前缀,主动重听(引擎 hints.js 播出) |
| `sys_unlock_up` | 想知道自己在哪,就向上滑。 | content,阶梯阶段 1(引擎 novice.js 播出) |
| `sys_unlock_down` | 向下滑,可以打开菜单。 | content,阶梯阶段 2(引擎 novice.js 播出) |
| `sys_unlock_dt` | 没听清,就双击,再听一遍。 | content,阶梯阶段 3(引擎 novice.js 播出) |
| `wp_tap_short` | 点一下。 | hint,intro/reopen/close/drill 等待点 _short 档 |
| `wp_tea_full` | 左右滑选茶。点一下定。 | hint,TEA 等待点 full 档 |
| `wp_tea_short` | 左右滑。 | hint,TEA 等待点 _short 档 |
| `wp_up_short` | 向上滑。 | hint,D5 教学等待点 _short 档 |
| `inv_up_locked` | 上滑还没解锁。先点一下继续。 | feedback,up 未解锁首次解释 |
| `inv_down_locked` | 菜单,玩完一晚解锁。点一下继续。 | feedback,down 未解锁首次解释 |
| `inv_serve_swipe` | 现在不用滑。听客人把话说完。 | feedback,堂前空档滑动首次解释 |
(water/steep 时机等待点 full/short 置空不新增——分层铁律:窗内只 earcon,
26-apply-teahouse.md 偏差 1。)
### 修改(重录 ×10,id 不变)
| id | 旧文(关键词) | 新文 |
|---|---|---|
| `sys_menu` | 单击切换,双击确认 | 菜单。左右滑换项,点一下确认。 |
| `sys_help` | 双击提壶/双击出汤 | 左右滑选茶,点一下定下。听水声,点一下提壶;滴答密,点一下出汤。上滑问状态,下滑开菜单。 |
| `sys_continue_ask` | 单击继续 | 检测到没打烊的茶馆。点一下继续,右滑两次重开新店。 |
| `tut_tea` | 单击,选定 | 点一下,选定这罐茶。 |
| `tut_water` | 双击提壶 | 灶上坐水。泡泡细密是将沸,咕嘟连片是滚透——听到细密,点一下提壶。 |
| `tut_steep` | 双击,出汤 | 注水,闷泡。滴答由稀到密,密起来就是将好——点一下,出汤。 |
| `tut_serve` | 单击,端出去 | 茶好了。点一下,端出去。 |
| `settle_night` | 单击,睡下 | 熄了灯,这一晚就过去了。点一下,睡下。 |
| `upg_open` | 单击买定 | 要添置点什么?左右滑看,点一下买定。 |
| `gd_close` | 单击,熄灯睡下 | 账报完了。点一下,熄灯睡下。 |
### 删除(停用 ×5,游戏零引用)
| id | 旧文(关键词) | 停用原因 |
|---|---|---|
| `intro_3` | 泡茶三步…… | §4.10 开场零规则念白(教学七步跟练承担) |
| `tut_status` | 上滑,听今晚的局面 | D5 改 wp_up_short + 状态链实操 |
| `tut_skip` | 已跳过教学……双击动手 | 教学跳过废除(90s 替打 + drillDone 直进) |
| `gd_serve` | 客人还在堂前。上滑…… | 上滑状态链(再说一遍:+点单句)承担 |
| `gd_brew` | 还在灶上……双击 | 时间线自动判定 + L3 替打承担;双击旧口径 |
### V 组键盘变体同步(10 对 → 19 对)
新增 11:sys_first_tap「按空格。」/ sys_tap_start「按空格,开始。」/ sys_unlock_up
「想知道自己在哪,就按上方向键。」/ sys_unlock_down「按下方向键,可以打开菜单。」/
sys_unlock_dt「没听清,就按回车,再听一遍。」/ wp_tap_short「按一下空格。」/
wp_tea_full「左右方向键选茶。空格定。」/ wp_tea_short「左右方向键。」/
wp_up_short「按上方向键。」/ inv_up_locked「上方向键还没解锁。先按空格继续。」/
inv_down_locked「菜单,玩完一晚解锁。按空格继续。」
重录 5(旧含单击/双击):sys_menu「菜单。左右方向键换项,空格确认。」/ sys_help
「方向键选茶,空格定下。听水声,空格提壶;滴答密,空格出汤。上键问状态,下键开菜单。」/
sys_continue_ask「检测到没打烊的茶馆。空格继续,右方向键两次重开新店。」/ tut_water
「……听到细密,空格提壶。」/ tut_steep「……空格,出汤。」
沿用 5:tut_d0 / tut_tea / tut_serve / settle_night / upg_open。摘除 2:gd_serve / gd_brew。
**账目更新:旁白 98 − 5 + 14 = 107 句(×2 性别 214 条)+ NPC 65 = 279 条音频;
V 组 10 → 19 对。** NPC 平铺 65 句不动。