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

13 KiB
Raw Permalink Blame History

《回声地窟》26 号重构台词清单(dungeon)

生成依据:tools/gen_voice_dual.py DUNGEON_LINES 段(变量名 _DUN,全表同一 instruct 常量)。本清单为 DUNGEON_LINES 的增量替换稿:新增 / 修改 / 删除 / 键盘变体四节。 交互与写作规范:26-audio-interaction-playbook.md; 玩法正文与附录 C 16-dungeon.md;施工单 26-apply-dungeon.md;登记副本同步 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 句)

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)

# 旧 → 新(整句替换,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 后删除)

# 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"]:向左滑→按左方向键(四向同理);单击→按空格; 双击→按回车;长按→按住空格。只改操作词,其余一字不动。

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 判定用)。