真人首测反馈「交互还是很迷惑」:大厅 15 款里只有 3 款新交互,其余 12 款 仍是旧版(无声操作、连点连跳),整体体验割裂。本次: - engine/pipeline.js 新增 makeCompatPipeline(纯增量,游戏内部逻辑零改动): · 手势后 100ms 无任何音频调度 → invalid 回执(消灭无声操作,原则 4) · 语音中的手势 → 立即 ok 回执(§4.1 打断即收到) · 语音中 tap 400ms 防连点(§4.2,点两下不连跳两句) · longpressend/tapcancel 收尾噪声直通 - engine/audio.js 加 playCount 探针(回执启发式用) - 12 款游戏 index.html 接入兼容管道(rhythm 保留 immediateTap; 双击判定窗口不动——多款游戏双击是核心玩法/菜单确认,重映射会破坏) - 可闻度调优(真人首测:笔记本外放偏轻,26 号 §3「起步值,真人测试后再调」): 回执增益 ok 0.08→0.11 / invalid 0.10→0.13 / busy 0.04→0.06; 等待声 0.03→0.055 - 大厅:三款深度重构游戏(声命线/暗室/音序回响)置顶 + 「新交互」徽标, 卡片文案直接写玩法手势,测试不再误入旧交互游戏 测试:新增 compat-pipeline.test(9 断言);全部 15 款 playtest 回归通过 (共 3900+ 断言,0 失败);引擎 input/voice/guide 回归通过。
守塔人(KEEPER · The Keeper)
风暴夜叙事 RPG。孤岛白角灯塔,电台里一声比一声近的求救,牵出你家三代守塔人的 秘密——守灯,还是救人;说出真相,还是守住秘密。 单夜 21-24 分钟,9 个抉择点、 4 结局。设计全文见 docs/design/21-keeper.md(台词表 21-keeper-voice-ids.md)。
声命线范式(radio/abyss 同骨架):节点链叙事 + 左右滑抉择 + 多结局。本作核心 差异层 = 时空双线:两个时空只靠音色与底噪区分——风暴与雾角=现在,唱针落下 与老唱片底噪=回忆。「回忆会开口说话」:每段插叙都是给现在抉择供货的信息。
玩法
- 一个完整风暴夜 = 三幕(风暴起 / 风暴顶 / 风歇前),幕间雾角报平安。
- 信任(阿澈信你有几分,四个信任点累计)与真相(三代秘密翻开几层,三段 插叙)双标量跨幕积累;结局 = 信任档 × 心结抉择(说出/守住),灯与阿澈各有三态 差分(尾声回响逐项点名)。
- 回忆插叙 = 唱针落下 → 父辈/祖辈片段(≤6 句 auto)→ 风声回来。进入插叙的钥匙 藏在抉择里:翻暗格(层1)、口诀或真话(层2,双钥匙补偿)、读完缺页(层3,前置 层2)。随时上滑听「这是回忆:祖父的年代,四十年前」确认时位。
- 零死亡零倒计时:阿澈恒活着;软失败(灯灭过一刻钟/他自己冲滩)全是叙事差分, 每句归因都指向你的实际选择。
手势(6+2 全覆盖零豁免)
| 手势 | 叙事态(INTRO/WATCH/MEMORY/CALM/ENDING) |
|---|---|
| 单击 | 播放中=跳过本句(抉择提示/插叙锚句首播/交接尾句不可跳);链末=继续;结算后=再来一夜 |
| 双击 | 重听当前节点(含抉择提示);回忆中=重听当前回忆节点;结算后=重听结局链 |
| 左/右滑 | 抉择(左=走心·翻开/说出,右=克制·程序/守秘);其余时刻无效 → error 震+语音 |
| 上滑 | 状态链:时位句(现在是哪幕/是不是回忆)→ 信任档 → 真相度 → 帮助,随后重播当前段 |
| 下滑 | 模态菜单(单击循环选项 / 双击确认 / 上滑帮助 / 下滑关闭) |
| 长按 | 旁白快进(引擎接管,叙事类不豁免) |
存档断点续玩:进游戏听到「单击继续上次,右滑开始新的风暴夜」;在回忆里退出, 回来先听时位句「这是回忆:父亲的最后一晚,十二年前」,从当前回忆句继续。
运行
bash web/serve.sh # Node 零依赖服务器(静态 + REST)
# 浏览器打开 http://<局域网地址>:8000/keeper/
资产再生成
- 台词:
source env.d/tts.sh && flock .gpu.lock .venv-tts/bin/python tools/gen_voice_dual.py --game keeper(→--check→--convert)。 - 音效:
.venv-tts/bin/python tools/gen_keeper_syn.py(17 件程序合成,one-shot 真峰值 ≤-3dBFS + 去直流 + 8ms cos²;loop 边界静音口袋)。 - BGM:
bash web/keeper/gen/gen_bgm.sh(Mureka flac → 90s 无缝循环)。 - 封面:
.venv-tts/bin/python web/keeper/gen/gen_cover.py。