Files
SoundGame/docs/design/01-escape-redesign.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

106 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 01 · 《暗室》重设计(escape redesign)
> **给开发者的实现要点摘要**
> 1. 保留 3x3 网格与谜题链骨架(钥匙→铁柜→保险丝→电箱→大门),重写开场:前 ~2 分钟为**引导式脚本**(带玩家走到储物间、教会移动/检查/双击使用),之后进入自由探索。
> 2. 新增**卡关检测 + 三级提示**:以上一次"进展事件"起算,60s 无进展给暗示、120s 给明示、180s 给带路级提示;提示由计时器自动播出,不依赖玩家发现隐藏手势。
> 3. 环境线索音**可重听**:单击检查总是先重播当前房间环境音再播描述;9 个房间环境音去重(关键房间专属线索音)。
> 4. 操作反馈全部改震动(确认/撞墙/拾取/错误),iOS 静默降级;删除数字拼接播报,用时改为分段整句。
> 5. 手势映射(偏离全局默认,教学中讲清):四向滑=移动,单击=检查/重听,双击=使用物品/背包与目标,引导阶段下滑=跳过引导。
---
## 1. 现版诊断:"第一个房间都出不去"断在哪
读 `web/escape/game.js` 现版流程,新手断点有四:
1. **教学是两段可跳过的长旁白,零交互**(`voice/intro` → `voice/tutorial`,game.js:56-87)。玩家听完(或单击跳过)后被直接丢进 `PLAY`,没有任何一次"做对了一件事"的体验确认。移动、检查、使用物品三个核心动作都没有被验证过玩家真的会了。
2. **进入自由探索后没有任何方向感支撑**。起点 (1,1) 播一句 `voice/start_room`,玩家不知道房间有 9 个、不知道自己在哪、不知道目标在西南角。环境音只有 3 种(hum/wind/drip)铺给 9 个房间(`_playAmbient`, game.js:134-145),相邻房间声音雷同,靠环境音导航不成立。
3. **环境线索音只播一次**。进房间播一遍就没了,没听清就永远错过;`voice/wall` 撞墙提示也只播一次(`wallVoicePlayed`)。
4. **提示系统存在但不可达**。`hint_*` 四级提示语音已生成,但唯一入口是"双击且无可用目标"的兜底(game.js:195-198)——玩家根本不知道双击这个手势存在,更不知道要在"错误的地方"双击才能听到提示。卡关玩家恰恰是不会操作的人,提示入口藏在操作里,死循环。
## 2. 新开场:引导式脚本(GUIDE 阶段)
目标:前 2 分钟是"手把手",玩家每做一个动作都得到确认,引导结束时已天然完成谜题链第一环(拿到钥匙)。
### 2.1 流程
阶段 `GUIDE`(脚本化,步骤由玩家手势推进,不是定时旁白):
| 步 | 旁白(整句,功能) | 等待的玩家动作 | 反馈 |
|---|---|---|---|
| G0 | 剧情引入(2 句以内,比现版 intro 短):醒来、漆黑、要逃出去 | 单击继续 | CONFIRM 震动 |
| G1 | "先活动一下。试着朝任意方向滑一下,走一小步。" | 任意滑动 | 脚步声 + SWIPE_OK 震动 + "很好,你迈出了第一步。" |
| G2 | "这个房间不大,边界是墙。再滑两下,试着碰碰墙。" | 滑动 2 次(其中撞墙也计数) | 撞墙:wall 闷响 + ERROR 震动 + "那边是墙,换个方向。"(每次撞墙都播,取消 wallVoicePlayed 一次性限制);未撞墙:脚步 + SWIPE_OK |
| G3 | "跟着我指的路走。向左滑。" | 左滑(做错给纠正语音重等) | 脚步 + "对。再向下滑。" |
| G4 | "再向下滑。" | 下滑 | 脚步 + 到达储物间,播储物间专属环境音 |
| G5 | "听到水声和铁锈味了吗?单击一下,仔细检查这个房间。" | 单击 | pickup 音 + PICKUP 震动 + "你摸到了一把钥匙!"(谜题链第一环完成) |
| G6 | "钥匙应该能开什么。双击是把物品用出去的用法。现在先记住:双击。" | 双击 | 兜底播报背包 + CONFIRM 震动 + "对,就是这样。接下来靠你自己了。" |
| G7 | 目标陈述:"找到能用这把钥匙打开的东西。需要帮助时,在原地双击。" | — | 进入 PLAY |
- 引导期间任何步骤可**下滑跳过**(播"跳过引导"确认后直达 PLAY);跳过标志存 localStorage/进度,第二次进游戏开场直接问"上滑重听引导,单击直接开始"。
- 引导期间做错手势:不惩罚,播一句短纠正("不是这个方向,向左滑")继续等待;同一个步骤错 3 次给 `WARNING` 震动 + 更直白的重述。
- 引导脚本写死路线 (1,1)→(0,1)? 不,(1,1)→左=(0,1),再下滑=(0,2) 储物间。路线合法(现版图 (0,1) 是空房·风)。引导期间超出脚本路线的滑动被温和拦回("先跟我走")。
### 2.2 教学覆盖核对
引导结束时玩家已亲手做过:滑动移动(含撞墙)、单击检查、拾取、双击使用/查看。全部六个手势里只剩"上滑"未用——escape 不用上滑(豁免,见 00 文档 §5.2),无需教。
## 3. 卡关检测与三级提示
### 3.1 进展事件
以下任一发生即重置卡关计时器 `lastProgressAt`:拾取钥匙、打开铁柜、拾取保险丝、修好电箱、首次到达某关键房间(铁柜房/电箱房/大门,各记一次)、成功逃脱。普通移动/检查空房不算进展。
### 3.2 三级提示(计时器自动触发,无需手势)
| 无进展时长 | 级别 | 内容(整句预生成,每级每阶段一句) | 附带 |
|---|---|---|---|
| 60s | L1 暗示 | 面向当前目标的一句意象提示,如"铁锈味最重的地方,值得仔细看看" | WARNING 震动 + 语音提示前播"需要帮助吗?" |
| 120s | L2 明示 | 直接点明目标房间与动作,如"去西南角的储物间,单击检查,找钥匙" | WARNING 震动 |
| 180s | L3 带路 | 以玩家当前坐标算路,逐步导航:"从这里,向左滑,再向下滑"(每次触发按当前位置重算,滑动方向词为预生成的整句组合:方向指令句 4 句 × 顺序连读,非数字拼接,允许两句链播) | WARNING 震动,此后每 60s 重复 L3 直至有进展 |
- 提示级别按当前谜题链阶段(`_hintVoice()` 的 4 阶段:找钥匙/开铁柜/修电箱/开大门)× 3 级 = 12 句新增语音,全部是**整句**。
- 提示播完不重复骚扰:同 level 对同阶段只自动播一次(L3 除外,可周期重复)。
- 主动求提示保留:双击无目标时的兜底语音升级——先播背包,再播 L2 级明示(原来是 L1 级 hint_*)。
## 4. 环境线索音可重听 + 房间声音去重
1. **单击检查 = 重播环境音 + 描述**:`_inspect()` 改为先 `play(当前房间环境音)` 再链播描述语音(现版只播描述)。玩家随时可重听线索。
2. **环境音从 3 种扩到 6 种**,关键房间各有专属签名(Stable Audio 3 生成或合成,双格式):
- 储物间 (0,2):滴水 + 金属杂物轻响(`amb_storage`)
- 铁柜房 (2,1):嗡鸣 + 铁皮共振(`amb_cabinet`)
- 电箱房 (0,0):电流嗡鸣 + 偶尔火花(`amb_power`)
- 大门 (2,2):风声 + 门外空旷感(`amb_gate`)
- 起点 (1,1):单一滴水(`amb_drip`,保留)
- 其余 4 间空房:风声/远处嗡鸣两种弱化版轮换(`amb_wind`/`amb_hum` 保留)
3. 进房间自动播环境音(保留现行为),且**每次进入都播**——不再是"错过就没了",配合单击重听,线索可随时复核。
4. 大门房间通电后环境音切换为带电流声的版本(`amb_gate_live`),听觉上确认"电通了"这条谜题状态。
## 5. 反馈改震动(对齐 00 文档 §2)
| 事件 | 原反馈 | 新反馈 |
|---|---|---|
| 移动成功 | 脚步声 | 脚步声 + SWIPE_OK |
| 撞墙 | wall 闷响 | wall 闷响 + ERROR |
| 拾取/开柜/修电箱 | sfx + 语音 | sfx + 语音 + PICKUP / SUCCESS |
| 双击无目标(无效使用) | ui_deny 提示音 | **删除 ui_deny**,改 ERROR 震动(内容语音保留) |
| 逃脱成功 | 音效+语音 | 音效+语音 + SUCCESS |
| 提示出现 | 无 | WARNING |
`sfx/ui_deny` 这类"反馈提示音"全部退役;内容音(脚步、撞墙、机关)保留。
## 6. 语音重做清单(整句化 + 双音色)
- **删除**:`n0`-`n9`/`nshi`/`unit_min`/`unit_sec`/`time_prefix` 数字拼接链。用时播报改 4 段整句:"不到两分钟""五分钟内""十分钟内""超过十分钟"(`time_band1..4`),前缀"你逃出来了,用时"并入各段整句一次生成。
- **新增**:引导脚本 8 步全部语音(每步 1-2 短句)、12 句三级提示、跳过引导/二周目开场句、储物间等 4 个关键房间的新描述。
- **保留可用**:`empty_*`、`inspect_*`、`found_key`、`unlock_cabinet`、`fix_box`、`escape`、`replay`、`inv_*` 已是整句,重录一版 male 目录即可(文本不变,speaker=Uncle_Fu,instruct 与 female 版同款)。
- 全部语音按 00 文档 §3 生成:同 speaker+instruct 常量、female/male 双目录、ogg+m4a 双格式。
## 7. 流程图(新)
```
start → GUIDE(可下滑跳过)→ PLAY(自由探索 + 三级提示计时器)→ ENDING → 单击重开 / 下滑菜单
```
PLAY 阶段手势:四向滑=移动 / 单击=重播环境音+检查 / 双击=使用物品(无目标→背包+L2 明示)。ENDING:单击=重开,下滑=菜单(回大厅)。