save
This commit is contained in:
@@ -1,106 +1,131 @@
|
||||
# 05c · 《剑与声》增补规范(rpg addendum,R3 补漏)
|
||||
# 05c · 《剑与声》增补规范(26 号对齐)
|
||||
|
||||
> 本文件补 [05-rpg-chapter1.md](05-rpg-chapter1.md) 的施工遗漏:①战斗事件 × 音效 × 震动配合总表;②Boss 无声前摇的震动协议;③音频层叠规则修正(amb 与 BGM 冲突);④若干流程细节。与主文档冲突处以本文件为准。
|
||||
> 补 [05-rpg-chapter1.md](05-rpg-chapter1.md):战斗事件×音效、无声前摇、amb 与 BGM、流程细节。与主文档冲突时:**数值与资产以 chapter1 为准;交互以 26 号 + 05 号 §0 为准。**
|
||||
|
||||
---
|
||||
|
||||
## 1. 战斗事件 × 音效 × 震动配合总表(施工对照表)
|
||||
## 0. 设计单增量
|
||||
|
||||
震动一律用 `engine/haptics.js` 预定义名;手势识别震动(swipe/confirm)由 gesture.js 内置,下表不再重复列出。
|
||||
格挡教学手势=前摇内单击。无声敌人窗口=系统 `danger` earcon(必出声)+ 可选震动补充。防御指令全平台兜底。回执 ok/invalid/busy ≤100ms,禁止只震。
|
||||
|
||||
| 战斗事件 | sfx | 震动 | 语音 |
|
||||
|---|---|---|---|
|
||||
| 遭遇开始 | `tel_<enemy>`(登场即第一次前摇不播,登场用 `enemy_die` 无——登场无专属 sfx,直接语音) | — | `btl_start_<enemy>` |
|
||||
| 指令切换(左右滑) | — | (内置 swipe) | 指令名 `cmd_*` |
|
||||
| 攻击命中 | `atk_swing` + `atk_hit` | — | —(敌方半血/死亡见下) |
|
||||
| 技能·破空斩 | `skill_slash` | — | mp 不足时 `btl_nomp` |
|
||||
| 防御指令 | — | — | —(标记生效,无播报,下回合减伤自明) |
|
||||
| 使用金疮药 | `potion` | `pickup` | 无药时 `btl_noitem` |
|
||||
| **敌方前摇(有声敌人)** | `tel_<enemy>`(1.0s) | 窗口开启同时 `beat` 一次(提示"现在可以格挡",不干扰听觉辨音) | — |
|
||||
| **格挡成功** | `parry` | `confirm`(即时,双击无延迟) | — |
|
||||
| 格挡窗口内做错手势 | — | `error` | — |
|
||||
| 受击(未格挡) | `hurt` | `hit` | 血量档位降档时 `st_hp_mid` / `st_hp_low`(降档才播,不每击都播) |
|
||||
| 敌方半血 | — | — | `npc_*_half`(有半血句的敌人)/ Boss 见 §4 |
|
||||
| 击杀 | `enemy_die` | `success` | `btl_enemy_die` |
|
||||
| 战斗胜利 | — | — | `btl_win` + `btl_loot_*`(分档) |
|
||||
| 升级 | `levelup` | `success` | `btl_levelup` |
|
||||
| 逃跑成功 | `flee` | — | `btl_flee` |
|
||||
| 逃跑失败(Boss/剧情战) | — | `error` | `btl_noflee` |
|
||||
| 战败 | `hurt`(最后一击) | `hit` + 300ms 后 `error` | `btl_lose` → `btl_lose_hint` |
|
||||
---
|
||||
|
||||
要点:**前摇窗口的 `beat` 轻震是"格挡窗口已开"的通道标识**——有声敌人靠前摇音辨招式、靠 beat 确认窗口时机,两者分工。iOS 无震动时靠前摇音本身即可(前摇音起始即窗口起始),无信息损失。
|
||||
## 1. 战斗事件 × 音效 × 回执(震动只能补充)
|
||||
|
||||
## 2. Boss 无声前摇 · 震动协议(影卫 / 白无瞳三阶段)
|
||||
手势识别震(swipe/confirm)由 gesture.js 内置,下表不重复。
|
||||
|
||||
无声敌人是第三章核心机制(耳朵最强的剑客遇到没有声音的敌人),触觉成为唯一提示通道。协议:
|
||||
| 战斗事件 | sfx | 回执 | 震动(补充) | 语音 |
|
||||
|---|---|---|---|---|
|
||||
| 遭遇开始 | — | — | — | `btl_start_<enemy>` |
|
||||
| 指令切换 | — | `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_<enemy>` | — | 可选一次 `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` [25,40,25,40,25] | 代替前摇音——**无声前摇的"声音"就是这段震型** |
|
||||
| 窗口中点(t=0.5s) | `heartbeat` [40,100,40] | 催促:窗口过半,不出手就来不及了 |
|
||||
| 格挡成功 | `confirm` | 同有声敌人 |
|
||||
| 窗口关闭未格挡 | `hit` | 受击 |
|
||||
| 窗口开 t=0 | `danger` earcon | 可选 danger 脉冲 |
|
||||
| 窗口中点 t=0.5s(听风剑则 0.65s) | 可选极轻 nudge,不得新语言 | 可选 heartbeat |
|
||||
| 格挡成功 | `parry` | confirm 可选 |
|
||||
| 未格挡关闭 | `hurt` | hit 可选 |
|
||||
|
||||
规则:
|
||||
|
||||
1. **只有无声敌人**用这套协议;有声敌人前摇窗口只震一次 `beat`(§1 表),绝不用 danger——danger 语义专属于"无声威胁",玩家一听(一感)就知道是影卫/白无瞳。
|
||||
2. iOS 无震动降级:**静默降级,不回退提示音**(00 §2.5)。无声敌人在 iOS 上不可格挡是已知代价,设计上用数值兜住——影卫 ATK16 对 lv7+ 铁鳞甲玩家 dmg≈10,52+ HP 可吃 5 击,不格挡也能硬打过普通影卫;白无瞳三阶段前由 NPC 台词明示(见 §5),iOS 玩家知情后可用"防御"指令(减伤 50%,不需要时机)作为等效手段。**防御指令因此对 iOS 是必要兜底,不是可选项。**
|
||||
3. 听风剑(格挡窗口 1.0s→1.3s)对无声敌人同样生效:heartbeat 顺延到 t=0.65s。
|
||||
4. 无声敌人的 `_resolve` 判定窗口与有声一致(1.0s/1.3s 内双击有效),仅提示通道不同——代码上前摇 = `{ sfx: tel_<enemy> | null, haptic: 'beat' | 'danger+heartbeat' }` 二元组。
|
||||
1. 只有无声敌人用 danger earcon 当窗口;有声敌人只用 `tel_*`,不要叠 danger(danger 语义=「听不见招,但系统告诉你现在挡」)。
|
||||
2. **防御指令对所有平台必要**(减伤 50%,不看时机)。不是 iOS 专属补丁。
|
||||
3. 听风剑窗口 1.0→1.3s,中点顺延。
|
||||
4. 判定与有声相同:窗口内单击或(有方向时)同向滑。无声敌人无方向,只认单击。
|
||||
5. NPC 进场句可暗示「点一下」或「选防御」,**不要教双击、不要暗示只有震动能挡**。
|
||||
|
||||
## 3. 音频层叠规则修正(amb 与 BGM 冲突)
|
||||
---
|
||||
|
||||
05-rpg-chapter1.md §7.2 让 `amb_*` 走 bgm 层 loop,与 `bgm/explore` 等同层冲突(引擎 BGM 层同时只有一首)。裁定为:
|
||||
## 3. 音频层叠(保留裁定,对齐 10 号)
|
||||
|
||||
| 场景/状态 | bgm 层播放 | 说明 |
|
||||
| 场景/状态 | bgm 层 | amb(sfx loop) |
|
||||
|---|---|---|
|
||||
| village | `bgm/village`(音乐) | 安全区给音乐,情绪锚点 |
|
||||
| 其他探索场景 | `amb_<scene>`(环境音循环,volume 0.6) | **探索期不放音乐**——纯环境音,战斗音乐进来才有对比 |
|
||||
| 普通战斗 | `bgm/battle` | 进战斗 crossfade 替换 amb;战后 crossfade 回当前场景 amb |
|
||||
| Boss 战 | `bgm/boss` | 同上 |
|
||||
| 章结算/剧情(evt_ch1_end 等) | `bgm/ending` | 播完回场景 amb |
|
||||
| village | `bgm/village` | `amb_village`(bgm=0 时垫底) |
|
||||
| 其他探索 | `bgm/explore` 0.35 | `amb_<scene>` |
|
||||
| 普通战斗 | `bgm/battle` | amb 停 |
|
||||
| Boss | `bgm/boss` | amb 停 |
|
||||
| 章结算 | `bgm/ending` | amb 停 |
|
||||
| 玩家回合 | battle 不切 | —;起等待声或靠指令名 |
|
||||
|
||||
资产清单变动:`bgm/explore` **取消**(探索期用 amb,不需要探索音乐),BGM 从 5 首减为 4 首(village/battle/boss/ending);`amb_village` 保留(village 的音乐若停播设置 bgm=0 时用 amb_village 垫底——bgm=0 时 bgm 层整体静默,village 也播 amb_village)。sfx 总数 35 不变。
|
||||
`bgm=0`:不加载任何 `bgm/`;amb 仍循环。等待声、回执、earcon 仍在。amb 实现:`audio._load` + BufferSource loop 接 `_sfxBus`。
|
||||
|
||||
`bgm=0`(设置关闭音乐)时的行为:village/battle/boss/ending 全部静默,探索场景 amb 照播(amb 属内容环境音不是 BGM——**例外裁定**:amb_* 虽走 bgm 层,但不受 bgm 设置关闭影响;实现上 amb 用 `play(id, {volume})` 时引擎按 bgm 层处理会被设置关停,因此 **amb 改走 sfx 层 loop**——sfx 层即发即弃不支持 loop,需要开发在 game.js 里用 `audio._load` + 手动 BufferSource loop 接 `_sfxBus`(rhythm 现版手动接总线已有先例)。这是本增补对实现的唯一新要求。)
|
||||
整条语音链期间 BGM duck,句间不得抬回。
|
||||
|
||||
## 4. Boss 阶段转换表现
|
||||
---
|
||||
|
||||
## 4. Boss 阶段转换(保留)
|
||||
|
||||
| Boss | 阶段 | 触发 | 表现 |
|
||||
|---|---|---|---|
|
||||
| 黑风寨主 | 二阶段(ATK 10→12) | HP ≤50% | `warning` 震动 + `npc_boss1_2` + 前摇音 `tel_boss1` 从单声双刀变急促(同一 sfx 以 playbackRate 1.2 重播即可,不加资产) |
|
||||
| 腐沼祭主 | 二阶段 | HP ≤50% | `warning` + 召唤 2 毒蛛(连战队列插入),播专属半血句(R4 补录) |
|
||||
| 白无瞳 | 三阶段(完全无声) | HP ≤50% / ≤25% | 每阶段 `warning`;三阶段进场播 §5 教学句,此后前摇走 §2 震动协议 |
|
||||
| 黑风寨主 | 二阶段 ATK 10→12 | HP≤50% | warning 可选 + `npc_boss1_2` + `tel_boss1` playbackRate 1.2 |
|
||||
| 腐沼祭主 | 二阶段 | HP≤50% | 召唤 2 毒蛛入连战队列 + 半血句 |
|
||||
| 白无瞳 | 三阶段完全无声 | HP≤50% / ≤25% | 每阶段 warning 可选;三阶段进场教学句后走 §2 earcon 协议 |
|
||||
|
||||
## 5. 补充台词需求(R4 录不进 ch1 表的,列入 ch2/3 台词表)
|
||||
---
|
||||
|
||||
| id | 角色 | 台词全文 | 用途 |
|
||||
## 5. 补充台词(ch2/3 最小集,不改 ch1 voice-ids 文件)
|
||||
|
||||
| id | 角色 | 全文 | 用途 |
|
||||
|---|---|---|---|
|
||||
| `npc_boss3_warn` | 旁白 | 他没有声音。闭上眼睛没用,竖起耳朵也没用。这一次,相信你的手。 | 白无瞳三阶段进场(同时向 iOS 玩家暗示:防御指令是兜底) |
|
||||
| `btl_half_shaman` | 蛊师 | 蛊师半血句(R4 写 ch2 台词表时补全文) | 半血钩子 |
|
||||
| `btl_half_shadow` | 影卫 | 影卫半血句 | 同上 |
|
||||
| `menu_hint_escape` | — | (属 escape,见 round2-review §5.1,非本游戏) | — |
|
||||
| `npc_boss3_warn` | 旁白 | 他没有声音。竖起耳朵也没用。听到叮一声,点一下挡住。来不及,就选防御。 | 白无瞳三阶段;明示单击+防御,不提双击/只靠手震 |
|
||||
| `btl_half_shaman` | 蛊师 | (ch2 表补全文) | 半血 |
|
||||
| `btl_half_shadow` | 影卫 | (ch3 表补全文) | 半血 |
|
||||
|
||||
规则:ch2/3 台词表沿用 05-rpg-ch1-voice-ids.md 格式,R4 由策划补发;上表是必须包含的最小集。
|
||||
ch2/3 表格式沿用 ch1 voice-ids。
|
||||
|
||||
## 6. 流程细节补遗
|
||||
---
|
||||
|
||||
1. **上滑状态播报链顺序**(探索态与战斗态共用):`st_lv_*` → `st_hp_*` → `st_gold_*` → `st_weapon_*` → `st_armor_*`,链播可被打断(再次上滑重播,下滑进菜单)。
|
||||
2. **战斗态上滑**:`st_hp_*` + 敌方血量档位(敌方档位句复用 st_hp_* 文案?——**不复用**,敌人档位用:`foe_hp_high`"敌人气焰正盛。"/`foe_hp_mid`"敌人露出疲态。"/`foe_hp_low`"敌人撑不住了。"——R4 补录 3 句 ×2 性别,列入上表最小集)。
|
||||
3. **连战转换**(enc_bandits 等):第一只死亡 → `btl_enemy_die` → 不停 BGM → 直接播下一只 `btl_start_<enemy>` + 前摇,玩家 HP/MP 不回、指令重置为攻击。
|
||||
4. **`stats.playSec` 口径**:累计探索态+战斗态实际时长(菜单/结算暂停不计),存档时累加。
|
||||
5. **存档 schema 迁移**:R5 内允许丢弃重来(读档 schema≠1 时播 `sys_new_game` 重开,stats 保留)。
|
||||
6. **菜单豁免确认**:RPG 探索态菜单=左右滑切换+单击确认(00 §5.2 豁免条款,round2-review 裁决②);战斗态下滑=逃跑,不设菜单——与 05-rpg.md §2.2 一致,不变。
|
||||
## 6. 流程细节
|
||||
|
||||
## 7. R4/R5 施工就绪核对单
|
||||
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 次演示通过。
|
||||
|
||||
- [x] 场景图 JSON / 遭遇战表 / 战斗状态机(05-rpg-chapter1.md §1-3)
|
||||
- [x] 全数值表 + 装备节点(05-rpg-chapter1.md §4-5)
|
||||
- [x] 存档字段 + summary(05-rpg-chapter1.md §6)
|
||||
- [x] 第一章 120 句台词表(05-rpg-ch1-voice-ids.md)
|
||||
- [x] 战斗音效/震动配合(本文件 §1)
|
||||
- [x] 无声前摇协议 + iOS 兜底(本文件 §2)
|
||||
- [x] 音频层叠规则(本文件 §3,含 amb 走 sfx 层的实现要求)
|
||||
- [x] BGM 4 首 + sfx 35 个 prompt 草稿(05-rpg-chapter1.md §7 + 本文件 §3 修正)
|
||||
- [ ] ch2/3 台词表(R4 策划补发,最小集见本文件 §5)
|
||||
- [ ] ch2/3 场景正文(R5 开发按 ch1 模板扩写)
|
||||
---
|
||||
|
||||
## 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 景 |
|
||||
| 菜单双击执行 | 单击确认 |
|
||||
|
||||
Reference in New Issue
Block a user