feat(playbook): 26 号交互手册首批落地——storyline/escape/simon 全面重构 + 引擎六模块

按 docs/design/26-audio-interaction-playbook.md 重构三款游戏(对白重写 + 双性别语音重生成 580 文件)。

引擎层(web/engine/,其余 12 款游戏零改动):
- floor.js 发言权管理器:SPEAKING/YOUR_TURN/BUSY/ACTION 四态、交接提示音、
  等待声(220/330Hz 嘟-嘟,20s 后放缓)、跨链音乐压低(audio.js holdDuck)
- receipts.js 输入回执三件套(ok/invalid/busy,100ms 内,原则 4)
- confusion.js 迷茫检测(乱点/无效/静默信号 → 三级接管,§4.5)
- hints.js 等待点 + 三档提示(full→short→提示音,30s 台账跨点去重,原则 9)
- novice.js 手势解锁阶梯(up/down/doubletap 跨局持久,§4.3)
- pipeline.js 输入管道(回执收口、防连点 400ms、双击折算、explainOnce)

游戏层:
- storyline R3:开场 71.7s 规则念白 → 3 秒内动手;双击=重播(反模式5)废除;
  抉择点三档提示+主动重听;断点存档复述(§4.12)
- escape R3:单击=检查+使用合并(双击用法废除);长按=我在哪(四向玩法裁定);
  撞墙归因每方向一次(原则 7);迷茫 L2 缩小/L3 演示;坐标存档续玩
- simon R3:新手三音色,按实力渐进解锁(+up/down/dt);失败表替代机会账
  (归因 2s 内→免费重听→放慢→结算,原则 15);播放期手势=busy 回执

