17 KiB
01 · 《暗室》重设计(26 号对齐)
给开发者的实现要点摘要
- 交互权威:26-audio-interaction-playbook.md。施工设计单摘要见 26-apply-escape.md。地图 as-built 见 25-escape-map-flow.md。冲突以 26 号为准。
- 保留:3×3 网格、谜题链(钥匙→铁柜→保险丝→电箱→大门)、房间环境音签名、引导走到储物间拿钥匙。
- 探索 = Floor
ACTION:四向滑=移动;单击=检查并使用(站在目标上点一下就完成拾取/开柜/修电/开门);长按=我在哪(位置→目标→一个动作)。新手期doubleTapWindow: 0,双击不存在。- 第一句就让玩家滑;第一次成功(脚步声)≤10s。回执 ok/invalid/busy ≤100ms,禁止只震不响。
- 卡关不再按 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(本文不改 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 §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 环境音规则(保留)
- 单击检查 = 先重播当前房间环境音,再播描述。
- 每次进入房间都播环境音(错过可再听)。
- 关键房间专属签名:储物间滴水杂物、铁柜铁皮共振、电箱火花、大门风声;通电后大门切
amb_gate_live。 - 空房首访补播
empty_*((1,0)→1 / (0,1)→2 / (1,2)→3 / (2,0)→3),不算进展事件。 - 探索期环境音常驻,承担「还活着」;等待声可更轻或由 amb 代替(全游戏统一,见 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 §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。交互以本文与 26-apply-escape 为准,不以旧代码双击语义为准。