Files
SoundGame/docs/design/19-cipher.md
T
2026-10-01 23:26:47 +08:00

155 lines
7.8 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.
# 19 · 《暗码》(cipher) — 1940 密战叙事 RPG
> **给开发的实现要点摘要**
> 1. 交互权威:26 号手册。叙事+解码小局,**不**用四向滑动,帮助=上滑。废除 DECODE 双击重听/慢放、长按翻密码本。
> 2. 摩尔斯由运行时 `morse.js` 合成(不走有损文件)。左右滑预听候选即对照电文——新手靠这一层听辨,不必先学双击。
> 3. 暴露度隐藏资源;教学封 T1 译错即时归因+无限重选;正片译错不揭穿,尾声兑现。
> 4. 台词 [19-cipher-voice-ids.md](19-cipher-voice-ids.md)(139 句:双性别 134 + NPC 5)。键盘变体 11 对。
> 5. 章程 N3:15–25 分钟、9 抉择(4 译词+5 叙事)、4 结局。
---
## 附录 C · 设计单
### 1. 一句话核心动作
**听电文,左右滑对照候选词,单击选定;叙事段单击继续、左右滑处置。**
### 2. 玩家能感知的状态(3 个)
| 状态 | 听感 | Floor |
|---|---|---|
| 听讲 | 旁白/处长,BGM 整链压低 | SPEAKING |
| 译电 | 摩尔斯(750Hz 电文 / 620Hz 候选)+ choice 签名 + 等待声 | YOUR_TURN |
| 轮到你(叙事) | turn + 等待声 | YOUR_TURN |
静电底噪是场景,不单开第四态。
### 3. 新手手势与解锁
| 手势 | 含义 | 解锁 |
|---|---|---|
| 单击 | 继续;DECODE 浏览=进确认;确认=定下 | 阶段 0 |
| 左/右滑 | 叙事抉择;DECODE=循环候选(自动预听对照档) | 阶段 0 |
| 上滑 | 我在哪(第几封。密码本余页。暴露档。左右滑听词。) | 阶段 1(T1 译对后) |
| 下滑 | 菜单(含「翻密码本」) | 阶段 2(第一局结束) |
| 双击 | 按单击。阶段 3=重听电文原速;再请求=慢放 0.5× | 阶段 3 |
| 长按 | 新手 invalid。之后旁白加速。**不**翻密码本 | — |
密码本:阶段 2 菜单项;迷茫 L3 也可演示慢放+揭示辨析位(教学 T1 首次翻页仍免费,由系统在 T1 迷茫或菜单未解锁前自动给一页教学)。
### 4. 状态 × 手势矩阵(新手期)
| 状态 \ 手势 | 单击 | 左/右滑 | 上滑 | 下滑(未解锁) | 双击 | 连点 |
|---|---|---|---|---|---|---|
| 游戏在说 | 跳句(摩尔斯首播/p* 不可跳 → busy) | 缓存抉择 / DECODE 首播中 busy 轻声 | 我在哪 | invalid | 按单击 | 400ms busy |
| RX 首播摩尔斯 | busy | busy | 我在哪 | invalid | 按单击 | busy |
| DECODE 浏览 | 进确认(电文原速再播一遍) | 切候选:620Hz 摩尔斯 → 静默一拍 → 词义句 | 状态链 | invalid | 按单击 | 迷茫 |
| DECODE 确认 | 定下(800ms 死窗→揭晓) | 取消回浏览 | 状态链 | invalid | 按单击 | busy |
| 叙事等选择 | 再听选项 | 抉择 | 「左右滑。」 | invalid | 按单击 | 迷茫 |
| 结算 | 新夜班 | invalid | 结局+档 | 菜单(阶段2) | 按单击 | 第一下 |
| 菜单 | 确认(可消耗一页密码本) | 切项 | 重听说明 | 关闭 | 按单击 | busy |
摩尔斯不叠语音(morseGate)。BGM 摩尔斯期间 −6dB。u 恒定,不受 settings.speed。
### 5. 等待点
| id | 期待 | full | short | 静默 | L2 | L3 |
|---|---|---|---|---|---|---|
| intro | tap | 「点一下屏幕。」 | 「点一下。」 | 6s/15s | tap | 替点 |
| decode | L/R | 「左右滑,听候选词。」 | 「左右滑。」 | 10s/25s | L/R | 慢放电文一遍再交还 |
| confirm | tap | 「单击,定下这个词。」 | 「单击。」 | 10s/20s | tap | 替确认 |
| choice | L/R | pN | 「左右滑,选。」 | 25s/50s | L/R | 演示 |
| continue | tap | 「单击,继续。」 | 「单击。」 | 13s/30s | tap | 替继续 |
T1 译错不进失败终局:即时 dv1_wrong(摩尔斯写死在句里)+ 回浏览。正片译错不揭穿。
### 6. 首 3 分钟
| 时间 | 播 | 期待 | 没做 | 做错 |
|---|---|---|---|---|
| 0~3s | 雨+静电 →「点一下屏幕。」 | 单击 | 「点一下。」 | 滑 invalid |
| 3~8s | 调谐 → BAY 摩尔斯首播(不可跳) | 听 | | |
| 8~10s | turn →「向右滑,听下一个词。」 | 右滑 | 「向右滑。」 | 点太早进确认:可左滑取消 |
| 10~25s | 候选对照 → 滑到 BAY → 单击→再单击定下 | 滑+点 | L3 慢放+揭示 B | DAY/RAY:即时归因重选 |
| ≈25s | 「对。」dv1_right(第一次成功) | | | |
| 25~60s | p2 报北风/压日志 | 左右滑 | 复述 | 不盲选 |
| 60~180s | T2 开始;上滑已解锁 | 译词 | 三档 | 正片错译走分支 |
### 7. 失败表
| 类型 | 判定 | 归因 | 回到 | 新手期 |
|---|---|---|---|---|
| T1 译错 | 非 BAY | 「不对。B,一长三短。」 | 浏览,无限 | 暴露 +0 |
| 正片译错 | 非真词 | 不揭穿;揭晓按认知 | 处置链 | 暴露 +1 |
| 页数用尽再翻 | hints=0 | paper_page + invalid,无语音轰炸 | 原地 | — |
| 收网 | p9 前 expose≥5 且发报 | d9_caught 真话 | 结局 e3 | 软失败 |
| 迷茫 | | L3 慢放 | 浏览 | 无 |
### 8. 台词类别
- `critical`:开场点一下;T1 教学「左右滑,听词」
- `content`:rx/dv/rev/r*/n*/p*/e*/ep_*
- `hint`:gd_tune 改为不含双击;book_3..0;exp 四档;hint_* 密码本
- `feedback`:dv1_wrong、inv_*
- 停用:gd_tune2「双击再听/再双击放慢」、E1 长按翻本口令
139 句;音频 134×2+5=273 ×2 格式。摩尔斯零文件。
### 9. 断点复述
保存 expose/hints/t1..t4/p flags。回来 sys_continue_ask。DECODE 恢复:重挂浏览并自动预听当前候选。上滑:第 N 封。余页。暴露档。左右滑。
### 10. 测试记录
改:双击不慢放;长按不扣页;菜单确认翻页;3s 动手;10s 内完成一次候选预听。morse 事件钩子字符断言保留。剧本 E 提示流改走菜单或 L3。
---
## 1. 概述
1940 江城,电讯处夜班报务员,也是「北风」的耳朵。四封密电:怎么译、报不报、报给谁。压力=隐藏怀疑账本+认知风险(译错是另一条真剧情)。无倒计时、无死亡。
## 2. 摩尔斯小局
| 参数 | 值 |
|---|---|
| u 原速 | 80ms(≈15 WPM),不随语速 |
| 慢放 | u=160ms,阶段 3 或 L3 |
| 对照档 | u=110ms,切候选自动播 |
| 音色 | 电文 750Hz / 候选 620Hz,正弦+5ms 边沿 |
| 封 | 真词 | 候选 | 辨析位 | 提示 |
|---|---|---|---|---|
| T1 船期 | BAY | DAY/RAY | 1: B/−··· | 第 1 字母 B,一长三短 |
| T2 名单 | TOP | TAP/TIP | 2: O/−−− | 第 2 字母 O,三长 |
| T3 交接 | HAND | SAND/LAND | 1: H/···· | 第 1 字母 H,四短 |
| T4 处置令 | SPY | SAY/SLY | 2: P/·−−· | 第 2 字母 P,短两长短 |
提示揭示辨析位 ⟹ 候选唯一。密码本 3 页,T1 教学首次不扣;用尽只翻空纸声。
流:RX 引入+调谐+电文首播不可跳 → 浏览(滑=预听)→ 单击确认再播电文 → 再单击定下。
## 3. 状态机与树
INTRO → RX(1) → DECODE(1) → RELAY(1) → NIGHT → … → RX(4) → 签收 p9 → ENDING。
T1 恒收敛真词。T2–T4 译错不揭穿,p4/p8/p9 走 known/blind 差分。p6 亲自去 expose+2;p8 反喂 +2;p9 左发报结局用 p9 前暴露。
| 结局 | p9 前 expose | p9 |
|---|---|---|
| e1 最后一电 | ≤4 | 左 |
| e2 值完这个班 | ≤4 | 右 |
| e3 孤灯 | ≥5 | 左 |
| e4 长夜 | ≥5 | 右 |
暴露事件:T2–T4 译错 +1/封;p2 右 +1;p4 左 +1;p6 左 +2;p8 左 +2。档:0 calm / 1–2 low / 3–4 mid / ≥5 hot(=收网门)。跨档才播。
## 4. 音频
BGM:radio_room / closing(T4 起)/ night / ending。SFX:tune_seek、static_bed、amb_room、paper_page、key_send、pen_scratch、tea_cup、step_halt(前置 2s)、lock_click、dawn_bell。处长 Eric 平铺 5 句。快手七无台词,存在=手法音。
## 5. 存档与验算
剧本 A 全对全右 p9 左 → e1 expose=0;C 全错全左 → e3。边界 wrong=2+risk=2=4 仍 e1/e2。summary:`第N封 · 暴露档 · 余页K · 结局X/4`。