Files
SoundGame/docs/design/26-apply-radio.md
T
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

11 KiB
Raw Blame History

26-apply · 《不眠频率》重构设计单(26 号文档落地)

按 26 号文档附录 C 填写。玩法正文见 15-radio.md(其附录 C 为本文摘要, 两处冲突时以本文为准——本文是逐格落地的施工单)。台词登记见 15-radio-voice-ids.md;清单见 tools/voice_lines_26/radio.md。 交互权威:26-audio-interaction-playbook.md、00-global-ux.md。 范式对齐 26-apply-storyline.md(《不眠频率》同为叙事型,主参考)。

1. 一句话核心动作

听一段热线,单击继续或接听;听到选项时左右滑做决定。

2. 玩家可感知的状态(3 个)与声音身份

状态 听感 来源
听讲(游戏在说) 主播/导播/来电者语音,BGM 压低且跨整条链 §4.1 SPEAKING
轮到你(继续/接听/抉择) 风铃交接音 → 400ms 后轻的「嘟—嘟」等待声;RING 用铃声循环代替等待声(15 号 §2 声音身份) §4.1 YOUR_TURN
(菜单/结算属元状态:bgm/menu + 结算句标识,不占新手三态)

状态声首现教学(原则 2):RING 首次进入配「热线灯亮了。点一下,接听。」(sys_ring_teach, 全局一次);「轮到你」等待声首现配 sys_turn_teach「听到这个声音,就是轮到你了。」

3. 新手手势表与解锁阶梯

手势 含义 解锁
单击 继续 / 接听 / 跳过这句(p* 首播=busy) 阶段 0
左滑 / 右滑 抉择(左=走心,右=克制) 阶段 0
上滑 我在哪(通号 → 口碑档,一句话) 阶段 1(第一次抉择后,「对。」+ 教学句挂下一段链头/尾)
下滑 菜单 阶段 2(第一次到达结局后,教学句挂结局链尾)
双击 重听当前等待点完整句(「再说一遍:」前缀) 阶段 3(累计 3 局);未解锁按单击处理
长按 新手期 invalid(叙事类不占用帮助,无四向玩法) —

旧「双击=重听整段 / RING 双击重听收尾句 / 菜单单击循环+双击确认」全部废止(26 §7 反模式 5)。

4. 状态 × 手势矩阵(新手期)

状态 \ 手势 单击 左/右滑 上滑 下滑(未解锁) 双击(未解锁) 连点
游戏在说 跳过这句 + ok(p* 首播 → busy) 打断 → 非抉择点 invalid+解释一次(不盲选) 打断,答「我在哪」 invalid + 首次解释 按单击处理 400ms 内 busy
等你继续 继续 + ok invalid(inv_nosel) 我在哪(通号+口碑) invalid (阶段3=重听) busy
RING 等接听 接听 + line_connect(silent-ok) invalid(inv_ring) 我在哪(通号+口碑,铃声即接听提示) invalid (阶段3=重听) 400ms 内 busy
等你选择 再听选项(「再说一遍:」+ 完整句,hold) 抉择 + ok(ui_confirm) 「正在抉择。左右滑。」 invalid (阶段3=重听) 计入迷茫
结算 新夜班 + ok invalid(解释句=settle full) 结局主句 + 口碑档 菜单(阶段2) 按单击处理 只处理第一下
菜单 确认当前项 + ok 左=上一项 / 右=下一项,每项报名 重听菜单说明 + 设置提示 关闭 (阶段3=重听) busy

验收:无空格;无「没有声音」的格子;连点无重播/重开/连跳。BRIDGE(幕间)为自动流 (BUSY 演出态 ≤12s):一切手势 = busy 回执,不进本表。 被打断的兜底:任何打断后若判 invalid,由 _ensureWait() 按当前局面重新交出话轮, 不留安静态(§4.1)。

跳过纪律(15 号 G5 的 26 号化):p* 首播 critical——tap/滑动都给 busy 回执 (盲玩公平;p9 是全表最长句,仍整句 critical,公平优先于「critical ≤3s」启发式); 其余句 tap=跳句、滑动=打断并执行,链尾交接由 floor 的 onDone 保证不被吃掉 (旧 F4 恢复锁 / F5 链末句保护被结构性消解;复播天然可掐)。

5. 等待点配置表

id 期待 提示 full 提示 short 静默阈值 L2 只留 L3 演示 失败归因
intro tap (指令句刚说过) 「点一下。」 6s / 15s tap 「听我做一次。」→ 替玩家进第一通 —
ring tap 「热线在闪。点一下,接听。」(gd_ring1) 「点一下,接听。」 8s / 18s tap 「听我做一次。」→ 替玩家接听 —
continue tap 「单击,继续。」 「单击。」 18s / 40s tap 「听我做一次。」→ 替玩家走一步 —
choice left/right 当前 pN(台账已记 → 被动首档自动降 short) 「左右滑,选。」 25s / 50s 左右滑 「左右滑,都可以。现在你来。」(不替玩家选) —
settle tap 「单击,重新开始。」 「单击。」 20s / 45s tap 提示音 —
reopen tap/right sys_continue_ask 「单击。」 12s / 30s — 提示音 —
menu tap/left/right menu_help 「左右滑,点一下。」 20s / 45s — 提示音 —

三档选择 + 30s 台账跨等待点去重在 engine/hints.js 统一实现;选项句 pN 由游戏层在 链播时登台账(markHintSaid),被动提示永不原样复述选项(原则 9)。

6. 首 3 分钟逐秒脚本

