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 文档
This commit is contained in:
SoundGame Dev
2026-08-29 21:55:44 +08:00
parent f0f0a9b50e
commit cc0f8c008d
1885 changed files with 11246 additions and 5 deletions
+209
View File
@@ -0,0 +1,209 @@
# 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 静默跳过的引擎特性兜底,先通流程后补音。