Files
SoundGame/docs/design/26-apply-rpg.md
T
xsl ee5d4d2544 feat(playbook): 26 号交互手册全量落地——剩余 12 款深度重构 + 语音全量重制
storyline/escape/simon 首批之后的推广收官:15 款全部按 26 号模式运行
(发言权/回执/三档提示/迷茫接管/手势阶梯/断点复述),旧「双击重听/格挡/
菜单确认」等反模式口径全线废除,开场零规则念白(首句即动手)。

游戏层(12 款):rpg(格挡=前摇窗口内再单击)/ rhythm / space / radio /
dungeon / abyss / detective / cipher / teahouse / keeper / bridge /
hunt(联机切片):
- 每款 game.js 接引擎六模块 + makeInputPipeline(doubleTapWindow:0);
  四向玩法类 swipeCore + 长按帮助;双击是玩法的(space 护盾 / hunt
  旋风斩)按手势阶梯阶段 3 分档恢复双击窗口(doubletapCore)
- 每款 playtest 重写:玩法断言 + §6.2 乱点机器人(无声操作 / 被动
  原句重复 / 打断失败 = 0);15 款 3900+ 断言全绿
- 12 份 docs/design/26-apply-*.md 施工单 + tools/voice_lines_26/
  台词清单 + voice-ids 文档同步 + 转写会话剧本按新口径重写

引擎层(web/engine/,6 处修复):pipeline 增 doubletapCore;novice
teachLine 带 voice/ 前缀(此前教学句被静默丢弃);confusion.record
前置到新手门(锁定手势的乱点也计信号);InvalidHints 播完恢复解释前
状态(根治孤儿 BUSY);WaitPoint takeover(2) 台账去重;台账只在
speak 真正播出时登记。遗留引擎债登记 roadmap §3.1。

语音资产:台词表合并(新增 ~250 系统句 / 改 ~50 旧口径 / 删 ~110
废止句;合并器 tools/merge_voice_lines_26.py + 引用校验器
tools/validate_voice_refs.py),GPU 重录 1536 wav → 4204 ogg/m4a
落地,check_all_assets + validate_voice_refs 双绿;键盘变体同步扩表。

大厅/文档:15 款统一新交互口径(「新交互」徽标退役);README /
HANDOVER / rpg README 旧口径修正;roadmap P0-P3 置完成。
2026-10-02 12:33:20 +08:00

11 KiB
Raw Blame History

26-apply · 《剑与声》深度重构设计单(26 号文档落地)

按 26 号文档附录 C 填写;正文权威 05-rpg.md + 05-rpg-chapter1.md

  • 11-rpg-battle-rebalance.md,交互权威 26-audio-interaction-playbook.md、 00-global-ux.md。本单是三份参考实现(escape 探索型 / simon 窗口输入型 / storyline 叙事型)在混合型游戏上的拼接:探索菜单=storyline、前摇窗口=simon、剧情链=storyline。 RPG 菜单豁免(round2 裁定②):探索态菜单保持「左右滑切换 + 单击确认」,不统一成单击循环。

1. 一句话核心动作

听选项,左右滑挑选,单击去做;战斗里听前摇,再点一下挡住。(05 号 §0.1)

2. 玩家可感知的状态(3 个)与声音身份

状态 Floor 听感 第一次教
听讲(旁白/NPC/结算/演出) SPEAKING 语音;BGM 整链压低(holdDuck),句间不回「轮到你」 开场第二句 sys_turn_teach
轮到你(探索选选项 / 战斗选指令) YOUR_TURN 交接提示音 → 400ms 后「嘟—嘟」等待声 + 当前选项/指令名;战斗回合以 sfx/turn_player 为交接音(不叠风铃) 同上
前摇窗口(危险) ACTION tel_<enemy> 前摇音即状态(玩法声就是状态声);窗口内单击=格挡 教学战 T2 一句一教

商店 / 菜单 / 继续询问属元状态:菜单态等待点(bgm/menu + 菜单句)。战斗 BGM、Boss BGM 是宏观层,不单开第 4 种状态课(05 号 §0.2)。

3. 新手手势表与解锁阶梯

手势 探索 战斗选指令 前摇 ACTION 解锁
单击 确认选项 执行指令 格挡(唯一教学手势) 阶段 0
左 / 右滑 切选项+报名 切指令+报名 朝来招方向滑=格挡(中央敌任意左右,空间冗余不教学) 阶段 0
上滑 状态链 战场状态 invalid + 首次解释 阶段 1(onGoal=教学战胜利)
下滑 菜单 逃跑(RpgLadder:战斗下滑不随菜单解锁走,05 号 §0.3「战斗始终=逃跑」) invalid 阶段 2(onGameDone=第一章通关)
双击 阶段 3=重听场景描述;未解锁按单击 阶段 3=重听当前指令名;未解锁按单击 按单击=格挡 阶段 3
长按 旁白加速(引擎内置,12 号;RPG 非四向玩法,帮助不占长按) 加速 不占格挡(silent-ok) 默认

