# 26-apply · 《盲航》重构施工单(26 号文档落地) > 设计单正文见 04-space-rebuild.md 附录 C,本文是施工记录。交互规则权威: > [26-audio-interaction-playbook.md](26-audio-interaction-playbook.md)(施工口径 > [00-global-ux.md](00-global-ux.md))。台词增量见 > [04-space-voice-ids.md](04-space-voice-ids.md) R6 节与 `tools/voice_lines_26/space.md`。 ## 1. 实现接线(状态 → Floor 态、等待点、接线面) | 游戏状态(phase) | Floor 态 | 等待点 | 说明 | |---|---|---|---| | `drill` 指令在播 | SPEAKING(**critical**) | — | 手势一律 busy 回执(不跳句、不打断);指令 ≤3s | | `drill` 演练陨石悬置 | YOUR_TURN | `d1_left`~`d4_down`(04 §0.5 表:full=指令句、short=`d_short_*`、静默 6s/15s、L2 只认该方向、L3=onDemo 演示拨开) | whoosh 即威胁声;帮助=长按不闭窗 | | `playing` | **ACTION**(`enterAction()`,不起等待声) | 无(刷怪节奏即状态声) | 玩法语音走游戏层语音队列(见 §2) | | `playing` 归因/里程碑/护盾在播 | SPEAKING(经队列) | 无 | 滑动打断并闪避;tap 跳句 | | `over` 结算链 | SPEAKING(成绩链 content → 承诺段 critical) | 链播完 `yieldTurn(settle)` | settle:tap=再飞,down(阶段 2)=菜单,长按/双击=重听 | | `menu` | SPEAKING → YOUR_TURN | `menu`(tap/left/right) | 左右滑换项报名、单击确认、长按重听菜单说明 | | `ask` / `reopen` | SPEAKING → YOUR_TURN | `ask`(tap/up)、`reopen`(tap/right) | 回访者「点一下出发」;断点「继续/重开」 | | `leaving` | SPEAKING(确认句) | — | 播完或 2.5s 看门狗跳大厅 | 构造暴露:`this.receipts / floor / confusion / invalidHints / ladder`; `invalidHints.bind(floor)`;`confusion.onConfused → _takeover`(对局三级接管); `onGesture` 返回 `ok|hold|invalid|silent-ok`;`stateName()`;`invalidHint(state,g)`; `PIPELINE_OPTS = { swipeCore: true, longpressCore: true }`;`DT_CORE`(双击窗口分档快照)。 index.html:`makeInputPipeline` 接线;`ladder.stage() >= 3` 时默认双击窗口 + `doubletapCore: true`(双击=护盾),否则 `{ doubleTapWindow: 0 }`(双击折算 tap)。 visibilitychange:隐藏 `game.stop()`(自动存档);回前台 `game.start()` 走断点复述。 **对局语音队列(`_say`/`_pumpVoice`,26 §4.6 优先级 + R5-2 保留)**:一条链一条链播。 `interrupt`(dir 呼喊)= 生存优先,立刻顶断当前链,被顶断的 `defend` 包 (hit_*、hit_last、protect_end)整链重排一次;`defend`(归因)排在呼喊后、内容前; 其余(里程碑/护盾/教学/帮助)FIFO;`protect` 包去重(上一句在播即跳过 + 30s 台账)。 玩家手势打断链 = 该包作废(原则 5)。26 号 §6.2 的「打断失败」指标由 ACTION 态直通 + 呼喊豁免保证。 ## 2. 与 04 号文档的偏差记录 1. **演练指令/纠错/带过链全部 critical**:04 §0.4 矩阵列「演练指令 critical 行」的 长按格写「帮助」,引擎 critical 对所有手势一律 busy(floor.js 语义),无法豁免 单一手势。指令 ≤3s,事后长按立即可用。取舍理由:流程驱动句被打断会卡死演练 (onDone 不触发 → 不 spawn),critical 是唯一稳妥解。 2. **round2 R2「hit_last 在播期间呼喊抑制」简化为「hit_last 一并走防顶断登记」**: Floor 单链模型下抑制呼喊会饿死生存信息(逼近最短 2.0s);hit_last(defend) 被呼喊顶断后整链重排一次,保证完整送达,语义等价且更简单。 3. **演练陨石 spawn 不再同窗播 dir 呼喊**:04 §2 流程表无此件(指令刚说过方向, 语音先、音效后不叠)。实战呼喊保留(round4 R1 反应窗口起点不动)。 4. **双击窗口分档在页面加载时快照**(`DT_CORE = ladder.stage() >= 3`):会话中途 跨过阶段 3 的玩家本会话双击仍折算 tap(attach 不可热换),下局页面重进生效。 5. **新手锁血的归因说 hit_ 而非 protect_**(04 §0.7「撞击(保护后)」行): 锁血发生在保护期外,说「训练护盾接住了」是假话;说真话(方位 + 正确滑向)。 6. **`second_run_ask` 保留「上滑重听演练」**:04 §2「回访者:点一下出发」为主体, 上滑在 ask 态不与玩法冲突(对局中 up 才是闪避),保留为可选重听入口。 7. **断点续玩/暂停恢复共用裸飞缓冲**(前 3 颗 4.0s 慢速)作 count-in:04 §0.9 要求 「一颗慢速预告」,实现为三颗(round2 R2 恢复缓冲机制复用),更软,不更硬。 8. **help 经长按一句(lp_run)**;菜单「教学要点」项播 help_recap(改版口径,不含 加速/护盾——未解锁前不教第二件事)。 9. **里程碑档位 10/25/50/100** 沿用既有资产(04 §5 行文「10/20/30/40/50」与其自身 语音表 M 组不一致,以语音表为准;「超出不播」照办)。 10. **向导层(engine/guide.js)整体退役**:Floor + 等待点 + 迷茫接管替代; gd_hit_hint / gd_last_life 删除(hit_ / hit_last 已覆盖,避免双句说一事)。 ## 3. 台词类别映射(增量见 04a R6 节 / tools/voice_lines_26/space.md) - `critical`:drill_left/right/up/down(演练指令)、drill_retry_*、miss、drill_moveon、 drill_good、lp_teach + sys_turn_teach 链、drill_done、restart_hint(结算承诺段)。 - `content`:feat_boost / feat_shield(解锁教学)、protect_end、ms_*、time_*、dodge_*、 new_record、resume_recap、sys_unlock_down、menu_*(除说明句)、help_recap。 - `hint`:protect_soon、lp_run、hint_swipe、d_short_*、hint_tap、resume_ask、 sys_say_again(前缀)、sys_demo、sys_now_you。 - `feedback`:hit_*、hit_last、protect_*(吸收教学)、inv_tap、inv_whiff、 boost_not_ready、feat_shield_done(护盾不可用应答)、shield_block、shield_ready。 - 去重台账(`markHintSaid`,原则 9):指令/询问/菜单/承诺句播出即登记;protect_* 同方位 30s 不重播;纠错句(drill_retry_*)与 drill_moveon 30s 不重播; MarkingWaitPoint 子类给 L1/L2 接管句补登记(hints.js 不动)。 ## 4. 测试记录 - 无头 playtest:`tools/node/bin/node web/space/test/playtest.mjs` **102 断言全绿 (退出码 0,连跑 3 次确定通过)**。覆盖:§4.10 首三分钟(第一句 = D1 指令、 第一次成功 1.2s、没出手「没拨到」、2 次后演示通过)、保护期(吸收归因 + R5 去重 + protect_soon/protect_end)、对局核心(早滑不吞、断崖过渡、新手锁血、第 3 次失败 降难度、hit_last、R5-2 呼喊顶断重排、坠毁结算链 + settle 等待点 + sys_unlock_down)、 菜单(左右滑 + 单击确认、回大厅收尾)、第二局(加速解锁教学 + 冷却拒绝出声)、 断点复述(resume_ask/recap + count-in)、资产缺失看门狗、 **§6.2 乱点机器人:无声操作 0/46、打断失败 0、被动原句重复 0**(dir 呼喊为 玩法内容音不计重复;打断指标用 voice token 同一性判定,critical/呼喊豁免)、 资产引用校验(新增 18 id 白名单 = 待生成,存量零缺失)。 - 会话转写:`tools/node/bin/node web/harness/transcribe.mjs space` 跑通(359 行, 虚拟 114s;新增 id 待生成资产前转写标注静默,属预期)。 - 真人冷启动:待测(26 §6.3,3~5 人)。