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 置完成。
182 lines
13 KiB
Markdown
182 lines
13 KiB
Markdown
# 《回声地窟》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 判定用)。
|