Files
SoundGame/docs/design/01-escape-redesign.md
T
2026-10-01 23:26:47 +08:00

17 KiB
Raw Blame History

01 · 《暗室》重设计(26 号对齐)

给开发者的实现要点摘要

  1. 交互权威:26-audio-interaction-playbook.md。施工设计单摘要见 26-apply-escape.md。地图 as-built 见 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(本文不改 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 环境音规则(保留)

  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)。

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 为准,不以旧代码双击语义为准。