Files
SoundGame/docs/design/round5-notes.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

4.7 KiB
Raw Blame History

R5 开发提示(给《剑与声》开发 agent · 返工注意级)

定位:RPG 开发已在并行进行。以下不是推翻性意见,是 R3/R4 审查中发现的共性问题在 RPG 语境下的对应检查点——如果你的实现已经正确处理,忽略即可;如果需要返工,按对应条目修。设计依据:05-rpg.md / 05-rpg-chapter1.md / 05-rpg-ch1-voice-ids.md / 05-rpg-addendum.md / 00-global-ux.md。

1. 已验证可照抄的健壮性模式(escape/simon/rhythm/space 四款一致落地)

  1. 语音链看门狗:所有"语音播完才推进流程"的地方都要双通道(onComplete + 超时兜底,二者先到先触发、只触发一次),参考 simon _speakGuarded。RPG 的场景切换、战斗回合开场、商店对话都依赖语音推进,缺看门狗会在资产缺失/解码失败时卡死整局。
  2. 会话令牌:重开/跳场景时 session++ 使旧计时器与语音链回调失效。RPG 状态多(探索/战斗/商店/菜单),比前四款更需要。
  3. 打断即作废:状态切换入口统一 stopVoice(),不要依赖逐条清理。

2. 菜单与手势冲突(round2 裁决② + round3-4 附裁 A)

  • RPG 是菜单豁免游戏:探索态菜单=左右滑切换+单击确认(00 §5.2),战斗态下滑=逃跑不设菜单。不要套用 escape/simon 的"单击循环+双击确认"。
  • ch1 台词表 sys_menu 文案("菜单。左右滑选择,单击确认。")与豁免口径一致,不用改。
  • 若你在菜单里加了"保存并回大厅"项:保存成功的反馈=sys_saved 语音 + pickup 震动,不要用提示音。

3. 导航/播报语音的末位语境检查(rhythm 裁定①的教训)

rhythm 在"最后一首"右滑播了"还没解锁"造成语义错位。RPG 同类风险点:

  • 章末:第三章打完 Boss 后播"下一章"类语音会错位——终章结算需单独的完结句(ch3 台词表补发时会含 evt_ch3_end,若你先行实现,先用 btl_win + evt_ch1_end 模式临时顶替,勿复用"前往下一章"句)。
  • 场景图边界:village 的 back、boss1 无选项等死端,播报选项时不要念出"返回"之外不存在的去向。
  • 商店已购/缺钱的播报已在台词表(shop_owned/shop_poor),按语境选句,别统一播 shop_poor。

4. 震动落点(按 05-rpg-addendum §1 总表 + 两条新收紧)

  • 前摇窗口开启震 beat(有声敌人)/ danger+heartbeat(无声敌人)的通道分工不要混用:danger 专属于无声威胁。
  • 新增收紧(round3-4 裁定④同款):200ms 去抖——格挡成功的 confirm 若与 gesture.js 内置双击 confirm 同刻,只震一次;升级 success 与战斗胜利播报前震动同理。
  • iOS 无震动:无声敌人不可格挡是已知设计代价(addendum §2.2),防御指令必须可用且有效(减伤 50% 不依赖时机),这是 iOS 兜底,不要在任何分支里把防御禁用。

5. 音频层叠(addendum §3 的实现要求)

  • 场景 amb_* 不走 bgm 层(会被 bgm=0 设置误杀,且与战斗 BGM 冲突):用 audio._load + 手动 BufferSource loop 接 _sfxBus,rhythm _startBgm/_scheduleSfx 的手动总线接法可直接参考。
  • 战斗 BGM(bgm/battle、bgm/boss)走正常 bgm 层,受 bgm 设置控制;进出战斗 crossfade 切换即可。
  • 注意 decodeAudioData 内存:amb 循环 6-10s、BGM 60-90s,全章节资产控制在 ~30MB 压缩内(web-engine-api §移动浏览器的坑 7)。

6. 存档(05-rpg-chapter1.md §6 + 审查共性)

  • summary 必须随每次保存更新(大厅卡片直接显示);格式"第X章·场景名 · LvN · 金币M"。
  • 保存时机四件套:场景切换/战斗结算/商店交易/菜单保存——战败重生也算战斗结算,要存(否则死亡丢进度,比死亡本身更劝退)。
  • localStorage 与服务器双写,离线静默(四款游戏的 _putProgress 模式照抄)。
  • 继续/新开二选一(sys_continue_ask):右滑=新游戏是破坏性操作,建议加一次确认(单击确认句可用现有 sys_new_game 前的自答:"右滑确定重新开始?再右滑确认。"——如需新台词列入 ch2/3 补录,先用现有句拼接流程也行)。

7. 教学战(05-rpg-chapter1.md §5.2)

  • 锁血保护(HP 最低 1)别忘了在 _resolve 类函数里实现为 clamp,不是免疫——教学战要让玩家看到掉血才理解格挡的价值。
  • 教学句 tut_b1-b5 的触发点:tut_b1 在首次 ENEMY_TELEGRAPH 前、tut_b2 与前摇音同时(这是唯一允许语音与前摇叠放的位置,设计如此)、tut_b3 格挡成功后。