11 KiB
05 · 《剑与声》完整设计(26 号对齐)
给开发者的实现要点摘要
- 交互权威:26 号手册。施工数据以 05-rpg-chapter1.md 的场景图 JSON、数值、存档为准。语音表 05-rpg-ch1-voice-ids.md 不在本次改写。
- 探索:左右滑切换选项、单击确认。上滑=我在哪/状态(阶段 1)。新手期无双击。菜单与探索同构(阶段 2)。
- 格挡禁止绑新手双击。 敌方前摇窗口内:再单击挡住(只教这一个)。窗口内朝攻击方向滑也算格挡(空间冗余,不单独开课)。无声敌人:系统 danger earcon + 回执仍出声;防御指令始终可用(减伤 50%,不看时机)。iOS 无震动时格挡与防御照常可完成。
- 第一句就让玩家滑选项或点一下;第一次成功 ≤10s。回执 ≤100ms。玩家回合 =
YOUR_TURN;前摇窗口 =ACTION。- 规模不变: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 号):
- 教:单击。 「听到前摇,点一下挡住。」
- 也认:朝来招方向滑。 来招方位由
tel_*声像或约定(狼正面=上或「扑击」默认单击即可;有左右声像的敌人:左声道→左滑)。反方向=invalid,不算格挡。 - 成功:
sfx/parry+ok可省 + 减伤 70%。与防御指令不叠加(取更优)。 - 窗口外单击:若在 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 阶段:保留。