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

108 lines
10 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.
# voice_lines_26 · 《暗码》(cipher)26 号深度重构台词清单
> 设计单正文见 [docs/design/26-apply-cipher.md](../../docs/design/26-apply-cipher.md)(玩法正文
> [19-cipher.md](../../docs/design/19-cipher.md) 附录 C);交互权威 26 号手册。本文件是 R4 改造的
> 台词增量清单,管线路径 `tools/gen_voice_dual.py` 的 `CIPHER_WIND_LINES`
>(两表一致铁律:并入时逐字照抄)。
>
> 音色规则:**系统/交互层句子全部走 `_CIPHER_WIND` 北风组**(北风电台=上线联络
> +系统音,与 radio 的 PROD 导播组同型;既有 sys_skip/sys_menu_* 均在该组);
> 剧情句沿用原组不动(报务员 OP `CIPHER_OP_LINES` / 处长 `CIPHER_NPC` 平铺)。
> 写作口径(00 §3 / 26 §4.8):指令 ≤12 字;`_short` 档 ≤6 字只留动作;叙事 ≤25 字;
> 肯定 ≤4 字;每句标类别(critical / content / hint / feedback),`critical` 须 <3s。
> 多音字规避:全表无「重听」(一律「重新听」/「再听一遍」)。
> 通用系统句与 STORYLINE_LINES 的 sys_* 段**逐字一致**(sys_first_tap「点一下屏幕。」/
> sys_first_tap_short「点一下。」/ sys_turn_teach「听到这个声音,就是轮到你了。」/
> sys_say_again「再说一遍:」/ sys_unlock_up / sys_unlock_down / sys_unlock_dt 等)。
> 键盘变体措辞照 KEY_LINES["storyline"](「按空格」「左右方向键」「按回车」),
> 并遵守 cipher 既有变体惯例:点一下/单击 → 按空格;双击 → 按回车;滑 → 方向键。
## 一、新增(20 句 × 双性别,`_CIPHER_WIND`)
游戏静态引用 16 条 + 引擎侧 4 条(sys_say_again 由 engine/hints.js 重听前缀播出、
sys_unlock_up/down/dt 由 engine/novice.js teachLine 播出,资产同样落本游戏目录):
("sys_first_tap", _CIPHER_WIND, "点一下屏幕。") <!-- critical,开场第一句(≤3s,critical 不可打断;首夜 newNight 链首) -->
("sys_first_tap_short", _CIPHER_WIND, "点一下。") <!-- hint,intro 等待点 _short 档(full=null:指令句刚说过) -->
("sys_turn_teach", _CIPHER_WIND, "听到这个声音,就是轮到你了。") <!-- content,「轮到你」等待声首现教学(全局一次,首夜开场第一下单击后) -->
("sys_hint_continue_full", _CIPHER_WIND, "单击,继续。") <!-- hint,continue 等待点 full 档(13s) -->
("sys_hint_continue_short", _CIPHER_WIND, "单击。") <!-- hint,continue 等待点 _short 档(30s;settle _short 复用同资产) -->
("sys_hint_choice_short", _CIPHER_WIND, "左右滑,选。") <!-- hint,choice 等待点 _short 档(25s 台账降档后首档) -->
("sys_hint_again_full", _CIPHER_WIND, "单击,重新开始。") <!-- hint,settle 等待点 full 档 / 结算态左右滑解释句(invalidHint 复用) -->
("gd_tune1_short", _CIPHER_WIND, "左右滑。") <!-- hint,decode 等待点 _short 档(25s);menu 等待点 _short 复用同资产 -->
("cf_hint_full", _CIPHER_WIND, "单击,定下这个词。") <!-- hint,confirm 等待点 full 档(10s,19 号附录 C §5 原句) -->
("cf_hint_short", _CIPHER_WIND, "单击。") <!-- hint,confirm 等待点 _short 档(20s) -->
("sys_only_choice", _CIPHER_WIND, "现在,只要左右滑。") <!-- hint,迷茫 L2 抉择点缩小选择(restrictLine) -->
("sys_demo_continue", _CIPHER_WIND, "听我做一次。") <!-- hint,迷茫 L3 演示前缀(intro/continue:替玩家走一步) -->
("sys_demo_choice", _CIPHER_WIND, "左右滑,都可以。现在你来。") <!-- hint,迷茫 L3 抉择点演示(不替玩家做有后果的选) -->
("sys_say_again", _CIPHER_WIND, "再说一遍:") <!-- hint 前缀,主动重听(全项目一句,每游戏各存一份资产) -->
("sys_unlock_up", _CIPHER_WIND, "想知道自己在哪,就向上滑。") <!-- content,手势阶梯阶段 1 教学句(T1 译对挂 dv1_right 揭晓链尾) -->
("sys_unlock_down", _CIPHER_WIND, "向下滑,可以打开菜单。") <!-- content,手势阶梯阶段 2 教学句(首局结局链尾) -->
("sys_unlock_dt", _CIPHER_WIND, "没听清,就双击,再听一遍。") <!-- content,手势阶梯阶段 3 教学句(阶段 3=重听电文原速→慢放) -->
("inv_up_locked", _CIPHER_WIND, "上滑还没解锁。先单击继续。") <!-- feedback,up 未解锁首次解释(原则 7;之后只给回执) -->
("inv_down_locked", _CIPHER_WIND, "菜单,玩完一局解锁。单击继续。") <!-- feedback,down 未解锁首次解释 -->
("inv_nosel", _CIPHER_WIND, "现在不用选。单击继续。") <!-- feedback,非抉择点滑动首次解释(叙事段左右滑) -->
## 二、修改(3 句重录,id 不变;旧「双击重听/慢放」「单击切换」口径废止)
("dv1_teach", _CIPHER_WIND, "向右滑,听下一个词。") <!-- critical,T1 教学句改写(原「电文进来了。先双击,把它重新听一遍。」= 双击重听口径,随阶段 3 阶梯废止;19 号附录 C §6 原句,一句只教一个) -->
("sys_menu", _CIPHER_WIND, "菜单。左右滑换项,点一下确认。") <!-- content,菜单说明改写(原「菜单。单击切换选项,双击确认。」= 旧菜单口径,00 §5.4 改左右滑换项+单击确认) -->
("gd_invalid", _CIPHER_WIND, "这个手势,值机室里用不上。单击,继续。") <!-- feedback,无效解释补正确做法(原句无「怎么办」,原则 7 首次解释=原因+正确做法) -->
## 三、删除(10 句停用,不再被游戏引用;对应 key/ 变体随主句下线)
("gd_brief", …) —— 开场规则念白(「单击继续值机。要选词时,向左或向右滑。」),§4.10 开场零规则念白
("gd_continue", …) —— 旧等待提示(「单击屏幕,继续。」),被 sys_hint_continue_full/short 三档提示取代
("gd_again", …) —— 旧静默召回(「还在吗?单击继续。」),三档提示 full→short→提示音取代原样复述(原则 9)
("gd_tune2", …) —— DECODE 第二档旧句(「双击,把电文再听一遍。再双击,会放慢。」),**双击重听/慢放常驻教学废止**(双击=阶段 3 阶梯,重听走等待点/慢放走再请求;由 gd_tune1_short 承担第二档)
("gd_prog1", …) —— 无进展轨第 1 级(「光切词没有用。双击,先听电文。」),双击口径废止;无进展由迷茫接管(confusion)承担
("gd_prog2", …) —— 无进展轨第 2 级(「别急。停下来,把电文听完整。」),同上
("sys_help", …) —— 全局帮助句(「单击选定,双击重新听电文。上滑听状态,下滑开菜单……」),帮助溢出废止(手势阶梯分阶段教学取代;含「双击重新听」旧口径)
("b_rule", …) —— 开场规矩念白(「北风问候你。规矩就一条:听不清,就再听一遍。」),§4.10 砍掉;重听承诺随双击教学废止(b_open/b_goal/b_chief 移驻 NIGHT(1) 链首补全叙事,不含它)
("dv1_teach2", …) —— T1 第二段教学(「左右滑,听密码本上的候选词。单击,选定一个。」),两段确认教学停用(一句只教一个,确认语义由 cf_confirm 就地承担)
("dv1_ask", …) —— T1 旧引入句(「密码本第一页。三个词,哪个是它?」),职能并入 dv1_teach 改写版(正片 dv2/dv3/dv4_ask 保留)
(b_open/b_goal/b_chief、sys_skip/sys_continue_ask/sys_new_night/sys_settings、
菜单四项 sys_menu_resume/book/restart/lobby、prog_t1..t4 / book_3..0 / exp_* 分档账目句、
hint_t1..t4、end_c1..c4 与全部剧情句(OP/WIND/处长)不动。m4_chief_a/b 为 26 号改造前
即未接线的登记句,维持现状,见 26-apply-cipher.md 偏差记录。)
## 四、键盘变体(KEY_LINES["cipher"] 增量;只改操作词,其余一字不动)
新增句含操作词的变体(无操作词不列:sys_turn_teach / sys_say_again / sys_demo_continue,
落回主资产):
("sys_first_tap", "按空格。")
("sys_first_tap_short", "按一下空格。")
("sys_hint_continue_full", "按空格,继续。")
("sys_hint_continue_short", "按空格。")
("sys_hint_choice_short", "左右方向键,选。")
("sys_hint_again_full", "按空格,重新开始。")
("gd_tune1_short", "左右方向键。")
("cf_hint_full", "按空格,定下这个词。")
("cf_hint_short", "按空格。")
("sys_only_choice", "现在,只要左右方向键。")
("sys_demo_choice", "左右方向键,都可以。现在你来。")
("sys_unlock_up", "想知道自己在哪,就按上方向键。")
("sys_unlock_down", "按下方向键,可以打开菜单。")
("sys_unlock_dt", "没听清,就按回车,再听一遍。")
("inv_nosel", "现在不用选。按空格继续。")
("inv_up_locked", "上方向键还没解锁。先按空格继续。")
("inv_down_locked", "菜单,玩完一局解锁。按空格继续。")
修改句的变体:
("dv1_teach", "向右方向键,听下一个词。") <!-- 必须重录:主句改写,旧变体「按回车,把电文再听一遍」随双击口径废止 -->
("sys_menu", "菜单。左右方向键换项,按空格确认。") <!-- 必须重录:旧「按空格切换选项,按回车确认」随菜单语义废止 -->
("gd_invalid", "这个手势,值机室里用不上。按空格继续。") <!-- 新增:改写句含「单击」,补 key 变体 -->
删除句的 key/ 变体随主句停用:gd_brief / gd_continue / gd_again / gd_tune2 / gd_prog1 /
gd_prog2 / sys_help / dv1_teach2 / dv1_ask(b_rule 无变体)。既有 gd_tune1 / sys_skip /
sys_continue_ask / p2 变体不动。
> 合并提示:并入 gen_voice_dual.py 时,新增 20 条进 CIPHER_WIND_LINES、修改 3 条原地
> 替换、删除 10 条(连同 KEY_LINES["cipher"] 对应行)摘除;`sys_unlock_*` 与
> sys_say_again 虽由引擎播出,资产照常落 web/cipher/audio/voice/{female,male}/。
> 合计 132 − 10 + 20 = **142 句**(WIND 107 → 117,OP 20 与 NPC 平铺 5 不动;
> `web/harness/voice_text.json` cipher 主表已同步至 142 条,radio 同款口径)。