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

221 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.
# 02 · 《音序回响》重设计(26 号对齐)
> **给开发者的实现要点摘要**
> 1. **交互权威**:26 号手册。设计单摘要见 [26-apply-simon.md](26-apply-simon.md)。
> 2. **玩法保留**:听一串音色,原样复现。对局/教学**无 BGM**;仅菜单与结算挂 `bgm/menu`(0.3)。六手势音色映射保留,但**按实力渐进开放**,新手只有单击/左滑/右滑。
> 3. **帮助=长按**(六手势都是答题输入)。新手期无双击音色;`doubleTapWindow: 0`。
> 4. **失败不扣机会账**:第 1~2 次答错=真话归因 + 免费重听整串;第 3 次放慢;再错才结算。新手期零资源消耗。
> 5. 听序列 = Floor `BUSY`(任何手势=`busy`,序列不变);答题 = `YOUR_TURN`(`input_open` + 风铃 + 等待声)。回执 ≤100ms,禁止只震不响。
---
## 0. 设计单(26 号附录 C)
### 0.1 一句话核心动作
**听一串音色,原样复现。**
### 0.2 玩家可感知的状态(3 个)
| 状态 | Floor | 听感 | 第一次教 |
|---|---|---|---|
| 听序列 | `BUSY` | 音色序列;手势=`busy`「嗯」 | 「先听,不要动手。」 |
| 轮到你 | `YOUR_TURN` | `input_open` → `turn` 风铃 → 等待声;答题立即回声 | 「听到这个声音,就是轮到你了。」 |
| 结算 | — | `gameover` + 结算链 + menu pad | — |
不要用 BGM 区分听/答。对局全程无 BGM。
### 0.3 新手手势与音色阶梯
全部六个手势在本作都是**音色**。帮助换到长按。音色按历史最佳轮数开放,一次只学一样:
| 音色 / 手势 | 解锁条件 |
|---|---|
| 单击 / 左滑 / 右滑 | 阶段 0(选项 ≤3) |
| 上滑 | 清过第 1 轮 |
| 下滑(同时=菜单手势,仅结算/菜单相位) | 清过第 3 轮;对局答题中下滑仍是音色(阶段 2 后结算才开菜单) |
| 双击 | 清过第 6 轮(阶段 3 专属高级音色);未入池按单击处理 |
| 长按 | 帮助:状态句(轮次/段位),不闭窗、不耗资源、不判错 |
新音色第一次进序列时现场教一句(「向上滑,是这个声音。」)马上用。`best>0` 的老玩家跳过已会的教学。
### 0.4 状态 × 手势矩阵(新手期)
| 状态 \ 手势 | 单击 | 已解锁滑动 | 长按 | 双击(未解锁) | 连点 / 乱滑 |
|---|---|---|---|---|---|
| 教学指令 `critical` | `busy` | `busy` | 帮助 | `busy` | `busy` |
| 教学答题 | 答题 / 纠错(回声即反馈) | 答题 / 纠错 | 状态句 | 按单击处理 | 计入迷茫 |
| 播报 / 序列 `BUSY` | `busy` | `busy` | `busy` | `busy` | `busy`(序列不变) |
| 答题 `YOUR_TURN` | 作答(回声=`silent-ok`) | 作答 | 状态句 | 未入池=`invalid`+首次解释 | 乱滑计入迷茫;有效作答照收 |
| 结算 | 再来一局 | `invalid`+首次解释 | 重听结算 | 按单击处理 | 只处理第一下 |
| 菜单 | 确认 | 左右滑切换 | 重听说明 | 按单击处理 | `busy` |
### 0.5 等待点
| id | 期待 | `_full` | `_short` | 静默 | L2 | L3 |
|---|---|---|---|---|---|---|
| `tut0` | 单击 | (指令刚说过) | 「点一下。」 | 6s / 15s | 单击 | 提示音 |
| `tut_<g>` | 当前教的音色 | 教学句 | 「再试一次。」 | 6s / 15s | 该手势 | 提示音 |
| `input` | 已解锁音色 | 「轮到你了。」 | (提示音) | 10s / 25s | 免费重听整串 | 放慢 + 重听 |
| `settle` | 单击 | 「单击,再来一局。」 | 「再试一次。」 | 20s / 45s | — | 提示音 |
| `menu` | 单击/左右 | 菜单说明 | 同左 | 20s / 45s | — | 提示音 |
### 0.6 首 3 分钟逐秒脚本
| 时间 | 游戏说 / 播 | 期待 | 没做 | 做错 |
|---|---|---|---|---|
| 0~3s | 「音序回响。点一下屏幕。」(`critical`) | 单击 | 6s:「点一下。」 | 滑动:`invalid`+「先点一下。」 |
| 3~10s | 单击音色回响(第一次成功)→「向左滑,是这个声音。」+ 音色 | 左滑 | 「再试一次。」 | 纠正(30s 内不重播同一句) |
| 10~30s | 「对。」→ 右滑、单击各练一次 | 左/右/单击 | 短句档 | 纠正 |
| 30~40s | 「记住顺序,原样复现。答错,我们就再听一遍。」→「第一轮,听好了。」→ 2 音序列(仅已教音色) | 听 | — | 播放期=`busy` |
| 40~50s | `input_open` + 风铃 + 等待声 | 复现 2 音 | 10s:「轮到你了。」 | 见失败表 |
| 50~90s | 每轮 +1 音;答对 ≤4 字肯定 | 复现 | 三档 + 接管 | 归因 + 免费重听 |
| 90~180s | 第 4 轮后可教学菜单(结算相位);序列渐长;上滑音色在清第 1 轮后入池 | 复现 | L2 免费重听 / L3 放慢 | 第 3 次失败放慢 |
3s 内动手;第一次成功=第一击回响 ≤10s;每轮有进展回报。
### 0.7 失败表(取代机会经济)
| 失败次数(本局同序列) | 处理 | 台词 |
|---|---|---|
| 1~2 | 2s 内归因(「错了。是向左滑。」)→ 免费重听整串,进度清零重输 | `wr_*` + 重听 |
| 3 | 「我放慢一些。」→ 间隔 ×1.6,序列可减 1 音 | `slow_down` |
| 再错 | 结算(成绩段位 + 破纪录 +「单击,再来一局」) | `gameover` + `score_band*` |
归因必须点名真实按错的音色。没出手不得说「错了」。新手期不扣「机会」、不加「机会加一」。
### 0.8 台词类别
- `critical`:`t0_new`、各教学指令(每句 ≤3s)、结算承诺段。
- `content`:`round_01..20`、`score_band1..6`、`gameover`、`new_record`、`t_ok`、`correct`。
- `hint`:`your_turn`、`t_retry`、状态查询句、`sys_demo`、菜单说明。
- `feedback`:`wr_*`、`slow_down`、教学纠正、`inv_busy`。
全文见 `SIMON_LINES` / [02-simon-voice-ids.md](02-simon-voice-ids.md)。停用「机会加一 / 重听机会用完 / 双击重听」旧句。
### 0.9 断点复述
对局不存档(单局 2~5 分钟)。`soundgame.simon.best` 跨局持久,决定音色池与是否跳过教学。summary:「最佳成绩:第 N 轮」。
### 0.10 测试
`web/simon/test/playtest.mjs`。关键路径:3s 内单击 → 只教已解锁音色 → 第 1 轮 2 音复现 → 结算。序列期任何手势=`busy`。
---
## 1. 现版诊断(问题仍在,解法已换)
1. BGM 与音色抢通道 → **对局不播 BGM**(保留,与 10 号一致)。
2. 数字拼接 → 轮次 1–20 整句 + 无数字兜底;成绩 6 段整句(保留)。
3. 8 句连播教学、零交互 → 交互式,一次一音色,且**先只教 3 个**。
4. 错一音即死 / 「机会账」+ 双击耗机会 → **免费重听 + 第三次放慢**,无机会货币。
5. `sfx/correct`/`wrong` 与音色同质 → 对错用语音短句 + 回执;内容结束音 `sfx/gameover` 保留。
---
## 2. 音频层
- 对局不加载 BGM。间隙保持静默,利于记忆。
- 六音色映射不变:上=上行琶音 / 下=下行低音 / 左=左声道弹拨 / 右=右声道弹拨 / 单击=底鼓 / 双击=双连响。**未解锁的音色不进序列、不进教学。**
- `sfx/gameover` 保留。`sfx/correct`、`sfx/wrong` 不作为对错主通道。
- `sfx/input_open`:进入答题的边界标记(S2 保留)。无语音链的轮次不要再叠 `turn` earcon 与 `input_open`。
- 播放序列时每个音可叠极轻 `beat` 震作 chunking;**回执声仍要响**(播放期误触=`busy` 声,不再静默忽略)。
---
## 3. 旁白整句(保留句数,改交互口径)
| 类型 | 句数 | 说明 |
|---|---|---|
| 轮次 | 21 | 「第一轮,听好了。」…「第二十轮」;>20:「新的一轮,听好了。」 |
| 成绩 | 6 | 按完成轮数分段,原文档位保留 |
| 新纪录 | 1 | 「新纪录!」 |
| 教学 | 按已解锁音色,一次一句 | 禁止开场把六种声音一次讲完 |
| 流程 | 含「轮到你了。」「单击,再来一局。」 | 删除机会账相关句 |
| 反馈 | 「对。」「错了。是向左滑。」 | 肯定 ≤4 字;归因含正确手势 |
SPEAKER 常量沿用 female=Serena / male=Uncle_Fu。
---
## 4. 播放 / 答题节奏
**播放 `BUSY`**:序列不可打断。任何手势=`busy`,序列不变。最后一个音完 400ms 后 `yieldTurn`:`input_open` + `turn` + 等待声。
**答题 `YOUR_TURN`**:
| 事件 | 声音 |
|---|---|
| 做出已解锁手势 | 立即回声该音色(`silent-ok`) |
| 整轮正确 | 每轮「对。」或仅提示音(连续 3 次对后撤离语音) |
| 答错 1~2 | `invalid` 语义用内容错音可选 + 归因 + 免费重听 |
| 长按 | 状态句,不闭窗 |
| 未解锁手势 | `invalid` + 该格首次解释 |
结算链只在结算屏交付;进菜单则挂起,回结算屏补播(S6 保留)。承诺「单击,再来一局」与相位一致。`your_turn` 每局教一次,复活/重听不再重念(S7 保留)。
---
## 5. 交互式教学(只教已解锁)
| 步 | 内容 |
|---|---|
| T0 | 「音序回响。点一下屏幕。」立刻动手 |
| T1 | 单击音色 → 玩家点一次 |
| T2 | 左滑音色 → 玩家左滑 |
| T3 | 右滑音色 → 玩家右滑 |
| T4 | 「记住顺序,原样复现。」→ 第一轮 2 音 |
上/下/双击**不在首局教学出现**。做对:「对。」马上下一步。做错:纠正,不惩罚。同一手势错 3 次:迷茫 L3 只给提示音或演示该手势。
禁止:下滑跳过教学绑在「向下=音色」上。回访者 `best>0`:开场「点一下开始」,跳过已会的音色课。
---
## 6. 难度曲线(保留数字,去掉机会)
```
interval(round) = max(420, 700 - (round - 1) * 25) // 第 12 轮到 420ms 下限
```
- 长度 = round + 1,从 2 开始。
- 前 5 轮:禁止同一手势连 3 次;第 1 轮两音不同手势。
- 全轮次:禁止连 4 个同手势。
- 重听序列不变。
- 序列只从**当前已解锁音色池**抽样。
`best` 写进度存储,带 `summary`。
---
## 7. 状态机
`tutorial → announce → playback → input → (replay) → roundend → … → gameover`
菜单:阶段 2 以后,结算下滑呼出;左右滑切换、单击确认。废止双击确认、双击耗机会重听。
---
## 8. 资产变动
- 不播 `bgm/theme`。
- 新录/停用:机会账句、六音色一次讲完的旧 T7、双击重听教学。
- 保留:6 个 `tone_*`、`sfx/gameover`、`sfx/input_open`、轮次/成绩整句、状态查询分档句(删「重听账目/机会桶」枝,只保留轮次与进度档)。
---
## 9. 废止清单
| 废止 | 改为 |
|---|---|
| 每局机会货币;双击耗机会重听;答错扣机会 | 1~2 次免费重听;第 3 次放慢;无机会账 |
| 开场教完全部六音色 | 先 3 个,其余按轮次解锁 |
| 新手期双击=重听或答题 | 双击不存在;入池前当单击 |
| 播放期误触静默 | `busy` 回执,序列不变 |
| 对错只靠震动 / 删除提示音后无声 | 回执 + 短语音;震动可叠加 |
| 菜单单击循环+双击确认 | 左右滑+单击 |
| `your_turn` 每轮重念 | 每局一次 |
| 上滑与双击双义重听 | 帮助=长按;主动重听=迷茫 L2 或阶段 3 双击(仅重听当前序列完整播放,不绑破坏) |
S1–S7 状态透明层(`input_open`、长按查询、结算链看守)在不与上表冲突的范围内保留。