11 KiB
04 · 《盲航》重构方案(26 号对齐)
给开发者的实现要点摘要
- 交互权威:26 号手册。四向滑动是核心玩法 → 帮助一律长按;新手期无双击;
doubleTapWindow: 0。- 保留同向闪避:听到哪边来,就向哪边滑(把陨石拨开)。判定窗、whoosh 四向资产、前 60s 保护期、死亡归因分方位,全部保留。
- 单击加速、护盾改为解锁阶梯后的高级手势,开场不教、保护期内不塞第二种机制。
- 对局 = Floor
ACTION。第一句就让玩家拨一颗;第一次成功 ≤10s。回执 ≤100ms;挥空/冷却拒绝必须出声,禁止只震。- 暂停恢复后必须 count-in 式的再瞄准(至少一颗慢速预告),不能一恢复就注定撞上。
0. 设计单(26 号附录 C)
0.1 一句话核心动作
听到陨石从哪边来,就向哪边滑,把它拨开。
0.2 玩家可感知的状态(3 个)
| 状态 | Floor | 听感 | 第一次教 |
|---|---|---|---|
| 演练 / 对局 | ACTION |
引擎 bgm/engine + whoosh/alarm;玩法声即状态 |
「陨石有声音。向声音那边滑。」 |
| 游戏在说 | SPEAKING |
演练指令、归因;整链 duck | 开场第一句 |
| 坠毁结算 | — | 停 engine → 结算链 → bgm/menu |
— |
危险预警用 alarm(内容音)+ 可选 danger 震;不能只靠震动。新手期只教这 3 种听感。
0.3 新手手势与解锁
| 手势 | 含义 | 解锁 |
|---|---|---|
| 四向滑动 | 同向闪避 | 阶段 0(核心) |
| 单击 | 演练里=继续;对局未解锁加速时=invalid+首次「现在只要滑。」 |
加速=阶段 4 或「完成第一局保护期且闪避成功 ≥3」后教一次 |
| 长按 | 我在哪(「引擎舱。躲开呼啸。向声音那边滑。」) | 阶段 1(第一次成功闪避后马上用一次) |
| 双击 | 新手期不存在;护盾同加速,更晚解锁 | 阶段 4 大厅或累计 3 局后专属教学 |
| 下滑(对局) | 向下闪避,不是菜单 | — |
| 下滑(结算后) | 菜单 | 阶段 2 |
0.4 状态 × 手势矩阵(新手期)
| 状态 \ 手势 | 单击 | 四向滑 | 长按 | 双击(未解锁) | 连点 / 乱滑 |
|---|---|---|---|---|---|
演练指令 critical |
busy |
busy(等指令说完再出陨石) |
帮助 | busy |
busy |
| 演练陨石 ACTION | invalid+「向声音那边滑。」 |
同向=拨开;错向=纠正+重来 | 帮助(不闭窗) | 当单击 | 乱滑计入迷茫 |
| 对局 ACTION | 未解锁加速=invalid 首次解释;已解锁=加速或冷却拒绝声 |
同向闪避 / 挥空 whiff+invalid |
帮助 | 当单击 | 计入迷茫 |
| 归因 / 结算 SPEAKING | 跳过这句(归因是 feedback,已操作则作废不播) |
打断并闪避(对局中) | 打断,帮助 | 当单击 | 400ms busy |
| 结算 | 再飞一次 | invalid+解释 |
重听结算 | 当单击 | 只处理第一下 |
| 菜单 | 确认 | 左右滑切换 | 重听说明 | 当单击 | busy |
0.5 等待点
| id | 期待 | _full |
_short |
静默 | L2 | L3 |
|---|---|---|---|---|---|---|
d1_left |
左滑 | 「听,左边有陨石。向左滑。」 | 「向左滑。」 | 演练窗结束=超时 | 左滑 | 游戏演示拨开 |
d2_right |
右滑 | 「这次在右边。」 | 「向右滑。」 | 同 | 右滑 | 演示 |
d3_up |
上滑 | 「上面,向上滑。」 | 「向上滑。」 | 同 | 上滑 | 演示 |
d4_down |
下滑 | 「下面,向下滑。」 | 「向下滑。」 | 同 | 下滑 | 演示 |
settle |
单击 | 「单击,再飞一次。」 | 「单击。」 | 20s / 45s | — | 提示音 |
对局 ACTION 不起等待声。迷茫:10s 内 3 次挥空/错向 → L1 短句「向声音那边滑。」→ L2 只认当前最近一颗的正确方向 → L3 自动拨开最近一颗(保护期或不扣血演示)。
0.6 首 3 分钟逐秒脚本
| 时间 | 游戏说 / 播 | 期待 | 没做 | 做错 |
|---|---|---|---|---|
| 0~3s | 「陨石在左边。向左滑。」(whoosh 在指令后) | 左滑 | 超时重来;2 次后演示通过 | 错向:纠正「在左边。」 |
| 3~10s | dodge 音 +「对。」→「这次在右边。」 | 右滑 | 同上 | 同上 |
| 10~30s | 上、下各一颗慢速演练 | 上滑、下滑 | 演示通过 | 纠正 |
| 30~40s | 「四个方向你会了。出发。」→ 保护期第一颗 | 同向滑 | 保护期撞了不掉血 + 归因 | 归因含方位 |
| 40~60s | 保护期:慢、稀、撞了不掉血 | 闪避 | 长按帮助 | 挥空 whiff |
| 约 50s | 「训练护盾还剩十秒。」(hint,空闲才播) |
— | — | — |
| 约 60s | 「训练护盾关闭。」 | 继续闪避 | — | — |
| 60~180s | 难度爬坡;不插入加速/护盾课 | 闪避 | 迷茫接管 | 真话归因;没出手不报「慢了」 |
第一次成功=第一颗拨开 ≤10s。每 30s 有可听进展(拨开声 / 里程碑句)。
0.7 失败表
| 类型 | 判定 | 归因 | 回到哪里 | 新手代价 |
|---|---|---|---|---|
| 错向 | 滑向 ≠ 陨石方向 | 「在左边。向左滑。」 | 演练:同一颗重来;对局:该颗结算 | 保护期不掉血 |
| 挥空 | 无悬置陨石的方向 | whiff + 首次「现在没有这边的陨石。」 |
继续 | 无 |
| 没出手 | 窗口内无滑 | 「没拨到。声音一响就滑。」禁止说慢了 | 演练重来;对局掉血或保护吸收 | 前两次保护/锁血 |
| 撞击(保护后) | 窗口过且未拨开 | hit_<dir> 方位 + 正确动作 |
继续;HP=0 结算 | 第 3 次可降刷怪 |
| 第三次同向失败 | 演练同方向 3 次 | 「听我做一次。」演示 | 通过该方向 | 无 |
坠毁结算:时间段整句 + 躲避段整句 +「单击,再飞一次。」破纪录加「新纪录!」。
0.8 台词类别
critical:各方向演练指令(≤3s)。content:出发句、保护结束、里程碑、结算段。hint:protect_soon、长按帮助、迷茫短句。feedback:hit_left/right/up/down、hit_last、挥空解释、冷却拒绝。
hit_* / protect_end 被呼喊顶断时必须登记残留并补播一次(R5-2 保留),但仍是 feedback:玩家已进入下一威胁则过期丢弃,不排在长链尾。
0.9 断点复述
对局可中途退出自动存:存活秒、闪避数、是否过保护期。回来:「你在航道上。躲开呼啸。向声音那边滑。」然后 count-in 一颗慢速陨石再恢复刷怪。
进度:{ bestSec, totalRuns, summary }。
0.10 测试
关键路径:四向各一次(做错重教,2 次后演示通过)→ 保护期被撞不掉血且归因 → 保护解除后闪避 → 结算。同向闪避。帮助=长按。加速/护盾不得开场同时教。
1. 核心决策:同向闪避(保留)
PUSH_SWIPE = {left:'left', right:'right', up:'up', down:'down'}。
- 左 whoosh → 左滑,上=高频→上滑,下=低频→下滑。whoosh_* 四资产复用,只改映射与文案。
- 判定:撞击前 1.5s 内滑动有效 + 250ms 宽限;
need=dir本身。 - 反向映射表
ESCAPE_SWIPE废止。
2. 交互式演练(DRILL)
每步 = 一句短指令 → 一颗演练陨石(逼近 4.5s,harmless)→ 操作 → 反馈。语音 onComplete 后再 spawn,不与 whoosh 叠。做错/超时:纠正 + 同一颗重来;最多 2 次后自动演示通过。
| 步 | 指令 | 内容 |
|---|---|---|
| D1 | 「听,左边有陨石。向左滑。」 | 左来左滑 |
| D2 | 「这次在右边。」 | 右 |
| D3 | 「上面,向上滑。」 | 上 |
| D4 | 「下面,向下滑。」 | 下 |
| D5 | 「四个方向你会了。出发。」 | 进保护期 |
删除 D0 两句零操作欢迎。成功:dodge +「对。」(仅 D1 语音肯定,其余只内容音)。
回访者:开场「点一下出发」,跳过演练。
3. 保护期与难度(数字保留)
| 参数 | 保护期 60s | 之后 |
|---|---|---|
| 逼近 | 4.0s | 3.2s → 2.0s(120s 爬满) |
| 间隔 | 4.0s | 3.2s → 1.4s |
| 撞击 | 不掉血:shield_block + 归因(方位+正确滑向) | 正常掉血 |
| 加速 / 护盾 | 不可用(未解锁) | 仅已解锁玩家 |
第 50s:protect_soon「训练护盾还剩十秒。」第 60s:保护关闭。
废止:保护期内第 20s/45s 暂停刷怪插入单击加速课、双击护盾课。
同一窗口内「撞击与下一颗 spawn 重叠」导致归因被杀:保留 R5 的「呼喊优先 + 被顶断补播」;protect_* 上一句未完则新吸收只播 shield_block、跳过重复教学句。
4. 高级手势解锁(加速 / 护盾)
机制代码可保留(持续增益规避 tap 延迟等),新手局不暴露:
| 能力 | 手势 | 解锁 | 教学 |
|---|---|---|---|
| 短促加速 | 单击 | 第一局结束或大厅全部解锁 | 一句:「点一下,加速。现在试试。」马上用一次 |
| 护盾 | 双击(仅阶段 3/4 已识别双击后) | 累计 3 局或大厅 | 单独一课,不与加速同句 |
未解锁:单击在对局中=invalid+解释一次。冷却中已解锁加速:boost_not_ready 必须出声(R5-4),可叠心跳震,禁止静默。挥空:sfx/whiff + invalid。
护盾充能完毕 shield_ready 保留,仅已解锁玩家播放。
5. 死亡即教学 + 结算整句
每次被撞:sfx/hit + hit_<dir>(「左边撞上的。向左滑。」)。第二次加 hit_last。没出手用「没拨到」,不用「慢了」。
删除 numClips 拼接。存活 4 段 + 躲避 4 段整句保留。里程碑 10/20/30/40/50 固定句,超出 50 不播。
结算单击=再飞;阶段 2 下滑=菜单(左右滑+单击)。禁止坠毁后死寂。
6. 回执与刺耳修复(R5 音频保留)
alarm / dodge / shield_block / boost / shield / whiff 程序合成峰值标准保留(≤−3.4 dBFS)。回执 ok/invalid/busy 走引擎合成,与内容音不混用。
激活加速/护盾:内容音 + ok 可省(已有 boost/shield 音)+ 可选 confirm 震。
7. 实现要点
- 同向映射一行;判定常量不动。
phase='drill':参数化 approachMs / harmless / 指定 dir。- 保护期撞击不掉血 + 归因。
- 暂停:停刷怪;恢复先播复述或 count-in 慢速一颗,再
_scheduleSpawn。 - 语音约 35 句×2 性别;删 num 拼接;删加速/护盾开场课句或改为解锁课。
- README 手势表:同向闪避;长按帮助;新手无双击。
8. 废止清单
| 废止 | 改为 |
|---|---|
| 反向闪避 | 同向拨开 |
| 47s 连播旁白后即死 | 交互式四向演练,第一句就滑 |
| 开场同时教闪避+加速+护盾 | 先只会滑;加速/护盾后解锁 |
| 保护期 20s/45s 插入单击/双击课 | 删除 |
| 新手双击护盾 | 双击不存在 |
| 对局无帮助手势 | 长按=我在哪 |
| 加速冷却静默;挥空静默 | 拒绝句 / whiff + 回执 |
| 撞击只报损不报方位 | hit_<dir> 真话 |
| 没出手报「慢了」 | 「没拨到」 |
| 反馈只靠震动 | 回执必响;iOS 无震仍有声 |
| 菜单双击确认 | 左右滑+单击 |
| 帮助用上滑(与向上闪避冲突) | 长按 |
R5 刺耳重合成、归因补播、protect 去重、protect_soon、挥空音:保留,并补齐回执。