round4终评结题: 4/4人设全六游戏愿意玩(章程门槛达成) + escape剧本补全通关弧线(证伪'哑结尾'P0) + HANDOVER更新(向导层/v2路线图/已知问题清账) + 研究总结定稿

This commit is contained in:
SoundGame Dev
2026-08-31 03:08:27 +08:00
parent 3d37d4656d
commit fab638fc5f
9 changed files with 370 additions and 12 deletions
+32 -8
View File
@@ -5,7 +5,7 @@
## 0. 项目一句话
6 款纯音频 HTML5 游戏:屏幕只有封面图,操作只有 6 种手势(上/下/左/右滑、单击、双击),一切靠音频呈现。纯 vanilla JS ES module,**无构建步骤、无 npm 依赖**,手机浏览器打开即玩。全部对白由本地 Qwen3-TTS 双性别生成,音效由 Stable Audio 3 + 程序合成,BGM 由 Mureka API 生成。
6 款纯音频 HTML5 游戏:屏幕只有封面图,操作只有 6 种手势(上/下/左/右滑、单击、双击),一切靠音频呈现。纯 vanilla JS ES module,**无构建步骤、无 npm 依赖**,手机浏览器打开即玩。全部对白由本地 Qwen3-TTS 双性别生成,音效由 Stable Audio 3 + 程序合成,BGM 由 Mureka API 生成。**交互层由「向导层」统一承载**(状态签名 earcon/回合标记/静默看门狗/纠错,`web/engine/guide.js`),其设计依据与验证过程见 `research/`(交互研究项目,结论=方法论+4 轮玩家代理闭环)。
## 1. 5 分钟上手
@@ -52,9 +52,18 @@ bash web/serve.sh
for g in storyline escape simon rhythm space rpg; do
tools/node/bin/node web/$g/test/playtest.mjs || echo "FAILED: $g"
done
tools/node/bin/node web/harness/guide.test.mjs # 向导层专项(guide=full 行为断言)
```
退出码 0 = 全绿。当前 6 款全部通过。
退出码 0 = 全绿。当前 6 款 + 向导专项全部通过。**注意:playtest 一律在 setup 里 `settings.set({guide:'off'})` 验证纯玩法逻辑;向导行为断言只住在 guide.test.mjs。**
### 1.4.1 玩家感知转写器(交互研究的测量仪器)
```bash
tools/node/bin/node web/harness/transcribe.mjs <game> # 产物: research/04-playtests/transcripts/<game>.md
```
把一局游戏对玩家的全部输出(每句语音全文/音效/BGM/震动/静默段/缺资产)转成时间轴日志——**无法真听音频的评审(人或 agent)靠它审交互**。会话剧本在 `web/harness/sessions/<game>.mjs`(describe=状态行话术 + session=新手动作剧本)。规矩:剧本必须以完整弧线收尾、driver 要对提示做人类级反应、台词全文映射跑 `tools/extract_voice_text.py` 刷新。
### 1.5 顺手验证:单条语音再生成冒烟
@@ -127,8 +136,14 @@ models/hf/ # HF 模型缓存(13GB,不入库)
├── audio.js Web Audio 三层(bgm/voice/sfx)+ ducking + 交叉淡入
│ voice 走 SoundTouch 变速不变调管线(engine/vendor/soundtouch.js)
│ 总线挂 DynamicsCompressor 限幅器(-6dB/12:1)防爆音
│ 长按事件 → voice 临时 1.7× 快进
├── settings.js 三项全局设置(voice/speed/bgm),localStorage 持久化
│ 长按事件 → voice 临时 1.7× 快进(setRateBoostEnabled 可按游戏豁免)
│ isVoicePlaying() 公开查询
├── guide.js ★ 向导层:状态签名 earcon(8 音运行时合成)+ turn cue +
│ 静默看门狗 + 纠错;settings.guide 三档(full/standard/off),
│ off=全静且零定时器;插播一律 queue 不顶对白,error/watchdog
│ 语音空闲才播(过期丢弃)。设计裁定:docs/design/14-guide-layer.md
├── settings.js 四项全局设置(voice/speed/bgm/guide),localStorage 持久化
│ (speed 含 2.2 视障档)
├── haptics.js navigator.vibrate 封装,10 种预定义语义震型
└── game.js Game / StateMachineGame 基类
└── web/server/server.js Node 零依赖:静态文件 + 用户系统 API
@@ -254,10 +269,14 @@ source env.d/mureka.sh
| 问题 | 现状 | 后续处理建议 |
|---|---|---|
| iOS 无震动 | `haptics.js` 特性检测静默 no-op;**设计裁定:绝不回退提示音**(提示音混淆是用户反馈⑦根因) | RPG 无声敌人 iOS 不可格挡由"防御指令"兜底(05-rpg-addendum §2.2);保持现状 |
| ~~引擎无公开 `isVoicePlaying`~~ | **已解决(R7)**:`audio.isVoicePlaying()` 公开,游戏层全部收编 | — |
| ~~长按快进无 per-game 开关~~ | **已解决(R7)**:`audio.setRateBoostEnabled(false)`,rhythm/space 演奏期已豁免 | — |
| 向导 earcon 为运行时合成音 | 音色是「可用」级不是「精美」级(正弦/三角/方波包络) | 若升级为录制品 earcon:保持 8 音词表与参数边界不变(14 号文档 §2),只换渲染后端 |
| escape「需要帮助吗」问而不等 | P1 终评唯一「擦边当白痴」时刻 | v2 手势宪法专项:真问答 + PLAY 期目标重听入口 |
| space/simon 无「局」与结算仪式;storyline 链尾无轻量 turn 信号、二周目重播开场教学;rhythm 教学首误先震后教 | round4 终评 P0 全部裁定入 v2(research/04-playtests/round4/synthesis.md §2) | L5 会话层专项 + 微 polish 清单 |
| 语速上限 2.2(视障档) | P1 要求 3x+ | 需真机人耳验证 SoundTouch 高 tempo 质量,勿盲上 |
| iOS 无震动 | `haptics.js` 特性检测静默 no-op;**设计裁定:绝不回退提示音**(提示音混淆是用户反馈⑦根因) | RPG 无声敌人 iOS 不可格挡由「防御指令」兜底(05-rpg-addendum §2.2);保持现状 |
| SoundTouch 走 ScriptProcessorNode | 有固定处理延迟;voice 变速不变调用它(`engine/vendor/soundtouch.js`,**LGPL 许可**) | 功能正常不优先动;若换 AudioWorklet 需重测语速档;商业化注意 LGPL 声明义务(§7) |
| 引擎无公开 `isVoicePlaying` | 游戏层读私有字段 `audio._voice` 判断语音是否在播 | 下轮引擎迭代加公开 getter,游戏层替换;勿在更多地方扩散私有字段引用 |
| 长按快进无 per-game 开关 | 长按=voice 临时 1.7× 是引擎全局行为;12 号文档 §2.2 裁定的 rhythm 演奏期/space 对局豁免**尚未实现** | 引擎加 `setRateBoostEnabled(false)` 类开关,rhythm/space 注册豁免;落地后跑 13 号文档全局断言 |
| 菜单约定 RPG 豁免 | 全球模态菜单=单击循环/双击确认;RPG 探索态菜单刻意保持左右滑+单击(与探索范式同构,round2 裁决②) | 不是缺陷,不要"统一"它;测试断言按豁免写 |
| 服务器玩具级认证 | PIN 明文、token 不过期、HTTP 明文 | 家庭内网可接受;**公网化前必须**重做(PIN 哈希、token 过期、HTTPS),见 roadmap §5 |
@@ -265,7 +284,12 @@ source env.d/mureka.sh
完整版:[docs/design/roadmap.md](docs/design/roadmap.md)。摘要:
1. **RPG 第二/三章**(内容灌入,模式已定型):ch2《腐沼泽》(毒状态、蛊师先攻、Boss 召唤二阶段);ch3《无瞳峰》(无声前摇敌人→终 Boss 三阶段全无声,震动格挡是高潮机制)。需策划补发两章台词表 → 音频录制 → 开发灌入。
0. **交互研究 v2 清单**(round4 终评裁定移交,详见 [research/04-playtests/round4/synthesis.md](research/04-playtests/round4/synthesis.md) §5):
- **会话层专项**:space/simon 定义「局」与结算仪式(参照 rhythm 范本);storyline 链尾轻量 turn earcon + 二周目跳过已听教学;rhythm 教学首误免震先教。
- **手势宪法专项**:escape PLAY 期目标重听入口;「需要帮助吗」改真问答;全线重听键统一评估(longpress 候选)。
- **场景参数包 A/B/C/D**([research/03-schemes/schemes.md](research/03-schemes/schemes.md) §3 分期裁定):通勤两遍式播报 / 摸鱼震动语言 / 睡前定时器 / 下班容错档——入口显式选择+记忆,不做自动切换。
- **语速 3x+**:真机人耳验证 SoundTouch 高 tempo 质量后再上。
1. **RPG 第二/三章**(内容灌入,模式已定型):ch2《腐沼泽》(毒状态、蛊师先攻、Boss 召唤二阶段);ch3《无瞳峰》(无声前摇敌人→终 Boss 三阶段全无声,震动格挡是高潮机制)。需策划补发两章台词表 → 音频录制 → 开发灌入。新台词必须同步向导规范(00 文档 §6)。
2. **storyline 打磨**:菜单统一到全球约定;knowTrap 死标记修复(只写不读,需在北区节点接入或删除);ui_confirm/ui_menu 提示音排查替换;结局 X/4 轻量进度。
3. **存量打磨小项**:rhythm 结算末位语音修正(`no_more_song` 补录)、escape PLAY 中回大厅入口、大厅设置试听句。
4. **商业化前置清单**:Stable Audio 3 / Mureka / Qwen3-TTS / NotoSansSC(OFL)四项许可确认与凭证落盘 + **soundtouch.js 的 LGPL 声明义务**(About 页标注库名与许可)+ 隐私政策(用户系统公网化前置)。