Files
SoundGame/docs/design/05-rpg.md
T
SoundGame Dev cc0f8c008d HTML5 重写:6 款游戏 + 用户系统 + 全局设置 + 5 轮迭代重构
- 新增 web/ 纯音频 HTML5 平台:共享引擎(手势/WebAudio 三层/设置/震动)、
  Node 零依赖服务器(静态 + 注册登录 + 进度存档 API)
- 游戏:剑与声(RPG 新作)、声命线、暗室(重设计)、音序回响(重设计)、
  节拍行者(跟随领奏重构)、盲航(同向闪避重构);声东击西删除
- 全局功能:男声/女声双套 TTS 资产、三档语速、BGM 音量三档、
  震动反馈语言(10 种震型)、服务器进度同步
- 资产:899 ogg + 899 m4a(Qwen3-TTS 双性别语音、Stable Audio 3 音效、
  Mureka BGM 4+3 首),终检零缺失
- 文档:docs/design/ 13 篇设计审查文档、docs/audio/ 资产管线、
  web/server/README.md API 文档
2026-08-29 21:55:44 +08:00

210 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 05 · 新 RPG《剑与声》完整设计(rpg / Sword & Sound)
> **给开发者的实现要点摘要**
> 1. 纯音频回合制 RPG:节点式场景图(不是网格),左右滑=切换选项、单击=确认/前进、双击=重听、上滑=角色状态、下滑=菜单。回合制战斗:左右滑选指令、单击执行;敌方攻击有 1s 前摇音,前摇内**双击=格挡**(减伤 70%)——这是唯一的即时操作,绑双击规避 tap 延迟。
> 2. 规模按"一轮开发(R5)可完成"控制:3 章、每章 6-8 个场景节点、共 8 种敌人 + 3 个 Boss、装备 6 件、数值一套线性公式。复杂度对标 escape(单文件 game.js + ~120 条语音 ×2 音色)。
> 3. 进度存服务器:存档 JSON 结构见 §7,在场景切换、战斗结束、商店交易后自动保存。
> 4. 第一章《迷雾林》内容全部给出(§5):8 场景、敌人表、对白功能大纲。第二、三章只给结构骨架与 Boss 设定,正文沿用第一章模式由开发 agent 扩写。
> 5. 语音全部整句(禁止数字拼接):血量/等级/金币的播报用分段整句("毫发无损/受了轻伤/伤势很重/命悬一线"),数值细节进上滑状态播报的档位句。
>
> **R2 增补**:施工级文档已就位,以这两份为准——
> - [05-rpg-chapter1.md](05-rpg-chapter1.md):第一章场景图 JSON、战斗状态机转换表、全数值表、存档字段定义、BGM/sfx 资产清单(含 Mureka/SA3 prompt 草稿)。
> - [05-rpg-ch1-voice-ids.md](05-rpg-ch1-voice-ids.md):第一章 120 句台词表(旁白 104×2 性别 + NPC 16 单音色)。
> 本文 §7 的存档结构、§9 的资产数量为设计初稿,若与施工稿不一致,**以 05-rpg-chapter1.md 为准**(主要差异:存档 data 为服务器自由格式 + 必带 `summary` 字段;语音总量 104×2+16)。
---
## 1. 游戏定位与核心循环
- **题材**:武侠/奇幻。玩家是"盲剑客"沈听澜——眼盲,耳即眼。题材与纯音频玩法互为叙事 justification,敌人方位、招式前摇全部天然用声音呈现。
- **单局时长**:一章 15-25 分钟;全三章 60-80 分钟。死亡从章首重生(背包/等级保留),鼓励反复推图。
- **核心循环**:探索场景 → 听环境音与描述 → 选择行动(前进/调查/战斗/商店/休息)→ 回合制战斗(格挡是技巧点)→ 获得经验金币 → 升级换装备 → 打 Boss → 下一章。
## 2. 手势映射(符合全局默认,无需豁免)
### 2.1 探索态
| 手势 | 作用 |
|---|---|
| 左/右滑 | 在当前场景的选项间切换(每切换播选项名 + SWIPE_OK 震动)。选项循环 |
| 单击 | 确认执行当前选项(CONFIRM 震动) |
| 双击 | 重听当前场景描述 + 环境音(重听是探索游戏的生命线) |
| 上滑 | 角色状态播报(等级档位、血量档位、金币档位、装备名,全整句) |
| 下滑 | 菜单:继续 / 保存并回大厅 / 重听帮助 |
### 2.2 战斗态
| 手势 | 作用 |
|---|---|
| 左/右滑 | 切换指令:攻击 → 技能(破空斩,耗内劲)→ 防御(本回合受伤减半)→ 道具(金疮药,回 40% HP)→ 循环 |
| 单击 | 执行当前指令 |
| **双击** | **格挡**:仅在敌方攻击前摇音播放的 1.0s 窗口内有效,成功减伤 70% 并播格挡音;窗口外双击无效(ERROR 震动) |
| 上滑 | 战场状态(己方血量档位 + 敌方血量档位) |
| 下滑 | 尝试逃跑(Boss 战无效,播"避无可避") |
格挡窗口的 300ms tap 延迟问题不存在——格挡绑双击(即时回调),这是全局规范"即时反馈绑滑动/双击"的应用。
## 3. 数值框架(简单可平衡)
### 3.1 玩家
```
等级 lv: 1..10
maxHp = 20 + 8*(lv-1) // lv1=28? 不——lv1=20, lv10=92
atk = 5 + 2*(lv-1) + 武器atk // lv1 裸装=5
def = 护甲def
内劲 mp = 3 + lv // 破空斩耗 3,伤害 = atk*2
升级所需 exp = lv * 20 // lv1→2 需 20,lv9→10 需 180;全三章总 exp ≈ 900
```
伤害公式:`dmg = max(1, round((攻方atk - 守方def) * (0.85 ~ 1.15 随机)))`
格挡:`dmg = max(0, round(dmg * 0.3))`;防御指令:`dmg = round(dmg * 0.5)`(与格挡不叠加)。
### 3.2 敌人表(三章通用模板 + 第一章实例)
| 敌人 | 章 | HP | ATK | DEF | EXP | 金币 | 前摇音特征 |
|---|---|---|---|---|---|---|---|
| 野狼 | 1 | 10 | 4 | 0 | 8 | 5 | 扑击前低吼 |
| 山贼 | 1 | 16 | 6 | 1 | 12 | 12 | 挥刀前的脚步 |
| 毒蛛 | 1 | 12 | 7 | 0 | 12 | 8 | 肢节摩擦(高频) |
| 精英·寨丁头目 | 1 | 24 | 8 | 2 | 20 | 25 | 重甲碰撞 |
| **Boss 黑风寨主** | 1 | 45 | 10 | 2 | 50 | 100 | 双刀互击(两下金属声) |
| 沼泽鳄 / 蛊师 / … | 2 | 按 lv4-6 玩家数值 +30% 调 | | | 18-30 | | |
| **Boss 腐沼祭主** | 2 | 70 | 14 | 3 | 90 | 200 | 吟唱(人声哼鸣) |
| 剑傀 / 影卫 / … | 3 | 按 lv7-9 玩家数值 +30% 调 | | | 35-50 | | |
| **Boss 盲剑宿敌·白无瞳** | 3 | 110 | 18 | 5 | 150 | 500 | 无声!前摇是"寂静"(特殊机制:格挡窗口用震动 DANGER 提示,教学点在 Boss 战开场由旁白讲明) |
第三章 Boss"无声前摇"是全游戏叙事+玩法高潮:耳朵最强的剑客遇到没有声音的敌人,格挡提示从听觉转触觉——呼应全局震动语言。
### 3.3 装备与道具
| 物品 | 类型 | 效果 | 价格 |
|---|---|---|---|
| 铁剑 | 武器 | atk+3 | 100(一章商店) |
| 青钢剑 | 武器 | atk+6 | 300(二章商店) |
| 听风剑 | 武器 | atk+9,格挡窗口 +0.3s | 600(三章商店,特色装) |
| 皮甲 | 护甲 | def+2 | 80 |
| 铁鳞甲 | 护甲 | def+4 | 250 |
| 金疮药 | 道具 | 回复 40% maxHp | 30,可叠 5 瓶 |
平衡校验:lv3 玩家(atk≈9+3=12 铁剑)打野狼 dmg≈11-13 → 一刀秒;打山贼 2 刀;Boss 黑风寨主 45HP 需 ~5 刀,Boss dmg 对皮甲玩家 ≈ 8-10/刀,玩家 36HP 可吃 4 刀,格挡成功只吃 2-3 → 不格挡会死、会格挡能过,技巧有真实收益。
## 4. 场景与探索结构
- 每章 = **有向节点图**(非网格):节点 = 场景,边 = 选项。探索时当前场景播环境音循环底(长底噪用 bgm 层 loop、低音量)+ 首次进入播描述语音。
- 每章结构:`起点(教学/商店) → 主线节点 ×4~5 → Boss`,其中 2 个节点带岔路(一条主线、一条奖励支线:宝箱/支线 NPC/休息点)。
- 战斗触发:进入战斗节点即触发(暗雷不做了——纯音频里"突然遇敌"没有视觉游戏的信息缓冲,全部明雷:场景描述里明说"有杀气")。
- 场景环境音要求:每场景一个专属 amb 循环(同 escape 重设计的做法,Stable Audio 3 生成)。
## 5. 第一章《迷雾林》详细内容
### 5.1 场景列表(8 节点)
| # | 场景 id | 名称 | 环境音 | 选项 | 说明 |
|---|---|---|---|---|---|
| 1 | `village` | 雾口村 | 篝火+人语 | 前进 / 商店 / 休息(回满 HP) / 状态 | 起点兼教学关;商店卖铁剑/皮甲/金疮药 |
| 2 | `path` | 林间小路 | 风+落叶 | 前进 / 调查(找到 15 金币) | 教学:双击重听、上滑状态 |
| 3 | `fork` | 岔路口 | 风分两路(立体声) | 左(宝箱:金疮药×2) / 右(主线) | 教学:左右滑选择 |
| 4 | `stream` | 溪流 | 流水 | 饮水(回满) / 前进 | 回复点;此处触发教学战:野狼×1(教学格挡,必不死) |
| 5 | `hunter` | 老猎人小屋 | 柴火+磨刀 | 对话(支线:获金疮药×1+铁剑九折) / 前进 | NPC 角色音首登场 |
| 6 | `deepwood` | 密林深处 | 虫鸣+远处狼嚎 | 前进(遭遇山贼×2 连战) | 本章难度峰值前 |
| 7 | `gate` | 黑风寨门前 | 火把+人声嘈杂 | 强攻(战寨丁头目) / 绕行(多打一场但 Boss 战前满状态) | 战术选择 |
| 8 | `boss1` | 聚义厅 | 大厅混响+火盆 | Boss 黑风寨主 | 章 Boss;胜利→第二章解锁 |
### 5.2 教学编排(探索与战斗各自交互式)
- 场景 1:旁白教"左右滑选、单击确认",让玩家亲手在商店完成一次"听价→选→买"(给 50 金币启动金)。
- 场景 3:教左右滑选择岔路 + 双击重听。
- 场景 4 教学战(野狼,HP 锁 1 不死保护):旁白分步——"它要扑了,听前摇!"→ 低吼响起 → "双击格挡!"→ 成功/失败都继续(失败只掉 1 血),然后教"左右滑选攻击,单击出剑"。玩家亲手砍出第一刀后教学结束。
- 之后不再教学,上滑随时可重听帮助。
### 5.3 对白大纲(每句注明功能与语气;正文由开发 agent 按语气扩写,整句、≤25字/句)
**序章旁白**(旁白音:Serena/Uncle_Fu,平静叙述)
1. "你的眼睛看不见了。但你的耳朵,比谁都灵。"——立人设,沉稳
2. "黑风寨掳走了你唯一的徒弟。追进迷雾林,把他们连根拔起。"——给动机,冷
3. "先记住怎么用耳朵走路。"——转教学,缓和
**村长**(village,长者音:Uncle_Fu 同款 speaker 不同 instruct?"同一角色 speaker+instruct 固定"——村长=Uncle_Fu+慈和 instruct;旁白 male 版=Uncle_Fu+平静 instruct。同 speaker 不同角色时 instruct 不同是允许的,规范约束的是"同一角色恒定")
4. 问候+送 50 金币:"外乡人,林子里不太平。这点钱拿着防身。"——慈和
5. 商店引导 2 句——功能性,慢速清晰
**老猎人**(hunter,沙哑老者 instruct)
6. 戒备开场:"站住。……哦,是个用耳朵的。"——先冷后奇
7. 支线给予:"寨子里有我旧识。带上这个,别死在路上。"——粗中有暖(功能:给药+折扣 flag)
**寨丁头目**(deepwood/gate,粗哑)
8. 遭遇喝骂 1 句——凶
9. 半血狠话 1 句——凶转慌(功能:血量反馈的叙事化)
**黑风寨主**(boss1,低沉反派)
10. 登场宣言:"盲剑客?正好,省得挖你眼睛。"——狂
11. 半血:"有两下子。可惜你听不懂死期的声音。"——狠(功能:阶段转换信号)
12. 败亡遗言——惊愕→不甘(功能:章结束钩子,暗示白无瞳存在)
**章尾旁白**
13. "寨主倒了。但徒弟不在这里——一张字条,指向南方的腐沼。"——收束+引第二章
## 6. 第二、三章骨架
- **第二章《腐沼泽》**:7 节点。新机制:毒状态(每回合 -3 HP,金疮药可解)、蛊师敌人(先攻)。Boss 腐沼祭主二阶段(半血召唤 2 小蛛)。解锁青钢剑/铁鳞甲。
- **第三章《无瞳峰》**:7 节点。新机制:黑暗战斗(部分敌人无声前摇,靠震动格挡——为终 Boss 铺垫)、听风剑。终 Boss 白无瞳三阶段,终阶段完全无声前摇。
- 两章正文沿用第一章模板(场景表+敌人表+对白功能大纲)由开发 agent 扩写,规模与第一章相当。
## 7. 存档结构(progress JSON)
信封按 00 文档 §4.2(`{schema, game:"rpg", updatedAt, data}`),`data`:
```json
{
"chapter": 1,
"scene": "stream",
"player": {
"lv": 3, "exp": 45,
"hp": 28, "maxHp": 36, "mp": 6,
"gold": 120,
"weapon": "iron_sword", "armor": "leather",
"potions": 2
},
"flags": {
"tutorial_explore_done": true,
"tutorial_battle_done": true,
"hunter_quest": true,
"chest_fork": false,
"shop_discount": true
},
"chapters": { "1": "cleared", "2": "unlocked", "3": "locked" },
"stats": { "kills": 12, "deaths": 1, "parries": 9, "playSec": 1500 }
}
```
- **保存时机**:场景切换后、战斗结算后、商店交易后、菜单选"保存并回大厅"。写 localStorage 并 PUT 服务器(未登录只写本地)。
- **读取**:进游戏检测到存档 → 语音问"继续上次的旅程?单击继续,右滑开始新游戏"。新游戏清空 data 保留 stats 累计。
- **版本**:`schema` 升版时开发 agent 写迁移或丢弃重来(R 轮内允许丢弃,文档标注即可)。
## 8. 战斗回合时序(实现契约)
```
回合开始 → 若敌人存活:播敌人行动意图音(前摇 1.0s,期间双击=格挡判定)
→ 前摇结束结算敌方攻击(应用格挡/防御减伤)→ 播受击/格挡音 + 震动(HIT / CONFIRM)
→ 玩家指令阶段:左右滑切指令(播指令名)→ 单击执行 → 播攻击音 + 敌方受击音
→ 敌方血量档位播报仅在上滑查询时播;半血/死亡自动播叙事短句
→ 循环。玩家 HP≤0 → 战败旁白 → 章首重生(等级金币保留,hp 回满)
```
- 敌方前摇音 = 敌人表"前摇音特征"列的 sfx(每敌人一个专属前摇音,这是"听声辨招"的核心资产,优先级高于环境音)。
- 内劲技能"破空斩":atk*2,mp-3,mp 不足时指令播报"内劲不足"并跳过该选项。
## 9. 资产清单(规模核对)
| 类别 | 数量 | 备注 |
|---|---|---|
| bgm | 5 | 3 章环境底各 1 + 战斗 1 + Boss 1(Mureka,循环) |
| sfx | ~35 | 8 敌人前摇 + 3 Boss 前摇 + 攻击/受击/格挡/技能/买药/开箱/升级 + 8 场景 amb 循环(或 amb 走 bgm 层) |
| voice | ~120 句 ×2 音色 | 旁白 ~30、NPC ~40、教学 ~15、战斗播报 ~20、状态/菜单 ~15;全部整句、角色 speaker+instruct 常量化 |
| 对标 | escape 现版约 40 句语音 + 15 sfx;《剑与声》约为其 3 倍,R4 备资产 + R5 开发一轮可行(场景/敌人/指令全部数据驱动,game.js 单文件预计 800-1000 行) |
## 10. 开发次序建议(R5 一轮内)
1. 数据表(场景图/敌人/物品/对话 id)→ 2. 探索循环 + 菜单 + 状态播报 → 3. 战斗回合机(含格挡窗口)→ 4. 商店/道具/升级 → 5. 存档读写 → 6. 第一章内容灌入 → 7. 第二、三章灌入 → 8. 教学关与打磨。资产(R4 已生成)缺失时用 console.error 静默跳过的引擎特性兜底,先通流程后补音。