# 暗码(cipher) 1940 年江城,你是电讯处的夜班报务员,也是「北风」安在敌台内部的一双耳朵—— 一晚四封密电过你的手,每个词怎么译、报不报、报给谁,都由你按下。 - **设计文档**:[docs/design/19-cipher.md](../../docs/design/19-cipher.md)(含断言清单 §9) - **台词表**:[docs/design/19-cipher-voice-ids.md](../../docs/design/19-cipher-voice-ids.md)(139 句) - **类型**:声命线叙事 RPG(9 抉择点:4 译词 3 选 + 5 叙事 2 选;4 结局;单局 19-22 分钟) ## 玩法(纯音频 · 6 手势) | 手势 | 作用 | |---|---| | 单击 | 跳过本句 / 链末继续 / 选定候选(两段确认)/ 结局后再来一局 | | 双击 | 重听电文;**再双击 = 慢放 0.5×**(无限免费) | | 左/右滑 | 循环切换候选词(自动预听)/ 抉择 | | 上滑 | 状态链(第几封 → 密码本余页 → 暴露档 → 帮助) | | 下滑 | 模态菜单(单击循环 / 双击确认) | | 长按 | 旁白快进;**解码空闲时 = 翻密码本求提示**(3 页,T1 首次免费) | **核心循环**:截获(调谐 + 摩尔斯首播)→ 解码(听音辨词,三层兜底:正常译 / 慢放 / 密码本直译)→ 译文揭晓(正片不揭穿对错,译错是另一条真实剧情)→ 处置抉择 → 夜结算(暴露度跨档播报)→ 下一封。 **摩尔斯电文为运行时程序合成**(`morse.js`,750Hz 电文 / 620Hz 候选,u=80ms 恒定 不受语速设置影响)——时值精确是玩法命根,不走音频文件。 ## 资产 - `audio/voice/{female,male}/` 双性别 134 句(+ `key/` 键盘变体 11 对)+ 平铺 NPC 5 句(处长) - `audio/sfx/` 12 件程序合成(tools/gen_cipher_syn.py) - `audio/bgm/` 4 首 Mureka(radio_room / closing / night / ending,90s 无缝循环) ## 本地运行 ```bash bash web/serve.sh # 起本地服务器 # 浏览器打开 http://localhost:8000/cipher/ ``` ## 测试 ```bash tools/node/bin/node web/cipher/test/playtest.mjs # 无头断言(设计文档 §9 全清单) ```