阶梯钩子:ladder.onGoal() = 第一场教学战胜利(挂胜利链尾教上滑);ladder.onGameDone() = 第一章通关(挂章结算链尾教下滑)。

4. 状态 × 手势矩阵(新手期,逐格无空格、无纯静音)

状态 \ 手势 单击 左/右滑 上滑(未解锁) 下滑(未解锁) 双击(未解锁) 长按 连点
开场指令(SPEAKING, critical) busy 回执(关键句不打断) busy busy busy busy 加速 busy
旁白/报名在播(SPEAKING) 跳过这句 + ok 打断并执行(切选项/切指令) 打断,状态句 打断,菜单/逃跑 按单击 加速 400ms busy
探索 YOUR_TURN 执行选项(内容音=silent-ok / ok) 切选项+报名(silent-ok) 状态链(hold) invalid+inv_down_locked 当单击 加速 busy
商店(菜单态等待点) 购买/离开(ok;钱不够 invalid+shop_poor) 切货+报价(silent-ok) 状态链(hold) 离开商店(ok) 当单击 加速 busy
菜单(RPG 豁免:左右滑+单击确认) 确认当前项(ok) 切项+报名(silent-ok) 重听菜单说明(hold) 关闭菜单(ok) 当单击 加速 busy
PLAYER_SELECT(YOUR_TURN) 执行指令(silent-ok;无 MP/药=invalid+解释句) 切指令+报名(silent-ok) 战场状态(hold) 逃跑检定(ok/invalid) 阶段3重听/当单击 加速 busy
ENEMY_TELEGRAPH(ACTION) 格挡(parry 音=silent-ok) 中央敌:格挡 invalid+gd_parry_miss 首次 invalid+同上 当单击=格挡 加速(不占格挡) 第一下格挡,其余 busy
结算/胜负旁白(SPEAKING) 跳过这句 + ok 打断(流程链由看门狗兜底续走) invalid invalid 当单击 加速 busy
继续询问(reopen 等待点) 继续存档(ok) 右滑=新旅程;左滑 invalid+sys_continue_ask 状态句 invalid 当单击 加速 busy

验收:无空格;没有任何一格「没有声音」;连点无破坏性效果(重开/重播不绑连点)。

5. 等待点配置表

id 期待 交接提示音 等待声 _full _short 静默阈值 L2 只留 L3 演示 失败归因
intro tap 风铃 默认 —(指令刚说过) sys_first_tap_short「点一下。」 6s/15s tap 「听我做一次。」替玩家开场 —
reopen tap/right 风铃 默认 sys_continue_ask hint_explore_short 12s/30s — 提示音 —
explore_<scene> tap/left/right 风铃 默认 当前选项名 hint_explore_short「滑一下。」 18s/40s 左右滑 替玩家切回首选项并报名 —
shop_buy tap/left/right 风铃 默认 hint_shop_full「单击,买下。」 hint_shop_short「单击。」 12s/30s — 提示音 钱不够=shop_poor(invalid)
menu tap/left/right 风铃 默认 sys_menu sys_menu 20s/45s — 提示音 —
tut_menu left/right turn_player 默认 tut_b0 hint_swipe_short「滑一下。」 8s/16s 左右滑 游戏切一次指令并报名 —
tut_atk tap turn_player 默认 tut_b3「选攻击,单击出剑。」 hint_cmd_short「单击出手。」 8s/16s — 「听我做一次。」代打一刀 —
tut_def tap turn_player 默认 tut_b6 tut_def_short「选防御。」 8s/16s — 代选防御并执行 —
player_turn tap/left/right/down turn_player 默认 当前指令名(刚播过,台账自动降档) hint_cmd_short 8s/20s — 提示音 无 MP=btl_nomp;无药=btl_noitem(invalid)

前摇窗口无等待点(floor.enterAction(),玩法声即状态)。教学步另有 24s 兜底自动推进(11 号 §7「绝不卡死」:menu→attack→parry→defend→自由)。三档选择 + 30s 台账跨等待点去重在 engine/hints.js 统一实现。

6. 首 3 分钟逐秒脚本

