Files
SoundGame/docs/design/round2-review.md
T
SoundGame Dev cc0f8c008d HTML5 重写:6 款游戏 + 用户系统 + 全局设置 + 5 轮迭代重构
- 新增 web/ 纯音频 HTML5 平台:共享引擎(手势/WebAudio 三层/设置/震动)、
  Node 零依赖服务器(静态 + 注册登录 + 进度存档 API)
- 游戏:剑与声(RPG 新作)、声命线、暗室(重设计)、音序回响(重设计)、
  节拍行者(跟随领奏重构)、盲航(同向闪避重构);声东击西删除
- 全局功能:男声/女声双套 TTS 资产、三档语速、BGM 音量三档、
  震动反馈语言(10 种震型)、服务器进度同步
- 资产:899 ogg + 899 m4a(Qwen3-TTS 双性别语音、Stable Audio 3 音效、
  Mureka BGM 4+3 首),终检零缺失
- 文档:docs/design/ 13 篇设计审查文档、docs/audio/ 资产管线、
  web/server/README.md API 文档
2026-08-29 21:55:44 +08:00

8.3 KiB
Raw Blame History

R2 落地一致性审查报告(策划,R3 轮)

审查对象:web/escape/game.js、web/simon/game.js(R2 重写版)、docs/audio/round2-voice-ids.md、docs/audio/round2-report.md、web/engine/haptics.js(R2 增补)。 对照基准:docs/design/01-escape-redesign.md、02-simon-redesign.md、00-global-ux.md(R2 修订版)。

总体结论:两款游戏落实度约 95%,核心设计(引导式开场、三级提示、可重听环境音 / 去 BGM、整句化、交互教学、复活机制)全部落地且工程质量高于设计预期(语音链看门狗、会话令牌、进度 summary 同步)。发现 5 处偏差,全部裁定;两个开发疑问的裁决见 §3。


1. 《暗室》落实度核查(对照 01 文档)

设计条目 落实情况 结论
G0-G7 引导式脚本(带路到储物间、教移动/撞墙/检查/双击) 完整实现(g0-g7 + _advance 步骤机 + 20s 看门狗防卡死) ✅
引导期做错纠正(错 3 次直白重述 + warning 震动)、下滑跳过 完整实现(guide_wrong_/guide_blunt_/guide_offpath/guide_skip) ✅
二周目开场询问(上滑重听引导/单击直接开始) 实现(REOPEN + reopen_prompt + guideDone localStorage) ✅
卡关三级提示 60/120/180s、L3 每 60s 重复、按坐标算路 nav_* 完整实现(5s 轮询、阶段×级别 12 句 + stuck_ask 前置 + nav 4 句) ✅
环境音可重听(单击=重播环境音+描述)、每次进房都播 实现(_inspect 先播 amb、800ms 后播描述;_playAmbient 每次进房播) ✅
环境音 3→6 种 + 大门通电切 amb_gate_live 实现(KEY_ROOMS 4 专属 + 2 空房轮换 + gate_live) ✅
撞墙每次播 wall(取消一次性限制) 实现(含引导 G2) ✅
用时 4 段整句替代数字拼接 实现(time_band1..4,区间与语音清单一致) ✅
ui_deny 退役改 error 震动 实现 ✅
双击兜底:背包 + L2 级明示 偏差 1:关键房间内播 use_fail 替代背包播报(非关键房间仍播背包 inv_* + stuck_*_2) 以实现为准(更合语境),设计文档视为已修订
菜单并入双击兜底链(00 豁免表原表述) 偏差 2:PLAY 阶段无菜单入口;菜单仅在 ENDING 下滑呼出 以实现为准(PLAY 中帮助需求已被双击兜底 + 自动卡关提示覆盖),00 豁免表已修订
G2"滑两下碰碰墙(撞墙也计数)" 偏差 3:引导期位置固定,两次滑动必然撞墙 以实现为准(教学目标就是撞墙反馈,更可靠)

另确认:震动语义正确(撞墙 error、拾取 pickup、机关 success、提示 warning;gesture.js 内置识别反馈未重复调用);进度存档带 summary 同步服务器(超出设计要求,符合 00 §4.3)。

2. 《音序回响》落实度核查(对照 02 文档)