测试:三款 playtest 重写(含 §6.2 乱点机器人:无声操作/被动重复/打断失败全 0,
首操作 ~2s);guide.test 改为 Guide 层单测+rhythm/space 段。全部通过
(38+33+22+72+19+35 断言)。设计单见 docs/design/26-apply-*.md。
This commit is contained in:
xsl
2026-10-01 08:11:12 +08:00
parent d15a9b9635
commit ee9d7efe57
1183 changed files with 3945 additions and 4588 deletions
+96
View File
@@ -0,0 +1,96 @@
# 26-apply · 《暗室》重构设计单(26 号文档落地)
> 按 26 号文档附录 C 填写。交互规则权威来源:[26-audio-interaction-playbook.md](26-audio-interaction-playbook.md)。
## 1. 一句话核心动作
**朝四个方向滑动在房间里移动,单击检查和使用,按住屏幕问路。**
## 2. 玩家可感知的状态(3 个)与声音身份
| 状态 | 听感 | 来源 |
|---|---|---|
| 探索(轮到你) | 当前房间的环境音常响(水滴/风/电流) | §4.1 ACTION |
| 描述在播(游戏在说) | 房间描述语音,BGM 压低跨链 | §4.1 SPEAKING |
| 撞墙/无效 | 闷响 + invalid 回执(低「咚」) | §4.2 |
## 3. 新手手势表(四向滑动是玩法 → §4.3 裁定:帮助换到长按)
| 手势 | 含义 | 说明 |
|---|---|---|
| 四向滑动 | 移动(核心玩法,不按阶梯锁) | swipeCore |
| 单击 | 检查 + 使用(合并;旧「双击=用物品」废除) | 站对房间即用 |
| 长按 | 我在哪、我该干嘛(目标 + 方位一句话) | longpressCore |
| 双击 | (阶段3解锁后)重听最近描述 | 未解锁按单击处理 |
## 4. 状态 × 手势矩阵(新手期)
| 状态 \ 手势 | 单击 | 四向滑动 | 长按 | 双击(未解锁) |
|---|---|---|---|---|
| 引导答题 | 按步骤答(纠错句)/ invalid | 按步骤答(脚步/闷响) | 帮助 | 按单击处理 |
| 探索(ACTION) | 检查+使用(环境音/描述即反馈) | 移动=脚步声(silent-ok);撞墙=闷响+invalid+归因 | 帮助(目标+方位) | 按单击处理 |
| 描述在播 | 跳过这句 + ok | 打断并移动 | 打断,帮助 | 按单击处理 |
| 结算 | 重新开始 + ok | invalid + inv_settle | 重听结算 | 按单击处理 |
| 菜单 | 换一项 + 播报 | 右=确认 / 左=上一项 / 其余 invalid | 重听菜单说明 | 按单击处理 |
| 迷茫 L2 期间 | 照常 | 只放行接管方向,其余 invalid(不移动) | 照常 | 照常 |
## 5. 等待点配置表(引导期)与探索期接管
引导等待点(6s/15s 两档,short=「滑一下。」/「向左滑。」):
| 步骤 | 期待 | 指令句 |
|---|---|---|
| 0 | 任意滑动 | g0_new「黑暗。朝任意方向,滑一下。」 |
| 1 | 撞墙×2(教无效反馈) | g0b(+ wall 归因) |
| 2 | 左滑 | g3_new「现在,向左滑。」 |
| 3 | 下滑 | g4_down「对。再向下滑。」 |
| 4 | 单击 | g5_inspect → g5_key + g7_goal_new |
探索期(无固定等待点,静默喂迷茫信号 40s 起每 20s)三级接管:
| 级 | 做什么 | 台词 |
|---|---|---|
| 1 | 说目标方位(30s 台账去重,说过就提示音) | nav_*「向右滑。」 |
| 2 | 只放行第一导航方向 | sys_only_*「现在,只要向左滑。」 |
| 3 | 听我做一次:游戏自己朝目标走一步 | sys_demo + 脚步声 + sys_now_you |
## 6. 首 3 分钟逐秒脚本
| 时间 | 游戏说 / 播 | 期待玩家做 | 没做 | 做错 |
|---|---|---|---|---|
| 0~3s | 环境水滴声 →「黑暗。朝任意方向,滑一下。」 | 任意滑动 | 6s:「滑一下。」 | 点按:纠错句 |
| 3~12s | 脚步声 →「对。你被困在地下设施里。再滑两下,试试墙。」 | 滑动撞墙 | 同上 | 方向错也有闷响(试错无代价) |
| 12~25s | 闷响 + 「那边是墙,换个方向。」+ 方位句 ×2 →「现在,向左滑。」 | 左滑 | 「向左滑。」 | 其他方向:纠错 |
| 25~40s | 脚步 →「对。再向下滑。」→ 储物间环境音 | 下滑 | 同上 | 纠错 |
| 40~60s | 「听到水声了吗?单击一下,仔细检查这个房间。」→ 拾取音 →「你摸到了一把钥匙!」 | 单击 | 「单击。」 | 滑动:纠错 |
| 60~90s | 「找到能用钥匙打开的东西。迷路了,按住屏幕。」→ 自由探索 | 探索 | 40s 起接管 | 撞墙归因 |
| 90~180s | 首到房间描述、谜题链推进(钥匙→铁柜→保险丝→电箱→大门) | 探索 | 接管三级 | 归因 + 就近重试 |
节奏检查 ✓:3s 内动手;首成功=第一次滑动(脚步声);每 30s 有可听进展(新房间环境音/描述)。
## 7. 失败表
| 失败类型 | 判定 | 归因句 | 回到哪里 | 新手期代价 |
|---|---|---|---|---|
| 方向错(撞墙) | 越界 | wall + wall_dir_*(每方向整局一次,之后只闷响+回执) | 原地 | 无 |
| 用错地方 | 站位不对 | (合并进检查语义:描述告诉你这里有什么) | 原地 | 无 |
| 迷路 | 静默/乱点信号 | 接管 L1→L2→L3 | 原地 | 无 |
## 8. 台词表(类别标注)
- `critical`:g0_new(开场指令 <3s);结算承诺段 again(+解锁教学)
- `content`:g0b/g3_new/g4_down/g5_*、room_*、empty_*、found_key、unlock_cabinet、fix_box、escape、time_band、replay、start_room、inspect_*、gd_*_dir、gd_next_fuse
- `hint`:lp_*(长按帮助)、nav_*、sys_only_*、sys_continue_ask、g_hint_swipe、menu_help
- `feedback`:wall、wall_dir_*、g_wrong_*、guide_wrong_*、guide_blunt_swipe、inv_*、sys_demo、sys_now_you
- 完整清单见 `tools/gen_voice_dual.py` ESCAPE_LINES(74 句 × 双性别)。
## 9. 断点复述句
- 保存:每步移动/进展写 `soundgame.escape.save`(坐标 + 谜题状态 + 用时)。
- 回来:sys_continue_ask;单击继续(恢复坐标 + lp 帮助句作复述),右滑重新开始。
## 10. 测试记录
- 无头 playtest:`web/escape/test/playtest.mjs`(32 断言,乱点机器人:无声操作 0 /
被动原句重复 0 / 第一次成功 2.1s;撞墙归因按原则 7 只解释一次)。
- 真人冷启动:待测。