fix(space): 盲航刺耳音效重制 + 状态/反馈盲区修复(玩家代理取证迭代)

- F1 程序合成重制5件刺耳音效(alarm≥3kHz能量82%→0,全件≤-3.4dBFS)+新增挥空音
- F2 P0:撞击方位语音防顶断补播(保护期结束死亡窗 hit_* 零毫秒被杀根因)
- F3 保护期教学句7连互截去重;F4 新句 protect_soon 50s预告;F5 boost_not_ready 冷却拒绝回音;F6 激活补CONFIRM震;F7 whiff
- 验证:playtest 172/172 + guide 122 + 终检全绿 + 14游戏回归零回退 + live两轮复跑坐实
- 档案 research/space-polish/round1-2(取证+修复证据);04号文档追加R5修订记录
This commit is contained in:
xsl
2026-09-14 20:16:58 +08:00
parent 4b39ae2e49
commit ddada6980c
50 changed files with 9469 additions and 2055 deletions
+45
View File
@@ -110,3 +110,48 @@
6. 语音全部整句重录:演练 8 句、保护期 3 句、单击/双击引入 4 句、归因 5 句、结算 10 句(时间段 4 + 躲避段 4 + 新纪录 + 重开)、里程碑 5 句 ≈ 35 句 × 2 音色。删除全部 num 拼接件。
7. 教学语音与 whoosh 的时序:语音 onComplete 后再 spawn 演练陨石,保证不叠放。
8. 更新 `web/space/README.md` 手势表(同向闪避是玩家可见的最大变化,README 必须同步)。
---
## 修订记录 R5(space polish:刺耳 + 状态/动作反馈盲区,research/space-polish/)
取证(round1):live 两会话(research/space-polish/round1/live-{A,B}-transcript.md)+
4 人设评审(同目录 p1-blind/p2-student/p3-office/p4-worker)+ 全 sfx 客观频谱
(同目录 sfx-spectrum-analysis.txt)。核心事实:
1. **刺耳(客观)**:alarm 每颗陨石响两遍且 ≥3kHz 能量 82.3%/≥5kHz 63.9%/峰值 16kHz;
dodge 真峰值 -2.30dBFS + 63.6%≥3kHz;shield_block -2.60+52.2%;boost -2.70+53.0%;
shield -2.90 超标。四件最高暴露音效全部违反 one-shot 标准(≤-3dBFS)。
2. **保护期结束死亡窗(P0,live A t+151-163 与 t+300-310 两轮复现)**:裸飞期逼近 4.0s
= 刷怪 4.0s,每颗撞击与下一颗 spawn 同窗——呼喊维持生存优先(顶断归因)的代价是
hit_left/hit_down **零毫秒被杀**,玩家 8 秒三连撞至死不知方位;protect_end 亦被顶得
只剩 0.5-3.5s。
3. **保护期 protect_* 七连截断**:6.96s 教学句对 4.0s 刷怪间隔,每句播 4.0s 就被
下一句顶断(live A 7 连 TRUNCATED),信息重复又残缺。
4. **动作反馈盲区**:加速冷却中单击全静默(护盾拒绝有回音、加速没有——归因真话不均);
挥空/滑错方向与成功闪避同静默(dodge 音只在判定时才响);boost/shield 激活无
CONFIRM 震(§5 承诺未兑现)。
R5 裁定与实现(逐条对应 playtest.mjs 新断言):
- **R5-1 刺耳重合成**:alarm/dodge/shield_block/boost/shield 五件程序合成重制
(`tools/gen_space_syn.py`,低谐波设计:alarm 双音 700/560Hz、dodge 中频气声扫频,
真峰值 ≤-3.4dBFS、编码后 ≥3kHz 能量 0%,解码回读校验)。SA3 非必需,程序合成达标。
新增 `sfx/whiff`(挥空轻叹,0.55 音量)。
- **R5-2 归因真话·防顶断 replay**:呼喊生存优先裁定**不变**(呼喊照常同窗直出、照常
顶断归因);但 hit_<dir>/protect_end 起播经 `_defendVoice` 登记,被顶断时登记残留,
呼喊播完的 onComplete 走 `_replayDefended` queue 接 replay(不顶新威胁信息),
保证每句归因/保护结束宣告完整送达至少一次;归因 replay 播完仍接 hit_last(先因后果)。
- **R5-3 protect_* 去重**:上一句 protect_<dir> 在播时新吸收只发 shield_block 音 +
WARNING 震、跳过语音,每句教学完整播完(不再 7 连截断同一句开头)。
- **R5-4 加速冷却拒绝**:`_deny(now, voiceId)` 共用 4s 去抖(护盾拒绝同路径、原句
feat_shield_done 不变);加速冷却单击 → HEARTBEAT 震 + 新句 `boost_not_ready`
「引擎还在冷却,稍等一下。」。
- **R5-5 protect_soon**:开局第 50s 播报「训练护盾还剩十秒。」(queue 不顶句;
菜单/分批引入打断由 _rearmRunTimers 补播),给反应慢的玩家 10s 提前量。
- **R5-6 激活确认**:boost/shield 激活(对局期与 feature 期)补 CONFIRM 震(兑现 §5)。
- **R5-7 挥空反馈**:playing 期滑向无悬置陨石的方向 → `sfx/whiff` 轻叹(引擎 swipe
震动已有"收到",whiff 补"无用"),与 dodge 成功音形成对偶。
- **状态查询手势**:维持 00 §5 豁免表裁定(四向滑=闪避,space 无对局期 status key;
坠毁结算后上滑=重听教学要点)。状态透明全部由事件反馈句承担(本 R5 已补齐
保护期倒计时/冷却拒绝/归因可达性),不新增手势。
+13
View File
@@ -145,3 +145,16 @@ web/engine/gesture.js inputMode())时,引擎 voice 候选链前置加载
| `help_recap` | 左边来按左方向键,右边来按右方向键,上面来按上方向键,下面来按下方向键。按空格加速,按回车护盾。 |
| `skip_hint` | 按空格可跳过旁白。 |
| `gd_hit_hint` | 被撞了。听方位,按对应方向键就能拨开。 |
---
## R5 追加 · space polish 轮新增(2 句 × 2 性别 = 4 条;取证依据 research/space-polish/round1/)
> 本轮(R5)只追加,不改上方任何旧表。instruct 沿用全表 `_SPC` 常量(两性别同游戏同 instruct,00 文档 §3.2)。
> 台词已同步 `tools/gen_voice_dual.py` 的 SPACE_LINES(两表一致铁律)与 `web/harness/voice_text.json` 的 space 键。
> 无键盘变体:两句均不含操作词(space 键盘变体表 24 句不增)。
| id | 台词全文 | 触发 |
|---|---|---|
| `protect_soon` | 训练护盾还剩十秒。 | 开局第 50s(保护期剩 10s 预告;queue 不顶句,被菜单/分批引入打断由 _rearmRunTimers 补播) |
| `boost_not_ready` | 引擎还在冷却,稍等一下。 | 加速冷却中单击(R5 归因真话:拒绝必须有回音,此前冷却单击全静默);与护盾拒绝共用 4s 去抖 |