- 新增 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 文档
4.7 KiB
4.7 KiB
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 四款一致落地)
- 语音链看门狗:所有"语音播完才推进流程"的地方都要双通道(onComplete + 超时兜底,二者先到先触发、只触发一次),参考 simon
_speakGuarded。RPG 的场景切换、战斗回合开场、商店对话都依赖语音推进,缺看门狗会在资产缺失/解码失败时卡死整局。 - 会话令牌:重开/跳场景时
session++使旧计时器与语音链回调失效。RPG 状态多(探索/战斗/商店/菜单),比前四款更需要。 - 打断即作废:状态切换入口统一
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 格挡成功后。