# 05c · 《剑与声》增补规范(26 号对齐) > 补 [05-rpg-chapter1.md](05-rpg-chapter1.md):战斗事件×音效、无声前摇、amb 与 BGM、流程细节。与主文档冲突时:**数值与资产以 chapter1 为准;交互以 26 号 + 05 号 §0 为准。** --- ## 0. 设计单增量 格挡教学手势=前摇内单击。无声敌人窗口=系统 `danger` earcon(必出声)+ 可选震动补充。防御指令全平台兜底。回执 ok/invalid/busy ≤100ms,禁止只震。 --- ## 1. 战斗事件 × 音效 × 回执(震动只能补充) 手势识别震(swipe/confirm)由 gesture.js 内置,下表不重复。 | 战斗事件 | sfx | 回执 | 震动(补充) | 语音 | |---|---|---|---|---| | 遭遇开始 | — | — | — | `btl_start_` | | 指令切换 | — | `ok` 或报名即 silent-ok | swipe 内置 | `cmd_*` | | 攻击命中 | `atk_swing` + `atk_hit` | silent-ok | — | 半血/死亡见下 | | 破空斩 | `skill_slash` | silent-ok | — | mp 不足 `btl_nomp` | | 防御指令 | — | `ok` | — | 无播报,下回合减伤自明 | | 金疮药 | `potion` | silent-ok | pickup | 无药 `btl_noitem` | | **有声前摇** | `tel_` | — | 可选一次 `beat` | — | | **无声前摇开窗** | **`danger` earcon(系统合成,必响)** | — | 可选 danger 型 | — | | **格挡成功**(窗口单击或同向滑) | `parry` | silent-ok | confirm 可选 | — | | 窗口内无效手势 | — | `invalid` | error 可选 | 该格首次:「现在点一下挡住。」 | | 受击未格挡 | `hurt` | — | hit 可选 | 降档才 `st_hp_mid/low` | | 敌方半血 | — | — | — | `npc_*_half` / Boss §4 | | 击杀 | `enemy_die` | — | success 可选 | `btl_enemy_die` | | 胜利 | `victory` | — | — | `btl_win` + `btl_loot_*` | | 升级 | `levelup` | — | success 可选 | `btl_levelup` | | 逃跑成功 | `flee` | silent-ok | — | `btl_flee` | | 逃跑失败 | — | `invalid` | error 可选 | `btl_noflee` 或 `btl_flee_fail` | | 战败 | `hurt` | — | hit 可选 | `btl_lose` → `btl_lose_hint` | **前摇窗口标识**:有声敌人靠 `tel_*`;无声敌人靠 **danger earcon**。iOS 无震动:**零信息损失**——earcon + 格挡单击 + 防御指令都在。废止「iOS 无声敌人不可格挡」。 --- ## 2. Boss 无声前摇协议(影卫 / 白无瞳) | 时刻 | 声音(主) | 震动(补充) | |---|---|---| | 窗口开 t=0 | `danger` earcon | 可选 danger 脉冲 | | 窗口中点 t=0.5s(听风剑则 0.65s) | 可选极轻 nudge,不得新语言 | 可选 heartbeat | | 格挡成功 | `parry` | confirm 可选 | | 未格挡关闭 | `hurt` | hit 可选 | 规则: 1. 只有无声敌人用 danger earcon 当窗口;有声敌人只用 `tel_*`,不要叠 danger(danger 语义=「听不见招,但系统告诉你现在挡」)。 2. **防御指令对所有平台必要**(减伤 50%,不看时机)。不是 iOS 专属补丁。 3. 听风剑窗口 1.0→1.3s,中点顺延。 4. 判定与有声相同:窗口内单击或(有方向时)同向滑。无声敌人无方向,只认单击。 5. NPC 进场句可暗示「点一下」或「选防御」,**不要教双击、不要暗示只有震动能挡**。 --- ## 3. 音频层叠(保留裁定,对齐 10 号) | 场景/状态 | bgm 层 | amb(sfx loop) | |---|---|---| | village | `bgm/village` | `amb_village`(bgm=0 时垫底) | | 其他探索 | `bgm/explore` 0.35 | `amb_` | | 普通战斗 | `bgm/battle` | amb 停 | | Boss | `bgm/boss` | amb 停 | | 章结算 | `bgm/ending` | amb 停 | | 玩家回合 | battle 不切 | —;起等待声或靠指令名 | `bgm=0`:不加载任何 `bgm/`;amb 仍循环。等待声、回执、earcon 仍在。amb 实现:`audio._load` + BufferSource loop 接 `_sfxBus`。 整条语音链期间 BGM duck,句间不得抬回。 --- ## 4. Boss 阶段转换(保留) | Boss | 阶段 | 触发 | 表现 | |---|---|---|---| | 黑风寨主 | 二阶段 ATK 10→12 | HP≤50% | warning 可选 + `npc_boss1_2` + `tel_boss1` playbackRate 1.2 | | 腐沼祭主 | 二阶段 | HP≤50% | 召唤 2 毒蛛入连战队列 + 半血句 | | 白无瞳 | 三阶段完全无声 | HP≤50% / ≤25% | 每阶段 warning 可选;三阶段进场教学句后走 §2 earcon 协议 | --- ## 5. 补充台词(ch2/3 最小集,不改 ch1 voice-ids 文件) | id | 角色 | 全文 | 用途 | |---|---|---|---| | `npc_boss3_warn` | 旁白 | 他没有声音。竖起耳朵也没用。听到叮一声,点一下挡住。来不及,就选防御。 | 白无瞳三阶段;明示单击+防御,不提双击/只靠手震 | | `btl_half_shaman` | 蛊师 | (ch2 表补全文) | 半血 | | `btl_half_shadow` | 影卫 | (ch3 表补全文) | 半血 | ch2/3 表格式沿用 ch1 voice-ids。 --- ## 6. 流程细节 1. 上滑链:探索 `st_lv_*` → `st_hp_*` → `st_gold_*` → `st_weapon_*` → `st_armor_*`,可打断。 2. 战斗上滑:己方档 + `foe_hp_high/mid/low` 三句(不复用玩家档)。 3. 连战:第一只死 → `btl_enemy_die` → 不停 BGM → 下一只 `btl_start_*` + 前摇;HP/MP 不回,指令重置为攻击。 4. `stats.playSec`:探索+战斗实际时长,菜单/结算不计。 5. schema≠1:可 `sys_new_game` 重开,stats 保留。 6. 探索菜单=左右滑+单击(与 00 §5.4 同构)。战斗下滑=逃跑,不设菜单。 7. 教学战看门狗:每步静默走三档,不原样复读长说明书;第 3 次演示通过。 --- ## 7. 施工核对 - [x] 场景图 / 遭遇 / 10 状态机(chapter1) - [x] 数值 + 装备节点 - [x] 存档 + summary + battlesWon - [x] 格挡=窗口单击;无声=earcon+防御 - [x] amb 走 sfx loop + 10 号 BGM 表 - [ ] ch2/3 台词与正文 --- ## 8. 废止 | 废止 | 改为 | |---|---| | 格挡成功靠「双击无延迟」 | `doubleTapWindow: 0` 或前摇期 immediateTap;手势是单击 | | 无声窗口 = 仅 danger 震;iOS 不可格挡 | earcon 必响;防御全平台 | | 「绝不回退提示音」理解成无声反馈 | 回执与 earcon 永远出声 | | 探索期取消 `bgm/explore` 与 10 号打架 | 10 号:explore 宏观 + amb 景 | | 菜单双击执行 | 单击确认 |