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
+15
View File
@@ -255,6 +255,10 @@
<option value="0">关闭</option>
</select>
</div>
<div class="setting-item">
<label for="btn-gestures">手势</label>
<button id="btn-gestures" type="button">全部解锁</button>
</div>
<div class="setting-item">
<label for="sel-input">操作方式</label>
<select id="sel-input">
@@ -1000,6 +1004,17 @@
// ---------- 设置区(含「操作方式」,settings.input 由引擎侧消费) ----------
// 手势阶梯「全部解锁」(26 号文档 §4.3:老玩家在大厅一键解锁全部手势)
const btnGestures = document.getElementById('btn-gestures');
btnGestures.addEventListener('click', () => {
try {
const o = JSON.parse(localStorage.getItem('soundgame.gestures') || '{}');
o.stage = 3;
localStorage.setItem('soundgame.gestures', JSON.stringify(o));
} catch (_) { /* 隐私模式 */ }
announce('已解锁全部手势:上下滑动和双击都可以用了');
});
const selVoice = document.getElementById('sel-voice');
const selSpeed = document.getElementById('sel-speed');
const selBgm = document.getElementById('sel-bgm');