# 16 · 《回声地窟》(dungeon / Echo Cavern) > **给开发者的实现要点摘要** > 1. 交互权威:[26-audio-interaction-playbook.md](26-audio-interaction-playbook.md)。空间范式对齐 [26-apply-escape.md](26-apply-escape.md) 与 00 §5.3:**四向滑动是玩法 → 帮助一律长按**。 > 2. 核心动词:单击=声波脉冲(听回声看地形)。四向滑动=按面朝相对移动(前/左/右/后)。**废除**长按=前进、双击=重发脉冲。 > 3. 听声辨位 Roguelike:网格 + 面朝。回声=静态地形,脚步=动态怪物,播报=绝对方位——三套信息单源 `grid`。 > 4. 一命一局,7 层满通约 24 分钟;金币进元进度(5 项遗产)。L1 ATK=0、L2 ATK=1,学期不可能死。 > 5. 台词 [16-dungeon-voice-ids.md](16-dungeon-voice-ids.md)(127 句 ×2 性别,无 NPC)。随机性 mulberry32,`opts.seed` 可注入。 > 6. 规模:bgm 4 + sfx ~36 + voice 127×2。回声用预生成资产 + setTimeout + volume,不用引擎外实时节点。 --- ## 附录 C · 设计单 ### 1. 一句话核心动作 **朝四个方向滑动在洞窟里走,单击发出声波脉冲听地形,按住屏幕问路。** ### 2. 玩家能感知的状态(3 个) | 状态 | 听感 | Floor | |---|---|---| | 探索 | 洞穴环境 loop(amb_cave)常响;脚步/回声是内容 | ACTION | | 听讲 | 教学/房间/战斗报名语音,BGM 整链压低 | SPEAKING | | 危险 | battle BGM 或 danger earcon + 心跳震(血量≤25% / 敌前摇) | ACTION + danger 签名 | 探索期撞墙=闷响 + invalid,不算第四态(一次性教)。 ### 3. 新手手势与解锁(四向滑动是玩法) | 手势 | 含义 | 说明 | |---|---|---| | 四向滑动 | **面朝相对移动**:上=前进一格;左=向左侧走一格并转向该向;右=向右侧走一格并转向;下=后退一格(面朝不变) | 阶段 0 即核心,不按阶梯锁 | | 单击 | **脉冲**(探索);战斗玩家回合=挥击;敌方前摇窗内=格挡 | 核心动词 | | 长按 | **我在哪**(层/血/面朝/一个动作,≤20 字) | 帮助入口,全空间游戏同一条 | | 双击 | 新手期按单击处理。阶段 3=重听最近回声编码(冷却外再脉冲,不扣资源) | 禁止「双击=立刻免冷却重播」绑死连点 | | 下滑 | 对局中=后退(玩法占用)。菜单仅阶段 2 且 **SETTLE/TITLE** 开放 | 00 §5.3 | 对局期关闭长按旁白加速(帮助占用长按)。 ### 4. 状态 × 手势矩阵(新手期) | 状态 \ 手势 | 单击 | 四向滑动 | 长按 | 双击(未解锁) | 连点/乱滑 | |---|---|---|---|---|---| | 教学作答 | 按步骤(脉冲/确认) | 按步骤走/转向 | 帮助 | 按单击 | 计入迷茫 | | 探索 ACTION | 脉冲 + 回声组(冷却中 invalid) | 移动=脚步 silent-ok;撞墙=闷响+invalid+归因一次 | 帮助 | 按单击(冷却后再脉冲=合法「再听」) | 乱滑计入迷茫;冷却连点只 busy/invalid | | 描述在播 | 跳过这句 + ok | 打断并移动 | 打断,帮助 | 按单击 | 第一下有效 | | 战斗·我的回合 | 挥击(面前才中) | 左/右转面对敌人;下=尝试逃跑(普通怪必成挨一下;Boss 拒绝) | 帮助(血量+敌方位) | 按单击 | 计入迷茫 | | 战斗·敌前摇 | **格挡**(面对来源减伤 80%) | 转身(窗口内来得及则下一击面对) | 帮助 | 按单击=格挡 | 只处理第一下 | | 结算 | 再来一局 + ok | invalid + 解释一次 | 重听结算一句 | 按单击 | 只处理第一下 | | 菜单 | 确认当前项 | 右=下一项 / 左=上一项 | 重听菜单说明 | 按单击 | busy | 脉冲已有明显内容音时可 silent-ok。invalid/busy 永远出声。 ### 5. 等待点配置 **教学(6s/15s)** | 步 | 期待 | 指令 | |---|---|---| | D0 | 单击 | 「黑暗。点一下,听回声。」 | | D1 | 再单击 | 回声演示(前方保证有墙) | | D2 | 上滑(前进) | 「朝前,滑一下。」 | | D3 | 左滑或右滑 | 「向左滑,转身走。」 | | D4 | 单击 | 拾到本房金币(首胜) | | D5 | 长按 | 「迷路了,按住屏幕。」 | | D6 | 走向教学怪:单击挥击 | ATK=0,乱打不死 | 探索期无固定等待点。迷茫:静默 40s 起 / 乱滑 / 连续无效。L1 短目标句(「向右滑。」)→ L2 只放行导航方向 → L3 游戏朝楼梯走一步。卡关带路并入迷茫,不再 60/120/180 独立轰炸。 战斗回合:turn + 等待声;8s short「点一下,打。」15s earcon。 ### 6. 首 3 分钟逐秒脚本 | 时间 | 游戏说 / 播 | 期待 | 没做 | 做错 | |---|---|---|---|---| | 0~3s | amb_cave →「黑暗。点一下,听回声。」(critical) | 单击脉冲 | 「点一下。」 | 滑动:invalid +「先点一下。」 | | 3~8s | pulse + echo + 材质 →「对。回声越快,墙越近。」 | 再点(巩固) | 短句 | 冷却内连点:busy | | 8~10s | 奖励音(听懂回声=第一次成功) | — | | | | 10~25s | 「朝前,滑一下。」 | 上滑前进 | 「滑一下。」 | 撞墙:闷响 +「那边是墙。」 | | 25~40s | 「向左滑。」→ 脚步 | 左移 | 短句 | 纠错一次 | | 40~60s | 「按住屏幕,听自己在哪。」 | 长按 | 「按住。」 | 其他:invalid | | 60~90s | 自由探索;保证房内金币 | 走+脉冲 | 迷茫接管 | 撞墙无伤 | | 90~180s | 教学蝠 ATK=0:脚步 → 前摇窗单击格挡 → 单击挥击至击杀 | 战斗 | L3 演示格挡 | 学期不掉血 | 节奏:3s 内脉冲 ✓;10s 内第一次听懂回声 ✓;每 30s 新房间/金币/击杀 ✓。 ### 7. 失败表 | 失败类型 | 判定 | 归因 | 回到 | 新手期 | |---|---|---|---|---| | 撞墙 | 越界 | 「那边是墙。」每方向整局一次,之后只闷响+invalid | 原地 | 无伤 | | 挥空 | 怪不在面前 | 「它不在正面。左右滑。」 | 本回合 | 无 | | 格挡失败 | 前摇内未点或未面对 | 「慢了。听到就点。」/「在身后。」 | 下回合 | L1–2 怪打不死你 | | 死亡 | HP≤0 | die_cause_* 按 lastHit;die_adv_* 按真实格挡数 | TITLE,金币入 meta | 学期不可能 | | 迷路 | 迷茫信号 | L1→L3 带路 | 原地 | 无 | ### 8. 台词类别 - `critical`:开场「点一下,听回声」;结算承诺句 - `content`:intro、层/血/金/面朝/威胁档、btl_start_*、tut_*(改词后)、unlock_* - `hint`:lp_* 长按帮助、nav_*、stair_hint_*、sys_continue_ask、gd_pulse 短句 - `feedback`:wall、btl_swish、btl_behind、btl_no_turn、die_cause_*、tut_parry_miss - 停用旧句(须重录或下架):`tut_walk`「按住屏幕不放,你就往前走。」`tut_replay`「双击,再发一次脉冲」`tut_parry`「双击格挡」`tut_status`「上滑听状态」`tut_menu`「下滑打开菜单」`tut_flee_hold`「想逃跑,按住别松手」 资产账:127 句 ×2 性别(含 gold_some)。新教学句替换上列,总数可持平或 +3(tut_move / tut_help_hold / tut_parry_tap),上限 130。 ### 9. 断点复述 - 保存:拾取/战斗/下潜/菜单保存/死亡。data 含 meta + run(seed/floor/pos/face/hp…)。 - 回来:sys_continue_ask;单击恢复 + 长按帮助句作复述(位置。目标。滑一下。);右滑新周目(meta 保留)。 - summary:`第{floor}层 · {血量档} · 金币{meta.gold} · 遗产{n}/5`。 ### 10. 测试记录 - `web/dungeon/test/playtest.mjs`。改口径:D0 3s 内脉冲;移动断言改四向滑;长按=帮助不位移;战斗前摇单击=格挡;下滑动=后退不打开菜单;双击不重发免冷却。无声操作 0。真人冷启动待测。 --- ## 1. 概述 盲眼探窟者用脉冲「看」每次不同的地窟,听脚步辨怪,逐层下潜。死了金币留在遗产里,越死越强。黑暗是设定不是妥协。方位降维 ≤4。与 escape 同为空间探索,战斗回合承接 rpg,元进度为本作增量。 ## 2. 状态机 `TITLE / DRILL / EXPLORE / BATTLE / MENU / DESCEND / SETTLE`。MENU 仅 TITLE/SETTLE(及阶段 2)。 ``` TITLE ──单击(无档)──> DRILL(仅首次)──完成──> EXPLORE(L1) ──单击(有档)──> EXPLORE 恢复+复述 EXPLORE ⇄ BATTLE(走进怪格) EXPLORE ──楼梯格+单击──> DESCEND ──> 下层 HP≤0 或 L7 通关 ──> SETTLE ──单击──> TITLE ``` DESCEND:stairs_down + evt_descend + st_floor_N,约 5s。 ## 3. 声波脉冲 | 维度 | 编码 | |---|---| | 正前距离 | 4 档,延迟 0.25/0.50/0.80/1.10s,volume 0.9/0.7/0.5/0.35,echo_1..4 | | 正前材质 | +120ms mat_stone/door/stair/water | | 左右侧 | +0.35s 预 pan:side_wall_l/r 或 side_open_l/r(第一格地板=开口) | | 身后 | 不报;转身即查 | 冷却 1.2s。冷却内单击=invalid(无第二次回声)。需要再听:冷却后**再单击**,或长按问路。站楼梯格踏入即自动贴身铁器回声(到达即报,不占单击——单击仍是下潜确认)。 三套信息单源 grid:回声不报怪,脚步不报地形。威胁播报只报左右。 频带:脚步 100–300Hz,脉冲中频,BGM 垫底。并发前景 ≤2。 ## 4. 地窟生成 `rng(floor) = mulberry32((seed ^ (floor * 0x9E3779B9)) >>> 0)`。房间矩形 + L 走廊 MST;楼梯=BFS 最远房;怪距起点 ≥3(教学局非门怪 ≥4);主路径每 ≤12 格必有内容。 | 层 | 尺寸 | 怪物 | 宝物 | 目标分 | |---|---|---|---|---| | 1 | 7×7 | 盲眼蝠×2 ATK0 | 金币×1 | 3.0 | | 2 | 7×7 | 窟鼠×3 | 金+药 | 3.0 | | 3 | 9×9 | 菇×3 + 石甲蟹 | 金+短刃 | 3.5 | | 4 | 9×9 | 绕行者×2+洞蛛×2 | 金+皮甲 | 3.5 | | 5 | 11×11 | 洞蛛×3+绕行者×2 | 金+药 | 3.5 | | 6 | 11×11 | 洞蛛×2+绕行者×2+腐沼蟒 | 金+阔刃 | 3.5 | | 7 | 11×11 | 石像卫×3+窟中之王 | 金 | 4.0 | 窟主守楼梯;未击败踏格播 evt_stairs_lock。 ## 5. 战斗 明雷:脚步持续可闻。遭遇自动面对。 ``` 玩家回合 → 单击挥击 / 下滑逃跑 / 左右转 怪行动(绕位先报脚步)→ 前摇 1.2s tel_* 前摇内单击=格挡(面对 ×0.2 / 未面对 ×1.0) HP≤25% 且有药 → 自动喝 HP≤0 → 死亡链 ``` 缠斗怪左右滑:btl_no_turn 每场解释一次后只 invalid。绕位怪每 2 回合换左/右/后。Boss 半血 ATK+1,拒绝逃跑。逃跑必成、挨一下、怪留原格。每 4 杀 atkLv+1。 **格挡改绑单击(敌前摇窗)**:新手无双击;窗外单击若在玩家回合才是挥击,前摇期单击只判格挡。 ## 6. 数值与遗产 maxHp=20(+vigor 6);atk=2+atkLv+武器。L1–2 学期零惩罚。 | 敌 | HP | ATK | 行为 | 金 | |---|---|---|---|---| | 蝠 | 4 | 0 | 缠斗 | 3 | | 鼠 | 6 | 1 | 缠斗 | 5 | | 菇 | 8 | 2 | 缠斗 | 8 | | 石甲蟹 | 20 | 3 | Boss 绕位 | 50 | | 绕行者 | 10 | 2 | 绕位 | 10 | | 洞蛛 | 12 | 3 | 缠斗 | 12 | | 腐沼蟒 | 26 | 4 | Boss | 80 | | 石像卫 | 16 | 4 | 绕位 | 15 | | 窟中之王 | 36 | 5→6 | Boss | 通关 | 遗产(meta.gold,死亡不清):药 90 / 体魄 150 / 护符 220 / 回声强化 300 / 武器 450。金币档 0=空手句;0<金<50 播 gold_some「带回来一点,不多。」 ## 7. 音频 BGM:menu / explore / battle / boss。SFX:pulse、echo_1..4、mat_*、side_*、step_own/turn、bump、coin/potion/gear、stairs_down、mob_step_{small,bug,heavy}_{l,c,r}、tel_*、atk_swing/hit、parry、hurt、enemy_die、levelup、amb_cave、turn_tick。侧向能量只在单声道。 Voice 127×2,数字全分档整句。 ## 8. Floor 与迷茫 | 状态 | earcon | |---|---| | TITLE/MENU | menu | | DRILL/EXPLORE/DESCEND | explore | | BATTLE | battle | | SETTLE | settle | | 血≤25% / Boss 半血 | danger | choice 不用。对局中下滑=后退,不播 menu。等待声:探索环境 loop 已承担;战斗 turn 后 400ms 合成等待声。纠错每个状态×手势一次,之后只回执;连续 3 次无效进迷茫。 ## 9. 存档 ```json { "schema": 1, "game": "dungeon", "summary": "第3层 · 伤势不轻 · 金币268 · 遗产2/5", "meta": { "gold": 268, "unlocks": ["potion", "vigor"], "bestFloor": 5, "runs": 7, "kills": 23 }, "run": { "seed": 42, "floor": 3, "pos": [5, 2], "face": "E", "hp": 11 } } ``` SETTLE 进态 800ms 手势死窗(吞死亡瞬间在途单击,防结算链被截进 TITLE)。 ## 10. playtest 指针 seed 复现、回声===grid、学习期 ATK、死亡归因真话、到达即报铁器、gold_some 档位:保留。删除:长按位移、双击免冷却重发、下滑开战斗菜单、双击格挡。新增:3s 内脉冲、长按播帮助且 pos 不变、前摇单击减伤 ×0.2、下滑动 pos 后退。