Files
SoundGame/docs/design/05-rpg.md
T
2026-10-01 23:26:47 +08:00

209 lines
11 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 · 《剑与声》完整设计(26 号对齐)
> **给开发者的实现要点摘要**
> 1. **交互权威**:26 号手册。施工数据以 [05-rpg-chapter1.md](05-rpg-chapter1.md) 的场景图 JSON、数值、存档为准。语音表 [05-rpg-ch1-voice-ids.md](05-rpg-ch1-voice-ids.md) 不在本次改写。
> 2. **探索**:左右滑切换选项、单击确认。上滑=我在哪/状态(阶段 1)。新手期无双击。菜单与探索同构(阶段 2)。
> 3. **格挡禁止绑新手双击。** 敌方前摇窗口内:**再单击**挡住(只教这一个)。窗口内朝攻击方向滑也算格挡(空间冗余,不单独开课)。无声敌人:系统 danger earcon + 回执仍出声;**防御指令**始终可用(减伤 50%,不看时机)。iOS 无震动时格挡与防御照常可完成。
> 4. 第一句就让玩家滑选项或点一下;第一次成功 ≤10s。回执 ≤100ms。玩家回合 = `YOUR_TURN`;前摇窗口 = `ACTION`。
> 5. 规模不变:3 章、第一章 8 场景、8 种敌人 + 3 Boss、装备 6、线性公式。战败章首重生(等级金币保留)。
---
## 0. 设计单(26 号附录 C)
### 0.1 一句话核心动作
**听选项,左右滑挑选,单击去做;战斗里听前摇,再点一下挡住。**
### 0.2 玩家可感知的状态(3 个)
| 状态 | Floor | 听感 | 第一次教 |
|---|---|---|---|
| 探索 / 选指令 | `YOUR_TURN` | `bgm/explore` 或 `village` + amb;指令名循环即「轮到你」;可加等待声 | 「左右滑,点一下。」 |
| 旁白 / NPC | `SPEAKING` | 语音;整链 duck | 开场 |
| 前摇窗口 / 危险 | `ACTION` | 有声:`tel_*`;无声:`danger` earcon(系统音,不是敌人叫声) | 「听到这个,点一下挡住。」 |
战斗 BGM、Boss BGM 是宏观层,新手期不单开第 4 种「必须记住的状态课」。
### 0.3 新手手势与解锁
| 手势 | 探索 | 战斗选指令 | 前摇 ACTION | 解锁 |
|---|---|---|---|---|
| 左 / 右滑 | 切选项 | 切指令 | **朝来招方向滑=格挡**(不教,做对算成功) | 阶段 0 |
| 单击 | 确认 | 执行指令 | **格挡**(唯一教学手势) | 阶段 0 |
| 上滑 | 状态(位置/目标/HP 档) | 战场状态 | `invalid`(窗口内只认格挡) | 阶段 1 |
| 下滑 | 菜单(阶段 2) | 逃跑 | `invalid` | 阶段 2;战斗始终=逃跑不是菜单 |
| 双击 | 当单击 | 当单击 | 当单击(可格挡,因当单击) | 阶段 3 才识别为重听场景句 |
| 长按 | 旁白加速(探索不占帮助) | 加速 | 不占用格挡 | 默认加速;格挡不绑长按 |
### 0.4 状态 × 手势矩阵(新手期)
| 状态 \ 手势 | 单击 | 左右滑 | 上滑 | 下滑(未解锁) | 双击 | 连点 |
|---|---|---|---|---|---|---|
| SPEAKING | 跳句 + `ok` | 打断并切选项/指令 | 打断,状态句 | `invalid`+解释 | 当单击 | 400ms `busy` |
| 探索 YOUR_TURN | 执行选项 | 切选项+报名 | 状态 | `invalid` | 当单击 | `busy` |
| 商店 / 菜单 | 购买/确认 | 切项 | 重听说明 | — | 当单击 | `busy` |
| PLAYER_SELECT | 执行指令 | 切指令+报名 | 战场状态 | 逃跑检定 | 当单击 | `busy` |
| ENEMY_TELEGRAPH ACTION | 格挡 | 朝来招方向=格挡;反方向=`invalid` | `invalid`+首次「现在点一下挡住。」 | `invalid` | 当单击→格挡 | 第一下格挡,其余 `busy` |
| 结算 / 战败旁白 | 继续 | `invalid` | 状态 | 菜单若已解锁 | 当单击 | `busy` |
### 0.5 等待点
| id | 期待 | `_full` | `_short` | 静默 | L2 | L3 |
|---|---|---|---|---|---|---|
| `village_opt` | 左右或单击 | 「左右滑,选。单击,去做。」 | 「滑一下。」 | 18s | 左右滑 | 替玩家切到「前进」 |
| `shop_buy` | 单击 | 「单击,买下。」 | 「单击。」 | 12s | 单击 | — |
| `tut_b0` | 左右滑 ≥1 | 「滑一滑,听招式名。」 | 「滑一下。」 | 8s | 左右 | 游戏切一次指令 |
| `tut_atk` | 单击攻击 | 「选攻击,单击。」 | 「单击。」 | 8s | 单击 | 代打一刀 |
| `tut_parry` | 前摇内单击 | 「听到低吼,点一下挡住。」 | 「点一下。」 | 窗结束=失败通过 | 单击 | 演示格挡 |
| `tut_def` | 选防御并单击 | 「选防御,单击。」 | 「选防御。」 | 8s | 防御 | 代选防御 |
| `player_turn` | 单击或滑 | (指令名刚播过) | 「单击出手。」 | 8s | — | — |
### 0.6 首 3 分钟逐秒脚本
| 时间 | 游戏说 / 播 | 期待 | 没做 | 做错 |
|---|---|---|---|---|
| 0~3s | 「左右滑,选。点一下,去做。」(选项已在) | 左右滑或单击 | 「滑一下。」 | 上滑未解锁=`invalid` |
| 3~10s | 切到一项 + 报名 = 第一次成功 → 若点「前进」则走路 | 再点确认 | 短句 | — |
| 10~30s | 村长赠金;「去商店。左右滑,听价钱。」 | 进商店买或不买 | 三档 | 钱不够=`shop_poor` |
| 30~60s | 小路选项;阶段 1:「想看自己怎么样,向上滑。」 | 上滑一次 | 「向上滑。」 | — |
| 60~120s | 岔路左右;溪流进教学战 T0→攻击 | 滑指令、单击出剑 | 看门狗推进 | 纠正 |
| 120~180s | 「它要扑了。」前摇 →「点一下挡住。」→ 防御课 → 自由击杀 | 窗口单击 | 受击锁血 1,仍通过 | 窗外汇报「等声音再点。」 |
### 0.7 失败表
| 类型 | 判定 | 归因 | 回到 | 新手代价 |
|---|---|---|---|---|
| 格挡没出手 | 窗口内无单击/同向滑 | 「这下没挡。声音一响就点。」 | 下一玩家回合;教学锁血 | HP 锁底 1(教学) |
| 格挡太早/太晚 | 窗外单击 | 「等低吼再点。」(有声)/「等叮一声再点。」(无声 earcon) | 该击按未格挡结算 | 保护档减伤 |
| 滑反方向 | 窗口内反向滑 | 「招从左边来。向左滑,或点一下。」 | 未格挡 | 无 |
| 战败 | HP≤0 | 「被打倒了。回村子再来。」 | village,保留等级金币 | 非教学掉一次;仍存档 |
| 逃跑失败 | Lv≥3 且 30% | 「没甩掉。听前摇。」 | ENEMY_TELEGRAPH | 可格挡 |
| 钱不够 / 无药 / 无 MP | 执行失败 | 对应句 + `invalid` | 留在选指令 | 无 |
### 0.8 台词类别
- `critical`:开场动作句;教学格挡那一句 ≤3s。
- `content`:场景 desc、NPC、选项名、`btl_start_*`、半血/胜利。
- `hint`:等待点短句、`sys_where`、Boss 门前 `boss1_warn`。
- `feedback`:格挡失败归因、`btl_nomp`、`btl_noitem`、`btl_flee_fail`。
无声敌人**禁止**把窗口提示做成「只有震动」:必须 `danger` earcon(合成系统音)+ 回执。叙事仍是「敌人没有脚步」,系统可以出声。
### 0.9 断点复述
场景切换/战斗结束/商店后自动存。回来 5s:「你在雾口村。去黑风寨。左右滑,选前进。」模板:位置 + 目标 + 一个动作。`sys_continue_ask`:单击继续,右滑新游戏。
### 0.10 测试
进村 → 左右滑+单击前进 → 一场战斗(单击攻击;前摇内单击格挡)→ summary 更新。教学战锁血 1。战败重生也存档。
---
## 1. 定位与循环(保留)
盲剑客沈听澜。一章 15–25 分钟;死亡章首重生(背包/等级保留)。循环:探索听场景 → 选行动 → 回合战斗(格挡是技巧)→ 经验装备 → Boss → 下一章。
---
## 2. 手势(26 号,无豁免双击格挡)
探索、战斗选指令见 §0.3。**格挡窗口(1.0s,听风剑 1.3s,保护档见 11 号)**:
1. **教:单击。** 「听到前摇,点一下挡住。」
2. **也认:朝来招方向滑。** 来招方位由 `tel_*` 声像或约定(狼正面=上或「扑击」默认单击即可;有左右声像的敌人:左声道→左滑)。反方向=`invalid`,不算格挡。
3. 成功:`sfx/parry` + `ok` 可省 + 减伤 70%。与防御指令不叠加(取更优)。
4. 窗口外单击:若在 PLAYER_SELECT 则执行指令;若仍在结算间隙=`invalid`+「等前摇。」
废止:双击格挡、用 300ms 双击窗规避 tap 延迟。演奏/格挡要即时:前摇期可 `immediateTap` 或全局 `doubleTapWindow: 0`(松手即单击)。
---
## 3. 数值框架(保留公式与表)
```
maxHp = 20 + 8*(lv-1)
atk = 5 + 2*(lv-1) + 武器atk
def = 护甲def
mp = 3 + lv // 破空斩耗 3,伤害 atk*2
expToNext = lv * 20
dmg = max(1, round((atk攻 - def守) * (0.85~1.15)))
格挡: round(dmg * 0.3);防御指令: round(dmg * 0.5)
```
敌人 HP/ATK/DEF/EXP/金币/前摇特征:见 chapter1 §4.2 原表(野狼 10/4/0 … 白无瞳 110/18/5)。装备价格与听风剑窗口 +0.3s 不变。平衡校验(lv3 铁剑打 Boss 会格挡能过)不变。
第三章无声前摇:**系统 danger earcon 标识窗口**;iOS 无震时 earcon + 回执足够完成「点一下」格挡。防御指令是不看时机的兜底,对所有平台必要,不是 iOS 专享补丁。
---
## 4. 场景结构(保留)
有向节点图,明雷。第一章 8 节点表(village…boss1)见 chapter1 JSON。二章毒状态/蛊师先攻;三章黑暗战斗铺垫终 Boss。岔路、商店、休息点保留。
---
## 5. 第一章内容与教学(手势改写)
场景列表、对白功能大纲、村长/猎人/寨主台词意图:**保留**(正文仍 ≤25 字/句,指令 ≤12 字)。
教学:
- 场景 1:左右滑+单击,商店买一次(50 金启动)。
- 场景 3:左右滑选岔路。**不教双击重听**;重听=阶段 3 或上滑状态/长按加速旁白中的跳句。
- 场景 4 教学战:HP 锁 1。顺序见 11 号四步,其中格挡步改为「点一下挡住」。
---
## 6. 存档(保留结构,chapter1 为准)
`chapter/scene/player/flags/chapters/stats` + 必填 `summary`。保存时机不变。新游戏清空 data 保留 stats。
建议 `stats.battlesWon` 供 11 号保护档使用(若 chapter1 未列则实现时补字段,不改其它数值)。
---
## 7. 战斗时序(格挡改单击)
```
回合开始
→ 玩家先攻(第一章):PLAYER_SELECT(turn_player + 等待声或指令名)
左右滑切指令,单击执行
→ CHECK_ENEMY_DEAD
→ ENEMY_TELEGRAPH(ACTION,1.0s):tel_* 或 danger earcon
窗口内单击 或 同向滑 → 格挡
→ ENEMY_RESOLVE → 玩家 HP 检定
→ 循环
HP≤0 → 败句 → 章首
```
蛊师等先攻:B_START 后先 TELEGRAPH。半血叙事钩子保留。破空斩 mp 不足留在选指令。
---
## 8. 资产规模(保留)
BGM 以 10 号为准:menu / explore / village / battle / boss / ending。amb 走 sfx 层循环(addendum)。sfx ~35、语音 ~114 见台词表。`ui_deny` 不做,回执走引擎。
---
## 9. 开发次序(保留)
数据表 → 探索循环 → 战斗机(格挡=窗口单击)→ 商店升级 → 存档 → 灌第一章 → 二/三章 → 打磨。
---
## 10. 废止清单
| 废止 | 改为 |
|---|---|
| 双击=格挡;双击=重听场景 | 窗口单击格挡;新手双击当单击 |
| 无声敌人只靠震动格挡;iOS 不可格挡 | danger earcon + 回执;防御指令全平台兜底 |
| 开场先讲完规则再玩 | 第一句就滑选项 |
| 菜单单击循环+双击确认 | 与探索同构:左右滑+单击 |
| 看门狗原样重播帮助长句 | 三档提示 |
| 失败重开整章教学 | 就近:教学该步;战败回村 |
| 无效只震 | 回执必响 |
故事、节点、数值、装备、Boss 阶段:**保留**。