This commit is contained in:
xsl
2026-10-01 23:26:47 +08:00
parent e943227136
commit 9e4d67aa84
50 changed files with 3913 additions and 8243 deletions
+196 -134
View File
@@ -1,158 +1,220 @@
# 02 · 《音序回响》重设计(simon redesign)
# 02 · 《音序回响》重设计(26 号对齐)
> **给开发者的实现要点摘要**
> 1. **删除 BGM**:`bgm/theme` 不再播放,游戏只有交互音色 + 语音两条线(响应反馈⑥)。
> 2. **旁白全部整句化**:删除 `di/lun/num_*/score_pre/best_pre` 拼接体系,轮次与成绩改预生成整句(轮数 1-20 逐句 + 无数字兜底;成绩分段整句)。
> 3. **交互节奏**:播放序列时每个音前给 `BEAT` 轻震提供节拍感;复现阶段每个手势给 `CONFIRM` 震动确认;对/错用 SUCCESS/ERROR 震动,`sfx/correct`、`sfx/wrong` 提示音删除。
> 4. **教学改交互式**:每教一个音色就让玩家亲手做一次该手势,做对才教下一个。
> 5. **人性化与复活**:每局初始 1 次"重听机会"(输入阶段双击=重听当前序列,消耗机会;答错时若有机会则消耗一次机会重听而非直接结算),每过 4 轮 +1 次(上限 2);速度爬升放缓;前 5 轮避免同手势三连。
> 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,禁止只震不响。
---
## 1. 现版诊断
## 0. 设计单(26 号附录 C)
读 `web/simon/game.js`:
### 0.1 一句话核心动作
1. **BGM 是干扰项**(`bgm/theme` 音量 0.4 常驻,game.js:77)。记忆类游戏的工作记忆负载全在听觉通道,BGM 与六个手势音色同通道竞争,是纯负面。反馈⑥正确,整层去掉。
2. **数字拼接是音色漂移重灾区**:报轮次 `di + num_5 + lun`、报成绩 `score_pre + num_* + lun`(game.js:47-57, 142, 219-222)。这正是反馈⑥"音色漂移发音不准"的来源。
3. **教学是 8 句连续旁白**(`_runTutorial`, game.js:92-117),玩家只能听不能动,听完直接开考。
4. **错一音即死**(`_onInput` → `_gameOver`),无缓冲;轮次越高挫败越强。
5. **反馈音与内容音同质**:`sfx/correct`/`sfx/wrong` 与手势音色同为合成短音,盲听时"我按对了还是错了"要靠音色分辨,混淆。
**听一串音色,原样复现。**
## 2. 音频层重构
### 0.2 玩家可感知的状态(3 个)
- BGM 层:不播放、不加载。开场静默 0.5s 后直接进教学语音。间隙的"空白感"由环境底噪填充?——**不填**。纯静更利于记忆,这是设计选择不是缺失。
- 手势音色(`tone_*` 6 个):保留现有映射(上=上行琶音 / 下=下行低音 / 左=左声道弹拨 / 右=右声道弹拨 / 单击=底鼓 / 双击=双连响),这是游戏内容,不动。
- 反馈提示音(`sfx/correct`、`sfx/wrong`、`sfx/newrecord`):**删除**,改震动(见 §4)。`sfx/gameover` 保留为内容性结束音(低沉闷响,标识一局终结,不与任何手势音色相似)。
| 状态 | Floor | 听感 | 第一次教 |
|---|---|---|---|
| 听序列 | `BUSY` | 音色序列;手势=`busy`「嗯」 | 「先听,不要动手。」 |
| 轮到你 | `YOUR_TURN` | `input_open` → `turn` 风铃 → 等待声;答题立即回声 | 「听到这个声音,就是轮到你了。」 |
| 结算 | — | `gameover` + 结算链 + menu pad | — |
## 3. 旁白整句化清单
不要用 BGM 区分听/答。对局全程无 BGM。
### 3.1 删除的拼接件
### 0.3 新手手势与音色阶梯
`voice/di`、`voice/lun`、`voice/num_shi`、`voice/num_0..9`、`voice/score_pre`、`voice/best_pre` 全部退役(资产文件可留,代码不再引用)。
全部六个手势在本作都是**音色**。帮助换到长按。音色按历史最佳轮数开放,一次只学一样:
### 3.2 需要重录的句子类型(整句,female/male 双目录)
| 音色 / 手势 | 解锁条件 |
|---|---|
| 单击 / 左滑 / 右滑 | 阶段 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 | "第一轮,听好了。"…"第二十轮,听好了。"逐轮整句;第 21 句为无数字兜底:"新的一轮,听好了。"(round>20 时用,轮次仍可继续) |
| 成绩播报 | 6 段 | 按完成轮数分段整句:"一轮都没坚持下来,别灰心。"/"你坚持了三轮以内。"/"你坚持了五轮左右。"/"你坚持了将近十轮。"/"你坚持了十轮以上,很厉害。"/"你坚持了十五轮以上,大师级。"(代码按 score 映射分段) |
| 新纪录 | 1 | "新纪录!"(已是整句,保留文本重录) |
| 教学句 | 8 | 见 §5,每句 ≤20 字 |
| 流程句 | 6 | "轮到你了。"/"重听机会用完了,小心。"/"用一次机会,再听一遍。"/"单击屏幕,再来一局。"/"上滑重听规则,下滑打开菜单。"/规则重听句 |
| 反馈短句 | 3 | "答对了!"/"错了。"/"机会加一。"(均已有文本,整句重录) |
| 轮次 | 21 | 「第一轮,听好了。」…「第二十轮」;>20:「新的一轮,听好了。」 |
| 成绩 | 6 | 按完成轮数分段,原文档位保留 |
| 新纪录 | 1 | 「新纪录!」 |
| 教学 | 按已解锁音色,一次一句 | 禁止开场把六种声音一次讲完 |
| 流程 | 含「轮到你了。」「单击,再来一局。」 | 删除机会账相关句 |
| 反馈 | 「对。」「错了。是向左滑。」 | 肯定 ≤4 字;归因含正确手势 |
生成规范按 00 文档 §3:同一 SPEAKER 常量(female=Serena / male=Uncle_Fu)+ 同一 INSTRUCT 常量(建议"平静清晰的女声/男声,语速平稳"——不写进 instruct 的语速词,instruct 只控情绪:"平静、清晰、像游戏主持人")。
## 4. 交互节奏与震动设计
### 4.1 播放序列阶段(playback)
- 每个手势音播放的**同时**给 `BEAT`(8ms 轻震):节拍锚点帮助玩家分段记忆(把 N 个音切成节拍组),这是 simon 类游戏经典的"chunking"辅助。
- 播放间隔维持"逐个播放",节奏均匀(见 §6 速度曲线),最后一个音播完 400ms 后给一次 `CONFIRM` 震动,表示"轮到你了"(第 1 轮同时播语音,之后轮次只用震动,省时间)。
- 播放阶段手势一律忽略(保留现行为),但给 `ERROR` 震动一次告知"现在不用操作"?——**不给**,播放期误触静默忽略,避免打断聆听(00 文档 §2.4:纯聆听阶段不震动,BEAT 除外因其本身是节拍信息)。
### 4.2 复现阶段(input)
| 事件 | 震动 | 音频 |
|---|---|---|
| 玩家做出手势 | CONFIRM | 立即回声放对应手势音色(保留现行为) |
| 手势正确(序列推进) | (并入上面的 CONFIRM,不额外震) | — |
| 整轮复现成功 | SUCCESS | "答对了!"(每轮都播太密——改为每 4 轮播一次,其余轮次仅震动) |
| 答错且有机会 | ERROR + WARNING(间隔 300ms 先后) | "错了。用一次机会,再听一遍。" → 自动重播序列 |
| 答错且无机会 | ERROR + HIT | `sfx/gameover` + 成绩播报 |
| 双击(消耗机会主动重听) | PICKUP | "再听一遍。"+ 重播序列(inputIdx 重置为 0) |
| 机会 +1(每过 4 轮) | PICKUP | "机会加一。" |
## 5. 交互式教学(tutorial)
现版 8 句连播改为"教一个、练一个":
| 步 | 语音(整句) | 机制 |
|---|---|---|
| T0 | "欢迎来到音序回响。我会演奏一串声音,请你记住顺序,原样复现。先认识六种声音。" | 播完进 T1 |
| T1-T6 | 每个手势一句:"向上滑,是这个声音。"→ 播 tone → "你试试。" | **等待玩家做出该手势**;做对:tone 回响 + CONFIRM 震动 + "对了。"进下一个;做错:ERROR 震动 + "不是这个,向上滑试试。"重等;同一手势错 3 次给更直白描述("手指贴着屏幕,向上推一下") |
| T7 | "六种声音都记住了。序列会越来越长,答错可以消耗机会重听。双击随时重听当前序列。" | 进 T8 |
| T8 | "第一轮,听好了。" | 进正式对局 |
教学时长约 60-80s,全程玩家动手 6 次以上。教学期间下滑=跳过教学(播确认句后直达第一轮)。
## 6. 难度曲线与复活机制
### 6.1 速度曲线(放缓)
现版 `_interval()`: 720ms 起、每轮 -36ms、下限 340ms(game.js:152)——第 11 轮即触底。新版:
```
interval(round) = max(420, 700 - (round - 1) * 25) // 第 12 轮才到 420ms 下限
```
### 6.2 序列生成约束
- 长度 = round + 1(保留,从 2 开始)。
- **前 5 轮**:禁止同一手势连续出现 3 次;第 1 轮两个音不同手势。
- 全部轮次:禁止连续 4 个同手势(防恶意随机)。
- 复活重听的序列**不变**(重听就是重听同一序列,不重新随机)。
### 6.3 机会(retry)规则
- 每局初始 `chances = 1`;每完成 4 轮 `chances = min(2, chances + 1)` 并播报。
- 消耗途径二选一:a) 输入阶段**双击**主动重听当前序列(进度清零重输);b) 答错时自动消耗一次机会,重播序列后再试。
- **双击语义冲突的裁定(R3 修订,round2-review 裁决①)**:输入阶段双击按上下文判定——当前期望输入恰为 doubletap 时双击=**答题**(序列必须永远可答,答题优先),否则双击=**主动重听**(耗机会)。机会为 0 时双击非期望手势:不判答错、不消耗,仅播 `chances_out` 提示。重听播报期间切到非输入阶段,避免手势被吞。
- 无机会时答错 → gameover:成绩分段整句播报 + 新纪录判定 + "单击屏幕,再来一局"。
- `best`(历史最高)从会话内存改为写进度存储(localStorage + 服务器同步,进度 data 带 `summary`,格式"最佳成绩:第 N 轮")。
## 7. 状态机与手势汇总
阶段:`tutorial → announce → playback → input → (replay) → roundend → … → gameover`
| 阶段 | 上滑 | 下滑 | 双击 | 单击 | 四向滑/点按 |
|---|---|---|---|---|---|
| tutorial | — | 跳过教学 | — | — | 教学输入 |
| playback | — | — | — | — | 忽略 |
| input | — | — | 重听(耗机会) | 答题输入 | 答题输入 |
| gameover | 重听规则 | 菜单(重开/回大厅) | — | 重开 | — |
非 input 阶段上滑=重听规则(豁免见 00 文档 §5.2:六手势全是输入,帮助让位到非输入阶段)。
## 8. 资产清单变动
- 删:bgm/theme 引用(文件可保留不播)、sfx/correct、sfx/wrong、拼接数字件。
- 新录:§3.2 全部(约 45 句 × 2 音色 = 90 条 × 2 格式)。
- 保留:6 个 tone、sfx/gameover。
- 更新 `web/simon/README.md` 玩法描述与 `gen/gen_voice.py` 的 `LINES` 表(文本表驱动,female/male 两跑)。
SPEAKER 常量沿用 female=Serena / male=Uncle_Fu。
---
## 9. 修订记录(追加;旧文不动)
## 4. 播放 / 答题节奏
### round5(2026-09-14,research/simon-polish/round1 取证 → round2 修复;S1-S7)
**播放 `BUSY`**:序列不可打断。任何手势=`busy`,序列不变。最后一个音完 400ms 后 `yieldTurn`:`input_open` + `turn` + 等待声。
用户真机反馈"玩法保留,但不清楚自己当前的状态"。round1 取证(剧本转写 + live 两会话:
认真新手局 13 轮 + 急性子乱按局)落成 S1-S8(research/simon-polish/round1/findings.md),
本轮修复 S1-S7,**玩法零改动,只加状态透明层**:
**答题 `YOUR_TURN`**:
1. **S2 · input 开放标记音 `sfx/input_open`**:`_toInput` 播放(游戏层资产,三档
guide / iOS 无震动全可闻)。confirm 震只标记"播放完毕",占用预告/your_turn 语音
链播完才真开放——取证中该窗口内作答被静默吞(live-A 行 108-115)。无语音链的
轮次不再叠向导 turn earcon,input_open 独立作边界标记(二选一不叠响)。
2. **S1/S3/S4 · input 阶段长按=状态查询**(`_statusQuery`,13 句 `status_*` 分档
整句,见 02b 追加节):长度 4 档 × 进度 4 档 × 重听账目 5 档(下一次重听消耗哪个
桶,与 §6.3 两账口径一致)。长按是六手势全被玩法占用下唯一的空闲键位(键盘=
按住空格,00 §5.5 通道自动获得);玩家主动查询,三档 guide 全可用,不耗账、
不判错、不清进度、不闭作答窗口。查询只绑定 input 阶段——playback 维持纯聆听
豁免(§4.1),查询语音会污染记忆任务。
3. **S5 · announce/roundend 误触给 error 震**:非单击手势在播报/表扬链期间不再
静默吞(00 §5.4 三秒反馈律);playback 维持 §4.1 静默豁免不动。
4. **S6 · 结算语音链阶段看守**:链只在结算屏交付——gameover 瞬间下滑进菜单则挂起,
回结算屏补播(`_deliverSettle`/`_backToSettle`)。承诺「单击屏幕,再来一局」
永远与所处相位一致(取证:链在菜单内播完 → 承诺在菜单内是假的 → 关菜单后结算
屏死寂 8.4s,live-B 行 140-174)。重开/回大厅作废挂起链。
5. **S7 · `your_turn` 每局一次**:第 1 轮复活/重听的重播不再重念(取证一局三遍,
live-B 行 67/96-98)。
| 事件 | 声音 |
|---|---|
| 做出已解锁手势 | 立即回声该音色(`silent-ok`) |
| 整轮正确 | 每轮「对。」或仅提示音(连续 3 次对后撤离语音) |
| 答错 1~2 | `invalid` 语义用内容错音可选 + 归因 + 免费重听 |
| 长按 | 状态句,不闭窗 |
| 未解锁手势 | `invalid` + 该格首次解释 |
验证:playtest 156 断言全绿(新增 S2-S7 断言 + 场景三专项);guide.test 122 断言
全绿;check_all_assets 15 游戏全绿;其余 14 款游戏 playtest 回归全绿。修后 live
两会话复跑(research/simon-polish/round2/):核对局 V 14/14、压力局 P 8/8 断言通过,
ASR 非 OK 行全部归因玩家自裁(跳旁白截断/短句同音近失/补播抢占),无游戏自残;
四人设复审闭环(round2/p*.md,状态感知 2/5→4/5 across 四席,P0 清零)。
结算链只在结算屏交付;进菜单则挂起,回结算屏补播(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`、长按查询、结算链看守)在不与上表冲突的范围内保留。