277 lines
17 KiB
Markdown
277 lines
17 KiB
Markdown
# 01 · 《暗室》重设计(26 号对齐)
|
||
|
||
> **给开发者的实现要点摘要**
|
||
> 1. **交互权威**:[26-audio-interaction-playbook.md](26-audio-interaction-playbook.md)。施工设计单摘要见 [26-apply-escape.md](26-apply-escape.md)。地图 as-built 见 [25-escape-map-flow.md](25-escape-map-flow.md)。冲突以 26 号为准。
|
||
> 2. **保留**:3×3 网格、谜题链(钥匙→铁柜→保险丝→电箱→大门)、房间环境音签名、引导走到储物间拿钥匙。
|
||
> 3. **探索 = Floor `ACTION`**:四向滑=移动;**单击=检查并使用**(站在目标上点一下就完成拾取/开柜/修电/开门);**长按=我在哪**(位置→目标→一个动作)。新手期 `doubleTapWindow: 0`,双击不存在。
|
||
> 4. 第一句就让玩家滑;第一次成功(脚步声)≤10s。回执 ok/invalid/busy ≤100ms,禁止只震不响。
|
||
> 5. 卡关不再按 60/120/180s 原样重播说明书。走迷茫三级接管 + 三档提示(完整句→短句→提示音)。
|
||
|
||
---
|
||
|
||
## 0. 设计单(26 号附录 C)
|
||
|
||
### 0.1 一句话核心动作
|
||
|
||
**朝四个方向滑动在房间里移动,单击检查和使用,按住屏幕问路。**
|
||
|
||
### 0.2 玩家可感知的状态(3 个)与声音身份
|
||
|
||
| 状态 | Floor | 听感 | 第一次出现时教一句 |
|
||
|---|---|---|---|
|
||
| 探索(轮到你) | `ACTION` | 当前房间环境音常响(水滴/风/电流) | 「听到房间的声音,就可以走。」 |
|
||
| 描述在播 | `SPEAKING` | 房间描述语音;BGM 整链压低;句间不起等待声 | (开场指令即 SPEAKING) |
|
||
| 撞墙 / 无效 | — | 闷响 + `invalid` 回执(低「咚」) | 「那边是墙,换个方向。」 |
|
||
|
||
结算、菜单是元状态,用 `bgm/menu` + 结算句标识,新手期不新教第 4 种状态音乐。
|
||
|
||
### 0.3 新手手势表与解锁(四向滑动是玩法 → 帮助一律长按)
|
||
|
||
| 手势 | 含义 | 解锁 |
|
||
|---|---|---|
|
||
| 四向滑动 | 移动 | 阶段 0(核心玩法,不锁) |
|
||
| 单击 | 检查 + 使用(站在目标上即用) | 阶段 0 |
|
||
| 长按 | 我在哪(目标 + 方位一句,≤20 字) | 阶段 1(拿到钥匙时教,马上用一次) |
|
||
| 下滑(对局中) | 仍是「向下走」,**不是菜单、不是跳过引导** | — |
|
||
| 下滑(结算后) | 菜单 | 阶段 2(第一次逃脱后) |
|
||
| 双击 | 重听最近描述 | 阶段 3(累计 3 局);未解锁按单击处理 |
|
||
|
||
`attachGestures(..., { doubleTapWindow: 0 })`。键盘回车当单击。
|
||
|
||
### 0.4 状态 × 手势矩阵(新手期)
|
||
|
||
| 状态 \ 手势 | 单击 | 四向滑动 | 长按 | 双击(未解锁) | 连点 / 乱滑 |
|
||
|---|---|---|---|---|---|
|
||
| 引导答题 | 按步骤答 / `invalid`+首次纠正 | 按步骤答(脚步=`silent-ok`;撞墙=闷响+`invalid`) | 帮助一句 | 按单击处理 | 只处理第一下,其余 `busy` |
|
||
| 探索 ACTION | 检查+使用(环境音/描述即反馈) | 移动=脚步;撞墙=闷响+`invalid`+方位归因 | 帮助(目标+方位) | 按单击处理 | 计入迷茫 |
|
||
| 描述在播 SPEAKING | 跳过这句 + `ok`(关键获得 `critical`→`busy`) | 打断并移动 | 打断,帮助 | 按单击处理 | 400ms 内 `busy` |
|
||
| 结算 | 再来一局 + `ok` | `invalid` + 首次解释 | 重听结算 | 按单击处理 | 只处理第一下 |
|
||
| 菜单(阶段 2) | 确认当前项 | 左右滑切换(报名) | 重听菜单说明 | 按单击处理 | `busy` |
|
||
| 迷茫 L2 | 照常 | 只放行接管方向,其余 `invalid`(不移动) | 照常 | 照常 | 计入冷却 |
|
||
|
||
无空格、无「没有声音」的格子。连点不绑定重播、重开、跳过引导。
|
||
|
||
### 0.5 等待点配置
|
||
|
||
引导等待点(静默 6s 短句 / 15s 提示音):
|
||
|
||
| id | 期待 | `_full` | `_short` | L2 只留 | L3 演示 |
|
||
|---|---|---|---|---|---|
|
||
| `g0_swipe` | 任意滑动 | 「黑暗。朝任意方向,滑一下。」 | 「滑一下。」 | 任意滑 | 游戏自己走一步 |
|
||
| `g2_wall` | 滑动×2(含撞墙) | 「再滑两下,试试墙。」 | 「再滑。」 | 任意滑 | 演示撞墙闷响一次 |
|
||
| `g3_left` | 左滑 | 「现在,向左滑。」 | 「向左滑。」 | 左滑 | 游戏向左走 |
|
||
| `g4_down` | 下滑 | 「对。再向下滑。」 | 「向下滑。」 | 下滑 | 游戏向下走进储物间 |
|
||
| `g5_tap` | 单击 | 「单击一下,仔细检查。」 | 「单击。」 | 单击 | 「听我做一次。」→ 拾钥匙 |
|
||
|
||
探索期无固定等待点。静默(约 40s 起,之后每 20s 喂一次静默信号)与乱点一并进迷茫:
|
||
|
||
| 级 | 做什么 | 台词 |
|
||
|---|---|---|
|
||
| 1 | 说目标方位短句(30s 台账去重,说过就只给提示音) | `nav_*`「向右滑。」 |
|
||
| 2 | 只放行第一导航方向 | 「现在,只要向左滑。」 |
|
||
| 3 | 游戏自己朝目标走一步 | 「听我做一次。」→ 脚步 →「现在你来。」 |
|
||
|
||
同一等待点升到 3 后停止接管,只留房间环境音。**禁止**同级原样重播 26 秒说明书。
|
||
|
||
### 0.6 首 3 分钟逐秒脚本
|
||
|
||
| 时间 | 游戏说 / 播 | 期待玩家做 | 没做 | 做错 |
|
||
|---|---|---|---|---|
|
||
| 0~3s | 环境水滴 →「黑暗。朝任意方向,滑一下。」(`critical`,≤3s) | 任意滑动 | 6s:「滑一下。」再 6s 只提示音 | 单击:`invalid`+「先滑一下。」 |
|
||
| 3~10s | 脚步声(第一次成功)→「对。你被困在地下设施里。再滑两下,试试墙。」 | 滑动(撞墙也算) | 「再滑。」 | 方向错也有闷响(试错无代价) |
|
||
| 10~25s | 闷响 +「那边是墙,换个方向。」+ 方位句 →「现在,向左滑。」 | 左滑 | 「向左滑。」 | 其他方向:纠正,不惩罚 |
|
||
| 25~40s | 脚步 →「对。再向下滑。」→ 储物间环境音 | 下滑 | 「向下滑。」 | 纠正 |
|
||
| 40~55s | 「听到水声了吗?单击一下,仔细检查。」→ 拾取音 →「你摸到了一把钥匙!」 | 单击 | 「单击。」 | 滑动:纠正 |
|
||
| 55~70s | 「想知道自己在哪,就按住屏幕。」(马上等一次长按)→「找到能用钥匙打开的东西。」 | 长按一次,然后自由探索 | 「按住屏幕。」 | 其他手势:`invalid`+首次解释 |
|
||
| 70~180s | 首到房间描述、谜题链(钥匙→铁柜→保险丝→电箱→大门) | 探索:滑到目标,单击使用 | 迷茫三级 | 撞墙归因;用错地方由检查句说明 |
|
||
|
||
节奏检查:3s 内动手;10s 内第一次成功(脚步);每 30s 有可听进展(新房间环境音/描述)。无纯规则长说明。
|
||
|
||
### 0.7 失败表
|
||
|
||
| 失败类型 | 判定 | 归因句 | 回到哪里 | 新手期代价 |
|
||
|---|---|---|---|---|
|
||
| 方向错(撞墙) | 越界 | `wall` + `wall_dir_*`(每方向整局语音一次,之后只闷响+`invalid`) | 原地 | 无 |
|
||
| 引导错手势 | 与当前步不符 | 短纠正(「向左滑。」) | 本步重等 | 无 |
|
||
| 用错地方 | 站位不对 | 检查描述告诉你这里有什么;不扣物品 | 原地 | 无 |
|
||
| 迷路 / 乱点 | 迷茫信号 ≥2 | L1 短目标 → L2 只留方向 → L3 走一步 | 原地 | 无 |
|
||
| 同步失败 3 次 | 引导同一等待点 | 「听我做一次。」演示后交还 | 本步 | 无 |
|
||
|
||
归因 2s 内播出;玩家一操作,排队中的 `feedback` 作废。
|
||
|
||
### 0.8 台词类别
|
||
|
||
- `critical`:`g0_new`(开场指令 ≤3s);关键获得句拆短后的那一句(摸到钥匙 / 通电确认),≤3s。
|
||
- `content`:引导指令、房间描述、`found_key` 链其余句、`unlock_cabinet`、`fix_box`、`escape`、`time_band*`、`start_room`、`inspect_*`、`gd_*_dir`、`gd_next_fuse`。
|
||
- `hint`:长按帮助 `lp_*`、`nav_*`、三档短句、`sys_demo` / `sys_now_you`、菜单说明。
|
||
- `feedback`:`wall`、`wall_dir_*`、引导纠正、`inv_*`(首次解释无效手势)。
|
||
|
||
完整清单见 `tools/gen_voice_dual.py` 的 `ESCAPE_LINES` 与 [01-escape-voice-ids.md](01-escape-voice-ids.md)(本文不改 voice-ids 文件)。须停用或重录任何「双击使用 / 双击求提示」旧句(含 `g6_doubletap`)。
|
||
|
||
### 0.9 断点复述
|
||
|
||
- 每步移动/进展写 `soundgame.escape.save`(坐标 + 谜题旗标 + 用时)。
|
||
- 回来 5s 内:状态声(房间 amb)+ 复述句(位置。目标。一个动作。)+ 交出探索。
|
||
- 二周目开场:`sys_continue_ask` 语义——单击继续上次;右滑重新开始。不再用上滑重听整段引导。
|
||
|
||
### 0.10 测试记录
|
||
|
||
无头 playtest:`web/escape/test/playtest.mjs`。交互验收按 [13-playtest-criteria.md](13-playtest-criteria.md) §3:3s 内任意滑;引导走到储物间;**单击**检查得钥匙;自由探索同链逃脱。真人冷启动待测。
|
||
|
||
---
|
||
|
||
## 1. 保留的空间与谜题(不变)
|
||
|
||
### 1.1 3×3 网格
|
||
|
||
坐标 x 0 西→2 东,y 0 北→2 南。内部全连通,无锁门。外圈撞墙。起点 (1,1)。
|
||
|
||
| 房间 | 坐标 | 环境音 | 单击(检查+使用) |
|
||
|---|---|---|---|
|
||
| 电箱房 | (0,0) | `amb_power` | 有保险丝 → 修电(`fix_box`);否则描述未修/已修 |
|
||
| 空房 | (1,0) | `amb_wind` | `empty_1` |
|
||
| 空房 | (2,0) | `amb_hum` | `empty_3` |
|
||
| 空房 | (0,1) | `amb_hum` | `empty_2` |
|
||
| 起点 | (1,1) | `amb_drip` | `start_room`(操作总览改为:滑动移动,单击检查) |
|
||
| 铁柜房 | (2,1) | `amb_cabinet` | 有钥匙且未开 → 开柜得保险丝;否则锁着/已开描述 |
|
||
| 储物间 | (0,2) | `amb_storage` | 未拾钥匙 → 拾取;否则空描述 |
|
||
| 空房 | (1,2) | `amb_wind` | `empty_3` |
|
||
| 大门 | (2,2) | `amb_gate` / 通电后 `amb_gate_live` | 已通电 → 逃脱;否则门的状态描述 |
|
||
|
||
### 1.2 谜题链
|
||
|
||
```
|
||
储物间单击 ──得钥匙──▶ 铁柜房单击 ──得保险丝──▶
|
||
电箱房单击 ──通电──▶ 大门单击 ──▶ 逃脱
|
||
```
|
||
|
||
物品即进度:`hasKey` / `hasFuse` / `cabinetOpen` / `powerOn`。阶段:`key → cabinet → box → gate`。
|
||
|
||
最短路径(移动次数与旧路线相同,使用全部改为单击):
|
||
(1,1)→左(0,1)→下(0,2)【单击拾钥匙】→右(1,2)→右(2,2)→上(2,1)【单击开柜】→左(1,1)→左(0,1)→上(0,0)【单击修电】→右(1,0)→右(2,0)→下(2,2)【单击逃脱】。
|
||
|
||
### 1.3 环境音规则(保留)
|
||
|
||
1. 单击检查 = 先重播当前房间环境音,再播描述。
|
||
2. 每次进入房间都播环境音(错过可再听)。
|
||
3. 关键房间专属签名:储物间滴水杂物、铁柜铁皮共振、电箱火花、大门风声;通电后大门切 `amb_gate_live`。
|
||
4. 空房首访补播 `empty_*`((1,0)→1 / (0,1)→2 / (1,2)→3 / (2,0)→3),不算进展事件。
|
||
5. 探索期环境音常驻,承担「还活着」;等待声可更轻或由 amb 代替(全游戏统一,见 [10-feedback2-state-bgm.md](10-feedback2-state-bgm.md))。
|
||
|
||
---
|
||
|
||
## 2. 引导(GUIDE)——删除 G6 双击
|
||
|
||
引导仍写死路线:(1,1)→左(0,1)→下滑(0,2) 储物间。超出路线的滑动温和拦回(「先跟我走。」)。做错不惩罚。
|
||
|
||
| 步 | 指令 | 等待 | 成功 |
|
||
|---|---|---|---|
|
||
| G0 | 「黑暗。朝任意方向,滑一下。」 | 任意滑动 | 脚步 +「对。」 |
|
||
| G1–G2 | 再滑、碰墙 | 滑动(撞墙计数) | 闷响 + 方位 |
|
||
| G3 | 「现在,向左滑。」 | 左滑 | 脚步 |
|
||
| G4 | 「再向下滑。」 | 下滑 | 储物间 amb |
|
||
| G5 | 「单击一下,仔细检查。」 | 单击 | 拾钥匙(谜题第一环) |
|
||
| G6 | **废止**(原「双击使用」) | — | — |
|
||
| G7 | 「找到能用钥匙打开的东西。迷路了,按住屏幕。」 | 长按一次(阶段 1 教学)后进 PLAY | 帮助句 + 自由探索 |
|
||
|
||
- **没有「下滑跳过引导」**。下滑是向下走。已完成过引导的玩家:开场一句「点一下开始」直进 PLAY(可跳过引导复述);帮助手势重听「我在哪」,不重念整段教案。
|
||
- 引导指令标 `content`(G0 开场那句 `critical`)。迷茫接管后再演示,不靠玩家发现隐藏手势。
|
||
- `_guideBusy` 期间:缓存首个非帮助手势,语音结束后按新步骤补判(合法=作答,不合法=纠正)。缓存 1 个,不跨步。
|
||
|
||
进 PLAY 的任何路径(含二周目直进)都至少听过一次目标句(`g7_goal` 或等价短句)。二周目可单击跳过该句。
|
||
|
||
---
|
||
|
||
## 3. 单击 = 检查 + 使用
|
||
|
||
站在正确房间、满足前置时,**一次单击**同时完成「听这里有什么」和「用身上的东西」。
|
||
|
||
| 房间 | 前置 | 单击结果 |
|
||
|---|---|---|
|
||
| 储物间 | 尚无钥匙 | 拾钥匙(内容音 `pickup`,可省 `ok`) |
|
||
| 铁柜房 | 有钥匙且未开 | 开柜得保险丝 |
|
||
| 电箱房 | 有保险丝且未通电 | 修电 |
|
||
| 大门 | 已通电 | 逃脱 |
|
||
| 其他 / 前置不满足 | — | 只播检查描述(告诉你这里没有可做的,或还缺什么) |
|
||
|
||
废止:双击使用、双击无目标=背包+L2 答案。背包信息不作为「乱点奖励答案」;需要时由长按帮助一句带出(「储物间。找铁柜。向右滑。」),不点明未到达的解法步骤。
|
||
|
||
关键获得链标 `critical` 的那一句 ≤3s,其余可跳。结算链播完前单击不重开(`_settleBusy`,链完或 30s 兜底),给 `busy`。
|
||
|
||
---
|
||
|
||
## 4. 迷茫接管(取代 60/120/180 卡关广播)
|
||
|
||
**进展事件**(重置迷茫、进入下一目标):拾钥匙、开铁柜、拾保险丝、修电箱、逃脱;首到储物间/铁柜房/电箱房/大门各记一次。普通移动、检查空房不算进展。
|
||
|
||
旧「无操作 60s L1 / 120s L2 / 180s L3 且 L3 每 60s 原样重播带路句」**废止**。改为 26 号 §4.5:
|
||
|
||
- 信号:连续无效、乱滑、同步骤失败、静默(探索约 40s 无进展也计静默)。
|
||
- 权重到 2 → 接管,15s 冷却。
|
||
- L1 短目标句(不泄完整解法)→ L2 只放行导航方向 → L3 游戏走一步。
|
||
- 同一目标段升到 3 后只留环境音。
|
||
- 主动帮助 = 长按,回答一句(位置→目标→一个动作),**不是** L2 明示房间+动作的白送答案。
|
||
|
||
撞墙方位句 `wall_dir_*`、进展链尾目标名+方位 `gd_cabinet_dir` / `gd_box_dir` / `gd_gate_dir`、不泄题进度句 `gd_prog_*` **保留**,但:
|
||
|
||
- `gd_prog_*` 并入迷茫 L1 或进展事件当下,不另开 150s 平行广播与 60/120/180 叠炸。
|
||
- 游戏主动提示永不原样重复;玩家长按才给完整句,前加「再说一遍:」。
|
||
|
||
---
|
||
|
||
## 5. 回执、震动、发言权
|
||
|
||
| 事件 | 声音(主通道) | 震动(补充) |
|
||
|---|---|---|
|
||
| 移动成功 | 脚步 = `silent-ok` | swipe(引擎内置) |
|
||
| 撞墙 | 闷响 + `invalid` | error |
|
||
| 检查/使用成功 | 内容音(拾取/开门)可省 `ok` | pickup / success |
|
||
| 无效手势 | `invalid`;该状态×手势首次加一句解释 | error 可叠加 |
|
||
| 关键句期间操作 | `busy` | — |
|
||
| 逃脱 | 内容音 + 结算链 | success |
|
||
|
||
禁止:无效只震;iOS 无震动则无反馈;删除内容音只留震。`sfx/ui_deny` 仍退役。系统回执用合成音;脚步/墙/机关用录音。
|
||
|
||
Floor:描述链 `SPEAKING`(整链 duck);探索 `ACTION`;结算链 `SPEAKING`/`BUSY`;结算后 `YOUR_TURN`(单击再来)。
|
||
|
||
---
|
||
|
||
## 6. 语音与用时(整句,保留分段)
|
||
|
||
- 用时仍 4 段整句 `time_band1..4`,禁止数字拼接。
|
||
- 引导句按 §0.6 缩短为「动作+结果」;`start_room` 去掉「双击使用」。
|
||
- 男女双目录、ogg+m4a,规范见 [00-global-ux.md](00-global-ux.md) §3。
|
||
|
||
---
|
||
|
||
## 7. 流程
|
||
|
||
```
|
||
start → 首局 GUIDE(G0–G5 + 长按教学)→ PLAY → ENDING
|
||
→ 二周目:单击继续 / 右滑重开
|
||
ENDING:单击=再来一局;阶段 2 后下滑=菜单(左右滑切换,单击确认)
|
||
```
|
||
|
||
BGM:探索 `bgm/drone`;菜单/结算 `bgm/menu`。禁止结算黑屏寂静。见 10 号文档。
|
||
|
||
---
|
||
|
||
## 8. 废止清单
|
||
|
||
| 废止 | 改为 |
|
||
|---|---|
|
||
| G6 双击使用 / 双击求提示 | 单击检查+使用;长按=我在哪 |
|
||
| 新手期识别双击;`doubleTapWindow` 300ms | `doubleTapWindow: 0`;双击当单击 |
|
||
| 引导期下滑=跳过引导 | 下滑=向下走;回访者开场单击跳过教案 |
|
||
| 60/120/180s 原样重播 L1/L2/L3;L3 每 60s 再念带路 | 迷茫三级 + 三档提示,不原样重复 |
|
||
| 双击兜底直通 L2 答案 | 长按一句状态;答案不白送 |
|
||
| 操作反馈只靠震动;iOS 静默 | 回执声必响 |
|
||
| 开场两段可跳过长旁白、零交互 | 第一句就滑 |
|
||
| 菜单:单击循环、双击确认 | 左右滑切换、单击确认 |
|
||
| 看门狗重播完整说明书 | 完整句 → 短句 → 提示音 |
|
||
| 句间恢复 BGM | 整链压低 |
|
||
|
||
仍有效:3×3 地图与谜题链、环境音 6 类、撞墙方位、目标名+方位进展句、空房首访、busy 手势缓存、结算链守卫、用时分段整句、存档字段。
|
||
|
||
地图格点与 as-built 差异对照见 [25-escape-map-flow.md](25-escape-map-flow.md)。交互以本文与 26-apply-escape 为准,不以旧代码双击语义为准。
|