时间 游戏说 / 播 期待玩家做 没做 做错
0~3s onair_sting + amb_studio →「点一下屏幕。」(critical) 单击 6s:「点一下。」15s:提示音 滑动:invalid + inv_generic
3~8s ok 回执 →「热线灯亮了。点一下,接听。」→ 铃声循环 + 风铃 单击接听 8s:「热线在闪。点一下,接听。」18s:「点一下,接听。」 左右滑:invalid + inv_ring
8~15s line_connect → 一线来电(z1_ring_in)→ 老周开口(z1_a)→「听到这个声音,就是轮到你了。」→ 风铃 + 等待声 单击继续 18s:「单击,继续。」40s:「单击。」 左右滑:inv_nosel
15~45s z1_b +「想跳过这句,单击就行。」→ p1 选项句(critical,播完即选) 左/右滑 25s:「左右滑,选。」50s:提示音 p* 播放中任意手势:busy
≈50s 「对。」+ z1_song + 链尾「想知道自己在哪,就向上滑。」 上滑 「左右滑,选。」 单击=再听选项
50~180s p2 抉择 → z1 收敛(z1_ok1)→ 幕间口碑跨档 → 第二通铃 单击/滑动 三档提示 + 迷茫接管 归因真话(z1_bade 指向实际选择)
乱滑/无效×3 迷茫接管 L1「单击。」→ L2 只留期待手势 → L3 演示

节奏检查:3s 内第一次操作 ✓(第一句即指令);10s 内接听成功 ✓;每 30s 有通号/对方 情绪变化 ✓;无一句纯规则说明 ✓(b_rule 开场规矩废除,冷启动不念;台标口播 b_open/ b_rain/b_goal 移到第二夜起的新夜班链)。

7. 失败表

失败类型 判定 归因句 回到哪里 新手期代价
非抉择点滑动 手势与状态不符 「现在不用选。单击继续。」(inv_nosel) 原地 无
RING 滑错 RING 左右滑 「现在不用选。点一下,接听。」(inv_ring) 原地 无
结算滑动 ENDING 左右滑 「单击,重新开始。」(settle full 复用) 原地 无
静默 阈值到点 三档提示(full → short → 提示音) 原地 无
迷茫 信号累计 ≥2 L1 短句 / L2 只留期待手势 / L3 演示 原地 无
负向结果(p1右+p2右) 计分表 −1 z1_bade 指向实际两连选(真话律) 下一通 不扣资源

叙事无资源死亡;旧「双击=整节点重播」废除(反模式 5)。

8. 台词表(类别标注)

  • critical:sys_first_tap(开场 ≤3s 唯一一次指令);p1~p9 抉择提示句(首播不可跳)
  • content:b_、各通对白(z1/l1/k1/w1/h1/d9 组)、e1~e4、ep_、sys_turn_teach、 sys_ring_teach、sys_praise、sys_unlock_、sys_menu、menu_help、sys_menu_、 sys_new_night、prog_c1..c5、rep_*
  • hint:sys_hint_continue_full/short、sys_hint_choice_short、sys_hint_ring_short、 sys_hint_again_full、sys_hint_menu_short、sys_only_choice、sys_demo_continue、 sys_demo_choice、status_choice、sys_continue_ask、gd_ring1、sys_skip
  • feedback:inv_nosel、inv_ring、inv_generic、inv_up_locked、inv_down_locked、sys_praise
  • 主动重听前缀:sys_say_again「再说一遍:」(全项目一句)
  • 完整登记(新增/修改/删除)见 tools/voice_lines_26/radio.md 与 15-radio-voice-ids.md R4 增量节。

9. 断点复述句

  • 保存:每通 RING 进入、每个抉择结算后、ENDING 进入、菜单「保存并回大厅」写 soundgame.progress.radio(phase + node + rep/knot/heardArgument/bond/endings/nights
    • goalMet/skipHintShown/ringTaught 教学标志;summary 字符串必带,大厅卡片用; 菜单覆盖层落盘记回原状态)。
  • 回来 5s 内:sys_continue_ask「检测到你的夜班记录。单击继续上次,右滑开始新的夜晚。」 → 单击 = 恢复并重播当前节点(局面复述);右滑 = 新夜班。
  • 上滑复述模板:位置(第 N 通)→ 目标(口碑档),动作由等待声/铃声承担; ENDING = 结局主句 + 口碑档;抉择等待 =「正在抉择。左右滑。」

10. 测试记录

  • 无头 playtest:web/radio/test/playtest.mjs(171 断言全绿,tools/node/bin/node web/radio/test/playtest.mjs 退出码 0)。乱点机器人跑 guide=off 干净局: 无声操作 0、被动原句重复 0、打断失败 0、第一次操作 ≤10s(实际 2.1s)、 第一次成功 ≤20s(实际 2.1s),26 §6.2/§6.4;另含四结局矩阵(A~E 五剧本)、 等待点三档、迷茫接管三级、手势阶梯、断点复述(ASK 左/右滑)、菜单、 arg_muffled 线索音 ×2、危机拍自动流、资产缺失续链、静态审计 (无运行时 id 拼接 / 已废止台词零引用 / 21 条新增台词待生成豁免清单一致)。
  • 玩家感知转写:web/harness/sessions/radio.mjs 已同步 26 号口径(开场第一下 tap、菜单左右滑换项+单击确认、结局后下滑逛菜单、floor.state 链级门控), tools/node/bin/node web/harness/transcribe.mjs radio(含 --session sessionStress)两剧本零死锁跑通(主线虚拟 283s / 乱按 910s 到 E1)。
  • 真人冷启动:待测(26 §6.3,3~5 人)。