Files
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

182 lines
13 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.
# 《回声地窟》26 号重构台词清单(dungeon)
> 生成依据:`tools/gen_voice_dual.py` DUNGEON_LINES 段(变量名 `_DUN`,全表同一 instruct
> 常量)。本清单为 DUNGEON_LINES 的**增量替换稿**:新增 / 修改 / 删除 / 键盘变体四节。
> 交互与写作规范:[26-audio-interaction-playbook.md](../../docs/design/26-audio-interaction-playbook.md);
> 玩法正文与附录 C [16-dungeon.md](../../docs/design/16-dungeon.md);施工单
> [26-apply-dungeon.md](../../docs/design/26-apply-dungeon.md);登记副本同步
> [16-dungeon-voice-ids.md](../../docs/design/16-dungeon-voice-ids.md)。
>
> 写作检查:指令 ≤12 字;`_short` ≤6 字;叙事 ≤25 字;状态查询 ≤20 字;肯定 ≤4 字;
> 每句标类别(critical / content / hint / feedback);「重听」一律作「重新听」(多音字);
> 通用系统句与 storyline 文案逐字一致(sys_first_tap / sys_first_tap_short /
> sys_turn_teach / sys_say_again / sys_unlock_down / sys_unlock_dt)。
>
> 双性别:male=Uncle_Fu / female=Vivian;instruct 沿用 `_DUN`
> (「低沉醇厚的男声,像探窟向导,沉稳有力」/「平静清晰的女声,像探窟向导,沉稳可信」)。
> 四向滑动=移动、单击=脉冲/格挡、长按=问路是本作核心,全部新句按此口径措辞。
## 1. 新增(35 句)
```python
DUNGEON_LINES += [
# ---- 开场(§4.10:第一句 critical 指令,砍 intro_1/intro_2 规则念白)----
("d0_new", _DUN, "黑暗。点一下,听回声。"), # critical
# ---- 通用系统句(文案与 storyline 逐字一致,00 号 §5.2 阶梯表)----
("sys_first_tap", _DUN, "点一下屏幕。"), # critical
("sys_first_tap_short", _DUN, "点一下。"), # hint
("sys_turn_teach", _DUN, "听到这个声音,就是轮到你了。"), # content
("sys_say_again", _DUN, "再说一遍:"), # hint
("sys_unlock_down", _DUN, "向下滑,可以打开菜单。"), # content
("sys_unlock_dt", _DUN, "没听清,就双击,再听一遍。"), # content
# ---- 新教学链(四向滑动=移动 / 长按=问路 / 单击=格挡)----
("tut_praise", _DUN, "对。"), # feedback(肯定 ≤4 字)
("tut_move", _DUN, "朝前,滑一下。"), # content
("tut_side_move", _DUN, "向左滑,转身走。"), # content
("tut_coin", _DUN, "房里有金币,走过去捡。"), # content
("tut_help_hold", _DUN, "迷路了,按住屏幕。"), # content
("tut_parry_tap", _DUN, "听到动静,单击格挡。"), # content
("hint_swipe", _DUN, "滑一下。"), # hint(_short ≤6 字)
("btl_turn_short", _DUN, "点一下,打。"), # hint
# ---- 撞墙归因(失败表 §4.9:归因一次 + 方位真话)----
("wall", _DUN, "那边是墙。"), # feedback
("wall_dir_front", _DUN, "墙就在正前。"), # feedback
("wall_dir_left", _DUN, "墙在左手边。"), # feedback
("wall_dir_right", _DUN, "墙在右手边。"), # feedback
("wall_dir_back", _DUN, "墙在身后。"), # feedback
# ---- 无效操作解释(原则 7:每「状态×手势」一次)----
("inv_pulse", _DUN, "回声还没回来,稍等。"), # feedback
("inv_title", _DUN, "标题页,点一下就行。"), # feedback
("inv_settle", _DUN, "结算完,点一下再来。"), # feedback
("inv_drill", _DUN, "先照我说的做。"), # feedback
("inv_tel", _DUN, "格挡只要单击。"), # feedback
("inv_menu_locked", _DUN, "菜单,玩完一局解锁。"), # feedback
# ---- 菜单(00 §5.4:左右滑换项 + 单击确认;重开二次确认)----
("menu_open", _DUN, "菜单。"), # content
("menu_help", _DUN, "左右滑换项,单击确认。"), # hint
("menu_restart_confirm", _DUN, "重开就丢了这局。再点一次。"), # feedback
# ---- 迷茫接管(§4.5:L2 只放行 / L3 听我做一次)----
("sys_only_up", _DUN, "现在,只要向上滑。"), # feedback
("sys_only_down", _DUN, "现在,只要向下滑。"), # feedback
("sys_only_left", _DUN, "现在,只要向左滑。"), # feedback
("sys_only_right", _DUN, "现在,只要向右滑。"), # feedback
("sys_demo", _DUN, "听我做一次。"), # feedback
("sys_now_you", _DUN, "现在,你来。"), # feedback
]
```
## 2. 修改(4 句;旧文案废止口径见 §3)
```python
# 旧 → 新(整句替换,id 不变)
("help_explore", _DUN, "四向滑动走路,单击脉冲,长按问路。"), # 旧「单击脉冲,按住前进,左右滑转身。双击再听,上滑状态,下滑菜单。」——长按=前进/上滑=状态/下滑=菜单三口径全废;hint
("help_battle", _DUN, "听到动静单击格挡;轮到你,单击挥击。下滑逃跑。"), # 旧「敌人前摇声响时双击格挡,单击挥击。打不过就按住屏幕逃跑。」——双击格挡、按住逃跑废除;hint
("die_adv_1", _DUN, "下次,前摇声响时就单击。"), # 旧「下次,前摇声响时就双击。」——双击格挡废除(16 号 §8 停用句改词沿用 id);feedback
("die_adv_2", _DUN, "打不过,就向下滑逃跑。"), # 旧「打不过,就按住屏幕逃跑。」——长按=逃跑废除;feedback
```
## 3. 删除(25 句;音频随本轮 convert 后删除)
```python
# id:废止原因
("intro_1",) # 旧开场长句(规则念白,§4.10 反模式)→ d0_new 第一句即动手
("intro_2",) # 同上
("tut_d0",) # 「先学会用耳朵看。单击,发出声波脉冲。」→ d0_new(更短、更黑)
("tut_echo_come",) # 「听,回声回来了。」——D1 由 tut_praise + tut_front_rule 承担,不再插句
("tut_side_rule",) # 「两侧的回声,发闷是墙,空旷是通路。」——做中学:侧墙由撞墙归因句当场教
("tut_walk",) # 「按住屏幕不放,你就往前走。」——长按=前进废除(16 号 §8 停用句)
("tut_turn",) # 「左滑右滑,可以转身。」——转身并入侧移(tut_side_move)
("tut_replay",) # 「双击,再发一次脉冲,不要钱。」——双击免冷却重播废除
("tut_status",) # 「上滑,随时听自己的状态。」——上滑=状态废除(四向=移动,状态在长按)
("tut_menu",) # 「下滑,打开菜单。」——对局下滑=后退(玩法占用)
("tut_parry",) # 「听到它的动静,双击格挡。」——双击格挡废除 → tut_parry_tap
("tut_flee_hold",) # 「想逃跑,按住别松手。」——长按逃跑废除(下滑=逃跑)
("sys_menu",) # 「菜单。单击切换,双击确认。」——双击确认废止(00 §5.4)→ menu_open + menu_help
("sys_menu_resume",) # 菜单项「返回探索」——新菜单只有重开/保存/帮助三态,无「返回探索」项
("gd_pulse",) # 「单击脉冲,听听四周。」——探索等待声由环境承担,短句由 sys_first_tap_short/hint_swipe 承担
("gd_invalid",) # 「这个操作在这里用不上。」——回执+inv_* 解释一次已覆盖(原则 7)
("nav_e",) # 「往东。」——导航改说楼梯绝对方位 stair_dir_* + 接管 sys_only_*
("nav_s",) # 同上
("nav_w",) # 同上
("nav_n",) # 同上
("nav_done",) # 「到了,就是这里。」——到达播报由 evt_* / tut_stairs_on 承担
("st_gold_1",) # 「口袋空空。」——旧上滑状态链废除;元进度金位由 meta_gold_* + gold_some(band1 真话句)承担
("st_gold_2",) # 同上
("st_gold_3",) # 同上
("st_gold_4",) # 同上
```
## 4. 键盘变体(KEY_LINES["dungeon"] 增量 44 句;只改操作词,其余一字不动)
> 规则同 KEY_LINES["storyline"]:向左滑→按左方向键(四向同理);单击→按空格;
> 双击→按回车;长按→按住空格。只改操作词,其余一字不动。
```python
KEY_LINES["dungeon"] = [
("d0_new", "黑暗。按一下空格,听回声。"),
("sys_first_tap", "按空格。"),
("sys_first_tap_short", "按一下空格。"),
("sys_turn_teach", "听到这个声音,就是轮到你了。"),
("sys_say_again", "再说一遍:"),
("sys_unlock_down", "按下方向键,可以打开菜单。"),
("sys_unlock_dt", "没听清,就按回车,再听一遍。"),
("sys_continue_ask", "检测到探窟记录。按空格继续,右方向键重新开始。"),
("tut_move", "朝前,按上方向键。"),
("tut_side_move", "按左方向键,转身走。"),
("tut_coin", "房里有金币,走过去捡。"),
("tut_help_hold", "迷路了,按住空格。"),
("tut_parry_tap", "听到动静,按空格格挡。"),
("tut_stairs_on", "楼梯就在脚下。按空格,下潜。"),
("tut_attack", "现在按空格,挥拳打它。"),
("hint_swipe", "按方向键。"),
("btl_turn_short", "按空格,打。"),
("wall_dir_front", "墙就在正前。"),
("wall_dir_left", "墙在左手边。"),
("wall_dir_right", "墙在右手边。"),
("wall_dir_back", "墙在身后。"),
("inv_pulse", "回声还没回来,稍等。"),
("inv_title", "标题页,按空格就行。"),
("inv_settle", "结算完,按空格再来。"),
("inv_drill", "先照我说的做。"),
("inv_tel", "格挡只要按空格。"),
("inv_menu_locked", "菜单,玩完一局解锁。"),
("menu_help", "左右方向键换项,按空格确认。"),
("menu_restart_confirm", "重开就丢了这局。再按一次。"),
("sys_only_up", "现在,只要按上方向键。"),
("sys_only_down", "现在,只要按下方向键。"),
("sys_only_left", "现在,只要按左方向键。"),
("sys_only_right", "现在,只要按右方向键。"),
("sys_demo", "听我做一次。"),
("sys_now_you", "现在,你来。"),
("help_explore", "方向键走路,按空格发脉冲,按住空格问路。"),
("help_battle", "听到动静按空格格挡;轮到你,按空格挥击。下方向键逃跑。"),
("die_adv_1", "下次,前摇声响时就按空格。"),
("die_adv_2", "打不过,就按下方向键逃跑。"),
("settle_again", "按空格,再探一次。"),
("gd_turn", "轮到你了。按空格挥击。"),
("tut_kill", "打中了,就是这样。"),
("tut_done", "教学完了。地窟很深,小心走。"),
("tut_skip", "已跳过教学。按空格发脉冲,先听听四周。"),
]
```
> 沿用不重录(触屏/键盘通用,无操作词或操作词两态一致):st_floor_* / st_hp_* /
> st_face_* / st_threat_* / st_best_* / gold_some / evt_* / btl_*(除 btl_turn_short)/
> die_intro / die_cause_* / die_adv_3 / stair_hint_a/b / stair_dir_* / meta_gold_* /
> settle_stronger / settle_win_* / unlock_* / sys_new_run / sys_saved /
> sys_menu_save / sys_menu_help / sys_menu_restart / settings_hint / tut_front_rule /
> tut_mob / tut_praise / tut_parry_ok / tut_parry_miss。
## 生成与验收口径
- 汇总表 = 沿用 98 + 修改 4 + 新增 35 = 137 句主表(双性别 274 条);键盘变体 44 句。
- 生成:`.venv-tts/bin/python tools/gen_voice_dual.py --game dungeon --gender both`
(flock .gpu.lock);检查 `--check`;转码 `--convert`;`--only-variants` 单独补键盘变体。
- convert 后删除废止 id 音频:intro_1 / intro_2 / tut_d0 / tut_echo_come / tut_side_rule /
tut_walk / tut_turn / tut_replay / tut_status / tut_menu / tut_parry / tut_flee_hold /
sys_menu / sys_menu_resume / gd_pulse / gd_invalid / nav_e / nav_s / nav_w / nav_n /
nav_done / st_gold_1..4(male/female 共 25 id ×2 格式)。
- 落地后把 `web/dungeon/test/playtest.mjs` 的 PENDING_VOICE 清空,并把资产审计
「现有台词表 127 句」断言改为 137;`web/harness/voice_text.json` 的 dungeon 主表
与 `__key__` 变体表同步本台词(转写时长估算与 ASR 判定用)。