Files
SoundGame/docs/design/04-space-rebuild.md
T
2026-10-01 23:26:47 +08:00

217 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 04 · 《盲航》重构方案(26 号对齐)
> **给开发者的实现要点摘要**
> 1. **交互权威**:26 号手册。四向滑动是核心玩法 → **帮助一律长按**;新手期无双击;`doubleTapWindow: 0`。
> 2. **保留同向闪避**:听到哪边来,就向哪边滑(把陨石拨开)。判定窗、whoosh 四向资产、前 60s 保护期、死亡归因分方位,全部保留。
> 3. **单击加速、护盾**改为解锁阶梯后的高级手势,**开场不教、保护期内不塞第二种机制**。
> 4. 对局 = Floor `ACTION`。第一句就让玩家拨一颗;第一次成功 ≤10s。回执 ≤100ms;挥空/冷却拒绝必须出声,禁止只震。
> 5. 暂停恢复后必须 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. 实现要点
1. 同向映射一行;判定常量不动。
2. `phase='drill'`:参数化 approachMs / harmless / 指定 dir。
3. 保护期撞击不掉血 + 归因。
4. 暂停:停刷怪;恢复先播复述或 count-in 慢速一颗,再 `_scheduleSpawn`。
5. 语音约 35 句×2 性别;删 num 拼接;删加速/护盾开场课句或改为解锁课。
6. README 手势表:同向闪避;长按帮助;新手无双击。
---
## 8. 废止清单
| 废止 | 改为 |
|---|---|
| 反向闪避 | 同向拨开 |
| 47s 连播旁白后即死 | 交互式四向演练,第一句就滑 |
| 开场同时教闪避+加速+护盾 | 先只会滑;加速/护盾后解锁 |
| 保护期 20s/45s 插入单击/双击课 | 删除 |
| 新手双击护盾 | 双击不存在 |
| 对局无帮助手势 | 长按=我在哪 |
| 加速冷却静默;挥空静默 | 拒绝句 / `whiff` + 回执 |
| 撞击只报损不报方位 | `hit_<dir>` 真话 |
| 没出手报「慢了」 | 「没拨到」 |
| 反馈只靠震动 | 回执必响;iOS 无震仍有声 |
| 菜单双击确认 | 左右滑+单击 |
| 帮助用上滑(与向上闪避冲突) | 长按 |
R5 刺耳重合成、归因补播、protect 去重、protect_soon、挥空音:**保留**,并补齐回执。