设计条目 落实情况 结论
去 BGM(不加载不播放) 实现(prewarm 无 bgm,开场静默 0.5s 进教学) ✅
轮次整句 round_01..20 + round_more 兜底 实现 ✅
成绩 6 段整句(0/≤3/≤6/≤9/10-14/≥15) 实现(score_band1..6 区间一致) ✅
交互式教学 T0-T7(教一个练一个、错 3 次直白版、下滑跳过) 完整实现(t_wrong_/t_blunt_ 六手势各一 + t_try 等待 + 跳过兜底) ✅
播放序列 BEAT 节拍锚点 + 播完 400ms confirm "轮到你了" 实现(第 1 轮同播 your_turn,之后仅震动) ✅
复活机制:初始 1 次、每 4 轮 +1 上限 2、答错自动消耗重播同一序列、双击主动重听 完整实现(chances_out/retry_use/relisten/chance_plus 语音齐全) ✅
速度曲线 max(420, 700-(r-1)*25) 实现 ✅
序列约束(第 1 轮两音不同 / 前 5 轮禁三连 / 全局禁四连) 实现(_violates,20 次重试抽样) ✅
答对每 4 轮才播"答对了",其余仅 success 震动 实现 ✅
结算:error+hit 震动、sfx/gameover 保留、best 持久化+服务器 summary 实现 ✅
播放/播报阶段手势静默忽略 实现(phase 守卫 default 分支) ✅
双击语义(输入阶段=主动重听) 偏差 4:与序列含 doubletap 冲突,开发按上下文判定(见 §3 裁决①) 裁决采纳

另确认:wrong 语音在语音清单中标注"可选",实现未引用(retry_use 已含"错了")——不算缺失,清单口径一致。

3. 两个开发疑问的裁决

裁决①:simon 双击语义冲突 —— 采纳实现的上下文判定

实现的规则(game.js:294-297):输入阶段,若当前期望输入恰为 doubletap,双击=答题;否则双击=主动重听(耗机会;机会为 0 时仅提示 chances_out,不判错)。

裁决理由:

  1. 序列必须永远可答。任何让"双击=重听"优先的方案都会使含 doubletap 的序列无法复现,破坏玩法完整性——答题优先是唯一可接受的解释。
  2. 边缘情况不自锁。玩家想重听而当前期望恰是 doubletap 时:双击被当答题——答对则推进(玩家本来就会背到这一位,损失为零);答错则自动消耗机会重听,殊途同归。不存在"想重听却永远做不到"的死锁。
  3. 宽容性正确:机会为 0 时双击非期望手势不判答错、只提示——避免了"想重听却被判错直接结算"的最坏体验。

补充规定(写入 02 文档):重听播报期间 phase 切 roundend 暂停接收输入(实现已做),防止重听语音播完前的手势被吞。

裁决②:菜单手势 —— 采纳进 00-global-ux.md,作为全球菜单约定(RPG 豁免)

开发自拟方案:菜单内 单击=循环切换选项(播选项名)/ 双击=确认执行 / 上滑=帮助,下滑或"返回"项关闭。

裁决:采纳。理由:

  1. 解决了全局约定"单击=确认"与结算页"单击=重开"的冲突——结算页单击已被占用,菜单内单击若仍是确认,玩家想重开时会误触发菜单项。单击循环 + 双击确认把"浏览"与"执行"分离,误操作成本归零。
  2. 两款游戏已一致落地,交互范式统一(菜单项 3 个:重新开始/回大厅/返回游戏,菜单打开时先播 menu_open + 第一项)。
  3. 单击循环有 ~300ms 引擎延迟,但菜单非即时场景,可接受;双击确认即时,关键的"执行"动作不拖。

配套修订(00 文档 §5.1 已更新):

  • 新全球菜单约定:下滑呼出(模态)→ 单击循环切换(播选项名)→ 双击确认执行 → 上滑=帮助/规则 → 下滑或"返回游戏"项关闭。菜单打开时暂停计时类玩法。
  • RPG《剑与声》豁免:探索态菜单保持"左右滑切换 + 单击确认"——RPG 的探索本身就是这个范式(选项列表即游戏本体),菜单与探索同构反而少学一套;战斗态不设菜单。
  • storyline:R3 打磨轮统一到本约定(现状未审,列入 R3 检查项)。
  • rhythm / space:R3/R4 施工直接按新约定(03/04 文档中"左右滑切曲目/菜单"的表述以此为准——选曲界面不是模态菜单,仍用左右滑+单击;模态菜单用新约定)。

4. 偏差 5:haptics.js 震型增补(引擎侧,R2 已做)

  • 引擎已补 pickup=[15]、hit=[80]、beat=[8]、danger=[25,40,25,40,25]——正是 round1-review 转达事项①,但 pickup/danger 数值与设计不同(设计 [15,40,15] / [20,50,30,50,40])。
  • 裁定:以实现为准(pickup 单震更轻、不与 error 混淆;danger 节奏更密更接近"逼近"感)。00 文档 §2.2 已更新为实现的 10 种震型全表。

5. 遗留问题(转达开发/音频)

  1. escape PLAY 阶段无法回大厅:结算前想退出只能刷新页面。建议 R3 打磨:PLAY 中双击兜底链末尾追加"要回大厅?再双击一次"二级入口(语音 id menu_hint 需补录 1 句 ×2 性别)。非阻塞。
  2. simon voice/wrong 已生成但代码未引用:保留无妨(资产冗余 1 句),或 R3 清理清单标注。
  3. storyline 菜单约定统一:列入 R3 检查项(裁决②配套)。
  4. 两游戏真机听测仍未做(沿用 R1 遗留):escape 提示计时阈值(60/120/180s)与 simon 教学节奏需真机验证手感。