Files
gplan-2/design/gdd/c2-adventure-structure.md
T
2026-09-14 18:18:49 +08:00

317 lines
25 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.
# 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 + 日志路径登记);零规则变更 |