时间 游戏说 / 播 期待玩家做 没做 做错
0~3s 「点一下屏幕。」(critical,抢拍单击=busy) 单击 6s「点一下。」15s 提示音;L3 演示 滑动:invalid+sys_first_tap_short 首次解释
3~16s ok → intro_1/intro_2 + skip_hint + 「新的旅程」+「听到这个声音,就是轮到你了。」 听(可单击跳句) — —
16~24s 村长赠金 → desc_village → 报「前进」→ 风铃 + 等待声(第一次成功=接下来单击的脚步声) 单击「前进」 18s hint_explore_full → 40s short → 提示音 左右滑=切选项(报名即反馈)
24~60s 村里滑一圈;进商店听价钱,单击买金疮药或离开 左右滑/单击 18s 当前选项名(刚报名过 → 台账降档直接短句)→ 40s 提示音 钱不够 shop_poor+invalid
60~120s 小路调查 +15 金 → 岔路 → 溪流 → 教学战:T0「先滑一滑」→ T1「选攻击,单击出剑」 滑指令、单击出剑 8s/16s 三档;24s 兜底推进 纠错句(原则 7 一次)
120~180s T2「它要扑了,听前摇。就是现在,点一下挡住。」→ T3 防御课 → 自由击杀 → 胜利链尾「想知道自己在哪,就向上滑。」 前摇内单击 同上 受击锁血 1 仍通过

节奏检查:3s 内第一次操作 ✓;第一次成功 ≤10s(第一下单击的 ok)✓;每 30s 有进展(新场景环境音/战斗回合/金币)✓;开场无纯规则念白(intro_3 删)✓。

7. 失败表(§4.9)

失败类型 判定 归因句 回到哪里 新手期代价
格挡没出手 窗口内无单击/同向滑 教学战 tut_b4「没挡住也没关系,再来一次。」 下一玩家回合 教学锁血 1
窗口内错手势 上滑/下滑 gd_parry_miss(修改稿)「前摇响着呢。点一下,挡住。」首次,之后只回执 留在窗口 无
钱不够/已购 商店购买失败 shop_poor / shop_owned + invalid 留在商店 无
无 MP/无药 指令执行失败 btl_nomp / btl_noitem + invalid 留在选指令 无
逃跑失败 Lv≥3 且 30% btl_flee_fail;Boss/剧情 btl_noflee + invalid 敌方可格挡前摇(不白打) 无
战败 HP≤0 btl_lose + btl_lose_hint(修改稿「点一下格挡」) 章首 village,等级金币装备保留 本章非 Boss 遭遇重置;仍存档

归因句全部 feedback 类(2s 内、可打断、过期即弃);受击日常播报仍按 addendum §1(降档才播 st_hp_*,擦伤静默走血)。

8. 台词表(类别标注)

  • critical:sys_first_tap(开场指令 <3s)、tut_b2(「就是现在,点一下挡住。」<3s)
  • content:intro_1/2、skip_hint、sys_new_game、sys_turn_teach、desc_、opt_、npc_、evt_、btl_start_、btl_win/loot/levelup/lose、cmd_、shop_open/price_、sys_rest/drink/menu_、st_* / foe_hp_、sys_unlock_、boss1_warn
  • hint:hint_explore_short、hint_shop_full/short、hint_cmd_short、hint_swipe_short、tut_def_short、only_explore、sys_first_tap_short、st_where_1..3、sys_continue_ask
  • feedback:gd_parry_miss(修改稿)、shop_poor/shop_owned、btl_nomp/btl_noitem、btl_noflee/btl_flee_fail、tut_b4、btl_lose_hint(修改稿)、inv_up_locked、inv_down_locked
  • 主动重听:sys_say_again「再说一遍:」(前缀,全项目一句)
  • 完整清单(新增 20 / 修改 6 / 停用 7)见 tools/voice_lines_26/rpg.md;NPC 平铺台词不改。

9. 断点复述句

  • 保存:场景切换、战斗结算、商店交易、菜单(localStorage + 服务器双写,summary 字段保留)。
  • 回来:sys_continue_ask「单击继续,右滑开始新的旅程」;单击后 5 秒内先播 st_where_<zone>(你在哪+目标+一个动作:如「林子深处。去黑风寨。左右滑。」),再接场景回访描述与选项报名,然后 yieldTurn。
  • 分区:zone1=village/path,zone2=fork/chest/stream/hunter,zone3=deepwood/gate/boss1。

10. 测试记录

  • 无头 playtest:web/rpg/test/playtest.mjs(114 断言全绿:开场脚本 / 阶梯锁与解释一次 / 三档提示与接管 L1 / 第一章全链 / 格挡=窗口单击与减伤 / 教学四步与 24s 兜底 / 逃跑规则 / 战败重生 / 受伤播报档位 / 断点复述 / §6.2 乱点机器人:无声操作 0、被动原句重复 0、打断失败 0、第一次操作 2.1s、第一次成功 2.1s;game.floor.bedEnabled=false)。转写 harness web/harness/transcribe.mjs rpg 全弧线跑通(虚拟时长 70s)。
  • 资产校验:新台词落盘前以 tools/voice_lines_26/rpg.md 登记为准(待生成清单),sfx/bgm 必须零缺失。
  • 真人冷启动:待测(§6.3,3~5 人)。