317 lines
25 KiB
Markdown
317 lines
25 KiB
Markdown
# C2 冒险结构(Adventure Structure)
|
||
|
||
> **状态**:Approved · lean 格式
|
||
> **版本**:v1 · 2026-09-14 · 作者:DK + design-system
|
||
> **承载支柱**:P4 地牢下探的探险氛围(主——序列推进 = 不断下探更险的层)· P3(恢复点/囤积决策的冒险级容器)· P1("这局我到第几层"的冒险级对照物)
|
||
> **一句话**:C2 管一次冒险的骨架——关卡序列怎么排、通关给什么、死了怎么重来;位于 C1 关内行进之上、B1 战斗结算之下。
|
||
> **复核注记**:v1 solo 出稿 → 经 /design-review(--solo 快速审批)APPROVED(0 blocking / 3 recommended——recommended 随下次修订批执行);专员/总监代理未咨询——生产前人工复核保留。评审日志:`design/gdd/reviews/c2-adventure-structure-review-log.md`。
|
||
|
||
## 速览
|
||
|
||
| 关键问题 | 答案 |
|
||
|---|---|
|
||
| 定位 | 冒险/序列层编排:冒险生命周期、关卡序列、跨战斗 HP 账本、关卡大奖励、失败重开——C1 关内行进的上层结构,B1 战斗结算的入参供给方 |
|
||
| 拥有 | 冒险状态机与结果语义 · 关卡序列定义(LevelTable 行集内容 owner + 推进规则)· HP 账本(跨战斗持久性的 C2 半边兑现)· 关卡大奖励 · 失败重开语义 · master_seed 接线(冒险 = 种子域单位)· 冒险摘要 |
|
||
| 不拥有 | 关内节点行进与节点兑付触发(C1)· 战斗结算与关卡清库调用(B1)· 奖励内容与库存语义(B4/C3)· 数值曲线(C3)· 代币持久化与天赋(C4/D3)· 呈现(D1) |
|
||
| 上游输入 | C3 期望表与带锚(逐关通关率带 = 序列难度排布)· C3 L2 深度轴行值(序列行集扩展随批填充)· D2 LevelTable schema / ConfigDB / RngService · B1 出口分发语义(level_clear 上层调用面) |
|
||
| 下游输出 | 给 C1 的接口契约四件套 · begin_battle 入参供给(关卡序号 / hero_hp / 上限覆盖值)· 冒险摘要(C4 代币入账与 D3 快照的消费位) |
|
||
| 硬约束 | 零随机(零流消费、单一种子注入点)· 序列覆盖(冒险关数 ⊆ 表内容覆盖——越界关卡 = 内容生产缺口)· 死亡即冒险终(Roguelike 语义已锁)· 不碰库存域(关卡末清库由 C1 收束点触发 B1 level_clear) |
|
||
|
||
## 体验锚点
|
||
|
||
| 支柱 | 关键词 | 机制承诺 |
|
||
|---|---|---|
|
||
| P4 下探节奏 | "又清完一层,再往下" | 序列推进 + 关卡大奖励 = 下探途中的喘息台阶;每关一个可命名的新层(display_name),难度台阶可感知(雾解锁 / 数值跳升 / 通关率带下移) |
|
||
| P3 恢复点囤积 | "Boss 前把血囤满" | HP 账本跨战斗延续 + 恢复点节点按比例回血——血是冒险内唯一带得走的资源,恢复点位置就是决策压力点 |
|
||
| P1 冒险级掌控 | "这局我到第二层" | 冒险摘要(到达层 / 通关数 / 代币记账)给每次死亡一个可对照的坐标;重开 = 新种子新局面,不是同一关的复读 |
|
||
| 锚点时刻 | "这层清完了" | Boss 倒下 → 大奖励兑付 → 下一层开门的节拍;死亡 → 摘要结算 → 一键再来 |
|
||
|
||
## 全局流程
|
||
|
||
### 冒险生命周期
|
||
|
||
```
|
||
新冒险(Idle)
|
||
│ ① reseed(master_seed)——RngService 种子注入,冒险域单位恰一次
|
||
│ ② HP 账本置满 · 序列位置 = 1
|
||
▼
|
||
start_level(1) ──► 关内行进(C1 域:节点链逐节点推进)
|
||
▲ │
|
||
│ ├─ battle/boss 节点 ─► C1 组装 begin_battle(L, D, hero_hp, override) → B1
|
||
│ ├─ reward 节点 ─► B4 节点奖励入库(关内域库存)
|
||
│ └─ rest 节点 ─► C2 账本恢复(比例 = rest_heal_pct)
|
||
│ │
|
||
│ 关卡收束点 = Boss 战胜利 ∨ 英雄死亡
|
||
│ │ C1:调 B1 level_clear(库存关卡域清空 + 快照计数)
|
||
│ ▼
|
||
│ level_end{result: cleared | defeated}(C1 → C2)
|
||
├────────────────────────────────────────────┐
|
||
│ cleared 且当前关 < N │ defeated ∨ abandoned
|
||
│ ▼ │ ▼
|
||
│ 关卡大奖励(上限提升 · 血回满 · 代币记账) │ 冒险失败结算
|
||
│ ▼ │
|
||
└─ start_level(L+1) │
|
||
│ │
|
||
└─ cleared 且当前关 = N ──► 冒险完成结算 │
|
||
│ │
|
||
▼ ▼
|
||
冒险摘要 → Idle(重开 = 全新一轮)
|
||
```
|
||
|
||
| 出口 | 触发 | 动作序列 | 约束 |
|
||
|---|---|---|---|
|
||
| 下一关 | level_end(cleared) 且当前关 < N | 大奖励兑付 → start_level(L+1) | 大奖励在清库之后(C1 收束点已先调 B1 level_clear) |
|
||
| 冒险完成 | level_end(cleared) 且当前关 = N | 冒险结算(不再发上限提升——没有下一战可受益) | 摘要标记 run_completed |
|
||
| 冒险失败 | level_end(defeated) | 冒险结算 | 库存已由收束点清空;血条归零即终 |
|
||
| 冒险放弃 | 玩家发起、非战斗期受理 | 冒险结算(结果 = abandoned) | 已获大奖励不追回;与失败同型 |
|
||
|
||
## 核心规则
|
||
|
||
| # | 规则 | 要点 | 依据 |
|
||
|---|---|---|---|
|
||
| 1 | 冒险从第一关开始,倒下即终、清完末关即成 | 冒险 = 从序列第 1 关起步的完整一轮;关卡通关(Boss 战胜利)→ 自动进下一关;末关通关 = 冒险完成;任意战斗死亡 = 冒险结束。MVP 线性序列——无跳关、无回头路 | game-concept 冒险语义;C3 Boss 通关编排归属(C1/C2 域) |
|
||
| 2 | 每关是一条预置节点链,冒险关数不得超出表内容覆盖 | C2 为 LevelTable 行集内容 owner——链 = 战斗/奖励/恢复/Boss 节点依序排列、Boss 恒为末节点;战斗节点深度 = 前序战斗节点计数(Boss = Dmax);冒险关数 = 行集关数,加关 = 内容批(链行 + 敌我数值 + 变异解锁同批落,禁止只加序列不加内容);序列难度排布消费 C3 通关率带(L1→L2 带下移 + 雾解锁台阶) | D2 跨表校验;C3 期望表与 OQ1;A4 unlock_level=2 |
|
||
| 3 | 主角一条血走完整个冒险,关卡只换地图不换血条 | 账本收支四口——冒险开始置满 / 每战开始交出 / 战后收回 / 恢复点与大奖励入账;关卡切换零结算(血条跨关延续);血 = 冒险内唯一跨战斗资源(buff 战斗域清、库存关卡域清、RAP 战斗域清) | B2 hp_persistence 归 C1/C2;B1 begin_battle 入参;B4 关内延续同构 |
|
||
| 4 | 清完一关,下探前发一次大奖励:上限提升加回满 | 兑付时点 = 关卡收束清库之后、下一关开始之前;构成三件——HP 上限提升(+level_clear_hp_bonus)、血回满、代币记账加一份;不进背包不占库存域;末关通关不兑付 | B4 库存关卡域裁决;C3 区间平移换算率;C4 记账位 |
|
||
| 5 | 主角死亡冒险即终,重开是全新冒险不是关卡重试 | 失败 = 冒险终(无关卡重试、无检查点——Roguelike 语义已锁);重开 = 全新一轮(新种子 / 第 1 关 / 满血 / 空手);中途放弃与失败同型结算(已到手的保留);保留面 = 冒险摘要,清零面 = 账本 / 库存 / 种子域 | game-concept"死亡则冒险结束";A3 RAP 战斗域生命周期 |
|
||
| 6 | 一次冒险一粒种子 | 种子注入时点 = 冒险开始恰一次;冒险内雷图生成 / 奖励抽取 / 遭遇掷骰全部派生自该种子;冒险内不重置(切片逐关播种为其无冒险层的历史简化,本条转正为冒险域单种子);冒险可复现域 = master_seed + 三流计数器 | registry rng_service 快照契约;D3 消费方 |
|
||
| 7 | 关卡收束在关内宣布,冒险层只接结果 | C1 拥有关内一切行进(节点移动 / 兑付触发 / 战斗发起——参数组装:深度取链位、关卡序号与血条取 C2 下放);收束点(Boss 胜或死亡)C1 先调 B1 level_clear、再向 C2 宣布结果;C2 零战斗域直调、零库存域直调 | B1 出口分发"关卡结束 = 上层显式调用";切片 level_runner 先例转正 |
|
||
|
||
#### 规则 2 细则:深度标号与覆盖
|
||
|
||
| 项 | 语义 |
|
||
|---|---|
|
||
| 节点类型 | battle / boss / reward / rest——reward、rest 不占深度、不查战斗表;battle、boss 占深度 |
|
||
| 深度标号 | 战斗节点深度 = 该节点之前(含同链)已排 battle/boss 节点数,从 0 起计;Boss 恒为链末节点且深度 = Dmax |
|
||
| 链模板(MVP) | battle(D0) → battle(D1) → reward → battle(D2) → battle(D3) → rest → boss(D4)——每关 7 节点 5 战斗深度;L1/L2 同构复用,模板修订随内容批 |
|
||
| 覆盖义务 | 冒烟断言:行集内每个 battle/boss 节点 (L, D) 在 enemy / board_gen 两表存在精确行(D2 跨表校验复用 + 序列关数断言)——序列关数 ⊆ 内容覆盖,越界 = 内容生产缺口 |
|
||
| 生效前提 | N=2 行集扩展前提 = C3 L2 深度轴行值填充批落地;未填充期冒险以单关行集运行(N=1 合法态——切片现状) |
|
||
|
||
#### 规则 4 细则:大奖励构成
|
||
|
||
| 件 | 内容 | 载体 | 数值 |
|
||
|---|---|---|---|
|
||
| 上限提升 | max_hp_eff += level_clear_hp_bonus(冒险内生效——经 begin_battle 覆盖值传入后续每战) | C2 账本 + AdventureTable | +10 provisional(C3 区间平移换算率锚:+10hp ≈ +1 轮) |
|
||
| 血回满 | HP 账本 = 提升后 max_hp_eff | C2 账本 | 结构定式(非 knob——与 C3 满血开局校准口径闭合) |
|
||
| 代币记账 | tokens += token_per_level | 冒险摘要 | 10/关 provisional(消费方 C4) |
|
||
|
||
#### 规则 7 细则:C1/C2 编排边界(给 C1 的接口契约——C1 GDD 强制输入)
|
||
|
||
| 接口 | 方向 | 载荷 | 时点 |
|
||
|---|---|---|---|
|
||
| start_level(level_index, ctx) | C2 → C1 | ctx = {level_index, hero_hp, hero_max_hp_eff} | 冒险开始 / 每次关卡推进 |
|
||
| report_battle_end(hp) | C1 → C2 | 战后英雄 HP 终值(胜负皆报) | 每场战斗结束后 |
|
||
| heal_clamped(pct) | C1 → C2 | rest 节点恢复请求(比例取关卡行 rest_heal_pct) | 恢复点节点兑付 |
|
||
| level_end{result, hp, node_index} | C1 → C2 | result ∈ {cleared, defeated}(C1 已先调 B1 level_clear) | 关卡收束点 |
|
||
| 冒险放弃(abandoned) | D1 → C2 | 无载荷 | 非战斗期受理(MVP 无 UI 入口——语义预留) |
|
||
| 战斗发起组装 | C1 编排 | begin_battle(L, D, hero_hp, hero_atk, hero_max_hp):L / hero_hp / hero_max_hp 取 C2 下放,D 取链位,hero_atk 传表值通道(MVP 冒险内不提升攻击) | battle/boss 节点行进至 |
|
||
|
||
## 枚举
|
||
|
||
### 冒险结果(封闭枚举)
|
||
|
||
| 值 | 触发 | 摘要标记 |
|
||
|---|---|---|
|
||
| completed | 末关 level_end(cleared) | run_completed = true |
|
||
| failed | level_end(defeated) | run_completed = false |
|
||
| abandoned | 玩家放弃(非战斗期) | run_completed = false |
|
||
|
||
### 关卡收束结果(封闭枚举)
|
||
|
||
| 值 | 触发 | 后续 |
|
||
|---|---|---|
|
||
| cleared | Boss 节点战斗胜利 | 末关判定 → 大奖励 + 推进 / 冒险完成 |
|
||
| defeated | 任意战斗英雄死亡 | 冒险失败结算 |
|
||
|
||
### 冒险摘要(结算产出,消费方 C4 / D3 / playtest 日志)
|
||
|
||
| 字段 | 类型 | 语义 |
|
||
|---|---|---|
|
||
| run_completed | bool | 冒险是否打穿序列 |
|
||
| levels_cleared | int | 已通关数(代币记账乘子) |
|
||
| level_reached | int | 止步关卡序号(失败 / 放弃时 = 当前关) |
|
||
| tokens_recorded | int | levels_cleared × token_per_level |
|
||
| master_seed | int64 | 本冒险种子(复盘 / 快照域标识) |
|
||
|
||
## 数值结论与推导
|
||
|
||
> C2 是结构系统——运行时零新增公式,以下为账本结算式与设计期合成式;全部数值 provisional,调参所有权见 Tuning Knobs。
|
||
|
||
### F1 冒险通关率合成(设计期工具式)
|
||
|
||
**结论**:P(冒险通关) = Π P(L_i 通关);MVP N=2 合成带 = [6%, 20%](L1 [30,50]% × L2 [20,40]%)——冒险长度即难度总闸。
|
||
|
||
#### 推导
|
||
|
||
```
|
||
P_run = Π_{i=1..N} P(L_i) (逐关独立满血开局口径)
|
||
```
|
||
|
||
| 变量 | 符号 | 类型 | 范围 | 说明 |
|
||
|---|---|---|---|---|
|
||
| 各关通关率 | P(L_i) | float | (0,1) | C3 期望表逐关目标带(L1 [30,50]% / L2 [20,40]% / L3+ [10,25]% 预留) |
|
||
| 冒险关数 | N | int | [1, 行集关数] | LevelTable 行集关数——MVP 2 |
|
||
|
||
| 验算 | 读数 | 判定 |
|
||
|---|---|---|
|
||
| N=2 合成 | [0.30×0.20, 0.50×0.40] = [6%, 20%] | 单次通关率带合理(Roguelike 体感:多数局止步中途) |
|
||
| 口径闭合 | C3 带按每关满血开局校准;大奖励血回满使该口径跨关成立 | ✓(若未来大奖励改部分恢复,本式失效须改口径) |
|
||
|
||
### F2 HP 账本结算式
|
||
|
||
**结论**:账本三写口全部 clamp 于 [0, max_hp_eff];大奖励回满使每关开局恒满血——血条跨关只降不自动回,恢复只来自恢复点与大奖励两个显式口。
|
||
|
||
#### 推导
|
||
|
||
```
|
||
战后回写: hp := report_battle_end(hp) (victory 腿 hp ∈ [1, max_hp_eff];defeat 腿 = 0 → 冒险终)
|
||
恢复点: hp := min(hp + floor(max_hp_eff × rest_heal_pct ÷ 100), max_hp_eff)
|
||
大奖励: max_hp_eff := max_hp_eff + level_clear_hp_bonus; hp := max_hp_eff
|
||
战斗输入: begin_battle(hero_hp = hp, hero_max_hp = max_hp_eff, hero_atk = 表值通道)
|
||
```
|
||
|
||
| 变量 | 符号 | 类型 | 范围 | 说明 |
|
||
|---|---|---|---|---|
|
||
| 账本血量 | hp | int | [0, max_hp_eff] | C2 冒险域持有;战斗内由 B2 承载 |
|
||
| 生效上限 | max_hp_eff | int | [表值, 表值+加成×已通关数] | HeroTable.max_hp + Σ大奖励提升 |
|
||
| 恢复比例 | rest_heal_pct | int | [0,100] | LevelTable 逐关行字段(切片 30 转正 provisional——数值复验归 C3) |
|
||
| 上限提升 | level_clear_hp_bonus | int | [0,999] | AdventureTable 单行全局(默认 10) |
|
||
|
||
| 验算(示例轨迹,表值上限 50) | 账本读数 |
|
||
|---|---|
|
||
| 冒险开始 | 50/50 |
|
||
| D0–D3 逐战后(示例) | 43 → 31 → 24 → 17 |
|
||
| 恢复点(30% × 50 = 15) | min(17+15, 50) = 32 |
|
||
| Boss 胜后(假设余 8)→ 大奖励 | max_hp_eff = 60、HP = 60 |
|
||
| L2 开局 | 60/60 满血(C3 带口径闭合) |
|
||
|
||
### F3 冒险代币记账式
|
||
|
||
**结论**:tokens = levels_cleared × token_per_level——通关与中途死亡同式,差异只在 run_completed 标记;通关加成位预留(MVP 不启用,裁决归 C4)。
|
||
|
||
#### 推导
|
||
|
||
```
|
||
tokens_recorded = levels_cleared × token_per_level (token_per_level 默认 10,消费方 C4)
|
||
```
|
||
|
||
| 变量 | 符号 | 类型 | 范围 | 说明 |
|
||
|---|---|---|---|---|
|
||
| 通关数 | levels_cleared | int | [0, N] | 摘要字段 |
|
||
| 每关代币 | token_per_level | int | [0,999] | AdventureTable 单行全局——值归 C4 |
|
||
|
||
| 验算 | levels_cleared | tokens |
|
||
|---|---|---|
|
||
| 死在 L1 | 0 | 0 |
|
||
| 清 L1 死在 L2 | 1 | 10 |
|
||
| 打穿 N=2 | 2 | 20 + run_completed 标记 |
|
||
|
||
## 状态
|
||
|
||
| 状态 | 进入条件 | 行为/出口 |
|
||
|---|---|---|
|
||
| Idle | 冷启动 / 冒险结算完成 | 唯一出口 = 开始新冒险(reseed → 置账本 → start_level(1)) |
|
||
| RunActive | start_level(L) 受理 | 关内行进委托 C1;C2 只守账本写口与收束监听;放弃请求非战斗期受理 |
|
||
| Settling | level_end 或 abandoned 受理 | cleared 非末关 → 大奖励 → start_level(L+1) 回 RunActive;末关 cleared / defeated / abandoned → 摘要产出 → Idle |
|
||
|
||
不变式:RunActive 期恰一关卡在飞;master_seed 冒险内恒定;HP 账本 ∈ [0, max_hp_eff];Settling 恰一次(重复宣布拒绝 + 诊断);冒险内零流消费(RngService open_stream 零命中)。
|
||
|
||
## 边界情况
|
||
|
||
| 条件 | 行为 | 依据 |
|
||
|---|---|---|
|
||
| 末关 Boss 战胜利 | 冒险完成结算——不发上限提升(无下一战可受益)、无 start_level(N+1);代币照记 | 规则 1/4 |
|
||
| start_level 请求超出行集关数 | 防御 fail-fast(序列配置违约);运行时战斗表 floor 兜底属 D2 既有语义——C2 不产生越界请求,玩家不可达越界关 | 规则 2 / C3 边界情况表 |
|
||
| 行集战斗节点无对应 enemy/board_gen 行(内容缺口) | 冒烟断言拦截(覆盖义务);未填充期以单关行集运行(N=1 合法态) | 规则 2 细则 |
|
||
| level_end 重复宣布 | 幂等:已 Settling 的冒险拒绝重复兑付 + 诊断,账本与摘要零变化 | 状态不变式 |
|
||
| 恢复点满血触发 | 回复 0、合法(账本静默——无明细行协议,与战斗域"奖励未生效"族不同层) | F2 |
|
||
| 大奖励时上限已有加成 | 累加(每关一份;N=2 冒险至多一次) | 规则 4 |
|
||
| 放弃请求在战斗中 | 拒绝(战斗域单事务在飞;入口呈现仅非战斗期可达——MVP 无 UI 入口) | 规则 5 / 规则 7 细则 |
|
||
| 英雄死亡但战斗判定为胜利 | 结构不可达(B1 判定 hero 先判);防御断言:cleared 收束要求账本入账 hp > 0 | 规则 3 / B1 判定段 |
|
||
| 重开种子与上局相同 | 合法态(熵源小域);约束 = 种子生成禁走玩法随机通道、冒险内计数器随 reseed 归零——种子值生成源裁决归实现期 ADR | 规则 6 / 开放问题 |
|
||
| 冒险内跨关遗留物查询 | 无遗留——buff 战斗域清(B1)、库存关卡域清(C1 收束点)、RAP 战斗域清(A3);冒险层账本与摘要是唯一跨关状态 | 规则 3/7 |
|
||
| 关卡行缺失(LevelTable 无该 level_index 行) | fail-fast——序列配置事故非玩家可达态;与战斗表 floor 兜底分属两层 | 规则 2 |
|
||
|
||
## 依赖
|
||
|
||
**上游**:
|
||
|
||
| 系统 | 性质 | 接口要点 |
|
||
|---|---|---|
|
||
| C3 | hard | 期望表逐关通关率带 = 序列难度排布输入;L2 深度轴行值(enemy / board_gen 的 (2, D1–D4))随批填充 = N=2 生效前提;大奖励 / 恢复点数值联动复验(区间平移换算率锚) |
|
||
| D2 | hard | LevelTable schema(切片建表——C2 为行集内容 owner)· AdventureTable 新表走 D2 接口漂移规则(单行全局,C2 回填 owner)· ConfigDB 单点读取 · RngService 种子注入入口(新面——义务登记)· 跨表校验复用 |
|
||
| B1 | hard(下游消费面) | begin_battle 入参 (L, D, hero_hp, hero_atk, hero_max_hp) 供给方转正 = C1 组装 / C2 供值;level_clear 调用方 = C1 收束点(C2 零直调);战后 HP 读回 = B1 呈现面英雄投影(载荷自包含) |
|
||
| B2 | 间接 | hero hp_persistence 归 C1/C2——本 GDD 兑现 C2 半边(账本);B2 单位接口零变更 |
|
||
| B4 | 间接 | 库存关卡域清空触发源 = C1 收束点;节点奖励兑付归 C1;大奖励不进库存域(零接触) |
|
||
| A4 | 间接 | 雾 unlock_level=2 = L2 台阶的内容面(序列难度排布消费) |
|
||
|
||
**下游**:
|
||
|
||
| 依赖方 | 性质 | 接口 |
|
||
|---|---|---|
|
||
| C1 | hard | 接口契约四件套 + 收束点语义 + 战斗发起组装权(规则 7 细则表全文)——C1 GDD 强制输入,门禁评审核对项;切片 level_runner 为其实现先例(冒险域职责切出后归 C2 侧新 owner) |
|
||
| B1 | 下游(消费 C2 供值) | begin_battle 入参面;B1 依赖表 C1/C2 provisional 行由本 GDD 收编转正 |
|
||
| C4 | 远 | 冒险摘要 = 代币入账位;冒险开始参数面 = 天赋注入预留位(MVP 空参数——开始新冒险时注入,结构同 begin_battle 覆盖值通道) |
|
||
| D3 | 远 | 快照契约域单位 = 冒险(master_seed + 三流计数器);摘要字段含 master_seed 供复盘 |
|
||
| 呈现层(D1) | soft | 冒险摘要结算画面 / 关卡推进指示 / 放弃入口(非战斗期)——数据源 = 本 GDD 摘要与状态投影 |
|
||
|
||
**跨 GDD 义务清单(对侧修订批逐项核对,缺项即阻塞级按各自门禁)**:
|
||
|
||
| 对侧 | 内容 | 状态 |
|
||
|---|---|---|
|
||
| C3 | L2 深度轴行值填充(enemy 四行 + board_gen 四行,(2, D1–D4))——OQ1"内容与数值同批"机制的兑现批 | N=2 生效前提 |
|
||
| D2 | RngService 种子注入入口登记(reseed——provisional 名,实现载体随 ADR) | 义务登记 |
|
||
| D2 | AdventureTable 建表(单行全局两字段——Rule 4 豁免,HeroTable/SettlementTable 先例;C2 回填 owner) | 接口漂移 |
|
||
| B1 | begin_battle 入参供给方转正(依赖表 C1/C2 行收编——本 GDD 为 C2 半边定义源) | 转正登记 |
|
||
| registry | level_table / adventure_table / hero_override_parameter_passing 三条目登记(本定稿批执行) | 本批 |
|
||
| C1 | 接口契约四件套 + 收束点语义全款承接(C1 GDD 门禁评审核对——C2 在 C1 之前设计,本表即其接口基线) | 待 C1 定稿核对 |
|
||
| C4 | token_per_level 记账消费 + 天赋注入位消费 | 远(C4 期) |
|
||
|
||
## Tuning Knobs
|
||
|
||
| 字段 | 类型/域 | 默认 | knob | 说明 |
|
||
|---|---|---|---|---|
|
||
| LevelTable 行集(N 与链模板) | level.tres 逐关行 | L1 现行 + L2 随批 | ✓(结构) | 加关 = 内容批(链行 + C3 数值 + 变异解锁同批);过长 = 内容缺口,过短 = 冒险时长不足(愿景 20–40 分钟 vs MVP 两关,真人数据后定扩展节奏) |
|
||
| LevelTable.rest_heal_pct | int [0,100] 逐关行 | 30 | ✓ | 恢复点比例;数值复验归 C3;100 = 恢复点变全满泉、0 = 死节点 |
|
||
| AdventureTable.level_clear_hp_bonus | int [0,999] 单行全局 | 10 | ✓ | 大奖励上限提升;值锚 = C3 平移换算率(+10hp ≈ +1 轮);上调须 C3 重扫 L2 带 |
|
||
| AdventureTable.token_per_level | int [0,999] 单行全局 | 10 | ✓ | 代币记账;消费方 C4 |
|
||
| 链模板节点构成 | level.tres nodes 数组 | 战×2→奖励→战×2→恢复→Boss | 内容批 | 节点类型序列修订 = 内容批(随 C3 数值同批验带),非调参 |
|
||
|
||
- 非 knob(结构冻结):序列线性无跳关、Boss 恒末节点、死亡即冒险终、大奖励三件构成、冒险内零流消费、收束点编排边界。
|
||
- Knob 交互:level_clear_hp_bonus × C3 L2 通关率带(回满 + 上限共同抬开局强度——上调走 C3 重扫);rest_heal_pct × 通关余量带(C3 通关余量 p10 ≥ 3 的对冲杠杆)。
|
||
|
||
## 验收标准
|
||
|
||
| AC | Given | When | Then |
|
||
|---|---|---|---|
|
||
| AC-1 | 冒险 Idle | 开始新冒险 | reseed 恰一次注入新 master_seed;HP 账本 = 表值上限满血;start_level(1) 受理;L1 行集加载零诊断 |
|
||
| AC-2 | RunActive 当前关 < N | level_end(cleared) | 大奖励恰一次:max_hp_eff += level_clear_hp_bonus、账本 = max_hp_eff、tokens += token_per_level;随后 start_level(L+1) |
|
||
| AC-3 | RunActive 当前关 = N | level_end(cleared) | 冒险完成结算:无上限提升、无 start_level(N+1);摘要 run_completed = true、tokens = N × token_per_level |
|
||
| AC-4 | RunActive 任意战斗 | 英雄死亡 → level_end(defeated) | 冒险失败结算;摘要 levels_cleared = 已通关数、level_reached = 当前关;账本封闭 |
|
||
| AC-5 | 冒险结算后 | 开始新冒险 | 全状态重置(账本 / 序列位置 / 库存域空 / 摘要新生成);reseed 新种子注入 |
|
||
| AC-6 | RunActive 全程 | 逐战核对入参 | begin_battle.hero_hp = 账本当前值、hero_max_hp = max_hp_eff;战后账本 = 英雄终值投影(载荷自包含) |
|
||
| AC-7 | MVP 全行集 | 冒烟跨表断言 | 每关 battle/boss 节点 (L,D) 在 enemy / board_gen 有精确行;序列关数 = 行集关数 |
|
||
| AC-8 | C2 文件集 | 静态扫描 | RngService 流消费(open_stream)零命中;reseed 每冒险恰一次调用 |
|
||
| AC-9 | Settling 已受理 | level_end 重复宣布 | 拒绝 + 诊断;账本与摘要零变化 |
|
||
| AC-10 | 生效前提未兑现(L2 行集缺行) | 冒烟运行 | 以单关行集载体运行(N=1 合法态);N=2 断言显式 SKIP 非 FAIL |
|
||
| AC-11 | RunActive 战斗中提交放弃请求 | 请求受理判定 | 拒绝;非战斗期受理 → abandoned 同失败型结算、已获大奖励不追回 |
|
||
| AC-12 | 大奖励后首战 | begin_battle 入参核对 | hero_max_hp = 旧上限 + level_clear_hp_bonus(覆盖值通道);hero_atk 走表值通道(MVP 恒不覆盖) |
|
||
| AC-13 | rest 节点兑付 | 满血 / 缺血两腿 | 恢复 = floor(max_hp_eff × rest_heal_pct ÷ 100) clamp 上限;满血腿回复 0 合法 |
|
||
|
||
## 开放问题
|
||
|
||
| # | 悬案 | owner | 时机 |
|
||
|---|---|---|---|
|
||
| OQ1 | 冒险长度扩展节奏——MVP N=2(约 15–25 分钟)vs 愿景单局 20–40 分钟;扩关 = 内容批,节奏按真人单关时长数据定 | C2 + C3 | playtest 批次 2 后 |
|
||
| OQ2 | 大奖励形态扩展(三选一 / 攻击型 / 通关加成)——AdventureTable 扩列结构位已留,设计随 C4 元进度 | C2 + C4 | C4 GDD |
|
||
| OQ3 | master_seed 生成源(熵源通道禁走玩法随机——种子值生成器归属) | D2 / 实现期 ADR | 实现期 |
|
||
| OQ4 | 放弃入口呈现与受理细节(仅语义已定:非战斗期受理、同失败型结算) | D1 | D1 / UX 批 |
|
||
| OQ5 | L2 display_name 表现层命名(provisional 名"第二层 · 雾漫巢径"——风格对齐 L1"苔藓回廊") | C2 表现层 | L2 内容批 |
|
||
|
||
## 版本历史
|
||
|
||
| 版本 | 日期 | 改动 |
|
||
|---|---|---|
|
||
| v1 | 2026-09-14 | 初版 solo 出稿:七核心规则(冒险骨架 / 序列覆盖 / HP 账本 / 大奖励 / 失败重开 / 种子接线 / C1-C2 编排边界)+ F1–F3 + 13 AC + 给 C1 接口契约四件套;MVP N=2 + AdventureTable 单行全局 + N=2 生效前提登记;切片 level_runner 关卡域先例切分转正(冒险域归 C2、关内行进归 C1) |
|
||
| v1.1 | 2026-09-14 | 评审通过状态同步:状态头 In Design → Approved、复核注记更新(--solo APPROVED + 日志路径登记);零规则变更 |
|