docs(gdd): 13 份系统 GDD 迁移为 design/analysis 两件套 v2
- design 件只装结论:v2 骨架(设计目的/系统范围/核心循环/领域章节/依赖与输出/P0 闭环/P1·P2 后置/调参表/GWT 验收/版本历史),AC/EC/OQ/义务台账编号全部保留 - 新建 design/gdd/analysis/ 13 份推演件:候选取舍/公式推导/数值锚定论证/已裁决争议按问题节组织,文末附去向映射表(零丢失审计) - v1 原文备份于 design/gdd/legacy-2026-09-14-v1/(13 份) - systems-index 文档树补 analysis 目录导航行 - gdd_lint 全量 PASS(14 文件 0 不通过);迁移零裁决——19+1 项待拍板已登记各 analysis 开放问题区
This commit is contained in:
1 parent
51a6bd8b53
commit
85841f52be
14 files changed
+2540
-1631
No files matched your search
+167
-191
@@ -1,38 +1,44 @@
|
||||
# A3 行动经济(Action Economy)
|
||||
|
||||
> **状态**:Approved · lean 格式
|
||||
> **版本**:v1.0-lean · 2026-09-13 · 作者:user + agents(数值继承原型 v2/v3 实测结论与 game-concept 定稿)
|
||||
> **状态**:Approved · **版本**:v2 · 2026-09-14
|
||||
> **承载支柱**:P1 主(每轮取舍的节拍器)· P2 次(规划的延迟兑现)· P3(旗稀缺性→AP 机会成本)· P4(移动免费的氛围归属)
|
||||
> **层级**:Layer 1 Foundation · Milestone MVP · 设计顺序第 2 位(上游 D2 已 Approved)
|
||||
> **一句话**:A3 是玩家每轮的行动预算账本——每轮固定 AP、统一价目、停手 1:1 转存 RAP / 清图奖励两条出口,全部收益以战斗效果直兑进轮次结算,自身不产生、不折算任何抽象资源点。
|
||||
> **一句话**:玩家每轮的行动预算账本——固定 AP、统一价目、停手 1:1 转存 RAP,收益全以战斗效果直兑进结算,自身不产生、不折算任何抽象资源点。
|
||||
> **推演件**:`design/gdd/analysis/a3-action-economy.md`(本文件只收结论,理由在那里)
|
||||
|
||||
## 速览
|
||||
## 设计目的
|
||||
|
||||
| 关键问题 | 答案 |
|
||||
|---|---|
|
||||
| 定位 | 玩家每轮行动预算与支出规则的账本——扫雷侧每个决策都花 AP,所有收益以战斗效果(安全格→主角 buff、标中旗→怪物 debuff、踩雷→敌方增益)直兑进轮次结算;纯资源账本,零随机、零表现面 |
|
||||
| 拥有 | AP 资源账本独占(`try_spend` 唯一扣减入口)· 统一价目 · 三结束路径仲裁(cleared > stopped > ap_exhausted)· RAP 池生命周期 · `last_round_end` 记录 · F1 五条款下游契约 · ActionEconomyTable 回填 owner |
|
||||
| 不拥有 | 棋盘面规则与执行(A2)· 轮次编排与结算(B1)· 奖励内容与档位(B4)· 数值表本体(D2 承载,A3 回填)· 呈现(D1)· 教学(D5) |
|
||||
| 上游输入 | D2 ActionEconomyTable(ConfigDB 读取)· A2 的 try_spend 调用与动作参数上报(chain_size / clears_map)· B1 信号(notify_round_start / next_round_mode / battle_over)· 玩家停手与刷新输入(经 D1 / B1 编排) |
|
||||
| 下游输出 | round_end `(path_tag, continuation_hint)`(棋盘路径经 A2 外发、stopped 由 A3 直发)· `last_round_end` 只读记录 · F1 五条款(B1 验收)· AP/RAP HUD 数值(D1)· 教学口径(D5) |
|
||||
| 硬约束 | 零随机 · 零玩法数值字面量(D2 Rule 1)· 8 API 全 bool(受理/拒绝,拒绝附 debug 诊断、非进程致命)· 单一事务原子仲裁、禁双重折算 · Core 层零 UI 依赖(`--headless --script` 冒烟可完整驱动) |
|
||||
A3 是玩家每轮的行动预算账本:扫雷侧每个决策都花 AP,收益全部以战斗效果直兑进轮次结算;纯资源账本,零随机、零表现面。没有 A3,挖/旗/停手就没有统一成本语言——执行归 A2、兑付归 B1、显示归 D1。
|
||||
|
||||
A3 是玩家 agency 的计量器:AP 不减少总点击量,而是把点击摊销进多个轮次并插入结算节拍;真正的决策压缩器是连锁展开(1 次点击兑现一片区域)与停手(放弃剩余格子换风险退出权)。没有 A3,挖/旗/停手就没有统一成本语言;执行归 A2、兑付归 B1、显示归 D1。
|
||||
1. 推理免费、兑现花 AP——取舍落点在"确定动作先兑现哪些"与"轮末赌不确定格 vs 停手攒 RAP"(P1 节拍器)。
|
||||
2. 连锁展开免费——一次正确推断被免费兑现成一整片区域,连锁开的格计入清图进度(推理放大器)。
|
||||
3. 收手换退出权——停手把剩余 AP 1:1 攒成 RAP,面对纯盲猜换一张新图是"我不赌"的体面出口(P2)。
|
||||
4. 承诺有重量——标中旗削弱敌人、踩雷强化敌人、挖安全格强化自己;旗无数量上限,稀缺性由 AP 机会成本承载(P3)。
|
||||
5. 边缘探索免费——小人移动免费、挖/旗限 8 向相邻,服务地牢氛围而非经济杠杆(P4)。
|
||||
|
||||
## 体验锚点
|
||||
## 系统范围
|
||||
|
||||
| 支柱 | 关键词 | 机制承诺 |
|
||||
|---|---|---|
|
||||
| P1 "我算对了"的节拍器 | "推理免费,兑现花 AP" | AP 把推理的兑现切进轮次节拍——取舍落点在构成选择(确定动作供给 >8 时先兑现哪些)与轮末尾巴(赌不确定格 vs 停手攒 RAP);供给 ≤8 时确定动作可近乎无代价延后(棋盘跨轮存续);连锁免费是推理放大器——一次正确推断被免费兑现成一整片区域;终局碎片区的零风险收尾可能跨轮完成,是节奏阀的有意代价;决策密度由 A1 供给兜底、监测归 OQ3 |
|
||||
| P2 "规划的延迟兑现" | "收手换退出权" | 每个安全格的 buff 当场入库、结算明细可见(B1 归因标注);停手改产风险退出权——面对纯盲猜,攒 RAP 换一张新图是"我不赌"的体面出口 |
|
||||
| P3 "风险与收益同源" | "承诺有重量" | 三向效果映射使同源原则具象——标中旗削弱敌人、踩雷强化敌人、挖安全格强化自己;旗无数量上限,稀缺性由 AP 机会成本承载(8 向相邻限制约束的是当轮几何而非总量——跨轮小人可走遍全图;连锁富集区插旗成本放大、死 RAP 态碎片区趋零,条件性对冲见 OQ2);挖已插旗格须先拔旗(EC11) |
|
||||
| P4 "地牢氛围" | "边缘探索免费" | 小人移动免费、挖/旗限 8 向相邻——服务"边缘探索"的地牢感而非经济杠杆,移动成本不是调参对象;点击摩擦护栏归 A2/D1 观测(每消耗 1 AP ≤ 2 次点击) |
|
||||
负责:
|
||||
|
||||
参考感受:预算把节奏从"点完为止"改为"每轮取舍";价目均匀分布是有意的 MVP 简化,异质性钩子(地形成本修饰)已为 A4 预留(Rule 2);无 chord(双击快开)是有意偏离经典扫雷——保护"每格兑现都花 AP"的预算意义,正确标雷缺一键兑现节拍已登记 CD 创意风险 #3(与 #2 高光缺失合并归 B1/B4)。
|
||||
- AP 资源账本独占:`try_spend` 为全项目唯一扣减入口——余量检查、扣减、结束仲裁在单一原子事务内完成,禁双重折算
|
||||
- 统一价目(挖/插旗/拔旗各 1 AP;移动/连锁 0 成本冻结)
|
||||
- 三结束路径仲裁(cleared > stopped > ap_exhausted)与 round_end 停手路径直发
|
||||
- RAP 池生命周期(战斗域:停手进账、刷新支出、战斗末清零)
|
||||
- `last_round_end` 单槽只读记录
|
||||
- F1 五条款下游经济契约(登记为 B1 GDD 验收项)
|
||||
- ActionEconomyTable 回填 owner(表本体归 D2)
|
||||
|
||||
## 全局流程
|
||||
不负责:
|
||||
|
||||
### 轮次生命周期(AP 支出与轮次状态流转)
|
||||
- 棋盘面规则与执行(A2)
|
||||
- 轮次编排与结算(B1)
|
||||
- 奖励内容与档位(B4)
|
||||
- 数值表本体与 ConfigDB 读取机制(D2 承载,A3 仅回填)
|
||||
- 呈现(D1)
|
||||
- 教学(D5)
|
||||
- 任何随机机制(本系统零随机、无 RNG 流)
|
||||
|
||||
## 核心循环
|
||||
|
||||
```
|
||||
notify_round_start() [B1 编排;战斗首轮要求当前 Idle]
|
||||
@@ -60,7 +66,7 @@ Waiting
|
||||
│ battle_over → Idle(RAP 清零 · ap=0;下一场战斗由 B1 发 round_start 重启)
|
||||
```
|
||||
|
||||
### 出口分发
|
||||
出口分发:
|
||||
|
||||
| 出口 | path_tag | continuation_hint | 剩余 AP / RAP | 换图 |
|
||||
|---|---|---|---|---|
|
||||
@@ -72,30 +78,33 @@ Waiting
|
||||
|
||||
## 核心规则
|
||||
|
||||
> 每条规则两段:**人话**(作用于哪个系统、什么情况下、谁触发、触发后发生什么;效果与情况用枚举表)→ **举证**(计算方法/公式;纯流程规则明写"无计算")。
|
||||
### 预算与价目
|
||||
|
||||
#### 规则 1:新一轮开始行动点重置发满,上轮剩余清零、不结转
|
||||
**人话**:这条管每轮的资源发牌,由结算编排方开轮触发。轮次开始的一瞬,A3 把行动点写满 8(表值 `ap_per_round`)——上一轮用剩多少都清零,不累积、不结转,随后进入挖掘期。唯一跨轮带走的资源是 RAP 池——战斗域里停手攒下的换图资金,开轮时原样保留、不做任何加减。
|
||||
规则:
|
||||
|
||||
**举证**:无计算(AP 数值读配置表)。字段 `ap_per_round` 见「Tuning Knobs」节 ActionEconomyTable schema;RAP 跨轮保留细则见下方「规则 11 的实现参照——RAP 池规则」;开轮受理与重置断言见 AC-1a/AC-1b。
|
||||
|
||||
#### 规则 2:挖、插旗、拔旗都按同一张价目表扣行动点
|
||||
**人话**:这条管"每个动作花多少":A3 定价、A2 执行,是全项目唯一的消耗口径。玩家在挖掘期的三件付费动作——挖开格、插旗、拔旗——各花 1 行动点,且只能作用于小人 8 向相邻的格子;移动小人与连锁展开免费(逐动作价目见下方实现参照表)。经典扫雷的"双击快开"(chord)被有意去掉——每格兑现都必须花行动点,保护预算的决策意义,由 A2 承载。
|
||||
|
||||
**举证**:无计算(价目数值全部来自配置表)。逐动作价目见下方「规则 2 的实现参照——统一价目表」;成本字段与默认值见「Tuning Knobs」节;挪旗合计 2 行动点的边界见 EC3/EC7;无 chord 的取舍依据见「体验锚点」节末参考感受行。
|
||||
|
||||
### 规则 2 的实现参照——统一价目表
|
||||
1. [B1]在[轮次开始]经 `notify_round_start()` 触发时,A3 把 AP 硬重置为表值 `ap_per_round`(默认 8)——上轮剩余不累积、不结转;RAP 池开轮时原样保留,不做任何加减。
|
||||
2. [玩家]在[挖掘期]执行挖开格/插旗/拔旗各花 1 AP(表值),且只能作用于小人 8 向相邻的格子;移动小人与连锁展开免费;A3 定价、A2 执行,是全项目唯一消耗口径;不做经典扫雷的双击快开(chord)——每格兑现都必须花 AP。
|
||||
|
||||
| 动作 | 消耗 | 要点 |
|
||||
|---|---|---|
|
||||
| 挖开格 | `dig_ap_cost` = 1 AP | 仅限小人 8 向相邻格;若触发连锁展开(flood fill),连锁部分免费(原型 v2 定稿:推理的放大器),连锁开的格计入清图进度 |
|
||||
| 插旗 | `flag_place_ap_cost` = 1 AP | 仅限相邻格(原型 v3 统一行动经济);无旗子实物资源——旗为棋盘标记,数量无上限 |
|
||||
| 拔旗 | `flag_pull_ap_cost` = 1 AP | 仅限相邻格(与挖/插对称);移除棋盘标记、无返还物(无口袋旗可返);OQ2 挂原型补丁复核 |
|
||||
| 挖开格 | `dig_ap_cost` = 1 AP | 仅限小人 8 向相邻格;触发连锁展开(flood fill)时连锁部分免费,连锁开的格计入清图进度 |
|
||||
| 插旗 | `flag_place_ap_cost` = 1 AP | 仅限相邻格;无旗子实物资源——旗为棋盘标记,数量无上限 |
|
||||
| 拔旗 | `flag_pull_ap_cost` = 1 AP | 仅限相邻格(与挖/插对称);移除棋盘标记、无返还物;OQ2 挂原型补丁复核 |
|
||||
| 移动小人 | 0(冻结) | 点击已开格移动,BFS 限已探明区(A2 承载);免费服务 P4 探索氛围,非经济杠杆、调参豁免 |
|
||||
| 连锁展开 | 0(冻结) | 免费;连锁开的格计入清图进度 |
|
||||
|
||||
#### 规则 3:行动点用到 0 的瞬间轮次就结束,几种结束同时发生时清图优先
|
||||
**人话**:这条管"轮次什么时候算完、几种结束方式打架时听谁的"。行动点扣到 0 的那一瞬间,轮次立即以"耗尽"结束——不存在 0 行动点还能操作的窗口。每个动作都在账本事务内结算并判定一次结束;多种结束方式同时成立时(比如最后 1 行动点挖开最后一块安全格),按固定优先级只裁出一个赢家——与哪种情况先到达无关,也禁止把同一份剩余行动点按两条路径重复折算。
|
||||
设计意图:价目均匀分布是有意的 MVP 简化,异质性钩子(地形成本修饰)已为 A4 预留。
|
||||
|
||||
### 轮次结束与仲裁
|
||||
|
||||
规则:
|
||||
|
||||
1. [A3]在[AP 扣到 0 的瞬间]立即以 ap_exhausted 结束轮次——不存在 0 AP 还能操作的窗口;每个动作都在账本事务内结算并判定一次结束;多种结束方式同时成立时按固定优先级只裁出一个赢家,与到达顺序无关;不把同一份剩余 AP 按两条路径重复折算。
|
||||
2. [玩家]在[挖掘期任意时刻]可主动停手——输入层直调 A3、不经棋盘;停手立即以 stopped 结束本轮,剩余 AP 按 1:1 原值转存 RAP 池、无乘数加成;图没开完下轮继续在同一张图上挖;停手不是战斗收入流,是纯风险管理工具。
|
||||
3. [A3]在[全部安全格开完(含连锁展开开的格)]时以 cleared 结束轮次——剩余 AP 直接清零,不折算、不进 RAP 池,同时发放清图奖励;奖励发什么、发多少归 B4,且 B4 奖励表须预留按图类型(A1 biome/tag 上下文)分支的结构位;A3 只上报"清图了"这一事实,不拥有奖励内容、不感知图类型;清图后下一轮换新图。
|
||||
4. [A3/A2]在[轮次结束时]只向 B1 输出一条两字段消息——怎么结束的 + 下轮用不用换图的提示(仅为编排建议);权威的换图指令是 B1 之后回发的 `next_round_mode`;消息不夹带任何折算数值——进结算明细的收益全部是具体战斗效果,来源归因标注由 B1 承担。
|
||||
|
||||
同时成立时的仲裁(固定常量序,单事务一次判定):
|
||||
|
||||
| 同时成立时 | 优先级 | 胜出后发生什么 |
|
||||
|---|---|---|
|
||||
@@ -103,49 +112,31 @@ Waiting
|
||||
| 停手(stopped) | 居中 | 剩余行动点 1:1 存入 RAP 池,下轮同图 |
|
||||
| 行动点耗尽(ap_exhausted) | 最低 | 剩余行动点恒为 0(实现层断言,违反即致命),下轮同图 |
|
||||
|
||||
**举证**:无计算(优先级为固定常量序 `cleared > stopped > ap_exhausted`,单事务一次判定)。同帧/同批次多路径竞争的仲裁语义见 EC4("先停后挖"腿 deferral 至 A2 集成测试);最后 1 行动点同时清图与耗尽时清图胜出见 EC10;验收 AC-4/AC-4b/AC-8。
|
||||
### 配置纪律与效果直兑
|
||||
|
||||
#### 规则 4:玩家随时可以主动停手,剩余行动点原值存进 RAP 池
|
||||
**人话**:这条管玩家的提前收工:挖掘期任意时刻,玩家可以直接停手——输入层直调 A3,不经棋盘。停手立即结束本轮(结束方式标记 `stopped`),剩余行动点按 1:1 原值转存 RAP 池,没有乘数加成;停手不是战斗收入流,是纯风险管理工具——"这轮我不想赌"的体面出口。停手时图没开完也没关系,下一轮继续在同一张图上挖。
|
||||
规则:
|
||||
|
||||
**举证**:无计算(1:1 转存,无乘数、无公式)。停手与挖掘期刷新的逐维差异见下方「规则 4 与规则 11 的实现参照——停手与挖掘期刷新对照」;满 AP 停手恰可达一次刷新的基线节拍及其退化环分析见 EC6;验收 AC-5/AC-15。
|
||||
1. [A3]把[全部玩法数值]存 D2 的 `ActionEconomyTable` 配置表、经 ConfigDB 类型化读取——每轮发多少 AP、每个动作花多少、刷新门槛多高、每轮能刷几次全部入表;代码零玩法数值字面量:改数值=改表回填,不动代码;表不变,行为逐位相同;本系统零随机、无 RNG 流。
|
||||
2. [A3]把[全部扫雷收益]以战斗效果直兑——挖到安全格给主角上 buff、标中旗给怪物上 debuff、踩雷给敌方上增益、清图发奖励,直接进轮次结算明细;不存在抽象点数、不存在折算乘数,折算公式根本不存在;对账契约 = 「经济契约与数值」节 F1 五条款,约束效果侧(结算系统),登记为 B1 GDD 验收项。
|
||||
|
||||
#### 规则 5:安全格全部开完即清图——剩余行动点清零,另发清图奖励
|
||||
**人话**:这条管"把图开穿"的时刻:全部安全格开完(含连锁展开开的格),轮次以"清图"结束——剩余行动点直接清零,不折算、不进 RAP 池;同时发放清图奖励。奖励发什么、发多少归 B4 定,且是差异化插槽——B4 的奖励表须预留按图类型(A1 的 biome/tag 上下文)分支的结构位;A3 只上报"清图了"这一事实,不拥有奖励内容、不感知图类型。清图后下一轮换一张新图。
|
||||
### 旗与账本入口
|
||||
|
||||
**举证**:无本地计算——奖励当量归 B4 定档,量级锚与下界见「数值结论与推导」节 F1 条款 4;奖励差异化插槽的上下文约束见 OQ6;连锁开完全图同样触发清图见 EC5;验收 AC-6/AC-6b。
|
||||
规则:
|
||||
|
||||
#### 规则 6:轮次怎么结束只向外报一条消息,结算里不夹带任何折算数值
|
||||
**人话**:这条管轮次结束时对外的"发言":三种结束路径都只向结算编排方(B1)输出一条两字段消息——"怎么结束的 + 下轮用不用换图的提示"。这只是编排提示;权威的换图指令是 B1 之后回发的 `next_round_mode`。除此之外,消息不夹带任何折算数值——进结算明细的收益全部是具体战斗效果(主角 buff / 怪物 debuff / 清图奖励),来源归因标注由 B1 承担。
|
||||
1. [玩家]插旗即在棋盘上放置一面标记——旗没有口袋/背包实物资源,归棋盘系统(A2)所有;跨轮保留、随图存续,清图或刷新换图时随之消失;数量无上限,稀缺性全由"插旗要花 AP"承载:插旗 = 1 AP + 棋盘多一面标记,拔旗反向(标记移除、无返还物);标中旗的收益兑付受五条硬约束(下表)。
|
||||
2. [A2]作为[挖/插/拔的调用方]只判棋盘面合法性(相邻、目标格状态、无双击快开)并执行棋盘效果,必须经 A3 账本扣费,自己无权扣资源;余量检查、扣减、结束仲裁在账本同一事务内原子完成;round_end 消息有两个合法发射源(下表)。
|
||||
|
||||
| 结束方式 | 发出的换图提示 | B1 权威回发(next_round_mode) |
|
||||
|---|---|---|
|
||||
| 清图 | new_board(建议换新图) | new_board——仅清图轮可换新图 |
|
||||
| 停手 | same_board(建议同图续轮) | 恒 same_board(回发违约即 fail-fast) |
|
||||
| 行动点耗尽 | same_board(建议同图续轮) | 恒 same_board(回发违约即 fail-fast) |
|
||||
|
||||
**举证**:无计算。字段取值与产出点见「枚举」节 path_tag / continuation_hint 行;权威回发信号的消费位置见规则 9 与「状态」节 Waiting 行;结算明细归因标注义务见「呈现与 UI 契约」节第 5 条;验收 AC-4b/AC-5/AC-6。
|
||||
|
||||
#### 规则 7:全部数值存在配置表里,代码不写死一个数、不掷一次骰子
|
||||
**人话**:这条管数字的存放纪律:每轮发多少行动点、每个动作花多少、刷新门槛多高、每轮能刷几次——所有玩法数值都存在 D2 的 `ActionEconomyTable` 配置表里,经 ConfigDB 类型化读取。A3 的代码零玩法数值字面量:改数值=改表回填,不动代码;表不变,行为逐位相同。本系统也不涉及任何随机数——没有 RNG 流。
|
||||
|
||||
**举证**:无计算(本条是存放纪律,非数值规则)。字段清单、类型域与默认值见「Tuning Knobs」节 ActionEconomyTable schema;零字面量纪律依据 D2 Rule 1;零随机的行为级验收(同输入序列重放逐位相同)见 AC-17;表值与 registry 一致性见 AC-10a。
|
||||
|
||||
#### 规则 8:旗是棋盘上的标记不是背包道具,每颗雷的旗收益只能兑一次
|
||||
**人话**:这条管旗子的形态与兑付资格:旗没有"口袋/背包"这类实物资源——插上去就是棋盘上的一面标记,归棋盘系统(A2)所有;跨轮保留、随图存续,清图或刷新换图时随之消失。数量无上限,稀缺性全由"插旗要花行动点"承载:插旗=1 行动点+棋盘多一面标记,拔旗反向(标记移除)。标中旗的收益兑付有五条硬约束:
|
||||
标中旗兑付硬约束:
|
||||
|
||||
| 兑付硬约束 | 意思 |
|
||||
|---|---|
|
||||
| 兑付一次性 | 每颗雷在本次战斗内至多兑付一次,资格随首次兑付消费 |
|
||||
| 当轮结算 | 旗的放置实例只是当轮结算的兑付载体,不囤积到以后 |
|
||||
| 资格以雷格实例为键 | 认雷不认旗——拔旗重插同一雷格,不恢复已消费的资格(堵死每轮 2 行动点的重插农场) |
|
||||
| 资格以雷格实例为键 | 认雷不认旗——拔旗重插同一雷格,不恢复已消费的资格(堵死每轮 2 AP 的重插农场) |
|
||||
| 禁止逐轮重复兑付 | 同一颗雷的收益不会逐轮反复发 |
|
||||
| 换图资格重置 | 换图后新图的雷是新实例,资格自然重置 |
|
||||
|
||||
**举证**:无计算。兑付硬约束的定稿依据见 OQ5(开放悬案节第 5 条);挖已插旗格须先拔旗见 EC11;同轮插了又拔、挪旗的消耗见 EC3/EC7;旧板旗随挖掘期刷新失效(零兑付)见下方「规则 11 的实现参照——RAP 池规则」"旧板旗"行;验收 AC-3a/AC-3b/AC-16。
|
||||
|
||||
#### 规则 9:扣行动点只认账本一个入口,"轮次结束"消息有两个合法发送者
|
||||
**人话**:这条管"谁有权扣行动点、谁有权宣布轮次结束"。全项目唯一的扣减入口是 A3 的账本接口——余量检查、扣减、结束仲裁在同一次事务内原子完成。棋盘系统(A2)只判棋盘面合法性(相邻、目标格状态、无双击快开)并执行棋盘效果:它是挖/插/拔的调用方,必须经账本扣费,自己无权扣资源。"轮次结束"消息有两个合法发射源,逐项见下表。
|
||||
round_end 合法发射源:
|
||||
|
||||
| 事项 | 责任方 | 运作方式 |
|
||||
|---|---|---|
|
||||
@@ -154,34 +145,28 @@ Waiting
|
||||
| `last_round_end` 只读记录 | A3 | 单槽只读记录;测试/审计断言落点,同时是 A2 组包 round_end payload 的合法数据源 |
|
||||
| Waiting 出口 | A3 | 消费 B1 回发的 `next_round_mode ∈ {same_board, new_board}` 与 `battle_over` 信号 |
|
||||
|
||||
**举证**:无计算。唯一扣减入口签名 `try_spend(action_kind) -> bool` 与事务边界见「全局流程」节轮次生命周期字符画与「状态」节状态机;账本资源面拒绝(AP 不足)见 EC2;Waiting 相位非法拒绝见 AC-9;停手 payload 同构与"恰一条输出"验收见 AC-5/AC-8;同值双发射不可区分的测试口径见「验收标准」节测试口径表 last_round_end 单槽行。
|
||||
### RAP 池
|
||||
|
||||
#### 规则 10:扫雷收益全部直接兑成战斗效果,没有中间货币
|
||||
**人话**:这条管"扫雷赚的东西以什么形式到手":全部收益——挖到安全格给主角上 buff、标中旗给怪物上 debuff、踩雷给敌方上增益、清图发奖励——都以战斗效果直兑,直接进轮次结算明细;不存在抽象点数、不存在折算乘数,折算公式根本不存在。这套对账契约共五条款,约束效果侧(结算系统),登记为 B1 GDD 验收项。
|
||||
规则:
|
||||
|
||||
**举证**:五条款全文(单一当量对照 / 标中旗锚 / 挖掘风险不等式 / 清图奖励 / 弃图支配性)、推导与公式见「数值结论与推导」节 F1;playtest 复核归 OQ3、当量归一归 OQ1;systems-index 门禁 ①–⑤ 登记。
|
||||
1. [玩家]经[D1 刷新入口]在[挖掘期(Active 相位)]发起刷新,B1 `refresh_board` 挖掘期刷新编排内调用 `request_refresh() -> bool`,账本受理——RAP 池唯一进账 = 停手时剩余 AP 的 1:1 转存,唯一支出 = 刷新雷图;战斗域内跨轮次、跨扫雷图一直保留,战斗结束(进入 Idle)立刻清零;每轮最多刷 2 次;禁止"攒满就自动刷";RAP 不折算、不兑付任何战斗收益——纯风险退出资源。
|
||||
|
||||
#### 规则 11:RAP 池只从停手进账、只为换新图花钱,战斗结束就清零
|
||||
**人话**:这条管"停手攒下来的钱":RAP 池的唯一进账是停手时剩余行动点的 1:1 转存;它属于整场战斗——战斗内跨轮次、跨扫雷图一直保留,战斗结束(进入 Idle)立刻清零。唯一花法是挖掘期换一张新图继续挖:玩家自己决定、经刷新入口发起、账本受理,每轮最多刷 2 次,禁止"攒满就自动刷"。RAP 不折算、不兑付任何战斗收益——纯风险退出资源。
|
||||
|
||||
**举证**:无独立公式(进账 1:1、扣费门槛与每轮上限均为配置表值/常量)。逐维细则、默认值与边界见下方「规则 11 的实现参照——RAP 池规则」;停手与刷新的逐维对照见下方「规则 4 与规则 11 的实现参照——停手与挖掘期刷新对照」;RAP 不足拒绝见 EC13、超限拒绝见 EC15、战斗末清零可见反馈见「呈现与 UI 契约」节第 3 条;验收 AC-5b/AC-11/AC-15。
|
||||
|
||||
### 规则 11 的实现参照——RAP 池规则
|
||||
RAP 池细则:
|
||||
|
||||
| 维度 | 细则 |
|
||||
|---|---|
|
||||
| 来源 | 唯一来源 = 停手转存(1:1,无乘数);清图与 ap_exhausted 的剩余 AP 均不入 RAP |
|
||||
| 生命周期 | 战斗域:战斗内跨轮次、跨扫雷图累积;`battle_over` 进入 Idle 时清零(每场战斗清零;清零的可见反馈与教学落点见呈现与 UI 契约——防"攒的钱凭空没了"读感);MVP 无 RAP 上限;跨战斗携带为未来选项,若开放须修订本条并登记 D3/C2 持久化归属(OQ7) |
|
||||
| 支出 | 唯一支出 = 刷新雷图;决策主体 = 玩家——经 D1 刷新入口在挖掘期(Active 相位)发起,B1 `refresh_board` 挖掘期刷新编排内调用 `request_refresh() -> bool`;禁止"RAP 满即自动刷" |
|
||||
| 生命周期 | 战斗域:战斗内跨轮次、跨扫雷图累积;`battle_over` 进入 Idle 时清零(每场战斗清零;清零的可见反馈与教学落点见呈现与 UI 契约);MVP 无 RAP 上限;跨战斗携带为未来选项,若开放须修订本条并登记 D3/C2 持久化归属(OQ7) |
|
||||
| 支出 | 唯一支出 = 刷新雷图;决策主体 = 玩家——经 D1 刷新入口在挖掘期(Active 相位)发起,B1 `refresh_board` 编排内调用 `request_refresh() -> bool`;禁止"RAP 满即自动刷" |
|
||||
| 受理与换图 | `rap ≥ rap_refresh_cost`(默认 8)时扣减并当场换新图继续挖——AP 不重置、本轮剩余 AP 保留(A2 装板受理域已同步:Active·仅刷新路径);刷新获得的新图不产生清图奖励(它不是清图);不足则拒绝、状态不变(EC13) |
|
||||
| 每轮上限 | `refresh_cap_per_round`(默认 2)——轮内计数、RoundStart 重置,超限拒绝(EC15);无冷却;每次独立检查 `rap ≥ rap_refresh_cost` 并扣减 |
|
||||
| 旧板旗 | 随旧板失效——零兑付、旗 AP 不返还(与拔旗不返还同族;A2 换图全量重置承载) |
|
||||
| 经济注记 | 刷新价格实际 = rap_refresh_cost + 每轮 2 次上限;挖掘期当场刷新无结算发生——敌方每轮照常结算的时间税不构成刷新本身的隐性成本;OQ3 弃图率/刷新率预警阈值联动复核 |
|
||||
| 收益 | 无战斗收益——RAP 不折算、不兑付任何战斗效果,纯风险退出资源 |
|
||||
|
||||
### 规则 4 与规则 11 的实现参照——停手与挖掘期刷新对照
|
||||
停手与挖掘期刷新对照:
|
||||
|
||||
| 维度 | 停手(规则 4) | 挖掘期刷新(规则 11) |
|
||||
| 维度 | 停手 | 挖掘期刷新 |
|
||||
|---|---|---|
|
||||
| 时点 | Active 任意时刻 | Active(挖掘期) |
|
||||
| 发起 | 玩家输入层直调 A3 | 玩家经 D1 发起,B1 `refresh_board` 编排内调用 |
|
||||
@@ -189,7 +174,9 @@ Waiting
|
||||
| 资源 | RAP += remaining_ap(1:1) | RAP −= rap_refresh_cost(每轮 ≤ 2 次) |
|
||||
| 收益 | 风险退出权(无战斗收益) | 新图(无清图奖励;旧板旗失效零兑付) |
|
||||
|
||||
## 枚举
|
||||
设计意图:停手改产风险退出权而非战斗收入——面对纯盲猜,攒 RAP 换一张新图是"我不赌"的体面出口。
|
||||
|
||||
## 枚举与对外 API
|
||||
|
||||
### 值域封闭枚举(path_tag / 信号 / 动作类型 / 相位)
|
||||
|
||||
@@ -213,25 +200,23 @@ Waiting
|
||||
| request_flag_place | `request_flag_place() -> bool` | 插旗 |
|
||||
| request_flag_pull | `request_flag_pull() -> bool` | 拔旗 |
|
||||
| request_stop | `request_stop() -> bool` | 停手(A3 直发 stopped round_end) |
|
||||
| request_refresh | `request_refresh() -> bool` | 挖掘期刷新(Rule 11) |
|
||||
| request_refresh | `request_refresh() -> bool` | 挖掘期刷新(RAP 池规则) |
|
||||
| notify_settlement_done | `notify_settlement_done(next_round_mode) -> bool` | 记录编排意图(phase 停留 Waiting) |
|
||||
| notify_combat_end | `notify_combat_end() -> bool` | 战斗终结 → Idle、RAP 清零 |
|
||||
|
||||
## 数值结论与推导
|
||||
## 经济契约与数值(F1 downstream_effect_contract)
|
||||
|
||||
### F1 下游经济契约(downstream_effect_contract)
|
||||
|
||||
**结论**:全部扫雷收益以战斗效果直兑(安全格→主角 buff、标中旗→怪物 debuff、踩雷→敌方增益),无抽象点数、无折算乘数——折算公式不存在;契约为对效果侧的五条款,登记为 B1 GDD 验收项(systems-index 门禁 ①–⑤);playtest 复核归 OQ3,当量归一归 OQ1。
|
||||
|
||||
#### 推导
|
||||
**结论**:全部扫雷收益以战斗效果直兑(安全格→主角 buff、标中旗→怪物 debuff、踩雷→敌方增益),无抽象点数、无折算乘数——折算公式不存在;契约为对效果侧的五条款,登记为 B1 GDD 验收项(systems-index 门禁 ①–⑤);playtest 复核归 OQ3,当量归一归 OQ1。推导与数值锚定论证见 analysis 件「F1 推导论证与数值锚定」节。
|
||||
|
||||
| # | 条款 | 内容 | 闭合 owner |
|
||||
|---|---|---|---|
|
||||
| 1 | 单一当量对照条款 | B1 须出效果档位对照表(1 最低档安全格 buff = ? 当量;debuff/清图奖励/敌方增益均对照归一),对全部收益来源单一换算——分源改率 = 契约失效,须回本 GDD 重议;归 OQ1(注意与 OQ6 清图奖励插槽区分) | B1 |
|
||||
| 2 | 标中旗锚条款 | 标中旗的怪物 debuff 档位当量必须严格大于最低档安全格 buff 当量——否则插旗在最优情形下也只是打平,P3 旗循环经济空心;且对照基准须为连锁放大的边际挖掘收益(单 AP 平均挖掘当量,含连锁期望放大)——只对最低档比较会使旗理性萎缩到碎片区;每战标中旗总吞吐(N 旗 = N debuff)无单档上限可依恃,由 B1 按条款 1 对照表对账;插旗挤占清图进度的边际轮成本由 B4 定档时核算,或在其 GDD 声明 MVP 忽略并给理由 | B4 表设计 + B1 对照验收 |
|
||||
| 3 | 挖掘风险条款 | 挖掘决策 EV 健康不等式(见公式):两端分别锚定 A1 可推理率生成参数(P1 下限,决定 P(安全) 的玩家可达上界)与 B2 惩罚上限表值(上限值登记为 B2 GDD 验收项);B1 为单一闭合对账 owner(A1/B2 供给锚值,B1 签字验收),登记为 B1 GDD 强制检查点;P1 支柱要求 A1 可推理率使玩家能推高 P(安全)——本条款是"可推理率"的经济侧验收形态(可判定谓词) | B1 |
|
||||
| 2 | 标中旗锚条款 | 标中旗的怪物 debuff 档位当量必须严格大于最低档安全格 buff 当量;对照基准须为连锁放大的边际挖掘收益(单 AP 平均挖掘当量,含连锁期望放大);每战标中旗总吞吐(N 旗 = N debuff)无单档上限可依恃,由 B1 按条款 1 对照表对账;插旗挤占清图进度的边际轮成本由 B4 定档时核算,或在其 GDD 声明 MVP 忽略并给理由 | B4 表设计 + B1 对照验收 |
|
||||
| 3 | 挖掘风险条款 | 挖掘决策 EV 健康不等式(见公式):两端分别锚定 A1 可推理率生成参数(P1 下限)与 B2 惩罚上限表值(上限值登记为 B2 GDD 验收项);B1 为单一闭合对账 owner(A1/B2 供给锚值,B1 签字验收),登记为 B1 GDD 强制检查点 | B1 |
|
||||
| 4 | 清图奖励条款 | 清图奖励 > 0,量级与差异化分支归 B4(输入含 A1 图类型上下文) | B4 |
|
||||
| 5 | 清图 vs 弃图刷新支配性条款 | 清图奖励当量下界须使"推到底清图"的期望当量 ≥ "确定格挖完即弃图刷新"的期望当量(见公式)——否则每图最优解退化为"捞完确定格就弃",清图高光节拍、B4 差异化插槽、game-concept"图完成"循环全部空心;该环强度与 A1 可推理率反向耦合——可推理率越低(迷雾/终局 50/50 越多),弃图越优,玩家对 P1 失败的理性回应会反过来饿死清图内容,故本条款是 P1 失败模式的经济对冲,与条款 3 共同登记 B1 强制检查点 | B1 |
|
||||
| 5 | 清图 vs 弃图刷新支配性条款 | 清图奖励当量下界须使"推到底清图"的期望当量 ≥ "确定格挖完即弃图刷新"的期望当量(见公式);该环强度与 A1 可推理率反向耦合;与条款 3 共同登记 B1 强制检查点 | B1 |
|
||||
|
||||
### 公式与验算
|
||||
|
||||
```
|
||||
条款 3(挖掘决策 EV 健康不等式):
|
||||
@@ -246,7 +231,7 @@ Waiting
|
||||
inputs —— B4 的 C、B2 惩罚上限、A1 雷密度/可推理率、B1 结算强度(B1 闭合对账)
|
||||
```
|
||||
|
||||
**Variables:**
|
||||
Variables:
|
||||
|
||||
| 变量 | 含义 | 锚定来源 |
|
||||
|---|---|---|
|
||||
@@ -256,6 +241,8 @@ Waiting
|
||||
| C | 清图奖励当量 | B4(条款 4 差异化插槽) |
|
||||
| Δ轮数 | "推到底清图"与"确定格挖完即弃图刷新"的轮数差 | A1 雷密度/可推理率 × B1 结算强度 |
|
||||
|
||||
验算项(provisional):
|
||||
|
||||
| 验算项 | provisional 值 | 刷新时点 |
|
||||
|---|---|---|
|
||||
| 条款 2 对照基准 | 下限 1:1(单 AP 平均挖掘当量,含连锁期望放大) | B4/B1 定稿校准 |
|
||||
@@ -263,16 +250,16 @@ Waiting
|
||||
| 条款 4 清图奖励 | +10 临时锚(B4 插槽的 provisional 参考) | 量级归 B4 |
|
||||
| 条款 5 支配性 | +10 锚对默认 8 AP 图形况粗验通过 | 正式锚随 B4/B2/B1 表值定稿 |
|
||||
|
||||
## 状态
|
||||
## 状态机
|
||||
|
||||
轮次内资源状态机(A3 资源侧视图;A3 只暴露资源余量、`last_round_end` 并消费 B1 信号):
|
||||
轮次内资源状态机——A3 资源侧视图:只暴露资源余量与 `last_round_end`,并消费 B1 信号:
|
||||
|
||||
| 状态 | 进入条件 | 行为/出口 |
|
||||
|---|---|---|
|
||||
| RoundStart(瞬态) | `notify_round_start()`(B1 编排;战斗首轮要求当前 Idle) | AP←8(硬重置);RAP 不动(跨轮保留)→ Active |
|
||||
| Active | 预算就绪 | 接受耗 AP 动作并经 `try_spend` 原子扣减;每个动作结算事务内按优先级仲裁(cleared > stopped > ap_exhausted)→ RoundEnd(胜出 path_tag);挖掘期刷新在此相位受理(Rule 11) |
|
||||
| Active | 预算就绪 | 接受耗 AP 动作并经 `try_spend` 原子扣减;每个动作结算事务内按优先级仲裁(cleared > stopped > ap_exhausted)→ RoundEnd(胜出 path_tag);挖掘期刷新在此相位受理 |
|
||||
| RoundEnd(瞬态) | 任一结束路径胜出 | 停手:RAP += remaining_ap(1:1);ap_exhausted:不变式断言 remaining_ap=0,违反即致命;清图:剩余 AP 清零。写 `last_round_end` → Waiting |
|
||||
| Waiting | 结算完成前不接受 round_start(AC-14) | 消费 B1 信号:`next_round_mode=same_board` → 下轮 RoundStart(同图——stopped/ap_exhausted 轮恒 same_board);`next_round_mode=new_board` → 下轮 RoundStart(新图,A1 经 B1 编排生成——仅 cleared 轮;RAP 保留);`battle_over` → Idle(RAP 清零)。request_refresh 不在此相位受理(刷新决策在挖掘期,Rule 11) |
|
||||
| Waiting | 结算完成前不接受 round_start(AC-14) | 消费 B1 信号:`next_round_mode=same_board` → 下轮 RoundStart(同图——stopped/ap_exhausted 轮恒 same_board);`next_round_mode=new_board` → 下轮 RoundStart(新图,A1 经 B1 编排生成——仅 cleared 轮;RAP 保留);`battle_over` → Idle(RAP 清零)。request_refresh 不在此相位受理 |
|
||||
| Idle | 战斗终结 | 不响应任何动作请求;RAP=0、ap=0;下一场战斗由 B1 发 round_start 重启(唯一出口) |
|
||||
|
||||
- **不变式**:可观测相位域 = {Idle, Active, Waiting}——RoundStart 与 RoundEnd 均为单事务内瞬态,不可观测、不作为任何测试 GIVEN;ap_exhausted 轮恒 remaining_ap=0;RAP 只经停手增加、只经刷新扣减与 battle_over 清零;编排权威序列以 B1 轮次生命周期编排章节为准。
|
||||
@@ -285,7 +272,7 @@ Waiting
|
||||
|---|---|---|---|
|
||||
| `notify_round_start` | 受理(RoundStart) | 拒绝 | 拒绝(settlement 消费后受理——AC-14 门) |
|
||||
| `request_dig` / `request_flag_place` / `request_flag_pull` / `request_stop` | 拒绝 | 受理(经 `try_spend`) | 拒绝 |
|
||||
| `request_refresh` | 拒绝 | 受理(Rule 11——挖掘期当场换图) | 拒绝 |
|
||||
| `request_refresh` | 拒绝 | 受理(挖掘期当场换图) | 拒绝 |
|
||||
| `notify_settlement_done` | 拒绝 | 拒绝 | 受理(重复调用拒绝) |
|
||||
| `notify_combat_end` | 拒绝 | 拒绝 | 受理(→ Idle,RAP 清零) |
|
||||
|
||||
@@ -293,56 +280,21 @@ Waiting
|
||||
|
||||
| 条件 | 行为 | 依据 |
|
||||
|---|---|---|
|
||||
| EC1 AP=0 后仍有动作请求 | 全部拒绝(返回 false)——轮次已在归 0 瞬间结束,不存在 0-AP 窗口 | Rule 3 |
|
||||
| EC2 AP 不足以支付动作(含插旗/拔旗——旗无实物资源,拒绝只看 AP) | 拒绝、状态不变;`last_round_end` 不变 | Rule 9 / AC-7 |
|
||||
| EC3 玩家拔旗再插他格(挪旗) | 合法——插+拔合计耗 2 AP(插 1 + 拔 1,默认值下);相对"直接改插他格"多耗的 1 AP(拔旗)即"防免费重排"的有意代价;旗标记的移除/重建为 A2 棋盘操作,A3 只见 AP −2 | Rule 2 / AC-16 |
|
||||
| EC4 同帧/同批次多结束路径竞争 | 按 Rule 3 总仲裁 cleared > stopped > ap_exhausted,与到达顺序无关、单次判定;"先停后挖"腿的批次语义在 A3 冒烟 API 上不可构造(同步单调用无事务批次概念)——该腿显式 deferral 至 A2 集成测试承载(systems-index 门禁登记,非静默豁免);A3 冒烟承载"先挖后停"腿(AC-8) | Rule 3 / AC-8 |
|
||||
| EC5 连锁展开开完全图 | 连锁免费;清图判定以"安全格全部开完"为准(含连锁开的格)→ 正常触发 cleared;RoundStart 的初始 3×3 自动展开同理(退化小图属既有行为,不设独立分支);退化图刷清图奖励的钓鱼风险登记为 A1/B1 下游约束——最小安全格数下限归 A1 生成参数验收;初始展开的定义落点(免费、计入清图进度、无奖励)归 A2 GDD 承载,本 GDD 仅经 `chain_size`/`clears_map` 参数引用其结果 | Rule 2 / AC-6b |
|
||||
| EC6 满 AP 停手 | 合法——RAP +8(= rap_refresh_cost,恰好可达一刷,Rule 11 基线节拍,有意;该节拍与 OQ3"纯停手轮占比"预警同源,调参时联动评估)。诚实声明(形态限定版):① 纯停手零挖掘环(停→刷→停)零战斗进账,唯一代价是敌方每轮照常结算(时间税自惩)——该退化形态结构自惩成立;② 但理性玩家的真实风险环是"挖完全部确定格 → 不确定即停 → 攒满刷新":该环有真实战斗进账、零踩雷风险,刹车只有三个——清图奖励弃失(下界由 F1 条款 5 守住)、8 RAP 成本、时间税;本条不声称该环"病灶不存在",其健康性由 F1 条款 5(支配性不等式)+ OQ3 弃图率/完成度指标守门 | Rule 4 / F1 条款 5 / OQ3 |
|
||||
| EC7 同轮内插旗后又拔旗 | AP 合计消耗 2(插 1 + 拔 1,默认值下);旗标记由 A2 移除,A3 无旗状态可返 | Rule 2 |
|
||||
| EC1 AP=0 后仍有动作请求 | 全部拒绝(返回 false)——轮次已在归 0 瞬间结束,不存在 0-AP 窗口 | 轮次结束与仲裁 |
|
||||
| EC2 AP 不足以支付动作(含插旗/拔旗——旗无实物资源,拒绝只看 AP) | 拒绝、状态不变;`last_round_end` 不变 | 旗与账本入口 / AC-7 |
|
||||
| EC3 玩家拔旗再插他格(挪旗) | 合法——插+拔合计耗 2 AP(插 1 + 拔 1,默认值下);相对"直接改插他格"多耗的 1 AP(拔旗)即"防免费重排"的有意代价;旗标记的移除/重建为 A2 棋盘操作,A3 只见 AP −2 | 预算与价目 / AC-16 |
|
||||
| EC4 同帧/同批次多结束路径竞争 | 按总仲裁 cleared > stopped > ap_exhausted,与到达顺序无关、单次判定;"先停后挖"腿的批次语义在 A3 冒烟 API 上不可构造(同步单调用无事务批次概念)——该腿显式 deferral 至 A2 集成测试承载(systems-index 门禁登记,非静默豁免);A3 冒烟承载"先挖后停"腿(AC-8) | 轮次结束与仲裁 / AC-8 |
|
||||
| EC5 连锁展开开完全图 | 连锁免费;清图判定以"安全格全部开完"为准(含连锁开的格)→ 正常触发 cleared;RoundStart 的初始 3×3 自动展开同理(退化小图属既有行为,不设独立分支);退化图刷清图奖励的钓鱼风险登记为 A1/B1 下游约束——最小安全格数下限归 A1 生成参数验收;初始展开的定义落点(免费、计入清图进度、无奖励)归 A2 GDD 承载,本 GDD 仅经 `chain_size`/`clears_map` 参数引用其结果 | 预算与价目 / AC-6b |
|
||||
| EC6 满 AP 停手 | 合法——RAP +8(= rap_refresh_cost,恰好可达一刷,RAP 池基线节拍,有意;该节拍与 OQ3"纯停手轮占比"预警同源,调参时联动评估);退化环健康性由 F1 条款 5(支配性不等式)+ OQ3 弃图率/完成度指标守门——诚实声明全文见 analysis 件「停手与刷新」节 | RAP 池 / F1 条款 5 / OQ3 |
|
||||
| EC7 同轮内插旗后又拔旗 | AP 合计消耗 2(插 1 + 拔 1,默认值下);旗标记由 A2 移除,A3 无旗状态可返 | 预算与价目 |
|
||||
| EC8 战斗最后一轮的收益兑现 | 敌人已全灭时 B1 结算先判胜,当轮 buff/debuff/清图奖励是否兑现 = B1 判定次序域,A3 无断言义务(out-of-scope);A3 义务仅为每轮无条件输出一条 `(path_tag, continuation_hint)` | B1 域 |
|
||||
| EC9 跨轮/跨图资源携带 | RAP 是唯一跨轮携带量(战斗域,跨图也保留);停手不是战斗资源机制——无复利问题;AP 腿每轮硬重置;旗标记随图存续(A2 域);RAP 战斗结束清零(AC-11) | Rule 1 / Rule 11 / AC-11 |
|
||||
| EC10 最后 1 AP 挖开最后安全格 | cleared 与 ap_exhausted 同时成立 → 清图胜出:输出 `(cleared, new_board)`、剩余 AP 清零 + 清图奖励 + 换图,ap_exhausted 不触发——防"耗尽优先"实现把清图高光结算为最差结局、训练玩家永远留最后一格停手 | Rule 3 / AC-4b |
|
||||
| EC9 跨轮/跨图资源携带 | RAP 是唯一跨轮携带量(战斗域,跨图也保留);停手不是战斗资源机制——无复利问题;AP 腿每轮硬重置;旗标记随图存续(A2 域);RAP 战斗结束清零(AC-11) | 预算与价目 / RAP 池 / AC-11 |
|
||||
| EC10 最后 1 AP 挖开最后安全格 | cleared 与 ap_exhausted 同时成立 → 清图胜出:输出 `(cleared, new_board)`、剩余 AP 清零 + 清图奖励 + 换图,ap_exhausted 不触发——防"耗尽优先"实现把清图高光结算为最差结局、训练玩家永远留最后一格停手 | 轮次结束与仲裁 / AC-4b |
|
||||
| EC11 挖已插旗的格 | 拒绝——须先拔旗(1 AP,默认值下)再挖;旗是"别挖这里"的承诺标记,挖旗格合法化会催生零风险滥用;误标改主意的代价 = 拔旗 1 AP(P3 承诺重量);棋盘面判定归 A2 | A2 域 / AC 前言 out-of-scope |
|
||||
| EC12 RAP 生命周期边界 | MVP 无上限;战斗结束(Idle)强制清零;跨战斗携带若未来开放,须修订本条与 Rule 11 并登记 D3 持久化归属 + C2 冒险域语义(OQ7)——禁止静默超域 | Rule 11 / OQ7 |
|
||||
| EC13 RAP 不足时请求刷新 | `request_refresh()` 返回 false、RAP 不变、相位不变(Active 相位内的资源不足拒绝;与 AC-14 的相位非法拒绝区分——后者附 debug 诊断,两者均为 bool 口径) | Rule 11 / AC-5b |
|
||||
| EC14 清图/耗尽轮次产生剩余 AP | 清图剩余 AP 清零(不入 RAP,Rule 5);ap_exhausted 恒 remaining_ap=0(不变式断言);两路径 RAP 增量恒为 0(AC-4/AC-6 断言);不变式断言的实现载体为 debug 断言(冒烟无 fault-injection 载体;行为级代理 = AC-4 的 rap 不变断言) | Rule 5 / AC-4 / AC-6 |
|
||||
| EC15 同一轮内多次请求刷新 | 受理至每轮上限 `refresh_cap_per_round`(默认 2)为止,超限拒绝(resource_face;轮内计数、RoundStart 重置);每次独立检查 `rap ≥ rap_refresh_cost` 并扣减;无冷却;每次刷新都当场换新图且不产生清图奖励(Rule 11);挖掘期当场刷新无结算发生——OQ3 联动复核 | Rule 11 / AC-5b |
|
||||
|
||||
## 依赖
|
||||
|
||||
**上游**:
|
||||
|
||||
| 系统 | 性质 | 接口要点 |
|
||||
|---|---|---|
|
||||
| D2 | hard | ActionEconomyTable schema 与 ConfigDB 类型化读取;本 GDD 为该表回填 owner(回写台账见对账义务登记表) |
|
||||
| A1 | 间接事实依赖 | 新图生成经 B1 编排调用——A3 不直接消费 A1 接口,仅 Waiting 出口消费其结果信号 |
|
||||
|
||||
无其他玩法上游(Foundation 层)。
|
||||
|
||||
**下游**:
|
||||
|
||||
| 依赖方 | 性质 | 接口 |
|
||||
|---|---|---|
|
||||
| A2 | hard | 账本调用(`try_spend`)+ 价目表执行 + round_end 棋盘路径外发(Rule 9,payload 组包读取 `last_round_end`);A2 校验棋盘面合法性,资源合法性归 A3;旗标记棋盘状态归 A2;EC4"先停后挖"批次仲裁 deferral 至 A2 集成测试(对账义务登记表) |
|
||||
| B1 | hard | RoundEnd 输出 `(path_tag, continuation_hint)`;挖掘期刷新编排(`refresh_board`)内调用 `request_refresh()`(Rule 11);回发 `next_round_mode`/`battle_over`;F1 契约验收项(效果档位对照表单一线性换算) |
|
||||
| B4 | soft | 清图奖励差异化插槽(按图类型分支);标中旗 debuff 档位(OQ5/F1 条款 2 锚约束) |
|
||||
| D1 | soft | AP/RAP HUD 常显;刷新入口与 RAP 清零反馈;非法原因双源呈现 |
|
||||
| D5 | soft | 教学口径来源(含 RAP/刷新/RAP 战斗末清零) |
|
||||
|
||||
### 对账义务登记表
|
||||
|
||||
| 编号 | 内容 | 对侧 | 状态 |
|
||||
|---|---|---|---|
|
||||
| 1 | ActionEconomyTable 首轮回填——值侧四项 + registry 登记 | D2 | 已完成 |
|
||||
| 2 | schema 全字段交付(十字段,含 move/chain 冻结字段) | D2 | 已完成 |
|
||||
| 3 | RAP 结构 delta——四字段删除(flags_per_round / flag_unit_cost / stop_multiplier / clear_multiplier)+ `rap_refresh_cost` 新增;D2 Core Rules 表行/Status 行、AC-7 示例值、registry 同步回写 | D2 | 已完成 |
|
||||
| 4 | config 结构位 `refresh_cap_per_round` 预留;D2/registry 字段回写随实现批次(届时 AC-10a 七字段清单同步扩为八字段) | D2 | 待实现批次 |
|
||||
| 5 | F1 五条款验收——效果档位对照表/标中旗锚/挖掘风险不等式/清图奖励/弃图支配性(条款 3/5 为 B1 强制检查点;systems-index 门禁 ①–⑤) | B1(供给锚值:A1/B2/B4) | 已登记 |
|
||||
| 6 | EC4"先停后挖"批次仲裁腿 deferral 至 A2 集成测试(A3 冒烟 API 不可构造;A3 冒烟承载"先挖后停"腿 AC-8) | A2 | 已登记(systems-index 门禁) |
|
||||
| 7 | 退化图刷清图奖励的钓鱼风险——最小安全格数下限归 A1 生成参数验收;初始展开定义落点(免费、计入清图进度、无奖励)归 A2 GDD 承载 | A1/A2/B1 | 已登记(EC5) |
|
||||
| 8 | 图类型上下文在战斗域内恒定(biome 挂关卡层、不逐图重掷——防 `request_refresh` 退化为 biome 重掷钓鱼口) | A1/B4 共同验收 | 已登记(OQ6) |
|
||||
| 9 | 刷新入口(玩家发起)与 battle_over 时 RAP 清零的可见反馈 | D1 | 已登记(D1 GDD 验收项) |
|
||||
| EC12 RAP 生命周期边界 | MVP 无上限;战斗结束(Idle)强制清零;跨战斗携带若未来开放,须修订本条与 RAP 池规则并登记 D3 持久化归属 + C2 冒险域语义(OQ7)——禁止静默超域 | RAP 池 / OQ7 |
|
||||
| EC13 RAP 不足时请求刷新 | `request_refresh()` 返回 false、RAP 不变、相位不变(Active 相位内的资源不足拒绝;与 AC-14 的相位非法拒绝区分——后者附 debug 诊断,两者均为 bool 口径) | RAP 池 / AC-5b |
|
||||
| EC14 清图/耗尽轮次产生剩余 AP | 清图剩余 AP 清零(不入 RAP);ap_exhausted 恒 remaining_ap=0(不变式断言);两路径 RAP 增量恒为 0(AC-4/AC-6 断言);不变式断言的实现载体为 debug 断言(冒烟无 fault-injection 载体;行为级代理 = AC-4 的 rap 不变断言) | 轮次结束与仲裁 / AC-4 / AC-6 |
|
||||
| EC15 同一轮内多次请求刷新 | 受理至每轮上限 `refresh_cap_per_round`(默认 2)为止,超限拒绝(resource_face;轮内计数、RoundStart 重置);每次独立检查 `rap ≥ rap_refresh_cost` 并扣减;无冷却;每次刷新都当场换新图且不产生清图奖励;挖掘期当场刷新无结算发生——OQ3 联动复核 | RAP 池 / AC-5b |
|
||||
|
||||
## 呈现与 UI 契约
|
||||
|
||||
@@ -351,43 +303,78 @@ A3 不拥有 UI,对外暴露的状态与反馈义务:
|
||||
| # | 义务 | 归属 |
|
||||
|---|---|---|
|
||||
| 1 | 当前 AP 与当前 RAP 为 HUD 常显字段 | D1 |
|
||||
| 2 | 刷新入口为玩家发起(Rule 11),入口可用性由 B1/D1 呈现 | B1/D1 |
|
||||
| 3 | `battle_over` 时 RAP 清零须有可见反馈——防"攒的钱凭空没了"读感(对账义务登记表 #9) | D1 |
|
||||
| 2 | 刷新入口为玩家发起,入口可用性由 B1/D1 呈现 | B1/D1 |
|
||||
| 3 | `battle_over` 时 RAP 清零须有可见反馈——防"攒的钱凭空没了"读感(对账义务 #9) | D1 |
|
||||
| 4 | 动作非法原因需可区分且双源——棋盘面非法(非相邻格/挖旗格等,A2 判定)/ 资源面非法(AP 不足 / RAP 不足,A3 判定),D1 呈现(原因读数的测试承载声明见验收标准前言 out-of-scope) | D1/A2 |
|
||||
| 5 | 结算明细的效果项带来源标注(P2 归因) | B1 |
|
||||
| 6 | 交互成本指标(每消耗 1 AP ≤ 2 次点击)归 A2/D1 观测(P4 免费移动的点击摩擦护栏) | A2/D1 |
|
||||
| 7 | 无专属表现面、无音频需求;AP/RAP 余量变化与"资源不足"反馈的呈现归 D1/A2 | D1/A2 |
|
||||
| 8 | AP/旗(价目)/停手/RAP 的教学口径以本 GDD 价目表为准,须含"RAP 战斗结束清零"条目(防"存的钱凭空没了"误读) | D5 |
|
||||
|
||||
## Tuning Knobs
|
||||
## 依赖与输出
|
||||
|
||||
### ActionEconomyTable schema(单行全局,int 类型,A3 回填 owner)
|
||||
|
||||
| 字段 | 类型/范围 | 默认 | knob | 说明 |
|
||||
|---|---|---|---|---|
|
||||
| ap_per_round | int [1, 32] | 8 | ✓ | 每轮行动点(原型 v2 实测定稿;双重身份:节奏 knob 兼停手 RAP 转存规模 knob) |
|
||||
| dig_ap_cost | int [1, 8] | 1 | ✓ | 挖单格成本(域下限 1:0 = 无预算系统失效,越域校验拒绝) |
|
||||
| flag_place_ap_cost | int [0, 8] | 1 | ✓ | 插旗 AP 成本(旗无实物资源,仅此一项消耗) |
|
||||
| flag_pull_ap_cost | int [0, 8] | 1 | ✓ | 拔旗 AP 成本(OQ2 复核落点) |
|
||||
| rap_refresh_cost | int [1, 64] | 8 | ✓ | RAP 刷新门槛;默认 8 = ap_per_round,使"满 AP 一轮停手 = 恰好一刷"成为基线节拍;单字段域内任意值均可运作(仅节奏差异),跨字段约束见下 |
|
||||
| move_ap_cost | int | 0 | ✗ 冻结 | 移动免费(P4 承载,调参豁免) |
|
||||
| chain_ap_cost | int | 0 | ✗ 冻结 | 连锁展开免费(原型 v2 定稿) |
|
||||
| refresh_cap_per_round | 结构位(int) | 2 | 结构位预留 | 每轮刷新上限(Rule 11/EC15;RoundStart 重置计数);D2/registry 字段回写随实现批次(届时 AC-10a 七字段清单同步扩为八字段) |
|
||||
|
||||
- knob 列 = 是否开放调参;非 knob 字段仍入表——代码零字面量,修订须走本 GDD 修订流程。
|
||||
- **跨字段校验(D2 validate() 级)**:任一动作成本字段(`dig_ap_cost` / `flag_place_ap_cost` / `flag_pull_ap_cost`)≤ `ap_per_round`——违反即加载期致命(D2 Rule 6 fail-fast)。依据:dig=8 × ap=1 双双域内会使挖掘永久不可用、cleared/ap_exhausted 双不可达(软锁循环),属结构失效而非节奏差异,与本表"域下限 1 = 零预算系统失效"同族;归 ActionEconomyTable schema 类 `validate()` 跨字段类别(D2 既有"schema validate() 收集后致命"机制承载,无需新增 D2 校验通道);违规夹具登记为 D2 校验双通道条件性夹具(同悬空引用待遇)。
|
||||
- **域上界注记**:dig/flag 上限 8、refresh 上限 64 为 MVP 量级护栏(非推导界),随调参需要修订。
|
||||
|
||||
| Knob | 默认 | 调过高 | 调过低 |
|
||||
| 方向 | 系统 | 性质 | 接口要点 |
|
||||
|---|---|---|---|
|
||||
| ap_per_round | 8 | 决策带宽膨胀、节奏拖长(原型 v1 的 12 已实测否决);双重身份:满停 RAP 转存随之增大(8→12 使满停一刷后的富余 +4) | "想清楚的事做不完",违反 P1 |
|
||||
| dig_ap_cost | 1 | ——(>1 使"连锁免费"的相对收益畸变,未实测) | 0 = 无预算系统失效(schema 域 [1,8] 拒绝) |
|
||||
| flag_place_ap_cost | 1 | 插旗迟疑,P3 标雷策略萎缩 | 插旗无成本,旗标记泛滥(棋盘噪音) |
|
||||
| flag_pull_ap_cost | 1 | 挪旗昂贵,误标惩罚过重 | 挪旗近免费,承诺无重量(OQ2 复核落点) |
|
||||
| rap_refresh_cost | 8 | 刷新太贵,风险退出权萎缩、盲猜局被迫赌(违反 P1 兜底) | 刷新近免费,图来回刷节奏拖沓;敌方时间税仍自惩但体验烦躁 |
|
||||
| 上游 | D2 | hard | ActionEconomyTable schema 与 ConfigDB 类型化读取;本 GDD 为该表回填 owner |
|
||||
| 上游 | A1 | 间接事实依赖 | 新图生成经 B1 编排调用——A3 不直接消费 A1 接口,仅 Waiting 出口消费其结果信号 |
|
||||
| 下游 | A2 | hard | 账本调用(`try_spend`)+ 价目表执行 + round_end 棋盘路径外发(payload 组包读取 `last_round_end`);A2 校验棋盘面合法性,资源合法性归 A3;旗标记棋盘状态归 A2;EC4"先停后挖"批次仲裁 deferral 至 A2 集成测试 |
|
||||
| 下游 | B1 | hard | RoundEnd 输出 `(path_tag, continuation_hint)`;挖掘期刷新编排(`refresh_board`)内调用 `request_refresh()`;回发 `next_round_mode`/`battle_over`;F1 契约验收项(效果档位对照表单一线性换算) |
|
||||
| 下游 | B4 | soft | 清图奖励差异化插槽(按图类型分支);标中旗 debuff 档位(OQ5/F1 条款 2 锚约束) |
|
||||
| 下游 | D1 | soft | AP/RAP HUD 常显;刷新入口与 RAP 清零反馈;非法原因双源呈现 |
|
||||
| 下游 | D5 | soft | 教学口径来源(含 RAP/刷新/RAP 战斗末清零) |
|
||||
|
||||
- **Knob 交互**:`rap_refresh_cost : ap_per_round` 比值 = "停几轮换一刷"(默认 1:1 = 满停即一刷;该节拍与 OQ3 纯停手预警同源,联动评估);`ap_per_round × 插旗占比` 与 A1 布雷密度共同决定标雷全周期可行性(A1 定稿后强制复核);效果侧健康(F1 五条款)无单一系统 knob 可控——对照表/闭合对账归 B1、惩罚上限归 B2、奖励分支归 B4(对账归 OQ1);刷新率应急阈值(OQ3)的评估须与 B2 结算强度联动,勿独立调参。
|
||||
- **已冻结项**:AP 8 来自原型 v2 实测(12 点被否);移动/连锁 0 成本为结构冻结;RAP 1:1 转存与战斗域生命周期为结构(非 knob,修订走 GDD 流程;跨战斗携带 = OQ7 预留开关);旗数量无上限为结构。
|
||||
无其他玩法上游(Foundation 层)。
|
||||
|
||||
对账义务登记(活契约;已履行行 #1–3 见 analysis 件附录):
|
||||
|
||||
| 编号 | 内容 | 对侧 | 状态 |
|
||||
|---|---|---|---|
|
||||
| 4 | config 结构位 `refresh_cap_per_round` 预留;D2/registry 字段回写随实现批次(届时 AC-10a 七字段清单同步扩为八字段) | D2 | 待实现批次 |
|
||||
| 5 | F1 五条款验收——效果档位对照表/标中旗锚/挖掘风险不等式/清图奖励/弃图支配性(条款 3/5 为 B1 强制检查点;systems-index 门禁 ①–⑤) | B1(供给锚值:A1/B2/B4) | 已登记 |
|
||||
| 6 | EC4"先停后挖"批次仲裁腿 deferral 至 A2 集成测试(A3 冒烟 API 不可构造;A3 冒烟承载"先挖后停"腿 AC-8) | A2 | 已登记(systems-index 门禁) |
|
||||
| 7 | 退化图刷清图奖励的钓鱼风险——最小安全格数下限归 A1 生成参数验收;初始展开定义落点(免费、计入清图进度、无奖励)归 A2 GDD 承载 | A1/A2/B1 | 已登记(EC5) |
|
||||
| 8 | 图类型上下文在战斗域内恒定(biome 挂关卡层、不逐图重掷——防 `request_refresh` 退化为 biome 重掷钓鱼口) | A1/B4 共同验收 | 已登记(OQ6) |
|
||||
| 9 | 刷新入口(玩家发起)与 battle_over 时 RAP 清零的可见反馈 | D1 | 已登记(D1 GDD 验收项) |
|
||||
|
||||
## P0 最小闭环
|
||||
|
||||
1. B1 发 `notify_round_start()`——AP 硬重置 8,RAP 跨轮保留,进入 Active。
|
||||
2. 玩家挖/插旗/拔旗——A2 判棋盘面合法后经 `try_spend` 各扣 1 AP;连锁展开免费且计入清图进度。
|
||||
3. 玩家可随时停手——RAP += 剩余 AP(1:1);或 rap ≥ 8 时经 D1 入口刷新当场换图(每轮 ≤ 2 次)。
|
||||
4. 结束路径在账本事务内仲裁(cleared > stopped > ap_exhausted),写 `last_round_end`。
|
||||
5. round_end `(path_tag, continuation_hint)` 输出给 B1(棋盘路径 A2 外发、停手 A3 直发)。
|
||||
6. B1 结算——安全格 buff / 标中旗 debuff / 清图奖励以战斗效果直兑进明细(F1 五条款对账)。
|
||||
7. B1 回发 `next_round_mode` 或 `battle_over`——同图续轮 / 仅清图轮换新图 / 战斗终结 RAP 清零。
|
||||
8. 下轮 RoundStart 回到步骤 1,或进入 Idle 等待下一场战斗。
|
||||
|
||||
## P1 / P2 后置
|
||||
|
||||
| 优先级 | 内容 | 后置原因 |
|
||||
|---|---|---|
|
||||
| P1 | RAP 跨战斗存蓄开关(OQ7) | MVP 每场战斗清零;待垂直切片 playtest 验证 Boss 图连刷策略,开放须修订 RAP 池规则/EC12 并登记 D3 持久化归属 + C2 冒险域语义 |
|
||||
| P1 | 清图奖励按图类型差异化分支消费(OQ6,归 B4 表设计) | B4 奖励表预留结构位;A3 只上报 cleared,图上下文经 B1 传递、不经 A3 |
|
||||
| P2 | 动作成本异质性(地形成本修饰钩子,归 A4) | MVP 价目均匀分布为有意简化;异质性钩子已预留 |
|
||||
| P2 | AP 耗尽软提示(OQ4,归 D5 教学,低优先) | 规则已定"AP=0 即收轮";教学若发现新手困惑加提示不改规则,可扩展覆盖 RAP 达标刷新引导与 RAP 战斗末清零提示 |
|
||||
|
||||
## 调参表
|
||||
|
||||
ActionEconomyTable schema——单行全局、int 类型;D2 承载、A3 回填 owner。已锁数值以 `design/registry/entities.yaml` 的 `action_economy` 条目为准:
|
||||
|
||||
| 字段 | 域 | 默认 | owner | 说明 |
|
||||
|---|---|---|---|---|
|
||||
| ap_per_round | int [1, 32] | 8 | A3 | 每轮行动点(双重身份:节奏 knob 兼停手 RAP 转存规模 knob) |
|
||||
| dig_ap_cost | int [1, 8] | 1 | A3 | 挖单格成本(域下限 1:0 = 无预算系统失效,越域校验拒绝) |
|
||||
| flag_place_ap_cost | int [0, 8] | 1 | A3 | 插旗 AP 成本(旗无实物资源,仅此一项消耗) |
|
||||
| flag_pull_ap_cost | int [0, 8] | 1 | A3 | 拔旗 AP 成本(OQ2 复核落点) |
|
||||
| rap_refresh_cost | int [1, 64] | 8 | A3 | RAP 刷新门槛;默认 8 = ap_per_round,使"满 AP 一轮停手 = 恰好一刷"成为基线节拍;单字段域内任意值均可运作(仅节奏差异),跨字段约束见下 |
|
||||
| move_ap_cost | int | 0 | A3 | 移动免费(P4 承载,调参豁免)——冻结 |
|
||||
| chain_ap_cost | int | 0 | A3 | 连锁展开免费——冻结 |
|
||||
| refresh_cap_per_round | 结构位(int) | 2(provisional——结构位预留,D2/registry 字段回写随实现批次) | A3 | 每轮刷新上限(RoundStart 重置计数);届时 AC-10a 七字段清单同步扩为八字段 |
|
||||
|
||||
- knob 列纪律:移动/连锁 0 成本为结构冻结、非 knob;非 knob 字段仍入表——代码零字面量,修订须走本 GDD 修订流程;RAP 1:1 转存与战斗域生命周期为结构(跨战斗携带 = OQ7 预留开关);旗数量无上限为结构。
|
||||
- **跨字段校验(D2 validate() 级)**:任一动作成本字段(`dig_ap_cost` / `flag_place_ap_cost` / `flag_pull_ap_cost`)≤ `ap_per_round`——违反即加载期致命(D2 Rule 6 fail-fast);归 ActionEconomyTable schema 类 `validate()` 跨字段类别(D2 既有"schema validate() 收集后致命"机制承载,无需新增 D2 校验通道);违规夹具登记为 D2 校验双通道条件性夹具(同悬空引用待遇);软锁论证见 analysis 件「调参影响与交互」节。
|
||||
- **域上界注记**:dig/flag 上限 8、refresh 上限 64 为 MVP 量级护栏(非推导界),随调参需要修订。
|
||||
- knob 调高/调低影响、knob 交互(含 `rap_refresh_cost : ap_per_round` 比值节拍、A1 密度联合复核、OQ3 阈值联动)见 analysis 件「调参影响与交互」节。
|
||||
|
||||
## 验收标准
|
||||
|
||||
@@ -396,7 +383,7 @@ A3 不拥有 UI,对外暴露的状态与反馈义务:
|
||||
| 口径 | 要点 |
|
||||
|---|---|
|
||||
| 测试载体 | A3 是被动账本,挖/插/拔的棋盘面执行归 A2(设计顺序第 6 位)、轮次节拍归 B1(第 9 位)——均未实现;冒烟脚本(`--headless --script`,承 D2 冒烟框架)直接驱动 A3 最小 API 面;A2/B1 就绪后改走真实调用方,断言口径不变 |
|
||||
| API 面 | 8 个 API 布尔返回 = 受理/拒绝——"拒绝"直接断言返回值(notify_* 与 request_* 同为 bool);相位非法拒绝附 debug 诊断、非进程致命;受理矩阵见状态节输入×相位表 |
|
||||
| API 面 | 8 个 API 布尔返回 = 受理/拒绝——"拒绝"直接断言返回值(notify_* 与 request_* 同为 bool);相位非法拒绝附 debug 诊断、非进程致命;受理矩阵见状态机节输入×相位表 |
|
||||
| 参数语义 | `chain_size` = 连锁附加格数(不含首格,≥0;首格恒耗 1 AP);`clears_map` = 本次动作后全图安全格开完 |
|
||||
| 只读观测量 | `ap` · `rap` · `phase` · `last_round_end`(记录 path_tag / continuation_hint,可空);相位观测域 = {Idle, Active, Waiting};RoundEnd 为事务内瞬态、不可观测,不作为 GIVEN |
|
||||
| 口径声明 | `notify_settlement_done` 仅记录编排意图,phase 停留 Waiting(AC-11 断言);轮次开启仍由 `notify_round_start` 触发(AC-14 的门不被绕过);各 AC 的 THEN 具体数值按当前 ConfigDB 表值推导(默认 8/1/1/1/8 下的具体数见各 AC;测试读取表值计算期望,不写死) |
|
||||
@@ -418,10 +405,10 @@ A3 不拥有 UI,对外暴露的状态与反馈义务:
|
||||
| AC-4b | ap=1 且仅剩 1 个安全格(构造同上,digs 作用于预设夹具图) | `request_dig(0, true)` | true、`last_round_end` 值等于 `(cleared, new_board)`(清图胜出,EC10)、rap 不变;不存在第二条输出 |
|
||||
| AC-5 | Active ap=3 且图未开完(构造:5 次非清图挖,8−5=3) | `request_stop()`;随后 `notify_settlement_done(same_board)` + `notify_round_start()` | true、`last_round_end=(stopped, same_board)`、rap=3(1:1 转存,恰一条输出);新轮 ap=8、rap=3 |
|
||||
| AC-5b | 分支 1:Active 且 rap ≥ rap_refresh_cost(构造:满 AP 停手 → rap=8 → `notify_round_start()` 回 Active——RAP 跨轮保留);分支 2:Active 且 rap=3(构造:前轮挖 5 后 `request_stop()` → rap=3 → `notify_round_start()`) | `request_refresh()`(两分支各一次) | 分支 1:true、rap=0、phase 不变(Active——挖掘期当场换图,A2 装板受理联动);分支 2:false、rap=3、phase 不变(EC13) |
|
||||
| AC-6 | ap=5(构造:3 次非清图挖) | `request_dig(0, true)`;随后 `notify_settlement_done(new_board)` + `notify_round_start()` | true、`last_round_end=(cleared, new_board)`、rap 不变(剩余 AP 清零,Rule 5/EC14);新轮 ap=8、rap 仍= 前值(RAP 跨图保留,EC9 的 cleared 腿) |
|
||||
| AC-6 | ap=5(构造:3 次非清图挖) | `request_dig(0, true)`;随后 `notify_settlement_done(new_board)` + `notify_round_start()` | true、`last_round_end=(cleared, new_board)`、rap 不变(剩余 AP 清零,EC14);新轮 ap=8、rap 仍= 前值(RAP 跨图保留,EC9 的 cleared 腿) |
|
||||
| AC-6b | 冷启动 ap=8、夹具图恰余 4 个安全格 | `request_dig(3, true)`(附加 3 格连锁开完全部余量;chain_size 不含首格) | true、ap=7、`last_round_end` 值等于 `(cleared, new_board)`、rap 不变——连锁免费且连锁格计入清图判定(EC5),单次判定 |
|
||||
| AC-8 | Active、剩余安全格恰 1、ap≥1(先挖后停腿——A3 冒烟可测子集) | `request_dig(0, true)` 后 `request_stop()` | 第二调用返回 false、`last_round_end=(cleared, new_board)` 恰一条、phase=Waiting(EC4;stop-first 腿 deferral 至 A2 集成,门禁登记) |
|
||||
| AC-15 | Active ap=8 且图未开完 | `request_stop()` | true、`last_round_end=(stopped, same_board)`、rap=8(满停 = 刷新门槛恰可达,Rule 11 基线节拍,EC6) |
|
||||
| AC-15 | Active ap=8 且图未开完 | `request_stop()` | true、`last_round_end=(stopped, same_board)`、rap=8(满停 = 刷新门槛恰可达,RAP 池基线节拍,EC6) |
|
||||
| AC-7 | ap=1(构造:7 次非清图挖)且 debug override `flag_place_ap_cost=2`、`flag_pull_ap_cost=2`(域 [0,8] 内,经 D2 R3 注入);承载声明:默认价目下全动作 1 AP,"AP 不足"腿(EC2)在默认表值下不可构造(ap≥1 恒可支付、ap=0 即收轮),故本 AC 显式承载于非默认表值夹具 | 依次 `request_flag_place()`、`request_flag_pull()`、`request_dig(0,false)` | 前两者 false(AP 不足,EC2)、最后者 true(ap 1→0,触发 ap_exhausted);`last_round_end` 断言只含末次记录 |
|
||||
| AC-9 | phase=Waiting(经 ap_exhausted 路径构造;RoundEnd 瞬态不可观测) | 依次 `request_dig(0,false)`、`request_flag_place()`、`request_flag_pull()`、`request_stop()` | 全部 false、ap/rap 不变、`last_round_end` 不变(无第二条输出) |
|
||||
| AC-11 | phase=Waiting 且 rap>0(构造:停手轮后) | `notify_settlement_done(same_board)`;随后 `notify_combat_end()` | settlement_done 返回 true 且 phase 仍= Waiting(仅记录编排意图,AC-14 门不被绕过);combat_end 返回 true、phase=Idle、rap=0(战斗域清零,EC12)、ap=0 |
|
||||
@@ -433,22 +420,11 @@ A3 不拥有 UI,对外暴露的状态与反馈义务:
|
||||
| AC-10a | ConfigDB 加载完成 | 脚本解析 `design/registry/entities.yaml` 的 `action_economy` 条目 | 与 `ConfigDB.action_economy` 七字段(ap_per_round / dig_ap_cost / flag_place_ap_cost / flag_pull_ap_cost / rap_refresh_cost / move_ap_cost / chain_ap_cost)逐一相等;registry 缺任一字段即失败 |
|
||||
| AC-10b | A3 文件集 | 纳入 D2 AC-14 项目级扫描域 | 引用其人工三要素口径,不另设自动化字面量硬 THEN——字面量判定误报率高,D2 已定性为 warning 级 + 人工复核 |
|
||||
|
||||
## 开放悬案
|
||||
|
||||
| # | 悬案 | owner | 要点 |
|
||||
|---|---|---|---|
|
||||
| 1 | 效果档位对照表与闭合对账 | B1(第 9 位) | 安全格 buff / 标中旗 debuff / 清图奖励 / 敌方增益的统一当量对照与换算由 B1 GDD 定稿,须满足 F1 五条款;B1 兼任条款 3(挖掘风险不等式)与条款 5(弃图支配性)的单一闭合对账 owner(A1/B2/B4 供给锚值,B1 签字验收),两项均登记 B1 GDD 强制检查点;每战标中旗总吞吐对账归本条;注意与 OQ6 清图奖励插槽区分 |
|
||||
| 2 | 拔旗耗 AP 复核 + 标错惩罚双重职责 | A2 前原型小补丁(与标错惩罚实测合并会话) | 本 GDD 按"拔旗 1 AP、移除标记"定稿;复核改动现已有 knob 落点(`flag_pull_ap_cost`),若实测推翻则调 knob 并回写 registry。标错惩罚现承担双重职责:误标税 + 停手轮/死 RAP 态下旗滥用的唯一价格——RAP 无上限 + 满溢态使碎片区插旗机会成本趋零,"可疑格全插旗、永不拔"的滑向由本惩罚定价;OQ3"停手轮旗动作占比"指标联动观测 |
|
||||
| 3 | playtest 预注册指标 | 垂直切片前置 playtest | 指标:弃图率 = refresh/(clear+refresh)(>30% 观察、>50% 干预——provisional 预注册);刷新时已开格完成度直方图(完成度 <60% 的刷新占比 >50% 即信号);停手轮旗动作占比(>50% 即信号——投机旗/死 RAP 态检测,联动 OQ2);确定动作供给 >8 的轮占比(P1 决策密度兜底监测,与 A1 密度联合验收);刷新率/战斗(>3 次即观察信号,阈值评估与 B2 结算强度联动,勿独立调参);纯停手轮占比(>20–30% 即观察信号);停手时机分布、每轮犹豫时长、终局碎片区(清图完成度 >80%)轮次数。失明声明:刷新率/纯停手占比/碎片区轮次三项对"挖完全部确定格→停→刷"环结构性失明——该环停手轮先挖后停(非纯停手)、温和变体刷新率低、开到 >80% 即弃使碎片区读数反而变低(病态呈现为健康);故增弃图率/完成度直方图/停手轮旗占比前三项直测该环。应急方案(触发后启动):`rap_refresh_cost` 调参 / 刷新冷却(连续刷新须间隔 N 轮)/ 刷新新图保留已开格结构(重议级) |
|
||||
| 4 | AP 耗尽的软提示 | D5(低优先) | 本 GDD 定"AP=0 即收轮";教学若发现新手困惑,加提示不改规则;可扩展覆盖"RAP 达标刷新引导"与"RAP 战斗末清零提示"(D1 清零反馈的对应教学条目) |
|
||||
| 5 | 标中旗兑付语义细化 | B4/B1(A3 硬约束已定稿) | 标中旗 = 怪物 debuff(三向效果定稿);硬约束:兑付一次性、当轮结算、兑付资格以雷格实例为键(每雷本次战斗至多兑付一次,资格随首次兑付消费;放置实例仅为当轮结算载体)、拔旗重插同一雷格不恢复已消费资格(堵重插农场)、禁止逐轮重复兑付;换图后新雷为新实例;档位锚见 F1 条款 2(严格 > 最低档 + 连锁放大边际基准 + 总吞吐对账);标错惩罚归 game-concept 待定问题(OQ2 合并会话,双重职责见 OQ2) |
|
||||
| 6 | 清图奖励差异化插槽 | B4(结构位预留 + A1 上下文) | 清图奖励未来按图类型(biome/tag)分支——B4 奖励表 schema 须预留图类型维度的结构位;A3 只上报 `cleared`,图上下文经 B1 传递、不经 A3;约束:图类型上下文在战斗域内恒定(biome 挂关卡层、不逐图重掷)——否则 `request_refresh` 退化为 biome 重掷钓鱼口;该约束登记 A1/B4 共同验收 |
|
||||
| 7 | RAP 跨战斗生命周期开关 | 垂直切片 knob 复核 | MVP 每场战斗清零;若实测支持跨战斗存蓄(Boss 图连刷策略),须修订 Rule 11/EC12 + 登记 D3 持久化归属与 C2 冒险域语义 |
|
||||
|
||||
## 版本历史
|
||||
|
||||
| 版本 | 日期 | 改动 |
|
||||
|---|---|---|
|
||||
| v2 | 2026-09-14 | 两件套迁移:按模板 v2 重排为 design 件——设计推演(F1 推导论证、数值锚定、候选取舍、体验锚点论证、EC6 退化环诚实声明、knob 影响与交互、软锁论证)剥离至 `design/gdd/analysis/a3-action-economy.md`;对账义务已履行行(#1–3)移 analysis 附录;规则/数值/AC/EC/依赖/OQ 编号与内容零变更 |
|
||||
| v1.0-lean | 2026-09-13 | 格式迁移:legacy 原稿按 lean 样例(docs/lean-gdd-sample-b1.md)重排——正文修订注记剥离收敛至本表;速览/体验锚点/枚举/边界情况/AC/义务台账/OQ 转表格,流程转字符画;F1 五条款、公式与验算数据全保留;语义与 2026-09-07 三轮评审修订版及 2026-09-12 D4 修订对齐,零规则变更 |
|
||||
| D4 修订 | 2026-09-12 | 刷新决策前移挖掘期:`request_refresh` 由 B1 `refresh_board` 挖掘期刷新编排内调用(原结算编排期 Waiting 相位代理调用退役);新增每轮刷新上限 `refresh_cap_per_round` 默认 2(RoundStart 重置、超限拒绝,EC15);旧板旗随旧板作废(零兑付、旗 AP 不返还,A2 换图全量重置承载);stopped/ap_exhausted 轮恒 same_board 钉入 Waiting 出口契约 |
|
||||
| 三轮评审修订版 | 2026-09-07 | 三轮 full review(game-designer · systems-designer · qa-lead · economy-designer · creative-director)8 条文本级 blocking 同日全部核销,用户拍板接受修订并标记 Approved、免独立 delta 核销(不设第四轮全量评审):RAP 池新增(停手剩余 AP 1:1 转存,原 ×2 折算与 stop_multiplier 删除;战斗域生命周期、battle_over 清零);清图剩余 AP 作废(原 ×1 折算与 clear_multiplier 删除);F1 结构性改写为五条款并钉死 B1 闭合 owner(原 F1 折算公式与 F2 挖/停/清激励不等式整体作废——F2 被二轮评审击穿两条数学缺陷:博弈树错误、缺风险项,不再修复而是移除病灶);旗子单态(口袋旗双态删除,数量无上限,稀缺性由 AP 机会成本承载);round_end 双发射源(stopped 由 A3 直发);兑付资格以雷格实例为键(堵重插农场);ActionEconomyTable 四字段删除 + rap_refresh_cost 新增(同日三次回填);跨字段校验(动作成本 ≤ ap_per_round);输入×相位矩阵增补;评审日志 design/gdd/reviews/a3-action-economy-review-log.md |
|
||||
|
||||
+182
-221
@@ -1,65 +1,66 @@
|
||||
# A4 地形变异(Terrain Variation)
|
||||
|
||||
> **状态**:Approved · lean 格式
|
||||
> **版本**:v1.0-lean · 2026-09-13 · 作者:user + agents(lean 门禁:systems-designer 审查 Formulas · qa-lead 审查 Acceptance Criteria)
|
||||
> **状态**:Approved · **版本**:v2 · 2026-09-14
|
||||
> **一句话**:定义地形变异——基础规则上的区域性规则偏离;MVP 唯一变异为迷雾。
|
||||
> **推演件**:`design/gdd/analysis/a4-terrain-variation.md`(推导、论证与开放问题 OQ1–8 全在那里)
|
||||
> **承载支柱**:P1 主(信息诚实边界——"不可推理"永不伪装成"可推理")· P3(信息维度变体——定价通货从雷险换信息+AP;迷雾仅其信息切面)· P2(暗面警示——雾区奖励可预期性切面)· P4(地牢氛围本体承载)
|
||||
> **层级**:Layer 1 Foundation · Milestone MVP · 设计顺序第 3 位(上游 D2、A3 已 Approved)
|
||||
> **一句话**:A4 定义扫雷图上的地形变异——基础规则之上的区域性规则偏离;MVP 唯一变异为迷雾(边界可见、内容隐蔽),并以变异框架承载岩浆/冰冻等后续变异逐个加入。
|
||||
> **复核注记**:art-director 未经咨询(Lean 模式)——生产前人工复核视觉规格与 art-bible 一致性(creative-director 已在两轮独立评审中终裁幻想节处置)。
|
||||
|
||||
## 速览
|
||||
## 设计目的
|
||||
|
||||
| 关键问题 | 答案 |
|
||||
|---|---|
|
||||
| 定位 | 变异的定义与交互规则 owner——在基础扫雷规则上叠加区域性规则偏离的框架 + MVP 迷雾;玩家不"使用"A4,而是在挖掘中遭遇并应对它 |
|
||||
| 拥有 | VariationTable 8 字段定义(D2 回填 owner)· F1 候选池门控谓词 · 信息剥夺边界与双向效应 · 生成期布置约束声明(执行归 A1)· 零特判原则的规则面(义务是"不加分支")· 未来变异扩展框架 |
|
||||
| 不拥有 | 布置算法与区域参数(A1 BoardGenTable)· 挖/旗执行(A2)· 呈现(D1)· 教学文案(D5)· 奖励内容与定价(B4/B1)· 道具(A5)· 全局变异语义(C3)· 玩法数值字面量与随机 |
|
||||
| 上游输入 | D2 VariationTable schema 承载 + ConfigDB 读取(hard——唯一玩法上游);A3 价目 `ap_per_round` / `dig_ap_cost` 文档层引用(零运行时接口消费) |
|
||||
| 下游输出 | 候选池门控 + cell_constraint + 出生区排除(A1)· 变体属性只读查询契约(A2)· 呈现规格(D1)· 教学口径(D5)· 定价硬约束与条款 5 对账输入(B4/B1)· counter_item_ids 预留(A5)· scope=global 枚举位(C3) |
|
||||
| 硬约束 | 生成期布置约束(雾区仅非 0 安全格——区内无雷、无 0 格)· 零特判原则 · fog unlock_level=2 · hide_numbers⇒safe_nonzero 跨字段校验致命 · 厚度 ≤2 / f ≤ 8×雷密度 硬边界 |
|
||||
A4 是定义层系统:在基础扫雷规则上叠加区域性规则偏离的框架 + MVP 迷雾。变异由棋盘生成(A1)布置在图上、玩家在挖掘中遭遇并应对——看见迷雾边界那一刻决策就出现。没有 A4,难度只能靠雷数单调缩放、关卡间"解锁新变异"的推进感消失,且"无法推理"的格子会以埋伏形式随机出现;迷雾把"你推不出来"从暗处的埋伏变成明处的选择——显式标注、可绕行、可买情报,是 P1"我算对了"的诚实兜底、P3"风险与收益同源"在空间维度的载体。
|
||||
|
||||
A4 是定义层系统:变异由棋盘生成(A1)布置在图上,玩家在挖掘中遭遇并应对——看见迷雾边界那一刻决策就出现:如何安排挖掘顺序让 0 格连锁免费吃掉雾格(连锁路由),链不可达的雾残段按全价续付清图还是停手/弃图(A3 风险退出权衡;垂直切片起再加"是否用道具买情报",A5)。清图判定含雾格——雾是清图的必经段而非可绕过的支线,"绕开走"的真实形态是 A3 的停手/弃图风险退出。
|
||||
1. 数字不再说话是明示不是陷阱:雾外仍可用区外数字推理雾边缘的雷(跨雾推理——被雾边已知约束放大的常规推理体验,非独立机制);"不可推理"永不伪装成"可推理"(基础区可推理率生成保证归 A1)。
|
||||
2. 不赌命,赌信息与行动力:雾格成本两态——链可达雾格经邻接 0 格连锁免费开出、链不可达雾格按全价收紧盲区预算;"里面有价值"是契约而非愿望,由 B4 三条定价硬约束兜底(义务清单 B4-①②③)。
|
||||
3. 边界可见、内容隐蔽:雾内奖励若不可见,规划退化成探索惊喜(创意风险 #1,CD 门禁登记 B4/A4 落实)——Core Rules 定迷雾信息呈现规则的精确切面,奖励可见性/探测机制的接口在此预留、内容归 B4/A5。
|
||||
4. 趴在地图上的黑暗:未探索的黑暗是有形状、有边界、趴在地图上的实体;岩浆/冰冻随关卡解锁延续"越深越险的地貌"叙事(P4 越下越险)。
|
||||
|
||||
没有 A4,游戏失去两样东西:难度只能靠雷数单调缩放、关卡间"解锁新变异"的推进感(P4 越下越险)消失;且"无法推理"的格子会以埋伏形式随机出现——迷雾把"你推不出来"从暗处的埋伏变成明处的选择,是 P3"风险与收益同源"在空间维度的载体,也是对 P1"我算对了"的诚实兜底:推不出的区域被显式标注、可绕行、可买情报,而不是让玩家在自以为可推理的局面上撞墙。
|
||||
设计意图:雾是清图的必经段而非可绕过的支线,"绕开走"的真实形态是 A3 的停手/弃图风险退出(垂直切片起再加"是否用道具买情报",A5);玩家每轮都在看见并应对变异——直接感知。
|
||||
|
||||
## 体验锚点
|
||||
## 系统范围
|
||||
|
||||
> 情绪目标一句话:**站在洞口前的权衡感**——迷雾不制造惊喜或惊吓,它制造一个看得见边界的承诺:"里面有价值,进去的代价是 AP 溢价与放弃雾格数字这份推理原料。"(玩家每轮都在看见并应对变异——直接感知)
|
||||
负责:
|
||||
|
||||
| 支柱 | 关键词 | 机制承诺 |
|
||||
|---|---|---|
|
||||
| P1 我算对了的诚实边界 | "数字不再说话" | 迷雾是游戏对玩家的坦白——把"无法推理"从埋伏变成路标:雾外仍可用区外数字推理雾边缘的雷(跨雾推理——被雾边已知约束放大的常规推理体验,"隔着雾也算出来了",是常规推理在雾边的延伸、非独立机制);进雾每一步是承诺而非计算;基础区可推理率生成保证归 A1,A4 负责"不可推理"永不伪装成"可推理";"里面有价值"是契约而非愿望——由 B4 三条定价硬约束兜底(义务清单 B4-①②③) |
|
||||
| P3 风险与收益同源(信息切面) | "不赌命,赌信息与行动力" | 雾区无雷是玩家可见知识——雾的"险"在信息与行动力的双重定价:盲区预算按链不可达雾格全价收紧,链可达雾格经邻接 0 格连锁免费开出(两态口径);变异框架是 P3 的长期载体,迷雾仅其信息切面,P3 雷险维度由岩浆/冰冻(垂直切片起)承接;真实耦合点在雾边(Rule 5 双向效应——A1 按双向净效应建模) |
|
||||
| P2 规划的延迟兑现(暗面警示) | "边界可见、内容隐蔽" | 雾内奖励若不可见,规划退化成探索惊喜(创意风险 #1,CD 门禁登记 B4/A4 落实)——Core Rules 定迷雾信息呈现规则的精确切面,奖励可见性/探测机制的接口在此预留、内容归 B4/A5 |
|
||||
| P4 地牢氛围的本体承载 | "趴在地图上的黑暗" | 迷雾是"下探黑暗"隐喻的直接具象——未探索的黑暗是有形状、有边界、趴在地图上的实体;后续变异(岩浆/冰冻)延续"越深越险的地貌"叙事(随关卡解锁) |
|
||||
- 变异的定义与交互规则 owner——玩家不"使用"A4,而是在挖掘中遭遇并应对它
|
||||
- VariationTable 8 字段定义(D2 承载,本 GDD 回填 owner)
|
||||
- F1 候选池门控谓词(variant_pool_gate)
|
||||
- 信息剥夺边界与双向效应(雾藏什么、不藏什么、补什么)
|
||||
- 生成期布置约束声明(执行归 A1)
|
||||
- 零特判原则的规则面(义务是"不加分支")
|
||||
- 未来变异扩展框架(加行即用 + 接口漂移回写)
|
||||
|
||||
反向护栏(裁剪判据):迷雾绝不能制造"被骗感"——若雾区边界不可见、或进洞无额外价值,迷雾退化为纯负体验税(纯 AP 税);任何让雾区"隐性化"的设计默认砍掉。"里面有价值"由 B4 三条定价硬约束兜底:两条防税下界 + 一条防福利上界——防 level 2 首发关(小图低密、链免开占比结构性最高)"链免开 + 锚上浮"双白拿的福利板化与"雾=免费奖励"先验(后者会在后期雾变厚、全价残段出现时恰触发被骗感护栏)。
|
||||
不负责:
|
||||
|
||||
- 参考感受:Into the Breach 的信息诚实(游戏从不用隐藏信息骗你——本作反其道而行,把"信息缺失本身"诚实标注)· 杀戮尖塔地图的路径承诺(看得见的未知,选定的风险)。
|
||||
- 布置算法与区域参数(A1 BoardGenTable)
|
||||
- 挖/旗执行逻辑(A2)
|
||||
- 呈现(D1)
|
||||
- 教学文案(D5)
|
||||
- 奖励内容与定价(B4/B1)
|
||||
- 道具(A5)
|
||||
- 全局变异语义(C3)
|
||||
- 玩法数值字面量与随机(数据表 + RngService 封闭流)
|
||||
|
||||
## 全局流程
|
||||
## 核心循环
|
||||
|
||||
### 地形布置流程(A1 生成期——A4 只声明约束与门控,算法归 A1)
|
||||
### 地形布置(A1 生成期——A4 只声明约束与门控,算法归 A1)
|
||||
|
||||
```
|
||||
A1 生成新扫雷图(雷图 · 尺寸 · biome,(level_index, node_depth) 维度)
|
||||
│ ① 求布置候选池 pool = F1(level_index, board_biome)
|
||||
│ pool = ∅(雾未解锁 / biome_tag 全不匹配)→ 静默布置普通图,不报错(EC1)
|
||||
│ ② 池非空 → 逐候选按 cell_constraint=safe_nonzero 求可行域
|
||||
│ 非可行(非 0 安全格面积或连通分量不足)→ 跳过雾布置,本图为合法无变异图(EC2 降级)
|
||||
│ 实际达成区数 k < 参数要求 N → 尽力布置可行分量,按 shortfall 分级上报降级率(禁放宽 Rule 3 硬塞)
|
||||
│ ③ 可行域内布置雾区,硬边界逐项成立:
|
||||
│ · 雾格 ∈ 非 0 安全格(区内无雷、无 0 格)
|
||||
│ · 厚度 ≤2(≡ 任意 3×3 窗口非全雾)· f ≤ 8×雷密度 · 雾占比 < 全覆盖(EC10)
|
||||
│ · 出生 3×3 及其初始展开可达域内无变异格(保守上界 = 出生 3×3 经 0 格最大
|
||||
│ flood 闭包外扩 1 格——任意 A2 展开定义的超集,Rule 7)
|
||||
│ · 区域随机选取经 board_gen 流取号(回放确定性)
|
||||
│ ① pool = F1(level_index, board_biome);pool=∅(雾未解锁 / biome_tag 全不匹配)
|
||||
│ → 静默布置普通图,不报错(EC1)
|
||||
│ ② 池非空 → 逐候选按 cell_constraint=safe_nonzero 求可行域;非可行(非 0 安全格
|
||||
│ 面积或连通分量不足)→ 跳过雾布置,本图为合法无变异图(EC2 降级;k<N 时尽力
|
||||
│ 布置可行分量、按 shortfall 分级上报降级率——禁放宽 Rule 3 硬塞)
|
||||
│ ③ 可行域内布置雾区,硬边界逐项成立:雾格 ∈ 非 0 安全格(区内无雷、无 0 格)·
|
||||
│ 厚度 ≤2(≡ 任意 3×3 窗口非全雾)· f ≤ 8×雷密度 · 雾占比 < 全覆盖(EC10)·
|
||||
│ 出生 3×3 及其初始展开可达域内无变异格(保守上界 = flood 闭包外扩 1 格,Rule 7)·
|
||||
│ 区域随机选取经 board_gen 流取号(回放确定性)
|
||||
│ ④ 生成期计算并输出链不可达雾格占比(B1 条款 5 对账输入,验收⑤)
|
||||
▼
|
||||
棋盘产物(格状态 + 变异标记 + 出生区)→ A2 install_board 持有生成期快照
|
||||
```
|
||||
|
||||
### 雾揭示流程(运行期——零特判,A2 执行逻辑无变异分支)
|
||||
### 雾揭示(运行期——零特判,A2 执行逻辑无变异分支)
|
||||
|
||||
```
|
||||
玩家挖格 c(全价 dig_ap_cost)或 0 格连锁传播至 c(连锁展开零价)
|
||||
@@ -82,12 +83,13 @@ c 是雾格?
|
||||
| 合法雾图 | 可行域内布置成功 | 产物携带变异标记;占比参数域校验通过;输出链不可达占比 | Rule 3 / Rule 6 |
|
||||
| 参数域拒绝 | 雾占比 ≥ 全覆盖(极端参数) | BoardGenTable 参数校验拒绝(雾占比上限 × 可推理率下限联动不等式) | EC10 |
|
||||
|
||||
## 核心规则
|
||||
## 变异定义框架(VariationTable)
|
||||
|
||||
> 每条规则两段:**人话**(作用于哪个系统、什么情况下、谁触发、触发后发生什么;效果与情况用枚举表)→ **举证**(计算方法/公式;纯流程规则明写"无计算")。
|
||||
规则:
|
||||
|
||||
#### 规则 1:每种变异都是配置表里的一行声明,不含任何专属代码
|
||||
**人话**:这条管变异怎么被定义。每种变异是配置表 VariationTable 里的一行具名声明,一共声明四件事——见下表。框架自身不含运行时逻辑:变异带来的行为改变,发生在"信息规则 × 既有系统行为"的交集里,定义行只声明交集参数,不写任何处理代码。
|
||||
- **Rule 1**:每种变异是配置表 VariationTable 里的一行具名声明,只声明四件事(见下表);框架自身不含运行时逻辑——变异带来的行为改变发生在"信息规则 × 既有系统行为"的交集里,定义行只声明交集参数,不写任何处理代码。
|
||||
- **Rule 8**:A4 相关代码零玩法数值字面量、零随机:变异的全部定义数据放配置表 VariationTable(本 GDD 为该表回填 owner),布置随机落在棋盘生成器的专用随机流里,A4 自己既不掷随机数也不写死玩法数字,一切读表(机器验收 = 静态扫描零命中 + 字面量人工口径,见验收标准 AC-7 / AC-10)。
|
||||
- **Rule 9**:新变异(岩浆、冰冻)将来按同一框架加行,不另起炉灶,MVP 不建行(CD 门禁:无 MVP 容器)、随垂直切片关卡解锁建行,需要新规则字段时走 D2 接口漂移规则同步回写本 GDD 与 D2、不在表外私加字段;精英/Boss 图的全局变异只预留一个"全局"作用域枚举位(scope=global),语义归 C3 GDD 定稿——本 GDD 只保证枚举位存在,不预写语义。
|
||||
|
||||
| 声明项 | 字段 | 回答的问题 |
|
||||
|---|---|---|
|
||||
@@ -96,78 +98,33 @@ c 是雾格?
|
||||
| 布置约束 | cell_constraint | 允许落在什么样的格子上 |
|
||||
| 作用域 | scope | 管一块区域(region),还是全局(global——为后续预留) |
|
||||
|
||||
**举证**:无计算(定义框架)。字段 schema 定稿与默认值见「Tuning Knobs·VariationTable schema 定稿」表(本 GDD 回填 owner,承载归 D2)。
|
||||
### VariationTable 行集(MVP 表内容——恰含 fog 一行)
|
||||
|
||||
#### 规则 2:迷雾边界看得见,里面的数字看不见
|
||||
**人话**:这条管 MVP 唯一的变异——迷雾。它是作用域为 region 的信息剥夺变异,玩家在挖掘中遭遇它时,行为规则只有两条:
|
||||
| 行 | 字段取值 | 产出点 | 语义 |
|
||||
|---|---|---|---|
|
||||
| "fog"(迷雾) | unlock_level=2 · scope=region · info_mask=hide_numbers · cell_constraint=safe_nonzero · biome_tag=[] · counter_item_ids=[] | game-concept 解锁序列:普通数字→迷雾→岩浆/冰冻;本 GDD 回填 D2 | MVP 唯一变异;岩浆/冰冻不建行(CD 门禁:无 MVP 容器),垂直切片随关卡解锁建行 |
|
||||
|
||||
| 情况 | 玩家看到什么 |
|
||||
|---|---|
|
||||
| 雾格还没开 | 专属纹理标出雾区范围——边界可见、内容隐蔽 |
|
||||
| 雾格被开出(亲手挖或连锁带到) | 照常开出,但不显示数字 |
|
||||
### VariationTable schema 校验类别(诊断封闭枚举)
|
||||
|
||||
**举证**:无计算(两条行为规则)。呈现规格(纹理、边界可读性、已开雾格样式)归 D1,见「呈现与 UI 契约」节与依赖节 D1 行。
|
||||
| 类别 | 级别 | 触发条件 | 语义 |
|
||||
|---|---|---|---|
|
||||
| 重复键 | 致命 | variant_id 重复 | D2 Rule 6 既有类别 |
|
||||
| unlock_level 域外 | 致命 | unlock_level ∉ [1, 999](含 0) | 域校验 |
|
||||
| 跨字段 hide_numbers⇒safe_nonzero | 致命 | info_mask=hide_numbers ∧ cell_constraint=any | Rule 4"雾格恒非 0 / 级联止于雾格"是承重规则(Rule 3)的寄生结论而非 hide_numbers 的本性——无此校验,未来 hide_numbers + any 行将静默击穿 EC4(连锁不再止于雾格) |
|
||||
| scope=global | warning | MVP 出现 global 行 | 枚举域内合法数据、语义未定稿(C3)——不致命;运行期无消费者故无行为;C3 定稿语义并落地前不得移除该 warning |
|
||||
|
||||
#### 规则 3:雾只铺在贴着雷的安全格上——雾里永远没雷、没 0 格
|
||||
**人话**:这条管棋盘生成时雾往哪儿摆,是本 GDD 的承重规则(用户定稿)。生成器布置雾区只能选"非 0 安全格"——8 邻里至少含 1 雷的安全格,于是雾区里既无雷、也无 0 格。约束由本 GDD 声明、棋盘生成器在生成期强制执行,谁都不许为布置成功率放宽它。玩家侧的承诺是明牌:"雾区无雷"由教学与图例传达。正因雾里没雷没 0 格,既有规则才能对雾全面惰性化——下一条讲的就是这个。
|
||||
设计意图:加变异永远是加数据行而非改代码;承重行为全部寄生在布置约束上(见「布置约束与生成期门控」节)。
|
||||
|
||||
**举证**:计算见「数值结论与推导·结构推论」——厚度 ≤2(可判定谓词 ≡ 任意 3×3 窗口非全雾)与面积必要上界 f ≤ 8×雷密度的推导与验算都在该节;约束逐项落点见下方实现参照表;执行义务登记 A1 验收⑫;数据载体 = cell_constraint 字段;"雾区无雷"等可教知识清单见「规则 3/5 的实现参照——雾元知识信息源」。
|
||||
## 迷雾:信息剥夺边界与零特判
|
||||
|
||||
#### 规则 4:既有系统不为雾改任何行为,代码里零变异分支
|
||||
**人话**:这条管雾与游戏其余部分的关系,同为承重规则。连锁、数字计数、清图判定、插旗、行动价目、结算——既有系统一律不感知"这格是不是雾格":雾不改变它们任何行为,代码里也不许出现"如果是雾格就……"的分支。雾格能被如此"无视",靠的正是上一条"雾里没雷没 0 格"的布置约束。六个系统面在雾下的具体表现见下方实现参照表。
|
||||
规则:
|
||||
|
||||
**举证**:无计算(架构纪律)。挖掘侧义务 = 执行逻辑零变异分支("不加分支"而非"加处理",见依赖节下游 A2 行);A4 文件集零随机、零字面量走静态扫描(AC-7/AC-10)。
|
||||
- **Rule 2**:迷雾是作用域为 region 的信息剥夺变异,玩家在挖掘中遭遇它:未开雾格以专属纹理标出雾区范围——边界可见、内容隐蔽;被开出(亲手挖或连锁带到)时照常开出、不显示数字(呈现规格归 D1)。
|
||||
- **Rule 4**:既有系统不为雾改任何行为,代码里零变异分支:连锁、数字计数、清图判定、插旗、行动价目、结算一律不感知"这格是不是雾格",代码里不许出现"如果是雾格就……"的分支;挖掘侧义务 = 执行逻辑零变异分支("不加分支"而非"加处理",见依赖节 A2 行)。
|
||||
- **Rule 5**:雾只藏一样东西——未开雾格的数字;不藏雾区边界(专属纹理可见)、不藏已开格的全部信息、不藏奖励入库过程;雾外数字对雾外雷的计数照常,雾边界推理仍可行、只是原料变少。剥夺之外并存增益,净效应双向、随雾形与雷密度变化——建模必须两边都算,不做单向补偿(A1 可推理率参数须按生成后实测净效应建模,验收④):减项 = 雾格数字本可作区外雷的推理源,其寂静使雾边附近的线索变少;加项 = 雾格保证无雷且必邻区外雷、雾形携带雷簇位置(k 格雾区外环必含 ≥⌈k/8⌉ 雷)、雾边邻格雷候选域收缩局部更易解——"雾边 = 推理锚"。
|
||||
- **反向护栏**:迷雾绝不制造"被骗感"——若雾区边界不可见或进洞无额外价值,迷雾退化为纯负体验税(纯 AP 税);任何让雾区"隐性化"的设计默认砍掉。
|
||||
|
||||
#### 规则 5:雾只藏雾格的数字,藏的同时倒送两样补偿
|
||||
**人话**:这条管信息剥夺的边界——"雾到底藏了什么"的账目。藏的只有一样:未开雾格的数字;不藏的有三样,见下表。雾外数字对雾外雷的计数照常,雾边界推理仍可行、只是原料变少。剥夺之外并存增益,净效应双向、随雾形与雷密度变化——建模必须两边都算,不许只算一边:
|
||||
|
||||
| 信息 | 雾下状态 |
|
||||
|---|---|
|
||||
| 未开雾格的数字 | 藏——唯一被剥夺的 |
|
||||
| 雾区边界 | 不藏——专属纹理可见 |
|
||||
| 已开格的全部信息 | 不藏 |
|
||||
| 奖励入库过程 | 不藏 |
|
||||
|
||||
| 效应方向 | 内容 |
|
||||
|---|---|
|
||||
| 剥夺(减项) | 雾格数字本可作区外雷的推理源,其寂静使雾边附近的线索变少 |
|
||||
| 增益(加项) | 雾格保证无雷且必邻区外雷;雾形携带雷簇位置(k 格雾区外环必含 ≥⌈k/8⌉ 雷);雾边邻格雷候选域收缩、局部更易解——"雾边 = 推理锚" |
|
||||
|
||||
**举证**:净效应双向且依赖雾形/雷密度——A1 可推理率参数须按生成后实测净效应建模、禁单向补偿(验收④);外环雷下界 ⌈k/8⌉ 的推导见「数值结论与推导·结构推论」;玩家可推理、可教的雾知识清单见「规则 3/5 的实现参照——雾元知识信息源」。
|
||||
|
||||
#### 规则 6:雾摆多大摆哪儿归棋盘生成器,A4 只管入场资格
|
||||
**人话**:这条管雾区摆放的决定权。A4 不拥有布置算法:摆几个雾区、每个多大、摆在哪,与雷图共生,由 A1 生成算法 + BoardGenTable 参数(按关卡×深度两维逐行,A1 回填)决定;布置随机从棋盘生成专用随机流(board_gen 流)取号,每次生成新扫雷图绑定一次,同种子必出同图。A4 对摆放的唯一参与是资格把关:变异的解锁关号不高于当前关卡序号,才进入这一关的布置候选池。
|
||||
|
||||
**举证**:门控的计算形式是集合谓词 F1(unlock_level 直接整数比较 + biome_tag 通配/交集),见「数值结论与推导·F1 布置候选门控」;取号机制 = RngService scope 绑定(每次生成新扫雷图);区域数量/尺寸/占比参数域见「枚举·板形参数」表。
|
||||
|
||||
#### 规则 7:出生区及其连锁可达范围永不长雾
|
||||
**人话**:这条管玩家的落点安全。开局站立的 3×3 出生区,连同从它出发顺 0 格连锁能自动展开到的范围,永不含任何变异——生成器布置时硬性排除。可达范围由生成期确定性算出(不依赖挖掘系统运行期的展开行为定义),取保守上界:从出生 3×3 经 0 格连锁能扩散到的最大范围(flood 闭包)再外扩 1 格,比挖掘系统实际能展开的范围只大不小。防的是"开局即瞎"与"开局预开雾格";叠加"初始展开无奖励"(定稿口径),初始展开触及雾格在构造上不可能——双保险。
|
||||
|
||||
**举证**:无计算(几何排除)。可达域保守上界构造见 A1 GDD;回验项(挖掘侧实际展开域 ⊆ 生成侧排除域——"构造上不可能"仅在超集关系下成立)登记 A2 GDD 门禁;"初始展开无奖励优先于连锁入库语义"保留(EC4);出生区排除登记验收③。
|
||||
|
||||
#### 规则 8:A4 的代码不写死数字、不掷随机
|
||||
**人话**:这条管数据纪律。变异的全部定义数据放配置表 VariationTable——本 GDD 是该表回填 owner,字段 schema 见 Tuning Knobs 节。A4 相关代码零玩法数值字面量、零随机:布置随机落在棋盘生成器的专用随机流里,A4 自己既不掷随机数也不写死玩法数字,一切读表。
|
||||
|
||||
**举证**:无计算(数据纪律)。schema 定稿与 knob 划分见「Tuning Knobs」节;机器验收 = 静态扫描零命中(AC-7)与字面量人工口径(AC-10)。
|
||||
|
||||
#### 规则 9:新变异将来按同一框架加行,不另起炉灶
|
||||
**人话**:这条管变异框架怎么长出新居民。岩浆、冰冻在 MVP 不建行(CD 门禁:无 MVP 容器),随垂直切片关卡解锁建行;将来某变异需要新规则字段时,走 D2 接口漂移规则同步回写本 GDD 与 D2,不在表外私加字段。精英/Boss 图的全局变异只预留一个"全局"作用域枚举位(scope=global),语义归 C3 GDD 定稿——本 GDD 只保证枚举位存在,不预写语义。
|
||||
|
||||
**举证**:无计算(扩展纪律)。MVP 行集内容事实(恰含 fog 一行)见「枚举·VariationTable 行集」;global 行出现时的 warning 校验见「枚举·VariationTable schema 校验类别」表;接口漂移规则归 D2。
|
||||
|
||||
### 规则 3 的实现参照——生成期布置约束(几何硬边界)
|
||||
|
||||
| 约束项 | 内容 | 执行 / 落点 |
|
||||
|---|---|---|
|
||||
| 雾区格类 | 仅非 0 安全格——区内无雷、无 0 格(非 0 安全格 = 8 邻域含 ≥1 雷) | A1 生成期强制(A4 声明 cell_constraint 数据载体) |
|
||||
| 玩家可见知识 | "雾区无雷" | D5 教学必授 + D1 图例条目(MVP 验收两条) |
|
||||
| 几何硬边界 | 每个雾格必有非雾雷邻居 ⇒ 雾区任意处厚度 ≤2——可判定谓词 ≡ 任意 3×3 窗口非全雾(3×3 实心雾块中心必为 0 格,不可能成雾) | 登记 A1 验收⑫;推导与验算见数值节 |
|
||||
| 面积必要上界 | 雾面积占比存在依赖雷密度的必要上界 f ≤ 8×雷密度——雾区恒为雷集切比雪夫 1-膨胀出的边界带 | 同上 |
|
||||
| 参数域 | "区域数量/尺寸/占比"参数(A1 BoardGenTable 域)必须在此边界内定义 | OQ1 联动;验收⑫⑩ |
|
||||
| 正常形态 | 1~2 格宽雾带是雾的正常形态 | 视觉规格须按最坏宽度验收(AC-9) |
|
||||
| 可推导元知识 | "每个雾格必邻区外雷"由规则可推出 | 按 P1 诚实原则(可推导即可教)纳入教学候选,口径归 D5 裁定 |
|
||||
|
||||
### 规则 4 的实现参照——零特判六面
|
||||
### 零特判六面(既有系统在雾下的表现)
|
||||
|
||||
| 系统行为 | 雾下的行为 | 性质 |
|
||||
|---|---|---|
|
||||
@@ -178,7 +135,7 @@ c 是雾格?
|
||||
| 行动价目 | 挖/旗/移动成本雾内外一致 | A3"地形成本修饰"钩子本 GDD 搁置——启用须回 A3 重议 per-cell 成本接口 |
|
||||
| 结算 | 雾格安全格奖励照常入库与结算 | B1/B4 无需感知雾 |
|
||||
|
||||
### 规则 3/5 的实现参照——雾元知识信息源(玩家可推理、可教的雾知识清单)
|
||||
### 雾元知识信息源(玩家可推理、可教的雾知识清单)
|
||||
|
||||
| 元知识 | 信息源 | 消费方 |
|
||||
|---|---|---|
|
||||
@@ -186,16 +143,30 @@ c 是雾格?
|
||||
| 每雾格必邻区外雷 | Rule 3 结构推论(可推导即可教——P1 诚实原则) | D5 教学候选(口径归 D5 裁定) |
|
||||
| 雾格恒非 0 · 级联止于雾界 | Rule 3 寄生结论 + hide_numbers⇒safe_nonzero 跨字段校验 | D5 教学(防"连锁莫名断了"的被骗感——D1 必含要点) |
|
||||
| 雾边候选域收缩 · 局部更易解 | Rule 5 增益侧(外环雷下界 ⌈k/8⌉) | A1 可推理率建模(双向净效应) |
|
||||
| 雾格成本两态(链可达免费 / 链不可达全价) | 数值节预算注记 | A3/B1 对账;D5 玩家侧保守启发式教学("雾格按全价做预算,连锁白开当惊喜"——链可达性取决于未开 0 格的隐藏拓扑,玩家决策时点不可求值,明教两态反生免费期待、恰触发反向护栏被骗感) |
|
||||
| 雾格成本两态(链可达免费 / 链不可达全价) | 承重数学节预算注记 | A3/B1 对账;D5 玩家侧保守启发式教学("雾格按全价做预算,连锁白开当惊喜"——链可达性取决于未开 0 格的隐藏拓扑,玩家决策时点不可求值,明教两态反生免费期待、恰触发反向护栏被骗感) |
|
||||
| 雾内旗恒空 | Rule 4 旗面(雾区无雷) | D5 教学警示"雾内插旗纯损" |
|
||||
|
||||
## 枚举
|
||||
设计意图:零特判可行的先决条件是"雾里没雷没 0 格"——既有规则对雾全面惰性化靠的是构造而非补丁。
|
||||
|
||||
### VariationTable 行集(MVP 表内容——恰含 fog 一行,AC-1 内容事实断言)
|
||||
## 布置约束与生成期门控
|
||||
|
||||
| 行 | 字段取值 | 产出点 | 语义 |
|
||||
|---|---|---|---|
|
||||
| "fog"(迷雾) | unlock_level=2 · scope=region · info_mask=hide_numbers · cell_constraint=safe_nonzero · biome_tag=[] · counter_item_ids=[] | game-concept 解锁序列:普通数字→迷雾→岩浆/冰冻;本 GDD 回填 D2 | MVP 唯一变异;岩浆/冰冻不建行(CD 门禁:无 MVP 容器),垂直切片随关卡解锁建行 |
|
||||
规则:
|
||||
|
||||
- **Rule 3(承重)**:生成器布置雾区只能选"非 0 安全格"——8 邻里至少含 1 雷的安全格,于是雾区里既无雷、也无 0 格;约束由本 GDD 声明、棋盘生成器在生成期强制执行,谁都不许为布置成功率放宽它;玩家侧的承诺是明牌:"雾区无雷"由教学与图例传达。
|
||||
- **Rule 6**:A4 不拥有布置算法:摆几个雾区、每个多大、摆在哪,与雷图共生,由 A1 生成算法 + BoardGenTable 参数(按关卡×深度两维逐行,A1 回填)决定;布置随机从棋盘生成专用随机流(board_gen 流)取号(RngService scope 绑定),每次生成新扫雷图绑定一次,同种子必出同图;A4 对摆放的唯一参与是资格把关——变异的解锁关号不高于当前关卡序号,才进入这一关的布置候选池。
|
||||
- **Rule 7**:开局站立的 3×3 出生区,连同从它出发顺 0 格连锁能自动展开到的范围,永不含任何变异——生成器布置时硬性排除;可达范围由生成期确定性算出(不依赖挖掘系统运行期的展开行为定义),取保守上界:出生 3×3 经 0 格连锁能扩散到的最大范围(flood 闭包)再外扩 1 格,比挖掘系统实际能展开的范围只大不小(构造见 A1 GDD);防"开局即瞎"与"开局预开雾格",叠加"初始展开无奖励"(定稿口径)后初始展开触及雾格在构造上不可能——双保险;回验项(挖掘侧实际展开域 ⊆ 生成侧排除域——"构造上不可能"仅在超集关系下成立)登记 A2 GDD 门禁。
|
||||
|
||||
### 生成期布置约束(几何硬边界)
|
||||
|
||||
| 约束项 | 内容 | 执行 / 落点 |
|
||||
|---|---|---|
|
||||
| 雾区格类 | 仅非 0 安全格——区内无雷、无 0 格(非 0 安全格 = 8 邻域含 ≥1 雷) | A1 生成期强制(A4 声明 cell_constraint 数据载体) |
|
||||
| 玩家可见知识 | "雾区无雷" | D5 教学必授 + D1 图例条目(MVP 验收两条) |
|
||||
| 几何硬边界 | 每个雾格必有非雾雷邻居 ⇒ 雾区任意处厚度 ≤2——可判定谓词 ≡ 任意 3×3 窗口非全雾(3×3 实心雾块中心必为 0 格,不可能成雾) | 登记 A1 验收⑫;推导与验算见承重数学节 |
|
||||
| 面积必要上界 | 雾面积占比存在依赖雷密度的必要上界 f ≤ 8×雷密度——雾区恒为雷集切比雪夫 1-膨胀出的边界带 | 同上 |
|
||||
| 参数域 | "区域数量/尺寸/占比"参数(A1 BoardGenTable 域)必须在此边界内定义 | OQ1 联动;验收⑫⑩ |
|
||||
| 正常形态 | 1~2 格宽雾带是雾的正常形态 | 视觉规格须按最坏宽度验收(AC-9) |
|
||||
| 可推导元知识 | "每个雾格必邻区外雷"由规则可推出 | 按 P1 诚实原则(可推导即可教)纳入教学候选,口径归 D5 裁定 |
|
||||
|
||||
### 板形参数(A1 BoardGenTable 域——A4 引用不拥有,禁止两表间复制参数,D2 Rule 1)
|
||||
|
||||
@@ -209,16 +180,20 @@ c 是雾格?
|
||||
| 可推理率生成参数 | 同上 | 按雾边双向净效应建模(寂静减项 × 推理锚增项),禁单向补偿——义务形式为 BoardGenTable 域内可判定谓词 | A1(P1 生成端保障核心) |
|
||||
| board_biome | 非空域校验 | F1 输入前提,fail-fast 闭合 | A1(验收⑮) |
|
||||
|
||||
### VariationTable schema 校验类别(诊断封闭枚举)
|
||||
### 状态(定义→布置→生效→消亡)
|
||||
|
||||
| 类别 | 级别 | 触发条件 | 语义 |
|
||||
| 阶段 | 载体 | Owner | 行为 |
|
||||
|---|---|---|---|
|
||||
| 重复键 | 致命 | variant_id 重复 | D2 Rule 6 既有类别 |
|
||||
| unlock_level 域外 | 致命 | unlock_level ∉ [1, 999](含 0) | 域校验 |
|
||||
| 跨字段 hide_numbers⇒safe_nonzero | 致命 | info_mask=hide_numbers ∧ cell_constraint=any | Rule 4"雾格恒非 0 / 级联止于雾格"是承重规则(Rule 3)的寄生结论而非 hide_numbers 的本性——无此校验,未来 hide_numbers + any 行将静默击穿 EC4(连锁不再止于雾格) |
|
||||
| scope=global | warning | MVP 出现 global 行 | 枚举域内合法数据、语义未定稿(C3)——不致命;运行期无消费者故无行为;C3 定稿语义并落地前不得移除该 warning |
|
||||
| 定义(构建期) | VariationTable .tres | D2 承载 / A4 回填 | ConfigDB 加载校验;热重载走 D2 既有门(战斗中拒绝,EC8) |
|
||||
| 布置(生成期) | 棋盘格变体属性 | A1 | 生成新扫雷图时经 board_gen 流取号;unlock_level 门控候选池 + cell_constraint 强制 + 出生区排除 |
|
||||
| 生效(执行期) | 格属性只读查询 | A2 / D1 消费 | 开格时读"是否雾格"决定数字显示与否;零运行时写入 |
|
||||
| 消亡(随图) | 棋盘实例销毁 | A2 | 清图换新图 / 刷新 / 战斗结束——变异属性随棋盘实例消亡,无跨图存续 |
|
||||
|
||||
## 数值结论与推导
|
||||
不变式:A4 无运行时状态机——变异是棋盘格的只读属性,随图生成、随图消亡;生效期零运行时写入、无跨图存续。
|
||||
|
||||
设计意图:决定权切分——"谁有资格出现"归 A4(门控),"摆多大摆哪"归 A1(算法 + 参数);出生区排除的保守上界让 A2 的展开定义保持自由。
|
||||
|
||||
## 承重数学(F1 门控 · 结构推论 · 预算增量 · 条款 5 对账)
|
||||
|
||||
> 口径总纲:本 GDD 无平衡公式——迷雾的全部数量参数(区域数/尺寸/位置/与雷密度及图尺寸的交互)归 A1 BoardGenTable,且须在 Rule 3 结构推论硬边界(厚度 ≤2【≡ 任意 3×3 窗口非全雾】/ f ≤ 8d)内定义。A4 侧定量内容仅三条:F1 门控谓词、结构推论承重数学、雾致预算增量注记。
|
||||
|
||||
@@ -226,16 +201,12 @@ c 是雾格?
|
||||
|
||||
**结论**:pool 是集合谓词(MVP 规模 ≤1)——unlock_level 直接整数比较(无 D2 R1 floor 解析:unlock_level 是定义表列,非进度表行键);biome_tag 空集 = 通配(全 biome 可用),非匹配失败;空池合法,A1 静默布置普通图不报错(验收⑥)。
|
||||
|
||||
#### 推导
|
||||
|
||||
```
|
||||
pool(level_index, board_biome) = { v ∈ VariationTable |
|
||||
(v.unlock_level ≤ level_index) ∧ (v.biome_tag = ∅ ∨ v.biome_tag ∩ board_biome ≠ ∅) }
|
||||
eligible(v, L, B) :⇔ v ∈ pool(L, B) ——成员判定形式(AC-3 消费)
|
||||
```
|
||||
|
||||
**Variables:**
|
||||
|
||||
| 变量 | 类型 | 范围 | 说明 |
|
||||
|---|---|---|---|
|
||||
| level_index | int | ≥1 | 当前关卡序号;与 unlock_level 直接整数比较(无 D2 R1 floor 解析——unlock_level 是定义表列,非进度表行键) |
|
||||
@@ -243,7 +214,7 @@ eligible(v, L, B) :⇔ v ∈ pool(L, B) ——成员判定形式(AC-3
|
||||
| v.biome_tag | StringSet | ∅ 或非空 | ∅ = 通配(全 biome 可用),非匹配失败 |
|
||||
| board_biome | StringSet | 非空 | 当前图 biome 标签集;值域与来源归 A1(BoardGenTable biome 字段,A1 回填)——本 GDD 只声明集合类型语义 |
|
||||
|
||||
- Output Range:pool 为集合(MVP 规模 ≤1);逐项判定输出 bool;空池(如 level 1 雾未解锁)合法——A1 静默布置普通图,不报错(验收⑥)。
|
||||
Output Range:pool 为集合(MVP 规模 ≤1);逐项判定输出 bool;空池(如 level 1 雾未解锁)合法——A1 静默布置普通图,不报错(验收⑥)。
|
||||
|
||||
| level_index | pool | 验算 |
|
||||
|---|---|---|
|
||||
@@ -255,8 +226,6 @@ eligible(v, L, B) :⇔ v ∈ pool(L, B) ——成员判定形式(AC-3
|
||||
|
||||
**结论**:非 0 安全格 ⇒ 每雾格必有非雾雷邻居 ⇒ 雾区任意处厚度 ≤2,可判定谓词 ≡ 任意 3×3 窗口非全雾(度量钉死为窗口谓词而非"直线连续行程 ≤2"——宽 3 对角带无任何全雾 3×3 窗、完全合法,按行程读法会误拒);雾面积占比存在依赖雷密度的必要上界 f ≤ 8×雷密度;k 格雾区外环必含 ≥⌈k/8⌉ 雷(雾形携带雷簇位置信息——雾边 = 推理锚)。
|
||||
|
||||
#### 推导
|
||||
|
||||
```
|
||||
非 0 安全格 ⇔ 8 邻域含 ≥1 雷;雷不可能为雾格(区内无雷)
|
||||
⇒ 每个雾格 x:∃雷 m ∈ N₈(x)(非雾雷邻居)
|
||||
@@ -269,8 +238,6 @@ eligible(v, L, B) :⇔ v ∈ pool(L, B) ——成员判定形式(AC-3
|
||||
外环每格至多邻 8 个雾格 ⇒ |外环雷| ≥ ⌈k/8⌉ ——雾形本身携带雷簇位置信息(Rule 5 增益侧)
|
||||
```
|
||||
|
||||
**Variables:**
|
||||
|
||||
| 变量 | 类型 | 范围 | 说明 |
|
||||
|---|---|---|---|
|
||||
| f | int | ≥0 | 雾格总数(雾面积占比的分子) |
|
||||
@@ -289,8 +256,6 @@ eligible(v, L, B) :⇔ v ∈ pool(L, B) ——成员判定形式(AC-3
|
||||
|
||||
**结论**:雾不改变 AP 价目,但改变清图预算构成,雾格 AP 成本分两态——链可达免费开出(EC4)、链不可达按全价 dig_ap_cost 结算;雾致预算增量 = 链不可达雾格数 × dig_ap_cost,计入清图总预算需求,参与 A1 BoardGenTable 设计期聚合核算(非逐板运行期强制,违例动作 = 修正参数,验收⑤);该增量对 A3 F1 条款 5 仅是可行性输入、不提供雾成本显著性保证——局限如实登记。
|
||||
|
||||
#### 推导
|
||||
|
||||
```
|
||||
价目不变:挖/旗/移动成本雾内外一致(零特判,Rule 4)
|
||||
雾格 AP 成本两态:
|
||||
@@ -301,8 +266,6 @@ eligible(v, L, B) :⇔ v ∈ pool(L, B) ——成员判定形式(AC-3
|
||||
总预算可用量与全量校验(全量待挖下界 ≤ 可用预算)口径归 A1/A3 契约,非本 GDD 定义
|
||||
```
|
||||
|
||||
**Variables:**
|
||||
|
||||
| 变量 | 类型 | 范围 | 说明 |
|
||||
|---|---|---|---|
|
||||
| 链不可达雾格数 | int | ≥0 | A1 生成期计算并输出(B1 条款 5 对账输入的生产者义务——验收⑤) |
|
||||
@@ -322,60 +285,62 @@ eligible(v, L, B) :⇔ v ∈ pool(L, B) ——成员判定形式(AC-3
|
||||
| 信息腿 | 雾边寂静减少推理原料(推高弃图)与雾边推理锚增益(Rule 5)方向相反——净效应实测、非定理("50/50 减少可能反向利好清图"成立,"必然推高弃图"不采纳) | 双向 |
|
||||
| AP 腿 | 链不可达雾格全价无连锁折扣,抬高清图成本——敌方结算时间税随之上行 | 推高弃图 |
|
||||
|
||||
- 雾面积占比与链不可达占比为 B1 条款 5 对账输入变量(链不可达占比的生产者义务 = A1 生成期计算输出——验收⑤,防输入变量有名无源)。
|
||||
- B1 闭合对账须雾板/无雾板两态分别验算支配性不等式(A3 provisional 验算只在无雾图形况做过)+ 两条方向性护栏:① 雾板净当量优势带上界(雾板 vs 无雾板 EV 差的容许带——防福利方向);② 防钓鱼方向(与 A3 OQ6 防钓鱼约束对账):雾板下界抬升不得使"弃图刷雾板"支配"即刷"——逐板奖励差分 × 最低雾出现率 × 8 RAP 刷新会构造出 A3 OQ6 明令防的刷新钓鱼环,解法(关卡层常量锚 / 防钓鱼不等式 / 与 OQ6 显式对账)归 B4/B1。
|
||||
- playtest 弃图率/完成度指标雾板分层观测(注记回执 A3 OQ3——聚合指标会被雾板污染或反向掩盖)。
|
||||
对账契约要点:
|
||||
|
||||
## 状态
|
||||
1. 雾面积占比与链不可达占比为 B1 条款 5 对账输入变量;链不可达占比的生产者义务 = A1 生成期计算输出(验收⑤)——防输入变量有名无源。
|
||||
2. B1 闭合对账须雾板/无雾板两态分别验算支配性不等式——A3 provisional 验算只在无雾图形况做过。
|
||||
3. 两条方向性护栏:①雾板净当量优势带上界(雾板 vs 无雾板 EV 差的容许带——防福利方向);②防钓鱼方向(与 A3 OQ6 防钓鱼约束对账):雾板下界抬升不得使"弃图刷雾板"支配"即刷"——逐板奖励差分 × 最低雾出现率 × 8 RAP 刷新会构造出 A3 OQ6 明令防的刷新钓鱼环;解法(关卡层常量锚 / 防钓鱼不等式 / 与 OQ6 显式对账)归 B4/B1。
|
||||
4. playtest 弃图率/完成度指标雾板分层观测(注记回执 A3 OQ3——聚合指标会被雾板污染或反向掩盖)。
|
||||
|
||||
| 阶段 | 载体 | Owner | 行为 |
|
||||
## 边界情况(EC1–EC11)
|
||||
|
||||
| 条件 | 行为 |
|
||||
|---|---|
|
||||
| EC1 候选池为空(雾未解锁如 level 1,或 biome_tag 全不匹配) | A1 静默布置普通数字图——空池合法、非错误、无 warning(两种来源同待遇)。依据 F1 Output Range / 验收⑥ |
|
||||
| EC2 cell_constraint 无解(非 0 安全格面积或连通分量尺寸不足以布置任何雾区——图太小 / 雷太密 / 雷太稀致雷膨胀皮肤碎裂 / 参数要求过高;判据含连通性而非仅总面积——雾域恒为雷集边界带,总面积充足但碎裂成小分量时同样无解) | 本次布置雾的尝试失败 → 跳过雾布置,本图为合法无变异图(A1 生成算法的降级产物);禁止放宽约束硬塞——Rule 3 承重规则不为布置成功率让步;部分达成契约:BoardGenTable 要求 N 区而仅达成 k<N(k=0 即本条主判据)时,尽力布置已可行分量、实际达成区数按 shortfall 分级上报——雾量是难度轴,不得静默偏离参数值(level 2 雾解锁关恰为小图低密高发关——静默降级会系统性落空 P4"解锁新变异"推进感且无指标可查)。依据验收⑦⑬⑭ |
|
||||
| EC3 雾区邻接出生 3×3 | 允许——约束谓词 = 出生 3×3 格集及其生成期可计算的初始展开可达域内无变异格(Rule 7),邻接本身不构成违反;初始展开是否 flood-fill 传播归 A2 定稿、A4 不预设——Rule 7 生成期可达域排除使该未定行为无害化:无论 A2 最终如何定义展开,开局都不可能预开雾格。依据 Rule 7 / 验收⑨ |
|
||||
| EC4 连锁传播开到雾格 | 雾格被开出(免费——连锁展开零价,含链开的雾格)、无数字显示、级联自然停止(雾格非 0 格不传播)——零特判的自然结果("不传播"≠"不被开",本条即链可达雾格免费开出的规则落点);连锁开的雾格照常计入清图进度、奖励照常入库;"级联自然停止"由 hide_numbers⇒safe_nonzero 跨字段校验保证(未来 hide_numbers + any 行不得静默击穿本条)。依据 Rule 4 / A2×4① |
|
||||
| EC5 玩家在雾格插旗 | 合法、耗 1 AP、旗照常立在未开雾格上;轮末判定恒不中(雾区无雷)——判定逻辑零特判自然覆盖;前瞻推论:若 A2 期实测引入标错惩罚,雾内旗按"非雷格上的旗"恒受罚(一致性推论,无 A4 特判)——D5 教学须警示"雾内插旗纯损"。依据 A2×4② / OQ7 |
|
||||
| EC6 探测道具作用于雾区(A5 期生效) | 效果 = 未开雾格数字显影(恢复推理原料,非排雷——雾内无雷可排);对已开雾格无效(已开格无数字可显);显影时效(临时/永久)归 A5 GDD 定稿。依据 A5 接口预留 / OQ2 |
|
||||
| EC7 VariationTable 出现 scope=global 行(MVP 不应发生) | schema 校验 warning(枚举域内合法数据、语义未定稿)——不致命;运行期无消费者故无行为;C3 定稿语义并落地前不得移除该 warning。依据 schema 校验 / C3 验收项 |
|
||||
| EC8 战斗中热重载修改 VariationTable | 走 D2 既有门(战斗中 reload 拒绝);已布置在当前棋盘上的变异属性不受表重载影响(棋盘实例持有生成期快照,非活引用)。依据 D2 / A2×4④ |
|
||||
| EC9 unlock_level 调参为 1 | 合法 knob 操作(域内、无跨字段耦合)——第一关即遇雾,教学压力前移;D5 教学不得写死"第二关解锁",须跟随表值动态适配。依据调参表 / D5 |
|
||||
| EC10 雾区覆盖全部非 0 安全格(极端参数) | 规则上合法、参数域上拒绝——最大雾占比须 < 全覆盖并被 BoardGenTable 参数校验拒绝(雾占比上限 × 可推理率下限联动不等式,可判定谓词形式);呈现注记:该构型下 0 格连锁仍会预开雾口袋(EC4),实际为"0 格岛 + 已开无字雾口袋 + 链不可达全价雾残段"的拼合,非"全图近无数字"。依据验收⑩ |
|
||||
| EC11 两个雾区相邻 | 规则上仍是两个独立布置实例(各有独立布置身份与独立 board_gen 取号);呈现合并为一片归 D1 渲染域,无规则歧义;定向粒度:counter_item_ids 是 variant 行级(类型级)字段——两实例共享同一 fog 行清单,实例级定向在现 schema 下不存在;若 A5 期需要实例级定向,走新字段(非本表 knob)。依据验收⑪ / A5 期注记 |
|
||||
|
||||
## 呈现与 UI 契约
|
||||
|
||||
视觉身份锚三条硬约束(game-concept 定稿)+ D1 呈现义务:
|
||||
|
||||
| # | 约束 / 义务 | 内容 | 归属 |
|
||||
|---|---|---|---|
|
||||
| 定义(构建期) | VariationTable .tres | D2 承载 / A4 回填 | ConfigDB 加载校验;热重载走 D2 既有门(战斗中拒绝,EC8) |
|
||||
| 布置(生成期) | 棋盘格变体属性 | A1 | 生成新扫雷图时经 board_gen 流取号;unlock_level 门控候选池 + cell_constraint 强制 + 出生区排除 |
|
||||
| 生效(执行期) | 格属性只读查询 | A2 / D1 消费 | 开格时读"是否雾格"决定数字显示与否;零运行时写入 |
|
||||
| 消亡(随图) | 棋盘实例销毁 | A2 | 清图换新图 / 刷新 / 战斗结束——变异属性随棋盘实例消亡,无跨图存续 |
|
||||
| 1 | 形状+颜色双通道(视觉锚 2) | 未开雾纹理不能只靠色相(原型紫色)区分——必须绑定形状冗余(图标/纹理图案),色弱可辨;形状方案归 art-bible(排期门禁:D1 GDD 前创建至少 §1–4,登记见 systems-index 门禁增补记录——AC-9 阈值委托的违约判定挂此门);art-bible 缺位期以原型 v3 紫色迷雾格为临时明度基线,AC-9 今日即可评估,art-bible 就位后强制复测 | art-bible / D1 |
|
||||
| 2 | 绘制优先级固定(视觉锚 3) | 数字 > 小人 > 旗 > 变异纹理 > 底色——雾纹理不得干扰雾外数字辨识;已开雾格 = 地板无字(不留雾残留遮蔽) | D1 |
|
||||
| 3 | 调色板交换优先(视觉锚 4) | 雾纹理须支持 biome 色板变体(biome_tag 字段的换皮对应)——新 biome 不新增雾资产,只换色板 | art-bible |
|
||||
| 4 | 边界可读性 = 硬指标 | 未开雾格的区域边界在任何色板下必须可读——"明处的选择"幻想的视觉前提(P1 诚实边界的呈现面),与"数字可读性 × 暗色氛围"样张测试(game-concept 风险登记第 1 条)同批验证;原型 v3 紫色迷雾格已验证基线可读性,正式色值/形状归 art-bible 格子样张测试定稿 | art-bible / D1 |
|
||||
| 5 | "雾区无雷"知识的静态传达 | D1 MVP 验收两条 + 必含要点枚举(义务清单 D1-①②③)——D5 里程碑在 Alpha,雾在 MVP level 2 即首遇,D1 是 MVP 唯一活载体(对比 A1×15/A2×4,本知识此前零验收落点) | D1 |
|
||||
| 6 | 已开雾格负空间与结束拍 | 已开雾格 = 地板无字(负空间呈现,防误读为 bug)+ 底色层 tint 残留与雾区全开一次性完成信号(D1 验收候选——"站在洞口前"承诺的结束拍与清图进度可读;tint 处于视觉锚 3 最低层,与视觉锚 2"不留雾残留遮蔽"的冲突口径:遮蔽禁的是遮挡数字/实体的雾残留,tint 是底色层标记不犯此条;转正与否及完成信号粒度(视觉合并域 = 信号单元,禁实例级双响)归 OQ8 裁决) | D1 |
|
||||
| 7 | 结算与 HUD 负空间 | 结算界面无 A4 附加项(雾格奖励 = 普通安全格奖励,无独立归因类别——P2 标注归 B1);无 HUD 常显字段(变异是棋盘属性非资源,与 A3 的 AP/RAP 不同) | B1 / D1 |
|
||||
| 8 | 动效与音频 | 雾格开出瞬间的"雾散"过渡(可选,MVP 不承诺)归 B5/D1 表现里程碑,非 A4 义务;无音频需求(雾开出音效归 D4 Alpha 期) | B5 / D4 |
|
||||
|
||||
不变式:A4 无运行时状态机——变异是棋盘格的只读属性,随图生成、随图消亡;生效期零运行时写入、无跨图存续。
|
||||
## 依赖与输出
|
||||
|
||||
## 边界情况
|
||||
| 方向 | 系统 | 性质 | 接口要点 |
|
||||
|---|---|---|---|
|
||||
| 上游 | D2 | hard | VariationTable schema 承载与 ConfigDB 读取(唯一玩法上游;本 GDD 为该表回填 owner,8 字段 schema 见调参表节);新字段走接口漂移规则 |
|
||||
| 上游 | A3 | 相邻契约 | 零运行时接口消费(Foundation 层;A3"地形成本修饰"价目钩子本 GDD 搁置——启用须回 A3 重议 per-cell 成本接口);预算注记在文档层引用 `ap_per_round` / `dig_ap_cost` 两值(承重数学节与调参表跨 GDD 引用);A3 F1 条款 5 对账三腿入账见承重数学节,登记 B1 强制检查点输入项 |
|
||||
| 下游 | A1 | hard | 候选池门控(F1)+ cell_constraint 生成期强制 + 出生区及其生成期可达域排除(保守上界 = flood 闭包外扩 1 格);区域数量/尺寸/位置参数归 BoardGenTable(A1 回填,本 GDD 不定数值)且须在厚度 ≤2 / f ≤ 8d 硬边界内定义;布置随机经 board_gen 流;可推理率生成参数按雾边双向净效应建模(禁单向补偿)——共 15 项登记 A1 验收(义务清单 A1-①…⑮,缺项即 blocking) |
|
||||
| 下游 | A2 | hard | 变体属性只读查询(开格时决定数字显示与否)+ 零特判原则(A2 执行逻辑无变异分支——义务是"不加分支"而非"加处理");雾格开启结果照常上报(安全格)——登记 A2 验收四项(义务清单 A2-①…④,缺项即 blocking) |
|
||||
| 下游 | A5 | soft(垂直切片) | counter_item_ids 消费 + 探测类道具语义 = 雾内数字显影(恢复推理原料,非排雷,EC6);悬空引用校验 + 条件性夹具随 A5 首个道具 id 回填(D2"首个引用字段 owner 补"条款的 A4 侧兑现) |
|
||||
| 下游 | B1 | soft(注记级) | 运行期结算不感知变异(雾格奖励 = 普通安全格奖励);设计期 F1 条款 5 对账输入:三腿入账 + 雾板/无雾板两态验算 + 两条方向性护栏(优势带 / 防钓鱼)+ playtest 指标雾板分层(义务清单 B1-1) |
|
||||
| 下游 | B4 | soft | 雾区奖励内容/密度归 B4 表 + A1 参数;三条定价硬约束(义务清单 B4-①②③,B4 GDD 验收项);定价成本口径按链不可达雾格计(承重数学节注记);奖励预知方案(创意风险 #1)A4 侧切面已定:雾不额外隐藏内容,预知归 B4 呈现 + A5 探测 |
|
||||
| 下游 | C3 | soft(垂直切片) | scope=global 枚举位(精英/Boss 图全局变异);global 行出现前须先定稿语义(MVP warning 校验);落地时重审 cell_constraint 覆盖与零特判原则是否仍成立(含 hide_numbers⇒safe_nonzero 跨字段校验相容性) |
|
||||
| 下游 | D1 | soft | 雾纹理呈现规格(区域边界可读 / 形状+颜色双通道 / 绘制优先级 / 已开雾格 = 地板无字)+ MVP 验收两条与必含要点枚举(义务清单 D1-①②③)+ 已开雾格 tint / 雾区全开完成信号(验收候选,OQ8)+ 已开雾格与 0 格可判定区分(0 格携带"八邻无雷"推理信息,视觉混淆会污染推理——tint 为当前唯一区分手段,转正与否随 OQ8 裁决) |
|
||||
| 下游 | D5 | soft | "雾区无雷"教学口径 + 教学要点(雾 = 盲区不赌命 · 雾内旗恒空 · 清图含雾格 · 雾内无连锁折扣(连锁止于雾界属正常)· 雾格成本两态的玩家侧保守启发式)+ "每雾格必邻区外雷"教学候选(口径归 D5 裁定)+ 解锁序列动态适配(EC9——教学文案不得写死解锁关号) |
|
||||
|
||||
| 条件 | 行为 | 依据 |
|
||||
|---|---|---|
|
||||
| EC1 候选池为空(雾未解锁如 level 1,或 biome_tag 全不匹配) | A1 静默布置普通数字图——空池合法、非错误、无 warning(两种来源同待遇) | F1 Output Range / 验收⑥ |
|
||||
| EC2 cell_constraint 无解(非 0 安全格面积或连通分量尺寸不足以布置任何雾区——图太小 / 雷太密 / 雷太稀致雷膨胀皮肤碎裂 / 参数要求过高;判据含连通性而非仅总面积——雾域恒为雷集边界带,总面积充足但碎裂成小分量时同样无解) | 本次布置雾的尝试失败 → 跳过雾布置,本图为合法无变异图(A1 生成算法的降级产物);禁止放宽约束硬塞——Rule 3 承重规则不为布置成功率让步;部分达成契约:BoardGenTable 要求 N 区而仅达成 k<N(k=0 即本条主判据)时,尽力布置已可行分量、实际达成区数按 shortfall 分级上报——雾量是难度轴,不得静默偏离参数值(level 2 雾解锁关恰为小图低密高发关——静默降级会系统性落空 P4"解锁新变异"推进感且无指标可查) | 验收⑦⑬⑭ |
|
||||
| EC3 雾区邻接出生 3×3 | 允许——约束谓词 = 出生 3×3 格集及其生成期可计算的初始展开可达域内无变异格(Rule 7),邻接本身不构成违反;初始展开是否 flood-fill 传播归 A2 定稿、A4 不预设——Rule 7 生成期可达域排除使该未定行为无害化:无论 A2 最终如何定义展开,开局都不可能预开雾格 | Rule 7 / 验收⑨ |
|
||||
| EC4 连锁传播开到雾格 | 雾格被开出(免费——连锁展开零价,含链开的雾格)、无数字显示、级联自然停止(雾格非 0 格不传播)——零特判的自然结果("不传播"≠"不被开",本条即链可达雾格免费开出的规则落点);连锁开的雾格照常计入清图进度、奖励照常入库;"级联自然停止"由 hide_numbers⇒safe_nonzero 跨字段校验保证(未来 hide_numbers + any 行不得静默击穿本条) | Rule 4 / A2×4① |
|
||||
| EC5 玩家在雾格插旗 | 合法、耗 1 AP、旗照常立在未开雾格上;轮末判定恒不中(雾区无雷)——判定逻辑零特判自然覆盖;前瞻推论:若 A2 期实测引入标错惩罚,雾内旗按"非雷格上的旗"恒受罚(一致性推论,无 A4 特判)——D5 教学须警示"雾内插旗纯损" | A2×4② / OQ7 |
|
||||
| EC6 探测道具作用于雾区(A5 期生效) | 效果 = 未开雾格数字显影(恢复推理原料,非排雷——雾内无雷可排);对已开雾格无效(已开格无数字可显);显影时效(临时/永久)归 A5 GDD 定稿 | A5 接口预留 / OQ2 |
|
||||
| EC7 VariationTable 出现 scope=global 行(MVP 不应发生) | schema 校验 warning(枚举域内合法数据、语义未定稿)——不致命;运行期无消费者故无行为;C3 定稿语义并落地前不得移除该 warning | schema 校验 / C3 验收项 |
|
||||
| EC8 战斗中热重载修改 VariationTable | 走 D2 既有门(战斗中 reload 拒绝);已布置在当前棋盘上的变异属性不受表重载影响(棋盘实例持有生成期快照,非活引用) | D2 / A2×4④ |
|
||||
| EC9 unlock_level 调参为 1 | 合法 knob 操作(域内、无跨字段耦合)——第一关即遇雾,教学压力前移;D5 教学不得写死"第二关解锁",须跟随表值动态适配 | Tuning Knobs / D5 |
|
||||
| EC10 雾区覆盖全部非 0 安全格(极端参数) | 规则上合法、参数域上拒绝——最大雾占比须 < 全覆盖并被 BoardGenTable 参数校验拒绝(雾占比上限 × 可推理率下限联动不等式,可判定谓词形式);呈现注记:该构型下 0 格连锁仍会预开雾口袋(EC4),实际为"0 格岛 + 已开无字雾口袋 + 链不可达全价雾残段"的拼合,非"全图近无数字" | 验收⑩ |
|
||||
| EC11 两个雾区相邻 | 规则上仍是两个独立布置实例(各有独立布置身份与独立 board_gen 取号);呈现合并为一片归 D1 渲染域,无规则歧义;定向粒度:counter_item_ids 是 variant 行级(类型级)字段——两实例共享同一 fog 行清单,实例级定向在现 schema 下不存在;若 A5 期需要实例级定向,走新字段(非本表 knob) | 验收⑪ / A5 期注记 |
|
||||
开放问题 OQ1–8 全量登记于推演件 `design/gdd/analysis/a4-terrain-variation.md`。
|
||||
|
||||
## 依赖
|
||||
|
||||
**上游**:
|
||||
|
||||
| 系统 | 性质 | 接口要点 |
|
||||
|---|---|---|
|
||||
| D2 | hard | VariationTable schema 承载与 ConfigDB 读取(本 GDD 为该表回填 owner,8 字段 schema 见 Tuning Knobs 节);新字段走接口漂移规则 |
|
||||
| A3 | 相邻契约 | 零运行时接口消费(Foundation 层;A3"地形成本修饰"价目钩子本 GDD 搁置——启用须回 A3 重议 per-cell 成本接口);预算注记在文档层引用 `ap_per_round` / `dig_ap_cost` 两值(数值节与 Tuning Knobs 跨 GDD 引用);A3 F1 条款 5 对账三腿入账见数值节,登记 B1 强制检查点输入项 |
|
||||
|
||||
**下游**:
|
||||
|
||||
| 依赖方 | 性质 | 接口 |
|
||||
|---|---|---|
|
||||
| A1 | hard | 候选池门控(F1)+ cell_constraint 生成期强制 + 出生区及其生成期可达域排除(保守上界 = flood 闭包外扩 1 格);区域数量/尺寸/位置参数归 BoardGenTable(A1 回填,本 GDD 不定数值)且须在厚度 ≤2 / f ≤ 8d 硬边界内定义;布置随机经 board_gen 流;可推理率生成参数按雾边双向净效应建模(禁单向补偿)——共 15 项登记 A1 验收(义务清单 A1-①…⑮,缺项即 blocking) |
|
||||
| A2 | hard | 变体属性只读查询(开格时决定数字显示与否)+ 零特判原则(A2 执行逻辑无变异分支——义务是"不加分支"而非"加处理");雾格开启结果照常上报(安全格)——登记 A2 验收四项(义务清单 A2-①…④,缺项即 blocking) |
|
||||
| A5 | soft(垂直切片) | counter_item_ids 消费 + 探测类道具语义 = 雾内数字显影(恢复推理原料,非排雷,EC6);悬空引用校验 + 条件性夹具随 A5 首个道具 id 回填(D2"首个引用字段 owner 补"条款的 A4 侧兑现) |
|
||||
| B1 | soft(注记级) | 运行期结算不感知变异(雾格奖励 = 普通安全格奖励);设计期 F1 条款 5 对账输入:三腿入账 + 雾板/无雾板两态验算 + 两条方向性护栏(优势带 / 防钓鱼)+ playtest 指标雾板分层(义务清单 B1-1) |
|
||||
| B4 | soft | 雾区奖励内容/密度归 B4 表 + A1 参数;三条定价硬约束(义务清单 B4-①②③,B4 GDD 验收项);定价成本口径按链不可达雾格计(数值节注记);奖励预知方案(创意风险 #1)A4 侧切面已定:雾不额外隐藏内容,预知归 B4 呈现 + A5 探测 |
|
||||
| C3 | soft(垂直切片) | scope=global 枚举位(精英/Boss 图全局变异);global 行出现前须先定稿语义(MVP warning 校验);落地时重审 cell_constraint 覆盖与零特判原则是否仍成立(含 hide_numbers⇒safe_nonzero 跨字段校验相容性) |
|
||||
| D1 | soft | 雾纹理呈现规格(区域边界可读 / 形状+颜色双通道 / 绘制优先级 / 已开雾格 = 地板无字)+ MVP 验收两条与必含要点枚举(义务清单 D1-①②③)+ 已开雾格 tint / 雾区全开完成信号(验收候选,OQ8)+ 已开雾格与 0 格可判定区分(0 格携带"八邻无雷"推理信息,视觉混淆会污染推理——tint 为当前唯一区分手段,转正与否随 OQ8 裁决) |
|
||||
| D5 | soft | "雾区无雷"教学口径 + 教学要点(雾 = 盲区不赌命 · 雾内旗恒空 · 清图含雾格 · 雾内无连锁折扣(连锁止于雾界属正常)· 雾格成本两态的玩家侧保守启发式)+ "每雾格必邻区外雷"教学候选(口径归 D5 裁定)+ 解锁序列动态适配(EC9——教学文案不得写死解锁关号) |
|
||||
|
||||
### 跨 GDD 义务清单(systems-index 门禁记录——对侧 GDD 门禁评审逐项核对落位,缺项即 blocking)
|
||||
### 跨 GDD 义务清单(对侧 GDD 门禁评审逐项核对落位,缺项即 blocking)
|
||||
|
||||
| 编号 | 内容 | 对侧 | 状态 |
|
||||
|---|---|---|---|
|
||||
@@ -410,37 +375,45 @@ eligible(v, L, B) :⇔ v ∈ pool(L, B) ——成员判定形式(AC-3
|
||||
| A5-1 | counter_item_ids 首个道具 id 回填 + 悬空引用校验 + 条件性夹具补全(D2"首个引用字段 owner 补"条款兑现) | A5 | 已登记(A5 期) |
|
||||
| D5-1 | "雾区无雷"教学口径 + 要点集(雾=盲区不赌命 / 雾内旗恒空 / 清图含雾格 / 无连锁折扣·止于雾界正常 / 成本两态保守启发式)+ "每雾格必邻区外雷"教学候选 + 解锁动态适配(EC9) | D5 | 已登记 |
|
||||
|
||||
- 双向一致性核对(systems-index 依赖分层表):A1 ← A4, D2 ✅ · A2 ← A1, A3, A4 ✅ · A5 ← A2, A4, B4 ✅ · Foundation 层含 A4、无上游 ✅——无单向依赖遗漏;C3 与 A4 的关系(精英/Boss 图全局变异)由本节显式化,不与索引冲突。
|
||||
双向一致性核对(systems-index 依赖分层表):A1 ← A4, D2 ✅ · A2 ← A1, A3, A4 ✅ · A5 ← A2, A4, B4 ✅ · Foundation 层含 A4、无上游 ✅——无单向依赖遗漏;C3 与 A4 的关系(精英/Boss 图全局变异)由本节显式化,不与索引冲突。
|
||||
|
||||
## 呈现与 UI 契约
|
||||
## P0 最小闭环
|
||||
|
||||
视觉身份锚三条硬约束(game-concept 定稿)+ D1 呈现义务:
|
||||
1. A1 生成新扫雷图:求 F1 候选池(unlock_level ≤ 当前关卡序号且 biome_tag 匹配才入池)——池空则静默出普通图(无变异,EC1)。
|
||||
2. 池非空则在可行域(非 0 安全格)内布置雾区:硬边界逐项成立(厚度 ≤2 / f ≤ 8×雷密度 / 雾占比 < 全覆盖 / 出生 3×3 及可达域排除 / board_gen 流取号);不可行则降级为合法无变异图(EC2)。
|
||||
3. 玩家开局:出生区及连锁可达域永无雾;看见雾区边界(专属纹理)——边界可见、内容隐蔽。
|
||||
4. 玩家挖格或 0 格连锁传播至雾格:A2 只读查询变体属性——雾格照常开出、不显示数字;连锁来源免费、单格挖掘全价 dig_ap_cost(两态)。
|
||||
5. 连锁路由决策:玩家安排挖掘顺序让 0 格连锁免费吃掉雾格;链不可达雾残段权衡"全价续付清图"还是"停手/弃图"(A3 风险退出;垂直切片起再加"是否用道具买情报",A5)。
|
||||
6. 雾格计入清图进度、安全格奖励照常入库;既有系统零变异分支;雾内插旗合法但轮末判定恒不中。
|
||||
7. 清图判定含雾格——全部安全格(含雾格)开满即触发清图结算;链不可达占比等生成期输出回流 B1 条款 5 对账。
|
||||
|
||||
| # | 约束 / 义务 | 内容 | 归属 |
|
||||
|---|---|---|---|
|
||||
| 1 | 形状+颜色双通道(视觉锚 2) | 未开雾纹理不能只靠色相(原型紫色)区分——必须绑定形状冗余(图标/纹理图案),色弱可辨;形状方案归 art-bible(排期门禁:D1 GDD 前创建至少 §1–4,登记见 systems-index 门禁增补记录——AC-9 阈值委托的违约判定挂此门);art-bible 缺位期以原型 v3 紫色迷雾格为临时明度基线,AC-9 今日即可评估,art-bible 就位后强制复测 | art-bible / D1 |
|
||||
| 2 | 绘制优先级固定(视觉锚 3) | 数字 > 小人 > 旗 > 变异纹理 > 底色——雾纹理不得干扰雾外数字辨识;已开雾格 = 地板无字(不留雾残留遮蔽) | D1 |
|
||||
| 3 | 调色板交换优先(视觉锚 4) | 雾纹理须支持 biome 色板变体(biome_tag 字段的换皮对应)——新 biome 不新增雾资产,只换色板 | art-bible |
|
||||
| 4 | 边界可读性 = 硬指标 | 未开雾格的区域边界在任何色板下必须可读——"明处的选择"幻想的视觉前提(P1 诚实边界的呈现面),与"数字可读性 × 暗色氛围"样张测试(game-concept 风险登记第 1 条)同批验证;原型 v3 紫色迷雾格已验证基线可读性,正式色值/形状归 art-bible 格子样张测试定稿 | art-bible / D1 |
|
||||
| 5 | "雾区无雷"知识的静态传达 | D1 MVP 验收两条 + 必含要点枚举(义务清单 D1-①②③)——D5 里程碑在 Alpha,雾在 MVP level 2 即首遇,D1 是 MVP 唯一活载体(对比 A1×15/A2×4,本知识此前零验收落点) | D1 |
|
||||
| 6 | 已开雾格负空间与结束拍 | 已开雾格 = 地板无字(负空间呈现,防误读为 bug)+ 底色层 tint 残留与雾区全开一次性完成信号(D1 验收候选——"站在洞口前"承诺的结束拍与清图进度可读;tint 处于视觉锚 3 最低层,与视觉锚 2"不留雾残留遮蔽"的冲突口径:遮蔽禁的是遮挡数字/实体的雾残留,tint 是底色层标记不犯此条;转正与否及完成信号粒度(视觉合并域 = 信号单元,禁实例级双响)归 OQ8 裁决) | D1 |
|
||||
| 7 | 结算与 HUD 负空间 | 结算界面无 A4 附加项(雾格奖励 = 普通安全格奖励,无独立归因类别——P2 标注归 B1);无 HUD 常显字段(变异是棋盘属性非资源,与 A3 的 AP/RAP 不同) | B1 / D1 |
|
||||
| 8 | 动效与音频 | 雾格开出瞬间的"雾散"过渡(可选,MVP 不承诺)归 B5/D1 表现里程碑,非 A4 义务;无音频需求(雾开出音效归 D4 Alpha 期) | B5 / D4 |
|
||||
## P1 / P2 后置
|
||||
|
||||
## Tuning Knobs
|
||||
| 优先级 | 内容 | 后置原因 |
|
||||
|---|---|---|
|
||||
| P1 | 岩浆/冰冻变异建行 | MVP 无容器(CD 门禁);变异框架已就位、加行即用,随垂直切片关卡解锁建行;P3 雷险维度由其承接(OQ5) |
|
||||
| P1 | 探测道具消费 counter_item_ids(EC6 显影) | A5 期生效;显影时效/定价归 A5 GDD 定稿(OQ2) |
|
||||
| P1 | scope=global 全局变异语义 | C3 语义未定稿;MVP 仅预留枚举位 + warning 校验(OQ4) |
|
||||
| P2 | "雾散"开出过渡动效 | 可选,MVP 不承诺——归 B5/D1 表现里程碑,非 A4 义务 |
|
||||
| P2 | 雾开出音效 | D4 Alpha 期 |
|
||||
| P2 | A3"地形成本修饰"per-cell 价目钩子 | 本 GDD 搁置——启用须回 A3 重议 per-cell 成本接口 |
|
||||
| P2 | 首遇提示"一生一次"作用域 | MVP 每 run 一次(无持久化设施);存档级归 Alpha D3/C4 后重议 |
|
||||
| P2 | 变异解锁曲线复核 | "每关至少引入一个新元素"的推进节奏随 C3 难度曲线定稿复核(OQ6) |
|
||||
|
||||
## 调参表
|
||||
|
||||
### VariationTable schema 定稿(D2 回写义务——本 GDD 为回填 owner)
|
||||
|
||||
| 字段 | 类型/范围 | 默认(fog 行) | knob | 说明 |
|
||||
|---|---|---|---|---|
|
||||
| variant_id | String(主键) | "fog" | ✗ | 变异标识;A1 候选池与 A2 查询的键 |
|
||||
| display_name | String | "迷雾" | ✗ | 图例/教学用名(本地化归 D6) |
|
||||
| unlock_level | int [1, 999] | 2 | ✓ | 首次可布置关卡序号(game-concept 解锁序列:普通数字→迷雾→岩浆/冰冻);本表为定义表(数值恒定)非进度成长表,键 = variant_id,进度语义承载于此列——D2 Rule 4 豁免,语义写入 schema 注释 |
|
||||
| scope | enum {region, global} | region | ✗ | 作用域;global 仅预留枚举位(语义归 C3,MVP 不产生 global 行) |
|
||||
| info_mask | enum {none, hide_numbers} | hide_numbers | ✗ | 信息规则:该变异隐藏什么;新信息规则走接口漂移 |
|
||||
| cell_constraint | enum {any, safe_nonzero} | safe_nonzero | ✗ | 布置约束:允许落在什么格子上——Rule 3 承重规则的数据载体,A1 生成期强制执行 |
|
||||
| biome_tag | StringList 可空 | [] | ✓ | 关联 biome 主题(AD 门禁换皮约束);空 = 全 biome 可用 |
|
||||
| counter_item_ids | StringList 默认空 | [] | ✗ | 可穿透该变异的 A5 道具清单(预留,A5 期回填——探测=雾内数字显影);非平衡 knob(内容回填字段,与"结构冻结"归类一致) |
|
||||
| 字段 | 域 | 默认(fog 行) | knob | owner | 说明 |
|
||||
|---|---|---|---|---|---|
|
||||
| variant_id | String(主键) | "fog" | ✗ | A4 回填 / D2 承载 | 变异标识;A1 候选池与 A2 查询的键 |
|
||||
| display_name | String | "迷雾" | ✗ | A4 回填 / D2 承载 | 图例/教学用名(本地化归 D6) |
|
||||
| unlock_level | int [1, 999] | 2 | ✓ | A4 回填 / D2 承载 | 首次可布置关卡序号(game-concept 解锁序列:普通数字→迷雾→岩浆/冰冻);本表为定义表(数值恒定)非进度成长表,键 = variant_id,进度语义承载于此列——D2 Rule 4 豁免,语义写入 schema 注释 |
|
||||
| scope | enum {region, global} | region | ✗ | A4 回填 / D2 承载 | 作用域;global 仅预留枚举位(语义归 C3,MVP 不产生 global 行) |
|
||||
| info_mask | enum {none, hide_numbers} | hide_numbers | ✗ | A4 回填 / D2 承载 | 信息规则:该变异隐藏什么;新信息规则走接口漂移 |
|
||||
| cell_constraint | enum {any, safe_nonzero} | safe_nonzero | ✗ | A4 回填 / D2 承载 | 布置约束:允许落在什么格子上——Rule 3 承重规则的数据载体,A1 生成期强制执行 |
|
||||
| biome_tag | StringList 可空 | [] | ✓ | A4 回填 / D2 承载 | 关联 biome 主题(AD 门禁换皮约束);空 = 全 biome 可用 |
|
||||
| counter_item_ids | StringList 默认空 | [] | ✗ | A4 回填 / D2 承载 | 可穿透该变异的 A5 道具清单(预留,A5 期回填——探测=雾内数字显影);非平衡 knob(内容回填字段,与"结构冻结"归类一致) |
|
||||
|
||||
### knob 效应与真 owner
|
||||
|
||||
@@ -450,8 +423,8 @@ eligible(v, L, B) :⇔ v ∈ pool(L, B) ——成员判定形式(AC-3
|
||||
| biome_tag(fog 行) | [](全 biome 可用) | 收窄出现范围——某些 biome 无雾,多样性下降 | ——(空集即基线,无"更低") |
|
||||
|
||||
- 非 knob 字段(结构冻结):scope(MVP 恒 region——开放 global 是 C3 的语义义务而非调参)、info_mask / cell_constraint(fog 行值即规则定义本身,修改 = 改规则,须走本 GDD 修订流程而非调参)、counter_item_ids(A5 期内容回填,非平衡 knob)。
|
||||
- Knob 交互与真 owner 指向:迷雾的实际手感参数——区域数量 / 区域尺寸 / 雾面积占比 / 与雷密度的联动——全部在 A1 BoardGenTable((level_index, node_depth) 维度,A1 回填),那是难度曲线的函数;A4 的表只管"资格";禁止在两表间复制参数(单一事实源,D2 Rule 1);unlock_level 与 BoardGenTable 的难度轴正交(门控定"谁入池",表参数定"摆多大/摆哪"——systems-designer 审查确认无冲突)。
|
||||
- 跨 GDD 引用:A3 的 `ap_per_round`(8)与 `dig_ap_cost`(1)均归 A3 所有,本 GDD 不重复列出;雾致预算增量构成仅消费 dig_ap_cost(数值节注记),清图总预算的可用量口径归 A1/A3 契约。
|
||||
- Knob 交互与真 owner:迷雾的实际手感参数——区域数量 / 区域尺寸 / 雾面积占比 / 与雷密度的联动——全部在 A1 BoardGenTable((level_index, node_depth) 维度,A1 回填),那是难度曲线的函数;A4 的表只管"资格";禁止在两表间复制参数(单一事实源,D2 Rule 1);unlock_level 与 BoardGenTable 的难度轴正交(门控定"谁入池",表参数定"摆多大/摆哪"——systems-designer 审查确认无冲突)。
|
||||
- 跨 GDD 引用:A3 的 `ap_per_round`(8)与 `dig_ap_cost`(1)均归 A3 所有,本 GDD 不重复列出;雾致预算增量构成仅消费 dig_ap_cost(承重数学节注记),清图总预算的可用量口径归 A1/A3 契约。
|
||||
|
||||
## 验收标准
|
||||
|
||||
@@ -461,7 +434,7 @@ eligible(v, L, B) :⇔ v ∈ pool(L, B) ——成员判定形式(AC-3
|
||||
|---|---|
|
||||
| 测试载体 | `godot --headless --script`(承 D2 冒烟框架;脚本 extends SceneTree、autoload 显式实例化)——A4 是定义层系统,冒烟域 = 定义层(schema / 门控谓词 / 校验);布置层 = A1 集成(15 项,义务清单 A1-①…⑮)· 执行层 = A2 集成(4 项,义务清单 A2-①…④)——deferral 以对侧登记为生效条件,A1×15 / A2×4 清单已同步 systems-index 门禁记录 |
|
||||
| 致命用例协议 | 独立进程协议承 D2 AC-2b(runner manifest 逐条登记"调用→期望退出码";单进程内只做测试通道收集断言) |
|
||||
| 夹具注入 | 经 `--data-root` 注入,五根齐备(3 根致命错误夹具 + 1 根 warning 夹具 + 1 根合法数据变体夹具,见下表) |
|
||||
| 夹具注入 | 经 `--data-root` 注入,五根齐备(3 根致命错误夹具 + 1 根 warning 夹具 + 1 根合法数据变体夹具,见夹具清单) |
|
||||
| 期望值推导纪律 | 由表值推导不写死——unlock_level 与 biome_tag 均为 knob,推导纪律适用两者(防 EC9 及 biome_tag 调参假失败) |
|
||||
| 诊断卫生 | 每用例先 `reset_diagnostics()`(承 D2 冒烟协议,全局声明) |
|
||||
| runner manifest | 四行退出码登记:dup→≠0 · oob→≠0 · mask→≠0 · global→0(biome_tag 根仅进程内测试通道消费、无退出码行,AC-3 前置断言其零诊断加载) |
|
||||
@@ -494,23 +467,11 @@ eligible(v, L, B) :⇔ v ∈ pool(L, B) ——成员判定形式(AC-3
|
||||
| AC-9 | (人工·视觉)边界可读 / 双通道 / 色板变体 | 归 art-bible 格子样张测试(AD 门禁),非冒烟域——阈值委托的排期门与违约判定挂 systems-index 门禁增补记录;art-bible 缺位期以原型 v3 紫色为临时明度基线,就位后强制复测 | 操作化口径("可读"须为可判定谓词,防形容词验收):① 形状通道 = 色板无关线稿资产 + 对全部底色的明度对比数值下限(阈值 art-bible 定、须存在);② 新增 biome 色板强制重跑样张清单(AD 门禁复测项);③ 样张须含最坏用例:宽度 1 雾带(每格即全边界——Rule 3 结构推论下的正常形态)、"旗 × 雾纹理 × 边界"三重叠加格、宽度 1 雾带两侧毗邻数字格(视觉锚 1"纹理不干扰数字辨识"的真实威胁面在邻格——雾格自身无数字) | 呈现契约 1/4 |
|
||||
| AC-10 | (人工·字面量)A4 文件集 | 纳入 D2 AC-14 项目级扫描 | 人工三要素口径,引用不另设(与 A3 AC-10b 同型) | Core Rule 8 |
|
||||
|
||||
## 开放问题
|
||||
|
||||
| # | 问题 | owner | 时机 |
|
||||
|---|---|---|---|
|
||||
| 1 | 雾面积/数量参数回填与 P1 验证:BoardGenTable 雾区域数/尺寸/占比默认值——须在厚度 ≤2(≡ 任意 3×3 窗口非全雾)/ f ≤ 8d 硬边界内定义,含最低雾出现率与降级率埋点口径;可推理率参数按雾边双向净效应建模;雾占比与可推理率的联动曲线(A1 的 P1 生成端保障核心 + 本 GDD 15 项验收的数值侧);占比参数双重身份:难度旋钮 × 情报旋钮——雾形携带雷簇位置信息(Rule 5 推理锚),占比/数量调参同时改变"雾 = 雷簇探测器"强度与首遇显著度(总占比/最大区域尺寸下限口径随 BoardGenTable 一并定,防首关雾低于注意阈值致 P4 解锁拍哑火) | A1 | 第 5 位 |
|
||||
| 2 | 探测显影的时效与定价:EC6 留白——临时/永久显影、道具成本、counter_item_ids 首个回填 + 悬空引用校验补全(D2 条件性夹具义务兑现) | A5 | 第 11 位 |
|
||||
| 3 | 创意风险 #1 的 B4 侧兑现:奖励预知的呈现方案(A4 侧切面已定——雾不额外隐藏内容);雾区奖励在效果当量对照表的落位——受三条定价硬约束(B4-①②③),成本口径按链不可达雾格计;①的 per-AP 平价与②③的定量谓词归 B4/B1 对账闭合 | B4 | 第 8 位 |
|
||||
| 4 | scope=global 语义:精英/Boss 图全局变异的构成、施加时机、与零特判原则及 cell_constraint 覆盖的相容性重审(C3-1) | C3 | 第 12 位 |
|
||||
| 5 | 岩浆/冰冻规则设计:变异框架的下一批居民、P3 雷险维度的承接者;需新字段时走接口漂移规则回写本 GDD 与 D2 | 垂直切片期 | 随关卡解锁建行 |
|
||||
| 6 | 变异解锁曲线复核:"每关至少引入一个新元素"的推进节奏随 C3 难度曲线定稿复核;D5 教学动态适配表值(EC9),不写死解锁关号 | C3 + D5 | 低优先 |
|
||||
| 7 | 标错惩罚与雾内旗:若惩罚上线,雾内旗恒受罚的一致性推论纳入实测观察项(EC5);EC5 推论在 A2 原型会话前置确认(防 D5 教学返工) | A2 前原型小补丁 | 联动 A3 OQ2 |
|
||||
| 8 | 已开雾格 tint / 雾区全开完成信号的裁决:现处"验收候选"悬空态(本 OQ 登记终结悬空);裁决须同时覆盖——与 0 格的可判定区分(0 格 = "八邻无雷"推理信息,视觉混淆污染推理——tint 为当前唯一区分手段)与 EC11 合并呈现下的完成信号粒度(视觉合并域 = 信号单元,禁实例级双响) | D1 + CD | D1 GDD 前 |
|
||||
|
||||
## 版本历史
|
||||
|
||||
| 版本 | 日期 | 改动 |
|
||||
|---|---|---|
|
||||
| v2 | 2026-09-14 | 两件套格式迁移:按模板 v2 拆分——本文只装结论,公式推导论证/数值锚定论证/候选方案取舍/体验锚点论证/已裁决争议与开放问题 OQ1–8 迁 `design/gdd/analysis/a4-terrain-variation.md`;规则改编号人话句、边界情况改条件\|行为两列表;全部规则、数值、AC/EC/义务清单/OQ 编号原样保留,零规则变更 |
|
||||
| v1.0-lean | 2026-09-13 | 格式迁移:legacy 原稿按 lean 样例(docs/lean-gdd-sample-b1.md)重排——正文修订注记剥离收敛至本表;速览/体验锚点/枚举/义务台账/开放问题转表格,布置与揭示流程转字符画;F1 门控谓词、厚度 ≤2 / f ≤ 8d 结构推论、雾致预算增量公式本体与验算全保留;语义与 2026-09-08 定稿对齐,零规则变更 |
|
||||
| rev2 | 2026-09-08 | 同日 re-review 六项 blocking 同日核销(CD 终裁建议 delta 核销免第三轮 full 评审,用户拍板照此放行——A3 先例):① systems-index 登记闭环补全(A1×15 全枚举——⑤扩链不可达占比生产者义务、⑬扩部分达成、⑭增批量统计断言形式条款,A2×4、D1×2、B4×3、B1 条款 5 输入,registry referenced_by 补 B1/B4);② knob 口径统一(counter_item_ids 非 knob 误标修正、AC-1 改双 knob 表读值断言、AC-8 排除 mvp_content/fog_ap_note);③ 校验与 AC 可执行性(新增第五夹具 variation_mask_constraint、manifest 第四行、AC-3 夹具根零诊断前置、AC-2 钉死默认表根);④ 修订残留失实清理("探路"改连锁路由 + 续付/退出两轴、雾格成本两态口径、厚度钉死 3×3 窗口谓词防对角带误拒、夹具计数改 3 致命 + 1 warning + 1 合法、预算改增量构成——原"≤ 轮数上限 × ap_per_round"不等式作废("轮数上限"在 A3 契约无定义、恒真空转)、Upstream 改零运行时接口消费);⑤ B4 约束簇(②改链不可达同分母口径——原"雾面积"分母脱钩作废、增③防福利上界、防钓鱼张力对账 A3 OQ6、①per-AP 平价注记);⑥ MVP 验收契约(D1 必含要点补"雾格不传播连锁"、首遇提示谓词改"首个含雾板进入可操作状态"——原"雾格首次与已开区相邻"作废(贴脸雾 t=0 即真、远雾图滞后)、一次性作用域 = 每 run、EC2 部分达成契约、A1⑤ 设计期聚合校验);顺带:D5 成本教学改玩家侧保守全价启发式、Rule 7 可达域保守上界 + A2 展开域 ⊆ A1 排除域回验、OQ1 占比双重身份、新增 OQ8、AC-9 补 art-bible 指针与宽度 1 雾带邻格用例——明细见 review log |
|
||||
| rev1 | 2026-09-08 | full 独立评审(game-designer · systems-designer · qa-lead · economy-designer · level-designer · ux-designer 六专员 + creative-director 终裁)八项 blocking 同日核销:① 可推理率对账公理自相矛盾 + Rule 5 单向建模——改双向净效应、厚度 ≤2 / f ≤ 8d / ⌈k/8⌉ 结构推论入文(登记 A1 验收);② Player Fantasy"三选项"失实——改诚实版(雾 = 清图必经段、绕开 = A3 风险退出、买情报标注 A5 期)+ B4 两条定价硬约束 + P3 降格"信息切面"("清图判定豁免雾格"选项经裁决否决——违反零特判承重规则);③ "雾格全部全价"半假——改链不可达两态口径;④ EC2 判据扩连通分量 + 降级率埋点与最低雾出现率义务;⑤ EC3 预设 A2 未定义行为——Rule 7 可达域生成期确定性计算、邻接合法结论保留;⑥ AC 四处硬伤(AC-1 写死 unlock_level=2 等)+ deferral 闭环——A1 清单 11→15 扩容并登记 systems-index 门禁记录;⑦ EC11 定向粒度改 variant 行级、实例级定向归 A5 期新字段;⑧ "雾区无雷"教学零 MVP 落点——登记 D1 MVP 验收两条 + AC-9 操作化;顺带:hide_numbers⇒safe_nonzero 跨字段校验、EC10 升格参数域拒绝、已开雾格 tint 完成信号候选、"跨雾推理"措辞降调——明细见 review log |
|
||||
|
||||
@@ -40,25 +40,20 @@ A5 是挖掘期的信息与行动力市场:道具从 B4 奖励池获取(安
|
||||
获取(install 期身份预分配——B4 域)
|
||||
B4 roll_board → 格奖励身份含 aux 行(category=aux_item 激活后)
|
||||
▼
|
||||
挖掘期开出资格格 → 结算授予段 B1 grant(cell)
|
||||
│ 返回 category=aux_item → B1 路由 A5.add_item(不入 B4 库存——两库存正交)
|
||||
开出资格格 → B1 grant 返回 aux_item → 路由 A5.add_item(两库存正交,不入 B4 库存)
|
||||
▼
|
||||
A5 关卡域库存(跨轮/跨图/跨战斗延续;D1 常读条)
|
||||
▼
|
||||
使用(挖掘阶段·Active 相位,D1 使用意图 → 组合根 → B1 编排——唯一调用权)
|
||||
│ ① 相位 gate(非 Active → 拒绝)
|
||||
│ ② A5.validate_use(handle, target)——目标校验读 A2 只读面
|
||||
│ 失败 ⇒ 全链拒绝、零消耗(无效/零信息目标反馈 D1)
|
||||
│ ③ 逐 kind 效果应用(顺序钉死:空间 kind 先、ap_grant 后):
|
||||
│ 空间 kind → A5.apply_overlay(板级叠加层写入)
|
||||
│ ap_grant → A3.grant_ap(当轮 remaining_ap += magnitude)
|
||||
│ ④ A5.consume(handle)——Used 不可逆、回执 = 快照投影 + 来源
|
||||
使用(挖掘期 Active 相位,D1 意图 → 组合根 → B1 编排——唯一调用权)
|
||||
① 相位 gate(非 Active → 拒绝)
|
||||
② validate_use(读 A2 只读面;失败 ⇒ 全链拒绝、零消耗)
|
||||
③ 逐 kind 应用(空间先、ap_grant 后):apply_overlay / A3.grant_ap
|
||||
④ consume——Used 不可逆、回执 = 快照投影 + 来源
|
||||
▼
|
||||
D1 命令式回执(重查 query_inventory / query_overlays 刷新呈现)
|
||||
D1 重查 query_inventory / query_overlays 刷新呈现
|
||||
▼
|
||||
消亡:board retire(cleared 换图 / RAP 刷新 / 战斗结束)
|
||||
→ B1 编排 A5.retire_overlays(与 B4 retire_mapping 同点)
|
||||
关卡结束 → B1 编排 A5.clear_inventory(与 B4 clear_inventory 同点 + 清空反馈计数)
|
||||
消亡:board retire(换图/RAP 刷新/战斗结束)→ B1 编排 retire_overlays(与 B4 同点)
|
||||
关卡结束 → B1 编排 clear_inventory(与 B4 同点 + 清空反馈计数)
|
||||
```
|
||||
|
||||
| 出口 | 触发 | 动作序列 | 约束 |
|
||||
|
||||
@@ -0,0 +1,191 @@
|
||||
# A3 行动经济 设计推演
|
||||
|
||||
> 状态:concluded · 本文只装"为什么"——design.md 只收本文的结论。
|
||||
> 修订时新增问题节,不删旧节(历史即依据)。
|
||||
> 源件:本文由 `design/gdd/legacy-2026-09-14-v1/a3-action-economy.md`(v1.0-lean 全文,2026-09-13)按两件套 v2 标准迁移——公式推导过程、数值锚定论证、候选方案取舍、体验锚点论证、已裁决的设计争议全部收编于此;design 件只收结论。
|
||||
|
||||
## 问题:收益为什么以战斗效果直兑,而不是折算成抽象资源点?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:抽象资源点 + 折算乘数(迁移前旧案)——停手剩余 AP ×2 折算战斗收入(stop_multiplier)、清图剩余 AP ×1 折算(clear_multiplier)、F1 持有折算公式,另有 F2 挖/停/清激励不等式。收益:扫雷产出与战斗数值可直接对话,结算侧自由度大。代价:多一层抽象当量与折算率要维护,扫雷收益与战斗效果两层皮,对账链路长。
|
||||
- 候选 B:战斗效果直兑(现行)——安全格→主角 buff、标中旗→怪物 debuff、踩雷→敌方增益、清图发奖励,直接进轮次结算明细;无抽象点数、无乘数,折算公式根本不存在。收益:账本语义单一(A3 只记账 AP/RAP)、收益来源在明细里逐项可见。代价:收益"当量"的统一标尺必须由对账契约兜底——即 F1 五条款 + B1 效果档位对照表。
|
||||
- 候选 C:旗带口袋/背包实物双态(旧案)——旗作为可携带资源储蓄。收益:旗可攒、可转移。代价:与"标中旗当轮结算"冲突,滋生囤积与重插套利,稀缺性语义模糊。
|
||||
|
||||
### 深度分析
|
||||
|
||||
- 旧折算案被 2026-09-07 三轮评审整体击穿:F2(挖/停/清激励不等式)被发现两条数学缺陷——博弈树错误、缺风险项——裁决是"不再修复而是移除病灶",原 F1 折算公式与 F2 整体作废,改写为五条款并钉死 B1 闭合 owner。
|
||||
- 同日用户拍板的配套结构:停手改 1:1 转存 RAP(×2 与 stop_multiplier 删除)、清图剩余 AP 作废(×1 与 clear_multiplier 删除)、旗子单态(口袋旗双态删除,数量无上限,稀缺性由 AP 机会成本承载)、标中旗兑付资格以雷格实例为键(拔旗重插同一雷格不恢复已消费资格——堵死每轮 2 AP 的重插农场)。
|
||||
- 直兑案的对账代价可控:效果侧只需一张效果档位对照表(条款 1)与两条锚(条款 2/3/5),全部登记为 B1 GDD 验收项/强制检查点(systems-index 门禁 ①–⑤);playtest 复核归 OQ3,当量归一归 OQ1。
|
||||
- round_end 消息因此可以做到零折算数值:进结算明细的收益全部是具体战斗效果,来源归因标注由 B1 承担(P2"规划的延迟兑现"依赖这份逐项可见性)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
定论:全部扫雷收益以战斗效果直兑,无抽象点数、无折算乘数——折算公式不存在;旗为棋盘单态标记、兑付资格认雷不认旗;对账由 F1 五条款约束效果侧(B1 闭合)。design 件「配置纪律与效果直兑」「旗与账本入口」「经济契约与数值」三节只保留该结论。
|
||||
|
||||
## 问题:四根支柱怎样落到机制承诺上?(体验锚点论证)
|
||||
|
||||
### 广度分析
|
||||
|
||||
- P1 "我算对了"的节拍器,关键词"推理免费,兑现花 AP":候选落点 A——把推理本身计费;候选落点 B——推理免费、只对兑现收 AP(现行)。B 使取舍落点在构成选择(确定动作供给 >8 时先兑现哪些)与轮末尾巴(赌不确定格 vs 停手攒 RAP);供给 ≤8 时确定动作可近乎无代价延后(棋盘跨轮存续)。
|
||||
- P2 "规划的延迟兑现",关键词"收手换退出权":每个安全格的 buff 当场入库、结算明细可见(B1 归因标注);停手改产风险退出权——面对纯盲猜,攒 RAP 换一张新图是"我不赌"的体面出口。
|
||||
- P3 "风险与收益同源",关键词"承诺有重量":三向效果映射使同源原则具象——标中旗削弱敌人、踩雷强化敌人、挖安全格强化自己;旗无数量上限,稀缺性由 AP 机会成本承载;挖已插旗格须先拔旗(EC11)。
|
||||
- P4 "地牢氛围",关键词"边缘探索免费":小人移动免费、挖/旗限 8 向相邻——服务"边缘探索"的地牢感而非经济杠杆,移动成本不是调参对象;点击摩擦护栏归 A2/D1 观测(每消耗 1 AP ≤ 2 次点击)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
- A3 是玩家 agency 的计量器:AP 不减少总点击量,而是把点击摊销进多个轮次并插入结算节拍;真正的决策压缩器是连锁展开(1 次点击兑现一片区域)与停手(放弃剩余格子换风险退出权)。执行归 A2、兑付归 B1、显示归 D1——A3 只做统一成本语言。
|
||||
- 8 向相邻限制约束的是当轮几何而非总量——跨轮小人可走遍全图;连锁富集区插旗成本放大、死 RAP 态碎片区趋零,条件性对冲归 OQ2(标错惩罚双重职责:误标税 + 停手轮/死 RAP 态下旗滥用的唯一价格)。
|
||||
- 预算把节奏从"点完为止"改为"每轮取舍";无 chord(双击快开)是有意偏离经典扫雷——保护"每格兑现都花 AP"的预算意义;正确标雷缺一键兑现节拍已登记 CD 创意风险 #3(与 #2 高光缺失合并归 B1/B4)。
|
||||
- 终局碎片区的零风险收尾可能跨轮完成,是节奏阀的有意代价;决策密度由 A1 供给兜底、监测归 OQ3。
|
||||
|
||||
### 综合判断
|
||||
|
||||
五条体验承诺(P1–P4 各落一句)进入 design 件「设计目的」;锚点到机制的映射以承诺句承载,论证与条件性对冲全部留在本节,不再进正文。
|
||||
|
||||
## 问题:价目为什么均匀 1 AP、移动与连锁免费、无 chord?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:差异化价目(按地形/动作分档)——收益:经济层次丰富;代价:MVP 阶段无实测支撑,调参面爆炸,规则无法一句话讲清。
|
||||
- 候选 B:均匀 1 AP(现行)——挖/插/拔同价,规则可一句话讲清;异质性钩子(地形成本修饰)为 A4 预留。
|
||||
- 移动收费 vs 免费:免费(冻结 0)服务 P4 边缘探索氛围;收费会把探索变成经济决策,与支柱定位矛盾。
|
||||
- 连锁收费 vs 免费:免费(冻结 0)——连锁是推理放大器,一次正确推断免费兑现成一整片区域,连锁开的格计入清图进度。
|
||||
|
||||
### 深度分析
|
||||
|
||||
- 数值全部有原型锚:AP=8 来自原型 v2 实测(12 点方案被否决);连锁免费为原型 v2 定稿;统一行动经济(挖/插/拔均限相邻、拔旗 1 AP 条文读法确认)为原型 v3 定稿;三向效果与清图奖励结构同批落位(game-concept 定稿)。
|
||||
- 无 chord 的取舍:经典扫雷双击快开会让"正确标雷"一键兑现整片,绕开逐格 AP 预算——预算的决策意义被架空;执行归 A2,A3 只负责"每格兑现都必须花 AP"的定价口径。
|
||||
- 拔旗 1 AP 的边界推论:挪旗 = 插+拔合计 2 AP,相对"直接改插他格"多耗的 1 AP 即"防免费重排"的有意代价(EC3/EC7);挖已插旗格须先拔旗(EC11)——旗是"别挖这里"的承诺标记,挖旗格合法化会催生零风险滥用。
|
||||
|
||||
### 综合判断
|
||||
|
||||
价目冻结为现行五行的结构性结论:三个 1 AP(knob)、两个 0(结构冻结);无 chord、限 8 向相邻;均匀价目为有意 MVP 简化。design 件「预算与价目」只留结论,原型实测史与本节取舍理由不再进正文。
|
||||
|
||||
## 问题:停手与刷新——RAP 为什么是"风险退出权"而不是收入,退化环健康吗?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:停手 ×2 折算战斗收入(旧案,已删除)——收益:停手直接变现成战力;代价:停手成为最优收入策略,鼓励早停,抽掉挖掘与清图动机。
|
||||
- 候选 B:1:1 转存 RAP、只许换新图(现行)——停手改产风险退出权:RAP 不折算、不兑付任何战斗收益,唯一花法是刷新雷图;停手因此是纯风险管理工具而非收入流。
|
||||
- 刷新时点候选:a) 结算编排期 Waiting 相位代理调用(D4 修订前);b) 挖掘期 Active 相位当场换图(现行,D4 修订)。b 使"发现图烂→立刻止损"的决策链最短,且刷新不终结轮次、无结算段。
|
||||
|
||||
### 深度分析
|
||||
|
||||
- RAP 基线节拍:rap_refresh_cost 默认 8 = ap_per_round——"满 AP 一轮停手 = 恰好一刷"是有意设计的基线节拍;每轮上限 2 次(refresh_cap_per_round 结构位)防连刷;旧板旗随旧板作废(零兑付、旗 AP 不返还)防"刷新前插满旗套利"。
|
||||
- EC6 诚实声明(形态限定版):① 纯停手零挖掘环(停→刷→停)零战斗进账,唯一代价是敌方每轮照常结算(时间税自惩)——该退化形态结构自惩成立;② 但理性玩家的真实风险环是"挖完全部确定格 → 不确定即停 → 攒满刷新":该环有真实战斗进账、零踩雷风险,刹车只有三个——清图奖励弃失(下界由 F1 条款 5 守住)、8 RAP 成本、时间税。本条不声称该环"病灶不存在",其健康性由 F1 条款 5(支配性不等式)+ OQ3 弃图率/完成度指标守门。
|
||||
- D4 修订的代价登记:挖掘期当场刷新无结算发生——原"敌方时间税自惩"半句失效,OQ3 弃图率/刷新率预警阈值联动复核。
|
||||
- 经济注记:刷新价格实际 = rap_refresh_cost + 每轮 2 次上限;挖掘期当场刷新无结算发生——敌方每轮照常结算的时间税不构成刷新本身的隐性成本。
|
||||
|
||||
### 综合判断
|
||||
|
||||
停手是纯风险管理工具、不是战斗收入流;RAP 战斗域生命周期(跨轮跨图保留、battle_over 清零、MVP 无上限);刷新决策前移挖掘期 + 每轮上限 2 次。design 件「RAP 池」节与 EC6 只留结论与指针,退化环诚实声明全文以本节为准。
|
||||
|
||||
## 问题:F1 推导论证与数值锚定——五条款与两条不等式如何得出?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 条款 1 单一当量对照:候选 A 各收益源各自定档——对账自由度高,但分源改率即契约失效,跨来源无法比较;候选 B 单一换算表(现行)——B1 出效果档位对照表,1 最低档安全格 buff = ? 当量,debuff/清图奖励/敌方增益均对照归一。
|
||||
- 条款 2 标中旗锚:锚"严格大于最低档安全格 buff 当量"——否则插旗在最优情形下也只是打平,P3 旗循环经济空心。
|
||||
- 条款 3 挖掘风险不等式:P(安全) × V_safe_lb > P(雷) × V_mine_ub——两端分别锚定 A1 可推理率生成参数(P1 下限)与 B2 惩罚上限表值。
|
||||
- 条款 4 清图奖励 > 0;条款 5 清图 vs 弃图刷新支配性(C ≥ 弃图所节省的期望雷险当量 + Δ轮数 × 敌方结算强度当量)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
- 条款 2 的对照基准须为连锁放大的边际挖掘收益(单 AP 平均挖掘当量,含连锁期望放大)——只对最低档比较会使旗理性萎缩到碎片区;每战标中旗总吞吐(N 旗 = N debuff)无单档上限可依恃,由 B1 按条款 1 对照表对账;插旗挤占清图进度的边际轮成本由 B4 定档时核算,或在其 GDD 声明 MVP 忽略并给理由。
|
||||
- 条款 3 是"可推理率"的经济侧验收形态(可判定谓词):P1 支柱要求 A1 可推理率使玩家能推高 P(安全)——本条款把这一体验要求转写成可验收的数学条件;B1 为单一闭合对账 owner(A1/B2 供给锚值,B1 签字验收)。
|
||||
- 条款 5 推导:若"推到底清图"期望当量 < "确定格挖完即弃图刷新",每图最优解退化为"捞完确定格就弃"——清图高光节拍、B4 差异化插槽、game-concept"图完成"循环全部空心。该环强度与 A1 可推理率反向耦合——可推理率越低(迷雾/终局 50/50 越多),弃图越优,玩家对 P1 失败的理性回应会反过来饿死清图内容;故本条款是 P1 失败模式的经济对冲,与条款 3 共同登记 B1 强制检查点。
|
||||
- 变量锚定来源:P(安全)/P(雷) ← A1 可推理率生成参数(P1 下限决定玩家可达上界);V_safe_lb ← B1 条款 1 效果档位对照表;V_mine_ub ← B2 惩罚上限表值(登记为 B2 GDD 验收项);C ← B4(条款 4 差异化插槽);Δ轮数 ← A1 雷密度/可推理率 × B1 结算强度。
|
||||
- 数值锚定(provisional,随下游表值刷新):条款 2 对照基准下限 1:1(单 AP 平均挖掘当量,含连锁期望放大),B4/B1 定稿校准;条款 3 目标带 = 原型临时值(伏击 +3 / 敌 18HP/4ATK)代默认表给出首版示例,随 B2 表回填刷新;条款 4 清图奖励 +10 临时锚(B4 插槽的 provisional 参考),量级归 B4;条款 5 +10 锚对默认 8 AP 图形况粗验通过,正式锚随 B4/B2/B1 表值定稿。
|
||||
- 域上界注记:dig/flag 上限 8、refresh 上限 64 为 MVP 量级护栏(非推导界),随调参需要修订。
|
||||
|
||||
### 综合判断
|
||||
|
||||
五条款、两条不等式、Variables 锚定表与 provisional 验算值全部保留在 design 件「经济契约与数值」节(公式本体不省);本节只装推导逻辑与锚定论证——为什么锚这些来源、不锚会坏在哪。
|
||||
|
||||
## 问题:调参影响与交互——knob 怎么动、怎么联动、哪里会软锁?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 活 knob 五个:ap_per_round / dig_ap_cost / flag_place_ap_cost / flag_pull_ap_cost / rap_refresh_cost;结构冻结两个:move_ap_cost / chain_ap_cost = 0;结构位一个:refresh_cap_per_round(默认 2,provisional)。
|
||||
- 调参语义候选:单 knob 独立调(会破坏跨字段节拍与预警联动)vs 以比值/联动为单位调(现行纪律)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
- knob 方向效应(原文 Tuning Knobs 调高/调低表全文迁移):
|
||||
|
||||
| Knob | 默认 | 调过高 | 调过低 |
|
||||
|---|---|---|---|
|
||||
| ap_per_round | 8 | 决策带宽膨胀、节奏拖长(原型 v1 的 12 已实测否决);双重身份:满停 RAP 转存随之增大(8→12 使满停一刷后的富余 +4) | "想清楚的事做不完",违反 P1 |
|
||||
| dig_ap_cost | 1 | ——(>1 使"连锁免费"的相对收益畸变,未实测) | 0 = 无预算系统失效(schema 域 [1,8] 拒绝) |
|
||||
| flag_place_ap_cost | 1 | 插旗迟疑,P3 标雷策略萎缩 | 插旗无成本,旗标记泛滥(棋盘噪音) |
|
||||
| flag_pull_ap_cost | 1 | 挪旗昂贵,误标惩罚过重 | 挪旗近免费,承诺无重量(OQ2 复核落点) |
|
||||
| rap_refresh_cost | 8 | 刷新太贵,风险退出权萎缩、盲猜局被迫赌(违反 P1 兜底) | 刷新近免费,图来回刷节奏拖沓;敌方时间税仍自惩但体验烦躁 |
|
||||
|
||||
- Knob 交互:`rap_refresh_cost : ap_per_round` 比值 = "停几轮换一刷"(默认 1:1 = 满停即一刷;该节拍与 OQ3 纯停手预警同源,联动评估);`ap_per_round × 插旗占比` 与 A1 布雷密度共同决定标雷全周期可行性(A1 定稿后强制复核);效果侧健康(F1 五条款)无单一系统 knob 可控——对照表/闭合对账归 B1、惩罚上限归 B2、奖励分支归 B4(对账归 OQ1);刷新率应急阈值(OQ3)的评估须与 B2 结算强度联动,勿独立调参。
|
||||
- 软锁论证(跨字段校验的依据):dig=8 × ap=1 双双落在各自域内,会使挖掘永久不可用、cleared/ap_exhausted 双不可达(软锁循环)——属结构失效而非节奏差异,与"dig 域下限 1 = 零预算系统失效"同族;故跨字段校验(任一动作成本 ≤ ap_per_round)设为 ActionEconomyTable schema `validate()` 加载期致命(D2 Rule 6 fail-fast,无需新增 D2 校验通道),违规夹具登记为 D2 校验双通道条件性夹具(同悬空引用待遇)。
|
||||
- 已冻结项:AP 8 来自原型 v2 实测(12 点被否);移动/连锁 0 成本为结构冻结;RAP 1:1 转存与战斗域生命周期为结构(非 knob,修订走 GDD 流程;跨战斗携带 = OQ7 预留开关);旗数量无上限为结构。
|
||||
|
||||
### 综合判断
|
||||
|
||||
design 件「调参表」只留字段/域/默认/owner 与校验规则;方向效应、比值节拍、跨系统联动与软锁论证收敛于本节,任何 knob 修订前必读本节。
|
||||
|
||||
## 开放问题(原文编号保留,OQ1–OQ7)
|
||||
|
||||
| # | 悬案 | owner | 要点 |
|
||||
|---|---|---|---|
|
||||
| 1 | 效果档位对照表与闭合对账 | B1(第 9 位) | 安全格 buff / 标中旗 debuff / 清图奖励 / 敌方增益的统一当量对照与换算由 B1 GDD 定稿,须满足 F1 五条款;B1 兼任条款 3(挖掘风险不等式)与条款 5(弃图支配性)的单一闭合对账 owner(A1/B2/B4 供给锚值,B1 签字验收),两项均登记 B1 GDD 强制检查点;每战标中旗总吞吐对账归本条;注意与 OQ6 清图奖励插槽区分 |
|
||||
| 2 | 拔旗耗 AP 复核 + 标错惩罚双重职责 | A2 前原型小补丁(与标错惩罚实测合并会话) | 本 GDD 按"拔旗 1 AP、移除标记"定稿;复核改动现已有 knob 落点(`flag_pull_ap_cost`),若实测推翻则调 knob 并回写 registry。标错惩罚现承担双重职责:误标税 + 停手轮/死 RAP 态下旗滥用的唯一价格——RAP 无上限 + 满溢态使碎片区插旗机会成本趋零,"可疑格全插旗、永不拔"的滑向由本惩罚定价;OQ3"停手轮旗动作占比"指标联动观测 |
|
||||
| 3 | playtest 预注册指标 | 垂直切片前置 playtest | 指标:弃图率 = refresh/(clear+refresh)(>30% 观察、>50% 干预——provisional 预注册);刷新时已开格完成度直方图(完成度 <60% 的刷新占比 >50% 即信号);停手轮旗动作占比(>50% 即信号——投机旗/死 RAP 态检测,联动 OQ2);确定动作供给 >8 的轮占比(P1 决策密度兜底监测,与 A1 密度联合验收);刷新率/战斗(>3 次即观察信号,阈值评估与 B2 结算强度联动,勿独立调参);纯停手轮占比(>20–30% 即观察信号);停手时机分布、每轮犹豫时长、终局碎片区(清图完成度 >80%)轮次数。失明声明:刷新率/纯停手占比/碎片区轮次三项对"挖完全部确定格→停→刷"环结构性失明——该环停手轮先挖后停(非纯停手)、温和变体刷新率低、开到 >80% 即弃使碎片区读数反而变低(病态呈现为健康);故增弃图率/完成度直方图/停手轮旗占比前三项直测该环。应急方案(触发后启动):`rap_refresh_cost` 调参 / 刷新冷却(连续刷新须间隔 N 轮)/ 刷新新图保留已开格结构(重议级) |
|
||||
| 4 | AP 耗尽的软提示 | D5(低优先) | 本 GDD 定"AP=0 即收轮";教学若发现新手困惑,加提示不改规则;可扩展覆盖"RAP 达标刷新引导"与"RAP 战斗末清零提示"(D1 清零反馈的对应教学条目) |
|
||||
| 5 | 标中旗兑付语义细化 | B4/B1(A3 硬约束已定稿) | 标中旗 = 怪物 debuff(三向效果定稿);硬约束:兑付一次性、当轮结算、兑付资格以雷格实例为键(每雷本次战斗至多兑付一次,资格随首次兑付消费;放置实例仅为当轮结算载体)、拔旗重插同一雷格不恢复已消费资格(堵重插农场)、禁止逐轮重复兑付;换图后新雷为新实例;档位锚见 F1 条款 2(严格 > 最低档 + 连锁放大边际基准 + 总吞吐对账);标错惩罚归 game-concept 待定问题(OQ2 合并会话,双重职责见 OQ2) |
|
||||
| 6 | 清图奖励差异化插槽 | B4(结构位预留 + A1 上下文) | 清图奖励未来按图类型(biome/tag)分支——B4 奖励表 schema 须预留图类型维度的结构位;A3 只上报 `cleared`,图上下文经 B1 传递、不经 A3;约束:图类型上下文在战斗域内恒定(biome 挂关卡层、不逐图重掷)——否则 `request_refresh` 退化为 biome 重掷钓鱼口;该约束登记 A1/B4 共同验收 |
|
||||
| 7 | RAP 跨战斗生命周期开关 | 垂直切片 knob 复核 | MVP 每场战斗清零;若实测支持跨战斗存蓄(Boss 图连刷策略),须修订 RAP 池规则/EC12 + 登记 D3 持久化归属与 C2 冒险域语义 |
|
||||
|
||||
## 附录 A:对账义务台账已履行行(历史审计)
|
||||
|
||||
原文对账义务登记表中已完成的 #1–3 行移此存档;活契约 #4–9 在 design 件「依赖与输出」节。
|
||||
|
||||
| 编号 | 内容 | 对侧 | 状态 |
|
||||
|---|---|---|---|
|
||||
| 1 | ActionEconomyTable 首轮回填——值侧四项 + registry 登记 | D2 | 已完成 |
|
||||
| 2 | schema 全字段交付(十字段,含 move/chain 冻结字段) | D2 | 已完成 |
|
||||
| 3 | RAP 结构 delta——四字段删除(flags_per_round / flag_unit_cost / stop_multiplier / clear_multiplier)+ `rap_refresh_cost` 新增;D2 Core Rules 表行/Status 行、AC-7 示例值、registry 同步回写 | D2 | 已完成 |
|
||||
|
||||
## 附录 B:去向映射(零丢失审计)
|
||||
|
||||
原文 = `design/gdd/legacy-2026-09-14-v1/a3-action-economy.md`(v1.0-lean 全文)。逐节/逐表落点如下:
|
||||
|
||||
| 原文节 / 表 | 落点 |
|
||||
|---|---|
|
||||
| 头部(状态/版本/支柱/层级/一句话) | design 头部(结论);数值继承史 → 版本历史 v1 行 |
|
||||
| 速览表(定位/拥有/不拥有/上游/下游/硬约束) | design 设计目的 + 系统范围 + 依赖与输出 + 各规则(事实并表承载);agency 计量器定位段 → 本文「体验锚点论证」深度分析 |
|
||||
| 体验锚点表(P1–P4)+ 参考感受行 | design 设计目的承诺 1–5(结论);论证全文 + CD 创意风险 #3 → 本文「体验锚点论证」 |
|
||||
| 全局流程·轮次生命周期字符画 | design 核心循环(原样保留) |
|
||||
| 出口分发表 | design 核心循环·出口分发(原样保留) |
|
||||
| 规则 1(AP 重置)+ 举证 | design 核心规则·预算与价目 规则 1 |
|
||||
| 规则 2(价目)+ 举证 + 统一价目表 | design 预算与价目 规则 2 + 价目表;原型 v2/v3 实测史与 chord 取舍 → 本文「价目为什么均匀」 |
|
||||
| 规则 3(仲裁)+ 同时成立仲裁表 | design 轮次结束与仲裁 规则 1 + 仲裁表(原样) |
|
||||
| 规则 4(停手)+ 举证 | design 轮次结束与仲裁 规则 2 + RAP 池·停手与挖掘期刷新对照表;退化环分析 → 本文「停手与刷新」 |
|
||||
| 规则 5(清图)+ 举证 | design 轮次结束与仲裁 规则 3 |
|
||||
| 规则 6(round_end 消息)+ 消息与权威回发表 | design 轮次结束与仲裁 规则 4 + 枚举表 same_board/new_board 行 + 状态机 Waiting 行(原表三行事实全数并表承载) |
|
||||
| 规则 7(配置纪律)+ 举证 | design 配置纪律与效果直兑 规则 1 + 调参表 |
|
||||
| 规则 8(旗)+ 兑付硬约束表 | design 旗与账本入口 规则 1 + 标中旗兑付硬约束表(原样);定稿依据 → OQ5(本文开放问题) |
|
||||
| 规则 9(账本入口)+ 发射源表 | design 旗与账本入口 规则 2 + round_end 合法发射源表(原样) |
|
||||
| 规则 10(效果直兑)+ 举证 | design 配置纪律与效果直兑 规则 2 + 经济契约与数值节 |
|
||||
| 规则 11(RAP 池)+ RAP 池规则表 + 停手刷新对照表 | design RAP 池 规则 1 + RAP 池细则表 + 对照表(原样);经济注记论证 → 本文「停手与刷新」 |
|
||||
| 枚举表(path_tag/信号/动作/相位) | design 枚举与对外 API(原样) |
|
||||
| 对外 API 面表 | design 枚举与对外 API(原样) |
|
||||
| 数值结论与推导:F1 结论 + 五条款表 | design 经济契约与数值(结论 + 五条款表,条款 2/3/5 论证尾句 → 本文「F1 推导论证与数值锚定」) |
|
||||
| 公式代码块(条款 3/5)+ Variables 表 + 验算项表 | design 公式与验算(原样保留) |
|
||||
| 状态机表 + 不变式 + 输入×相位矩阵 | design 状态机(原样) |
|
||||
| 边界情况表 EC1–EC15 | design 边界情况(编号与行为保留;依据列由 v1 全局规则号改指 v2 章节名;EC6 诚实声明全文 → 本文「停手与刷新」深度分析) |
|
||||
| 依赖上游表 + 下游表 | design 依赖与输出(双向并表) |
|
||||
| 对账义务登记表 #1–3(已完成) | 本文附录 A |
|
||||
| 对账义务登记表 #4–9(活契约) | design 依赖与输出(原样) |
|
||||
| 呈现与 UI 契约表(8 条) | design 呈现与 UI 契约(原样) |
|
||||
| Tuning Knobs schema 表 + 跨字段校验 + 域上界注记 | design 调参表(原样;软锁论证 → 本文「调参影响与交互」) |
|
||||
| knob 调高/调低表 + knob 交互 + 已冻结项 | 本文「调参影响与交互」(深度分析全文迁移) |
|
||||
| 验收标准·测试口径表 + AC 全表(22 条) | design 验收标准(编号不变;AC-6/AC-15 与矩阵内 v1 "Rule N" 字样改指现行章节名) |
|
||||
| 开放悬案表 OQ1–OQ7 | 本文开放问题(编号与全文保留) |
|
||||
| 版本历史(4 行) | design 版本历史(全行保留 + v2 迁移行) |
|
||||
@@ -0,0 +1,160 @@
|
||||
# A4 地形变异 设计推演
|
||||
|
||||
> 状态:concluded · 本文只装"为什么"——design 件只收本文的结论。
|
||||
> 修订时新增问题节,不删旧节(历史即依据)。
|
||||
> 来源注记:本文由 a4-terrain-variation.md v1.0-lean(2026-09-13 定稿)按两件套 v2 标准迁移生成——原文的公式推导论证、数值锚定论证、候选方案取舍、体验锚点论证与已裁决争议集中于此;规则(Rule)/边界(EC)/验收(AC)/义务/开放问题(OQ)编号与原文一致,零规则变更。
|
||||
|
||||
## 问题 1:变异为什么是"配置表一行声明 + 零专属代码",而不是每种变异一套专属逻辑?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:每种变异一个硬编码类/分支——实现直观;但每加一个变异都要改连锁/清图/结算代码,行为组合指数膨胀,"如果是雾格就……"分支必然渗入 A2 热路径。
|
||||
- 候选 B:数据驱动框架——变异是 VariationTable 一行四声明(身份/信息规则/布置约束/作用域),行为改变发生在"信息规则 × 既有系统行为"交集里,框架自身零运行时逻辑;加变异 = 加数据行。
|
||||
- 候选 C:变异做成地形类型 / 地形成本修饰——与 A3 价目钩子耦合,启用须回 A3 重议 per-cell 成本接口;MVP 明确搁置(A3"地形成本修饰"钩子挂起)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
零特判(Rule 4)能成立的先决条件是构造性的:布置约束(Rule 3)保证雾里没雷、没 0 格,于是连锁不传播、数字恒真、旗恒不中——既有系统的"无视"不需要任何补丁,雾格能被"无视"靠的正是这条布置约束。框架的自洽性还要防未来行击穿:跨字段校验 hide_numbers⇒safe_nonzero 的存在理由是"级联止于雾格"是 safe_nonzero 的寄生结论而非 hide_numbers 的本性——若无此校验,未来 hide_numbers + any 行会静默击穿 EC4(连锁不再止于雾格)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
采纳候选 B(Rule 1/8)。扩展纪律两条:需要新规则字段时走 D2 接口漂移规则同步回写本 GDD 与 D2,禁止表外私加字段(Rule 9);scope=global 只保证枚举位存在、不预写语义(归 C3)——语义未定稿前 global 行只触发 warning 不致命(枚举域内合法数据、运行期无消费者故无行为),C3 定稿语义并落地前不得移除该 warning。
|
||||
|
||||
## 问题 2:迷雾的切面为什么是"信息剥夺 + 结构补偿 + 零特判"?清图判定为什么必须含雾格?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:清图判定豁免雾格(雾当可绕过的支线)——经裁决否决(rev1 blocking ②):违反零特判承重规则,且会把"绕开走"变成虚假自由。
|
||||
- 候选 B:雾 = 清图必经段 + 剥夺数字 + 无补偿——纯负体验税(纯 AP 税),触发反向护栏(被骗感)。
|
||||
- 候选 C:雾 = 清图必经段 + 剥夺数字 + 结构补偿(雾形携带雷簇位置)+ "绕开走"的真实形态 = A3 停手/弃图风险退出——现行。
|
||||
|
||||
### 深度分析
|
||||
|
||||
藏的账目只有一样:未开雾格的数字(Rule 5)。补偿不是发放的奖励而是结构送的:每个雾格必邻区外雷、k 格雾区外环必含 ≥⌈k/8⌉ 雷、雾边雷候选域收缩——"雾边 = 推理锚"。rev1 blocking ① 曾发现可推理率对账公理自相矛盾 + Rule 5 被单向建模(只算寂静减项),改判双向净效应、禁单向补偿,义务形式为 BoardGenTable 域内可判定谓词、落 A1 生成端。玩家幻想同步改诚实版(原"三选项"失实):雾是清图必经段、绕开 = A3 风险退出、买情报标注 A5 期;P3 从"雷险载体"降格为"信息切面"——雷险维度由岩浆/冰冻承接(垂直切片起)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
采纳候选 C。"跨雾推理"措辞降调为"常规推理在雾边的延伸、非独立机制"(rev1 顺带修订)——防止被读成第二套推理系统,其体验内核是"隔着雾也算出来了":被雾边已知约束放大的常规推理;进雾每一步是承诺而非计算,与情绪锚点(问题 6)一致。信息剥夺边界(藏数字 / 不藏边界 / 不藏已开格信息 / 不藏奖励入库)是玩家信任的账面:多藏一样就违反 P1 诚实边界,少藏一样就失去变异意义。
|
||||
|
||||
## 问题 3:承重数学怎么推导?厚度度量为什么钉死"3×3 窗口谓词"?F1 为什么是集合谓词?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 厚度度量候选:"直线连续行程 ≤2"(直觉读法)vs"任意 3×3 窗口非全雾"(可判定谓词)——反例:宽 3 对角雾带无任何全雾 3×3 窗、完全合法,按行程读法会误拒合法构型,故钉死窗口谓词。
|
||||
- 面积上界候选:全局拍一个占比上限 vs 从布置约束推导必要上界 f ≤ 8×雷密度——后者给出与雷密度联动、可判定的参数域硬边界。
|
||||
- 外环雷候选:不论证(雾只是盲区)vs 证明 ⌈k/8⌉ 下界——后者是"雾边 = 推理锚"与"禁单向建模"的数学根据。
|
||||
|
||||
### 深度分析
|
||||
|
||||
推导三步(公式本体保留于 design 承重数学节):非 0 安全格 ⇔ 8 邻域含 ≥1 雷且雷不可能为雾格 ⇒ 每个雾格 x 存在非雾雷邻居 m ∈ N₈(x)。由此:① 3×3 全雾窗口的中心格 8 邻全雾 ⇒ 8 邻无雷 ⇒ 中心为 0 格,与约束矛盾 ⇒ 任意 3×3 窗口非全雾 ⟺ 厚度 ≤2(雾区恒为雷集切比雪夫 1-膨胀出的边界带);② 每雾格 ≥1 雷邻居、每雷至多作 8 个雾邻格的见证 ⇒ f ≤ 8×|M|;③ k 格雾区外环承载全部见证、外环每格至多邻 8 个雾格 ⇒ |外环雷| ≥ ⌈k/8⌉。F1 取集合谓词形式:unlock_level 直接整数比较——它是定义表列、非进度表行键,无 D2 R1 floor 解析;biome_tag 空集 = 通配;空池合法是设计态(level 1 静默普通图),不是错误态。
|
||||
|
||||
### 综合判断
|
||||
|
||||
窗口谓词为唯一判定口径(登记 A1 验收⑫);f ≤ 8d 为参数域必要上界、EC10 参数域拒绝与之联动;⌈k/8⌉ 支撑 Rule 5 增益侧与验收④"禁单向建模"。预算侧同理只做可判定谓词:雾占比上限 × 可推理率下限联动不等式(EC10)。
|
||||
|
||||
## 问题 4:雾格成本为什么是两态?预算为什么是"增量构成"?条款 5 对账为什么是三腿入账而非"消解"?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 成本候选 A:雾格全部全价——半假(rev1 blocking ③):链可达雾格经邻接 0 格连锁免费开出(EC4),全价口径系统性高估雾成本;但高估方向是预算安全侧(level-designer 评审发现),故作为玩家侧保守启发式保留教学价值(见问题 6)。
|
||||
- 成本候选 B:两态口径(链可达免费 / 链不可达全价 dig_ap_cost)——现行。
|
||||
- 预算候选:早期版本用"≤ 轮数上限 × ap_per_round"不等式——"轮数上限"在 A3 契约无定义、恒真空转,废弃;改增量构成:雾致预算增量 = 链不可达雾格数 × dig_ap_cost(量纲闭合:格 × AP/格),设计期聚合核算、违例动作 = 修正参数(非逐板运行期强制)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
A3 F1 条款 5(清图 vs 弃图支配性)对账:雷险腿消解(雾区无雷、不产生 50/50 赌雷——"消解"声称仅对此腿成立);信息腿双向(雾边寂静减少推理原料推高弃图 × 雾边推理锚增益方向相反——净效应实测、非定理:"50/50 减少可能反向利好清图"成立,"必然推高弃图"不采纳);AP 腿推高弃图(链不可达全价无连锁折扣,敌方结算时间税随之上行)。三腿入账 = 构成变化而非消解。护栏构造:若雾板下界抬升不设防,逐板奖励差分 × 最低雾出现率 × 8 RAP 刷新恰好构造 A3 OQ6 明令防的"弃图刷雾板"刷新钓鱼环——故 B1 闭合须雾板/无雾板两态分别验算支配性不等式(A3 provisional 验算只做过无雾图形况)+ 雾板净当量优势带上界 + 防钓鱼两条方向性护栏,playtest 弃图率/完成度指标雾板分层(回执 A3 OQ3——聚合指标会被雾板污染或反向掩盖)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
两态 + 增量构成为唯一口径(registry fog_ap_note 同步登记);该增量对条款 5 仅是可行性输入、不提供雾成本显著性保证——局限如实登记。B4 三条定价硬约束是"里面有价值"契约的兜底(两条防税下界 + 一条防福利上界):level 2 首发关小图低密、链免开占比结构性最高,"链免开 + 锚上浮"双白拿的福利板化与"雾 = 免费奖励"先验(后者会在后期雾变厚、全价残段出现时恰触发被骗感护栏)必须同时防;①是反淹没下界、不保证 per-AP 平价(per-AP 检查归 B1/B4 对账);②上浮口径 = 链不可达雾格数 × dig_ap_cost、与定价成本同分母(防原"雾面积"分母脱钩),上浮形态须为关卡层常量或受防钓鱼不等式约束。
|
||||
|
||||
## 问题 5:出生区排除为什么取保守上界?雾区邻接出生区为什么合法?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:按 A2 运行期展开定义精确排除——原稿曾预设 A2 未定义的 flood-fill 传播行为(rev1 blocking ⑤),越权定义他系统行为,被否。
|
||||
- 候选 B:生成期确定性计算保守上界:出生 3×3 经 0 格连锁 flood 闭包再外扩 1 格——任意 A2 展开定义的超集,只大不小——现行。
|
||||
- 候选 C:只排出生 3×3 本体——"开局预开雾格"与"开局即瞎"风险残留。
|
||||
|
||||
### 深度分析
|
||||
|
||||
保守上界把 Rule 7 与 A2 的展开定义解耦:初始展开是否 flood-fill 传播归 A2 定稿、A4 不预设——无论 A2 最终如何定义展开,开局都不可能预开雾格(EC3 邻接合法的"无害化"论证:约束谓词 = 出生 3×3 格集及其生成期可计算的初始展开可达域内无变异格,邻接本身不构成违反)。代价是至多多排除一圈格,布置侧可忽略。A2 侧保留回验义务:挖掘侧实际展开域 ⊆ 生成侧排除域——"构造上不可能"仅在超集关系下成立。叠加"初始展开无奖励"(定稿口径,优先于连锁入库语义)构成双保险。
|
||||
|
||||
### 综合判断
|
||||
|
||||
采纳候选 B。防御目标两个(开局即瞎 / 开局预开雾格),用超集排除 + 无奖励双保险一次覆盖,且不欠 A2 任何行为定义债——正确性收益是构造性的,灵活性成本为零。
|
||||
|
||||
## 问题 6:情绪锚点为什么是"权衡感"?呈现与教学为什么这样分工?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 情绪候选:惊喜/惊吓(开雾出怪、随机惩罚)vs 权衡感(看得见边界的承诺)——后者唯一同时满足 P1 诚实(不骗)与 P2 规划(可预期)。
|
||||
- 教学落点候选:D5 教学系统承 ALL vs D1 界面承 MVP 静态传达——D5 里程碑在 Alpha,雾在 MVP level 2 即首遇;对比 A1×15/A2×4,"雾区无雷"知识此前零验收落点 → D1 是 MVP 唯一活载体(D1 MVP 验收两条 + 必含要点枚举由此而来)。
|
||||
- 视觉候选:仅色相区分(原型紫)vs 形状+颜色双通道 + biome 调色板交换——前者色弱不可辨、新 biome 要新增雾资产。
|
||||
|
||||
### 深度分析
|
||||
|
||||
情绪目标:站在洞口前的权衡感——迷雾不制造惊喜或惊吓,它制造一个看得见边界的承诺:"里面有价值,进去的代价是 AP 溢价与放弃雾格数字这份推理原料"(玩家每轮都在看见并应对变异——直接感知)。参考感受:Into the Breach 的信息诚实(游戏从不用隐藏信息骗你——本作反其道而行,把"信息缺失本身"诚实标注);杀戮尖塔地图的路径承诺(看得见的未知,选定的风险)。
|
||||
|
||||
教学反直觉点:雾格成本两态不照实教——链可达性取决于未开 0 格的隐藏拓扑,玩家决策时点不可求值,明教两态反生免费期待、恰触发反向护栏的被骗感;故教玩家侧保守启发式:"雾格按全价做预算,连锁白开当惊喜"(与问题 4 全价假设的安全侧高估同源)。首遇提示触发谓词取"首个实际含雾格的板进入可操作状态(挖掘阶段开始)"——生成期一次查询即判定,免疫 EC2 降级板误触发与 EC3 贴脸雾 t=0 歧义(rev2 blocking ⑥:原谓词"雾格首次与已开区相邻"有缺陷——贴脸雾 t=0 即真、远雾图滞后);"一次性"作用域 = 每 run 一次(MVP 无持久化设施,存档级"一生一次"归 Alpha D3/C4 后重议)。
|
||||
|
||||
已开雾格 tint 与视觉锚 3"不留雾残留遮蔽"的冲突口径:遮蔽禁的是遮挡数字/实体的雾残留,tint 是底色层标记不犯此条;tint 与完成信号转正与否归 OQ8(完成信号粒度 = 视觉合并域、禁实例级双响——EC11 合并呈现约束;0 格携带"八邻无雷"推理信息,与已开雾格的视觉混淆会污染推理,tint 为当前唯一区分手段)。AC-9 操作化三口径(防形容词验收):①形状通道 = 色板无关线稿资产 + 对全部底色的明度对比数值下限(阈值 art-bible 定、须存在);②新 biome 色板强制重跑样张清单;③样张须含最坏用例——宽度 1 雾带(每格即全边界,Rule 3 结构推论下的正常形态)、"旗 × 雾纹理 × 边界"三重叠加格、宽度 1 雾带两侧毗邻数字格(视觉锚"纹理不干扰数字辨识"的真实威胁面在邻格——雾格自身无数字)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
视觉三硬锚(形状+颜色双通道 / 绘制优先级 数字>小人>旗>变异纹理>底色 / 调色板交换优先——新 biome 不新增雾资产只换色板)+ 边界可读硬指标("明处的选择"幻想的视觉前提,与"数字可读性 × 暗色氛围"样张测试同批验证;原型 v3 紫色迷雾格已验证基线可读性,art-bible 缺位期作临时明度基线、就位后强制复测)。结算与 HUD 取负空间:结算界面无 A4 附加项(雾格奖励 = 普通安全格奖励,无独立归因类别——P2 标注归 B1)、无 HUD 常显字段(变异是棋盘属性非资源,与 A3 的 AP/RAP 不同)。动效音频后置("雾散"过渡归 B5/D1 可选、雾开出音效归 D4 Alpha)。
|
||||
|
||||
## 开放问题(原编号保留)
|
||||
|
||||
| # | 问题 | owner | 时机 |
|
||||
|---|---|---|---|
|
||||
| 1 | 雾面积/数量参数回填与 P1 验证:BoardGenTable 雾区域数/尺寸/占比默认值——须在厚度 ≤2(≡ 任意 3×3 窗口非全雾)/ f ≤ 8d 硬边界内定义,含最低雾出现率与降级率埋点口径;可推理率参数按雾边双向净效应建模;雾占比与可推理率的联动曲线(A1 的 P1 生成端保障核心 + 本 GDD 15 项验收的数值侧);占比参数双重身份:难度旋钮 × 情报旋钮——雾形携带雷簇位置信息(Rule 5 推理锚),占比/数量调参同时改变"雾 = 雷簇探测器"强度与首遇显著度(总占比/最大区域尺寸下限口径随 BoardGenTable 一并定,防首关雾低于注意阈值致 P4 解锁拍哑火) | A1 | 第 5 位 |
|
||||
| 2 | 探测显影的时效与定价:EC6 留白——临时/永久显影、道具成本、counter_item_ids 首个回填 + 悬空引用校验补全(D2 条件性夹具义务兑现) | A5 | 第 11 位 |
|
||||
| 3 | 创意风险 #1 的 B4 侧兑现:奖励预知的呈现方案(A4 侧切面已定——雾不额外隐藏内容);雾区奖励在效果当量对照表的落位——受三条定价硬约束(B4-①②③),成本口径按链不可达雾格计;①的 per-AP 平价与②③的定量谓词归 B4/B1 对账闭合 | B4 | 第 8 位 |
|
||||
| 4 | scope=global 语义:精英/Boss 图全局变异的构成、施加时机、与零特判原则及 cell_constraint 覆盖的相容性重审(C3-1) | C3 | 第 12 位 |
|
||||
| 5 | 岩浆/冰冻规则设计:变异框架的下一批居民、P3 雷险维度的承接者;需新字段时走接口漂移规则回写本 GDD 与 D2 | 垂直切片期 | 随关卡解锁建行 |
|
||||
| 6 | 变异解锁曲线复核:"每关至少引入一个新元素"的推进节奏随 C3 难度曲线定稿复核;D5 教学动态适配表值(EC9),不写死解锁关号 | C3 + D5 | 低优先 |
|
||||
| 7 | 标错惩罚与雾内旗:若惩罚上线,雾内旗恒受罚的一致性推论纳入实测观察项(EC5);EC5 推论在 A2 原型会话前置确认(防 D5 教学返工) | A2 前原型小补丁 | 联动 A3 OQ2 |
|
||||
| 8 | 已开雾格 tint / 雾区全开完成信号的裁决:现处"验收候选"悬空态(本 OQ 登记终结悬空);裁决须同时覆盖——与 0 格的可判定区分(0 格 = "八邻无雷"推理信息,视觉混淆污染推理——tint 为当前唯一区分手段)与 EC11 合并呈现下的完成信号粒度(视觉合并域 = 信号单元,禁实例级双响) | D1 + CD | D1 GDD 前 |
|
||||
|
||||
### 迁移对账注记(外部状态观察——registry / systems-index 所载,非本文裁决)
|
||||
|
||||
- counter_item_ids:design 件行集表保留原值 [](A5 期回填预留);registry `variation_table.mvp_content` 已登记 [probe_dust](A5 GDD 定稿回填,D2 表值与悬空校验激活随 D2/A5 修订批同批落地、回填前为 ∅)——design 件是否随该批同步,待 owner 拍板。
|
||||
- OQ2:registry `a5_aux_items.closures` 与 systems-index 记录其已随 A5 GDD(2026-09-14)收口——fog_reveal = 恢复推理原料非排雷、时效 = 本图持续、首引回填与悬空校验闭环;本文按原文保留开放状态,待 A4 下次修订批核销。
|
||||
- OQ8:systems-index 记录其已于 design/ux/battle.md 裁决(2026-09-12 采纳 tint + 视觉合并域信号单元,D1 义务③"验收候选"转正)——本文按原文保留悬空状态,待 A4 下次修订批核销。
|
||||
- OQ1 数值侧补充:registry A1 条目另载雾占比绝对上限(fog_target_ratio ≤ min(8d, 0.25))与两项达标判据(inferability / inferability_core)——A1 侧后续修订,BoardGenTable 雾参数回填时须一并满足。
|
||||
|
||||
## 附录:历史审计元数据(迁移自原文头部注记)
|
||||
|
||||
- 复核注记:art-director 未经咨询(Lean 模式)——生产前人工复核视觉规格与 art-bible 一致性(creative-director 已在两轮独立评审中终裁幻想节处置)。
|
||||
- lean 门禁(v1 定稿时):systems-designer 审查 Formulas · qa-lead 审查 Acceptance Criteria;作者 = user + agents。
|
||||
- 评审日志:`design/gdd/reviews/a4-terrain-variation-review-log.md`(rev1 八项 + rev2 六项 blocking→修复对照表;明细均见该日志)。
|
||||
- registry 条目:`variation_table` / `variant_pool_gate`(owner = 本系统 GDD;已锁数值以 registry 为准,正文只引用不复述)。
|
||||
|
||||
## 去向映射(零丢失对账)
|
||||
|
||||
| 原文(v1.0-lean)章节/表 | 落点 |
|
||||
|---|---|
|
||||
| 头部(状态/版本/承载支柱/层级/一句话/作者与门禁) | design 头部 + 附录·历史审计元数据(本文件) |
|
||||
| 头部·复核注记(art-director 未经咨询) | 本文件附录·历史审计元数据 |
|
||||
| 速览表(定位/拥有/不拥有/上游输入/下游输出/硬约束) | design 系统范围 + 依赖与输出 + 领域章节规则(硬约束逐条入变异定义框架/布置约束/承重数学) |
|
||||
| 速览两段散文(定义层定位与玩家遭遇 / 没有A4失去什么) | design 设计目的(定位段 + 承诺 1–5 + 设计意图行) |
|
||||
| 体验锚点(情绪目标 / 支柱表 4 行 / 反向护栏 / 参考感受) | design 设计目的(承诺 1–4)+ design 迷雾·反向护栏规则;论证 → 本文件问题 2/6;B4 兜底 → design 义务清单 B4-①②③ |
|
||||
| 全局流程·地形布置流程 / 雾揭示流程 / 出口分发 | design 核心循环(字符画 ×2 + 出口分发表) |
|
||||
| 核心规则 1–9(人话 + 举证) | design 变异定义框架(Rule 1/8/9)/ 迷雾(Rule 2/4/5)/ 布置约束与生成期门控(Rule 3/6/7)编号规则;举证指向承重数学节与本文件 |
|
||||
| 规则 3 的实现参照表(生成期布置约束 7 行) | design 布置约束·生成期布置约束(几何硬边界) |
|
||||
| 规则 4 的实现参照——零特判六面 | design 迷雾·零特判六面 |
|
||||
| 规则 3/5 的实现参照——雾元知识信息源(6 行) | design 迷雾·雾元知识信息源 |
|
||||
| 枚举·VariationTable 行集 / schema 校验类别 | design 变异定义框架(两表原样) |
|
||||
| 枚举·板形参数(7 行) | design 布置约束·板形参数 |
|
||||
| 数值结论与推导·口径总纲 / F1 / 结构推论 / 雾致预算增量 | design 承重数学(结论 + 表达式 + Variables + 验算表全保留);推导与论证 → 本文件问题 3/4 |
|
||||
| 数值结论与推导·对 A3 F1 条款 5 的对账 | design 承重数学·三腿表 + 对账契约要点 1–4;论证 → 本文件问题 4 |
|
||||
| 状态(4 阶段表 + 不变式) | design 布置约束·状态(定义→布置→生效→消亡) |
|
||||
| 边界情况 EC1–EC11 | design 边界情况(条件|行为两列表,编号不变) |
|
||||
| 依赖(上游 D2/A3 + 下游 7 行 + 双向一致性核对) | design 依赖与输出(双向一张表 + 核对行) |
|
||||
| 跨 GDD 义务清单(A1×15 / A2×4 / B4×3 / B1×1 / D1×4 / C3×1 / A5×1 / D5×1) | design 依赖与输出·跨 GDD 义务清单(活契约全保留,编号不变) |
|
||||
| 呈现与 UI 契约(8 行) | design 呈现与 UI 契约(表原样);论证 → 本文件问题 6 |
|
||||
| Tuning Knobs(schema 定稿 / knob 效应 / 非 knob 冻结 / 真 owner / 跨 GDD 引用) | design 调参表 |
|
||||
| 验收标准(测试口径 8 行 / 夹具清单 5 行 / AC-1…AC-10) | design 验收标准(三表原样,AC 编号不变) |
|
||||
| 开放问题 OQ1–8 | 本文件·开放问题(原编号保留 + 迁移对账注记) |
|
||||
| 版本历史(v1 / rev1 / rev2 / v1.0-lean 共 4 行) | design 版本历史(全保留 + v2 迁移行) |
|
||||
@@ -0,0 +1,335 @@
|
||||
# B2 敌人系统 设计推演
|
||||
|
||||
> 状态:concluded · 本文只装"为什么"——`design/gdd/b2-enemy-system.md` 只收本文的结论。
|
||||
> 修订时新增问题节,不删旧节(历史即依据)。
|
||||
> 原文头部复核注记(保留):lean 门禁下 systems-designer(Formulas)/ qa-lead(AC + 缺口预检 7 项)已委托起草;creative-director 与 art-director 未经咨询——生产前人工复核体验锚点情绪定位与 Visual/Audio、art-bible 一致性(art-bible §1–4 须在 D1 GDD 前创建,线索清单是其输入之一)。
|
||||
|
||||
## 问题:伏击量纲与单轮上限怎么定,才能让"它强是我喂的"成立?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:percent 量纲(按百分比放大敌人攻击)——收益:与 weaken/defense_up 同一语言;代价:atk=0 敌种下伏击恒零、量纲随敌种曲线漂移,条款 3 换算不可锚。
|
||||
- 候选 B:flat 固定值(每层 +N 点主角 HP)——收益:与敌种 atk 解耦、换算单一线性;代价:不同 atk 敌种间相对强度不平(由 C3 曲线承载)。
|
||||
- 候选 C:"每颗已开雷伤害加成"(按累计雷数而非本轮授予)——收益:账更简单;代价:跨轮存量 → 惩罚无自然边界,与"debuff 只活一结算"定稿冲突。
|
||||
- cap 候选:默认 8(旧)vs 4——8 使 min(雷数≤8, cap) 恒等、溢出协议死码;4 绑定单轮 5–8 雷灾难轮,溢出协议获真实消费域。
|
||||
|
||||
### 深度分析
|
||||
|
||||
合成序判别说理:伏击附加若进倍乘,heavy 拍会把"读怪规避"的收益放大到不可控(判别例 20 vs 32);后置加法让伏击与敌种基线正交、两份账各自可归因(P2)。池共享不消耗(同结算多敌读同一 L,非均分、非先到先得)是 side-wide 语义的自然推论——层数扣减唯一入口 = B3 轮末衰减(dur=1 轮末全清)。m_amb 变量卡:int flat ≥ 1、provisional 3、B3 行值、量纲 = 主角 HP 点数(本 GDD 定稿——registry OQ2 关闭条件兑现);锚验收归 B4/B1。
|
||||
|
||||
F2 验算表:
|
||||
|
||||
| 验算 | 读数 | 说明 |
|
||||
|---|---|---|
|
||||
| bugbear(atk=4, mult=2)heavy 拍 L=4 | 4×2 + 12 = **20** | 合成序判别非平凡:塞进倍乘得 (4+12)×2 = 32 ≠ 20;L=4 = cap=4 默认下游戏态上界(域内判别值);query_attack 的 L 为调用方注入的判别探针、B2 不校验其游戏态域(游戏态域由 F3 预截流承载——探针取值与游戏态域分离,实现期若给 query_attack 加 L 域守卫须回改 AC-7) |
|
||||
| goblin(atk=4)本轮开雷 3 颗 | D = 4 + 9 = **13** | attack 拍基础例 |
|
||||
| 满编 3 goblin、L=4 | 各 4+12 = 16、合计 48(伏击分量 36) | 多敌共享读值例 |
|
||||
|
||||
F2 Output Range(默认表值,cap/atk/m_amb/mult 调参后随之重算):goblin attack ∈ [4, 16];bugbear attack ∈ [4, 16]、heavy ∈ [8, 20]、charge ≡ 0(cap=4 封顶 L=4)。极端:charge 拍零兑付 → 蓄力轮授予的伏击层当轮全部蒸发(合法推论;反向 = 读怪奖励"蓄力拍前放心贪雷"——D5 教学条目);无负值分支(clamp/地板归 B1)。边界注记:归 B1——L 读值、clamp/负值/溢杀、hero 侧减伤合成次序、死亡判定与"这一下是否兑现"。分量供给建议:B2 向 B1 供(基线, 伏击)二元组而非合后标量——结算明细"伏击 +N"的 P2 归因行需要分量边界。
|
||||
|
||||
F3 验算表:
|
||||
|
||||
| 场景 | granted | overflow | 说明 |
|
||||
|---|---|---|---|
|
||||
| cap=4、开雷 6 | 4 层 | 2 行 | 本结算每个攻击行为附加 +12 |
|
||||
| cap=4、开雷 5–8(灾难轮) | 4 | 1–4 | cap 反灾难护栏绑定域 |
|
||||
| cap=0、开雷 m | 0 | m | 免疫极端——全溢出、伏击全无效但全部可见(P2 诚实) |
|
||||
|
||||
max_stack = 16 双重不可达论证:单轮 L ≤ min(8, cap=4) = 4 < 16,且 dur=1 无跨轮存量 → B3 满层拒绝对 ambush 行双重不可达;不可达性由 dur=1 ∧ AP ≤ 8 承载、与 cap 无关——M=16 是死护栏非死字段。重验触发:ambush.duration ≥ 2 ∨ AP 经济改动 ∨ ambush 新增非 mine_hit 授予源(旗源授予不计入 mines_r、cap 预截流漏账 → L 可达 16 触发 B3 满层拒绝、与 F3/B3 双溢出协议冲突——OQ6 标错惩罚采纳时强制重验)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
量纲定稿 = flat、单位 = 主角 HP 点数(provisional 3,锚验收归 B4/B1——A3 条款 2/3);cap 默认 4 定稿为反灾难护栏(绑定阈 = 单轮 5–8 雷灾难轮)。量级注记:atk=4 时 attack 拍 L≥2 伏击分量过半(6/10);heavy 拍因基线 ×mult 过半点后移(6/14 < 半)——支配边界 L* = ⌈atk×mult/3⌉ 与"过半"口径按拍别分别读取;常态支配的修正入口 = 敌种 atk 曲线(C3 所有权)或 m_amb 锚(B4/B1 验收),本 GDD 权限外、仅登记方向;cap=4 只治尾部灾难(5–8 雷轮)。量纲定稿注记按接口漂移回写 registry status_effect.ambush(AC-16④ 承载)。
|
||||
|
||||
## 问题:行为环为什么确定性轮转、"死亡即不动手"?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:半随机 AI(每拍掷行为)——收益:变化感;代价:不可学、不可规划,威胁归因断(P1/P3 双断)。
|
||||
- 候选 B:固定环(Peglin 式轮替)——收益:可学习、可规划,"抢在重击前击杀"成为技能;代价:内容量小(MVP 读怪对象最长 3 拍环)。
|
||||
- 死亡口径候选:死亡后指针继续推进(尸体走环)vs 就地冻结——冻结让"抢杀窗口"有真实兑付(重击永不兑现),且语义直白。
|
||||
|
||||
### 深度分析
|
||||
|
||||
同步性质定理证明:同种单位同指环首(初始化同一)且每结算各恰推进一次(B1 义务①)→ 任意结算序号下存活者 steps 相同 → beat 相同;死亡只冻结本人指针、不改变他人 steps——任何死亡时序都不会让幸存者乱拍(EC2)。
|
||||
|
||||
Output Range 与极端:指针恒 ∈ [0, 环长);环长 1(goblin)退化为恒等(EC10:每拍 attack、无自然空窗、兑付率 ρ=1——该敌种伏击威胁无衰减节拍)。Example:bugbear——结算 1 攻击(p→1)→ 结算 2 蓄力空拍(p→2)→ 结算 3 前被主角击杀 → 重击不兑现、指针冻结于 2;若结算 3 行动后才死 → 重击已兑现、p 回绕 0。边界注记:归 B2——指针所有权、存活校验、冻结不变式、环首初始化、跨轮跨图延续;归 B1——死亡判定时机、结算内先后次序、每结算恰一次推进(义务①)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
定稿:确定性环 + 死亡即不动手(2026-09-09 用户拍板)+ 先作用后推进(与 B3"先兑付后衰减"同款时序哲学)。行为环敌单位专属——主角无环、推进域排除(full 评审 blocking⑧ 核销项);预留四拍(guard/boost/hinder/summon)启用 = GDD 修订非调参(枚举封闭性)。
|
||||
|
||||
## 问题:条款 3 供给口径取"每战上界"还是"单结算自然边界"?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:每战上界表值——收益:对账式整齐;代价:战斗长度是轨迹量,表值上界须假设战斗长度、口径造假。
|
||||
- 候选 B:单结算自然边界(debuff 只活一结算)——收益:无需战斗长度假设、与 dur=1 机制自洽;代价:跨结算累计无表值上界(须显式声明为轨迹量)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
口径依据(用户定稿原话转写):"不设(每战)上界——踩雷的 debuff 只存在一回合:在一次结算中有效,之后就没有 debuff 了。"——debuff 单结算寿命 = 自然边界。F4 结构上界 min 收紧(full 评审批):unit_count × min(AP 上界, cap) × m_amb——cap > AP 界时 cap 腿松弛,默认 3×min(8,4)×3 = 36、cap ≥ 8 时真可达 72 而非 144、默认 unit_count=1 下 = 12。
|
||||
|
||||
方向性预检验算表(provisional——真实对账 = A1 actuals p10 + B1 归一表):
|
||||
|
||||
| 项 | 读数 | 说明 |
|
||||
|---|---|---|
|
||||
| 盲猜端单格 P(雷) | ≈ 0.5–0.7 量级 | 有信息挖掘端趋 0(A1 参考:密度 0.10 / target 0.95)——不等式真实战场在残余盲猜集 |
|
||||
| 右臂(cap=4) | 0.64 × 12 ≈ 7.7 | 条款 3 右臂代理读数 |
|
||||
| 左臂(条款 2 最低档锚 +50pp) | 0.36 × 50 = 18 | 条款 3 左臂代理读数 |
|
||||
| 方向稳健裕度 | ≈ 2.3× | registry clause3_supply.direction_precheck 同步回写 |
|
||||
|
||||
预检史:裕度曾按 +100 两层叠满取值得 4.7×,full 评审更正为 2.3×——旧值与"最低档下界"语言矛盾。左臂参照对象曾迁 defense_up 当量(attack_up 死行期),2026-09-11"基础攻击恒存在"裁决后回迁 attack_up 当量(registry status_effect.anchor_warning / clause3_supply.direction_precheck 两处迁移注记)。B3 红警闭环:ambush 量纲已由 F2 供给(registry OQ2 关闭条件);条款 3 左臂(安全格 buff 当量)载体 = 主角基础攻击(恒在,attack_up 复活)与 B4 奖励行值;闭合回执见 registry clause3_supply(B1 F4;含 2026-09-14 B1 重算批破线读数与联动约束网登记,以 registry 为准)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
定稿 = 单结算口径:每结算暴露精确式 k × L × m_amb(k = 本结算存活敌中攻击/重击拍单位数,确定性可算)+ 每结算结构上界 + 跨结算轨迹量声明(不设上界)。B1 对账取"每结算"口径即可闭合、无需战斗长度假设。
|
||||
|
||||
## 问题:MVP 敌人名录与多敌模型怎么定?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 单敌 vs 多敌:B3 单敌假设(target_side 无歧义)曾入文;B2 定敌人数模型时回验——用户 2026-09-09 拍板定多敌(1–3 同种),触发 B3 预登记接口漂移条款:registry status_effect.single_enemy_assumption 回验改写 + systems-index 门禁记录登记;B3 GDD 正文不改、以 registry 为准(A3 OQ5 收编先例)。
|
||||
- 效果作用域候选:单体寻址 vs side-wide 共享池——side-wide 与 B3 现接口零改动兼容,是 MVP 最便宜路径;单体寻址留 target_ref 扩展位(首个单体效果上线时补列,随批 B1 归集语义/D1 呈现裁决)。
|
||||
- 名录构成候选:每坐标多敌种随机 vs 每行集恰一敌种——后者把"配错"变成加载期致命,选择规则整体让渡给遭遇域(C1/C3),B2 零选择逻辑、零悬空风险。
|
||||
- unit_count 语义:定值 vs 区间 [unit_count, unit_count_max]——区间语义由 C3 遭遇随机化批引入(B1 encounter 骰定本战实际数量 n,实例化后不增——EC5 记号调和;定值行 = 缺省、旧行零迁移)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
多敌模型的测试承载问题:默认 unit_count=1 下多敌语义零消费者(Rule 7 空转、AC-5/9/10 靠夹具根可达)——死码风险登记为 OQ2;多敌夹具根选 bugbear 行(三拍环)而非 goblin——goblin 环长 1 恒 attack,混合拍 GIVEN 不可构造、同步断言零判别力、双单位读值不可构造(full 评审 blocking③ 核销);夹具值非 MVP 内容调参结论,多敌根是 Rule 2 的测试承载、仅供冒烟。
|
||||
|
||||
精英/Boss 编码位(OQ7 预登记):难度 = f(关卡序号, 节点深度, 精英/Boss 修饰);现键 (level_index, node_depth, enemy_id) + "每行集恰一敌种"结构冻结下,若 C1 定稿分支地图使同深度并存普通与精英节点,精英编码无键位(同深度第二敌种行触发行集校验致命);届时改键(如追加 encounter_class 维度)走 D2 Rule 4 接口漂移修订,schema/AC-12/夹具/registry 连锁回写(A1 OQ6 镜像;A1 BoardGenTable 已预留 elite_/boss_ 命名空间与改键退路)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
定稿:多敌 side-wide + 每行集恰一敌种 + 区间 unit_count。MVP 名录:原始定稿为双敌种(goblin/bugbear,数值占位 provisional),C3 修订批扩容为三敌种 {goblin, bugbear, ogre_chief}(DND 更名批对齐)——两阶段表述差异与 registry 现行行值的核对见开放问题 OQ-迁移-1。goblin 单拍环体验证伪预登记为 OQ8:玩家可能将其感受为"自动平砍的血条"(恰为体验锚点反向对照),MVP 实际读怪内容仅剩 bugbear 一环;证伪则两拍环备用案(如 [attack, charge])由 C3 内容所有权处置、本 GDD 结构不变。新敌种投放节奏 = 关卡命脉:MVP 敌信息总量小、L2 见底——每关须有新敌种或新环段投放(C3)。
|
||||
|
||||
## 问题:玩家怎么"读"敌人——数值预告还是视觉推测?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:界面直接显示下一拍行为与数值——收益:信息零损耗;代价:读怪幻想死亡、规划退化为读表,P1 断。
|
||||
- 候选 B:视觉推测型(图像承载行为线索、数字只在结算明细兑现)——收益:观察成为技能、可归因可学习;代价:呈现层承重(D1×4 义务、art-bible 约束),线索不可学即塌。
|
||||
- 参考感受合成:Peglin 固定招式轮替(威胁因可预测而可规划——确定性环是可学习性来源)× 怪物猎人读招(前摇姿态承载威胁信息、无数值面板——视觉推测的同构)→ 本作 = 确定性环 × 视觉推测;反向对照(要避开的感受)= 半随机、不可归因、重掷线索的"猜怪"呈现。
|
||||
|
||||
### 深度分析
|
||||
|
||||
体验锚点(情绪目标一句话):**"对面是个看得懂的对手,不是一个血条"**——威胁可推测、可归因、可拆解;玩家不操作敌人,但每一轮都直接感受它。
|
||||
|
||||
| 支柱 | 关键词 | 机制承诺 |
|
||||
|---|---|---|
|
||||
| P3 同源的对面对象 | "赌桌对面的那个存在" | 结算明细"敌方获得伏击 +3(第 4 轮 · 雷)"的行可指认——敌人强度是扫雷决策的镜像,威胁有源可溯 |
|
||||
| P1 可推测的威胁 | "它弓起背了,下一拍是重击" | 读怪推理进入挖掘决策(形态↔行为映射稳定可学,MVP 双环最长 3 拍);不预告精确数值——数字在结算明细兑现,结算前的世界靠观察而非读表 |
|
||||
| P2/P3 的拆台兑现 | "它强是我喂的,它弱是我拆的" | 标中旗 weaken 与伏击行同框、同一呈现语言,落在同一个它身上 |
|
||||
| P4 地牢住户 | "越下越险的刻度" | 深层敌人更凶(C3 施加),给下探氛围一个可见刻度 |
|
||||
|
||||
护栏:威胁绝不能是无源暗账——玩家说不出"它为什么变强 / 这一拳为什么这么重"即归因链失职(P2/P3);线索必须稳定可学(映射每 run 恒定,D1 义务②),任何让线索重掷或不可学的呈现设计默认砍掉(P1);血条/攻击力数字可读性适用视觉锚 1(暗色底上高对比)。
|
||||
|
||||
五条规格为何是承重项:①②③ 任一断裂 → "抢在重击前击杀"窗口、"蓄力轮放心贪雷"教学、读怪幻想三者同时落空;⑤ 预告时序锁定的理由——挖掘阶段是决策发生地,预告必须全程在场;结算时不另设独立意图播片(结算明细是数字兑现面、非意图预告面)。"不直接显示数值"的负空间 = 冒烟 API 封闭枚举(无意图数值 API)。双舞台陷阱:敌单位出现在棋盘上还是独立战斗场景 = B5 前"战斗表现美术测试"锁定(game-concept 双舞台资产管线陷阱),B2 只锁数据面与状态清单、不预设舞台;敌人层绘制优先级(锚 3 优先级表:数字>小人>旗>变异纹理>底色,不含敌单位)须在 art-bible 创建前裁决插入位置(姿态精灵与数字/旗/小人的遮挡关系),随美术测试一并锁定,否则"哪些数字可信"的心智模型分裂。音频:蓄力拍的音频前摇是"读招"的潜在第二通道——登记为垂直切片可选项(非 MVP 义务)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
定稿 = 视觉推测型(用户拍板):不直接显示行为/数值、映射键 = enemy_id(B3 effect_id→icon 同款契约)、映射每 run 恒定禁重掷、数字在结算明细兑现。MVP 视觉状态清单:goblin 1 态(攻击)、bugbear 3 态(攻击/蓄力/重击);学习成本低(最长 3 拍环)。
|
||||
|
||||
## 问题:主角数值放哪、基础攻击为什么必须恒在?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:atk MVP=0 机制开关(伤害全走 B4 道具侧)——旧定稿;后果:零基线乘任何百分比增益恒为零,"当前内容态结构性不可通关、B4 先行 = 任何可通关验证的先决"(胜利路径声明,CD 排序 #1)。
|
||||
- 候选 B:基础攻击恒存在(atk ≥ 1 自 schema 层杜绝零基线)——2026-09-11 用户裁决采纳:死锁从数据层进不来、开发期任何内容态都不可能出现。
|
||||
- 表形态候选:随关卡成长表 vs 单行全局表——主角不随关卡自动成长(成长 = 天赋 C4 / 奖励侧),单行全局 + Rule 4 豁免(ActionEconomyTable 先例)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
裁决的连锁退役:原"atk MVP=0 机制开关、胜利路径依赖 B4 先行"条款与 OQ3 左臂悬空投影退役;attack_up 复活(+50 percent,消费面 = 主角战斗段先手攻击——B1 战斗段同批增补 hero_attack 来源值),锚参照从 defense_up 回迁 attack_up 当量;OQ9 恒零死局分支收窄——hero 侧恒零伤害已被 HeroTable.atk 域下界([1,999]、0 加载拒绝)结构杜绝,残余 = 行 atk=0 ∧ cap=0 → 无威胁敌(战斗可胜但零风险——内容调参禁区注记、非死局);跨表量级护栏(atk×mult 上界 vs max_hp 域)owner = 实现期 ADR/D2(ActionEconomyTable 跨字段校验先例)。
|
||||
|
||||
战斗节奏定位:每次结算的战斗段主角先手攻击顺位最前的存活敌人——先于敌方行动;攻击是固定动作、不是行为环一拍(主角无环);伤害算式/乘区/明细行协议归 B1 战斗段。道具伤害是恒定表值、不吃修正。战斗开始血量由编排方入参供给(越界拒绝 = EC16,承 A3 拒绝口径——编排方供给异常显式暴露、不静默吸收);跨战斗是否保留归 C1/C2(MVP 冒烟以血量上限入参);解锁成长归 C4、曲线调参归 C3。
|
||||
|
||||
### 综合判断
|
||||
|
||||
定稿:HeroTable 单行全局两字段(max_hp + atk);atk 域 [1,999]、0 加载期校验拒绝;MVP = 6(原型锚 HERO_BASE_ATK provisional 归 C3)。胜利路径 = 基础攻击(恒在)+ B4 奖励侧规划面伤害(囤刀、抢杀、爆发时点的决策素材)共同兑付"敌人全灭 → 战斗胜利",每一分伤害逐行标注来源(hero_attack / 道具逐件实例)。
|
||||
|
||||
## 问题:各调参旋钮的方向风险怎么定(Tuning Knobs 论证)?
|
||||
|
||||
### 广度分析
|
||||
|
||||
原 Tuning Knobs 表("调过高/调过低"两列即方向风险论证):
|
||||
|
||||
| Knob | 默认 | 调过高 | 调过低 |
|
||||
|---|---|---|---|
|
||||
| EnemyTable.unit_count | 1(provisional) | 同步轮转下齐射爆发(全攻轮 side 伤 ×N,非平滑) | =1 时 AOE 分流/顺位顺延零消费者(Rule 7 空转) |
|
||||
| EnemyTable.hp | 18(provisional,出处待查) | 战斗拉长 → 伏击跨轮累计放大 | 秒杀级 → 惩罚无兑现窗口、伏击机制名存实亡 |
|
||||
| EnemyTable.atk | 4(provisional,出处待查) | 伏击稀释 → 踩雷无感(P3"风险与收益同源"断) | 支配边界 L*→1,惩罚接管战斗、敌种属性被 C3 曲线稀释 |
|
||||
| EnemyTable.heavy_multiplier | 2(provisional) | heavy+伏击同拍成秒杀拍(读怪规避价值升、容错归零) | =1 时 heavy ≡ attack、三拍环退化两拍(读怪素材坍缩) |
|
||||
| EnemyTable.advantage_per_round_cap | 4(本 GDD 定稿) | →8 时溢出协议死码回归、支配区扩大、条款 3 右臂膨胀 | ≤2 时 cap 常态绑定 → 边际惩罚归零("再多踩也不痛")、溢出行噪音、P3 归因梯度塌陷 |
|
||||
| HeroTable.max_hp | provisional(出处待查) | 容错升、治疗道具贬值 | 灾难轮秒杀感(与 cap 交互) |
|
||||
| HeroTable.atk | 6(原型锚 provisional 归 C3;域 [1,999]、0 加载拒绝) | 击杀预算贬值 → 道具供给/敌 hp 曲线联动重算(C3,禁止独立调参) | 战斗拖长、基础攻击存在感稀薄(道具侧支配) |
|
||||
|
||||
### 深度分析
|
||||
|
||||
Knob 交互:cap × atk(支配边界 L* = ⌈atk×mult/3⌉ 联动)禁止独立调参——联动评估归 B1 条款 3 闭合对账;unit_count × cap(单结算上界双线性);heavy_multiplier × atk(heavy 拍支配)。pattern 内容(环长/charge 占比 → 兑付率 ρ)属内容行调参,所有权归 C3。
|
||||
|
||||
零伤害死局组合护栏(OQ9):hero atk=0 已被 HeroTable schema 域下界杜绝——"全场恒零伤害、战斗永不定局"结构不可能;残余退化 = 行 atk=0 且 cap=0 → 无威胁敌(内容调参禁区注记,非死局);混编遭遇(多敌种同战斗)下 side 池 cap 取哪行值未定义——当前结构(每行集恰一敌种)恒单行值,混编引入时随 OQ7 改键一并裁决。
|
||||
|
||||
### 综合判断
|
||||
|
||||
MVP 全部默认值 provisional、曲线数值归 C3(A1 参考行先例);B1 条款 3 对账落定前,cap 与伏击量纲相关联调须重跑方向性预检并同步 registry(接口漂移义务)。非 knob(结构冻结):行为枚举七类封闭、死亡即不动手、先作用后推进、伏击池共享读法、合成序后置加法、伏击量纲 = HP 点、固定顺位规则、每行集恰一敌种、零随机——修订走 GDD 流程。
|
||||
|
||||
## 开放问题
|
||||
|
||||
### 原 OQ1–OQ9(编号保留)
|
||||
|
||||
| # | 悬案 | owner | 时机 |
|
||||
|---|---|---|---|
|
||||
| 1 | query_attack / ambush_grant_plan 两 face 归属——B2 供给面 vs B1 编排消费(F2"供给建议"与 F3"预截流归 B1"边界注记的张力落点);裁决归 B1 则 AC-7/8/9 对应腿迁移至 B1 冒烟(断言口径不变)、回写 AC 前言 | 实现期 ADR 定名时同步裁决 | Technical Setup / 实现期 |
|
||||
| 2 | 多敌语义默认零消费者复验——默认 unit_count=1 下多敌路径仅测试根可达(死码风险);C1 落地 unit_count>1 真实遭遇后复验 AC-5/9/10 夹具根是否升级为默认根内容;C1 须真实消费 unit_count>1(Boss/精英战最廉价的构成表达),且 Boss 表达不能只靠 unit_count——同种同拍 ×3 = 伤害乘法、非 Boss 幻想 | C1 遭遇分布定稿 | C1 GDD |
|
||||
| 3 | 条款 3 左臂载体——基础攻击恒存在后"载体悬空、内容态不可通关"事实已闭环;残余 = 左臂当量换算口径(锚参照回迁 attack_up 当量——B4 F4 / registry anchor_warning)随 B1 对照表对账 | B1 | B1 GDD 强制检查点 |
|
||||
| 4 | 原型参考值溯源——敌 18HP/4ATK、伏击 +3、hero max_hp 均 provisional 且出处待查(D2 Tuning Knobs 既有登记义务);回填定值前补原型 REPORT 溯源,查无出处则按 C3 调参所有权重定 | 本 GDD 回填定稿时 | EnemyTable/HeroTable 定值回填 |
|
||||
| 5 | HeroTable 单行校验落点——schema validate() vs loader 缝两处恰一承载(AC-13 腿3 / 可选根 hero_extra_row manifest 行) | 实现期 ADR/D2 | Technical Setup |
|
||||
| 6 | 标错惩罚候选与伏击清单联动——候选"敌方伏击+1"若实测采纳:事件源 = flag_judged{hit=false}(旗落非雷格)、不在 Rule 5 cell_revealed{kind=mine} 转化路径内;B3 需新增行且 source_class 需新枚举值(如 flag_miss)——source_class 枚举属 B3 结构冻结项、须走 B3 GDD 修订(接口漂移)非"加行";B2 侧伏击清单联动修订 + F3 重验触发(非 mine_hit 源)强制重跑;若错标为 mine_hit:P2 归因明细行来源失实(标错被记成踩雷) | A2 OQ1 实测会话 | A2 /design-review 核对在位 |
|
||||
| 7 | 精英/Boss 遭遇编码位预登记——难度 = f(关卡序号, 节点深度, 精英/Boss 修饰);A1 BoardGenTable 已预留 elite_/boss_ 命名空间与改键退路;本表键冻结 (level_index, node_depth, enemy_id) 且"每行集恰一敌种"入结构冻结——若 C1 定稿分支地图使同深度并存普通与精英节点,精英编码无键位(同深度第二敌种行触发行集校验致命);届时改键(如追加 encounter_class 维度)走 D2 Rule 4 接口漂移修订,schema/AC-12/夹具/registry 连锁回写(A1 OQ6 镜像) | C1/C3 | C1 GDD 定稿强制核对 |
|
||||
| 8 | goblin 单拍环体验证伪——goblin 环长 1、无前摇无空窗,玩家可能将其感受为"自动平砍的血条"(恰为体验锚点反向对照);MVP 实际读怪内容仅剩 bugbear 一环;预注册证伪项:playtest 采集"goblin 是否被读"信号;证伪则两拍环备用案(如 [attack, charge])由 C3 内容所有权处置、本 GDD 结构不变 | C3/playtest | 垂直切片 playtest |
|
||||
| 9 | 零伤害死局组合与跨表量级护栏——hero 侧恒零伤害分支已被 HeroTable.atk 域下界([1,999]、0 加载拒绝)结构杜绝;残余 = 行 atk=0 ∧ cap=0 → 无威胁敌(内容调参禁区、非死局);atk×mult 上界与 max_hp 域无跨表量级护栏——遭遇行配置期跨字段校验落点裁决(ActionEconomyTable 跨字段校验先例),详见 analysis 问题 6 | 实现期 ADR/D2 | Technical Setup |
|
||||
|
||||
### 迁移登记(两件套迁移发现的冲突——未自行裁决,待拍板)
|
||||
|
||||
| # | 冲突 | 说明 |
|
||||
|---|---|---|
|
||||
| OQ-迁移-1 | MVP 名录表述漂移 | 原文 Rule 3 人话"MVP 恰两种敌人" + 双敌种内容行(goblin 18hp/4atk 原型占位、bugbear heavy_multiplier=2)与 同文 AC-14/AC-16③ 定值断言及版本历史 C3 修订批"物种集 = {goblin, bugbear, ogre_chief}"、registry `enemy.mvp_content` 三敌种六行具体行值(如 goblin L1 D0 24hp/7atk ×[1,2]、ogre_chief L1 D4 150/9 ×1、heavy_multiplier=2 全员)不一致。新 design 按数值单一事实源纪律以 registry 为准写三敌种(未自行裁决最终表述);原 18/4 占位行值与 registry v3 行值不一致——OQ4 原型溯源时应一并核对哪组为定值候选。 |
|
||||
| OQ-迁移-2 | registry 敌方攻击区间批未入 GDD | registry `enemy.fields` 已登记 atk_min/atk_max 可选配对 int [0,999](上阶/下阶区间随机;缺省 = 定值行向后兼容;atk = (min+max)/2 中点锚;roll 时机 = 遭遇骰同流、spawn 期整战持久;B1.begin_battle roll → B2.spawn enemy_atk_override 收确定值;MVP 六行 ±3 provisional 归 C3;验收 = 完美策略档 0 加成通关 ≤40%〔registry OQ7〕),注记"正式侧 GDD/registry 修订批随 ADR-0009 同批"。本 GDD 原文尚无该字段与 spawn 参数;本次格式迁移不发明内容、未写入 design——待 ADR-0009 修订批正式落地时补入 schema/AC/spawn 签名。 |
|
||||
|
||||
## 附录
|
||||
|
||||
### 附录 A:registry / 接口漂移回写义务与一致性核对(审计台账)
|
||||
|
||||
| 编号 | 内容 | 对侧 | 状态 |
|
||||
|---|---|---|---|
|
||||
| R-1 | B3 单敌假设回验结果 = 不成立(定多敌)→ 触发 B3 预登记的接口漂移条款("定多敌即触发 target_ref 接口漂移补列"):registry status_effect.single_enemy_assumption 注记更新 + systems-index 门禁记录登记(B3 GDD 正文不改,以其"以 registry 为准"先例承载) | B3 / registry | 待回写(Phase 5b/5d) |
|
||||
| R-2 | 索引 B2 行描述为窄口径("敌人类型/词条、目标选择规则")→ Phase 5d 更新进度行时补战斗单位系统身份(CD 门禁扩容口径) | systems-index | 待回写(Phase 5d) |
|
||||
| R-3 | registry status_effect.ambush 量纲定稿注记回写(F2 定稿——B3 registry OQ2 关闭条件) | B3 / registry | 待回写(Phase 5b) |
|
||||
| R-4 | HeroTable 新增 → D2 Core Rules 表清单 + registry 接口漂移回写 | D2 / registry | 待回写 |
|
||||
|
||||
双向一致性核对(systems-index 依赖分层表):B2 ← D2 ✅(索引仅此一条硬边,其余为事实读取不列边——D2 注记口径);B1 ← …B2 ✅ · C3 ← D2,B2 ✅ · C1 ← C2,C3,B2,B4 ✅。
|
||||
|
||||
### 附录 B:验收支撑材料(原 lean 件验收节承载,全文保留)
|
||||
|
||||
#### B-1 测试口径
|
||||
|
||||
| 口径 | 要点 |
|
||||
|---|---|
|
||||
| 测试载体 | B2 是单位层纯逻辑类——非 autoload、无场景依附、无自有渲染面。冒烟载体 = `godot --headless --script`(承 D2 冒烟框架;脚本 extends SceneTree 以获得 quit(code)、ConfigDB autoload 由脚本显式实例化);单位容器与两表 schema 经 class_name 直引实例化(每用例全新实例、无跨用例状态——AC-17 扫描对该实例化路径豁免);每用例先 `reset_diagnostics()`(D2 冒烟协议,全局声明) |
|
||||
| 被测面与调用方 | B1 未实现(设计顺序第 9 位)——冒烟直接驱动 B2 最小 API 面(冒烟脚本扮演编排方,按"实例化 → 查询 → 受击 → 推进 → 消亡"结算编排序列驱动);B1 就绪后改走真实调用方(结算编排)、断言口径不变 |
|
||||
| 时序口径 | B2 无结算 API——"一次结算"在冒烟中 = 调用方对每个存活敌单位恰一次 advance(含兑付读值与受击注入)的构造窗口(主角无行为环、不在推进域内——Rule 4);"每结算恰一次推进"是 B1 义务①——冒烟以构造序保证前提、不断言编排正确性;"轮到该单位之前被杀" = 同一构造窗口内 advance(u) 之前的 apply_damage(u, …);多步 GIVEN 均给出构造序列 |
|
||||
| 只读观测量 | 敌单位投影七字段 enemy_id · hp · max_hp · atk · heavy_multiplier · pattern(快照)· advantage_per_round_cap(快照)+ beat(当前拍)+ 存活态;hero 投影 hp · max_hp · atk |
|
||||
| 相位与投影 | Alive/Dead 由 query_alive 成员差分推断(Dead 句柄经 query_beat 冻结值可读);Despawned = 逻辑失效态(状态位实现——容器为 RefCounted 纯逻辑类、对象不提前释放;失效句柄上查询返回空 + 诊断、作用接口拒绝;瞬态纪律同 A3 RoundEnd);Unspawned 无观测量;投影一律为快照(pattern 等引用字段返回拷贝——原地改写返回值不影响容器,AC-11 腿 3);容器公开可写属性为零(hp 等仅经 apply_damage 变更——AC-17 扫描域);实例不变式(hp ∈ [0, max_hp]、敌单位数 = unit_count、指针 ∈ [0, 环长))为 debug 断言自守——违规路径不可由封闭 API 构造(负空间)、不经冒烟断言(进程致命保留给 D2 数据通道);行为级证据 = AC-1(数)、AC-3(指针)、AC-4/AC-6(hp floor) |
|
||||
| 期望值纪律 | hp(18)/atk(4)/heavy_multiplier(2)/unit_count/max_hp 均为 provisional knob(Tuning Knobs 节)——各 AC 的 THEN 具体数值按当前 ConfigDB 表值推导、不写死;记号:h_g/a_g(goblin 行)、h_e/a_e/m_e(bugbear 行)、u_c、M_h、c_r(所在行 cap)、p_g/p_e(pattern 表读值)、m_amb = StatusEffectTable.ambush.magnitude 表读值(仅作 AC-7 注入值来源);pattern 环内容属内容行调参(C3 所有权)——轨迹断言一律按 p 表读值推导;L/mines_r/n 等入参为构造选择(显式登记)、期望值由表读值推导 |
|
||||
| 结构定值断言 | 合法集:敌种 id 集 {goblin, bugbear, ogre_chief}(Rule 3 MVP 收窄——C3 修订批扩容三敌种)、pattern 元素域 {attack, charge, heavy}(枚举封闭)、每行集恰一敌种、HeroTable 单行、HeroTable.atk 域 [1,999](0 加载拒绝;MVP 值 6 provisional 不作定值断言) |
|
||||
| 致命类收窄与 manifest | B2 冒烟设恰两根致命夹具(均为 B2 表特有校验类别):runner manifest 退出码行 rowset_dup→≠0 · pattern_reserved→≠0(独立 headless 进程、游戏通道,D2 AC-2b 协议同型);其余致命类别(D2 R1 悬空敌种/行集缺行〔EC13〕、遭遇坐标越界〔EC14〕、通用枚举域/域校验)由 D2 AC-2 同类别 loader 级夹具承载(表无关,豁免声明收窄保留——B2 冒烟仅以合法坐标驱动 spawn);HeroTable 单行类别条件性(可选根);schema 侧以程序构造断言域类别(AC-12/13) |
|
||||
|
||||
#### B-2 冒烟 API 面(provisional,封闭枚举——实现期 ADR 定名)
|
||||
|
||||
| API | 签名 | 语义与返回口径 |
|
||||
|---|---|---|
|
||||
| spawn | `spawn(level_index, node_depth, hero_hp, n) -> bool`(n = 本战实际数量 override——B1 encounter 骰;定值行/省略 n = unit_count 表值) | 解析遭遇行 → 行值快照 → 实例化 n 个敌单位(行主序生成序)+ 主角(hp 入参,MVP 冒烟以 max_hp 入参——Rule 9);Alive 相位重复 spawn → false + 诊断(相位守卫) |
|
||||
| query_alive | `query_alive(side) -> Array` | side ∈ {hero, enemy};生成序稳定枚举;只读 |
|
||||
| query_beat | `query_beat(u) -> String` | 当前拍 ∈ pattern 元素;Dead 句柄保留只读可查(冻结不变式的观测量);hero 句柄 → 空 + 诊断(主角无行为环——Rule 4);只读 |
|
||||
| query_attack | `query_attack(u, L, m_amb) -> {baseline, attach, total}` | F2 分量供给面;L/m_amb 由调用方供值(B1 兑付读值的冒烟等价——B2 对 B3 零运行时依赖的边界由此保持);L 为判别探针入参、B2 不校验其游戏态域(游戏态域由 F3 预截流承载);Dead 句柄 → {0, 0, 0} + 诊断;只读 |
|
||||
| apply_damage | `apply_damage(u, n) -> bool` | 受击上报;hp 递减、floor 0 → Dead;n ≤ 0 → false + 诊断(无伤害作用非法);Dead 句柄 → false + 诊断(MVP 无复活) |
|
||||
| advance | `advance(u) -> bool` | 存活才推进("先作用后推进"的推进半);false 分两级:存活校验失败 = 轮到前被杀的预期冻结、无诊断(EC1 常态路径——抢杀窗口是设计卖点,诊断刷屏会淹没信号);相位/句柄失效 = false + 诊断;hero 句柄 → false + 诊断 |
|
||||
| default_target | `default_target() -> u\|null` | 固定顺位供给面;只读 |
|
||||
| ambush_grant_plan | `ambush_grant_plan(mines_r, cap) -> {granted, overflow}` | F3 机制算术纯函数——B1 预截流编排的消费面;只读 |
|
||||
| despawn_all | `despawn_all() -> bool` | battle_over 消亡;重复调用 → false + 诊断(重复调用守卫) |
|
||||
|
||||
- 返回口径:全部布尔/计数返回 = 受理/拒绝(A3 全 API 布尔口径同款)——"拒绝"直接断言返回值,附 debug 诊断、非进程致命(进程致命保留给 D2 数据通道);五个 query 面(query_alive / query_beat / query_attack / default_target / ambush_grant_plan)只读、无副作用。
|
||||
- 封闭枚举即负空间验收形态:无 summon/增援 API(EC5 负空间——战斗内不增员)、无复活 API(Dead 不可逆)、无重置/换图 API(EC11 跨图延续的结构前提)、无伏击池写 API(B2 无池——L 恒由调用方注入,EC17 读值语义);新增上述任何入口 = 接口漂移(GDD 修订非调参)。
|
||||
- ADR 前置裁决项:query_attack / ambush_grant_plan 两 face 若实现期裁决归 B1(F2"供给建议"与 F3"预截流归 B1"边界注记存在张力),对应 AC 腿迁移至 B1 冒烟、断言口径不变(OQ1)。
|
||||
|
||||
#### B-3 夹具策略
|
||||
|
||||
| 根 | 构成 | 服务 |
|
||||
|---|---|---|
|
||||
| 默认根 | 干净检出:EnemyTable 双敌种行 + HeroTable 单行 | 全部分支行为 AC |
|
||||
| enemy_multi_unit | D2 全表清单拷贝 + EnemyTable 仅将 (L_a, D_a) 行(bugbear——三拍环)unit_count 置 3(其余字段域内合法;登记值 u_c_f = 3) | 多敌 AC(AC-5 / AC-7 腿4 / AC-9 / AC-10 腿2) |
|
||||
| enemy_reloaded | D2 全表清单拷贝 + EnemyTable 数值漂移(登记:hp/atk/advantage_per_round_cap 各 +1、pattern 不动——快照差分判定用) | AC-11 |
|
||||
| enemy_rowset_dup_species(致命) | D2 全表清单拷贝 + EnemyTable 默认行 + 追加一行与 (L_g, D_g) 行同 (level_index, node_depth) 而 enemy_id 相异("goblin_twin",其余字段域内合法)→ 每行集恰一敌种违规 | B2 表结构致命校验的进程级落点——manifest rowset_dup→≠0(B3 status_effect_dup_key 同型) |
|
||||
| enemy_pattern_reserved(致命) | D2 全表清单拷贝 + EnemyTable (L_g, D_g) 行 pattern 追加预留值 "guard"(其余合法)→ pattern MVP 校验域拒绝预留值 | Rule 4 fail-fast 的 loader 集成缝落点——manifest pattern_reserved→≠0(A1 solver_rules 冻结先例) |
|
||||
| hero_extra_row(可选根) | HeroTable 置两行(域内合法——单行全局违规) | 单行校验落点若实现期 ADR/D2 裁定在 loader 缝则启用(manifest 行 hero_rows>1→≠0),否则程序构造承载(AC-13)——可选、两处恰一承载 |
|
||||
|
||||
- 行集登记常数协议(A1 黄金向量 / A2 板登记同源):(L_g, D_g) = goblin 行坐标、(L_a, D_a) = bugbear 行坐标,逐坐标手工推导记录入版本库;失效处置 = 先复核登记、登记无误即实现缺陷。
|
||||
- 多敌根选 bugbear 行(三拍环)保证判别力:goblin 行环长 1 恒 attack → 混合拍 GIVEN 不可构造、同步断言零判别力、双单位读值不可构造;改 bugbear 行后混合拍经对单单位重复 advance 构造(冒烟构造序可越出"每结算恰一次"契约——B2 无守卫、构造自由度成立)。
|
||||
- 显式声明:夹具值非 MVP 内容调参结论(Tuning Knobs 默认 unit_count = 1——多敌语义在默认根上零消费者,多敌根是 Rule 2 的测试承载、仅供冒烟)。
|
||||
- 换根加载经 `load_tables(root, collect_only=true)` 直调(非 D2 `reload()` 路径:不过 set_reload_gate、不发 config_reloaded——门语义归 D2 AC-16/B1,B3 AC-15 同款);程序构造(AC-12/AC-13):两 schema 类 class_name 直引实例、不经 load()/preload();行为夹具根经 `--data-root=` 注入(仅 debug、不入 data/tables/——D2 夹具纪律);各 AC 声明其表根、用例间无顺序依赖。
|
||||
|
||||
#### B-4 覆盖声明(out-of-scope——deferral 生效条件 = B1×6 + D1×4 义务清单,均缺项即 blocking)
|
||||
|
||||
| deferral 项 | 生效条件 / 承载 |
|
||||
|---|---|
|
||||
| B1×① 行为环推进每结算恰一次与结算内先后次序(double-advance 无守卫——冒烟单调用方次序即构造序,B3 义务⑥同款) | B1 义务① |
|
||||
| B1×② 雷→伏击事实转化恰一次 + 编排期授予/预截流调用次序(F3 编排半、EC17"先转化后兑付"次序半句) | B1 义务② |
|
||||
| B1×③ 伤害 clamp/负值/溢杀语义与死亡判定时机(冒烟只断言 hp 递减、floor 0 与 Dead 翻转——"这一下是否兑现"归 B1) | B1 义务③ |
|
||||
| B1×④ F4 条款 3 闭合对账(cap 表值 + 量纲 + A1 actuals p10——冒烟只供分量面与 k 可算性) | B1 义务④ |
|
||||
| B1×⑤ 默认目标消费与单体/AOE 分流(冒烟只断言 default_target 供给面) | B1 义务⑤ |
|
||||
| B1×⑥ 溢出"溢出未生效"明细行协议(呈现归 B5/D1——冒烟只断言 overflow 计数会计) | B1 义务⑥ |
|
||||
| D1×①② 图像线索清单成文与映射每 run 恒定(Rule 8 视觉面——视觉映射不可 GIVEN-WHEN-THEN;验收形态 = 映射键契约〔enemy_id〕+ B2 侧行为级承载:行为环零随机可学〔AC-3/AC-15〕) | D1 义务①② |
|
||||
| D1×③ 顺位与存活可读呈现 | D1 义务③ |
|
||||
| D1×④ 敌方 side 池呈现口径(B3 敌侧延伸) | D1 义务④ |
|
||||
| EC8 池蒸发腿(dur=1 轮末清池——B3 AC-8/AC-9 既有覆盖,跨引不重复;B2 侧零兑付半 = AC-7 腿3 / AC-9 腿1) | B3 AC 既有 |
|
||||
| EC13/EC14 端到端致命(D2 R1/EC14 既有通道) | D2 AC-2(manifest 豁免) |
|
||||
| Rule 10 后半难度修饰施加点(B2 以实例化后数值运作——修饰算式无表值可断) | C3 provisional |
|
||||
| 跨战斗 HP 持久性 | C1/C2 |
|
||||
| 曲线数值与遭遇分布定值(AC-14 显式不作分布定值断言) | C3 |
|
||||
| atk 激活裁决——已退役:基础攻击恒存在,域断言由 AC-13/AC-14 承载 | 无遗留义务 |
|
||||
| Rule 8"不直接显示数值"负空间(无意图数值 API——冒烟 API 封闭枚举承载) | API 封闭 |
|
||||
| qa-lead 缺口预检 7 项处置:预检 1/2 入 OQ①②;预检 3/4 随批修正 F4 满配语境与 EC17 切分;预检 5–7 承载于 ADR 裁决项 / HeroTable 可选根 / 坐标登记协议 | 已处置 |
|
||||
|
||||
#### B-5 覆盖矩阵(qa-lead 交付,验收评审用)
|
||||
|
||||
| 类别 | 映射 |
|
||||
|---|---|
|
||||
| Core Rules(11/11) | 1→AC-1/AC-6/AC-2(clamp·溢杀·死亡时机→OOS B1×③)· 2→AC-1/AC-5/AC-9(side-wide 兼容与 target_ref 扩展位→B3 接口漂移义务随批 B1/D1、非冒烟域)· 3→AC-12/AC-14/AC-13 · 4→AC-3/AC-4/AC-5/AC-15(预留值拒绝→AC-12+manifest pattern_reserved)· 5→AC-8(每雷恰一次→OOS B1×②;溢出明细行→OOS B1×⑥+B5)· 6→AC-7/AC-16④(量纲锚验收→B4/B1,排除声明)· 7→AC-10(消费分流→OOS B1×⑤;顺位可读→D1×③)· 8→映射键契约(enemy_id)+AC-3/AC-15(行为环可学性承载)+OOS D1×①②、"不显示数值"负空间=API 封闭 · 9→AC-1/AC-2/AC-13/AC-14 · 10→AC-1/AC-11(D2 R1 解析致命→OOS D2 通道;难度修饰→C3 provisional)· 11→AC-15/AC-17(调用权集中→OOS B1×①) |
|
||||
| Formulas | F1→AC-3/AC-4/AC-5 · F2→AC-7 · F3→AC-8 · F4→AC-9(闭合对账→OOS B1×④) |
|
||||
| EC(17 条) | EC1→AC-4 腿1/腿2 · EC2→AC-5 腿2 · EC3→AC-6 腿1+AC-10 腿3 · EC4→AC-6 腿2 · EC5→冒烟 API 封闭(负空间——无 summon API 不可 G-W-T,B3 Rule 8 先例)+AC-5 腿3+AC-17 · EC6→AC-8 腿4+AC-12(cap=0 合法腿)· EC7→AC-8 腿3 · EC8→AC-7 腿3+AC-9 腿1(池蒸发腿→B3 AC 既有覆盖,OOS 跨引)· EC9→AC-4 腿1 · EC10→AC-3 腿3 · EC11→AC-3 腿4(跨图结构裁决)+AC-2/AC-6(相位重复守卫,B3 EC11 同款)· EC12→AC-11 · EC13→OOS(D2 R1 通道,D2 AC-2 同类别夹具,manifest 豁免声明)· EC14→OOS(D2 EC14 通道,同前)· EC15→AC-10 腿1 · EC16→AC-2 · EC17→AC-7 腿4(读值即时性/纯函数半)+OOS B1×①②(次序半) |
|
||||
| 无洞声明 | 17 条 EC 中 EC5/EC13/EC14 三处非 G-W-T 形态,分别以 API 封闭负空间声明与 D2 通道豁免承载(B3 Rule 8 负空间 + 致命收窄豁免先例同款);其余全部映射到 AC 或显式 OOS(deferral 生效条件 = B1×6/D1×4 已登记缺项即 blocking) |
|
||||
|
||||
### 附录 C:显式排除声明(数值与机制平衡归属)
|
||||
|
||||
| 对象 | 归属 |
|
||||
|---|---|
|
||||
| 伤害 clamp/地板/溢杀、乘区合成、减伤读法、死亡判定时机 | B1 SettlementTable |
|
||||
| F1 条款 3 不等式闭合对账(输入 = A1 actuals p10,非 target 参数) | B1 单一 owner |
|
||||
| m_amb(+3)行值锚验收、weaken 档位 | B4/B1(A3 条款 2/3) |
|
||||
| 敌种 hp/atk/pattern 曲线数值、难度修饰 | C3 |
|
||||
| 伤害道具/奖励池(hero 侧伤害来源) | B4 |
|
||||
|
||||
B2 只对"套路怎么转、一下打多少的两块拼图、一轮吃几层、交给 B1 对账的口径"负责。
|
||||
|
||||
### 附录 D:去向映射(零丢失可审计证据)
|
||||
|
||||
| 原文节 | 落点 |
|
||||
|---|---|
|
||||
| 头部(状态/版本/承载支柱/一句话/复核注记) | design 头部(状态/版本/一句话/推演件);承载支柱 → design 设计目的定位段;复核注记 → analysis 文首注记 |
|
||||
| 速览(定位/拥有/不拥有/上游/下游/硬约束) | design 设计目的 + 系统范围 + 依赖与输出;硬约束 → design 系统范围 |
|
||||
| 体验锚点(情绪目标/支柱表/护栏/参考合成) | 承诺 → design 设计目的编号体验承诺 + 反向护栏;论证全文 → analysis 问题 5 |
|
||||
| 全局流程(行为环字符画 + 出口分发表) | design 核心循环 |
|
||||
| 核心规则 1 / 11 | design 单位与状态·规则 1–2 |
|
||||
| 核心规则 2 / 3 + 规则 2 实现参照(多敌模型表) | design 敌人构成与名录·规则 1–2 + 名录表 |
|
||||
| 核心规则 4 + 规则 4 实现参照(推进细则表) | design 行为环·规则 1 + 细则表 |
|
||||
| 核心规则 5 / 6(含 cap 行为表) | design 伏击·规则 1–2 + cap 表 |
|
||||
| 核心规则 7 / 8 + 规则 8 实现参照(五条规格表) | design 目标选择与读怪·规则 1–2 + 规格表 |
|
||||
| 核心规则 9 / 10 | design 主角与实例化·规则 1–2 |
|
||||
| 枚举(行为拍七类 + pattern 域注记 + MVP 双敌种内容行) | design 行为环枚举表 + 敌人构成名录表;双敌种占位行值与三敌种表述漂移 → analysis OQ-迁移-1 |
|
||||
| EnemyTable / HeroTable schema | design 数据表 Schema |
|
||||
| 数值结论与推导 F1–F4(结论/推导/Variables/验算/Output Range/边界注记/术语) | 结论 + 表达式 + 术语 → design 数值公式;推导论证/验算表/Output Range/量级注记 → analysis 问题 1–3 |
|
||||
| 显式排除声明 | design 系统范围不负责清单 + analysis 附录 C |
|
||||
| 状态(四态表 + 不变式) | design 单位与状态 |
|
||||
| 边界情况 EC1–EC17 | design 规则内联边界(EC 编号随文保留:规则句尾/出口表/AC 覆盖列)+ analysis 附录 B-5 映射 |
|
||||
| 依赖(上游/下游表 + 双向一致性核对) | design 依赖与输出表;核对记录 → analysis 附录 A |
|
||||
| 义务台账(B1×6 / D1×4) | design 依赖与输出·义务台账(活契约) |
|
||||
| registry / 接口漂移回写义务 R-1–R-4 | analysis 附录 A(历史审计台账) |
|
||||
| 呈现与 UI 契约(数据面义务 8 行) | design 依赖与输出·呈现契约 |
|
||||
| Tuning Knobs(knob 表/非 knob/交互/所有权) | 字段·域·默认·owner → design 调参表;调过高/调过低方向论证 → analysis 问题 6 |
|
||||
| 验收标准·测试口径 / 冒烟 API 面 / 夹具策略 | analysis 附录 B-1/B-2/B-3(design 验收标准口径摘要指针) |
|
||||
| 验收标准·AC 清单(AC-1–AC-17) | design 验收标准 GWT 表(编号不变) |
|
||||
| 验收标准·覆盖声明 / 覆盖矩阵 | analysis 附录 B-4/B-5 |
|
||||
| 开放问题 OQ1–OQ9 | analysis 开放问题(编号保留、全文保留) |
|
||||
| 版本历史(5 行) | design 版本历史(原行全保留 + 追加 v2 行) |
|
||||
@@ -0,0 +1,282 @@
|
||||
# B3 增益/状态系统 设计推演
|
||||
|
||||
> 状态:concluded(部分问题随 B1/B4 门禁与 playtest 联动,见开放问题区)· 本文只装"为什么"——`design/gdd/b3-status-effect.md` 只收本文的结论。
|
||||
> 修订时新增问题节,不删旧节(历史即依据)。
|
||||
|
||||
## 问题 1:为什么四类持续效果共用一个容器、一套机制?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:每类效果各自容器/各写一套计时叠层逻辑——收益:各类可定制;代价:四套生命周期代码、结算明细无法逐行统一归因、四源当量对照无实物载体。
|
||||
- 候选 B:统一容器、三向效果同构实例(采纳)——收益:机制一套、归因一门语言;代价:容器必须足够" dumb ",不能承载任何效果语义。
|
||||
- 候选 C:状态挂在 B1 结算内部——收益:少一个系统;代价:结算编排同时当账本,可回放步骤流失去独立状态侧前提,P2 归因字段无明确 owner。
|
||||
|
||||
### 深度分析
|
||||
|
||||
统一容器让"效果"成为一门单一语言:它是 A3 条款 1"四源统一当量"的对照实物、B1 结算的单一对接面、可回放步骤流的状态侧前提。机制与内容分离是结构原则——B3 只拥有机制(时限/叠层/衰减/生命周期/兑付接口),效果内容的经济归属归各锚 owner(B4/B2),二者不混。
|
||||
|
||||
### 综合判断
|
||||
|
||||
采用候选 B。design 件「系统范围」与 Rule 1 只出现本结论;四规矩(寿命=一场战斗 / 跨轮跨图延续 / 零随机 / 敌侧共享)为既有定稿口径的承载,其中"不跨战斗"为 game-concept 定稿,多敌共享读法按 registry single_enemy_assumption 登记。
|
||||
|
||||
## 问题 2:时限为什么用"剩余结算次数"这单一量纲?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:按轮数计时——收益:直觉;代价:"轮"与"兑付次数"在停手轮/弃图轮分叉,免费延时漏洞。
|
||||
- 候选 B:按时长/秒——收益:无;代价:回合制无意义,引入墙钟。
|
||||
- 候选 C:剩余结算次数倒数(采纳)——收益:读数即规划素材;代价:dur=1 语义须靠"先兑付后衰减"时序契约才完整。
|
||||
|
||||
### 深度分析
|
||||
|
||||
P1 规划素材的成立条件 = 增益携带明确的剩余结算次数与到期时机,玩家才能把它纳入挖哪格的推理;时限语义透明度是规划感的前提。计数量纲与兑付次数同物后,"停手不挖的轮、弃图刷新的轮照常算一次结算、计数照减"成为自然推论——不存在"不结算就不掉次数"的免费延时。dur=1 的"一次性"全部机制内容 = 授予当轮编排期入容器 → 同轮兑付恰一次 → 轮末 R=0 移除,由 F3 时序契约闭合。
|
||||
|
||||
验算示例(F3 Example 原文留档):轮 3:编排期授予 attack_up(L=1、R=D_a=1)→ 兑付 +50% → decay_round()=1(移除);轮 4 query_active(hero) 已不含 attack_up。dur ≥ 2 行(策略探针 D_f=3):授予后逐轮兑付、R 逐轮 −1、第 3 轮末移除——R 轨迹与 k 全由表读值推导。
|
||||
|
||||
### 综合判断
|
||||
|
||||
采用候选 C 并结构冻结(非 knob)。时限量纲 = remaining_settlements 为 game-concept 定稿口径;最后一轮(敌人全灭)是否 decay 归 B1 判定次序域(A3 EC8 同款——battle_end 全清兜底,两种次序产生同终态)。
|
||||
|
||||
## 问题 3:叠层为什么按行 stack_policy 三分支、stack 为什么不重置 R?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:stack 授予同时重置 R——收益:玩家"早拿不亏";代价:stack ≡ refresh + 加层,三分支失去区分性。
|
||||
- 候选 B:stack 加层不触碰 R、refresh 重置 R 取实例授予时快照 D、independent 并存(采纳,用户拍板、结构冻结)——收益:三分支语义正交;代价:dur ≥ 2 行存在"早拿必亏"读法(见下)。
|
||||
- 候选 C:单一全局策略写死代码——收益:简单;代价:未来内容行被锁死,违反数据表驱动(Rule 9)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
spec 决议(F1 注):duration_settlements 只有初始授予定钟;若 stack 也重置 R,则 stack ≡ refresh + 加层。refresh 的重置目标 D 取实例持有的授予时快照(与 EC9 快照语义一致——实例不受表重载影响)。
|
||||
|
||||
验算示例(F1 Example 原文留档):attack_up(stack,D_a=1、M=2):轮 3 同轮授予批次两个安全格事实 → apply_effect×2 → L=2、R=1;同轮第 3 个授予 → L=2=M → **false**(明细"溢出未生效"行);兑付 +100%(F2)→ 轮末 decay R=0 移除。weaken(stack,D_w=1、M=16):轮 3 三旗命中三雷(雷格实例键,三次授予均合法)→ L=3、R=1;兑付 3×m_w(默认 65 → −195%)→ decay 移除;轮 4 一旗命中新雷 → 旧实例已销毁,**新建** {L=1, R=1}——dur=1 行的层只在单轮授予批次内累积,跨轮必为新实例。dur ≥ 2 行(策略探针 D_f=3):跨轮 R 逐轮 −1,refresh 腿见 AC-5。
|
||||
|
||||
体验面反例(OQ7 证伪项):"早拿必亏"——分轮拿满总暴露 150pp vs 同轮拿满 200pp(算例基线 = dur=2 行值);现行四行 D=1 下两读法总暴露相等、不对称休眠,dur ≥ 2 内容行上线时激活。该不对称叠加奖励身份不可预读(创意风险 #1)可能伤害"把 buff 纳入挖掘推理"的规划感(P1)。补偿载体先行:B4 奖励身份预读 + D5"同轮拿满优于跨轮叠"教学;证伪成立则走结构冻结修订流程回炉(合并/重定义 stack 分支)——非调参。
|
||||
|
||||
### 综合判断
|
||||
|
||||
采纳候选 B 并结构冻结;体验面反例登记为 OQ7 playtest 证伪项,补偿载体已登记为 B4/D5 义务。合并在授予时执行、结算作用顺序归 B1 SettlementTable——两序分离,互不干扰。
|
||||
|
||||
## 问题 4:weaken 档位怎么锚定?(F0 裁决全程)
|
||||
|
||||
### 广度分析
|
||||
|
||||
| 分支 | schema 可行性 | 后果 | 裁决 |
|
||||
|---|---|---|---|
|
||||
| 每结算瞬时当量 | 可行(m_w ≥ 51 即过锚——percent 域内) | F2 越域界随移(AP 界 8×m_w / 表界 16×m_w);地板交叉层数 = ⌈100/m_w⌉ = 2;上调的连带成本(地板提前到达、边际层贬值)入裁决 | 采纳 |
|
||||
| 每 AP 总暴露 | 不可行——需 m_w > 100,被 percent ∈ [−100, 100] schema 域禁止 | 现实解 = B4 重定最低档参照(非上调)——未采纳 | 排除 |
|
||||
|
||||
### 深度分析
|
||||
|
||||
- 同分母性:瞬时口径下 weaken 与 hero 侧 buff 作用于同一伤害流,"严格大于"在百分点读法与 HP 读法下等价,锚判定无量纲歧义;总暴露口径引入时长权重,把 duration knob 泄漏进锚判定。
|
||||
- 机制同构:B3 本就按结算逐次兑付,瞬时口径是容器原生口径;总暴露需跨结算累计账本,与已锁的"单结算自然边界"(dur=1 每结算清零无存量)冲突。
|
||||
- 值域依据(@D_ref=12):下界 60 = 条款 2 两腿可行交集(腿一 m_w ≥ 51——65 > 50 严格大于 attack_up 当量〔参照对象,registry 回迁口径〕;腿二随 E_dig 口径修正放宽——m_w ≥ 38,以 B1 GDD F0 重算回执为准);上界 85 = 超出仅在连锁贫瘠板增加裕度、地板交叉层数恒 2;schema 顶 100 保留为绝对上界。
|
||||
- 红警关闭:原 −25 值在两个独立线性代理下同向预检不过(条款 2 锚差约 4×,且"单一线性换算"堵死分源改率、"无单档上限"堵死 max_stack 豁免)——F0 修订后锚两腿通过(瞬时当量 7.8 > 6.0 严格大于 ✓ / 7.8 ≥ E_dig 4.5 ✓——E_dig 读数随 2026-09-14 B1 重算批口径更新,原 7.2 随口径退役);终值共裁与 registry 终值确认联动 B1 OQ2(见开放问题 #1)。
|
||||
- 修复空间不对称(历史登记):每结算瞬时当量归一 m_w≥51 可行(F2 越域界随移 AP 界 −408%/表界 −816%——系 −25 口径旧值);每 AP 总暴露归一 m_w>100 被 percent 域禁止(该分支不可行)——OQ1 前置步骤曾是"B1 先钉死归一口径,口径落定前禁止数值修订";落总暴露则现实解 = B4 重定最低档参照。
|
||||
- 参照对象迁移史:最低档安全格 buff 当量的参照对象曾迁 defense_up 当量(attack_up 时为死行——B4 F4 迁移);2026-09-11 用户裁决"基础攻击恒存在"(HeroTable.atk 域 [1,999]、0 加载拒绝、MVP=6)后 attack_up 复活,参照对象回迁 attack_up 当量(消费面 = 主角战斗段先手攻击);defense_up 迁移退役为历史记录,attack_up 入池时 tier_min_buff 重算。defense_up |−50|×dur2 与 attack_up 数值巧合全等(100pp),迁移期结论不变;迁移后预检未按新参照重跑的义务已于 2026-09-14 B1 重算批兑现(F0/F1 按 attack_up 当量重跑 + F1 锚对照实物改 attack_up 行——迁移注记关闭)。
|
||||
- 地板更正:地板 = 乘数零点 −100pp、交叉层数 = ⌈100/m_w⌉ = 2(原"7 层触地板"预读按 −400% 合成带估读,更正)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
m_w 值域 [60, 85]、默认 −65;归一口径 = 每结算瞬时当量;B3 接口零修订、值变更走 registry 回写——回执以 B1 GDD F0 为准(registry status_effect.anchor_warning)。终值 = B4/B1 共裁(B1 OQ2);裁决时复查 AC-14 腿 3 非平凡性。此节为已裁决设计争议的完整留档。
|
||||
|
||||
## 问题 5:合成值为什么不在 B3 内 clamp?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:B3 输出前 clamp 到 percent 域——收益:下游省心;代价:地板语义被藏进容器,B1 换算方向无从成文,"不 clamp"不可判定。
|
||||
- 候选 B:L×m 原样输出、地板/clamp/换算归 B1 SettlementTable(采纳)——收益:职责单一、可判定(载荷与表值推导值恒相等,任何地板都会使其不等);代价:越域值在边界情况显性存在(EC7)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
B3 只对"L×m 线性合成 + R 计数"负责。weaken 合成下界两档并列:AP 界 = 8×m_w(默认 65 → −520%;默认经济下 flag_hit 单轮 ≤ ap_per_round=8 次授予、dur=1 层只在单轮累积 → L=8)与表界 = 16×m_w(默认 65 → −1040%;仅非 AP 源如 clear_reward 授予、或 ap_per_round 调参后可达 L=16)——两档均越域,均不在本系统内收口。乘算读法(1.5^L)在 B3 语义域外;percent 行的 L×m 是百分点线性叠加。行值出处(provenance,如"原型 1.5×")是数值来历标注,非合成语义。跨 effect_id 聚合、percent 与 flat 混算 = B1 SettlementTable 域。
|
||||
|
||||
验算示例(F2 Example 原文留档):attack_up L=2 → +100 percent(兑换成 2.0× 与否的读法归 B1);defense_up L=2 → −60 percent(B1 换算 0.4×——现行值链下不触地板,"归零"读法须 B1 定义);weaken L=8 → 8×m_w(默认 −520 percent);ambush L=3 → **+9 flat**(3×m_amb——B3 不解释单位)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
采纳候选 B。合成值多大算强、多弱算废、floor 在哪、+3 打谁——均不在本 GDD 语义域(显式排除声明);B1 义务③(percent→乘数换算方向与合成值地板成文)是其对侧承载,AP/表界数值随 F0 修订更新为 −520%/−1040%。
|
||||
|
||||
## 问题 6:数值归属为什么这样切分(B3 无平衡公式)?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:B3 自带平衡公式(值该多大写进本 GDD)——代价:与 B4 奖励经济、B2 敌情上限、B1 结算换算四方争同一事实源。
|
||||
- 候选 B:机制数学(合并/合成/衰减)归 B3,平衡与语义归属逐项划给锚 owner(采纳)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
逐项归属依据:效果档位当量对照表(四源统一当量、单一线性换算)归 B1(出表方兼闭合对账单一签字人,A3 F1 条款 1);weaken 档位锚归 B4 表设计 + B1 对照验收(条款 2,基准 = 连锁放大边际挖掘收益,provisional 1:1);挖掘风险不等式(P(安全)×buff 当量下界 > P(雷)×敌方增益当量上界)归 B2 供给上限表值、B1 单一闭合对账(条款 3);奖励定价(清图奖励及 B4 三硬约束:雾内档位下界 / 锚随雾成本上浮 / 净当量优势带上界)归 B4(A4 pricing_constraints、条款 4/5);percent 消费侧换算与地板归 B1 SettlementTable,flat 量纲归 B2(已定稿)。
|
||||
|
||||
Rule 10 收编史:A3 OQ5"标中旗 debuff 档位归 B4 表设计"经用户 2026-09-08 拍板收编——四行 MVP 初值定稿权归 B3(已定稿),锚验收权仍归 B4/B2/B1(条款 2 + A4 三定价硬约束引用的"最低档安全格 buff 当量"以 attack_up 行为参照对象),修订走接口漂移回写 registry ownership_note;A3 GDD(Approved)不改,以该条 + registry 为准。这是对"档位归奖励表设计"的显式收编——初值定稿权与锚验收权分离。
|
||||
|
||||
### 综合判断
|
||||
|
||||
采纳候选 B。B3 无平衡公式;四行 MVP 值全部 provisional;改初值 = 接口漂移回写 registry,不是随手调参。
|
||||
|
||||
## 问题 7:满层为什么是"拒绝 + 留痕"而不是覆盖或静默?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:满层覆盖最旧层——代价:寿命被偷偷重置,违反"stack 不触碰 R"决议;玩家不可规划。
|
||||
- 候选 B:满层静默吞掉——代价:奖励蒸发无痕迹,违反 P2 诚实。
|
||||
- 候选 C:拒绝原子(false + 容器逐字不变)+ "溢出未生效"明细行含来源(采纳)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
奖励的浪费是诚实的、可规划的:玩家看得到"这层白拿了",下次就懂得满层时别再拿同款。无论这份重复来自玩家直接踩出的格子、结算转化、还是连锁展开自动开出的奖励格,都走同一个授予入口,满层时同样产生溢出行、同样留痕。拒绝原子性保证无半写、无溢出落层;同轮多授予谁被拒取决于 B1 授予次序——授予次序确定性是 B1 编排义务(义务①)。
|
||||
|
||||
原则张力留档(EC4):refresh 空刷新静默返 true 与 Rule 5"不静默蒸发"存在张力(stack 有溢出行、refresh 无对应物)——MVP 零消费者故休眠,首个 refresh 内容行上线时其授予可见性语义由 B4/B1 随 OQ3 一并裁决。
|
||||
|
||||
### 综合判断
|
||||
|
||||
采纳候选 C。呈现归 B5/D1(溢出行呈现、origin_cell 玩家可读形态两项义务已登记)。
|
||||
|
||||
## 问题 8:体验锚点如何落到机制?(P1/P2/P3 论证)
|
||||
|
||||
### 广度分析
|
||||
|
||||
| 支柱 | 关键词 | 机制承诺 |
|
||||
|---|---|---|
|
||||
| P2 可归因的兑现感 | "我攒下的东西正在替我打架" | 每个状态实例携带来源标注(安全格/标中旗/清图/雷),结算明细逐行生效——P2 准话测试"这个结果是我哪步扫雷带来的?"在 B3 字段里就有答案;"规划的延迟兑现"从口号变成可见事实的机制落点 |
|
||||
| P3 雷的两面 | "雷是赌桌不是陷阱" | 踩雷的敌方增益行与标中旗的削弱行在结算明细里使用同一呈现语言,玩家由此学会雷的两面;旗标对的即时回报部分补偿 chord 缺席的兑现节拍缺失(CD 创意风险 #3 的关联缓解,正式高光设计归 B1/B4) |
|
||||
| P1 规划素材 | "还剩几次结算、何时到期" | 增益携带明确的剩余结算次数与到期时机,玩家才能把它纳入挖哪格的推理——时限语义的透明度是规划感的前提;满层溢出行可见("满层时别再拿同款") |
|
||||
|
||||
反向护栏:状态效果绝不能是无感的暗账——玩家说不出一行结算"从哪来",来源标注即失职(违反 P2);任何让 buff 时限/剩余次数不可读的设计默认砍掉。
|
||||
|
||||
### 深度分析
|
||||
|
||||
参考感受:杀戮尖塔的增益图标(时机与层数一目了然,是决策素材而非装饰)、Peglin 神器在关键时刻叠加生效的"攒出来的强大"。两者共同指向:状态图标是决策素材,时限/层数不可读 = 机制白做。旗标对的即时回报与 CD 创意风险 #3(chord 缺席的兑现节拍缺失)是关联缓解而非正式高光——正式高光设计归 B1/B4,B3 只提供字段与兑付面。
|
||||
|
||||
### 综合判断
|
||||
|
||||
三锚点全部由已有字段承载(六归因字段 + display_name + 授予时快照),无新增机制需求;呈现侧三要素(图标/层数/剩余结算次数)与极性映射登记为 D1/B5 数据面义务。
|
||||
|
||||
## 问题 9:defense_up −50→−30(减伤墙批)的数值论证
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:维持 −50——代价:叠满两层 −100 恰触 percent 地板,免伤轮由 defense_up 单侧可达,防御型奖励失控(减伤墙)。
|
||||
- 候选 B:回调 −30(采纳,C3 投值)——叠满两层 −60 帽,免伤轮不再由 defense_up 单侧可达。
|
||||
|
||||
### 深度分析
|
||||
|
||||
定量坐实:defense_scan 墙轮 39% / 真人 12 轮零承伤。回调后免伤轮现行可达路径 = weaken 饱和(敌侧单结算零输出);defense_up 叠满 = 0.4× 承伤(消费读法归 B1),B1 地板规则压力同步解除。回调下界 = 减伤墙复发——观测锚 = C3 承伤带复验与 B1 条款③重跑。该回调即"禁独立调参"联动网络的实证:defense_up.magnitude/duration 已纳入 m_w↔D_ref↔m_d↔duration_d 联动网络(与 B1 Knob 交互同口径),减伤窗口强度与 attack_up 同入 B1 对账联动评估(B1 地板规则 × 战斗时长曲线 × 条款③ V_safe),禁止独立调参。
|
||||
|
||||
### 综合判断
|
||||
|
||||
−30 为现行 provisional 值;修订轨迹与免伤轮叙述同步见 design 件版本历史(对侧 B1 F2 同批)。
|
||||
|
||||
## 问题 10:四行 knob 调过高/调过低各会发生什么?
|
||||
|
||||
### 广度分析(逐 knob 后果,Knob 表原文留档)
|
||||
|
||||
| Knob(表行值,D2 承载) | 默认 | 调过高 | 调过低 |
|
||||
|---|---|---|---|
|
||||
| attack_up.magnitude | +50 | 叠满 +100%,敌方 HP 池相对贬值(战斗时长曲线压向 B1 对账) | 安全格奖励空心化——A3 条款 3 左臂(P(安全)×buff)塌方 |
|
||||
| defense_up.magnitude | −30 | 叠满 −60%(免伤轮不再由 defense_up 单侧可达——B1 地板规则压力同步解除) | 减伤无感,防御型奖励萎缩(回调下界 = 减伤墙复发——观测锚 = C3 承伤带复验与 B1 条款③重跑) |
|
||||
| weaken.magnitude | −65(值域 [60, 85]) | 越域界加深(表界 16×m_w)、地板交叉层数 ⌈100/m_w⌉ 恒 2、边际层贬值 | 值域下界 60 = 条款 2 锚两腿可行交集——越界即破锚(修订方向 B4/B1 裁决) |
|
||||
| ambush.magnitude | +3 flat | 量纲已定稿(每攻击类行为 +3 HP)——踩雷痛感随值放大,条款 3 上限对账归 B1 | 踩雷无痛感——P3"风险与收益同源"失衡 |
|
||||
| duration_settlements(四行) | 1/1/1/1(当次结算) | 窗口拉长恢复跨轮延续(规划变简单、衰减感消失) | 已在下界 1(一次性语义——再低无定义) |
|
||||
| max_stack(四行) | 2/2/16/16 | 合成越域幅度增大(B1 地板压力↑) | 叠层机制边缘化(重复奖励变溢出浪费) |
|
||||
|
||||
### 深度分析
|
||||
|
||||
Knob 交互:attack_up 与 weaken 是条款 2/3 对账的两端——禁止独立调参,联动评估归 B1 闭合对账;A3 的 ap_per_round 是 weaken 单轮层和的经济上限(F2 AP 界 8×m_w 的来源);效果档位当量对照表(B1)落定前,四行 magnitude 的任何调整都须重跑条款 2/3 锚预检并同步 registry(接口漂移义务)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
四行值全部 provisional;调参纪律(禁独立调参 + 重跑锚预检 + registry 同步)为结构规则,已留在 design 件调参表。
|
||||
|
||||
## 问题 11:ambush 量纲与敌侧 side-wide 语义怎么定稿的?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- ambush 量纲候选:进倍乘的 percent / 后置加法 flat(采纳,B2 GDD 定稿)。
|
||||
- 敌侧作用范围候选:单体寻址 target_ref / side-wide 全体存活敌单位(采纳)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
ambush_unit_definition(B2 GDD Rule 6/F2 定稿,registry OQ2 关闭条件兑现):+3 flat = 每层伏击为每次攻击类行为(attack/heavy)附加 3 点主角 HP 伤害(后置加法、不进倍乘);charge 拍零兑付(空拍蒸发);值仍 provisional(锚验收归 B4/B1——A3 F1 条款 3;B2 供给 cap 表值与单结算自然边界口径见 clause3_supply 条目)。
|
||||
|
||||
single_enemy_assumption 回验史:Core Rule 1 原单敌假设经 B2 定多敌模型(1–3 个同敌种敌单位,EnemyTable.unit_count,用户 2026-09-09 拍板)回验不成立——效果 side-wide 语义改"全体存活敌单位"(层数 = side 共享池),B3 现接口零变更兼容;target_ref(单体寻址)= 扩展位义务——首个单体效果上线时 B3 补列(随批:B1 归集语义/D1 呈现裁决);B3 GDD 正文不改,以 registry 该条为准(A3 OQ5 收编先例)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
量纲与 side-wide 均已定稿且与 B3 接口解耦——B3 不解释单位、不感知敌数;两条均以 registry 为准的收编形态落档。
|
||||
|
||||
## 问题 12:测试策略为什么这样设计?(夹具/退化/deferral 论证)
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 夹具注入候选:程序构造注入表 vs --data-root 行为夹具根(采纳后者承载 refresh/independent 语义)。
|
||||
- 致命夹具候选:每类致命各一根 vs 恰一根 dup_key(采纳后者)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
选夹具根而非程序构造注入表的理由:容器经 ConfigDB 单点读表(Rule 2/9)、无表注入 API——--data-root 是 debug/test 构建的既定注入通道。致命类收窄的理由:恰一根 status_effect_dup_key(重复键类别)实证"游戏内真的会死"在本表上的落点(loader 集成缝 = loader 是否对本表调用校验的进程级落点,runner manifest 退出码 dup→≠0,D2 AC-2b 协议同型);其余致命类别(枚举域/域校验/跨字段)由 D2 AC-2 同类别 loader 级夹具承载(表无关,豁免声明收窄保留),schema 侧以程序构造断言域类别(AC-13)。
|
||||
|
||||
退化与 SKIP 纪律:AC-4 腿 2 / AC-8 / AC-14 腿 3 / AC-17 并入腿均依赖表读值前提(D_a ≥ 2、M_w×m_w 越域等)——默认表值不满足时退化跳过 + 显式 SKIP 标记防 CI 静默、不假失败;AC-14 腿 3 非平凡性依赖默认基线(M_w=16、m_w=−65 → −1040 越出 percent 域),knob 调参使 M_w×m_w 绝对值 ≤ 100 时退化为恒等断言,退化时输出显式 SKIP 日志、CI 可见防静默失真。out-of-scope deferral 生效条件 = B1 义务清单全部落位(已成立);Rule 8 负空间"无对应 API"不可 GIVEN-WHEN-THEN,验收形态 = API 面封闭枚举 + 接口漂移修订门。
|
||||
|
||||
### 综合判断
|
||||
|
||||
测试口径九行(载体/被测面/返回/观测量/时序/期望值/夹具/致命收窄/OOS)全部为结论性规格,留 design 件验收标准节;本节仅留存选型理由。
|
||||
|
||||
## 开放问题
|
||||
|
||||
| # | 问题 | owner | 状态/时机 |
|
||||
|---|---|---|---|
|
||||
| 1 | weaken 条款 2 锚裁决——归一口径已由 F0 裁决关闭(每结算瞬时当量;总暴露分支被 schema 域禁止排除),m_w 值域 [60, 85]/默认 −65 已入文。余项:终值共裁确认 + registry 终值回写,裁决时复查 AC-14 腿 3 非平凡性 | B4/B1(deadline:B1 GDD 强制检查点) | 余项随 B1 OQ2 联动 |
|
||||
| 2 | ambush 量纲——已定稿(B2 GDD:每层伏击为每次攻击类行为附加 m_amb 点主角 HP 伤害、后置加法、charge 拍零兑付——registry ambush_unit_definition)。余项:B1 条款 3 上限检验 | B2 → B1 | 随 B1 对账闭合 |
|
||||
| 3 | 首个 refresh/independent 内容行的 AC 补全——EC4 登记义务:奖励池引入非 stack 行时补真实内容行冒烟 AC,夹具探针行退役;其授予可见性语义(空刷新 vs Rule 5)随批由 B4/B1 裁决 | B4 | 奖励池引入非 stack 行时 |
|
||||
| 4 | clear_reward 源授予——清图奖励若含 buff 的授予路径确认(apply_effect source=clear_reward;A3 条款 4 差异化插槽) | B4 | B4 期 |
|
||||
| 5 | EC9 reload gate 的 B1 侧落点——防"战斗中真的被置位"零落点(qa-lead 缺口 #4) | B1 GDD 门禁评审 | 随 systems-index 门禁记录登记 |
|
||||
| 6 | 效果当量对照表的预检重跑——条款 1 对照表落定时按预检重跑 weaken/ambush 方向性预检(正式对账载体);C3 首次调参即须按现行参照(attack_up 当量)复算条款 2 预检 | B1 | B1 对照表落定 / C3 首调 |
|
||||
| 7 | stack-不重置 R 的 playtest 证伪项——F1 注决议(用户拍板、结构冻结)的体验面反例检验:"早拿必亏"(分轮拿满总暴露 150pp vs 同轮拿满 200pp——算例基线 = dur=2 行值;现行四行 D=1 下两读法总暴露相等、不对称休眠,dur ≥ 2 内容行上线时激活)叠加奖励身份不可预读(创意风险 #1)是否伤害"把 buff 纳入挖掘推理"的规划感(P1)。补偿载体先行:B4 奖励身份预读 + D5"同轮拿满"教学;证伪成立则走结构冻结修订流程回炉(合并/重定义 stack 分支)——非调参 | 垂直切片前置 playtest 批次 | playtest |
|
||||
|
||||
## 附录 A:一致性核对与审计注记(历史审计留档)
|
||||
|
||||
| 项 | 内容 |
|
||||
|---|---|
|
||||
| 双向一致性 | B4 ← A2, B3, D2 ✓ · B1 ← A3, B2, B3, B4, D2 ✓ · B3 ∈ Foundation、无上游 ✓(systems-index 依赖分层表) |
|
||||
| B2 无边说明 | 索引无 B2←B3 边与依赖表 B2 行不矛盾——敌方状态的承载在 B3,但授予路径经 B1,B2 与 B3 之间是验收锚关系非运行时依赖,故不列边 |
|
||||
| D2 hard 措辞 | "hard"指 ConfigDB 读表的数据通道事实依赖(registry config_db referenced_by=[all-systems] 同口径);索引分层表不列纯数据读取边——相容非矛盾 |
|
||||
| Rule 10 回写 | 对 A3 OQ5"档位归 B4 表设计"的收编(初值定稿权归 B3、锚验收权留 B4/B1)已回写 systems-index 门禁记录与 registry ownership_note |
|
||||
|
||||
复核注记(v1.1-lean 头部留档):lean 门禁下 systems-designer / qa-lead 已委托起草(Formulas / AC);creative-director 与 art-director 未经咨询——生产前人工复核体验锚点情绪定位与视觉数据面规格同 art-bible 的一致性。
|
||||
|
||||
## 附录 B:去向映射(零丢失可审计证据)
|
||||
|
||||
| 原文节 | 落点 |
|
||||
|---|---|
|
||||
| 头部(状态/版本/支柱/Layer/一句话) | design 头部块 |
|
||||
| 头部复核注记 | analysis 附录 A |
|
||||
| 速览表 | 定位→design 设计目的;拥有/不拥有→design 系统范围;上游/下游→design 依赖与输出;硬约束→design 系统范围「负责」 |
|
||||
| 体验锚点(含反向护栏/参考感受) | 承诺结论→design 设计目的 1–4;论证全文→analysis 问题 8 |
|
||||
| 全局流程(生命周期字符画 + 出口分发表) | design 核心循环(原样保留) |
|
||||
| 核心规则 Rule 1/3/4/5/6/8(人话 + 子表) | design 授予、合并与接口(编号人话句 + 四张原表 + 举证表) |
|
||||
| 核心规则 Rule 2(含时限语义参照表) | design 时限与衰减 |
|
||||
| 核心规则 Rule 7 | design 数值结论·显式排除声明节末 |
|
||||
| 核心规则 Rule 9 / Rule 10(含举证依据) | design 枚举与数据字段(schema 小节 / MVP 内容行小节) |
|
||||
| 枚举(source_class / target_side·unit·stack_policy / MVP 四行) | design 枚举与数据字段(原表保留) |
|
||||
| F0 结论 | design 数值结论 F0;推导表与论证→analysis 问题 4 |
|
||||
| F1 结论/伪代码/Variables/Output Range | design 数值结论 F1;F1 注(spec 决议理由)+ Example 验算→analysis 问题 3 |
|
||||
| F2 结论/表达式/Variables/Output Range | design 数值结论 F2;不 clamp 论证 + Example 验算→analysis 问题 5 |
|
||||
| F3 结论/伪代码/Variables/时序契约/Output Range | design 数值结论 F3;时限量纲论证 + Example 验算→analysis 问题 2 |
|
||||
| 显式排除声明(归属表) | design 数值结论;归属切分理由→analysis 问题 6 |
|
||||
| 状态(四态表 + 不变式 + 纯逻辑类口径) | design 实例状态 |
|
||||
| 边界情况 EC1–EC14 | design 边界情况(原表保留,增编号列) |
|
||||
| 依赖(上游 D2 / 下游八行) | design 依赖与输出(双向一张表) |
|
||||
| B1 侧义务清单 ①–⑧ | design 依赖与输出(活契约原表保留) |
|
||||
| 呈现与教学义务清单(D1×4/B5×2/D5/B4) | design 依赖与输出(活契约原表保留) |
|
||||
| 一致性核对与注记 | analysis 附录 A(历史审计) |
|
||||
| 呈现与 UI 契约(数据面义务 4 行) | design 依赖与输出(活契约原表保留) |
|
||||
| Tuning Knobs schema + 加载校验 + Rule 4 豁免 | design 枚举与数据字段 schema 小节 |
|
||||
| Tuning Knobs F0 回执注记 | design 数值结论 F0 |
|
||||
| Knob 表(调过高/调过低) | 字段|域|默认|owner→design 调参表;后果论证全文→analysis 问题 10 |
|
||||
| 非 knob 结构冻结 + Knob 交互 | design 调参表(规则为结论保留);联动网络论证→analysis 问题 9/10 |
|
||||
| 验收标准(测试口径 9 行 / 夹具规格 3 根 / AC-1–19 / 覆盖矩阵) | design 验收标准(原表保留,AC 编号不动);选型理由→analysis 问题 12 |
|
||||
| 开放问题 OQ1–OQ7 | analysis 开放问题区(原编号保留) |
|
||||
| 减伤墙批(−50→−30)论证 | analysis 问题 9;结论值留 design 调参表与 MVP 行表 |
|
||||
| ambush 量纲 / 多敌 side-wide 定稿史 | analysis 问题 11;结论留 design 枚举与系统范围 |
|
||||
| 版本历史(全部历史行) | design 版本历史(原行全保留 + 追加 v2 迁移行) |
|
||||
@@ -0,0 +1,148 @@
|
||||
# C2 冒险结构 设计推演
|
||||
|
||||
> 状态:concluded · 本文只装"为什么"——`design/gdd/c2-adventure-structure.md` 只收本文的结论。
|
||||
> 修订时新增问题节,不删旧节(历史即依据)。
|
||||
> 本文由 v1(lean 全文,2026-09-14)两件套迁移而来:原文的公式推导过程、数值锚定论证、候选取舍、体验锚点论证与已裁决争议按问题归位;文末附开放问题、历史审计与去向映射(零丢失审计表)。
|
||||
|
||||
## 问题一:冒险骨架为什么是"N=2 线性序列 + 死亡即终",序列为什么必须被内容覆盖锁死?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:维持切片现状(单关 N=1)——收益是零新增内容即可运行;代价是承载不了 P4"不断下探更险的层"的序列感,也没有 P1 要的冒险级对照物("这局我到第几层"没有坐标)。
|
||||
- 候选 B:线性序列 MVP N=2(L1 地牢基线 → L2 雾解锁 + 数值台阶)——收益是用最小内容批同时给出可感知难度台阶(通关率带下移 + 雾解锁 + 数值跳升)与冒险级坐标;代价是 N=2 生效前提 = C3 L2 深度轴行值(enemy/board_gen 的 (2, D1–D4))填充批,未落地期只能以 N=1 合法态运行。
|
||||
- 候选 C:更长或带分支/跳关的序列——收益是逼近愿景单局 20–40 分钟(OQ1);代价是扩关 = 内容批(链行 + 敌我数值 + 变异解锁同批落),MVP 期内容缺口风险最大,且跳关/回头路与 MVP 线性语义冲突。序列扩展走修订批,不许静默加回。
|
||||
|
||||
### 深度分析
|
||||
|
||||
序列覆盖义务把"冒险长度"从运行时问题变成内容生产问题:冒险关数 ⊆ 表内容覆盖,运行时战斗表 floor 兜底属 D2 既有语义,C2 不产生越界请求、玩家不可达越界关——越界关卡 = 内容生产缺口,必须在冒烟期被断言拦下(行集内每个 battle/boss 节点 (L,D) 在 enemy/board_gen 两表有精确行 + 序列关数断言,D2 跨表校验复用),而不是运行期被兜底吞掉。关卡行缺失同理是序列配置事故、fail-fast 处置,与战斗表 floor 兜底分属两层。
|
||||
|
||||
难度总闸在 N:P_run = Π P(L_i) 是乘法合成——N=2 合成带 [6%, 20%](L1 [30,50]% × L2 [20,40]%,L3+ [10,25]% 预留)对应 Roguelike"多数局止步中途"的体感;每加一关带再乘一次,所以扩关节奏必须用真人单关时长数据裁决(OQ1),不能拍脑袋加关。链模板(battle D0/D1 → reward → battle D2/D3 → rest → boss D4,7 节点 5 战斗深度)与深度标号规则(前序战斗节点计数、Boss = Dmax、reward/rest 不占深度不查战斗表)让 L1/L2 同构复用、加关只动内容批不动结构。
|
||||
|
||||
### 综合判断
|
||||
|
||||
定案:MVP N=2 线性序列(无跳关、无回头路),死亡即冒险终;通关 = Boss 战胜利(C3 Boss 通关编排归属 C1/C2 域——game-concept 冒险语义承接);序列覆盖由冒烟断言 + D2 跨表校验承接;A4 雾 unlock_level=2 是 L2 台阶的内容面(序列难度排布消费);扩关节奏归 OQ1(playtest 批次 2 后,C2 + C3)。
|
||||
|
||||
## 问题二:HP 为什么一条血走完整个冒险、恢复为什么只留恢复点与大奖励两个显式口?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:每关开始回满(切片现状)——收益是关卡间难度解耦、无需账本;代价是"Boss 前把血囤满"的囤积决策消失,P3 塌掉,冒险没有资源压力曲线。
|
||||
- 候选 B:跨战斗 HP 账本 + 两个显式回血口——收益是血成为冒险内唯一带得走的资源、恢复点位置 = 决策压力点;关卡切换零结算、账本收支四口(置满/交出/收回/入账)结构简单可测;代价是要给 C1 增 report_battle_end / heal_clamped 两个上报口,并经 begin_battle 覆盖值通道供值。
|
||||
- 候选 C:大奖励改部分恢复——收益是削弱对满血口径的强依赖;代价是 C3 逐关通关率带按每关满血开局校准,大奖励血回满正是该口径跨关成立的闭合件——改部分恢复则 F1 合成式整体失效、须改口径;否决,仅在 OQ2 大奖励形态扩展时重审。
|
||||
|
||||
### 深度分析
|
||||
|
||||
跨战斗 HP 持久性归 C1/C2 是已锁事实——B2 单位接口以初始 hp 入参、零变更,C2 以账本兑现自己那半边;B4 关内库存跨战斗延续与账本同构。三套跨战斗生命周期口径对齐:buff 战斗域清(B1)、RAP 战斗域清(A3)、库存关卡域清(C1 收束点)、血冒险域延续——冒险内无跨关遗留物,冒险层账本与摘要是唯一跨关状态。
|
||||
|
||||
clamp 边界:账本三写口全部 clamp [0, max_hp_eff];恢复点满血触发回 0 合法(账本静默——无明细行协议,与战斗域"奖励未生效"族不同层);defeat 腿 = 0 与"死亡即冒险终"闭合,不存在"带着 0 血进下一战"的中间态。max_hp_eff = HeroTable.max_hp + Σ大奖励提升——恢复比例 rest_heal_pct 随上限加成同步放大,防止高上限档恢复失效(切片 30 转正 provisional,数值复验归 C3)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
定案:F2 账本结算式——战后回写 / 恢复点比例回血(floor(max_hp_eff × rest_heal_pct ÷ 100))/ 大奖励回满三写口全 clamp;血条跨关只降不自动回。切片"每关开始 HP 回满"转正改写为跨关延续,恢复只来自恢复点节点与大奖励两个显式口。依据链:B2 hp_persistence 归 C1/C2、B1 begin_battle 覆盖值入参、B4 关内延续同构。
|
||||
|
||||
## 问题三:关卡大奖励为什么是三件固定构成、为什么末关不兑付、为什么不进库存?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:发进背包的物品——与库存裁决冲突:库存生命周期 = 关卡域,收束点已清空,跨关携带违背"关卡末清库"既定语义;且奖励内容/库存语义归 B4/C3,C2 不碰库存域。否决。
|
||||
- 候选 B:三件固定(上限 +10 / 血回满 / 代币 +10/关)——上限提升经 begin_battle 覆盖值通道传入后续每战(hero 表运行期不可变,覆盖值是唯一合法提升通道);回满与 C3 满血开局校准口径闭合(问题二);代币给 C4 一个干净入账位(levels_cleared 乘子)。
|
||||
- 候选 C:三选一 / 攻击型 / 通关加成等扩展形态——MVP 无元进度消费面;AdventureTable 扩列结构位已留,随 C4 元进度设计(OQ2),通关加成位预留不启用(裁决归 C4)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
末关不兑付的机理:上限提升只对"下一战"有收益,末关通关后没有下一战可受益——此时兑付是死数值,还虚增摘要口径;代币照记(乘子是 levels_cleared,不受影响)。
|
||||
|
||||
时点约束"收束清库之后、下一关开始之前"不可换:清库(B1 level_clear)在收束点已由 C1 触发,大奖励若插在清库前会被关卡域清空吞掉。上限 +10 的值锚是 C3 区间平移换算率(+10hp ≈ +1 轮)——回满 + 上限共同抬开局强度,上调须 C3 重扫 L2 通关率带;累加语义(每关一份,N=2 冒险至多一次)让多次兑付不产生重复歧义。
|
||||
|
||||
### 综合判断
|
||||
|
||||
定案:三件固定构成;F3 记账式 tokens = levels_cleared × token_per_level,通关与中途死亡同式、差异只在 run_completed 标记;末关不兑付;不进背包不占库存域。依据链:B4 库存关卡域裁决、C3 区间平移换算率锚、C4 记账位。
|
||||
|
||||
## 问题四:失败重开为什么是全新冒险、放弃为什么同失败型、种子域单位为什么是冒险?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:关卡重试 / 检查点——直接违背 game-concept"死亡则冒险结束"已锁语义。否决。
|
||||
- 候选 B:重开 = 全新一轮(新种子 / 第 1 关 / 满血 / 空手)——每局是新局面而非同一关复读(P1 锚点);保留面只有冒险摘要(坐标对照),清零面 = 账本 / 库存 / 种子域,Roguelike 重开纯度最高。
|
||||
- 候选 C:切片逐关播种 + 逐关重置——切片无冒险层的历史简化:逐关播种使冒险不可复现(快照契约域单位 = master_seed + 三流计数器对不上),转正改写为冒险域单种子、关卡间 RNG 连续。
|
||||
|
||||
### 深度分析
|
||||
|
||||
放弃同失败型:差异只在 run_completed 标记与"玩家主动";已到手的保留(已获大奖励不追回)——追回需要回滚大奖励三件,复杂度全在边界上且无体验收益。战斗中拒绝受理(战斗域单事务在飞),入口呈现仅非战斗期可达;MVP 无 UI 入口,语义预留归 OQ4 / D1。
|
||||
|
||||
种子接线:注入时点 = 冒险开始恰一次,冒险内雷图生成 / 奖励抽取 / 遭遇掷骰全部派生自该种子、冒险内不重置;重开种子与上局相同是合法态(熵源小域)——约束在通道而非值:种子生成禁走玩法随机通道、冒险内计数器随 reseed 归零,生成器归属归实现期 ADR(OQ3)。零流消费(RngService open_stream 零命中)让"冒险可复现域"有静态可验的判据(AC-8 静态扫描)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
定案:死亡即冒险终(无关卡重试、无检查点);重开 = 全新一轮,保留面 = 摘要、清零面 = 账本/库存/种子域;放弃同失败型、非战斗期受理;一次冒险一粒种子、冒险 = 快照契约域单位(D3 复盘消费 master_seed)。依据链:game-concept 死亡即终、A3 RAP 战斗域生命周期、registry rng_service 快照契约 + D3 消费方。
|
||||
|
||||
## 问题五:C1/C2 编排边界为什么收束点在 C1、C2 为什么零直调?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:C2 直调 B1 战斗/清库——冒险层同时侵入战斗域与库存域,收束点语义分裂:库存清空触发源不唯一,时序归属扯皮。否决。
|
||||
- 候选 B:收束点在 C1(先调 B1 level_clear、再向 C2 宣布 level_end)——库存关卡域清空触发源唯一(C1 收束点),C2 零战斗域直调、零库存域直调,只守账本写口与收束监听。
|
||||
- 候选 C:收束点在 C2——C2 需要监听战斗内部状态才能判收束,跨层反向依赖,违背"C1 拥有关内行进"的切分。
|
||||
|
||||
### 深度分析
|
||||
|
||||
先例转正:切片 level_runner 的关卡域生命周期切两半——冒险域(序列推进 / HP 账本 / 大奖励 / 重开 / 种子)归 C2 侧新 owner,关内行进与节点兑付触发归 C1。B1 出口分发既定语义"关卡结束 = 上层显式调用"由 C1 收束点承接。
|
||||
|
||||
接口契约四件套(start_level / report_battle_end / heal_clamped / level_end)+ 战斗发起组装权是 C1 GDD 强制输入——C2 在 C1 之前设计,边界措辞即 C1 接口基线,C1 定稿须全款承接核对(门禁评审项)。战斗发起组装:深度取链位、关卡序号与血条取 C2 下放、hero_atk 走表值通道(MVP 冒险内不提升攻击)。防御双层:英雄死亡但战斗判定胜利为结构不可达(B1 判定 hero 先判),cleared 收束另有账本 hp > 0 防御断言——不依赖运行时序的单点正确。
|
||||
|
||||
### 综合判断
|
||||
|
||||
定案:C1 拥有关内一切行进与收束点,C2 只接结果;四件套 + 组装权成文为契约表(design 领域六);对侧义务全款列入 design 依赖与输出的活契约台账(C3 L2 行值批 / D2 种子注入入口 + AdventureTable 建表 / B1 begin_battle 入参供给方转正 / C1 全款承接核对 / C4 远期消费 / registry 三条目登记)。
|
||||
|
||||
## 开放问题(原文 OQ 全量,编号不动)
|
||||
|
||||
| # | 悬案 | 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 内容批 |
|
||||
|
||||
迁移校验说明:未发现原文内部或原文与 registry 之间的数值/规则冲突;无新增待拍板项。唯一迁移副作用:registry `hero_override_parameter_passing.adr_status` 引用"C2 GDD 规则 3/4"作为 HP 账本供值的定义源——v2 迁移后 C2 规则改为领域内编号(对应现 design 领域三规则 1 与领域四规则 1–2),该跨文档编号引用失真,registry 修订归 owner 批处理(本迁移批禁碰 registry)。
|
||||
|
||||
## 附录 A:历史审计(自 v1 正文迁入,非现行规则)
|
||||
|
||||
- 复核注记(v1 定稿时):v1 solo 出稿 → 经 /design-review(--solo 快速审批)APPROVED(0 blocking / 3 recommended——recommended 随下次修订批执行);专员/总监代理未咨询——生产前人工复核保留。评审日志:`design/gdd/reviews/c2-adventure-structure-review-log.md`。
|
||||
- 状态沿革:v1 出稿时状态头 In Design → v1.1 评审通过同步为 Approved(零规则变更),详见 design 件版本历史。
|
||||
- C2 是结构系统——运行时零新增公式;F1 为设计期工具式、F2/F3 为账本结算式,全部数值 provisional,调参所有权见 design 调参表(v1 数值节导语,随迁)。
|
||||
|
||||
## 附录 B:去向映射(零丢失审计表)
|
||||
|
||||
| 原文(v1)节/表 | 落点 |
|
||||
|---|---|
|
||||
| 头部(状态/版本/作者/承载支柱/一句话/复核注记) | design 头部(状态/版本/一句话/推演件)+ 设计目的定位段(支柱);复核注记 → 本文附录 A |
|
||||
| 速览·定位 / 拥有(7 项) / 不拥有(6 项) | design 设计目的定位段 + 系统范围(负责/不负责两清单,归属括注保留) |
|
||||
| 速览·上游输入 / 下游输出 | design 依赖与输出主表对应行接口要点 |
|
||||
| 速览·硬约束(零随机/序列覆盖/死亡即终/不碰库存域) | 领域一不变式 3(零流消费)+ 领域五规则 4(单一种子注入点)+ 领域二规则 2(序列覆盖)+ 领域五规则 1(死亡即终)+ 领域六规则 3(不碰库存域) |
|
||||
| 体验锚点表(4 行:P4/P3/P1/锚点时刻) | design 设计目的编号承诺 1–4(关键词与机制承诺逐条保留) |
|
||||
| 全局流程·冒险生命周期字符画 | design 核心循环与冒险生命周期(等义压缩重排,全部分支与标签保留) |
|
||||
| 全局流程·出口分发表(4 行) | design 核心循环出口分发表(原文保留) |
|
||||
| 核心规则 1(冒险骨架)+ 依据 | design 领域二规则 1;依据链 → 本文问题一综合判断 |
|
||||
| 核心规则 2(序列覆盖)+ 依据 | design 领域二规则 2 + 细则表;依据链(D2 跨表校验 / C3 期望表与 OQ1 / A4 unlock_level=2)→ 本文问题一 |
|
||||
| 核心规则 3(HP 账本)+ 依据 | design 领域三规则 1–2;依据链(B2 hp_persistence / B1 begin_battle 入参 / B4 关内延续同构)→ 本文问题二 |
|
||||
| 核心规则 4(大奖励)+ 依据 | design 领域四规则 1–3 + 构成表;依据链(B4 库存关卡域 / C3 平移换算率 / C4 记账位)→ 本文问题三 |
|
||||
| 核心规则 5(失败重开)+ 依据 | design 领域五规则 1–3;依据链(game-concept 死亡即终 / A3 RAP 生命周期)→ 本文问题四 |
|
||||
| 核心规则 6(种子接线)+ 依据 | design 领域五规则 4–5;依据链(registry rng_service 快照契约 / D3 消费方)→ 本文问题四 |
|
||||
| 核心规则 7(C1-C2 编排边界)+ 依据 | design 领域六规则 1–3 + 契约表;依据链(B1 出口分发 / level_runner 先例转正)→ 本文问题五 |
|
||||
| 规则 2 细则表(5 行) | design 领域二首表(原文保留) |
|
||||
| 规则 4 细则表(3 行) | design 领域四构成表(原文保留) |
|
||||
| 规则 7 细则表(接口契约 6 行) | design 领域六契约表(原文保留) |
|
||||
| 枚举·冒险结果(3 值)/ 关卡收束结果(2 值) | design 领域一"结果与收束枚举"合并表 |
|
||||
| 枚举·冒险摘要(5 字段) | design 领域一冒险摘要表(原文保留) |
|
||||
| F1(结论/推导/变量/验算) | design 领域二 F1(结论 + 表达式 + 变量表 + 验算表原文保留);推导论证 → 本文问题一深度分析 |
|
||||
| F2(结论/推导/变量/验算) | design 领域三 F2(原文保留);口径与边界论证 → 本文问题二 |
|
||||
| F3(结论/推导/变量/验算) | design 领域四 F3(原文保留);末关不兑付机理与扩展取舍 → 本文问题三 |
|
||||
| 状态表(3 态)+ 不变式(5 条) | design 领域一状态表 + 不变式规则 1–3(hp ∈ [0, max_hp_eff] 并入不变式 1) |
|
||||
| 边界情况表(11 行) | 逐行内联:末关 Boss 胜利 → 领域四规则 3 + 领域一;start_level 越界 → 领域二规则 4;内容缺口 → 领域二规则 3;level_end 重复宣布 → 领域一不变式 2;恢复点满血 → 领域三规则 4;上限已有加成 → 领域四规则 2;战斗中放弃 → 领域五规则 3;死亡但判胜 → 领域一不变式 4;重开种子相同 → 领域五规则 5;跨关遗留物 → 领域三规则 2;关卡行缺失 → 领域二规则 4("对齐 C3 边界情况表 / B1 判定段"两处依据 → 本文问题一/问题五) |
|
||||
| 依赖表(上游 6 行 / 下游 5 行) | design 依赖与输出主表(原文保留,B1 上下游两行分开保留) |
|
||||
| 跨 GDD 义务清单(7 行) | design 依赖与输出·跨 GDD 义务台账表(活契约,原文保留) |
|
||||
| Tuning Knobs(5 行 + 非 knob 冻结清单 + knob 交互) | design 调参表(knob 列改 owner 列,域/默认/说明保留,provisional 标注)+ 表下两行注记;交互机理 → 本文问题二/三 |
|
||||
| 验收标准 AC-1–13 | design 验收标准 GWT 表(编号与内容不动) |
|
||||
| 开放问题 OQ1–5 | 本文开放问题区(编号不动) |
|
||||
| 版本历史 v1 / v1.1 | design 版本历史(原行保留)+ 追加 v2 迁移行 |
|
||||
@@ -0,0 +1,213 @@
|
||||
# C3 难度曲线与精英/Boss 设计推演
|
||||
|
||||
> 状态:concluded · 本文只装"为什么"——design 件(`design/gdd/c3-difficulty-curve.md`)只收本文的结论。
|
||||
> 修订时新增问题节,不删旧节(历史即依据)。
|
||||
> 出处说明:本文由 C3 GDD 两件套迁移建立(2026-09-14)——原 lean v2 全文的公式推导、数值锚定论证、候选取舍、体验锚点论证与已裁决争议按问题收纳于此;文末附录 A/B 为历史审计(评审史、registry/systems-index 回执、试玩批次记录),附录 C 为逐节去向映射(零丢失的可审计证据)。
|
||||
|
||||
## 问题:C3 为什么定位为"数值 owner 而非机制 owner"?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A:运行时难度引擎——难度在运行时按公式计算全部敌人/板面数值。收益:曲线可任意平滑、单点改全局;代价:违反本项目"运行时零新增公式"硬约束,结算链路(B1 乘区 / B2 接口 / R1 直读)全要开口,切片已验证的"直填行值"工作方式作废。
|
||||
- 候选 B(采纳):设计期直填行值为主体 + DifficultyTable 修饰结构位预留。收益:运行时零公式、R1 floor 解析直读零新机制、切片 .tres 直接转正为 MVP 默认曲线;代价:曲线平滑度受行值粒度限制。
|
||||
- 候选 C:全修饰表驱动——基表只存基准、全部难度经 DifficultyTable 套乘。收益:曲线参数集中一张表;代价:MVP 就要建表、调参两次换算,且 Boss 大台阶用乘数表达别扭。
|
||||
|
||||
### 深度分析
|
||||
|
||||
DifficultyTable 的真实需求来自精英节点(按坐标施加全局修饰),不是来自基础曲线;MVP 空表结构位(键 (L,D)、乘数域 [0.1, 10]、施加点 = B2.spawn 实例化时、行值快照之前套乘)以零运行时成本把 B2 实例化条款"接口未定"的预留兑现掉。越域 clamp 至域界 + warning 是 registry 登记的显式例外——修饰乘数是合法配置、越界是组合事故而非配置事故,fail-fast 不适用;域界 = 玩法硬顶。Boss 不走修饰表:Dmax 直填行让"数值大台阶 + 专属行为环 + 本关最大板形"三件事在一行内可读、可断言(A1 第三轴登记约定的兑现)。
|
||||
|
||||
机制本体的归属边界:encounter 掷骰执行归 B1 编排、护甲克制矩阵机制归 B1(C3 投值)、供给控制器机制本体归 B4(C3 投参数)、敌种机制归 B2、变异机制框架归 A4(C3 只投内容行)——"谁拥有语义、谁投值"写进 design 系统范围两清单,实现者靠"不负责"清单判断票面。
|
||||
|
||||
### 综合判断
|
||||
|
||||
直填为主体、修饰为结构位,运行时零新增公式是全系统第一硬约束;全部数值 provisional 起步随 playtest 修正。
|
||||
|
||||
## 问题:曲线为什么是 f(L, D) 双轴 + Boss=Dmax 三段结构?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 单轴(只按关卡序号线性加难):实现最简,但关内没有节奏起伏,Boss 无法成为"压轴"。
|
||||
- 双轴(L 大台阶 × D 小坡度 × Boss=Dmax):台阶感与坡度感分离,内容投放(新敌种/新行为环段/新变异)天然挂在台阶上。
|
||||
- 随机扰动(难度抖动):局内变化不可归因,产生"被坑"感而非"变险"感。
|
||||
|
||||
### 深度分析
|
||||
|
||||
体验锚点论证:P4 要求"越下越险的压迫节奏"——每层一个可感知台阶("这一层开始有雾了":新敌种登场/新行为环段/新变异解锁 + 基准数值跳升;L 轴台阶 + D 轴温和加压);但台阶必须可解释——跃升可归因于可见变化而非纯数字膨胀,后者产生"被坑"感而非"变险"感;可量化形态 = S/K 区间随 (L,D) 的漂移轨迹(绿→黄→红空间分布)。P1 要求"我变强了"可推导——首关基线明显吃紧但多数玩家能过(通关率目标带),后续关卡陡升使 C4 天赋提升产生可测量的通关期望改善,区间平移换算率(+10hp ≈ +1 轮、atk 翻倍 ≈ K 减半)把体感变成可推导结论。P3 要求压迫有顶点——Boss 房开门前是恢复点/囤刀决策压力顶点,供给稀缺性在此兑现价值。锚点时刻:第二层首遇熊地精——三拍行为环 vs 地精单拍攻击,难度跃升有具体面孔;击杀 Boss——"这层我算下来了"的完成感。
|
||||
|
||||
参考感受合成:Peglin 的地图难度爬升 × 杀戮尖塔的 Act 结构(普通→精英→Boss 三段节奏)→ 本作 = 关间大台阶 × 关内小坡度 × Boss=Dmax 关底压轴。
|
||||
|
||||
F1/F2 的域来自"台阶可感但不压垮推理"的夹逼:s_hp ∈ [0.05, 0.20](每档 +5%–20%)保证同敌种坡度温和;k_L ∈ [1.3, 1.6] 保证关间跳升明显但不失真。两条边界与先例:goblin 24hp 的 D1 理论值 ≈26 在切片中被"群×2(13hp ×2–3 只)"替代——数量是比单体质变更优先的深度表达(保持单拍环低威胁读数、总量受控);k_L 只适用于敌种延续场景——L1 酋长 150hp 直推 L2 D0 ≈210 不成立,新敌种登场基准按环复杂度重定(三拍环单位 hp 低于单拍环同关值:bugbear 40/18 < goblin 群总量但威胁更高;L2 锚行 30/7 为内容行非 k_L 直推)。
|
||||
|
||||
内容侧承诺"数值不是内容":每关至少一项新内容投放(新敌种或新环段——B2 投放节奏规则 OQ8 共担);投放断档 = 敌信息总量见底、学习曲线枯竭,C3 调参无法修补——这是流程投放检查项拦截的内容生产缺口;越界关卡(level 999 类)同理属内容生产缺口而非玩家可达态,冒险结构(C2)应在其内容覆盖范围内生成关卡序列。
|
||||
|
||||
### 综合判断
|
||||
|
||||
双轴 + Boss=Dmax 三段定稿;"台阶必须可解释"写进体验承诺;s_hp/k_L 域如上;多敌种同深度选择与投放节奏跟 B2/C1 共裁(MVP 每行集恰一敌种锁定,多敌种走预登记改键通道、本 GDD 预留不定义)。
|
||||
|
||||
## 问题:为什么用生存链区间模型替代关级供给带?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 候选 A(退役):关级供给带——奖励供给 ÷ 敌方压力,比值 ∈ [1.1, 2.0]。收益:单指标直观;代价:其验算 0.54 判"短缺态",与实测 60% 通关率直接矛盾——方向指引反指(对偏易的游戏报"加供给")。
|
||||
- 候选 B(采纳,用户设计):生存链区间模型——每战 S/K 区间三档判定 + 关级通关恒等式 + 输出占比带。收益:直接建模"能不能过/赢得多惨",与 level_monte_carlo actuals 同构,偏差可定位到生存侧或击杀侧;代价:五项输出 × 三项输入必须逐项入账。
|
||||
- 候选 C:纯通关率仿真(只看通关率带)。收益:指标最少;代价:无法定位偏差来源,调参没有杠杆指向。
|
||||
|
||||
### 深度分析
|
||||
|
||||
0.54 反指的根因是漏项审计:原供给 180 只把 clear_blast 算一次(实际 ×清图数 3–4 = 120–160),漏掉伤害A/B 充能、attack_up 增量、RAP 刷新新板追加供给——逐项入账后"0.54 短缺"消失、关级恒等式闭合。教训:关级比值模型对漏项不敏感;区间模型按战拆解后每项都有 actuals 对账(输出侧五项:基础攻击/刀/clear_blast/A+B 充能/attack_up;输入侧三项:承伤/治疗/减伤)。
|
||||
|
||||
三档判定语义与阈值:绿(S_min > K_max)= 最坏也能过、与运气无关——教学位必须绿档;黄(E[S] ≥ E[K] + 1 且非绿)= 有失败分支、期望占优,margin ≥ 1 轮是最低阈值;红(S_max ≤ K_min)= 最好也打不过、配置事故——七步流程第③步扫描拦截、禁止入表。输出占比带 [15%, 40%]:<15% 奖励摆设、>40% 供给依赖(AC-14)。
|
||||
|
||||
口径两读数:公式包络(必过/必死结论)与 actuals p10–p90(日常判定)并存——与 B1 actuals p10 纪律同构;HP 持久化耦合各战区间,联合分布由 monte_carlo 裁决,不做解析近似。L1 五战手算(p10–p90 估算口径)给出形态带基准:D0 教学位绿、D1/D2 黄、D3 黄偏红、Boss 黄红边缘(旗覆盖率主导 vs 囤刀+甲B 对策)——与"≥1 绿 + 中段黄 + Boss 黄不红"的目标形态吻合。
|
||||
|
||||
### 综合判断
|
||||
|
||||
区间模型定稿并替代供给带(供给带的 [1.1, 2.0] 域与 0.54 读数只在本文留档);三档判定进入七步流程第③步扫描与 AC-4;输出占比带进入 AC-14。
|
||||
|
||||
## 问题:数值锚如何标定——通关率带、Boss 血量锚、真人系数、完美档?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- Boss 血量锚带演进:v1 预登记 [0.35, 0.55](当时"切片 0.81 越上界"读数)→ 试玩批次 1 / v3 数值批修订为 [0.5, 1.1](OQ2 采信用户"可上调"裁决,旧带与旧读数由本条替代)→ 现行带锚定稿 + 加难走廊 [1.1, 1.35] 预登记(L1 通关率压带首选杠杆,扫描终裁后落带;Boss 180–207 候选,真人实测 Boss 战时长后终裁)。
|
||||
- L1 基线通关率带:原 40–60% → 带锚定稿 [30, 50](v3 实测 60% 越上界,触发加难杠杆批:r_boss 走廊 + 群战上探 + 供给 decay 0.5→0.6 候选)。
|
||||
- 真人系数:v2 曾声明"真人预期低于模拟"→ 批次 1 证伪(真人 100% vs 模拟 80%,真人显著强于模拟者)→ 方向声明更正落地:带按模拟口径定义、真人系数批次 2 标定(OQ3)。
|
||||
|
||||
### 深度分析
|
||||
|
||||
F3 口径统一:Σ普通战斗hp期望必须含 unit_count 区间骰期望——L1 v3 Σ = 36(D0 [1,2]×24)+ 32.5(D1 [2,3]×13)+ 40(D2)+ 45(D3 [2,3]×18)= 153.5,Boss 150/153.5 ≈ 0.98 带内;旧验算 Σ=142 系固定数量口径与旧 Boss 值混算,由新口径替代(口径与击杀侧恒等式统一)。走廊验算:Boss 180 → 1.17、200 → 1.30,均落 [1.1, 1.35]。败北分布向 Boss 集中(4/6)符合压迫预期。
|
||||
|
||||
F5 区间机制解释(天赋列不是拍脑袋带):+100% atk → K 区间近似减半 → K_max ≈ S_min 转绿档 → ≥95%;C4 平移换算率 +10hp ≈ +1 轮(÷d̄≈8–10)、atk 翻倍 ≈ K 减半——区间位移机制承载通关率天赋列,C4 拿到的是换算率而非独立目标带。
|
||||
|
||||
完美策略档的结构性优势论证(OQ7 主项,2026-09-14 用户拍板落地测量仪:零盲挖/全标旗/卡死刷新技能轴上界):其结构性优势 = 零踩雷直伤 + 全标旗 weaken 顶格 + 快杀,使 47/50 血缓冲吞掉全部值域方差。区间批(奖励五行 power 区间 + 敌方 atk 区间 ±3)全部落地后复测(N=30):0 加成通关仍 100%、承伤 3.5→3.9、踩雷 0.00/局、+50%~+200% 恒 100%。结论:数值区间杠杆族对 ≤40% 验收线无效已实测坐实;承伤带与 F5 带对技能轴上界零分辨力(calibration_gap 定量读数)。剩余杠杆三选:承伤硬地板(不可减免平伤,B1/B2 域)/ weaken 饱和语义(全标旗收益递减,B3/B1 域)/ 极端区间宽度(毁基线与数字可读性锚——建议否决)。待用户裁决。
|
||||
|
||||
减伤墙批(2026-09-13,defense_scan 触发):实测墙轮 39%、真人局 12/12 轮零承伤满血通关——减伤墙过强定量坐实;裁决 defense_up magnitude −50→−30(叠满两层 = −60 帽)、石肤权重 24→16(attack_up 升池内最高行)——B3 侧行值批,C3 承伤带(F4)复验责任随批。F4 侧读数链:D0 goblin ×1(7atk 单拍环)每结算恒 7 × (1−0.22 平均减伤) ≈ 5.5/轮 → 裸 R_survive ≈ 50/5.5 ≈ 9 轮;E[beat_dmg] 的构成(heavy=2 拍别乘数、伏击 +3×层数帽 4、行为环确定性轮转)使入伤峰值/谷值可手算(峰值 = heavy 齐射尖峰 + 伏击满层、零减伤;谷值 = charge 拍 + 全减伤);weaken 覆盖是生存侧最大单一杠杆(P3 兑现点)。
|
||||
|
||||
### 综合判断
|
||||
|
||||
现行锚 = 通关率 [30,50](L1 基线)+ L2/L3+ provisional 带(随 OQ1 校准)+ r_boss [0.5,1.1](走廊 [1.1,1.35] 预登记)+ 承伤对照带 ≤20%/普通场、≤50%/Boss 场 + 通关余量 p90 ≤13 & p10 ≥3。全部 provisional 起步随 playtest 修正;扫描落带前 v3 值 provisional-pending-scan(OQ7)。
|
||||
|
||||
## 问题:遭遇随机化为什么用"区间 unit_count + encounter 封闭流"?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 定值行(切片原状):局感确定、可被背板;关内深度表达只剩单体质变更一条路。
|
||||
- 区间 unit_count + 同敌种掷骰(采纳):数量是比单体质变更优先的深度表达(F1 Example 的延伸),且不触碰 B2"每行集恰一敌种"锁定。
|
||||
- 同深度第二敌种行:键冻结下同深度第二敌种行触发行集致命(B2 表结构校验),需改键走 D2 Rule 4 接口漂移——留给 C1 分支地图定稿时核对。
|
||||
|
||||
### 深度分析
|
||||
|
||||
随机通道约束:RngService encounter 封闭流(registry 流集合已登记;增流走代码 + P1 支柱评审);scope_event_binding = 每次战斗实例化恰一 scope;掷骰时点 = B1.begin_battle 实例化期(扫雷开始前);发生在挖掘决策域之外——P1 合规(推理不受随机污染);同种子全程可回放(流取号确定性不变)。消费方式 = B1 掷骰 → B2.spawn 以 override 参数接收实际数量——B2 零随机纪律保持(收到的即确定值)。
|
||||
|
||||
教学位豁免:新敌种首遇节点固定数量不加骰(D0 goblin ×1、D2 bugbear ×1 固定)——学习曲线不受骰气干扰。域 [unit_count, 3] 沿用 B2 上界锁定;unit_count_max 缺省 = 定值,旧行零迁移。期望总量对齐关级恒等式检算(F6 的数量骰输入项)。敌方 atk 区间 ±3 与数量骰同流(encounter 恰一 scope,数量骰先、atk 骰后),spawn 期整战持久——"每拍抖动"被否决(数字可读性锚);中点恒等原值,A3 条款①当量锚以中点口径维持。
|
||||
|
||||
### 综合判断
|
||||
|
||||
区间语义 + encounter 封闭流 + 教学位豁免 + 同种子可回放四件套定稿;区间宽度(±3 与奖励五行 power 宽度)均 provisional 归 C3 测量迭代;B1/B2/D2/registry 接口漂移回写完成(X-6~X-8,见附录 A)。
|
||||
|
||||
## 问题:调参为什么强制七步 + 四条约束边界 + 六组联动?
|
||||
|
||||
### 广度分析
|
||||
|
||||
- 自由调参(改表即生效):速度最快,但敌 hp 与奖励供给单边移动会静默破坏平衡(registry 联动重算义务正是为此而设)。
|
||||
- 七步流程(采纳):改表值 → smoke_all 全绿 → level_monte_carlo 扫描(通关率带 + 三档判定 + 通关余量 + 输出占比)→ B4 登记常数与对账重制 → 对账复算(条款③⑤/预警⑥)→ README 调参日志登记;任一步 FAIL → 回滚或登记 OQ。
|
||||
- 只留对账复算(砍扫描步):扫描是唯一能把通关率/三档/余量/占比一起看全的步骤,砍掉即失去 provisional-pending-scan 的落带机制。
|
||||
|
||||
### 深度分析
|
||||
|
||||
四条边界的来历:条款③满配破线(unit_count>1 行须"降密度或降 m_amb"补偿——B1 F4 双轴约束,registry clause3_supply 登记;切片群战行 hp/atk 下调为合规先例);条款⑤清图支配性(约束包①需求对 clear_blast C=40 重推,缺口 6.1/51.8——登记非支配设计态;原 clear_knife C=8/16 模型由现行登记替代;OQ4 playtest 持续观测弃图率,批次 1 初步裁决 = 真人零弃图倾向、非支配设计态成立、C 量级不上调,但同步声明 P1 对冲弱化——本裁决弱化 A3 条款⑤对 P1 失败模式的经济对冲,弃图率观测加权监控);可推理率绝对锚 [0.85, 1] 不可下探(P1 生成端保证);期望表对照(复算 + README 登记偏离)。
|
||||
|
||||
第④步(B4 登记常数与对账重制)的依据是 B4 义务 #10:没有这一步,T_fog_min/K_dmg/N_draft/P_min/默认根行值调参会让 B4 AC-19 对账对 (knife_adv, attack_up_basic) 漂移检测、AC-6 分支 4、AC-18 重跑假失败——这就是 F7 从六步改七步的原因。第②步闸的实证是 d0.28 回退先例:d0.28/t0.87 → best inferability ≈0.81 降级告警 → 回退 0.25/0.88——密度与 target 是联动对(A1 求解器能力天花板内联动调参),禁止为难度牺牲 P1 度量达标。
|
||||
|
||||
期望口径双读数纪律:锚行读数(2.0×/2.6× 类)不得作为 unit_count=2 的放行依据——锚行口径与跨行期望口径必须双登记(B1 条款③闭合回执的历史:默认 unit_count=1 下 L1 ≈2.0×/L2 ≈2.6× 通过,跨行期望口径 ≈1.2×/1.5× 同向通过——双口径登记在案)。快杀退化(预警⑥:战斗结束未开资格格占比 >70% 警)处置 = 仪表监控 + 接受——低难度行被高天赋速杀是 Roguelike 成长兑现的合法形态,无需修复;区间形态钩子 = K_min < 2 观测位。
|
||||
|
||||
联动网络六组的由来:敌 hp ↔ 奖励供给是 registry 已锁的联动重算义务;unit_count ↔ 密度/m_amb 是条款③的直接推论;密度 ↔ target ↔ attempts 是 d0.28 三元组;ap_per_round ↔ RAP 体系 ↔ refresh 上限走跨字段校验闸(A3 所有权的措辞更正:A3 GDD 无调参权授予回执,联动评估归 C3、调参所有权归 A3);m_w ↔ B1 F0 锚对照表终值共裁 B4/B1(C3 提案通道);armor_type ↔ 伤害A/B 充能 ↔ 克制矩阵——敌种甲型变更须复算 Boss/普通战 K 区间。
|
||||
|
||||
### 综合判断
|
||||
|
||||
七步 + 四边界 + 六组联动定稿;"任一步 FAIL → 回滚或登记 OQ,禁止带病前进"与"每次修订强制走满"是流程硬规则;对账复算在第 5 步强制执行。
|
||||
|
||||
## 开放问题(原文全部 OQ,保留原编号)
|
||||
|
||||
| # | 悬案 | 进展 | owner | 时机 |
|
||||
|---|---|---|---|---|
|
||||
| OQ1 | L2+ 曲线数值——本 GDD 定结构/流程/目标带;具体数值行随关卡内容扩展填充(内容与数值同批——C2 关卡序列定稿后) | 结构已定 | C3 随批 | L2 内容扩展时 |
|
||||
| OQ2 | Boss 血量占比——v3 记录值更正 0.98(153.5 期望口径,带内 ✓);加难走廊 [1.1, 1.35] 预登记(Boss 180–207 候选);真人实测 Boss 战时长后终裁 | 走廊预登记 | C3 | F7 扫描 + playtest 批次 2 |
|
||||
| OQ3 | 真人修正系数——批次 1 方向确认:真人显著强于模拟者(v2 真人 100% vs 模拟 80%);F5 方向声明已更正落地;真人系数待 v3 试玩采集定量 | 方向已定 | C3 + playtest | playtest 批次 2 |
|
||||
| OQ4 | 条款⑤支配性真人观测——批次 1 初步裁决:真人零弃图倾向 → 非支配设计态成立、C 量级不上调 ✓(B1 约束包②采信);**P1 对冲弱化同步声明(B1 ② 条件):本裁决弱化 A3 条款⑤对 P1 失败模式的经济对冲,弃图率观测加权监控随之**;维持登记:单一样本 | 初步裁决 | C3 + B4 | 持续 |
|
||||
| OQ5 | 精英节点形态——完整语义(独立节点/词缀/出现规则)= C1 分支地图定稿后的联动设计(A1 定稿强制重审随之触发) | 未设计 | C3 + C1 | C1 GDD 定稿 |
|
||||
| OQ6 | 轮内刷新对难度模型的冲击——批次 1 初步读数:刷新零使用,根因是盲猜墙不足(inferability 0.88);杠杆预登记:密度联动上探(d0.28/t0.85——A1 回退先例风险);保持开放 | 初步读数 | C3 | playtest 批次 2 |
|
||||
| OQ7 | **加难杠杆扫描执行 + 完美策略档测量**——杠杆候选(r_boss 走廊 180–207 / 群战上探 / decay 0.6)已预登记;执行 = 七步流程第③步 level_monte_carlo 扫描(三档判定 + 通关率带 + 通关余量 + 占比四表对照)。**2026-09-14 完美策略档落地(用户拍板)**:零盲挖/全标旗/卡死刷新技能轴上界测量仪(godot 本机可用已验证)。**区间批已落地并复测(同日拍板②——奖励五行 power 区间 + 敌方 atk 区间 ±3)**:完美档 0 加成仍 100%(承伤 3.5→3.9)——**数值区间杠杆族对 ≤40% 验收线无效已实测坐实;主项待裁决 = 结构性杠杆三选**(承伤硬地板〔不可减免平伤,B1/B2 域〕/ weaken 饱和语义〔全标旗收益递减,B3/B1 域〕/ 极端区间宽度〔建议否决——毁基线与数字可读性锚〕);落带前 v3 值 provisional-pending-scan | 完美档已测;区间批无效性已证;结构杠杆待裁决 | C3 | 用户裁决后 |
|
||||
|
||||
### 迁移期发现的待拍板项(非原 OQ)
|
||||
|
||||
- 状态头不一致:原 GDD 头为"状态 In Design",而 systems-index(2026-09-14 C3 design-review 修订批门禁增补记录)登记 C3 为 **Approved**(用户拍板免复评放行)。本迁移保留原文"In Design"未改,待 owner 确认后统一两处。
|
||||
- 交叉引用异常:原依赖表 B2 行写"多敌种同深度选择规则共裁(OQ7——C1 联动)",但现行 OQ7 悬案是加难杠杆扫描;与 C1 联动的精英/多敌种语义对应 OQ5。本迁移按原文保留"(OQ7——C1 联动)"未改,待 owner 裁决指向。
|
||||
- 版本号标注:原版本历史已有"v2"行(design-review 修订批),本次迁移行标注为"v2-两件套"以避免同号歧义——如需改号待 owner 拍板。
|
||||
|
||||
## 附录 A:对账与义务登记(历史审计)
|
||||
|
||||
### 评审与复核史
|
||||
|
||||
- v1 solo 出稿(2026-09-12)→ v1-lean 格式迁移(2026-09-13)→ v2 /design-review 修订批(2026-09-14,lean 单会话):NEEDS REVISION 8 blocking 同日修订核销;专员/总监代理未咨询——**生产前人工复核保留(活义务,已随迁 design 版本历史行)**。
|
||||
|
||||
### 双向一致性核对回执(registry / systems-index 回执——已完成的历史登记)
|
||||
|
||||
| 编号 | 内容 | 对侧 | 状态 |
|
||||
|---|---|---|---|
|
||||
| X-1 | systems-index 依赖表 C3 ← D2,B2;B1 块增补"C3 消费 B1 对账输出的事实依赖成立" | systems-index | ✅ |
|
||||
| X-2 | "敌种 hp/atk/pattern 曲线数值、难度修饰 → C3" | B2 | ✅ |
|
||||
| X-3 | "C3 = 条款③⑤约束输入方" | B1 | ✅ |
|
||||
| X-4 | "权重/档位/威力曲线 + RewardConfigTable 参数归 C3" | B4 | ✅ |
|
||||
| X-5 | "每行难度数值与曲线 → C3" | A1 | ✅ |
|
||||
| X-6 | B1:begin_battle encounter 掷骰增补 + 扫描 scope 腿 + B1"零随机"边界扩界注记(encounter 流在结算步流之外) | B1 | ✅(修订批回写) |
|
||||
| X-7 | B2:spawn override 参数、unit_count_max 字段语义与实例化记号调和、物种集 {goblin, bugbear, ogre_chief} | B2 | ✅(修订批回写) |
|
||||
| X-8 | D2:EnemyTable schema +2 字段(unit_count_max、armor_type);SettlementTable +4 字段(damage_a_per_cell/damage_a_cap/damage_b_per_flag/armor_effectiveness) | D2 | ✅(修订批回写) |
|
||||
| X-9 | B4:供给控制器机制承接 + clear_blast 换位 + K_dmg=0 禁区条款解除(保底语义迁移) | B4 | ✅(修订批回写) |
|
||||
| X-10 | A4:elite/boss 标记字段落地时 warning 升闸(AC-11 未来腿) | A4 | ✅(义务登记——未来腿仍活,同步登记于 design 依赖表 A4 行) |
|
||||
|
||||
说明:五条活契约(条款③ / 条款⑤ / 预警⑥ / unit_count 约束 / 期望口径双读数)不入本附录——它们仍在约束当前调参,落点为 design「依赖与输出 → 对账约束(活契约)」表。
|
||||
|
||||
## 附录 B:试玩批次记录(历史审计)
|
||||
|
||||
| 批次 | 日期 | 数值基线 | 读数 | 裁决产出 |
|
||||
|---|---|---|---|---|
|
||||
| 批次 1(用户本人) | 2026-09-12 | v2 | 全部满血通关(清图为主/优先标雷/不用道具三策略均通)——基线难度不足定量坐实;Boss 血量 OK 或可上调;刷新零使用;零弃图倾向;治疗包零使用(不掉血伴生);伤害道具无特色(暂保留) | v3 数值批(atk 4/4/6/4/7 → 7/5/9/6/9;D0 24 保持防秒杀、Boss 130→150)+ DND 命名批(goblin/bugbear/ogre_chief——用户指令)+ 护甲克制批(armor_type none/a/b + 克制矩阵,数值 provisional)+ F3 带修订 + OQ2/3/4/6 读数;v3 扫描:基线 60%、败北向 Boss 集中 4/6、+200% 100%;下一批 = v3 真人试玩(OQ3 定量 + OQ2 终裁) |
|
||||
| 减伤墙批(defense_scan 触发) | 2026-09-13 | v3 + 减伤墙批 | defense_scan 实测墙轮 39%、真人局 12/12 轮零承伤满血通关——减伤墙过强定量坐实 | defense_up magnitude −50→−30(叠满两层 = −60 帽)+ 石肤权重 24→16(attack_up 升池内最高行)——B3 侧行值批,C3 承伤带(F4)复验责任随批 |
|
||||
|
||||
## 附录 C:去向映射(原文 lean v2 全文 → 两件套落点)
|
||||
|
||||
| 原文节/表 | 落点 |
|
||||
|---|---|
|
||||
| 头部(状态/版本/承载支柱/一句话/复核注记) | design 头部 + 设计目的;复核注记 → 附录 A 评审与复核史("生产前人工复核保留"同步 design 版本历史迁移行) |
|
||||
| 速览表(定位/拥有/不拥有/上游输入/下游输出/硬约束) | design 设计目的 / 系统范围两清单 / 依赖与输出主表 / 调参纪律规则与调参表引言(硬约束逐条) |
|
||||
| 体验锚点表 + 参考感受合成 | design 设计目的承诺 1–4;锚点论证与感受合成 → 本文「双轴结构」问题深度分析 |
|
||||
| 全局流程:难度曲线生成字符画 | design 核心循环(原样字符画) |
|
||||
| 全局流程:F7 调参流程字符画 | design 调参纪律与状态 → 七步调参流程(原样字符画) |
|
||||
| 出口分发表(5 行) | design 核心循环出口分发表(原样) |
|
||||
| 核心规则 1–4(直填/双轴/投放节奏/切片转正) | design 基表行值与投放规则 1–4 |
|
||||
| 核心规则 5–7(Boss/精英/scope=global) | design Boss / 精英 / 全局变异语义规则 1–3 |
|
||||
| 核心规则 8(遭遇随机化)+ 细则表 + unit_count/RngService 枚举表 | design 基表行值与投放 → 遭遇随机化(规则 + 三张表原样) |
|
||||
| 核心规则 9(调参约束内工作)+ 调参约束边界①–④表 | design 调参纪律与状态规则 1 + 调参约束边界表(原样) |
|
||||
| MVP 行值总表 + 转正行集表 + 实测依据/v3/区间批/加难走廊四条注记 | design 基表行值与投放三张表 + 四条 bullet(原样) |
|
||||
| 枚举:DifficultyTable 表 + schema 表 + unlock_level 门控序列表 | design Boss / 精英 / 全局变异语义三张表(原样) |
|
||||
| 数值结论与推导定位声明 | design 难度模型公式节引言(原样) |
|
||||
| F1 结论/公式/Variables/Example | design F1(结论 + 公式块含变量域 + Example bullet);域推导论证 → 本文「双轴结构」 |
|
||||
| F2 结论/公式/Output Range/反例 | design F2(结论含 Output Range + 反例 bullet);论证 → 本文「双轴结构」 |
|
||||
| F3 结论/公式/Variables/验算三行/口径更正 | design F3(结论 + 公式块 + 验算表);口径更正理由 → 本文「数值锚定」深度分析 |
|
||||
| F4 结论/公式/Variables/验算两行 | design F4(结论 + 公式块含变量域 + 验算表);读数链论证 → 本文「数值锚定」深度分析 |
|
||||
| F5 结论/目标带表/验算四行(含完美档扫描) | design F5(结论 + 目标带表 + 验算表);完美档结构性论证全量 → 本文「数值锚定」深度分析 + OQ7 |
|
||||
| F6 结论/公式块/Variables/验算五行/漏项审计/0.54 反指 | design F6(结论 + 公式块 + 输入项表 + 验算口径表);0.54 反指与漏项审计 → 本文「区间模型」深度分析 |
|
||||
| F7 结论/Variables(N 域/工具所有权)/验算(d0.28/第④步依据) | design 七步调参流程(字符画 + N 段落 + 流程锚点表) |
|
||||
| 状态五态表 + 不变式 | design 调参纪律与状态规则 3 + 行值状态表(原样) |
|
||||
| 边界情况表(10 行) | design 边界情况表(原样,两列化,依据内联) |
|
||||
| 依赖上游 8 行 + 下游 4 行 | design 依赖与输出主表(方向列合并) |
|
||||
| 双向一致性核对 X-1~X-10 | 附录 A 回执表(活义务同步 design 依赖行:A4 未来腿等) |
|
||||
| 对账与义务登记表(5 行,活契约) | design 依赖与输出 → 对账约束(活契约)表(原样) |
|
||||
| 呈现与 UI 契约(引言 + 5 行) | design 依赖与输出 → 呈现义务转注表(原样) |
|
||||
| Tuning Knobs 引言 + 16 行表 | design 调参表(字段/域/默认/owner/联动与危险方向——原 16 行信息逐行并入,provisional 标注保留) |
|
||||
| DifficultyTable schema 表 | design Boss / 精英 / 全局变异语义 → schema 表(原样) |
|
||||
| 联动网络表(6 行) | design 调参纪律与状态 → 联动网络表(原样) |
|
||||
| 验收标准 AC-1~AC-14 | design 验收标准 GWT 表(编号与内容不动) |
|
||||
| 开放问题 OQ1~OQ7 | 本文「开放问题」区(原样,保留编号) |
|
||||
| 试玩批次记录表(2 行) | 附录 B(原样) |
|
||||
| 版本历史 4 行 | design 版本历史(4 行原样保留 + 追加 v2-两件套迁移行) |
|
||||
+229
-472
@@ -1,192 +1,101 @@
|
||||
# B2 敌人系统(Enemy System / 战斗单位系统)
|
||||
|
||||
> **状态**:Approved · lean 格式
|
||||
> **版本**:v1.0-lean · 2026-09-13 · 作者:user + agents
|
||||
> **承载支柱**:P3 主(雷→敌方优势的收件人与同源兑付面)· P2(敌方增益行可归因)· P1(视觉推测型读怪 = 规划素材)· P4 间接(地牢住户)
|
||||
> **一句话**:B2 定义战斗双方是谁、多强、带什么词条、如何受伤与死亡——雷的代价的收件人。
|
||||
> **复核注记**:lean 门禁下 systems-designer(Formulas)/ qa-lead(AC + 缺口预检 7 项)已委托起草;creative-director 与 art-director 未经咨询——生产前人工复核体验锚点情绪定位与 Visual/Audio、art-bible 一致性(art-bible §1–4 须在 D1 GDD 前创建,本节线索清单是其输入之一)。
|
||||
> **状态**:Approved · **版本**:v2 · 2026-09-14
|
||||
> **一句话**:定义战斗双方是谁、多强、带什么词条、如何受伤与死亡——雷的代价的收件人。
|
||||
> **推演件**:`design/gdd/analysis/b2-enemy-system.md`(本文件只收结论,理由在那里)
|
||||
|
||||
## 速览
|
||||
## 设计目的
|
||||
|
||||
| 关键问题 | 答案 |
|
||||
|---|---|
|
||||
| 定位 | 战斗域单位层(Layer 2 Core · MVP · 设计顺序第 7 位):定义"战斗双方是谁、各自多强、带什么词条、怎么受伤与死亡";持有 D2 EnemyTable 回填权,承载主角与敌人共用的战斗单位接口。缺本系统则踩雷优势无受益者(P3 断)、胜负判定无主体、难度曲线无施加对象 |
|
||||
| 拥有 | 单位状态(hp/max_hp/存活/行为环指针)与查询/受击/推进接口 · EnemyTable/HeroTable schema 与双敌种行回填(行键 (level_index, node_depth, enemy_id))· 行为环语义 · 目标选择规则(固定顺位)· 伏击量纲定稿与 advantage_per_round_cap 表值 |
|
||||
| 不拥有 | 结算编排与伤害消费语义(B1 SettlementTable)· 状态实例容器(B3)· 奖励内容与掉落(B4)· 棋盘规则(A1/A2)· 单位成长曲线与难度修饰(C3)· 遭遇构成(C1)· 呈现(D1/B5/D5)· 单位/词条类结构与事件载体实现(实现期 ADR 域) |
|
||||
| 上游输入 | D2 EnemyTable/HeroTable 行值(ConfigDB 单点读取、R1 行解析)· hero hp 入参(编排方供给)——A2/A3/A1 事实均经 B1 结算编排转化,零直接接口 |
|
||||
| 下游输出 | 单位状态查询/受击/推进接口(B1 消费)· 意图视觉映射键 enemy_id 与视觉状态清单(D1/B5 消费)· 伏击量纲 + cap 表值 + k 可算性(B1 条款 3 对账输入)· 行为环教学口径(D5) |
|
||||
| 硬约束 | 零随机(rng_service 流封闭)· 零 UI 依赖 · 零主动事件订阅 · 悬空引用致命、零软回退 · 行为环敌单位专属 · 单位接口调用权集中归 B1 · 胜利路径 = 基础攻击(恒在)+ B4 奖励侧规划面伤害共同承载——"敌人全灭 → 战斗胜利"可判定 |
|
||||
B2 是战斗域单位层(Layer 2 Core · MVP):持有 EnemyTable/HeroTable 回填权,承载主角与敌人共用的战斗单位接口。缺本系统则踩雷优势无受益者、胜负判定无主体、难度曲线无施加对象。
|
||||
|
||||
## 体验锚点
|
||||
1. 对面是个看得懂的对手——威胁可推测、可归因、可拆解,不是一个血条。
|
||||
2. 它弓起背,下一拍是重击——读怪推理进入挖掘决策。
|
||||
3. 它强是我喂的,它弱是我拆的——伏击与削弱落在同一个它身上。
|
||||
4. 越下越险——深层敌人更凶,给下探氛围一个可见刻度。
|
||||
|
||||
> 情绪目标一句话:**"对面是个看得懂的对手,不是一个血条"**——威胁可推测、可归因、可拆解;玩家不操作敌人,但每一轮都直接感受它。
|
||||
反向护栏:威胁绝不能是无源暗账——玩家说不出"它为什么变强 / 这一拳为什么这么重"即归因链失职。
|
||||
|
||||
| 支柱 | 关键词 | 机制承诺 |
|
||||
|---|---|---|
|
||||
| P3 同源的对面对象 | "赌桌对面的那个存在" | 结算明细"敌方获得伏击 +3(第 4 轮 · 雷)"的行可指认——敌人强度是扫雷决策的镜像,威胁有源可溯 |
|
||||
| P1 可推测的威胁 | "它弓起背了,下一拍是重击" | 读怪推理进入挖掘决策(形态↔行为映射稳定可学,MVP 双环最长 3 拍);不预告精确数值——数字在结算明细兑现,结算前的世界靠观察而非读表 |
|
||||
| P2/P3 的拆台兑现 | "它强是我喂的,它弱是我拆的" | 标中旗 weaken 与伏击行同框、同一呈现语言,落在同一个它身上 |
|
||||
| P4 地牢住户 | "越下越险的刻度" | 深层敌人更凶(C3 施加),给下探氛围一个可见刻度 |
|
||||
## 系统范围
|
||||
|
||||
- 反向护栏:威胁绝不能是无源暗账——玩家说不出"它为什么变强 / 这一拳为什么这么重"即归因链失职(P2/P3)。
|
||||
- 视觉推测型对偶护栏:线索必须稳定可学(形态↔行为映射每 run 恒定,D1 义务②);任何让线索重掷或不可学的呈现设计默认砍掉(P1)。
|
||||
- 血条/攻击力数字可读性适用视觉锚 1(暗色底上高对比)。
|
||||
- 参考感受合成:Peglin 固定招式轮替(威胁因可预测而可规划——确定性环是可学习性来源)× 怪物猎人读招(前摇姿态承载威胁信息、无数值面板——视觉推测的同构)→ 本作 = 确定性环 × 视觉推测;反向对照(要避开的感受)= 半随机、不可归因、重掷线索的"猜怪"呈现。
|
||||
负责:
|
||||
|
||||
## 全局流程
|
||||
- 单位状态(hp/max_hp/存活/行为环指针)与查询/受击/推进接口
|
||||
- EnemyTable/HeroTable schema 与行回填(行键 (level_index, node_depth, enemy_id))
|
||||
- 行为环语义与目标选择规则(固定顺位)
|
||||
- 伏击量纲定稿与 advantage_per_round_cap 表值(B1 条款 3 对账供给)
|
||||
|
||||
B2 编排被动——调用权集中归 B1;下图从 B2 视角画单位级行为环与生命周期出口。
|
||||
不负责:
|
||||
|
||||
### 敌人行为环
|
||||
- 结算编排与伤害消费语义(B1 SettlementTable)
|
||||
- 状态实例容器(B3)
|
||||
- 奖励内容与掉落(B4)
|
||||
- 棋盘规则(A1/A2)
|
||||
- 单位成长曲线与难度修饰(C3)
|
||||
- 遭遇构成与跨战斗 HP 持久性(C1/C2)
|
||||
- 呈现(D1/B5/D5)
|
||||
- 单位/词条类结构与事件载体实现(实现期 ADR 域)
|
||||
|
||||
硬约束:零随机(rng_service 流封闭)· 零 UI 依赖 · 零主动事件订阅 · 悬空引用致命、零软回退 · 行为环敌单位专属 · 单位接口调用权集中归 B1 · 胜利路径 = 基础攻击(恒在)+ B4 奖励侧规划面伤害共同承载——"敌人全灭 → 战斗胜利"可判定。
|
||||
|
||||
## 核心循环
|
||||
|
||||
```
|
||||
战斗开始(B1 编排调用,B2 侧语义)
|
||||
│ ① 解析遭遇行 (level_index, node_depth) —— D2 R1 进度键 floor + enemy_id 精确匹配(悬空致命)
|
||||
│ ② 行值快照 → 实例化本战实际数量 n 个敌单位(行主序生成序——B1 encounter 骰 override;定值行 n = unit_count)+ 主角(hp 入参)
|
||||
│ ③ 全部指针指向环首:beat = pattern[0]、steps = 0
|
||||
▼
|
||||
每次结算(B1 编排驱动——B2 零主动;推进域 = 每存活敌单位恰一次 advance,主角无行为环不在推进域)
|
||||
│ ⓪ 主角先手攻击 → apply_damage(顺位最前存活敌, 伤害) [战斗段固定动作,非行为环]
|
||||
│ ① 兑付读值:query_attack(u, L, m_amb) → {baseline, attach, total}
|
||||
│ ② 受击上报:apply_damage(hero, 减伤后终值) —— 调用序钉死:倒序会读到下一拍(B1 义务①)
|
||||
│ ③ 推进:advance(u) —— 存活才推进(先作用后推进)
|
||||
▼
|
||||
当前拍作用(每存活敌单位)
|
||||
├─ attack:本结算对主角造成 atk 点伤害
|
||||
├─ charge:本结算不作用(威胁空拍、规划窗口;不兑付伏击、不读池)
|
||||
└─ heavy :atk × heavy_multiplier 对主角
|
||||
▼
|
||||
拍作用完成 → steps + 1 → beat = pattern[steps mod 环长](环尾回环首;跨轮次、跨扫雷图延续)
|
||||
轮到前被杀 → 本拍不打、指针冻结(死亡即不动手;MVP 无复活 → 永久冻结)
|
||||
▼
|
||||
battle_over(B1 调 despawn_all)→ 全部单位 Despawned(状态消亡,不跨战斗)
|
||||
战斗开始(B1 编排调用——B2 编排被动,调用权集中归 B1)
|
||||
① 解析遭遇行 (level_index, node_depth) + enemy_id 精确匹配(悬空致命)
|
||||
② 行值快照 → 实例化本战 n 个敌单位(行主序生成序)+ 主角(hp 入参);指针指向环首
|
||||
每次结算(B1 驱动;每存活敌单位恰一次 advance,主角无环不在推进域)
|
||||
⓪ 主角先手攻击 → apply_damage(顺位最前存活敌)
|
||||
① 兑付读值 query_attack(u, L, m_amb) → {baseline, attach, total}
|
||||
② 受击上报 apply_damage(hero, 终值)——调用序钉死:倒序会读到下一拍
|
||||
③ 推进 advance(u)——存活才推进(先作用后推进)
|
||||
当前拍作用:attack = atk 点伤害 · charge = 空拍不兑付 · heavy = atk × 倍率
|
||||
轮到前被杀 → 本拍不打、指针冻结(MVP 无复活 → 永久冻结)
|
||||
battle_over(B1 调 despawn_all)→ 全部单位消亡,不跨战斗
|
||||
```
|
||||
|
||||
### 出口分发
|
||||
|
||||
| 出口 | 触发 | 动作/去向 | 约束 |
|
||||
|---|---|---|---|
|
||||
| 单位死亡 | hp = 0(判定时机归 B1) | 移出顺位、不再作用、不计入"未灭";轮到前死 → 指针冻结、行动后死 → 已推进 | 不可逆(MVP 无复活);Dead 句柄保留只读可查(query_beat 冻结值) |
|
||||
| 单位死亡 | hp = 0(判定时机归 B1) | 移出顺位、不再作用、不计入"未灭" | 不可逆(MVP 无复活);Dead 句柄保留只读可查(query_beat 冻结值) |
|
||||
| 敌全灭 | 存活敌集 = ∅ | "敌人全灭"成立 → B1 胜利判定素材;单体/AOE 无有效目标;敌侧伏击池随轮末衰减自然清空 | 判定逻辑归 B1 |
|
||||
| 主角死亡 | hero hp = 0 | 战斗失败判定素材(判定时机归 B1) | battle_over → 全部单位 Despawned——不存在"主角死后敌继续攻击"的中间态 |
|
||||
| battle_over | B1 编排 despawn_all | 全部单位状态消亡、不跨战斗;Despawned 后唯一出口 = 重新 spawn(新战斗) | 重复 despawn_all → false + 诊断;Despawned 为逻辑失效态(失效句柄查询空 + 诊断) |
|
||||
| battle_over | B1 编排 despawn_all | 全部单位状态消亡、不跨战斗;唯一出口 = 重新 spawn | 重复 despawn_all → false + 诊断;Despawned 为逻辑失效态(查询空 + 诊断) |
|
||||
|
||||
## 核心规则
|
||||
## 单位与状态
|
||||
|
||||
> 每条规则两段:**人话**(作用于哪个系统、什么情况下、谁触发、触发后发生什么;效果与情况用枚举表)→ **举证**(计算方法/公式;纯流程规则明写"无计算")。
|
||||
|
||||
#### 规则 1:主角和敌人共用同一套受伤与死亡规则
|
||||
**人话**:这条管的是战斗里所有"单位"的通用身体规则。战斗场上恰有两类单位:主角一个、敌人若干,共用同一套身体语义——每个单位有当前血量与血量上限,挨打就是血量往下减,血量到 0 即死亡。超上限、负数、一刀砍超的部分怎么处理,以及"这一下究竟何时算死",都归战斗结算系统(B1)的结算公式域裁决。
|
||||
|
||||
B2 只提供受伤上报与状态查询接口、如实记账,"谁在何时对谁造成多少"的流水账本也在 B1。主角血量归零 = 战斗失败的判定素材,敌人全部归零 = 战斗胜利的判定素材——判定本身同样归 B1。
|
||||
**举证**:无计算。clamp/负值/溢杀语义与死亡判定时机的成文义务登记为 B1-③(B2 侧 out-of-scope);单位接口、胜负素材与越界拒绝验收见 AC-1/AC-2/AC-6。
|
||||
|
||||
#### 规则 2:一场战斗 1–3 个同种敌人,敌方效果对全体生效
|
||||
**人话**:这条定的是"一场战斗有几个敌人、效果怎么作用"。MVP 每场战斗 1–3 个敌人,全部是同一种敌、属性完全相同——由敌人表同一行实例化,按行序排出先后;数量是敌人表里的调节旋钮。战斗中敌人只减不增(没有召唤/增援/分裂)。
|
||||
|
||||
敌方吃到的增益/减益是"对全体生效":作用于所有存活敌人,层数进一个共享池——这是与状态系统现接口零改动兼容的 MVP 路径。"只作用于某一个敌人"的单体寻址暂不开放,登记为状态系统的扩展位,等第一个单体效果上线时补列。
|
||||
**举证**:无计算。构成/同质性/作用域/单调性细则见下方实现参照表;target_ref 扩展位义务登记为 B3(首个单体效果上线时补列,随批 B1 归集语义/D1 呈现裁决);战斗内不增员见 EC5;验收 AC-1/AC-5/AC-9。
|
||||
|
||||
### 规则 2 的实现参照——多敌模型
|
||||
|
||||
| 项 | 内容 |
|
||||
|---|---|
|
||||
| 构成 | 1–3 个同敌种单位(unit_count int [1,3] 表字段 knob);战斗开始实例化、行主序生成序 |
|
||||
| 同质性 | 战斗内敌单位同种同属性——同一 EnemyTable 行实例化 |
|
||||
| 效果作用域 | side-wide:enemy 侧效果作用全体存活敌单位——层数为 side 共享池(F2 池共享不消耗);B3 现接口零变更兼容 |
|
||||
| target_ref | 单体寻址登记为 B3 扩展位义务(首个单体效果上线时补列;随批:B1 归集语义/D1 呈现裁决) |
|
||||
| 单调性 | 战斗内敌单位数 = unit_count 不增(MVP 无 summon/增援/分裂——EC5) |
|
||||
|
||||
#### 规则 3:MVP 就两种敌人,每个关卡坐标只出一种
|
||||
**人话**:这条定的是敌人名录。MVP 恰两种敌人:地精(goblin)与熊地精(bugbear),数值全部 provisional(临时占位),MVP 名录定稿走索引门禁。敌人在敌人表里按"关卡序号 × 节点深度"坐标存放:每个坐标的行集里只许出现一种敌人——这是表结构校验,配出两种就加载报错;由此既没有"同一点随机挑一种"的选择规则,也没有引用悬空的风险。
|
||||
|
||||
行集逐坐标判定,同一关内随深度换敌种合法。MVP 分布只是最平直的合法示例:第 1 关全深度地精、第 2 关全深度熊地精——占位示范、非范本,难度调参勿照抄(防多样性无护栏),遭遇分布调参所有权归难度域(C3)。名录扩容排垂直切片/Alpha;"同深度多敌种怎么选"归遭遇构成(C1)/难度域,目前只是预留结构位。
|
||||
|
||||
**举证**:无计算。"每行集恰一敌种"(加载期致命)与字段域校验验收见 AC-12/AC-14;敌种 id 集合定值断言 {goblin, bugbear, ogre_chief} 见 AC-14(C3 修订批扩容三敌种);registry 物种注记对账见 AC-16③。
|
||||
|
||||
#### 规则 4:敌人按排好的剧本轮流出招,走到哪一拍零随机
|
||||
**人话**:每种敌人有一条排定的行动剧本(行为环):战斗开始指向剧本第一步,之后每结算一次走一格——轮到谁,谁先把当前这一拍的招打出去、再走格;走到剧本末尾回到开头;跨轮次、跨扫雷图延续,战斗结束随单位一起消亡。轮到它之前被打死:这一拍不出手、指针就地冻结("死亡即不动手")。全程零随机——走到哪一拍由结算次数唯一决定,同种敌人因此永远同拍。行为环是敌人专属:主角没有行为环,对主角调环接口一律拒绝。MVP 只启用攻击/蓄力/重击三种拍,后四类是预留位、配进表会被校验拒绝。
|
||||
|
||||
**举证**:无计算(推进是确定性函数)。指针/回绕/冻结/同步性质公式见 F1;"每结算恰一次推进"与结算内调用序登记为 B1-①;推进细则与预留值拒绝(fail-fast)见下方实现参照表;验收 AC-3/AC-4/AC-5/AC-15(预留值致命 manifest pattern_reserved)。
|
||||
|
||||
### 规则 4 的实现参照——行为环推进细则
|
||||
|
||||
| 项 | 细则 |
|
||||
|---|---|
|
||||
| 指针初始化 | 战斗开始指向环首:beat = pattern[0] |
|
||||
| 推进时机 | 每次结算推进一格——先作用后推进(B3"先兑付后衰减"同款时序哲学);轮到该单位行动时仍存活才行动并推进 |
|
||||
| 死亡口径 | 轮到前被杀 → 本拍不打、指针冻结("死亡即不动手",F1 承载;MVP 无复活 → 永久冻结、随 battle_over 消亡);行动完成后才死 → 已行动已推进 |
|
||||
| 回绕与域 | 环尾回环首;指针 ∈ [0, 环长);环长 1(goblin)退化为恒等 |
|
||||
| 延续 | 跨轮次、跨扫雷图延续(战斗域);battle_over 随单位消亡;除 despawn_all 外无任何重置入口 |
|
||||
| 确定性 | 零随机——环推进是结算次数的确定函数(rng_service 流封闭,P1) |
|
||||
| 专属域 | 行为环为敌单位专属:主角无行为环——advance/query_beat 等环接口对主角句柄一律拒绝(false / 空 + 诊断) |
|
||||
| 实现域 | MVP 恰前三类 {attack, charge, heavy};guard/boost/hinder/summon 为预留语义位(垂直切片/Alpha),EnemyTable.pattern 校验拒绝预留值(fail-fast,A1 solver_rules 冻结先例)——启用走本 GDD 修订(枚举封闭性)非调参 |
|
||||
|
||||
#### 规则 5:每踩一颗雷敌方叠一层伏击——一轮封顶、超出可见不生效
|
||||
**人话**:这条定的是踩雷对敌方的反噬。挖开雷格时,敌方全体获得一层"伏击"强化——MVP 伏击清单只有伏击这一条(状态系统表里 mine_hit 雷击来源的唯一效果行);将来加新词条要状态系统加行并连锁更新锚点,不属于 MVP。转化路径:棋盘上报"挖到雷"→ 结算编排把它转成一次伏击施加(作用全体敌人、共享层数池),每颗雷恰转化一次。单轮授予有上限(敌人表行值,默认 4):上限之内逐颗叠加;达到上限后,多踩的雷不生效,但逐颗记一行"溢出未生效"结算明细——惩罚不静默蒸发。
|
||||
|
||||
| 单轮伏击上限(cap 行值) | 行为 |
|
||||
|---|---|
|
||||
| 默认 4 | 前 4 颗雷各叠一层;第 5 颗起每颗记一行"溢出未生效"明细 |
|
||||
| 调到 8 及以上 | 单轮雷数至多 8 颗、达不到上限——溢出协议自然不可达 |
|
||||
| 0 | 该行敌种免疫伏击——每颗雷都记"溢出未生效",全部可见、全部无效 |
|
||||
|
||||
**举证**:计算见 F3:granted = min(当轮新开雷数, cap)、overflow = 差值(守恒、零静默蒸发)、L = granted(dur=1 轮末全清)。每雷恰一次转化登记为 B1-②、溢出行协议登记为 B1-⑥;cap 默认 4 定稿与反灾难护栏绑定域(单轮 5–8 雷灾难轮)见 F3;cap 表值同时是 A3 F1 条款 3 挖掘风险不等式的 B2 供给表值(单结算自然边界口径见 F4)。验收 AC-8。
|
||||
|
||||
#### 规则 6:一层伏击 = 敌人每次攻击多打 3 点固定伤害
|
||||
**人话**:这条定的是伏击到底多疼:一层伏击 = 敌人每次攻击类行为(普攻或重击)额外多打 3 点固定伤害,按主角血量点数计。结算读法:某个敌人出手时,附加伤害 = 敌方池当前层数 × 3。两个要点:附加是后置加法、不进重击倍乘(倍率只乘基础伤害);蓄力拍不出手、不附加。伏击只活一轮——每轮结算清零、没有跨轮存量,所以跨轮累计没有表值上界;单次结算有自然上界(见举证)。
|
||||
|
||||
**举证**:上界算式:单结算单单位附加 ≤ cap × 3 = 12(默认);敌方全体结构上界 = unit_count × min(单轮开雷上界 8, cap) × 3(满配 3×4×3 = 36;默认单敌 = 12);跨结算累计 = 轨迹量、非表值、不设上界(dur=1 每结算清零)。伤害构成与合成序见 F2;等量换算与不等式闭合归 B1(F4);量纲定稿注记按接口漂移回写 registry status_effect.ambush(AC-16④)。
|
||||
|
||||
#### 规则 7:敌方打主角不用挑,玩家侧永远先打排最前的敌人
|
||||
**人话**:这条定的是"打谁"。敌方一侧没有选择可言:所有存活敌人各自按自己行为环的当前拍作用于主角——主角是己方唯一单位,天然是唯一目标。玩家/道具一侧打敌人用固定顺位:单体效果默认打生成序最前的存活敌人,它死了顺延到下一个;范围效果(AOE)打全体存活敌人,同样无需选择。这套规则供结算编排消费;道具自带"指定目标"语义的扩展归道具系统(B4)/结算域。顺位必须对玩家可读——"下一个被打的是谁"要能推测出来,这是呈现层义务。
|
||||
|
||||
**举证**:无计算(纯规则)。固定顺位供给面、死亡顺延与 u_c=1 退化(AOE ≡ 单体、合法非错误)验收见 AC-10;顺位快照 = 生成序、单体/AOE 分流消费登记为 B1-⑤;顺位可读呈现义务登记为 D1-③(呈现契约表 #3)。
|
||||
|
||||
#### 规则 8:敌人要出什么招靠看图推测,不直接报数字
|
||||
**人话**:这条定的是玩家怎么"读"敌人。界面上不直接显示敌人下一拍的行为与数值——威胁靠看图推测:它弓起背,下一拍就是重击。两条承重规格:"预告时序"(即将执行的一拍在挖掘阶段全程亮出)与"映射每局恒定"(禁止重掷,否则读怪退化成猜怪)——否则"抢在重击前击杀"窗口、"蓄力轮放心贪雷"教学、读怪幻想三者同时落空。精确数字只在结算明细兑现。线索清单与图像规格归呈现层(D1/B5),映射键 = enemy_id;MVP 读怪对象 = 两条环(最长 3 拍),学习成本低。
|
||||
|
||||
**举证**:无计算(规格非算式)。五条规格全文见下方实现参照表;线索清单/图像规格/映射全局恒定呈现义务登记为 D1-①②(登记 systems-index;映射键 = enemy_id,B3 effect_id→icon 同款契约);"不直接显示数值"的负空间 = 冒烟 API 封闭枚举(无意图数值 API);行为环可学性行为级证据 AC-3/AC-15。
|
||||
|
||||
### 规则 8 的实现参照——意图可见性五条规格(承重项)
|
||||
|
||||
| # | 规格 | 内容 |
|
||||
| 状态 | 进入条件 | 行为/出口 |
|
||||
|---|---|---|
|
||||
| ① | 图像↔行为映射稳定可学 | 同一敌种同一行为恒同一视觉状态(如 bugbear 蓄力拍 = 蓄力姿态) |
|
||||
| ② | 形态暗示强度 | 敌种形态承载强度档位与环长的直觉编码("大个子多半有重击"式) |
|
||||
| ③ | 映射每 run 恒定 | 禁止重掷——否则"读怪"退化"猜怪"(违反 P1 裁剪判据);映射键 = enemy_id |
|
||||
| ④ | 精确数值在结算明细兑现 | P2 归因不变——预告面是图像、数字面是明细 |
|
||||
| ⑤ | 预告时序锁定 | 视觉状态呈现即将执行的一拍(当前拍预告)——挖掘阶段全程可见;结算时不另设独立意图播片(结算明细是数字兑现面、非意图预告面) |
|
||||
| Unspawned | 构造后未实例化 | 无接口副作用;唯一出口 = B1 编排实例化 |
|
||||
| Alive | 实例化(行值快照 / hp 入参) | 可被指定目标(顺位)、按行为环作用、计入全灭判定;受击 hp 递减 |
|
||||
| Dead | hp = 0(判定时机归 B1) | 移出顺位、不再作用、不计入"未灭";不可逆;句柄保留只读可查(query_beat 冻结值) |
|
||||
| Despawned | battle_over(B1 despawn_all) | 逻辑失效态——失效句柄查询返回空 + 诊断、作用接口拒绝;唯一出口 = 重新 spawn |
|
||||
|
||||
#### 规则 9:主角数值在英雄表里——血量上限加恒在的基础攻击
|
||||
**人话**:这条定的是主角这边怎么打。主角战斗数值单独放一张全局单行的"英雄表"(本 GDD 是回填 owner,走 D2 接口漂移规则回写),两个字段:
|
||||
不变式(debug 断言口径):hp ∈ [0, max_hp];敌单位数 = 本战实例化数(战斗内不增);行为环指针 ∈ [0, 环长);违规 = debug 断言中止(进程致命保留给 D2 数据通道)。
|
||||
|
||||
| 字段 | 域(knob) | MVP 值 |
|
||||
|---|---|---|
|
||||
| max_hp 血量上限 | int 1–999 | provisional,出处待查 |
|
||||
| atk 基础攻击 | int 1–999;0 加载期校验拒绝 | 6(原型锚 HERO_BASE_ATK provisional,归 C3) |
|
||||
规则:
|
||||
|
||||
基础攻击恒存在、不许为 0:零基线乘任何百分比增益恒为零,这个死锁从数据层就进不来、开发期任何内容态都不可能出现。战斗节奏:每次结算的战斗段,主角先手攻击顺位最前的存活敌人——先于敌方行动;攻击是固定动作、不是行为环一拍(主角无环),伤害算式/乘区/明细行协议归结算系统战斗段。攻击增益(attack_up,+50 percent)的唯一消费面就是这次先手攻击;道具伤害是恒定表值、不吃修正。
|
||||
1. **主角和敌人共用同一套受伤与死亡规则**:战斗场上恰两类单位(主角一个、敌人若干),共用同一套身体语义——每单位有当前血量与上限,挨打血量往下减,到 0 即死亡;超上限/负数/溢杀与"何时算死"归 B1 结算公式域裁决,B2 只提供受击上报与状态查询接口、如实记账。主角血量归零 = 失败判定素材、敌人全部归零 = 胜利判定素材,判定本身归 B1。
|
||||
2. **敌人系统自己不主动做事,一切等结算编排来调**:B2 不产生随机数、不碰界面、不订阅任何事件——挖雷、插旗等棋盘事实经 B1 转化后由它调用;B2 只摆出查状态(血量/当前拍/顺位/存活)与受动作(受击/推进/消亡)两组能力,什么时候调、按什么顺序调全归 B1。
|
||||
|
||||
战斗开始时主角血量由编排方入参供给,跨战斗是否保留血量归关卡结构域、本文不定义(MVP 冒烟以血量上限入参);后续解锁成长归 C4、曲线调参归 C3。胜利路径 = 基础攻击 + 奖励侧规划面伤害(囤刀、抢杀、爆发时点的决策素材)共同兑付"敌人全灭 → 战斗胜利",每一分伤害逐行标注来源(hero_attack / 道具逐件实例)。
|
||||
## 敌人构成与名录
|
||||
|
||||
**举证**:无新计算——数值皆表值。schema 域/单行校验验收 AC-13/AC-14;hero hp 入参越界拒绝见 EC16(AC-2);attack_up 消费面口径(B4);跨战斗 HP 持久性归 C1/C2;atk 禁独立调参联动见 Tuning Knobs;HeroTable 新增的接口漂移回写义务 R-4 见依赖节。
|
||||
规则:
|
||||
|
||||
#### 规则 10:开战按坐标读表生成敌人,数值是生成那一刻的快照
|
||||
**人话**:这条定的是敌人从哪来、数值从哪来。战斗开始时,编排方给出遭遇坐标(关卡序号 + 节点深度),敌人系统据此从敌人表精确匹配一行,实例化"本战实际数量 n"个敌单位——n 由编排方开战掷的遭遇骰从表里的数量区间 [unit_count, unit_count_max] 定出(定值行取表值);主角同时以血量入参生成。
|
||||
1. **一场战斗 1–3 个同种敌人,敌方效果对全体生效**:MVP 每场战斗 1–3 个敌人,全部同种同属性——同一 EnemyTable 行实例化、按行主序排生成序;战斗中敌人只减不增(不做召唤/增援/分裂——EC5,出现即 debug 断言中止)。敌方增益/减益 side-wide:作用于所有存活敌人、层数进一个共享池(F2 池共享不消耗;B3 现接口零改动兼容);"只作用于某一个敌人"的单体寻址暂不开放,target_ref 登记为 B3 扩展位义务(首个单体效果上线时补列,随批 B1 归集语义/D1 呈现裁决)。
|
||||
2. **敌种按关卡坐标存放,每个坐标只出一种**:EnemyTable 以(关卡序号 × 节点深度)为坐标存放敌人,每行集恰一敌种(行集内 enemy_id 唯一 = 表结构校验,配出两种加载期致命——既无"同点随机挑一种"的选择规则,也无引用悬空风险);同一关内随深度换敌种合法;"同深度多敌种怎么选"归 C1/C3(预留结构位);精英/Boss 修饰在现键结构下无编码位(预登记 OQ7,C1 定稿时强制核对);名录扩容归垂直切片/Alpha。
|
||||
|
||||
实例化拿到的是当时表值的快照:之后热重载改表,已生成的单位一概不受影响。难度成长走双通道:表值本身随坐标加深而变 + 难度系统(C3)的整体修饰——修饰施加点已定为"行值快照之前套乘",MVP 难度表为空、零修饰;B2 一律按实例化后的数值运作。
|
||||
| 敌种 | 行为环 | armor_type | 说明 |
|
||||
|---|---|---|---|
|
||||
| goblin(地精) | [attack](环长 1,mod 1 恒等) | none | 每拍 attack、无自然空窗(兑付率 ρ=1——EC10) |
|
||||
| bugbear(熊地精) | [attack, charge, heavy](三拍环) | a | heavy_multiplier = 2 |
|
||||
| ogre_chief(食人魔酋长) | [attack, attack, charge, heavy](四拍 Boss 环) | b | heavy_multiplier = 2 |
|
||||
|
||||
**举证**:无计算(数值皆快照表值)。行解析 = D2 R1 进度键 floor + enemy_id 精确匹配、悬空致命(EC13/EC14 → D2 通道);坐标越界前置守卫见 EC14;快照语义同 B3 EC9 先例、热重载与投影拷贝判别验收 AC-11(EC12);难度修饰接口已定——registry `difficulty_table` 条目(算式归 C3)。
|
||||
现行名录 = {goblin, bugbear, ogre_chief} 三敌种(以 registry `enemy.mvp_content` 为准);各行 hp/atk/unit_count 数值全部 provisional、曲线调参所有权归 C3;遭遇分布调参所有权归难度域(防多样性无护栏,勿照抄任何示例分布)。设计意图:名录小、坐标单敌种——加载期就把配置错误杀死,选择规则留给遭遇域。
|
||||
|
||||
#### 规则 11:敌人系统自己不主动做事,一切等结算编排来调
|
||||
**人话**:这条管的是敌人系统的姿态:B2 不产生随机数、不碰界面、不订阅任何事件——挖雷、插旗等棋盘事实不直接通知 B2,而是经结算编排转化后由它来调用。B2 只摆出两组能力:查状态(血量、当前拍、顺位、存活),受动作(受击、推进、消亡);什么时候调、按什么顺序调,全部由结算编排(B1)说了算——与状态系统"授予集中在编排"是同一条原则。
|
||||
## 行为环
|
||||
|
||||
**举证**:无计算。零随机行为级硬证据 = 同序列重放两遍逐位相同(AC-15);零 UI 依赖/零事件订阅/零 B3 符号引用静态扫描见 AC-17(A2 事件面 referenced_by 不含 B2 的代码侧对应);调用权集中与推进恰一次登记为 B1-①。
|
||||
规则:
|
||||
|
||||
## 枚举
|
||||
|
||||
### 行为拍类型(封闭枚举,七类)
|
||||
1. **敌人按排好的剧本轮流出招,走到哪一拍零随机**:每种敌人一条行为环——战斗开始指向第一步,之后每结算一次走一格、先把当前拍的招打出去再走格(先作用后推进);环尾回环首;跨轮次、跨扫雷图延续(EC11,除 despawn_all 外无任何重置入口);轮到它之前被打死 → 本拍不出手、指针就地冻结(死亡即不动手——EC1;MVP 无复活 → 永久冻结);行动完成后才死 → 已行动已推进;同种敌人永远同拍(同步性质——EC2);heavy 拍前被杀 → 重击永不兑现(抢杀窗口——EC9)。全程零随机,走到哪一拍由结算次数唯一决定。行为环敌单位专属:主角无行为环,对主角调环接口一律拒绝(false / 空 + 诊断)。MVP 只启用 attack/charge/heavy 三种拍,后四类为预留语义位、配进表会被校验拒绝(fail-fast;启用走本 GDD 修订非调参——枚举封闭性)。
|
||||
|
||||
| 值 | MVP 状态 | 语义 |
|
||||
|---|---|---|
|
||||
@@ -195,53 +104,93 @@ B2 只提供受伤上报与状态查询接口、如实记账,"谁在何时对
|
||||
| heavy | 实现 | atk × heavy_multiplier |
|
||||
| guard | 预留(校验拒绝) | 自防 |
|
||||
| boost | 预留(校验拒绝) | 自体强化 |
|
||||
| hinder | 预留(校验拒绝) | 妨害雷图——敌方向棋盘施加变异类妨害(Peglin"干扰弹板"的本作转译) |
|
||||
| hinder | 预留(校验拒绝) | 妨害雷图——敌方向棋盘施加变异类妨害 |
|
||||
| summon | 预留(校验拒绝) | 召唤增援 |
|
||||
|
||||
- pattern 环长 [1, 8];MVP 校验域 = {attack, charge, heavy};预留值校验拒绝(fail-fast);启用预留值走本 GDD 修订(枚举封闭性)非调参。
|
||||
| 项 | 细则 |
|
||||
|---|---|
|
||||
| 指针与推进 | 战斗开始 beat = pattern[0]、steps = 0;每次结算推进一格——先作用后推进(B3"先兑付后衰减"同款时序哲学);轮到该单位时仍存活才行动并推进(每结算恰一次 = B1 义务①) |
|
||||
| 死亡口径 | 轮到前被杀 → 本拍不打、指针冻结(F1 承载);行动完成后才死 → 已行动已推进 |
|
||||
| 回绕与延续 | 环尾回环首;指针 ∈ [0, 环长),环长 1(goblin)退化为恒等;跨轮次、跨扫雷图延续;battle_over 随单位消亡,除 despawn_all 外无重置入口 |
|
||||
| 确定性与专属域 | 零随机——环推进是结算次数的确定函数(rng_service 流封闭);主角无行为环,advance/query_beat 等环接口对主角句柄一律拒绝(false / 空 + 诊断) |
|
||||
| 实现域 | pattern 环长 [1, 8];MVP 校验域 = {attack, charge, heavy};EnemyTable.pattern 校验拒绝预留值(fail-fast,A1 solver_rules 冻结先例) |
|
||||
|
||||
### MVP 双敌种内容行(值全部 provisional)
|
||||
设计意图:确定性环 = 可学习性来源——读怪收益(抢在重击前击杀)由此产生。
|
||||
|
||||
| 敌种 | 行为环 | 基线(provisional,出处待查) |
|
||||
## 伏击
|
||||
|
||||
规则:
|
||||
|
||||
1. **每踩一颗雷敌方叠一层伏击——一轮封顶、超出可见不生效**:挖开雷格时敌方全体获得一层"伏击"——MVP 伏击清单只有伏击这一条(StatusEffectTable mine_hit 来源的唯一效果行;将来加新词条要 B3 加行并连锁更新锚点,不属于 MVP)。转化路径:棋盘上报"挖到雷"→ B1 转成一次伏击施加(作用全体敌人、共享层数池),每颗雷恰转化一次(B1 义务②)。单轮授予上限 = cap 行值:上限内逐颗叠加;达到上限后多踩的雷不生效,但逐颗记一行"溢出未生效"结算明细(B1 义务⑥)——惩罚不静默蒸发。
|
||||
2. **一层伏击 = 敌人每次攻击多打 3 点固定伤害**:一层伏击 = 每次攻击类行为(普攻或重击)额外附加 m_amb(provisional 3)点伤害,按主角血量点数计;附加是后置加法、不进重击倍乘(倍率只乘基础伤害);蓄力拍不出手、不附加(charge 不读池——EC8:蓄力轮授予的伏击层当轮全部蒸发,合法推论 + 读怪奖励,D5 教学条目)。伏击只活一轮——每轮结算清零、没有跨轮存量(dur=1,池衰减归 B3),跨轮累计没有表值上界;同结算内授予先于兑付(EC17——本轮踩的雷当轮即兑付,若该轮有攻击拍;读值语义归 B2、次序归 B1 义务①②)。
|
||||
|
||||
| 单轮伏击上限(cap 行值) | 行为 |
|
||||
|---|---|
|
||||
| 默认 4 | 前 4 颗雷各叠一层;第 5 颗起每颗记一行"溢出未生效"明细 |
|
||||
| 调到 8 及以上 | 单轮雷数至多 8 颗、达不到上限——溢出协议自然不可达 |
|
||||
| 0 | 该行敌种免疫伏击——每颗雷都记"溢出未生效",全部可见、全部无效(EC6;该遭遇条款 3 右臂仅剩基线伤) |
|
||||
|
||||
设计意图:惩罚有源可溯、有顶可见——cap 默认 4 是单轮 5–8 雷灾难轮(EC7)的反灾难护栏。
|
||||
|
||||
## 目标选择与读怪
|
||||
|
||||
规则:
|
||||
|
||||
1. **敌方打主角不用挑,玩家侧永远先打排最前的敌人**:敌方一侧没有选择可言——所有存活敌人各自按当前拍作用于主角(己方唯一单位,天然唯一目标)。玩家/道具一侧用固定顺位:单体效果默认打生成序最前的存活敌人,它死了顺延到下一个;范围效果(AOE)打全体存活敌人,同样无需选择;unit_count = 1 时顺位顺延与 AOE 分流无消费者、AOE ≡ 单体——合法退化非错误(EC15)。道具自带"指定目标"语义的扩展归 B4/结算域;顺位必须对玩家可读——"下一个被打的是谁"要能推测出来(D1 义务③)。
|
||||
2. **敌人要出什么招靠看图推测,不直接报数字**:界面不直接显示敌人下一拍的行为与数值——威胁靠看图推测(它弓起背,下一拍就是重击);即将执行的一拍在挖掘阶段全程亮出;映射每局恒定、禁止重掷(否则读怪退化成猜怪);精确数字只在结算明细兑现。线索清单与图像规格归 D1/B5,映射键 = enemy_id(B3 effect_id→icon 同款契约);MVP 读怪对象最长 3 拍环,学习成本低。
|
||||
|
||||
| # | 规格 | 内容 |
|
||||
|---|---|---|
|
||||
| goblin(地精) | [attack](平凡环,环长 1) | hp/atk 暂按原型参考 18/4 占位 |
|
||||
| bugbear(熊地精) | [attack, charge, heavy](三拍环) | heavy_multiplier = 2 |
|
||||
| ① | 图像↔行为映射稳定可学 | 同一敌种同一行为恒同一视觉状态(如 bugbear 蓄力拍 = 蓄力姿态) |
|
||||
| ② | 形态暗示强度 | 敌种形态承载强度档位与环长的直觉编码("大个子多半有重击"式) |
|
||||
| ③ | 映射每 run 恒定 | 禁止重掷——否则"读怪"退化"猜怪";映射键 = enemy_id |
|
||||
| ④ | 精确数值在结算明细兑现 | 预告面是图像、数字面是明细 |
|
||||
| ⑤ | 预告时序锁定 | 视觉状态呈现即将执行的一拍(当前拍预告)——挖掘阶段全程可见;结算时不另设独立意图播片(结算明细是数字兑现面、非意图预告面) |
|
||||
|
||||
### EnemyTable schema(D2 回写义务——键 (level_index, node_depth, enemy_id))
|
||||
设计意图:读怪是规划素材;映射重掷 = 读怪退化成猜怪(P1 裁剪判据)。
|
||||
|
||||
- 进度键 floor(D2 R1)+ 实体键精确匹配;每行集恰一敌种(行集内 enemy_id 唯一 = 表结构校验,违规加载期致命);本表是进度成长表(A1 BoardGenTable 同型,无 Rule 4 豁免);表非空(D2 Rule 6);精英/Boss 编码位预登记 OQ7——难度三维的精英/Boss 修饰在本键结构下无编码位,C1 定稿时强制核对。
|
||||
## 主角与实例化
|
||||
|
||||
规则:
|
||||
|
||||
1. **主角数值在英雄表里——血量上限加恒在的基础攻击**:主角战斗数值单独放一张全局单行的 HeroTable(B2 是回填 owner,走 D2 接口漂移规则回写),max_hp 与 atk 两字段。基础攻击恒存在、不许为 0——零基线乘任何百分比增益恒为零,这个死锁从数据层就进不来(atk = 0 加载期校验拒绝)。每次结算的战斗段主角先手攻击顺位最前的存活敌人——先于敌方行动;攻击是固定动作、不是行为环一拍;伤害算式/乘区/明细行协议归 B1 战斗段。attack_up(+50 percent)的唯一消费面就是这次先手攻击;道具伤害是恒定表值、不吃修正。战斗开始血量由编排方入参供给(越界拒绝——EC16:> max_hp 或 ≤ 0 → false + 诊断、不留半实例化;MVP 冒烟以血量上限入参),跨战斗是否保留归 C1/C2;解锁成长归 C4、曲线调参归 C3。胜利路径 = 基础攻击 + 奖励侧规划面伤害共同兑付"敌人全灭 → 战斗胜利",每一分伤害逐行标注来源(hero_attack / 道具逐件实例)。
|
||||
2. **开战按坐标读表生成敌人,数值是生成那一刻的快照**:战斗开始时编排方给出遭遇坐标(关卡序号 + 节点深度),B2 据此从 EnemyTable 精确匹配一行(D2 R1 进度键 floor + enemy_id 精确匹配,悬空致命、坐标越界前置守卫——EC13/EC14 走 D2 通道),实例化"本战实际数量 n"个敌单位——n 由 B1 开战掷的 encounter 骰从数量区间 [unit_count, unit_count_max] 定出(定值行取表值);主角同时以血量入参生成。实例化拿到的是当时表值的快照:之后热重载改表,已生成单位一概不受影响(EC12,B3 EC9 先例)。难度成长走双通道:表值随坐标加深而变 + C3 整体修饰——修饰施加点 = 行值快照之前套乘,MVP 难度表为空、零修饰(registry `difficulty_table`,算式归 C3);B2 一律按实例化后的数值运作。
|
||||
|
||||
## 数据表 Schema
|
||||
|
||||
### EnemyTable(D2 承载,键 (level_index, node_depth, enemy_id),B2 回填 owner)
|
||||
|
||||
进度键 floor(D2 R1)+ 实体键精确匹配;每行集恰一敌种(表结构校验,违规加载期致命);本表是进度成长表(A1 BoardGenTable 同型,无 Rule 4 豁免);表非空(D2 Rule 6)。
|
||||
|
||||
| 字段 | 类型/范围 | 语义 |
|
||||
|---|---|---|
|
||||
| enemy_id | String(行集内主键) | 实体键精确匹配(D2 Rule 4);意图视觉映射键(Rule 8③) |
|
||||
| enemy_id | String(行集内主键) | 实体键精确匹配(D2 Rule 4);意图视觉映射键 |
|
||||
| display_name | String | 图例/HUD/明细用名(本地化归 D6) |
|
||||
| unit_count | int [1, 3] | **遭遇区间下界**(knob;同敌种——C3 遭遇随机化:区间 [unit_count, unit_count_max] 经 B1 encounter 骰定本战实际数量) |
|
||||
| unit_count_max | int [unit_count, 3],可省略 | 遭遇区间上界(缺省 = 定值,旧行零迁移——C3 修订批新增字段) |
|
||||
| armor_type | enum {none, a, b},缺省 none | 护甲类型(克制矩阵 = SettlementTable.armor_effectiveness——伤害A/B 充能的克制消费面;MVP 映射 goblin=none / bugbear=a / ogre_chief=b) |
|
||||
| unit_count | int [1, 3] | 遭遇区间下界(knob;区间 [unit_count, unit_count_max] 经 B1 encounter 骰定本战实际数量) |
|
||||
| unit_count_max | int [unit_count, 3],可省略 | 遭遇区间上界(缺省 = 定值,旧行零迁移) |
|
||||
| armor_type | enum {none, a, b},缺省 none | 护甲类型(克制矩阵 = SettlementTable.armor_effectiveness;MVP 映射 goblin=none / bugbear=a / ogre_chief=b) |
|
||||
| hp | int [1, 999] | 单位最大生命基线(knob;难度修饰前) |
|
||||
| atk | int [0, 999] | 攻击基线(knob;attack 行为伤害基值;0 合法 = 纯伏击伤敌种) |
|
||||
| atk | int [0, 999] | 攻击基线(knob;0 合法 = 纯伏击伤敌种) |
|
||||
| heavy_multiplier | int [1, 16] | heavy 倍率(knob;无 heavy 拍的敌种不消费——非校验项,B3 max_stack 先例) |
|
||||
| pattern | StringList(环长 [1, 8]) | 行为环(元素 ∈ {attack, charge, heavy} 为 MVP 校验域;guard/boost/hinder/summon 预留、校验拒绝) |
|
||||
| advantage_per_round_cap | int [0, 16] | 单轮伏击授予上限(knob,默认 4 定稿;F1 条款 3 表值;0 = 该行敌种免疫伏击授予的合法极端) |
|
||||
| pattern | StringList(环长 [1, 8]) | 行为环(元素 ∈ {attack, charge, heavy} 为 MVP 校验域;预留值校验拒绝) |
|
||||
| advantage_per_round_cap | int [0, 16] | 单轮伏击授予上限(knob,默认 4 定稿;条款 3 供给表值;0 = 免疫伏击的合法极端) |
|
||||
|
||||
### HeroTable schema(单行全局,D2 新增 schema 行——接口漂移回写义务见依赖节)
|
||||
### HeroTable(D2 新增 schema 行,单行全局,B2 回填 owner)
|
||||
|
||||
- 主角不随关卡自动成长,成长 = 天赋 C4 / 奖励侧;Rule 4 豁免同 ActionEconomyTable 先例。
|
||||
主角不随关卡自动成长(成长 = 天赋 C4 / 奖励侧);Rule 4 豁免同 ActionEconomyTable 先例。
|
||||
|
||||
| 字段 | 类型/范围 | 语义 |
|
||||
|---|---|---|
|
||||
| max_hp | int [1, 999] | 主角最大生命(knob,MVP 值 provisional 出处待查) |
|
||||
| atk | int [1, 999] | 基础攻击(knob,MVP = 6 原型锚 provisional 归 C3;0 = 加载期校验拒绝——零基线死锁自 schema 层杜绝) |
|
||||
|
||||
## 数值结论与推导
|
||||
## 数值公式(F1–F4 结论)
|
||||
|
||||
> 全部公式零随机、同输入恒同输出(可回放前提);本节只含机制公式——平衡归属见文末显式排除声明。术语:拍 = 行为环里的一格行动(bugbear 环 [攻击, 蓄力, 重击] 有三拍);伏击池 = 敌方侧共享的伏击层数(本轮踩几颗雷就几层,轮末清零);溢出 = 单轮踩雷超过上限的部分,转化为明细行可见、不生效。
|
||||
全部公式零随机、同输入恒同输出(可回放前提)。术语:拍 = 行为环里的一格行动;伏击池 = 敌方侧共享的伏击层数(本轮踩几颗雷就几层,轮末清零);溢出 = 单轮踩雷超过 cap 的部分(转化为明细行可见、不生效)。推导与论证见 analysis 件。
|
||||
|
||||
### F1 行为环推进(ring_advance)
|
||||
|
||||
**结论**:beat(u) = pattern[steps_u mod 环长]、行动完成后 steps_u + 1;指针恒 ∈ [0, 环长)、环长 1(goblin)退化为恒等;死亡即不动手——轮到前被杀本拍不打、步数冻结(永久,随 battle_over 消亡);同种单位同指环首且每结算各恰推进一次 ⇒ 存活者永远同拍(同步性质定理——任何死亡时序都不会让幸存者乱拍)。
|
||||
|
||||
#### 推导
|
||||
**结论**:beat(u) = pattern[steps_u mod 环长]、行动完成后 steps_u + 1;指针恒 ∈ [0, 环长)、环长 1 退化为恒等;死亡即不动手——轮到前被杀本拍不打、步数冻结(永久);同种单位同指环首且每结算各恰推进一次 ⇒ 存活者永远同拍(同步性质定理)。
|
||||
|
||||
```
|
||||
beat(u) = pattern[steps_u mod 环长] 行动前读拍;战斗开始 steps_u = 0(指向环首)
|
||||
@@ -249,355 +198,163 @@ steps_u' = steps_u + 1 行动完成后推进(先作用后
|
||||
轮到前被杀 → steps_u 冻结(死亡即不动手);行动完成后才死 → 已行动已推进
|
||||
```
|
||||
|
||||
| 变量 | 符号 | 类型 | 范围 | 说明 |
|
||||
|---|---|---|---|---|
|
||||
| 行为环 | pattern | StringList | 环长 [1,8];MVP 元素 ∈ {attack, charge, heavy} | EnemyTable 行值快照(Rule 10) |
|
||||
| 已行动次数 | steps_u | int | [0, ∞) | 结算次数的确定函数(零随机) |
|
||||
| 当前拍 | beat | enum | pattern 元素 | 本结算该单位的行动内容 |
|
||||
|
||||
- 同步性质(定理):同种单位同指环首、每结算各恰推进一次(B1 义务①)→ 存活者永远同拍——任何死亡时序都不会让幸存者乱拍。
|
||||
- Output Range:指针恒 ∈ [0, 环长);环长 1(goblin)退化为恒等。极端:heavy 拍前被杀 → 重击永不兑现(冻结于该拍)——玩家"抢在重击前击杀"的读怪收益由此产生(P1)。
|
||||
- Example:bugbear——结算 1 攻击(p→1)→ 结算 2 蓄力空拍(p→2)→ 结算 3 前被主角击杀 → 重击不兑现、指针冻结于 2;若结算 3 行动后才死 → 重击已兑现、p 回绕 0。
|
||||
- 边界注记:归 B2——指针所有权、存活校验、冻结不变式、环首初始化、跨轮跨图延续;归 B1——死亡判定时机、结算内先后次序、每结算恰一次推进(义务①)。
|
||||
边界:归 B2——指针所有权、存活校验、冻结不变式、环首初始化、跨轮跨图延续;归 B1——死亡判定时机、结算内先后次序、每结算恰一次推进。
|
||||
|
||||
### F2 攻击行为裸伤害构成(raw_attack_damage)
|
||||
|
||||
**结论**:attack 拍 D = atk + m_amb × L、heavy 拍 D = atk × heavy_multiplier + m_amb × L、charge 拍 D = 0(不读伏击池);伏击附加是后置加法、不进倍乘(合成序钉死);池共享不消耗(同结算多敌读同一 L);B2 向 B1 供 (基线, 伏击) 分量二元组。
|
||||
|
||||
#### 推导
|
||||
**结论**:attack 拍 D = atk + m_amb × L、heavy 拍 D = atk × heavy_multiplier + m_amb × L、charge 拍 D = 0(不读伏击池);伏击附加是后置加法、不进倍乘;池共享不消耗(同结算多敌读同一 L,非均分、非先到先得);B2 向 B1 供(基线, 伏击)分量二元组(结算明细"伏击 +N"归因行的数据源)。
|
||||
|
||||
```
|
||||
attack 拍:D = atk + m_amb × L 基线 + 伏击附加(m_amb = StatusEffectTable.ambush.magnitude,provisional 3)
|
||||
attack 拍:D = atk + m_amb × L m_amb = StatusEffectTable.ambush.magnitude(provisional 3)
|
||||
heavy 拍:D = atk × heavy_multiplier + m_amb × L
|
||||
charge 拍:D = 0 不读伏击池——空拍零兑付
|
||||
合成序:伏击附加 = 后置加法,不进倍乘
|
||||
```
|
||||
|
||||
| 变量 | 符号 | 类型 | 范围 | 说明 |
|
||||
|---|---|---|---|---|
|
||||
| 攻击基线 | atk | int [0,999](快照) | EnemyTable 行值 | 0 合法(纯伏击伤敌种) |
|
||||
| 重击倍率 | heavy_multiplier | int [1,16](快照) | 仅 heavy 拍消费 | 无 heavy 拍不读(非校验项) |
|
||||
| 伏击层数 | L | int [0, min(雷数, cap)] | 兑付时读值(B1 经 query_active) | dur=1 → L = 本轮受理授予数,无跨轮存量 |
|
||||
| 伏击量纲 | m_amb | int flat ≥ 1;provisional 3 | B3 行值 | 量纲 = 主角 HP 点数(本 GDD 定稿);锚验收归 B4/B1 |
|
||||
|
||||
验算表:
|
||||
|
||||
| 验算 | 读数 | 说明 |
|
||||
|---|---|---|
|
||||
| bugbear(atk=4, mult=2)heavy 拍 L=4 | 4×2 + 12 = **20** | 合成序判别非平凡:塞进倍乘得 (4+12)×2 = 32 ≠ 20;L=4 = cap=4 默认下游戏态上界(域内判别值);query_attack 的 L 为调用方注入的判别探针、B2 不校验其游戏态域(游戏态域由 F3 预截流承载——探针取值与游戏态域分离,实现期若给 query_attack 加 L 域守卫须回改 AC-7) |
|
||||
| goblin(atk=4)本轮开雷 3 颗 | D = 4 + 9 = **13** | attack 拍基础例 |
|
||||
| 满编 3 goblin、L=4 | 各 4+12 = 16、合计 48(伏击分量 36) | 多敌共享读值例 |
|
||||
|
||||
- Output Range(默认表值,cap/atk/m_amb/mult 调参后随之重算):goblin attack ∈ [4, 16];bugbear attack ∈ [4, 16]、heavy ∈ [8, 20]、charge ≡ 0(cap=4 封顶 L=4)。
|
||||
- 池共享不消耗:同一结算多个敌人的攻击各自读同一个 L(共享、非均分、非先到先得);层数扣减唯一入口 = B3 轮末衰减(dur=1 轮末全清)。
|
||||
- 分量供给建议:B2 向 B1 供 (基线, 伏击) 二元组而非合后标量——结算明细"伏击 +N"的 P2 归因行需要分量边界。
|
||||
- 极端:charge 拍零兑付 → 蓄力轮授予的伏击层当轮全部蒸发(合法推论;反向 = 读怪奖励"蓄力拍前放心贪雷"——D5 教学条目);无负值分支(clamp/地板归 B1)。
|
||||
- 量级注记:"L≥2 伏击分量过半"仅 attack 拍成立(6/10);heavy 拍因基线 ×mult 过半点后移(6/14 < 半)——支配边界 L* = ⌈atk×mult/3⌉ 与"过半"口径按拍别分别读取。
|
||||
- 边界注记:归 B1——L 读值、clamp/负值/溢杀、hero 侧减伤合成次序、死亡判定与"这一下是否兑现"。
|
||||
读数:合成序判别例——bugbear(atk=4, mult=2)heavy 拍 L=4 → 4×2 + 12 = **20**(塞进倍乘得 (4+12)×2 = 32 ≠ 20);单结算单单位附加上界 = cap × 3 = 12(默认,L ≤ min(雷数, cap));无负值分支——clamp/地板/hero 侧减伤合成归 B1。
|
||||
|
||||
### F3 伏击授予与溢出(ambush_grant_overflow)
|
||||
|
||||
**结论**:granted_r = min(当轮新开雷数, cap)(cap 判定在授予前——B1 预截流);overflow_r = 当轮雷数 − granted_r(每颗溢出雷一行"溢出未生效"明细、含来源);L_r = granted_r(debuff 只活一结算:当轮兑付一次、轮末全清、无跨轮存量);守恒 granted + overflow = 当轮雷数、零静默蒸发;max_stack = 16 结构不可达(双重不可达——死护栏非死字段)。
|
||||
|
||||
#### 推导
|
||||
**结论**:granted_r = min(当轮新开雷数, cap)(cap 判定在授予前——B1 预截流);overflow_r = 当轮雷数 − granted_r(每颗溢出雷一行"溢出未生效"明细、含来源);L_r = granted_r(当轮兑付一次、轮末全清、无跨轮存量);守恒 granted + overflow = 当轮雷数、零静默蒸发;max_stack = 16 结构不可达(dur=1 ∧ AP ≤ 8 承载——死护栏非死字段)。
|
||||
|
||||
```
|
||||
granted_r = min(当轮新开雷数, cap) cap 判定在授予前(B1 预截流)
|
||||
overflow_r = 当轮新开雷数 − granted_r 每颗溢出雷一行"溢出未生效"明细(含来源)
|
||||
L_r = granted_r debuff 只活一结算:当轮兑付一次、轮末全清、无跨轮存量
|
||||
L_r = granted_r 只活一结算:当轮兑付一次、轮末全清
|
||||
```
|
||||
|
||||
| 变量 | 符号 | 类型 | 范围 | 说明 |
|
||||
|---|---|---|---|---|
|
||||
| 当轮新开雷数 | mines_r | int | [0, 8](结构界 = AP) | round facts 经 B1 收集;复开不可能(A2 棋盘面语义) |
|
||||
| 单轮伏击授予上限 | cap | int(行值 knob) | [0,16],默认 4 | 0 = 该行敌种免疫伏击(全溢出可见);F1 条款 3 供给值的来源字段 |
|
||||
| 当轮授予数 | granted_r | int | [0, 4] | B1 编排期逐雷 apply_effect;每雷恰一次转化(义务②) |
|
||||
| 溢出量 | overflow_r | int | [0, 8] | 明细行数;呈现归 B5/D1(义务⑥) |
|
||||
|
||||
验算表:
|
||||
|
||||
| 场景 | granted | overflow | 说明 |
|
||||
|---|---|---|---|
|
||||
| cap=4、开雷 6 | 4 层 | 2 行 | 本结算每个攻击行为附加 +12 |
|
||||
| cap=4、开雷 5–8(灾难轮) | 4 | 1–4 | cap 反灾难护栏绑定域 |
|
||||
| cap=0、开雷 m | 0 | m | 免疫极端——全溢出、伏击全无效但全部可见(P2 诚实) |
|
||||
|
||||
- cap 默认 4:反灾难护栏——绑定阈 = 单轮 5–8 雷灾难轮,溢出协议获真实消费域。
|
||||
- 结构不可达验证:单轮 L ≤ min(8, cap=4) = 4 < 16,且 dur=1 无跨轮存量 → B3 满层拒绝对 ambush 行双重不可达(不可达性由 dur=1 ∧ AP ≤ 8 承载、与 cap 无关——M=16 是死护栏非死字段)。
|
||||
- 重验触发:ambush.duration ≥ 2 ∨ AP 经济改动 ∨ ambush 新增非 mine_hit 授予源(旗源授予不计入 mines_r、cap 预截流漏账 → L 可达 16 触发 B3 满层拒绝、与 F3/B3 双溢出协议冲突——OQ6 标错惩罚采纳时强制重验)。
|
||||
- 边界注记:归 B1——预截流编排、授予次序(行主序雷格序为建议序)、每雷恰一次、溢出行协议。
|
||||
变量域:mines_r ∈ [0, 8](结构界 = AP;复开不可能——A2 棋盘面语义);cap ∈ [0, 16] 默认 4(行值 knob;0 = 免疫伏击、全溢出可见);granted_r ∈ [0, 4](B1 编排期逐雷 apply_effect、每雷恰一次转化)。边界:归 B1——预截流编排、授予次序(行主序雷格序为建议序)、每雷恰一次、溢出行协议。
|
||||
|
||||
### F4 条款 3 供给口径(clause3_supply)
|
||||
|
||||
**结论**:每结算敌方伏击暴露 = k × L × m_amb(k = 本结算存活敌中攻击/重击拍的单位数,确定性可算);每结算结构上界 = unit_count × min(AP 上界, cap) × m_amb(cap > AP 界时 cap 腿松弛);跨结算累计 = 轨迹量、非表值、不设上界(dur=1 每结算清零);B1 对账取"每结算"口径即可闭合、无需战斗长度假设。
|
||||
|
||||
#### 推导
|
||||
|
||||
```
|
||||
每结算敌方伏击暴露(精确式)= k × L × m_amb k = 本结算存活敌中攻击/重击拍的单位数(确定性可算)
|
||||
每结算敌方伏击暴露(精确式)= k × L × m_amb
|
||||
每结算结构上界 = unit_count × min(AP 上界, cap) × m_amb
|
||||
cap > AP 界时 cap 腿松弛——默认 3×min(8,4)×3 = 36;cap≥8 时真可达上界 72 而非 144
|
||||
跨结算累计 = 轨迹量,非表值、不设上界 dur=1 每结算清零、无存量累积;战斗再长不叠加同一层
|
||||
跨结算累计 = 轨迹量,非表值、不设上界
|
||||
```
|
||||
|
||||
- 上界读数:默认满配 3×min(8,4)×3 = 36、cap ≥ 8 时真可达上界 72 而非 144;默认行值 unit_count=1 下 = 12。
|
||||
读数:默认满配上界 = 3 × min(8, 4) × 3 = **36**;cap ≥ 8 时真可达上界 72(而非 144);默认行值 unit_count = 1 下 = 12。
|
||||
|
||||
- 口径依据(用户定稿原话转写):"不设(每战)上界——踩雷的 debuff 只存在一回合:在一次结算中有效,之后就没有 debuff 了。"——debuff 单结算寿命 = 自然边界。
|
||||
- B3 红警闭环:ambush 量纲已由 F2 供给(registry OQ2 关闭条件);条款 3 左臂(安全格 buff 当量)载体 = 主角基础攻击(恒在,attack_up 复活)与 B4 奖励行值;闭合回执见 registry clause3_supply(B1 F4)。
|
||||
## 依赖与输出
|
||||
|
||||
方向性预检验算表(provisional——真实对账 = A1 actuals p10 + B1 归一表):
|
||||
B2 编排被动——调用权集中归 B1;A2/A3/A1 事实均经 B1 结算编排转化,零直接接口。registry / 接口漂移回写义务(R-1–R-4)与双向一致性核对记录见 analysis 附录。
|
||||
|
||||
| 项 | 读数 | 说明 |
|
||||
|---|---|---|
|
||||
| 盲猜端单格 P(雷) | ≈ 0.5–0.7 量级 | 有信息挖掘端趋 0(A1 参考:密度 0.10 / target 0.95)——不等式真实战场在残余盲猜集 |
|
||||
| 右臂(cap=4) | 0.64 × 12 ≈ 7.7 | 条款 3 右臂代理读数 |
|
||||
| 左臂(条款 2 最低档锚 +50pp) | 0.36 × 50 = 18 | 条款 3 左臂代理读数 |
|
||||
| 方向稳健裕度 | ≈ 2.3× | registry clause3_supply.direction_precheck 同步回写 |
|
||||
| 方向 | 系统 | 性质 | 接口要点 |
|
||||
|---|---|---|---|
|
||||
| 上游 | D2 | hard | EnemyTable schema + 行回填(B2 为回填 owner)+ HeroTable 新增(走 D2 接口漂移规则回写)+ ConfigDB 单点读取(R1 行解析) |
|
||||
| 下游 | B1 | hard(provisional) | 单位状态查询/受击/推进接口(冒烟 API 面)+ 义务①–⑥(缺项即 blocking,见下表) |
|
||||
| 相邻 | B3 | 零运行时依赖 | ambush/weaken 量纲与作用域验收锚归 B2;side-wide MVP 兼容(B3 接口零变更);target_ref 扩展位义务 |
|
||||
| 下游 | B4 | soft(provisional) | 伤害道具默认目标消费(固定顺位);伏击清单扩展联动修订;attack_up 消费面 = 主角战斗段先手攻击;道具/增益 = 基础攻击之外的规划面伤害 |
|
||||
| 间接 | A2/A3 | 零直接接口 | 雷/旗事实经 B1 转化;AP 界(单轮开雷 ≤ 8)= cap 默认值结构来源;weaken 档位锚归 B4/B1 |
|
||||
| 间接 | A1 | — | 雷数分布影响伏击吞吐——条款 3 对账消费 A1 actuals p10(B1 义务,非 B2 域) |
|
||||
| 下游 | C3 | soft(provisional) | 难度修饰施加点/算式归 C3;两表曲线数值调参所有权归 C3;多敌种同深度选择规则共裁;新敌种投放节奏 = 关卡命脉(goblin 单拍环证伪项 OQ8) |
|
||||
| 下游 | C1 | soft(provisional) | 遭遇构成(战斗触发、(L,D) 供给、unit_count 覆盖语义)归 C1;跨战斗 HP 持久性归 C1/C2 |
|
||||
| 下游 | D1 | soft | 视觉推测型呈现义务①–④(缺项即 blocking);敌单位 HUD(血条/顺位/姿态)呈现 |
|
||||
| 下游 | B5 | soft | 行为环视觉状态表现(蓄力姿态等——预告时序规格⑤);结算明细敌方行呈现(数据源 = B1 流水) |
|
||||
| 下游 | D5 | soft | 读怪教学(敌种环模式可学、顺位规则)+ "蓄力拍前放心贪雷"教学 + 首次蓄力姿态一次性提示候选 |
|
||||
|
||||
- 量级注记(支配边界):atk=4 时 L ≥ 2 伏击分量即过半——常态支配的修正入口 = 敌种 atk 曲线(C3 所有权)或 m_amb 锚(B4/B1 验收),本 GDD 权限外、仅登记方向;cap=4 只治尾部灾难(5–8 雷轮)。
|
||||
### 义务台账(活契约,缺项即 blocking)
|
||||
|
||||
### 显式排除声明
|
||||
|
||||
| 对象 | 归属 |
|
||||
|---|---|
|
||||
| 伤害 clamp/地板/溢杀、乘区合成、减伤读法、死亡判定时机 | B1 SettlementTable |
|
||||
| F1 条款 3 不等式闭合对账(输入 = A1 actuals p10,非 target 参数) | B1 单一 owner |
|
||||
| m_amb(+3)行值锚验收、weaken 档位 | B4/B1(A3 条款 2/3) |
|
||||
| 敌种 hp/atk/pattern 曲线数值、难度修饰 | C3 |
|
||||
| 伤害道具/奖励池(hero 侧伤害来源) | B4 |
|
||||
|
||||
B2 只对"套路怎么转、一下打多少的两块拼图、一轮吃几层、交给 B1 对账的口径"负责。
|
||||
|
||||
## 状态
|
||||
|
||||
| 状态 | 进入条件 | 行为/出口 |
|
||||
|---|---|---|
|
||||
| Unspawned | 构造后未实例化 | 无接口副作用;唯一出口 = B1 编排实例化 |
|
||||
| Alive | 实例化(行值快照 / hp 入参) | 可被指定目标(顺位)、按行为环作用、计入全灭判定;受击 hp 递减 |
|
||||
| Dead | hp = 0(判定时机归 B1) | 移出顺位、不再作用、不计入"未灭";不可逆(MVP 无复活);句柄保留只读可查(query_beat 冻结值) |
|
||||
| Despawned | battle_over(B1 编排 despawn_all) | 全部单位状态消亡、不跨战斗;逻辑失效态——失效句柄查询返回空 + 诊断、作用接口拒绝;唯一出口 = 重新 spawn(新战斗) |
|
||||
|
||||
不变式(debug 断言口径):hp ∈ [0, max_hp];敌单位数 = unit_count(战斗内不增——summon 未实现);行为环指针 ∈ [0, 环长)(Alive 期间按结算推进;charge 空过是环位置语义、非独立状态);违规 = debug 断言中止(进程致命保留给 D2 数据通道)。行为级证据 = AC-1(数)、AC-3(指针)、AC-4/AC-6(hp floor)。
|
||||
|
||||
## 边界情况
|
||||
|
||||
| 条件 | 行为 | 依据 |
|
||||
|---|---|---|
|
||||
| EC1 敌人在轮到它行动前被击杀 | 本拍不打、指针冻结("死亡即不动手");行动完成后才死 → 已行动已推进(heavy 已兑现) | F1 / Rule 4 |
|
||||
| EC2 同种单位部分死亡 | 存活者永远同拍(同步性质定理)——幸存者轮转不受任何死亡时序干扰 | F1 |
|
||||
| EC3 全体敌单位死亡 | 存活敌集 = ∅、"敌人全灭"成立、胜负判定归 B1;单体/AOE 无有效目标;敌侧伏击池随轮末衰减自然清空(无兑付者) | Rule 1 |
|
||||
| EC4 主角 hp = 0 | 战斗失败判定素材(判定时机归 B1);battle_over → 全部单位 Despawned——不存在"主角死后敌继续攻击"的中间态 | Rule 1 |
|
||||
| EC5 战斗中敌单位数 ≠ 本战实际数量 n | 结构不可能(MVP 无 summon/增援/分裂;n = B1 encounter 骰定值——区间语义下实例化后仍不增)——出现即 debug 断言中止(进程致命保留给 D2 数据通道) | 实例不变式 |
|
||||
| EC6 敌种行 cap = 0(免疫伏击的合法极端) | granted ≡ 0、每颗雷各一行"溢出未生效"明细(全部可见、全部无效——P2 诚实);该遭遇条款 3 右臂仅剩基线伤 | Rule 5 / F3 |
|
||||
| EC7 单轮踩雷 5–8 颗(灾难轮) | granted = 4、溢出 1–4 行;本结算每个攻击行为附加恒 +12 | F3(cap 反灾难护栏绑定域) |
|
||||
| EC8 全部存活敌同拍蓄力(charge 轮) | 零兑付(k=0);该轮新踩的雷照常授予、轮末照常全部蒸发(合法推论 + 读怪奖励——D5 教学条目已登记) | F2/F3 |
|
||||
| EC9 敌单位在 heavy 拍前被杀 | 重击永不兑现、指针冻结于 heavy 拍——"抢杀窗口"读怪收益(P1) | F1 |
|
||||
| EC10 敌种 pattern 环长 = 1(goblin) | mod 1 恒等 → 每拍 attack、无自然空窗(兑付率 ρ=1——该敌种伏击威胁无衰减节拍) | F1 |
|
||||
| EC11 战斗跨多张扫雷图 | 单位状态(hp/指针)与敌侧伏击池跨图延续(换图/刷新不清空——B3 EC8 同款);雷格兑付资格随图消亡、新图新雷新资格(A3/A2 域,B2 无从感知也无须感知) | Rule 4 |
|
||||
| EC12 战斗中热重载 EnemyTable/HeroTable | D2 战斗中 reload 拒绝门(D2 EC8);已实例化单位不受任何表重载影响(行值快照) | Rule 10 |
|
||||
| EC13 行集缺行 / 请求敌种悬空 | D2 R1 实体键精确匹配 → 悬空引用致命(D2 Rule 6 通道);B2 无软回退(错误配置上线比崩溃更伤——P1/P2 信任底线) | D2 R1/Rule 6 |
|
||||
| EC14 遭遇坐标越界(level_index < 1 / node_depth < 0) | D2 R1 前置守卫致命(D2 EC14)——B2 不自行 clamp | D2 EC14 |
|
||||
| EC15 unit_count = 1 | 固定顺位顺延与 AOE 分流无消费者(Rule 7 空转)、AOE ≡ 单体——合法退化,非错误 | Rule 7 |
|
||||
| EC16 主角 hp 入参越界(> max_hp 或 ≤ 0) | 拒绝实例化(false + debug 诊断,承 A3 拒绝口径;进程致命保留给 D2 数据通道)——编排方供给异常显式暴露、不静默吸收 | Rule 9 |
|
||||
| EC17 同结算内"踩雷授予"与"敌攻击兑付"的先后 | 授予在编排期先于兑付 → 本轮踩的雷当轮即兑付(若该轮有攻击拍);读值语义半句归 B2(无内部缓存、无时间维度——AC-7 腿4)、次序半句归 B1(义务①②编排域) | F2/F3 |
|
||||
|
||||
## 依赖
|
||||
|
||||
**上游**:D2(hard)——EnemyTable schema + 双敌种行回填(本 GDD 为回填 owner)+ HeroTable 新增(走 D2 接口漂移规则回写其 Core Rules 表清单)+ ConfigDB 单点读取(R1 行解析)。无其他玩法上游;A2/A3/A1 的事实均经 B1 结算编排转化(零直接接口)。
|
||||
|
||||
**下游与邻接**:
|
||||
|
||||
| 依赖方 | 性质 | 接口 |
|
||||
|---|---|---|
|
||||
| B1 | hard(provisional——B1 未设计) | 单位状态查询/受击/推进接口(冒烟 API 面全表)+ B1 侧义务清单 6 项(缺项即 blocking,见义务台账):① 推进每结算恰一次 ② 雷→伏击恰一次 ③ clamp/死亡时机成文 ④ 条款 3 对账(cap 表值 + 量纲 + A1 actuals p10)⑤ 默认目标/AOE 分流 ⑥ 溢出行协议 |
|
||||
| B3 | 相邻(零运行时依赖——验收锚关系非依赖边,B3 先例同款) | ambush/weaken 的量纲与作用域验收锚归 B2(Rule 6 兑现 registry OQ2);side-wide MVP 兼容(B3 接口零变更);target_ref 扩展位义务(首个单体效果上线时补列,随批:B1 归集/D1 呈现裁决) |
|
||||
| B4 | soft(provisional) | 伤害道具默认目标消费(Rule 7 固定顺位);伏击清单扩展联动(新增 mine_hit 行时本 GDD 同步修订);B4 道具/增益 = 主角基础攻击之外的规划面伤害(非唯一伤害来源);attack_up 消费面 = 主角战斗段先手攻击(Rule 9 / B1 战斗段) |
|
||||
| A2/A3 | 间接(零直接接口) | 雷/旗事实经 B1 转化;AP 界(单轮开雷 ≤ 8)= cap 默认值结构来源;weaken 档位锚归 B4/B1(A3 条款 2),B2 无表值 |
|
||||
| A1 | 间接 | 雷数分布影响伏击吞吐——条款 3 对账消费 A1 actuals p10(B1 义务,非 B2 域) |
|
||||
| C3 | 下游(soft,provisional) | 难度修饰施加点/算式归 C3 定稿(Rule 10);EnemyTable/HeroTable 曲线数值调参所有权归 C3(A1 参考行先例——MVP 默认值全部 provisional);多敌种同深度选择规则共裁;新敌种投放节奏 = 关卡命脉(MVP 敌信息总量 = 2 环 3 行为、L2 见底——每关须有新敌种或新环段投放;goblin 单拍环 playtest 证伪项 OQ8) |
|
||||
| C1 | 下游(soft,provisional) | 遭遇构成(战斗触发、(L,D) 供给、unit_count 覆盖语义)归 C1;跨战斗 HP 持久性归 C1/C2 |
|
||||
| D1 | soft | 视觉推测型呈现义务 4 项(缺项即 blocking,见义务台账);敌单位 HUD(血条/顺位/姿态)呈现;顺位标记资产需求(呈现契约表 #3) |
|
||||
| B5 | soft | 行为环视觉状态表现(蓄力姿态等——预告时序 Rule 8⑤);结算明细敌方行呈现(数据源 = B1 流水;首个 heavy 兑付明细行分量高亮建议——首遇校准课,ux 注记非硬义务) |
|
||||
| D5 | soft | 读怪教学(敌种环模式可学、顺位规则)+ "蓄力拍前放心贪雷"教学(charge 轮伏击池蒸发 = 读怪奖励的涌现素材——F2 极端行为)+ 首次蓄力姿态一次性提示候选("它在蓄力,这轮踩雷不挨打"——L1 goblin 无 charge 拍、首课在 L2;MVP 可先上一次性提示、不等垂直切片完整教学)——垂直切片期 |
|
||||
|
||||
- 双向一致性核对(systems-index 依赖分层表):B2 ← D2 ✅(索引仅此一条硬边,其余为事实读取不列边——D2 注记口径);B1 ← …B2 ✅ · C3 ← D2,B2 ✅ · C1 ← C2,C3,B2,B4 ✅。
|
||||
|
||||
### 义务台账(本 GDD 登记,缺项即 blocking——B3 对 B1 登记先例)
|
||||
|
||||
对外引用口径:B1 清单在 B1/registry 侧引用名为「B2 义务①–⑥」(b1-settlement 上游表同口径);D1 清单引用名为「D1 呈现义务①–④」。
|
||||
对外引用口径:B1 清单引用名「B2 义务①–⑥」(b1-settlement 上游表同口径);D1 清单引用名「D1 呈现义务①–④」。
|
||||
|
||||
| 编号 | 内容 | 对侧 | 状态 |
|
||||
|---|---|---|---|
|
||||
| B1-① | 单位接口调用集中在结算编排、行为环推进每结算恰一次(double-advance 无守卫——信任编排,B3 义务⑥同款);结算内调用序成文:兑付读值 query_attack → 受击上报 apply_damage → 推进 advance——倒序会读到下一拍(F2 依赖当前拍;比 double-advance 更常见的实现错误),B1 冒烟须回放结算步流 | B1 | 已登记 · 缺项即 blocking |
|
||||
| B1-② | 雷→伏击事实转化恰一次(每颗雷格实例至多一次;B3 EC6 对侧同款) | B1 | 已登记 · 缺项即 blocking |
|
||||
| B1-③ | 伤害 clamp/负值/溢杀语义与死亡判定时机成文(Rule 1 B1 域) | B1 | 已登记 · 缺项即 blocking |
|
||||
| B1-④ | F1 条款 3 闭合对账:消费 B2 advantage_per_round_cap 表值 + 伏击量纲(Rule 6 换算)+ A1 actuals p10(非 target 参数——A1 登记口径) | B1 | 已登记 · 缺项即 blocking |
|
||||
| B1-⑤ | 默认目标规则消费与单体/AOE 分流(Rule 7;顺位快照 = 生成序) | B1 | 已登记 · 缺项即 blocking |
|
||||
| B1-⑥ | 伏击 cap 溢出的"溢出未生效"明细行协议(Rule 5 后半;呈现归 B5/D1) | B1 | 已登记 · 缺项即 blocking |
|
||||
| D1-① | enemy_id→图像线索映射清单成文(形态/姿态↔行为状态;预告时序 = 下一拍预告、挖掘期全程可见〔Rule 8⑤〕;含强度档位与环长直觉编码说明〔Rule 8②〕;形状+色相双通道,art-bible 约束) | D1 | 已登记 · 缺项即 blocking |
|
||||
| D1-② | 线索映射全局恒定(映射键 = enemy_id——跨 run 恒定、禁止重掷;Rule 8③ 的呈现侧承载) | D1 | 已登记 · 缺项即 blocking |
|
||||
| D1-③ | 单位顺位与存活可读(固定顺位规则的推测前提——Rule 7;顺位标记资产需求见呈现契约表 #3) | D1 | 已登记 · 缺项即 blocking |
|
||||
| B1-① | 单位接口调用集中在结算编排、行为环推进每结算恰一次(double-advance 无守卫——信任编排);结算内调用序成文:query_attack → apply_damage → advance(倒序会读到下一拍),B1 冒烟须回放结算步流 | B1 | 已登记 · 缺项即 blocking |
|
||||
| B1-② | 雷→伏击事实转化恰一次(每颗雷格实例至多一次) | B1 | 已登记 · 缺项即 blocking |
|
||||
| B1-③ | 伤害 clamp/负值/溢杀语义与死亡判定时机成文 | B1 | 已登记 · 缺项即 blocking |
|
||||
| B1-④ | 条款 3 闭合对账:消费 B2 cap 表值 + 伏击量纲 + A1 actuals p10(非 target 参数) | B1 | 已登记 · 缺项即 blocking |
|
||||
| B1-⑤ | 默认目标规则消费与单体/AOE 分流(顺位快照 = 生成序) | B1 | 已登记 · 缺项即 blocking |
|
||||
| B1-⑥ | 伏击 cap 溢出的"溢出未生效"明细行协议(呈现归 B5/D1) | B1 | 已登记 · 缺项即 blocking |
|
||||
| D1-① | enemy_id→图像线索映射清单成文(形态/姿态↔行为状态;预告时序 = 下一拍预告、挖掘期全程可见;含强度档位与环长直觉编码说明;形状+色相双通道,art-bible 约束) | D1 | 已登记 · 缺项即 blocking |
|
||||
| D1-② | 线索映射全局恒定(映射键 = enemy_id——跨 run 恒定、禁止重掷) | D1 | 已登记 · 缺项即 blocking |
|
||||
| D1-③ | 单位顺位与存活可读(固定顺位规则的推测前提;顺位标记资产需求见呈现契约 #3) | D1 | 已登记 · 缺项即 blocking |
|
||||
| D1-④ | 敌方 side 池状态呈现口径(伏击层数经 B1 流水——B3 敌侧延伸) | D1 | 已登记 · 缺项即 blocking |
|
||||
|
||||
### registry / 接口漂移回写义务
|
||||
### 呈现契约(数据面义务——B2 无自有渲染面,呈现归 D1/B5)
|
||||
|
||||
| 编号 | 内容 | 对侧 | 状态 |
|
||||
|---|---|---|---|
|
||||
| R-1 | B3 单敌假设回验结果 = 不成立(定多敌)→ 触发 B3 预登记的接口漂移条款("定多敌即触发 target_ref 接口漂移补列"):registry status_effect.single_enemy_assumption 注记更新 + systems-index 门禁记录登记(B3 GDD 正文不改,以其"以 registry 为准"先例承载) | B3 / registry | 待回写(Phase 5b/5d) |
|
||||
| R-2 | 索引 B2 行描述为窄口径("敌人类型/词条、目标选择规则")→ Phase 5d 更新进度行时补战斗单位系统身份(CD 门禁扩容口径) | systems-index | 待回写(Phase 5d) |
|
||||
| R-3 | registry status_effect.ambush 量纲定稿注记回写(F2 定稿——B3 registry OQ2 关闭条件) | B3 / registry | 待回写(Phase 5b) |
|
||||
| R-4 | HeroTable 新增 → D2 Core Rules 表清单 + registry 接口漂移回写 | D2 / registry | 待回写 |
|
||||
|
||||
## 呈现与 UI 契约(数据面义务——B2 无自有渲染面,呈现归 D1/B5)
|
||||
|
||||
| # | 数据面义务 | 归属/呈现 |
|
||||
| # | 数据面义务 | 归属 |
|
||||
|---|---|---|
|
||||
| 1 | 敌种视觉身份(形状双通道):双敌种剪影必须一眼可辨(视觉锚 2 形状+颜色双通道、色弱可用性);敌种形态承载强度档位直觉编码("大个子多半有重击"式——Rule 8② 的呈现侧) | D1/B5,art-bible 约束 |
|
||||
| 2 | 行为环视觉状态(承重规格):每个敌种的每类行为(attack/charge/heavy)对应恒定且互异的视觉状态——bugbear 蓄力拍 = 可辨识的蓄力姿态;映射每 run 恒定、禁止重掷(Rule 8③ 护栏;线索清单成文义务 = D1×4①)。MVP 敌种视觉状态清单:goblin 1 态(攻击)、bugbear 3 态(攻击/蓄力/重击) | D1/B5 |
|
||||
| 3 | 资产需求下限(存活意图态之外三类):受击反馈(多敌同屏归因"谁挨了打"的 P2 前提——两敌种可共用通用受击反馈一组、须显式登记)、死亡表现("重击被掐灭""抢杀窗口"兑付可见性是 P1 兑付点——死亡瞬间须可辨识、不得直接消失)、顺位标记呈现元素(数据面 = B2 顺位查询;资产与呈现归 D1×4③、同等 blocking)——合称资产需求下限,D1/B5 照单生产、不得隐式缺席 | D1/B5 |
|
||||
| 4 | 单位呈现数据供给:hp/max_hp(血条数字)、顺位(固定顺位目标的可读前提)、存活态、当前拍视觉状态——数据源 = B2 单位状态查询(经 B1 编排流水) | D1 |
|
||||
| 5 | 敌方增益呈现:伏击池层数的 HUD 呈现口径(D1×4④——数据源 = B1 流水经 B3 投影);结算明细敌方行使用分量二元组("攻击 13 = 基线 4 + 伏击 9"——F2 供给建议)——P2 归因的敌侧兑付面 | D1/B5 |
|
||||
| 6 | 视觉锚适用与双舞台陷阱:血条/伤害数字暗色底高对比(锚 1);B2 无棋盘渲染面——敌单位出现在棋盘上还是独立战斗场景 = B5 前的"战斗表现美术测试"锁定(game-concept 双舞台资产管线陷阱),B2 只锁数据面与状态清单、不预设舞台;敌人层绘制优先级:锚 3 优先级表(数字>小人>旗>变异纹理>底色)不含敌单位——art-bible 创建前须裁决敌人层插入位置(姿态精灵与数字/旗/小人的遮挡关系),随"战斗表现美术测试"一并锁定,否则"哪些数字可信"的心智模型分裂 | D1/B5 / art-bible |
|
||||
| 7 | UI 三项义务(均为已登记义务的数据面):① 敌单位 HUD(血条/顺位/姿态——D1×4③)② 结算明细敌方行(分量二元组 + 伏击溢出行——B1 义务⑥协议、B5 呈现)③ 教学口径(读怪 + 蓄力贪雷——D5);MVP 无敌图鉴/敌人列表 UI(敌种名录 2 个、学习成本内),名录扩展时再议(垂直切片) | D1/B5/D5 |
|
||||
| 8 | 音频:MVP 无需求(攻击/死亡/蓄力音效归 D4 Alpha;临时 SFX 随垂直切片——AD 项先例);蓄力拍的音频前摇是"读招"的潜在第二通道——登记为垂直切片可选项(非 MVP 义务) | D4 |
|
||||
| 1 | 敌种视觉身份:双敌种剪影一眼可辨(形状+颜色双通道、色弱可用);形态承载强度档位直觉编码 | D1/B5,art-bible 约束 |
|
||||
| 2 | 行为环视觉状态:每敌种每类行为(attack/charge/heavy)对应恒定且互异的视觉状态,映射每 run 恒定禁止重掷;MVP 清单 = goblin 1 态(攻击)、bugbear 3 态(攻击/蓄力/重击) | D1/B5 |
|
||||
| 3 | 资产需求下限:受击反馈(多敌同屏"谁挨了打"归因前提——两敌种可共用通用一组、须显式登记)+ 死亡表现("重击被掐灭"兑付可见——死亡瞬间可辨识、不得直接消失)+ 顺位标记呈现元素;D1/B5 照单生产、不得隐式缺席 | D1/B5 |
|
||||
| 4 | 单位呈现数据供给:hp/max_hp、顺位、存活态、当前拍视觉状态——数据源 = B2 单位状态查询(经 B1 编排流水) | D1 |
|
||||
| 5 | 敌方增益呈现:伏击池层数 HUD 口径(数据源 = B1 流水经 B3 投影);结算明细敌方行使用分量二元组("攻击 13 = 基线 4 + 伏击 9") | D1/B5 |
|
||||
| 6 | 视觉锚适用:血条/伤害数字暗色底高对比(锚 1);敌单位出现在棋盘上还是独立战斗场景 = B5 前"战斗表现美术测试"锁定,B2 只锁数据面不预设舞台;敌人层绘制优先级插入位置(姿态精灵与数字/旗/小人遮挡关系)随美术测试一并裁决 | D1/B5 / art-bible |
|
||||
| 7 | UI 三项:敌单位 HUD、结算明细敌方行(分量二元组 + 伏击溢出行)、教学口径;MVP 无敌图鉴/敌人列表 UI(名录学习成本内,扩展时再议) | D1/B5/D5 |
|
||||
| 8 | 音频:MVP 无需求(攻击/死亡/蓄力音效归 D4 Alpha);蓄力拍音频前摇 = 读招潜在第二通道,登记为垂直切片可选项 | D4 |
|
||||
|
||||
## Tuning Knobs
|
||||
## P0 最小闭环
|
||||
|
||||
| Knob(表行值,D2 承载) | 默认 | 调过高 | 调过低 |
|
||||
|---|---|---|---|
|
||||
| EnemyTable.unit_count | 1(provisional) | 同步轮转下齐射爆发(全攻轮 side 伤 ×N,非平滑) | =1 时 AOE 分流/顺位顺延零消费者(Rule 7 空转) |
|
||||
| EnemyTable.hp | 18(provisional,出处待查) | 战斗拉长 → 伏击跨轮累计放大 | 秒杀级 → 惩罚无兑现窗口、伏击机制名存实亡 |
|
||||
| EnemyTable.atk | 4(provisional,出处待查) | 伏击稀释 → 踩雷无感(P3"风险与收益同源"断) | 支配边界 L*→1,惩罚接管战斗、敌种属性被 C3 曲线稀释 |
|
||||
| EnemyTable.heavy_multiplier | 2(provisional) | heavy+伏击同拍成秒杀拍(读怪规避价值升、容错归零) | =1 时 heavy ≡ attack、三拍环退化两拍(读怪素材坍缩) |
|
||||
| EnemyTable.advantage_per_round_cap | 4(本 GDD 定稿) | →8 时溢出协议死码回归、支配区扩大、条款 3 右臂膨胀 | ≤2 时 cap 常态绑定 → 边际惩罚归零("再多踩也不痛")、溢出行噪音、P3 归因梯度塌陷 |
|
||||
| HeroTable.max_hp | provisional(出处待查) | 容错升、治疗道具贬值 | 灾难轮秒杀感(与 cap 交互) |
|
||||
| HeroTable.atk | 6(原型锚 provisional 归 C3;域 [1,999]、0 加载拒绝) | 击杀预算贬值 → 道具供给/敌 hp 曲线联动重算(C3,禁止独立调参) | 战斗拖长、基础攻击存在感稀薄(道具侧支配) |
|
||||
1. 战斗开始:B1 调 spawn——按遭遇坐标读表、行值快照实例化 n 个敌单位 + 主角(hp 入参),指针指向环首。
|
||||
2. 玩家挖掘扫雷;踩雷事实经 B1 转化为伏击施加(每雷恰一次、cap 截流、溢出记账)。
|
||||
3. 结算开始:主角先手攻击顺位最前的存活敌人。
|
||||
4. 每个存活敌单位读当前拍:attack/heavy 兑付(基线 + 伏击附加),charge 空拍。
|
||||
5. 受击上报、hp 递减;hp = 0 移出顺位(死亡即不动手)。
|
||||
6. 存活敌单位各推进一格(先作用后推进,环尾回环首)。
|
||||
7. 敌全灭 → "敌人全灭"成立,回流 B1 作胜利判定素材;英雄归零 → 失败判定素材。
|
||||
8. battle_over:despawn_all 全部单位消亡,不跨战斗;下一场重新 spawn。
|
||||
|
||||
- 非 knob(结构冻结):行为枚举七类封闭(扩展 = GDD 修订非调参)、死亡即不动手、先作用后推进、伏击池共享读法、合成序后置加法、伏击量纲 = HP 点、固定顺位规则、每行集恰一敌种、零随机——修订走本 GDD 流程。
|
||||
- Knob 交互:cap × atk(支配边界 L* = ⌈atk×mult/3⌉ 联动)禁止独立调参——联动评估归 B1 条款 3 闭合对账;unit_count × cap(单结算上界双线性);heavy_multiplier × atk(heavy 拍支配)。pattern 内容(环长/charge 占比 → 兑付率 ρ)属内容行调参,所有权归 C3。
|
||||
- 零伤害死局组合护栏(OQ9):hero atk=0 已被 HeroTable schema 域下界杜绝([1,999]、0 加载拒绝)——"全场恒零伤害、战斗永不定局"结构不可能;残余退化 = 行 atk=0 且 cap=0 → 无威胁敌(战斗可胜但零风险——内容调参禁区注记,非死局);跨表量级护栏(atk×mult 上界 vs max_hp 域)owner = 实现期 ADR/D2;混编遭遇(多敌种同战斗)下 side 池 cap 取哪行值未定义——当前结构(每行集恰一敌种)恒单行值,混编引入时随 OQ7 改键一并裁决。
|
||||
- 调参所有权:MVP 全部默认值 provisional、曲线数值归 C3(A1 参考行先例);B1 条款 3 对账落定前,cap 与伏击量纲相关联调须重跑方向性预检并同步 registry(接口漂移义务)。
|
||||
## P1 / P2 后置
|
||||
|
||||
| 优先级 | 内容 | 后置原因 |
|
||||
|---|---|---|
|
||||
| P1 | 预留行为拍 guard/boost/hinder/summon 启用 | 枚举封闭——启用 = 本 GDD 修订非调参;垂直切片/Alpha |
|
||||
| P1 | 敌种名录扩容与新敌种投放节奏 | 投放节奏 = 关卡命脉(C3 所有权);垂直切片/Alpha |
|
||||
| P1 | target_ref 单体寻址(B3 扩展位) | 首个单体效果上线时补列,随批 B1 归集语义/D1 呈现裁决 |
|
||||
| P1 | 蓄力拍音频前摇(读招第二通道) | 垂直切片可选项,非 MVP 义务 |
|
||||
| P2 | 敌图鉴/敌人列表 UI | 名录学习成本内;名录扩展时再议(垂直切片) |
|
||||
| P2 | 精英/Boss 遭遇编码位(改键,如追加 encounter_class 维度) | 现键结构无编码位;C1 定稿强制核对,改键走 D2 Rule 4 接口漂移(OQ7) |
|
||||
|
||||
## 调参表
|
||||
|
||||
| 字段 | 域 | 默认 | owner | 说明 |
|
||||
|---|---|---|---|---|
|
||||
| EnemyTable.unit_count | int [1, 3] | 1(provisional) | C3 | 遭遇区间下界;B1 encounter 骰定本战实际数量 |
|
||||
| EnemyTable.unit_count_max | int [unit_count, 3],可省略 | 缺省 = 定值 | C3 | 遭遇区间上界 |
|
||||
| EnemyTable.hp | int [1, 999] | provisional(出处待查) | C3 | 难度修饰前基线 |
|
||||
| EnemyTable.atk | int [0, 999] | provisional(出处待查) | C3 | 0 合法 = 纯伏击伤敌种 |
|
||||
| EnemyTable.heavy_multiplier | int [1, 16] | 2(provisional) | C3 | 无 heavy 拍不消费、非校验项 |
|
||||
| EnemyTable.advantage_per_round_cap | int [0, 16] | 4(本 GDD 定稿) | B2 | 条款 3 供给表值;0 = 免疫伏击合法极端 |
|
||||
| HeroTable.max_hp | int [1, 999] | provisional(出处待查) | C3 | |
|
||||
| HeroTable.atk | int [1, 999] | 6(原型锚 provisional) | C3 | 0 = 加载期校验拒绝(基础攻击恒在) |
|
||||
|
||||
- 非 knob(结构冻结):行为枚举七类封闭、死亡即不动手、先作用后推进、伏击池共享读法、合成序后置加法、伏击量纲 = HP 点、固定顺位规则、每行集恰一敌种、零随机——修订走本 GDD 流程。
|
||||
- Knob 交互:cap × atk(支配边界 L* 联动)、unit_count × cap(单结算上界双线性)、heavy_multiplier × atk(heavy 拍支配)——禁止独立调参,联动评估归 B1 条款 3 闭合对账;pattern 内容(环长/charge 占比 → 兑付率 ρ)属内容行调参,所有权归 C3。
|
||||
- 零伤害死局护栏:hero atk=0 已被 HeroTable 域下界结构杜绝;残余退化 = 行 atk=0 且 cap=0 → 无威胁敌(内容调参禁区注记,非死局——OQ9);跨表量级护栏(atk×mult 上界 vs max_hp 域)owner = 实现期 ADR/D2;混编遭遇下 side 池 cap 取哪行值未定义——现结构恒单行值,混编引入时随 OQ7 改键一并裁决。
|
||||
- 调参所有权:MVP 全部默认值 provisional、曲线数值归 C3;B1 条款 3 对账落定前,cap 与伏击量纲相关联调须重跑方向性预检并同步 registry(接口漂移义务)。
|
||||
|
||||
## 验收标准
|
||||
|
||||
### 测试口径
|
||||
|
||||
| 口径 | 要点 |
|
||||
|---|---|
|
||||
| 测试载体 | B2 是单位层纯逻辑类——非 autoload、无场景依附、无自有渲染面。冒烟载体 = `godot --headless --script`(承 D2 冒烟框架;脚本 extends SceneTree 以获得 quit(code)、ConfigDB autoload 由脚本显式实例化);单位容器与两表 schema 经 class_name 直引实例化(每用例全新实例、无跨用例状态——AC-17 扫描对该实例化路径豁免);每用例先 `reset_diagnostics()`(D2 冒烟协议,全局声明) |
|
||||
| 被测面与调用方 | B1 未实现(设计顺序第 9 位)——冒烟直接驱动 B2 最小 API 面(冒烟脚本扮演编排方,按"实例化 → 查询 → 受击 → 推进 → 消亡"结算编排序列驱动);B1 就绪后改走真实调用方(结算编排)、断言口径不变 |
|
||||
| 时序口径 | B2 无结算 API——"一次结算"在冒烟中 = 调用方对每个存活敌单位恰一次 advance(含兑付读值与受击注入)的构造窗口(主角无行为环、不在推进域内——Rule 4);"每结算恰一次推进"是 B1 义务①——冒烟以构造序保证前提、不断言编排正确性;"轮到该单位之前被杀" = 同一构造窗口内 advance(u) 之前的 apply_damage(u, …);多步 GIVEN 均给出构造序列 |
|
||||
| 只读观测量 | 敌单位投影七字段 enemy_id · hp · max_hp · atk · heavy_multiplier · pattern(快照)· advantage_per_round_cap(快照)+ beat(当前拍)+ 存活态;hero 投影 hp · max_hp · atk |
|
||||
| 相位与投影 | Alive/Dead 由 query_alive 成员差分推断(Dead 句柄经 query_beat 冻结值可读);Despawned = 逻辑失效态(状态位实现——容器为 RefCounted 纯逻辑类、对象不提前释放;失效句柄上查询返回空 + 诊断、作用接口拒绝;瞬态纪律同 A3 RoundEnd);Unspawned 无观测量;投影一律为快照(pattern 等引用字段返回拷贝——原地改写返回值不影响容器,AC-11 腿 3);容器公开可写属性为零(hp 等仅经 apply_damage 变更——AC-17 扫描域);实例不变式(hp ∈ [0, max_hp]、敌单位数 = unit_count、指针 ∈ [0, 环长))为 debug 断言自守——违规路径不可由封闭 API 构造(负空间)、不经冒烟断言(进程致命保留给 D2 数据通道);行为级证据 = AC-1(数)、AC-3(指针)、AC-4/AC-6(hp floor) |
|
||||
| 期望值纪律 | hp(18)/atk(4)/heavy_multiplier(2)/unit_count/max_hp 均为 provisional knob(Tuning Knobs 节)——各 AC 的 THEN 具体数值按当前 ConfigDB 表值推导、不写死;记号:h_g/a_g(goblin 行)、h_e/a_e/m_e(bugbear 行)、u_c、M_h、c_r(所在行 cap)、p_g/p_e(pattern 表读值)、m_amb = StatusEffectTable.ambush.magnitude 表读值(仅作 AC-7 注入值来源);pattern 环内容属内容行调参(C3 所有权)——轨迹断言一律按 p 表读值推导;L/mines_r/n 等入参为构造选择(显式登记)、期望值由表读值推导 |
|
||||
| 结构定值断言 | 合法集:敌种 id 集 {goblin, bugbear, ogre_chief}(Rule 3 MVP 收窄——C3 修订批扩容三敌种)、pattern 元素域 {attack, charge, heavy}(枚举封闭)、每行集恰一敌种、HeroTable 单行、HeroTable.atk 域 [1,999](0 加载拒绝;MVP 值 6 provisional 不作定值断言) |
|
||||
| 致命类收窄与 manifest | B2 冒烟设恰两根致命夹具(均为 B2 表特有校验类别):runner manifest 退出码行 rowset_dup→≠0 · pattern_reserved→≠0(独立 headless 进程、游戏通道,D2 AC-2b 协议同型);其余致命类别(D2 R1 悬空敌种/行集缺行〔EC13〕、遭遇坐标越界〔EC14〕、通用枚举域/域校验)由 D2 AC-2 同类别 loader 级夹具承载(表无关,豁免声明收窄保留——B2 冒烟仅以合法坐标驱动 spawn);HeroTable 单行类别条件性(可选根);schema 侧以程序构造断言域类别(AC-12/13) |
|
||||
|
||||
### 冒烟 API 面(provisional,封闭枚举——实现期 ADR 定名)
|
||||
|
||||
| API | 签名 | 语义与返回口径 |
|
||||
|---|---|---|
|
||||
| spawn | `spawn(level_index, node_depth, hero_hp, n) -> bool`(n = 本战实际数量 override——B1 encounter 骰;定值行/省略 n = unit_count 表值) | 解析遭遇行 → 行值快照 → 实例化 n 个敌单位(行主序生成序)+ 主角(hp 入参,MVP 冒烟以 max_hp 入参——Rule 9);Alive 相位重复 spawn → false + 诊断(相位守卫) |
|
||||
| query_alive | `query_alive(side) -> Array` | side ∈ {hero, enemy};生成序稳定枚举;只读 |
|
||||
| query_beat | `query_beat(u) -> String` | 当前拍 ∈ pattern 元素;Dead 句柄保留只读可查(冻结不变式的观测量);hero 句柄 → 空 + 诊断(主角无行为环——Rule 4);只读 |
|
||||
| query_attack | `query_attack(u, L, m_amb) -> {baseline, attach, total}` | F2 分量供给面;L/m_amb 由调用方供值(B1 兑付读值的冒烟等价——B2 对 B3 零运行时依赖的边界由此保持);L 为判别探针入参、B2 不校验其游戏态域(游戏态域由 F3 预截流承载);Dead 句柄 → {0, 0, 0} + 诊断;只读 |
|
||||
| apply_damage | `apply_damage(u, n) -> bool` | 受击上报;hp 递减、floor 0 → Dead;n ≤ 0 → false + 诊断(无伤害作用非法);Dead 句柄 → false + 诊断(MVP 无复活) |
|
||||
| advance | `advance(u) -> bool` | 存活才推进("先作用后推进"的推进半);false 分两级:存活校验失败 = 轮到前被杀的预期冻结、无诊断(EC1 常态路径——抢杀窗口是设计卖点,诊断刷屏会淹没信号);相位/句柄失效 = false + 诊断;hero 句柄 → false + 诊断 |
|
||||
| default_target | `default_target() -> u\|null` | 固定顺位供给面;只读 |
|
||||
| ambush_grant_plan | `ambush_grant_plan(mines_r, cap) -> {granted, overflow}` | F3 机制算术纯函数——B1 预截流编排的消费面;只读 |
|
||||
| despawn_all | `despawn_all() -> bool` | battle_over 消亡;重复调用 → false + 诊断(重复调用守卫) |
|
||||
|
||||
- 返回口径:全部布尔/计数返回 = 受理/拒绝(A3 全 API 布尔口径同款)——"拒绝"直接断言返回值,附 debug 诊断、非进程致命(进程致命保留给 D2 数据通道);五个 query 面(query_alive / query_beat / query_attack / default_target / ambush_grant_plan)只读、无副作用。
|
||||
- 封闭枚举即负空间验收形态:无 summon/增援 API(EC5 负空间——战斗内不增员)、无复活 API(Dead 不可逆)、无重置/换图 API(EC11 跨图延续的结构前提)、无伏击池写 API(B2 无池——L 恒由调用方注入,EC17 读值语义);新增上述任何入口 = 接口漂移(GDD 修订非调参)。
|
||||
- ADR 前置裁决项:query_attack / ambush_grant_plan 两 face 若实现期裁决归 B1(F2"供给建议"与 F3"预截流归 B1"边界注记存在张力),对应 AC 腿迁移至 B1 冒烟、断言口径不变(OQ①)。
|
||||
|
||||
### 夹具策略
|
||||
|
||||
| 根 | 构成 | 服务 |
|
||||
|---|---|---|
|
||||
| 默认根 | 干净检出:EnemyTable 双敌种行 + HeroTable 单行 | 全部分支行为 AC |
|
||||
| enemy_multi_unit | D2 全表清单拷贝 + EnemyTable 仅将 (L_a, D_a) 行(bugbear——三拍环)unit_count 置 3(其余字段域内合法;登记值 u_c_f = 3) | 多敌 AC(AC-5 / AC-7 腿4 / AC-9 / AC-10 腿2) |
|
||||
| enemy_reloaded | D2 全表清单拷贝 + EnemyTable 数值漂移(登记:hp/atk/advantage_per_round_cap 各 +1、pattern 不动——快照差分判定用) | AC-11 |
|
||||
| enemy_rowset_dup_species(致命) | D2 全表清单拷贝 + EnemyTable 默认行 + 追加一行与 (L_g, D_g) 行同 (level_index, node_depth) 而 enemy_id 相异("goblin_twin",其余字段域内合法)→ 每行集恰一敌种违规 | B2 表结构致命校验的进程级落点——manifest rowset_dup→≠0(B3 status_effect_dup_key 同型) |
|
||||
| enemy_pattern_reserved(致命) | D2 全表清单拷贝 + EnemyTable (L_g, D_g) 行 pattern 追加预留值 "guard"(其余合法)→ pattern MVP 校验域拒绝预留值 | Rule 4 fail-fast 的 loader 集成缝落点——manifest pattern_reserved→≠0(A1 solver_rules 冻结先例) |
|
||||
| hero_extra_row(可选根) | HeroTable 置两行(域内合法——单行全局违规) | 单行校验落点若实现期 ADR/D2 裁定在 loader 缝则启用(manifest 行 hero_rows>1→≠0),否则程序构造承载(AC-13)——可选、两处恰一承载 |
|
||||
|
||||
- 行集登记常数协议(A1 黄金向量 / A2 板登记同源):(L_g, D_g) = goblin 行坐标、(L_a, D_a) = bugbear 行坐标,逐坐标手工推导记录入版本库;失效处置 = 先复核登记、登记无误即实现缺陷。
|
||||
- 多敌根选 bugbear 行(三拍环)保证判别力:goblin 行环长 1 恒 attack → 混合拍 GIVEN 不可构造、同步断言零判别力、双单位读值不可构造;改 bugbear 行后混合拍经对单单位重复 advance 构造(冒烟构造序可越出"每结算恰一次"契约——B2 无守卫、构造自由度成立)。
|
||||
- 显式声明:夹具值非 MVP 内容调参结论(Tuning Knobs 默认 unit_count = 1——多敌语义在默认根上零消费者,多敌根是 Rule 2 的测试承载、仅供冒烟)。
|
||||
- 换根加载经 `load_tables(root, collect_only=true)` 直调(非 D2 `reload()` 路径:不过 set_reload_gate、不发 config_reloaded——门语义归 D2 AC-16/B1,B3 AC-15 同款);程序构造(AC-12/AC-13):两 schema 类 class_name 直引实例、不经 load()/preload();行为夹具根经 `--data-root=` 注入(仅 debug、不入 data/tables/——D2 夹具纪律);各 AC 声明其表根、用例间无顺序依赖。
|
||||
|
||||
### 覆盖声明(out-of-scope——deferral 生效条件 = B1×6 + D1×4 义务清单,均缺项即 blocking)
|
||||
|
||||
| deferral 项 | 生效条件 / 承载 |
|
||||
|---|---|
|
||||
| B1×① 行为环推进每结算恰一次与结算内先后次序(double-advance 无守卫——冒烟单调用方次序即构造序,B3 义务⑥同款) | B1 义务① |
|
||||
| B1×② 雷→伏击事实转化恰一次 + 编排期授予/预截流调用次序(F3 编排半、EC17"先转化后兑付"次序半句) | B1 义务② |
|
||||
| B1×③ 伤害 clamp/负值/溢杀语义与死亡判定时机(冒烟只断言 hp 递减、floor 0 与 Dead 翻转——"这一下是否兑现"归 B1) | B1 义务③ |
|
||||
| B1×④ F4 条款 3 闭合对账(cap 表值 + 量纲 + A1 actuals p10——冒烟只供分量面与 k 可算性) | B1 义务④ |
|
||||
| B1×⑤ 默认目标消费与单体/AOE 分流(冒烟只断言 default_target 供给面) | B1 义务⑤ |
|
||||
| B1×⑥ 溢出"溢出未生效"明细行协议(呈现归 B5/D1——冒烟只断言 overflow 计数会计) | B1 义务⑥ |
|
||||
| D1×①② 图像线索清单成文与映射每 run 恒定(Rule 8 视觉面——视觉映射不可 GIVEN-WHEN-THEN;验收形态 = 映射键契约〔enemy_id〕+ B2 侧行为级承载:行为环零随机可学〔AC-3/AC-15〕) | D1 义务①② |
|
||||
| D1×③ 顺位与存活可读呈现 | D1 义务③ |
|
||||
| D1×④ 敌方 side 池呈现口径(B3 敌侧延伸) | D1 义务④ |
|
||||
| EC8 池蒸发腿(dur=1 轮末清池——B3 AC-8/AC-9 既有覆盖,跨引不重复;B2 侧零兑付半 = AC-7 腿3 / AC-9 腿1) | B3 AC 既有 |
|
||||
| EC13/EC14 端到端致命(D2 R1/EC14 既有通道) | D2 AC-2(manifest 豁免) |
|
||||
| Rule 10 后半难度修饰施加点(B2 以实例化后数值运作——修饰算式无表值可断) | C3 provisional |
|
||||
| 跨战斗 HP 持久性 | C1/C2 |
|
||||
| 曲线数值与遭遇分布定值(AC-14 显式不作分布定值断言) | C3 |
|
||||
| atk 激活裁决——已退役:基础攻击恒存在,域断言由 AC-13/AC-14 承载 | 无遗留义务 |
|
||||
| Rule 8"不直接显示数值"负空间(无意图数值 API——冒烟 API 封闭枚举承载) | API 封闭 |
|
||||
| qa-lead 缺口预检 7 项处置:预检 1/2 入 OQ①②;预检 3/4 随批修正 F4 满配语境与 EC17 切分;预检 5–7 承载于 ADR 裁决项 / HeroTable 可选根 / 坐标登记协议 | 已处置 |
|
||||
口径摘要:B2 是单位层纯逻辑类——冒烟载体 = `godot --headless --script`;B1 未实现期间冒烟脚本扮演编排方,按"实例化 → 查询 → 受击 → 推进 → 消亡"序列驱动(B1 就绪后改走真实调用方、断言口径不变);每用例全新实例;期望值按表读值推导不写死;返回 = 受理/拒绝布尔 + debug 诊断(进程致命归 D2 数据通道)。冒烟 API 面、测试口径、夹具策略、覆盖声明与覆盖矩阵见 analysis 附录 B。
|
||||
|
||||
### AC 清单(Given-When-Then,编号不变)
|
||||
|
||||
| AC | Given | When | Then | 覆盖 |
|
||||
|---|---|---|---|---|
|
||||
| AC-1 | ConfigDB 默认根加载完成、全新 B2 容器(Unspawned) | `spawn(L_g, D_g, M_h)`(hero_hp = max_hp 表读值——MVP 冒烟口径);Alive 相位再 `spawn(同坐标, M_h)` | 首次 true;`query_alive(enemy)` 恰 u_c 个单位(u_c = unit_count 表读值)、全部同 enemy_id、每单位投影 hp = h_g、max_hp = h_g、atk = a_g、pattern = p_g、cap = c_r(行值快照五字段逐一 = 表读值——Rule 10 授予时快照基线);`query_alive(hero)` 恰 1、hp = 入参值;敌投影序 = 行主序生成序(默认根 u_c=1 平凡——多敌序断言由 AC-5 夹具根承载);再 spawn → false + 诊断、容器不变(相位守卫——B3 EC11 输入×相位矩阵同款) | Rule 2/9/10 |
|
||||
| AC-2 | 默认根、全新实例 | `spawn(L_g, D_g, hero_hp)` 分别取 hero_hp ∈ {M_h+1, 0, −1}(越界三腿:> max_hp / ≤ 0——EC16 口径);随后 `spawn(L_g, D_g, 1)`(域内下界合法值) | 越界三腿均 false + 诊断且 `query_alive` 双侧恒空(拒绝原子性:无半实例化——失败腿不留任何单位);域内下界 → true——越界拒绝精确以域为界、不扩大拒绝域(编排方供给异常显式暴露、不静默吸收) | EC16 / Rule 9 |
|
||||
| AC-3 | `spawn` 完成(bugbear 坐标 (L_a, D_a)) | 腿 1 读初拍;腿 2 连续 advance;腿 3(goblin 坐标)连续 3 次(构造选择)advance;腿 4 任意长 advance/受击序列 | 腿 1(环首初始化):`query_beat(u)` = p_e[0];腿 2(推进与回绕):均 true 且 beat 轨迹 = p_e[k mod \|p_e\|] 逐拍断言、\|p_e\| 次后回 p_e[0](环尾回环首——指针恒 ∈ [0, 环长) 的行为级证据);腿 3(环长 1 恒等):beat 恒 = p_g[0](mod 1 恒等——每拍 attack、无自然空窗、兑付率 ρ=1 的行为级形式;前提 \|p_g\| = 1 按表读值核对——pattern 内容属 C3 内容行调参,前提不满足时本腿显式 SKIP、不假失败);腿 4(跨轮跨图延续 + 无重置入口,EC11):hp 与 beat 投影 = 驱动序列的确定函数——除 despawn_all 外无任何 API 入口使单位状态重置(结构性裁决;"换图"事件对 B2 不可观测(零接口),端到端"真实换图下单位状态延续"归 B1 集成——编排契约仅 battle_over 调 despawn、非新增义务,B3 AC-10 裁决同款) | Rule 4 / EC10 / EC11 / F1 |
|
||||
| AC-4 | 默认根;前提按 p_e 表读值核对:\|p_e\| ≥ 3 且 p_e[1] = charge 且 p_e[2] = heavy(默认表值满足;pattern 内容属内容行调参,前提不满足时本 AC 显式 SKIP、不假失败) | 腿 1 构造推进至 charge 拍后 `apply_damage(u, h_e + 5)` 再 `advance(u)`;腿 2 新实例构造至 heavy 拍 `advance(u)` 后 `apply_damage(u, h_e)`;腿 3 对 Dead 句柄 `apply_damage` | 腿 1(heavy 拍前被杀):apply_damage → true、hp 投影 = 0(溢杀 floor:hp ∈ [0, max_hp] 不变式自守——clamp/溢杀语义归 B1×③ 的声明不变);advance → false(预期冻结级——无诊断,API 面两级 false 口径)、`query_beat(u)` 仍 = p_e[1]——冻结于 heavy 前一拍、重击永不兑现("死亡即不动手"+"抢在重击前击杀"读怪收益的行为级证据);腿 2(行动后才死):advance → true、随后 Dead、`query_beat(u)` = p_e[0](已行动已推进——heavy 拍已消费、指针回绕);腿 3(不可逆):false + 诊断(MVP 无复活——States 不可逆) | EC1 / EC9 / F1 |
|
||||
| AC-5 | 夹具根 enemy_multi_unit(u_c_f = 3 登记值,bugbear 行)`spawn(L_a, D_a, M_h)` 完成 | 腿 1 读三单位初拍;腿 2 定义结算步 = 按生成序对各存活敌单位 advance 恰一次(B1 义务①的冒烟构造等价——hero 无环不在推进域),在某步 advance(u2) 之前 `apply_damage(u2, h_e)` 杀之(h_e = bugbear 行 hp 表读值);腿 3 全程观测规模 | 腿 1(同拍基线):spawn 后三单位 `query_beat` 恒等(同种同指环首、同属性);腿 2(死亡时序不乱拍):u2 本步不打(advance false、指针冻结);步末 `query_beat(u1)` = `query_beat(u3)`、连续多步后幸存者 beat 恒相同(同步性质定理——任何死亡时序都不会让幸存者乱拍);腿 3(单位数单调递减):`query_alive(enemy)` 规模 ∈ {3, 2, 1} 严格递减、无增员(EC5 负空间的行为面——无 summon API) | Rule 2 / EC2 / F1 |
|
||||
| AC-6 | 默认根 + AC-5 根 | 腿 1(默认根)u_c 个单位逐一 `apply_damage` 致死;腿 2(AC-5 根)`apply_damage(hero, M_h)` 后、`query_alive(enemy)` 仍含存活单位时 `despawn_all()`;随后重复 `despawn_all()`;随后重新 `spawn` | 腿 1(全灭,EC3):`query_alive(enemy)` = 空 Array(存活敌集 = ∅——"敌人全灭"成立,胜负判定归 B1);敌侧伏击池"无兑付者轮末清空"半 = B3 dur=1 decay(跨引 B3 AC,out-of-scope);腿 2(主角死亡与消亡,EC4):hero hp = 0(失败判定素材——判定时机归 B1);despawn_all → true、`query_alive` 双侧空(全部单位 Despawned——不存在"主角死后敌继续攻击"的中间态);Despawned 句柄上 query_beat 返回空 + 诊断、advance/apply_damage → false(域闭);重复 despawn_all → false + 诊断(重复调用守卫——B3 EC11 同款);重新 spawn → true 且为新战斗(Despawned 后唯一出口——下一场重启、不跨战斗) | Rule 1 / EC3 / EC4 |
|
||||
| AC-7 | 默认根 `spawn(L_a, D_a, M_h)` 完成、m_amb = StatusEffectTable.ambush.magnitude 表读值 | 腿 1 attack 拍 `query_attack(u, L=2, m_amb)`;腿 2 `query_attack(u, L=4, m_amb)` 合成序判别(判别非平凡前提 m_e ≥ 2——默认表值满足;m_e = 1〔合法 knob、heavy ≡ attack〕时负断言两边恒等、本腿显式 SKIP 标记输出——B3 AC-14 腿 3 先例);腿 3 beat 推进至 charge 拍后 `query_attack(u, L=c_r, m_amb)`(游戏态上界注入);腿 4(enemy_multi_unit 根承载——默认根 u_c=1 不可构造)同 L 连续两次 query + 两存活单位各自 query | 腿 1(attack 拍):{baseline = a_e, attach = 2×m_amb, total = a_e + 2×m_amb}(分量二元组——"攻击 13 = 基线 4 + 伏击 9"P2 归因行的数据源);腿 2(合成序判别):baseline = a_e×m_e、attach = 4×m_amb、total = a_e×m_e + 4×m_amb,且判别负断言 total ≠ (a_e + 4×m_amb)×m_e(伏击附加后置加法不进倍乘——默认表值 (4, 2, 3) 下 20 ≠ 32、非平凡性由表读值不等式保证;实现若把伏击分量塞进倍乘即在此暴露;L=4 为游戏态可达值〔cap=4 上界〕——探针不取域外值);腿 3(charge 零兑付——不读池,EC8 的 B2 半):{0, 0, 0}——L>0 下恒零 = "不读伏击池"的可判定形式(蓄力轮授予的伏击层当轮蒸发 = 读怪奖励;池蒸发本身归 B3 decay、out-of-scope 跨引);腿 4(共享不消耗 + 即时读值,EC17):同 L 连续两次 query 结果逐字相同、两存活单位同 L 各自 query 读值一致(共享、非均分、非先到先得);每次 query 前后 query_alive/query_beat 投影零变化(纯函数性——B2 无池写面、无内部缓存、无时间维度;"先转化后兑付"次序与每雷恰一次归 B1×①②、out-of-scope) | F2 / Rule 6 / EC8 / EC17 |
|
||||
| AC-8 | 默认根、c_r = cap 表读值(全腿纯函数断言——编排期预截流调用与每雷恰一次授予归 B1×②,out-of-scope) | 腿 1 `ambush_grant_plan(mines_r = c_r + 2, c_r)`;腿 2 参数化对 mines_r ∈ {0, 1, c_r, c_r+1};腿 3 mines_r ∈ [5, 8];腿 4 `ambush_grant_plan(m, 0)` | 腿 1(守恒主式):{granted = c_r, overflow = 2}、恒等 granted + overflow = mines_r(零静默蒸发——P2 会计面;"溢出未生效"明细行呈现归 B1×⑥/B5);腿 2(预截流位):各腿 granted = min(mines_r, c_r)、overflow = mines_r − granted 恒成立(cap 判定在授予前);腿 3(灾难轮,EC7):默认 c_r=4 → granted = 4、overflow = mines_r − 4(cap 反灾难护栏绑定域);腿 4(cap=0 免疫,EC6):granted = 0、overflow = m(全溢出——免疫行全部可见、全部无效的会计半;cap=0 为域内合法行值的校验半归 AC-12) | F3 / EC6 / EC7 |
|
||||
| AC-9 | 夹具根 enemy_multi_unit(u_c_f = 3) | 腿 1 以 advance 序构造混合拍(k 个单位处 attack/heavy 拍、其余 charge)并读暴露;腿 2 记号恒等式断言(AP_r = ActionEconomyTable.ap_per_round 表读值) | 腿 1(k 确定性可算):每结算敌方伏击暴露 = k × L × m_amb,k 经只读观测量导出(query_alive(enemy) ∩ query_beat ∈ {attack, heavy} 计数——确定性可算、无隐藏状态,B2 对 B1 条款 3 的供给面);全体 charge 轮 → k = 0、暴露 = 0(charge 轮零兑付——EC8 汇总);腿 2(结构上界记号):单结算 side 级结构上界 = u_c_f × min(AP_r, c_r) × m_amb(全参表读值/夹具登记值的记号恒等式断言——满配语境 3×min(8,4)×3=36 的记号化、默认行值 unit_count=1 下 = 12、非定值断言;min 项 = cap > AP 界时 cap 腿松弛);跨结算累计 = 轨迹量非表值——B2 投影字段无任何累计观测量(负空间,AC-1 观测量封闭枚举承载);不等式闭合对账(输入 = A1 actuals p10)归 B1×④、out-of-scope | F4 / EC8 |
|
||||
| AC-10 | 腿 1 默认根(u_c=1)spawn 完成;腿 2 enemy_multi_unit 根;腿 3 承接腿 2 | 腿 1 `default_target()`;腿 2 `default_target()` 对照 `query_alive(enemy)[0]`;腿 3 杀 [0] 后再查、连续杀至空 | 腿 1(u_c=1 合法退化):default_target() = 该唯一存活单位(顺延与 AOE 分流无消费者、AOE ≡ 单体——合法退化非错误,Rule 7 空转);腿 2(行主序最前):default_target() = query_alive(enemy)[0](生成序最前——顺位快照 = 生成序);腿 3(死亡顺延):default_target() = 原 [1](顺延)、连续杀至空 → null(EC3 全灭腿在目标面的汇合);B1 消费侧单体/AOE 分流归 B1×⑤、顺位可读呈现归 D1×③、均 out-of-scope | Rule 7 / EC3 / EC15 |
|
||||
| AC-11 | 默认根 `spawn(L_a, D_a, M_h)` 完成(快照字段 = 默认表值;坐标登记协议锚点)、存活与 Dead 单位并存 | 经测试通道换根加载 enemy_reloaded(load_tables(root, collect_only=true) 直调——非 D2 reload() 路径,门语义归 D2 AC-16/B1);随后 `despawn_all()` 后以同坐标重新 spawn;腿 3 对返回的 pattern 投影数组原地改写 | 存活与 Dead 单位的快照五字段 + beat + hp 逐字不变、hero 投影不变(授予时快照——实例不受任何表重载影响,B3 EC9 / A4 EC8 同款);新单位快照 = 漂移后表值(换根只影响后续实例化——"快照非活引用"的判别性后半);腿 3(拷贝判别):容器内单位 pattern 投影不变(快照拷贝非活引用——别名引用在换根加载下同样"逐字不变",本腿补足判别力) | Rule 10 / EC12 |
|
||||
| AC-12 | EnemyTable schema 类(行级 + 表级校验)class_name 直引实例(不经 load()/preload()) | validate() 作用于越域代表值:unit_count ∈ {0, 4}、hp ∈ {0, 1000}、atk ∈ {−1, 1000}、heavy_multiplier ∈ {0, 17}、pattern 环长 ∈ {0, 9}、pattern 元素 = "guard"(预留值拒绝——MVP 校验域 fail-fast)、pattern 元素 = "nonsense"(未知枚举)、cap ∈ {−1, 17};表级构造同 (level_index, node_depth) 两行相异 enemy_id;域内代表值:unit_count ∈ {1, 3}、hp = 1、atk = 0(纯伏击伤敌种合法——F2 Variables)、atk = 999、heavy_multiplier ∈ {1, 16}、pattern ∈ {["attack"], ["attack","charge","heavy"]}(环长两界)、cap = 0(免疫极端合法——EC6)与 16 | 越域各含对应域错误类别(零静默);表级含每行集恰一敌种错误类别;域内零诊断(防过度约束锁死内容——atk=0 与 cap=0 两个合法极端是本断言承重点) | Rule 3/4 / EC6 |
|
||||
| AC-13 | HeroTable schema 类直引实例 | validate() 作用于 max_hp ∈ {0, 1000}、atk ∈ {−1, 0, 1000};域内代表值 max_hp ∈ {1, 999}、atk ∈ {1, 999};表级构造两行(域内合法) | 越域各含对应域错误类别(atk=0 拒绝 = 基础攻击恒存在的 schema 承重腿——零基线死锁杜绝);域内零诊断;表级两行 → 单行全局约束错误类别(单行全局——Rule 4 豁免同 ActionEconomyTable 先例;若实现期 ADR/D2 裁决单行校验落 loader 缝,则本腿迁移至可选根 hero_extra_row 的 manifest 腿——两处恰一承载) | Rule 9 |
|
||||
| AC-14 | ConfigDB 默认根加载完成 | 读 EnemyTable;读 HeroTable | EnemyTable 恰含三敌种行、enemy_id 集合 = {goblin, bugbear, ogre_chief}(定值——Rule 3 MVP 收窄,C3 修订批扩容);每 (level_index, node_depth) 行集恰一敌种(默认根数据通过其自身表级校验的行为断言);全部行 pattern 元素 ⊆ {attack, charge, heavy}(MVP 枚举封闭——结构定值);goblin 行 pattern 不含 "heavy"(heavy_multiplier 无 heavy 拍不消费的表数据前提——非校验项、B3 max_stack 先例);unit_count_max 仅在区间行出现(缺省 = 定值——C3 遭遇随机化字段语义);display_name 多值非空(精确值不作定值断言、本地化归 D6);遭遇分布(何 (L,D) 归何敌种)为 C3 域 knob——不作定值断言(provisional 示例非承诺);HeroTable 恰 1 行、atk ∈ [1,999] 域断言(MVP 值 6 = 原型锚 provisional 不作定值断言;0 = 加载拒绝)、max_hp ∈ [1, 999] 域断言(provisional knob 不写死) | Rule 3/9 |
|
||||
| AC-15 | 全新 B2 实例 ×2(同 ConfigDB 默认根;每遍全新实例、无跨实例状态) | 同一定长序列驱动两遍(spawn → apply_damage(含一次"轮到前击杀"腿——冻结路径入回放)→ 交替 advance 全体存活敌单位 → query 投影(含生成序与逐单位 beat)→ apply_damage → advance → default_target → query 投影) | 两遍的 query_alive 投影序列(含生成序)、逐单位 beat 轨迹、default_target 返回序列逐项相同——零随机的行为级硬证据(rng_service 流封闭;D2 AC-15 的 B2 层前身,与 AC-3 腿 4"状态 = 驱动序列的确定函数"互证) | Rule 4/11 / F1 |
|
||||
| AC-16 | ConfigDB 默认根加载完成 | 脚本解析 design/registry/entities.yaml 的 enemy 与 hero 条目(逐字段 YAML 键——机器对账前提,action_economy/status_effect 同构) | ① enemy.fields **十键**(enemy_id / display_name / unit_count / **unit_count_max / armor_type** / hp / atk / heavy_multiplier / pattern / advantage_per_round_cap——C3 修订批 +2)与 ConfigDB EnemyTable schema 字段名逐一相等、各键类型/域/枚举描述与 Schema 定稿相等(缺任一键即失败);② hero.fields 两键(max_hp / atk)同上;③ enemy 条目 MVP 内容注记物种 id 集合 = {goblin, bugbear, ogre_chief}、与表行 id 集合相等(非 knob 结构定值——C3 修订批扩容);④ status_effect.ambush 条目含 B2 量纲定稿注记(Rule 6 兑现 B3 registry OQ2 的接口漂移回写落点——注记存在性 + 键断言;量纲活值 m_amb 不作定值对账——knob 纪律,A4 AC-8 同款豁免);⑤ hero 条目"单行全局 Rule 4 豁免"注记与 enemy 条目"每行集恰一敌种校验"注记存在性断言;生效前提 = 本文定稿 Phase 5b/5d 回填完成(不写"若存在"软口径——条件化使一致性检查落空,B3 AC-18 同款) | Rule 6 / registry |
|
||||
| AC-17 | B2 文件集(单位容器 / 两表 schema / 冒烟脚本 / 夹具规格)纳入 D2 AC-9 模式项目级扫描域 | 静态扫描 | randomize() / RandomNumberGenerator / ConfigDB 外 data 表加载 / extends Control / .tscn preload——零命中(schema 与容器的 class_name 直引实例化豁免——AC-12/13 前提,A4 AC-7 同款);另扫 B2 特有两项:事件订阅 API 零命中(Rule 11 零主动事件订阅——A2 事件面 referenced_by 不含 B2 的代码侧对应)与 B3 API 符号零引用(相邻零运行时依赖——import/call 面为零);D2 AC-14 人工三要素字面量扫描(引用不另设硬 THEN——F2 算式 a×m + 3L 类字面量随实现形态误报率高,D2 已定性 warning 级 + 人工复核;其"零玩法数值字面量"的行为级硬证据 = AC-1/AC-7 全表读值推导 + AC-16 registry 对账);零随机的行为级硬证据 = AC-15 | Rule 11 / D2 AC-9/10/14 |
|
||||
|
||||
### 覆盖矩阵(qa-lead 交付,验收评审用)
|
||||
|
||||
| 类别 | 映射 |
|
||||
|---|---|
|
||||
| Core Rules(11/11) | 1→AC-1/AC-6/AC-2(clamp·溢杀·死亡时机→OOS B1×③)· 2→AC-1/AC-5/AC-9(side-wide 兼容与 target_ref 扩展位→B3 接口漂移义务随批 B1/D1、非冒烟域)· 3→AC-12/AC-14/AC-13 · 4→AC-3/AC-4/AC-5/AC-15(预留值拒绝→AC-12+manifest pattern_reserved)· 5→AC-8(每雷恰一次→OOS B1×②;溢出明细行→OOS B1×⑥+B5)· 6→AC-7/AC-16④(量纲锚验收→B4/B1,排除声明)· 7→AC-10(消费分流→OOS B1×⑤;顺位可读→D1×③)· 8→映射键契约(enemy_id)+AC-3/AC-15(行为环可学性承载)+OOS D1×①②、"不显示数值"负空间=API 封闭 · 9→AC-1/AC-2/AC-13/AC-14 · 10→AC-1/AC-11(D2 R1 解析致命→OOS D2 通道;难度修饰→C3 provisional)· 11→AC-15/AC-17(调用权集中→OOS B1×①) |
|
||||
| Formulas | F1→AC-3/AC-4/AC-5 · F2→AC-7 · F3→AC-8 · F4→AC-9(闭合对账→OOS B1×④) |
|
||||
| EC(17 条) | EC1→AC-4 腿1/腿2 · EC2→AC-5 腿2 · EC3→AC-6 腿1+AC-10 腿3 · EC4→AC-6 腿2 · EC5→冒烟 API 封闭(负空间——无 summon API 不可 G-W-T,B3 Rule 8 先例)+AC-5 腿3+AC-17 · EC6→AC-8 腿4+AC-12(cap=0 合法腿)· EC7→AC-8 腿3 · EC8→AC-7 腿3+AC-9 腿1(池蒸发腿→B3 AC 既有覆盖,OOS 跨引)· EC9→AC-4 腿1 · EC10→AC-3 腿3 · EC11→AC-3 腿4(跨图结构裁决)+AC-2/AC-6(相位重复守卫,B3 EC11 同款)· EC12→AC-11 · EC13→OOS(D2 R1 通道,D2 AC-2 同类别夹具,manifest 豁免声明)· EC14→OOS(D2 EC14 通道,同前)· EC15→AC-10 腿1 · EC16→AC-2 · EC17→AC-7 腿4(读值即时性/纯函数半)+OOS B1×①②(次序半) |
|
||||
| 无洞声明 | 17 条 EC 中 EC5/EC13/EC14 三处非 G-W-T 形态,分别以 API 封闭负空间声明与 D2 通道豁免承载(B3 Rule 8 负空间 + 致命收窄豁免先例同款);其余全部映射到 AC 或显式 OOS(deferral 生效条件 = B1×6/D1×4 已登记缺项即 blocking) |
|
||||
|
||||
## 开放问题
|
||||
|
||||
| # | 悬案 | owner | 时机 |
|
||||
|---|---|---|---|
|
||||
| 1 | query_attack / ambush_grant_plan 两 face 归属——B2 供给面 vs B1 编排消费(F2"供给建议"与 F3"预截流归 B1"边界注记的张力落点);裁决归 B1 则 AC-7/8/9 对应腿迁移至 B1 冒烟(断言口径不变)、回写 AC 前言 | 实现期 ADR 定名时同步裁决 | Technical Setup / 实现期 |
|
||||
| 2 | 多敌语义默认零消费者复验——默认 unit_count=1 下多敌路径仅测试根可达(死码风险);C1 落地 unit_count>1 真实遭遇后复验 AC-5/9/10 夹具根是否升级为默认根内容;C1 须真实消费 unit_count>1(Boss/精英战最廉价的构成表达),且 Boss 表达不能只靠 unit_count——同种同拍 ×3 = 伤害乘法、非 Boss 幻想 | C1 遭遇分布定稿 | C1 GDD |
|
||||
| 3 | 条款 3 左臂载体——基础攻击恒存在后"载体悬空、内容态不可通关"事实已闭环;残余 = 左臂当量换算口径(锚参照回迁 attack_up 当量——B4 F4 / registry anchor_warning)随 B1 对照表对账 | B1 | B1 GDD 强制检查点 |
|
||||
| 4 | 原型参考值溯源——敌 18HP/4ATK、伏击 +3、hero max_hp 均 provisional 且出处待查(D2 Tuning Knobs 既有登记义务);回填定值前补原型 REPORT 溯源,查无出处则按 C3 调参所有权重定 | 本 GDD 回填定稿时 | EnemyTable/HeroTable 定值回填 |
|
||||
| 5 | HeroTable 单行校验落点——schema validate() vs loader 缝两处恰一承载(AC-13 腿3 / 可选根 hero_extra_row manifest 行) | 实现期 ADR/D2 | Technical Setup |
|
||||
| 6 | 标错惩罚候选与伏击清单联动——候选"敌方伏击+1"若实测采纳:事件源 = flag_judged{hit=false}(旗落非雷格)、不在 Rule 5 cell_revealed{kind=mine} 转化路径内;B3 需新增行且 source_class 需新枚举值(如 flag_miss)——source_class 枚举属 B3 结构冻结项、须走 B3 GDD 修订(接口漂移)非"加行";B2 侧伏击清单联动修订 + F3 重验触发(非 mine_hit 源)强制重跑;若错标为 mine_hit:P2 归因明细行来源失实(标错被记成踩雷) | A2 OQ1 实测会话 | A2 /design-review 核对在位 |
|
||||
| 7 | 精英/Boss 遭遇编码位预登记——难度 = f(关卡序号, 节点深度, 精英/Boss 修饰);A1 BoardGenTable 已预留 elite_/boss_ 命名空间与改键退路;本表键冻结 (level_index, node_depth, enemy_id) 且"每行集恰一敌种"入结构冻结——若 C1 定稿分支地图使同深度并存普通与精英节点,精英编码无键位(同深度第二敌种行触发行集校验致命);届时改键(如追加 encounter_class 维度)走 D2 Rule 4 接口漂移修订,schema/AC-12/夹具/registry 连锁回写(A1 OQ6 镜像) | C1/C3 | C1 GDD 定稿强制核对 |
|
||||
| 8 | goblin 单拍环体验证伪——goblin 环长 1、无前摇无空窗,玩家可能将其感受为"自动平砍的血条"(恰为体验锚点反向对照);MVP 实际读怪内容仅剩 bugbear 一环;预注册证伪项:playtest 采集"goblin 是否被读"信号;证伪则两拍环备用案(如 [attack, charge])由 C3 内容所有权处置、本 GDD 结构不变 | C3/playtest | 垂直切片 playtest |
|
||||
| 9 | 零伤害死局组合与跨表量级护栏——hero 侧恒零伤害分支已被 HeroTable.atk 域下界([1,999]、0 加载拒绝)结构杜绝;残余 = 行 atk=0 ∧ cap=0 → 无威胁敌(内容调参禁区、非死局);atk×mult 上界与 max_hp 域无跨表量级护栏——遭遇行配置期跨字段校验落点裁决(ActionEconomyTable 跨字段校验先例),详见 Tuning Knobs Knob 交互注记 | 实现期 ADR/D2 | Technical Setup |
|
||||
| AC-1 | 默认根加载完成、全新容器 | `spawn(goblin 坐标, M_h)`;Alive 相位再 spawn 同坐标 | 首次 true;敌恰 unit_count 个、同 enemy_id、投影五字段(hp/max_hp/atk/pattern/cap)= 行值快照;hero 恰 1、hp = 入参;敌投影序 = 行主序生成序;再 spawn → false + 诊断、容器不变(相位守卫) | Rule 2/9/10 |
|
||||
| AC-2 | 默认根、全新实例 | hero_hp ∈ {M_h+1, 0, −1} 三腿;随后 hero_hp = 1 | 越界三腿均 false + 诊断且双侧恒空(拒绝原子性、无半实例化);域内下界 → true——拒绝域不扩大 | EC16 / Rule 9 |
|
||||
| AC-3 | spawn 完成(bugbear 坐标) | 读初拍;连续 advance;goblin 坐标连续 3 次 advance;任意长 advance/受击序列 | 初拍 = p_e[0];轨迹 = p_e[k mod 环长]、环尾回环首;环长 1 恒 attack(前提 \|p_g\| = 1 按表读值核对,不满足显式 SKIP);任意序列后状态 = 驱动序列的确定函数、除 despawn_all 外无重置入口 | Rule 4 / EC10 / EC11 / F1 |
|
||||
| AC-4 | 默认根;前提 p_e[1]=charge 且 p_e[2]=heavy(不满足显式 SKIP) | charge 拍后杀死再 advance;heavy 拍 advance 后才死;对 Dead 句柄 apply_damage | heavy 前被杀:hp = 0(溢杀 floor)、advance → false 无诊断、beat 冻结于 heavy 前一拍(重击永不兑现);行动后才死:已推进、指针回绕;Dead 受击 → false + 诊断(无复活) | EC1 / EC9 / F1 |
|
||||
| AC-5 | 夹具根 enemy_multi_unit(u_c = 3,bugbear 行) | 三单位读初拍;某步 advance(u2) 前杀 u2;全程观测规模 | 三单位初拍恒等(同种同指环首);u2 本步不打、指针冻结,幸存者 beat 连续多步恒相同(同步性质定理——EC2);单位数 ∈ {3,2,1} 严格递减、无增员(EC5 负空间行为面) | Rule 2 / EC2 / F1 |
|
||||
| AC-6 | 默认根 + AC-5 根 | 逐一致死;杀 hero 后 despawn_all、重复 despawn_all、重新 spawn | 全灭 → query_alive(enemy) = 空(胜利判定素材归 B1);hero hp = 0(失败判定素材);despawn → true、双侧空、失效句柄查询空 + 诊断、作用接口 false;重复 despawn → false + 诊断;重新 spawn → true(Despawned 唯一出口) | Rule 1 / EC3 / EC4 |
|
||||
| AC-7 | 默认根 spawn(bugbear)、m_amb 表读值 | attack 拍 query_attack(L=2);heavy 拍 query_attack(L=4) 合成序判别;charge 拍 query_attack(L=c_r);多敌根同 L 重复/多单位 query | attack:{baseline = a_e, attach = 2×m_amb, total = a_e + 2×m_amb};heavy:total = a_e×m_e + 4×m_amb 且 ≠ (a_e + 4×m_amb)×m_e(后置加法判别;m_e = 1 时负断言恒等、显式 SKIP);charge:恒 {0,0,0}(不读池——EC8 的 B2 半);同 L 多读逐字相同、多单位读值一致(共享不消耗)、query 前后投影零变化(纯函数——EC17 读值半) | F2 / Rule 6 / EC8 / EC17 |
|
||||
| AC-8 | 默认根、c_r = cap 表读值 | ambush_grant_plan 参数化:mines = c_r+2;mines ∈ {0, 1, c_r, c_r+1};mines ∈ [5, 8];cap = 0 | granted = min(mines, c_r)、守恒 granted + overflow = mines(零静默蒸发);灾难轮 granted = 4、overflow = mines − 4(EC7);cap = 0 → granted = 0、overflow = m(EC6 免疫全溢出可见) | F3 / EC6 / EC7 |
|
||||
| AC-9 | 夹具根 enemy_multi_unit | advance 序构造混合拍读暴露;记号恒等式断言 | 暴露 = k × L × m_amb,k 经只读观测量导出(确定性可算、无隐藏状态);全 charge 轮 k = 0(EC8);结构上界 = u_c × min(AP_r, c_r) × m_amb 记号恒等式(全参表读值/夹具登记值,非定值断言);无跨结算累计观测量(负空间) | F4 / EC8 |
|
||||
| AC-10 | 腿 1 默认根(u_c=1);腿 2/3 多敌根 | default_target();杀 [0] 后再查;连续杀至空 | u_c=1 → 唯一存活单位(合法退化——EC15);多敌 → query_alive(enemy)[0](顺位快照 = 生成序);杀最前后顺延;杀至空 → null | Rule 7 / EC3 / EC15 |
|
||||
| AC-11 | 默认根 spawn 完成、存活与 Dead 并存 | 测试通道换根加载 enemy_reloaded(非 D2 reload() 路径);despawn 后同坐标重新 spawn;原地改写返回的 pattern 投影 | 已实例化单位快照五字段 + beat + hp 逐字不变、hero 投影不变(快照抗热重载——EC12);新实例 = 漂移后表值;投影为拷贝非活引用 | Rule 10 / EC12 |
|
||||
| AC-12 | EnemyTable schema 类直引实例 | validate() 作用于越域代表值(unit_count {0,4}、hp {0,1000}、atk {−1,1000}、mult {0,17}、环长 {0,9}、预留值 "guard"、未知枚举、cap {−1,17})与域内代表值(含 atk=0、cap=0 两合法极端、环长两界);表级构造同坐标两行相异 enemy_id | 越域各含对应域错误类别(零静默);表级含每行集恰一敌种错误类别;域内零诊断(防过度约束锁死内容——atk=0 与 cap=0 是承重点) | Rule 3/4 / EC6 |
|
||||
| AC-13 | HeroTable schema 类直引实例 | validate():max_hp {0,1000}、atk {−1,0,1000} 越域;max_hp/atk ∈ [1,999] 域内;表级构造两行 | 越域各含域错误类别(atk=0 拒绝 = 基础攻击恒在的 schema 承重腿);域内零诊断;两行 → 单行全局约束错误(落点 = schema 或可选根 hero_extra_row manifest,两处恰一承载) | Rule 9 |
|
||||
| AC-14 | 默认根加载完成 | 读 EnemyTable;读 HeroTable | 敌种 id 集合 = {goblin, bugbear, ogre_chief}(定值断言);每行集恰一敌种;pattern 元素 ⊆ {attack, charge, heavy};goblin 行 pattern 不含 "heavy";unit_count_max 仅在区间行出现;display_name 非空(本地化归 D6);遭遇分布不作定值断言(C3 域 knob);HeroTable 恰 1 行、atk ∈ [1,999](MVP 值 6 provisional 不作定值断言)、max_hp ∈ [1,999] | Rule 3/9 |
|
||||
| AC-15 | 全新实例 ×2(同默认根) | 同一定长序列驱动两遍(spawn → 受击含轮到前击杀 → 交替 advance → query 投影 → default_target) | 两遍的 query_alive 投影序列、逐单位 beat 轨迹、default_target 返回序列逐项相同——零随机行为级硬证据(rng_service 流封闭) | Rule 4/11 / F1 |
|
||||
| AC-16 | 默认根加载完成 | 脚本解析 design/registry/entities.yaml 的 enemy 与 hero 条目逐字段对账 | ① enemy.fields 十键与 EnemyTable schema 字段名/类型/域逐一相等;② hero.fields 两键同上;③ enemy 注记物种集 = {goblin, bugbear, ogre_chief} 与表行集合相等;④ status_effect.ambush 含 B2 量纲定稿注记(活值 m_amb 不作定值对账——knob 纪律);⑤ hero"单行全局豁免"与 enemy"每行集恰一敌种校验"注记存在 | Rule 6 / registry |
|
||||
| AC-17 | B2 文件集纳入 D2 AC-9 模式项目级扫描域 | 静态扫描 | randomize() / RandomNumberGenerator / ConfigDB 外 data 表加载 / extends Control / .tscn preload 零命中(schema 与容器 class_name 直引实例化豁免);事件订阅 API 零命中;B3 API 符号零引用(相邻零运行时依赖);零随机行为级证据 = AC-15 | Rule 11 / D2 AC-9 |
|
||||
|
||||
## 版本历史
|
||||
|
||||
| 版本 | 日期 | 改动 |
|
||||
|---|---|---|
|
||||
| v2 | 2026-09-14 | 两件套迁移:按模板 v2 重排——design 只收结论,公式推导、数值锚定论证、候选取舍、体验锚点论证移至 `design/gdd/analysis/b2-enemy-system.md`;规则/数值/AC/EC/F/OQ 编号与内容全保留,零设计变更 |
|
||||
| v1.0-lean | 2026-09-13 | 格式迁移:legacy 原稿按 lean 样例重排——修订注记出正文收敛至本表;规则/枚举/边界情况/义务清单/覆盖矩阵/AC 转表格;行为环转字符画;公式、Variables 与验算数据全保留;语义与 2026-09-09 定稿及 2026-09-11 基础攻击裁决对齐,零规则变更 |
|
||||
| 基础攻击裁决批 | 2026-09-11 | HeroTable.atk = 基础攻击恒存在:域 [1,999]、0 加载期校验拒绝(零基线死锁自 schema 层杜绝)、MVP = 6(原型锚 provisional 归 C3);主角每结算战斗段先手攻击;B4 道具/增益转为规划面伤害(非唯一伤害来源);原"atk MVP=0 机制开关、胜利路径依赖 B4 先行"条款与 OQ3 左臂悬空投影退役;OQ9 恒零死局分支随之收窄 |
|
||||
| C3 修订批回写 | 2026-09-14 | /design-review C3 修订批(X-7 回执,registry 同批):**spawn 增 override 参数 n**(B1 encounter 骰定本战实际数量——区间语义 [unit_count, unit_count_max] 实例化后不增,EC5 记号调和)· **Rule 10 DifficultyTable 接口已定**(registry `difficulty_table`——施加点 = 行值快照前套乘,MVP 空表零修饰)· **EnemyTable schema +2 字段**(unit_count_max / armor_type——护甲克制批,克制矩阵归 SettlementTable)· **物种集扩容三敌种 {goblin, bugbear, ogre_chief}**(AC-14/AC-16① 十键/AC-16③/结构定值断言随批;DND 更名批对齐)· 默认根遭遇分布 = C3 行值总表 v3(provisional) |
|
||||
|
||||
+237
-265
@@ -1,36 +1,41 @@
|
||||
# B3 增益/状态系统(Status Effect System)
|
||||
|
||||
> **状态**:Approved · lean 格式
|
||||
> **版本**:v1.1-lean · 2026-09-13 · 作者:user + agents(systems-designer〔Formulas〕· qa-lead〔AC〕;三结构决策〔单一计数/按行叠层/四行定稿权收编〕为用户拍板)
|
||||
> **承载支柱**:P2 主(可归因兑现的机制落点)· P3(敌方增益/debuff 的兑付面)· P1(时限透明的规划素材)· P4(间接)
|
||||
> **Layer**: 1 Foundation · **Milestone**: MVP · **设计顺序**: 第 4 位
|
||||
> **一句话**:B3 是战斗域统一状态容器——三向效果同构实例的时限/叠层/衰减机制唯一 owner,兑付接口供 B1 结算逐行消费。
|
||||
> **复核注记**:lean 门禁下 systems-designer / qa-lead 已委托起草(Formulas / AC);creative-director 与 art-director 未经咨询——生产前人工复核体验锚点情绪定位与视觉数据面规格同 art-bible 的一致性。
|
||||
> **状态**:Approved · **版本**:v2 · 2026-09-14
|
||||
> **承载支柱**:P2 主(可归因兑现的机制落点)· P3(敌方增益/debuff 兑付面)· P1(时限透明的规划素材)· P4(间接)· **Layer**:1 Foundation · **Milestone**:MVP · **设计顺序**:第 4 位
|
||||
> **一句话**:战斗域统一状态容器——三向效果同构实例的时限/叠层/衰减机制唯一 owner,兑付接口供 B1 结算逐行消费。
|
||||
> **推演件**:`design/gdd/analysis/b3-status-effect.md`(本文件只收结论,理由在那里)
|
||||
|
||||
## 速览
|
||||
## 设计目的
|
||||
|
||||
| 关键问题 | 答案 |
|
||||
|---|---|
|
||||
| 定位 | 战斗域统一状态容器:不在当场一次性、而要在若干次结算里持续起作用的战斗效果(安全格增益 / 踩雷敌方增益 / 标中旗削弱 / 清图奖励 buff)作为同构状态实例的唯一存放与生命周期 owner——统一容器让"效果"成为一门单一语言:四源统一当量的对照载体(A3 条款 1)、B1 结算的单一对接面、可回放步骤流的状态侧前提 |
|
||||
| 拥有 | 机制:时限/叠层/衰减语义、状态实例生命周期(战斗域)· 兑付接口五 API 与 P2 归因字段 · StatusEffectTable 回填 owner · MVP 四行初值定稿权(Rule 10 收编——锚验收权留 B4/B2/B1);机制与内容分离是结构原则——B3 只拥有机制,效果内容的经济归属归各锚 owner |
|
||||
| 不拥有 | 效果内容经济归属(安全格 buff 与标中旗 debuff 档位锚验收归 B4、敌方增益上限归 B2)· 效果语义到结算公式的映射与兑付作用顺序(B1 SettlementTable)· 呈现(D1/B5)· 教学(D5)· 渲染面与事件外发(零) |
|
||||
| 上游输入 | D2 StatusEffectTable(hard——数据通道,本 GDD 回填 owner);无其他玩法上游(Foundation 层) |
|
||||
| 下游输出 | 五 API(B1 结算编排消费)· query_active 投影(D1 HUD 数据源)· 实例六字段 + display_name + 授予时快照(B1 结算明细 / B5 呈现数据源) |
|
||||
| 硬约束 | 零随机(无 RNG 流消费)· 零 UI 依赖 · 零信号外发(纯被动容器)· 全 API 布尔/计数返回、无 await——可回放步骤流的状态侧前提 |
|
||||
战斗里不在当场一次性、而要在若干次结算里持续起作用的战斗效果(安全格增益 / 踩雷敌方增益 / 标中旗削弱 / 清图奖励 buff)需要一个统一的存放与生命周期 owner。少了它,四类效果各写一套计时叠层逻辑,结算明细无法逐行归因,"规划的延迟兑现"无从落地。
|
||||
|
||||
## 体验锚点
|
||||
1. 玩家指着任意一行结算明细,能答出"这效果是我哪步扫雷带来的"——来源标注随行(P2)。
|
||||
2. 玩家能读到每个增益"还剩几次结算、何时到期",把它纳入挖哪格的推理(P1)。
|
||||
3. 叠满再拿同款时玩家看得到"这层白拿了"——浪费诚实、可规划(P2)。
|
||||
4. 踩雷的敌方增益与标中旗的削弱用同一呈现语言,玩家由此学会雷的两面(P3)。
|
||||
5. 结算编排只对接五个固定接口;新增效果只加表行、不改容器代码。
|
||||
|
||||
| 支柱 | 关键词 | 机制承诺 |
|
||||
|---|---|---|
|
||||
| P2 可归因的兑现感 | "我攒下的东西正在替我打架" | 每个状态实例携带来源标注(安全格/标中旗/清图/雷),结算明细逐行生效——P2 准话测试"这个结果是我哪步扫雷带来的?"在 B3 字段里就有答案;"规划的延迟兑现"从口号变成可见事实的机制落点 |
|
||||
| P3 雷的两面 | "雷是赌桌不是陷阱" | 踩雷的敌方增益行与标中旗的削弱行在结算明细里使用同一呈现语言,玩家由此学会雷的两面;旗标对的即时回报部分补偿 chord 缺席的兑现节拍缺失(CD 创意风险 #3 的关联缓解,正式高光设计归 B1/B4) |
|
||||
| P1 规划素材 | "还剩几次结算、何时到期" | 增益携带明确的剩余结算次数与到期时机,玩家才能把它纳入挖哪格的推理——时限语义的透明度是规划感的前提;满层溢出行可见("满层时别再拿同款") |
|
||||
## 系统范围
|
||||
|
||||
反向护栏:状态效果绝不能是无感的暗账——玩家说不出一行结算"从哪来",来源标注即失职(违反 P2);任何让 buff 时限/剩余次数不可读的设计默认砍掉。参考感受:杀戮尖塔的增益图标(时机与层数一目了然,是决策素材而非装饰)、Peglin 神器在关键时刻叠加生效的"攒出来的强大"。
|
||||
负责:
|
||||
|
||||
## 全局流程
|
||||
- 状态实例生命周期(战斗域):授予受理、存续、到期移除、战斗结束清空;机制与内容分离——B3 只拥有机制,效果内容的经济归属归各锚 owner
|
||||
- 时限/叠层/衰减机制语义:单一结算次数量纲、按行叠层三分支、先兑付后衰减
|
||||
- 兑付接口五 API 与 P2 归因字段(实例六字段 + display_name + 授予时数值快照)
|
||||
- StatusEffectTable 回填 owner:schema + 四行 MVP 初值定稿权(锚验收权留 B4/B2/B1)
|
||||
- 硬约束:零随机(无 RNG 流消费)· 零 UI 依赖 · 零信号外发(纯被动容器)· 全 API 布尔/计数返回、无 await——可回放步骤流的状态侧前提
|
||||
|
||||
### 效果生命周期(授予 → 存续 → 兑付/衰减 → 出口)
|
||||
不负责:
|
||||
|
||||
- 效果内容经济归属——安全格 buff 与标中旗 debuff 档位锚验收(B4)、敌方增益上限(B2)
|
||||
- 效果语义到结算公式的映射、兑付作用顺序、合成值地板/clamp、percent→乘数换算方向(B1 SettlementTable)
|
||||
- flat 量纲定义(B2——已定稿,registry ambush_unit_definition)
|
||||
- 呈现与渲染面——HUD 状态栏/结算明细呈现/图标映射(D1/B5/art-bible)、教学(D5)、本地化(D6)
|
||||
- 事实产生与资格判定——开格/标中/开雷事件(A2)、标中旗兑付资格判定(A3/A2 域)、事实→授予恰一次转化(B1)
|
||||
- 数据加载、校验、热重载门(D2)
|
||||
- 事件外发(零——纯被动容器)
|
||||
|
||||
## 核心循环
|
||||
|
||||
```
|
||||
B1 结算编排(唯一授予入口 apply_effect——A2/B4 与 B3 零直接接口)
|
||||
@@ -49,8 +54,6 @@ Active(存续——跨轮次、跨扫雷图延续;换图/刷新不清空,
|
||||
└ 拒绝路径:域闭 / 未知 effect_id / 满层 → false + 容器零写(溢出行归 B1 结算明细)
|
||||
```
|
||||
|
||||
### 出口分发
|
||||
|
||||
| 出口 | 触发 | 动作/去向 | 约束 |
|
||||
|---|---|---|---|
|
||||
| 受理入容器 | apply_effect 受理(新实例/叠层/刷新) | 即入 Active——无 pending 态,首个结算是第一次兑付 | 域闭 / 未知 id / 满层 → false 拒绝(见边界情况) |
|
||||
@@ -58,116 +61,25 @@ Active(存续——跨轮次、跨扫雷图延续;换图/刷新不清空,
|
||||
| 战斗清空 | notify_battle_end() | 全实例销毁、容器回空 → BattleClosed | 不跨战斗;除本 API 外无任何清空入口 |
|
||||
| 满层拒绝 | stack 行 L=M 再授予 | 返回 false、容器逐字不变;"溢出未生效"行归 B1 结算明细(含来源) | 拒绝原子性——无半写、无溢出落层 |
|
||||
|
||||
## 核心规则
|
||||
## 实例状态
|
||||
|
||||
> 每条规则两段:**人话**(作用于哪个系统、什么情况下、谁触发、触发后发生什么;效果与情况用枚举表)→ **举证**(计算方法/公式;纯流程规则明写"无计算")。
|
||||
容器为纯逻辑类(非 autoload、无场景依附),每场战斗实例化一次(B1 编排前提;冒烟经 class_name 直引构造)。容器无运行时大状态机——实例生命周期四态(战斗域):
|
||||
|
||||
#### 规则 1:所有持续效果共用一个容器、一套机制
|
||||
|
||||
**人话**:战斗里不在当场一次性生效、要管上几回结算的效果——主角的增益、敌人的增益、敌人受到的削弱、清图奖励——全都作为同一种"状态实例"存进同一个容器,用同一套计时、叠层、衰减的规矩管理,没有哪类效果走特殊通道。容器自身有四条硬规矩:
|
||||
|
||||
| 规矩 | 含义 |
|
||||
|---|---|
|
||||
| 寿命 = 一场战斗 | 战斗开始时容器为空,战斗结束全部清空——不跨到下一场战斗 |
|
||||
| 跨轮、跨图延续 | 同一场战斗里跨轮次、跨扫雷图都在;换图/刷新不清空(旗标记随旧图消亡归棋盘系统 A2 管,状态实例不随图走) |
|
||||
| 全程零随机 | 容器不掷任何骰子:授予、合并、衰减、列举顺序全部确定 |
|
||||
| 敌方侧共享 | MVP 敌人为 1–3 个同种敌单位(敌情系统 B2 定):对敌状态一律对全体存活敌人生效,层数全体共享一份 |
|
||||
|
||||
**举证**:无计算。"不跨战斗"为 game-concept 定稿口径;多敌共享读法按 registry single_enemy_assumption 登记,现接口零变更兼容。
|
||||
|
||||
#### 规则 2:状态的寿命按"还剩几次结算"倒数
|
||||
|
||||
**人话**:每个状态实例都自带一个倒数计数——剩余结算次数。它不承诺"活几轮",而是数"经历过几次结算":每轮结算先让状态起作用,随后计数减 1,减到 0 状态即被移除。因此一次性的状态(标中旗削弱、踩雷伏击这类,初始计数 = 1)恰好在授予它的那轮结算里生效一次、轮末消失,MVP 四行内容全部是一次性;将来若有跨轮持续的增益,寿命由表行的初始值表达——给几就活几次结算。停手不挖的轮、弃图刷新的轮也照常算一次结算、计数照减——不存在"不结算就不掉次数"的免费延时。
|
||||
|
||||
**举证**:计数量纲 = remaining_settlements(剩余结算次数),初始值 = 表行 duration_settlements(一次性 = 1);衰减的精确机制(每轮恰 −1、归 0 即销毁)与"先兑付后衰减"时序契约见「数值结论与推导」F3;时限语义逐要点见下方实现参照表。
|
||||
|
||||
### 规则 2 的实现参照——单一结算次数量纲(时限语义)
|
||||
|
||||
| 要点 | 内容 |
|
||||
|---|---|
|
||||
| 计数量纲 | remaining_settlements(剩余结算次数)——全部状态唯一时限单位 |
|
||||
| 初始值 | duration_settlements = 授予时初始剩余结算次数(实例持有快照、不受表重载影响——EC9) |
|
||||
| 衰减 | 每轮结算兑付后统一 −1(先兑付后衰减——B1 兑付完才调 decay_round);归 0 即移除 |
|
||||
| 一次性 | duration=1 → 授予当轮编排期入容器 → 同轮兑付恰一次 → 轮末移除(MVP 四行全部 D=1——当次结算语义) |
|
||||
|
||||
#### 规则 3:状态只在结算时发放,每笔都记着从哪来
|
||||
|
||||
**人话**:挖掘期的挖格、插旗、踩雷不会直接改状态容器:棋盘(A2)只上报"发生了什么"的事实,战斗结算编排(B1)在每轮结算时统一把事实兑换成状态、发给容器。这是容器唯一的进货口,棋盘与奖励背包(B4)都没有直通容器的通道。每笔状态随身携带归因信息:哪类来源(安全格奖励/标中旗/踩雷/清图奖励四选一)、从哪个格子来、发生在第几轮——结算明细能逐行回答"这效果是我哪步扫雷带来的"。状态一经发入立即生效(没有"待生效"中间态):同一场结算就是它的第一次兑付。
|
||||
|
||||
**举证**:无计算。授予动作 = apply_effect(规则 6 五接口之一);四类来源的授予路径与目标侧逐源对照见下方实现参照表;来源取值封闭枚举见「枚举」节 source_class 表。
|
||||
|
||||
### 规则 3 的实现参照——三向效果映射(授予路径)
|
||||
|
||||
| 事实来源 | source_class | 授予路径 | 目标侧 | MVP 行 |
|
||||
|---|---|---|---|---|
|
||||
| 安全格奖励 | safe_cell | A2 开格事实 → B1 转化 apply_effect | hero | attack_up / defense_up |
|
||||
| 踩雷 | mine_hit | A2 开雷事实 → B1 转化 apply_effect | enemy(side-wide) | ambush |
|
||||
| 标中旗 | flag_hit | A2 标中判定 → B1 转化 apply_effect;兑付资格(雷格实例键)判定在 A3/A2 域——资格判定不过 B3,B3 无从重复兑付同雷(每次 flag_hit 授予由 B1 保证资格合法) | enemy(side-wide) | weaken |
|
||||
| 清图奖励 | clear_reward | B4/B1 清图槽含 buff 时授予(B4 期定稿) | 随行 | B4 差异化插槽(OQ4) |
|
||||
|
||||
#### 规则 4:同名状态重复拿到,怎么合并由数据表说了算
|
||||
|
||||
**人话**:同一种状态还没消失时又拿到一份怎么办?答案不在代码里,而在数据表每行的"叠层策略"字段,共三种:叠加(层数 +1,寿命不动——只有第一次授予定时钟)、刷新(寿命重新计满、层数不变)、并存(各算各的一份、互不影响)。合并在授予那一刻由容器内部完成;多个状态在结算里按什么先后起作用,是结算编排的职责——两件事互不干扰。叠加的作用是纯加法:几层就是几倍的行值(单一线性换算)。MVP 四行内容全部用叠加;刷新与并存的语义已定义、实现已承载,未来内容行按需启用。
|
||||
|
||||
**举证**:三分支的逐分支语义(含满层/溢出行为与 MVP 消费)见下方实现参照表;合并执行的伪代码见「数值结论与推导」F1;"有效值 = 层数 × 行值"的加算合成见 F2。
|
||||
|
||||
### 规则 4 的实现参照——按行叠层三分支(stack_policy——授予时合并)
|
||||
|
||||
| stack_policy | 重复授予行为 | 满层/溢出 | MVP 消费 |
|
||||
|---|---|---|---|
|
||||
| stack | 层数 +1(R 不动——只有初始授予定钟) | L=M → 拒绝 false + 容器零写,"溢出未生效"行归 B1 | 四行全用(attack_up/defense_up M=2、ambush/weaken M=16) |
|
||||
| refresh | 剩余次数重置为实例授予时快照 D、层数不变(含 R 已 = D 的空刷新——恒返回 true,无满层/溢出语义、不消费 max_stack) | 无 | 语义已定义、实现承载——MVP 无内容行(零消费者) |
|
||||
| independent | 并存独立实例(append 入列) | 无满层语义——实例数上界 = 受理授予数(有界确定) | 同上 |
|
||||
|
||||
#### 规则 5:叠满了再给同款不生效,但会明说"这层浪费了"
|
||||
|
||||
**人话**:一种叠加型状态已叠到上限(层数 = 上限值)时,再授予同类不生效:容器拒绝、内容一个字不变。但这份奖励不会被无声吞掉——结算明细会多一行"溢出未生效",连来源一起写明;玩家看得到"这层白拿了",下次就懂得满层时别再拿同款——奖励的浪费是诚实的、可规划的。无论这份重复来自玩家直接踩出的格子、结算转化、还是连锁展开自动开出的奖励格,都走同一个授予入口,满层时同样产生溢出行、同样留痕。
|
||||
|
||||
**举证**:无计算(判定 = 一次"层数 == 上限"比较)。拒绝原子性(false + 容器逐字不变、无半写无溢出落层)见 F1 推导极端行为段;"溢出未生效"行进结算明细协议由 B1 义务⑧承载、呈现归 B5/D1。
|
||||
|
||||
#### 规则 6:结算系统只用五个固定接口读写容器
|
||||
|
||||
**人话**:状态容器是纯被动的仓库,自己不主动做任何事;战斗结算编排(B1)要用它,只有五个固定接口:
|
||||
|
||||
| 接口 | 干什么 | 返回 |
|
||||
| 状态 | 进入条件 | 行为/出口 |
|
||||
|---|---|---|
|
||||
| 告知战斗开始 | 打开容器、进入可用状态 | 是/否 |
|
||||
| 发一笔状态 | 唯一进货口:受理即新建实例/叠层/刷新 | 是/否 |
|
||||
| 查询生效状态 | 某一方当前生效清单,按发放先后排列且顺序永远稳定 | 只读清单 |
|
||||
| 轮末衰减 | 全部实例寿命 −1、归 0 即销毁 | 本轮移除数 |
|
||||
| 告知战斗结束 | 全实例清空、容器回空 | 是/否 |
|
||||
| BattleClosed(域闭) | 构造后未开域 / notify_battle_end() 后 | apply_effect 全拒绝(false);唯一出口 notify_battle_start() |
|
||||
| Active(存续) | apply_effect 受理(新实例/叠层/刷新) | 每轮结算被 B1 兑付消费;decay_round() 后 remaining −1 |
|
||||
| Expired(移除) | remaining_settlements = 0 | 实例销毁(明细流水已由 B1 记录,B3 不留历史) |
|
||||
| Cleared(清空) | notify_battle_end() | 全实例销毁、容器回空 → BattleClosed(不跨战斗) |
|
||||
|
||||
**举证**:五接口 = notify_battle_start() / apply_effect(effect_id, source) → bool / query_active(side) → Array / decay_round() → int / notify_battle_end() → bool(签名见「验收标准」测试口径)。
|
||||
不变式(debug 断言口径):
|
||||
|
||||
- 查询返回 = 六归因字段 + display_name + 授予时数值快照 (magnitude, unit) 的只读投影(qa-lead 载荷口径)。
|
||||
- 结算作用顺序(哪个效果先乘)归 B1 SettlementTable,B3 只保证枚举确定性;最后一轮(敌人全灭)是否 decay 归 B1 判定次序域——A3 EC8 同款〔末轮 decay 判定次序域〕。
|
||||
- 全部 API 布尔/计数返回、无 await、无表现面——可回放步骤流的状态侧前提。
|
||||
- remaining ∈ [0, duration_settlements];stack 行 layers ∈ [1, max_stack];stack/refresh 策略下同 id 至多一个实例——违反即 debug 断言中止
|
||||
- API 违规(域闭授予、未知 effect_id、满层授予)= 拒绝(false)+ debug 诊断,不进程致命(承 A3 拒绝口径;进程致命保留给 D2 数据通道)
|
||||
|
||||
#### 规则 7:容器只管"有多少量、还剩几次",不管这量怎么用
|
||||
设计意图:四态封闭、清空入口唯一,"容器何时为空"永远可答。
|
||||
|
||||
**人话**:容器记录每个状态的量(幅度数值 + 量纲标签:百分比还是固定值)和它还剩几次结算,仅此而已。"增伤到底加在哪个算式上、先乘后乘、地板怎么收"这类"效果如何兑现"的问题,一律由结算编排的顺序映射表按状态 id 作答。一句话:容器知道"现在还有 +50、还剩 1 次结算",但不知道这 +50 会变成主角攻击里的什么。
|
||||
|
||||
**举证**:无计算。语义映射的承载面 = B1 SettlementTable(effect_id 为键);B3 只承载 magnitude/unit 两个通用数值字段。
|
||||
|
||||
#### 规则 8:已生效的状态玩家动不了——不能驱、不能延、不能转
|
||||
|
||||
**人话**:状态一旦生效,玩家没有任何手段把它摘掉、往后延、或挪给别人——容器没有提供这类接口。"不能做"和"能做"同样是明确的设计决定:省掉一整类界面与规则复杂度。将来若要加驱散/延时/转移,属于新增接口的修订,不是调参数。
|
||||
|
||||
**举证**:无计算。负空间规则——验收形态 = API 面封闭枚举 + 接口漂移修订门(见「验收标准」节测试口径 out-of-scope 行)。
|
||||
|
||||
#### 规则 9:所有数值写在数据表里,代码零写死
|
||||
|
||||
**人话**:容器本身不认识任何具体数值:哪个状态加多少、活几次、最多叠几层,全部写在状态表里(表结构由本文档定义、数据层 D2 承载),程序运行时统一从配置库 ConfigDB 读表。代码里不出现任何玩法数值字面量——调平衡只改表、不改代码。
|
||||
|
||||
**举证**:无计算。表 = StatusEffectTable(本 GDD 为回填 owner,schema 逐字段见「Tuning Knobs」节);依据 = D2 Rule 1〔数值字面量禁令〕。
|
||||
|
||||
#### 规则 10:四个 MVP 状态的初值由本文档定稿,验收权留在对口系统
|
||||
|
||||
**人话**:MVP 上线的四行内容(增伤、减伤、伏击、削弱)的初始数值由本文档定稿,值域快照见「枚举」节内容行表。但"值合不合适"的验收权留在对口系统(奖励经济 B4、敌情 B2、结算 B1):削弱档位按"必须严过最低档增益"的当量锚验收、伏击按敌方惩罚上限验收、对账由结算闭合。要改初值,走接口漂移规则回写登记库(registry),不是随手调参——初值定稿权归本文档、锚验收权仍归上述三方,这是对"档位归奖励表设计"的显式收编。
|
||||
|
||||
**举证**:无计算(定稿权条款非公式)。依据 = A3 F1 条款 2〔debuff 严格 > 最低档 buff 当量,参照对象 = attack_up 行当量〕· 条款 3〔B2 惩罚上限〕· A3 OQ5 收编〔registry ownership_note〕;A3 GDD 正文不改,以本条 + registry ownership_note 为准。
|
||||
|
||||
## 枚举
|
||||
## 枚举与数据字段
|
||||
|
||||
### source_class(封闭枚举——P2 归因字段)
|
||||
|
||||
@@ -178,7 +90,8 @@ Active(存续——跨轮次、跨扫雷图延续;换图/刷新不清空,
|
||||
| mine_hit | 踩雷授予 | 敌方增益来源 |
|
||||
| clear_reward | 清图奖励授予 | 清图槽 buff 来源(B4 期定稿) |
|
||||
|
||||
新增值 = 接口漂移。B3 不校验 source_class 与行的对应(dumb 账本——EC6 同族);内容行表"来源"列为内容档案(provenance),非 schema 字段、非运行时约束。
|
||||
- 新增值 = 接口漂移;B3 不校验 source_class 与行的对应(dumb 账本——EC6 同族)
|
||||
- 内容行表"来源"列为内容档案(provenance),非 schema 字段、非运行时约束
|
||||
|
||||
### target_side / unit / stack_policy(schema 枚举域)
|
||||
|
||||
@@ -186,9 +99,35 @@ Active(存续——跨轮次、跨扫雷图延续;换图/刷新不清空,
|
||||
|---|---|---|
|
||||
| target_side | hero / enemy | 作用侧;enemy 侧 side-wide = 全体存活敌单位(层数 = side 共享池) |
|
||||
| unit | percent / flat | percent = 百分比修正(百分点线性叠加);flat = 固定值(伏击类——量纲已定稿:每层伏击为每次攻击类行为附加 m_amb 点主角 HP 伤害、后置加法不进倍乘、charge 拍零兑付,B2 GDD 定稿) |
|
||||
| stack_policy | stack / refresh / independent | 同 id 重复授予的合并策略(见核心规则子表) |
|
||||
| stack_policy | stack / refresh / independent | 同 id 重复授予的合并策略(见授予节子表) |
|
||||
|
||||
### StatusEffectTable MVP 内容行(四行值域快照——值全部 provisional,验收锚见 Rule 10)
|
||||
### StatusEffectTable schema(D2 承载,B3 回填 owner)
|
||||
|
||||
规则:
|
||||
|
||||
1. **Rule 9** 容器本身不认识任何具体数值——哪个状态加多少、活几次、最多叠几层全部写在状态表里,运行时统一从 ConfigDB 读表;代码零玩法数值字面量,调平衡只改表、不改代码。
|
||||
|
||||
| 字段 | 类型/范围 | 说明 |
|
||||
|---|---|---|
|
||||
| effect_id | String(主键唯一) | 状态标识;B1 SettlementTable 语义映射的键 |
|
||||
| display_name | String | 图例/HUD/明细用名(本地化归 D6) |
|
||||
| target_side | enum {hero, enemy} | 作用侧(enemy 侧 side-wide = 全体存活敌单位) |
|
||||
| magnitude | int | 域随 unit:percent ∈ [-100, 100] 且 ≠0 / flat ≥ 1(跨字段校验) |
|
||||
| unit | enum {percent, flat} | percent = 百分比修正;flat = 固定值(伏击类) |
|
||||
| duration_settlements | int [1, 99] | 授予时初始剩余结算次数(一次性 = 1) |
|
||||
| stack_policy | enum {stack, refresh, independent} | 同 id 重复授予的合并策略 |
|
||||
| max_stack | int [1, 16] | 层数上限;仅 stack 消费——refresh/independent 行约定恒 1(内容约定,非校验项) |
|
||||
|
||||
- 表为定义表非进度成长表,无 (level_index, node_depth) 维度(D2 Rule 4 豁免,A4 先例);未来随关卡成长的效果走接口漂移加列
|
||||
- 加载校验:表非空(D2 Rule 6,四行即满足);effect_id 唯一(重复键致命——本表唯一致命夹具 dup_key);枚举域校验(target_side/unit/stack_policy 出域致命);duration/max_stack 域校验;跨字段 percent ≠ 0 / flat ≥ 1
|
||||
|
||||
举证:Rule 9 依据 = D2 Rule 1〔数值字面量禁令〕;本 GDD 为该表回填 owner,新字段走接口漂移规则。
|
||||
|
||||
### StatusEffectTable MVP 内容行(四行值域快照——值全部 provisional)
|
||||
|
||||
规则:
|
||||
|
||||
1. **Rule 10** 四行 MVP 内容(增伤、减伤、伏击、削弱)的初始数值由本文档定稿;"值合不合适"的验收权留在对口系统——削弱按"必须严过最低档增益"的当量锚验收、伏击按敌方惩罚上限验收、对账由结算闭合;要改初值走接口漂移规则回写登记库(registry),不是随手调参。
|
||||
|
||||
| effect_id | 名称 | side | magnitude(现行值) | duration | stack/max | 来源 | provisional 依据 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
@@ -197,40 +136,113 @@ Active(存续——跨轮次、跨扫雷图延续;换图/刷新不清空,
|
||||
| ambush | 伏击(敌方增益) | enemy | +3 flat | 1 | stack / 16 | mine_hit | 原型临时值 +3;量纲已定稿(B2 GDD——registry ambush_unit_definition);条款 3 锚验收归 B2/B1 |
|
||||
| weaken | 削弱(标中旗 debuff) | enemy | −65 percent(值域 [60, 85]) | 1 | stack / 16 | flag_hit | F0 裁决值——回执以 B1 GDD F0 为准(registry anchor_warning);须过条款 2 锚(严格 > 最低档 buff 当量,B1 对照验收) |
|
||||
|
||||
## 数值结论与推导
|
||||
举证:Rule 10 依据 = A3 F1 条款 2〔debuff 严格 > 最低档 buff 当量,参照对象 = attack_up 行当量〕· 条款 3〔B2 惩罚上限〕· A3 OQ5 收编〔registry ownership_note——A3 GDD 正文不改,以本条 + registry ownership_note 为准〕;初值定稿权归本文档、锚验收权留 B4/B2/B1,是对"档位归奖励表设计"的显式收编。
|
||||
|
||||
> 章节纪律:结论先行(加粗一行),下接「推导」小标题给公式代码块、Variables 表与验算/示例。systems-designer 代理起草(lean 门禁):只含机制公式,平衡归属见显式排除声明。
|
||||
设计意图:机制归容器、数值归表、档位归锚 owner——三方权责不混。
|
||||
|
||||
## 授予、合并与接口
|
||||
|
||||
规则(原编号保留):
|
||||
|
||||
1. **Rule 1** 战斗里不在当场一次性生效、要管上几回结算的效果——主角增益、敌人增益、敌人受到的削弱、清图奖励——全部作为同一种状态实例存进同一个容器,用同一套计时、叠层、衰减规矩管理,没有哪类效果走特殊通道;容器四条硬规矩见下表。
|
||||
2. **Rule 3** 状态只在结算时发放:挖掘期的挖格、插旗、踩雷不直接改容器,棋盘只上报"发生了什么"的事实,结算编排在每轮结算时统一把事实兑换成状态发给容器——这是唯一进货口,棋盘与奖励背包都没有直通通道;每笔状态随身携带归因(来源类别四选一、来自哪个格子、第几轮);状态一经发入立即生效,没有"待生效"中间态,同一场结算就是它的第一次兑付。
|
||||
3. **Rule 4** 同一种状态还没消失时又拿到一份,怎么合并由数据表每行的叠层策略字段说了算——叠加(层数 +1、寿命不动)、刷新(寿命重新计满、层数不变)、并存(各算各的一份);合并在授予那一刻由容器内部完成,多个状态在结算里按什么先后起作用是结算编排的职责,两件事互不干扰;叠加是纯加法——几层就是几倍的行值。
|
||||
4. **Rule 5** 叠加型状态叠到上限再授予同款不生效:容器拒绝、内容一个字不变;但这份奖励不会被无声吞掉——结算明细多一行"溢出未生效"、连来源一起写明;无论重复来自玩家直接踩出的格子、结算转化、还是连锁展开自动开出的奖励格,都走同一个授予入口、同样产生溢出行、同样留痕;不做覆盖、不做溢出落层。
|
||||
5. **Rule 6** 状态容器是纯被动的仓库,自己不主动做任何事;结算编排要用它只有五个固定接口(下表);查询返回按发放先后排列且顺序永远稳定;全部 API 布尔/计数返回、无 await、无表现面。
|
||||
6. **Rule 8** 状态一旦生效,玩家没有任何手段把它摘掉、往后延、或挪给别人——容器没有提供这类接口;将来若要加驱散/延时/转移,属于新增接口的修订,不是调参数。
|
||||
|
||||
容器四条硬规矩:
|
||||
|
||||
| 规矩 | 含义 |
|
||||
|---|---|
|
||||
| 寿命 = 一场战斗 | 战斗开始时容器为空,战斗结束全部清空——不跨到下一场战斗 |
|
||||
| 跨轮、跨图延续 | 同一场战斗里跨轮次、跨扫雷图都在;换图/刷新不清空(旗标记随旧图消亡归棋盘系统 A2 管,状态实例不随图走) |
|
||||
| 全程零随机 | 容器不掷任何骰子:授予、合并、衰减、列举顺序全部确定 |
|
||||
| 敌方侧共享 | MVP 敌人为 1–3 个同种敌单位(敌情系统 B2 定):对敌状态一律对全体存活敌人生效,层数全体共享一份 |
|
||||
|
||||
三向效果映射(授予路径):
|
||||
|
||||
| 事实来源 | source_class | 授予路径 | 目标侧 | MVP 行 |
|
||||
|---|---|---|---|---|
|
||||
| 安全格奖励 | safe_cell | A2 开格事实 → B1 转化 apply_effect | hero | attack_up / defense_up |
|
||||
| 踩雷 | mine_hit | A2 开雷事实 → B1 转化 apply_effect | enemy(side-wide) | ambush |
|
||||
| 标中旗 | flag_hit | A2 标中判定 → B1 转化 apply_effect;兑付资格(雷格实例键)判定在 A3/A2 域——资格判定不过 B3,B3 无从重复兑付同雷(每次 flag_hit 授予由 B1 保证资格合法) | enemy(side-wide) | weaken |
|
||||
| 清图奖励 | clear_reward | B4/B1 清图槽含 buff 时授予(B4 期定稿) | 随行 | B4 差异化插槽(OQ4) |
|
||||
|
||||
按行叠层三分支(stack_policy——授予时合并):
|
||||
|
||||
| stack_policy | 重复授予行为 | 满层/溢出 | MVP 消费 |
|
||||
|---|---|---|---|
|
||||
| stack | 层数 +1(R 不动——只有初始授予定钟) | L=M → 拒绝 false + 容器零写,"溢出未生效"行归 B1 | 四行全用(attack_up/defense_up M=2、ambush/weaken M=16) |
|
||||
| refresh | 剩余次数重置为实例授予时快照 D、层数不变(含 R 已 = D 的空刷新——恒返回 true,无满层/溢出语义、不消费 max_stack) | 无 | 语义已定义、实现承载——MVP 无内容行(零消费者) |
|
||||
| independent | 并存独立实例(append 入列) | 无满层语义——实例数上界 = 受理授予数(有界确定) | 同上 |
|
||||
|
||||
五个固定接口:
|
||||
|
||||
| 接口 | 干什么 | 返回 |
|
||||
|---|---|---|
|
||||
| notify_battle_start() | 告知战斗开始:打开容器、进入可用状态 | 是/否 |
|
||||
| apply_effect(effect_id, source) | 发一笔状态——唯一进货口:受理即新建实例/叠层/刷新 | 是/否 |
|
||||
| query_active(side) | 查询生效状态:某一方当前生效清单,按发放先后排列且顺序永远稳定 | 只读清单 |
|
||||
| decay_round() | 轮末衰减:全部实例寿命 −1、归 0 即销毁 | 本轮移除数 |
|
||||
| notify_battle_end() | 告知战斗结束:全实例清空、容器回空 | 是/否 |
|
||||
|
||||
举证:
|
||||
|
||||
| 编号 | 举证 |
|
||||
|---|---|
|
||||
| Rule 1 | 无计算;"不跨战斗"为 game-concept 定稿口径;多敌共享读法按 registry single_enemy_assumption 登记,现接口零变更兼容 |
|
||||
| Rule 3 | 无计算;授予动作 = apply_effect(五接口之一);四类来源授予路径与目标侧见上表;来源取值封闭枚举见 source_class 表 |
|
||||
| Rule 4 | 三分支逐分支语义见上表;合并执行伪代码见 F1;"有效值 = 层数 × 行值"加算合成见 F2 |
|
||||
| Rule 5 | 无计算(判定 = 一次"层数 == 上限"比较);拒绝原子性(false + 容器逐字不变、无半写无溢出落层)见 F1 Output Range;"溢出未生效"行进结算明细协议由 B1 义务⑧承载、呈现归 B5/D1 |
|
||||
| Rule 6 | 五接口签名见验收标准测试口径;查询返回 = 六归因字段 + display_name + 授予时数值快照 (magnitude, unit) 只读投影(qa-lead 载荷口径);结算作用顺序(哪个效果先乘)归 B1 SettlementTable,B3 只保证枚举确定性;最后一轮(敌人全灭)是否 decay 归 B1 判定次序域——A3 EC8 同款〔末轮 decay 判定次序域〕 |
|
||||
| Rule 8 | 无计算;负空间规则——验收形态 = API 面封闭枚举 + 接口漂移修订门(验收标准测试口径 out-of-scope 行) |
|
||||
|
||||
设计意图:授予单口、合并查表、接口封五——结算编排与效果种类解耦。
|
||||
|
||||
## 时限与衰减
|
||||
|
||||
规则:
|
||||
|
||||
1. **Rule 2** 每个状态实例自带一个倒数计数——剩余结算次数:它不承诺"活几轮",而是数"经历过几次结算",每轮结算先让状态起作用、随后计数减 1,减到 0 状态即被移除;一次性状态(初始计数 = 1)恰好在授予它的那轮结算里生效一次、轮末消失,MVP 四行内容全部是一次性;将来跨轮持续的增益寿命由表行初始值表达——给几就活几次结算;停手不挖的轮、弃图刷新的轮也照常算一次结算、计数照减——不做"不结算就不掉次数"的免费延时。
|
||||
|
||||
时限语义要点(单一结算次数量纲):
|
||||
|
||||
| 要点 | 内容 |
|
||||
|---|---|
|
||||
| 计数量纲 | remaining_settlements(剩余结算次数)——全部状态唯一时限单位 |
|
||||
| 初始值 | duration_settlements = 授予时初始剩余结算次数(实例持有快照、不受表重载影响——EC9) |
|
||||
| 衰减 | 每轮结算兑付后统一 −1(先兑付后衰减——B1 兑付完才调 decay_round);归 0 即移除 |
|
||||
| 一次性 | duration=1 → 授予当轮编排期入容器 → 同轮兑付恰一次 → 轮末移除(MVP 四行全部 D=1——当次结算语义) |
|
||||
|
||||
举证:衰减的精确机制(每轮恰 −1、归 0 即销毁)与"先兑付后衰减"时序契约见 F3。
|
||||
|
||||
设计意图:倒计时单位与"兑付次数"同物——玩家读到的剩余次数就是规划素材本身。
|
||||
|
||||
## 数值结论(F0–F3)
|
||||
|
||||
> 本系统为数学承载系统:公式结论与表达式在此;推导过程、候选取舍与锚定论证全部在推演件。本节只含机制公式,平衡归属见显式排除声明。
|
||||
|
||||
### F0 weaken 锚裁决回执(m_w 值域与归一口径)
|
||||
|
||||
**结论**:m_w 值域 [60, 85]、默认 −65;归一口径 = 每结算瞬时当量(每 AP 总暴露分支被 percent schema 域禁止,排除);地板交叉层数 = ⌈100/m_w⌉ = 2(值域内恒 2);B3 接口零修订、值变更走 registry 回写——**回执以 B1 GDD F0 为准**(registry status_effect.anchor_warning F0 裁决回执)。
|
||||
**结论**:
|
||||
|
||||
#### 推导
|
||||
|
||||
| 分支 | schema 可行性 | 后果 | 裁决 |
|
||||
|---|---|---|---|
|
||||
| 每结算瞬时当量 | 可行(m_w ≥ 51 即过锚——percent 域内) | F2 越域界随移(AP 界 8×m_w / 表界 16×m_w);地板交叉层数 = ⌈100/m_w⌉ = 2;上调的连带成本(地板提前到达、边际层贬值)入裁决 | 采纳 |
|
||||
| 每 AP 总暴露 | 不可行——需 m_w > 100,被 percent ∈ [−100, 100] schema 域禁止 | 现实解 = B4 重定最低档参照(非上调)——未采纳 | 排除 |
|
||||
|
||||
- 同分母性:瞬时口径下 weaken 与 hero 侧 buff 作用于同一伤害流,"严格大于"在百分点读法与 HP 读法下等价,锚判定无量纲歧义;总暴露口径引入时长权重,把 duration knob 泄漏进锚判定。
|
||||
- 机制同构:B3 本就按结算逐次兑付,瞬时口径是容器原生口径;总暴露需跨结算累计账本,与已锁的"单结算自然边界"(dur=1 每结算清零无存量)冲突。
|
||||
- 值域依据(@D_ref=12):下界 60 = 条款 2 两腿可行交集(腿一 m_w ≥ 51——65 > 50 严格大于 attack_up 当量〔参照对象,registry 回迁口径〕;腿二随 E_dig 口径修正放宽——m_w ≥ 38,以 B1 GDD F0 重算回执为准);上界 85 = 超出仅在连锁贫瘠板增加裕度、地板交叉层数恒 2;schema 顶 100 保留为绝对上界。
|
||||
- 红警关闭:原 −25 值在两个独立线性代理下同向预检不过(条款 2 锚差约 4×,且"单一线性换算"堵死分源改率、"无单档上限"堵死 max_stack 豁免)——F0 修订后锚两腿通过(瞬时当量 7.8 > 6.0 严格大于 ✓ / 7.8 ≥ E_dig 4.5 ✓——E_dig 读数随重算批口径更新);终值共裁与 registry 终值确认联动 B1 OQ2(见开放问题 #1)。
|
||||
- m_w 值域 [60, 85]、默认 −65;归一口径 = 每结算瞬时当量(每 AP 总暴露分支被 percent schema 域禁止,排除)
|
||||
- 地板交叉层数 = ⌈100/m_w⌉ = 2(值域内恒 2);B3 接口零修订、值变更走 registry 回写——**回执以 B1 GDD F0 为准**(registry status_effect.anchor_warning F0 裁决回执)
|
||||
- AC-14 腿 3 非平凡性复查通过(16×65 = 1040 越出 percent 域);原 −25 值的裁决关系与修订轨迹见版本历史
|
||||
|
||||
### F1 同 id 叠层合并(same_id_merge,授予时执行)
|
||||
|
||||
**结论**:授予时按行 stack_policy 三分支合并——stack 加层不触碰 R(只有初始授予定钟)、refresh 重置 R 取实例授予时快照 D、independent 并存新实例;满层拒绝原子(false + 容器逐字不变)。
|
||||
|
||||
#### 推导
|
||||
|
||||
```
|
||||
merge(effect_id) —— 前置拒绝(域闭 / 未知 effect_id)沿用 States 节 API 口径,不入分支。
|
||||
merge(effect_id) —— 前置拒绝(域闭 / 未知 effect_id)沿用实例状态节 API 口径,不入分支。
|
||||
行 = StatusEffectTable[effect_id],按 行.stack_policy 三分支:
|
||||
|
||||
independent → 恒新建实例 {L=1, R=D},append 入列(同 id 并存多实例)
|
||||
|
||||
stack → 无存活实例 :新建 {L=1, R=D}
|
||||
有存活实例 ∧ L < M :L ← L+1(R 不动,见注)
|
||||
有存活实例 ∧ L < M :L ← L+1(R 不动——只有初始授予定钟)
|
||||
有存活实例 ∧ L = M :返回 false(满层拒绝;容器零写入,溢出行归 B1 结算明细)
|
||||
|
||||
refresh → 无存活实例 :新建 {L=1, R=D}
|
||||
@@ -238,28 +250,23 @@ merge(effect_id) —— 前置拒绝(域闭 / 未知 effect_id)沿用 States
|
||||
refresh 无满层/溢出语义,不消费 max_stack)
|
||||
```
|
||||
|
||||
注(spec 决议):stack 授予不触碰 R——duration_settlements 只有初始授予定钟;若 stack 也重置 R,则 stack ≡ refresh + 加层,三分支失去区分性。refresh 的重置目标 D 取实例持有的授予时快照(与 EC9 快照语义一致——实例不受表重载影响)。
|
||||
|
||||
**Variables:**
|
||||
|
||||
| 变量 | 符号 | 类型 | 范围 | 说明 |
|
||||
|---|---|---|---|---|
|
||||
| effect_id | e | String | 表主键 | StatusEffectTable 行键;未知 = 拒绝 |
|
||||
| stack_policy | P | enum {stack, refresh, independent} | 表列 | 合并分支选择器(Rule 4) |
|
||||
| stack_policy | P | enum {stack, refresh, independent} | 表列 | 合并分支选择器 |
|
||||
| max_stack | M | int [1, 16] | 表列 | 仅 stack 分支消费;refresh/independent 不读(未来 refresh 行配 M>1 时行为 = 忽略) |
|
||||
| duration_settlements | D | int [1, 99] | 表列 | 新建实例初始 R;refresh 的重置目标即此值 |
|
||||
| layers | L | int | stack 行 [1, M];其余恒 1 | 实例层数(越界 = debug 断言,States 节不变式) |
|
||||
| layers | L | int | stack 行 [1, M];其余恒 1 | 实例层数(越界 = debug 断言,不变式) |
|
||||
| remaining | R | int | 存活态 [1, D] | 剩余结算次数;归 0 移除(F3) |
|
||||
|
||||
- **Output Range:** 正常域——stack/refresh 行同 id 存活实例数 ≤ 1(不变式);independent 行实例数 = 受理授予数(有界确定);返回值 bool。极端行为——满层授予恒 false 且容器逐字不变(拒绝原子性:无半写、无溢出落层);同轮批量授予的先到先得次序由调用方保证(B1 编排须按确定次序调用 apply_effect——B3 只保证插入序枚举稳定,B1 验收项义务①)。
|
||||
- **Example:** attack_up(stack,D_a=1、M=2):轮 3 同轮授予批次两个安全格事实 → apply_effect×2 → L=2、R=1;同轮第 3 个授予 → L=2=M → **false**(明细"溢出未生效"行);兑付 +100%(F2)→ 轮末 decay R=0 移除。weaken(stack,D_w=1、M=16):轮 3 三旗命中三雷(雷格实例键,三次授予均合法)→ L=3、R=1;兑付 3×m_w(默认 65 → −195%)→ decay 移除;轮 4 一旗命中新雷 → 旧实例已销毁,**新建** {L=1, R=1}——dur=1 行的层只在单轮授予批次内累积,跨轮必为新实例。dur ≥ 2 行(策略探针 D_f=3):跨轮 R 逐轮 −1,refresh 腿见 AC-5。
|
||||
- **Output Range:** 正常域——stack/refresh 行同 id 存活实例数 ≤ 1(不变式);independent 行实例数 = 受理授予数(有界确定);返回值 bool。极端行为——满层授予恒 false 且容器逐字不变(拒绝原子性:无半写、无溢出落层);同轮批量授予的先到先得次序由调用方保证(B1 编排须按确定次序调用 apply_effect——B3 只保证插入序枚举稳定,B1 验收项义务①)。验算示例(attack_up / weaken / dur≥2 探针三例)见推演件问题 3。
|
||||
|
||||
### F2 有效值合成(effective_value_composition,兑付时只读)
|
||||
|
||||
**结论**:有效值 = L × m 加算(unit 量纲标签原样随值输出、不进乘法);合成值不 clamp、可越出 percent 域——地板/clamp 归 B1 SettlementTable。
|
||||
|
||||
#### 推导
|
||||
|
||||
```
|
||||
effective_value(实例) = L × m (unit 随行声明,量纲标签原样随值输出、不进乘法)
|
||||
stack 行:L ∈ [1, M];refresh / independent 行:L ≡ 1(每实例恒一倍)
|
||||
@@ -276,15 +283,12 @@ effective_value(实例) = L × m (unit 随行声明,量纲标签原
|
||||
| magnitude | m | int | percent ∈ [-100,100] ∧ ≠0;flat ≥ 1(单行字段域,D2 校验) | 行值;合成值不继承此域(见 Output Range) |
|
||||
| unit | u | enum {percent, flat} | 表列 | 量纲标签;percent = 百分比修正、flat = 固定值;消费语义(乘除侧、地板、单位定义)不在 B3(见排除声明) |
|
||||
|
||||
- **Output Range:** 正常域——percent 行有效值 ∈ [1, 100×M],**可越出 [-100, 100],B3 不 clamp**(合成值地板/clamp 归 B1 SettlementTable——B1 验收项义务③);flat 行 effective ≥ 1。极端行为——weaken 合成下界两档并列:**AP 界 = 8×m_w**(默认 65 → −520%;默认经济下 flag_hit 单轮 ≤ ap_per_round=8 次授予、dur=1 层只在单轮累积 → L=8)与**表界 = 16×m_w**(默认 65 → −1040%;仅非 AP 源如 clear_reward 授予、或 ap_per_round 调参后可达 L=16)——两档均越域,均不在本系统内收口;m_w 值域见 F0。跨 effect_id 聚合、percent 与 flat 混算 = B1 SettlementTable 域(Rule 7)。
|
||||
- **Example:** attack_up L=2 → +100 percent(兑换成 2.0× 与否的读法归 B1);defense_up L=2 → −60 percent(B1 换算 0.4×——现行值链下不触地板,"归零"读法须 B1 定义);weaken L=8 → 8×m_w(默认 −520 percent);ambush L=3 → **+9 flat**(3×m_amb——B3 不解释单位)。
|
||||
- **Output Range:** 正常域——percent 行有效值 ∈ [1, 100×M],**可越出 [-100, 100],B3 不 clamp**(合成值地板/clamp 归 B1 SettlementTable——B1 验收项义务③);flat 行 effective ≥ 1。极端行为——weaken 合成下界两档并列:**AP 界 = 8×m_w**(默认 65 → −520%;默认经济下 flag_hit 单轮 ≤ ap_per_round=8 次授予、dur=1 层只在单轮累积 → L=8)与**表界 = 16×m_w**(默认 65 → −1040%;仅非 AP 源如 clear_reward 授予、或 ap_per_round 调参后可达 L=16)——两档均越域,均不在本系统内收口;m_w 值域见 F0。跨 effect_id 聚合、percent 与 flat 混算 = B1 SettlementTable 域(Rule 7)。验算示例(attack_up/defense_up/weaken/ambush 四例)见推演件问题 5。
|
||||
|
||||
### F3 结算衰减(settlement_decay,轮末执行)
|
||||
|
||||
**结论**:先兑付后衰减——每实例每轮恰 −1、归 0 即销毁(不留 0 值实例)、返回本轮移除数 k;无参数、无豁免实例。
|
||||
|
||||
#### 推导
|
||||
|
||||
```
|
||||
decay_round() -> k:
|
||||
k ← 0
|
||||
@@ -294,7 +298,7 @@ decay_round() -> k:
|
||||
return k
|
||||
```
|
||||
|
||||
时序契约:**先兑付后衰减**——B1 经 query_active(side) 完成本轮兑付后才调用;duration=1 实例的落点由此完整确定 = 授予当轮编排期入容器 → 同轮兑付恰一次 → 轮末 R=0 移除("一次性"语义的全部机制内容)。停手轮/弃图轮同为结算、照常衰减(Rule 2,无免费延时);最后一轮(敌人全灭)是否 decay 归 B1 判定次序域(Rule 6,A3 EC8 同款——battle_end 全清兜底,两种次序产生同终态)。
|
||||
时序契约:**先兑付后衰减**——B1 经 query_active(side) 完成本轮兑付后才调用;duration=1 实例的落点由此完整确定 = 授予当轮编排期入容器 → 同轮兑付恰一次 → 轮末 R=0 移除("一次性"语义的全部机制内容)。停手轮/弃图轮同为结算、照常衰减(无免费延时);最后一轮(敌人全灭)是否 decay 归 B1 判定次序域(A3 EC8 同款——battle_end 全清兜底,两种次序产生同终态)。
|
||||
|
||||
**Variables:**
|
||||
|
||||
@@ -304,12 +308,11 @@ decay_round() -> k:
|
||||
| remaining | R | int | 存活态 [1, D];decay 后 ∈ [0, D−1] | 单调递减;refresh 的 R←D 发生在授予时(F1),不在本式内——两序分离 |
|
||||
| 返回值 | k | int | [0, 容器规模] | 本轮移除数 |
|
||||
|
||||
- **Output Range:** 正常域——每实例每轮恰 −1,无参数、无豁免实例;k ≤ 调用前容器规模。极端行为——空容器 → k=0;全 dur=1 轮 → k=容器规模(全清);R 恒不因 decay 变负(归 0 即销毁,不留 0 值实例——与不变式 remaining ∈ [0, D] 相容)。
|
||||
- **Example:** 轮 3:编排期授予 attack_up(L=1、R=D_a=1)→ 兑付 +50% → decay_round()=1(移除);轮 4 query_active(hero) 已不含 attack_up。dur ≥ 2 行(策略探针 D_f=3):授予后逐轮兑付、R 逐轮 −1、第 3 轮末移除——R 轨迹与 k 全由表读值推导。
|
||||
- **Output Range:** 正常域——每实例每轮恰 −1,无参数、无豁免实例;k ≤ 调用前容器规模。极端行为——空容器 → k=0;全 dur=1 轮 → k=容器规模(全清);R 恒不因 decay 变负(归 0 即销毁,不留 0 值实例——与不变式 remaining ∈ [0, D] 相容)。验算示例(轮 3 授予-兑付-移除全落点与 dur≥2 探针 R 轨迹)见推演件问题 2。
|
||||
|
||||
### 显式排除声明(R4 式)
|
||||
### 显式排除声明
|
||||
|
||||
本 GDD **无平衡公式**——F1–F3 只承载机制数学(合并/合成/衰减),不含任何"值该多大"的判断;四行 MVP 值全部 provisional(Rule 10)。平衡与语义归属逐一列明:
|
||||
本 GDD **无平衡公式**——F1–F3 只承载机制数学(合并/合成/衰减),不含任何"值该多大"的判断;四行 MVP 值全部 provisional。平衡与语义归属:
|
||||
|
||||
| 对象 | 归属 | 依据 |
|
||||
|---|---|---|
|
||||
@@ -317,63 +320,47 @@ decay_round() -> k:
|
||||
| weaken 档位锚(debuff 当量严格 > 最低档安全格 buff 当量,参照对象 = attack_up 行当量;基准 = 连锁放大边际挖掘收益,provisional 1:1) | **B4 表设计 + B1 对照验收** | A3 F1 条款 2 |
|
||||
| 挖掘风险不等式(P(安全)×buff 当量下界 > P(雷)×敌方增益当量上界;B2 惩罚上限表值) | **B2 供给上限表值,B1 单一闭合对账** | A3 F1 条款 3 |
|
||||
| 奖励定价(清图奖励及 B4 三硬约束:雾内档位下界 / 锚随雾成本上浮 / 净当量优势带上界) | **B4** | A4 pricing_constraints;A3 F1 条款 4/5 |
|
||||
| percent 的消费侧换算与地板(乘除侧读法、合成值越域 clamp);flat 的量纲定义 | percent → **B1 SettlementTable**(Rule 7);flat 量纲 → **B2**(已定稿——registry ambush_unit_definition:每层伏击为每次攻击类行为附加 3 点主角 HP 伤害、后置加法) | Rule 7 + F2 Output Range;Schema 说明列 |
|
||||
| MVP 四行初值定稿权 | **B3**(Rule 10);B4/B2/B1 持锚验收权,修订走接口漂移回写 registry | Rule 10 |
|
||||
| percent 的消费侧换算与地板(乘除侧读法、合成值越域 clamp);flat 的量纲定义 | percent → **B1 SettlementTable**;flat 量纲 → **B2**(已定稿——registry ambush_unit_definition:每层伏击为每次攻击类行为附加 3 点主角 HP 伤害、后置加法) | F2 Output Range;schema 说明列 |
|
||||
| MVP 四行初值定稿权 | **B3**;B4/B2/B1 持锚验收权,修订走接口漂移回写 registry | Rule 10 |
|
||||
|
||||
B3 只对"L×m 线性合成 + R 计数"负责:合成值多大算强、多弱算废、floor 在哪、+3 打谁——均不在本 GDD 语义域。
|
||||
规则:
|
||||
|
||||
## 状态
|
||||
1. **Rule 7** 容器只记录每个状态的量(幅度数值 + 量纲标签:百分比还是固定值)和还剩几次结算——"增伤加在哪个算式上、先乘后乘、地板怎么收"一律由结算编排的顺序映射表按状态 id 作答;容器知道"现在还有 +50、还剩 1 次结算",不知道这 +50 会变成主角攻击里的什么;B3 只对"L×m 线性合成 + R 计数"负责,合成值多大算强、floor 在哪、+3 打谁,均不在本 GDD 语义域。
|
||||
|
||||
容器为**纯逻辑类**(非 autoload、无场景依附),每场战斗实例化一次(B1 编排前提;冒烟经 class_name 直引构造)。容器无运行时大状态机——实例生命周期四态(战斗域):
|
||||
|
||||
| 状态 | 进入条件 | 行为/出口 |
|
||||
|---|---|---|
|
||||
| BattleClosed(域闭) | 构造后未开域 / notify_battle_end() 后 | apply_effect 全拒绝(false);唯一出口 notify_battle_start() |
|
||||
| Active(存续) | apply_effect 受理(新实例/叠层/刷新) | 每轮结算被 B1 兑付消费;decay_round() 后 remaining −1 |
|
||||
| Expired(移除) | remaining_settlements = 0 | 实例销毁(明细流水已由 B1 记录,B3 不留历史) |
|
||||
| Cleared(清空) | notify_battle_end() | 全实例销毁、容器回空 → BattleClosed(不跨战斗) |
|
||||
|
||||
不变式(debug 断言口径):remaining ∈ [0, duration_settlements];stack 行 layers ∈ [1, max_stack];stack/refresh 策略下同 id 至多一个实例——违反即 debug 断言中止;API 违规(域闭授予、未知 effect_id、满层授予)= 拒绝(false)+ debug 诊断,不进程致命(承 A3 拒绝口径;进程致命保留给 D2 数据通道)。
|
||||
举证:Rule 7 无计算;语义映射承载面 = B1 SettlementTable(effect_id 为键);B3 只承载 magnitude/unit 两个通用数值字段。
|
||||
|
||||
## 边界情况
|
||||
|
||||
| 条件 | 行为 | 依据 |
|
||||
|---|---|---|
|
||||
| EC1 域闭状态授予(BattleClosed 下 apply_effect) | 拒绝(false)、容器不变 + debug 诊断——B1 过早/过晚调用 = 编排错误显式暴露,不静默吞 | States 节 API 口径 |
|
||||
| EC2 未知 effect_id | 拒绝(false)+ debug 诊断;表行删除/改名后旧引用的暴露点——悬空引用加载校验 = 首引激活条款:B4 RewardTable 首个 effect_id 引用已回填、校验已激活(registry dangling_ref_policy;条件性夹具 = B4 b4_dangling_effect) | A4 counter_item_ids 同款 · D2 首引兑现 |
|
||||
| EC3 满层授予 | 恒 false 且容器逐字不变(拒绝原子性——无半写、无溢出落层);"溢出未生效"行归 B1 结算明细;同轮多授予谁被拒取决于 B1 授予次序——授予次序确定性是 B1 编排义务 | F1 Output Range · Rule 5 · 义务① |
|
||||
| EC4 空刷新(refresh 行 R 已 = D 再授予) | 返回 true、无任何变化——合法空操作(refresh 无满层/溢出语义);MVP 无 refresh 内容行 = 该语义零消费者,首个 refresh 行上线时须补冒烟 AC;空刷新静默返 true 与 Rule 5"不静默蒸发"存在原则张力(stack 有溢出行、refresh 无对应物)——MVP 零消费者故休眠,首个 refresh 内容行上线时其授予可见性语义由 B4/B1 随 OQ3 一并裁决 | F1 决议 · systems-index 登记 |
|
||||
| EC5 同轮 dur=1 行多次授予 | 层在单轮授予批次内累积(L=N)→ 同轮兑付一次(合成 L×m)→ 轮末全移除;跨轮必为新实例——"N 旗 = N debuff 总吞吐"在 B3 侧的呈现 = 单轮层和,对账归 B1 | F1 Example · A3 条款 2 |
|
||||
| EC6 同一事实被重复授予(同 effect_id + origin_cell + round_index 两次 apply) | B3 不去重——容器是 dumb 账本,无从辨别事实合法性,两次授予 = 两层/两实例;事实→授予的恰一次转化归 B1 编排义务(round_end 双发射源同族问题,A3 先例) | 义务② |
|
||||
| EC7 合成值越域(L×m 越出 [-100, 100] 或穿越地板) | B3 不 clamp、值 + unit 标签原样输出——收口归 B1 SettlementTable(B1 验收项:percent→乘数换算方向与地板规则须成文——weaken AP 界/表界、defense_up 叠满三例已在 F2 登记) | F2 Output Range · 义务③ |
|
||||
| EC8 清图换图/弃图刷新 | 容器不清空——状态跨图延续(战斗域非图域);旗标记随图消亡(A2 域)不影响已授予实例;已消费兑付资格的雷格随图消亡(A3 域),新图新雷自然新资格——B3 无从感知也无须感知 | Rule 1 · AC-10 |
|
||||
| EC9 战斗中热重载 StatusEffectTable | 走 D2 既有门(战斗中 reload 拒绝);已授予实例不受任何表重载影响——实例在授予时从表行拷贝数值快照(m/D/unit),热重载只影响后续授予 | A4 EC8"快照非活引用"同款 |
|
||||
| EC10 refresh/independent 行配置 max_stack > 1 | 行为 = 忽略(F1 分支不读 M)——内容约定非校验项,validate() 不拒绝(防过度约束锁死未来内容) | F1 · AC-13 |
|
||||
| EC11 notify_battle_start / notify_battle_end 重复或错序 | Active 下再 start → false + 诊断;BattleClosed 下再 end → false + 诊断(bool 口径统一,承 A3 输入×相位矩阵同款) | A3 同款 |
|
||||
| EC12 query_active 空 side 或空容器 | 返回空 Array——合法状态非错误;D1 HUD 据此渲染"无状态" | D1 空态义务 |
|
||||
| EC13 decay_round 在域闭时被调用 | 返回 0——域闭时容器恒空(battle_end 已清),0 是自然结果、无独立分支、不诊断(幂等安全的兜底读法) | F3 极端域 |
|
||||
| EC14 independent 行被高频授予 | 实例数上界 = 受理授予数(有界、确定,无满层语义)——MVP 无此内容行;未来 DOT 类高频授予的容量语义归扩展(接口漂移),本 GDD 不预写 | F1 Output Range |
|
||||
| 编号 | 条件 | 行为 | 依据 |
|
||||
|---|---|---|---|
|
||||
| EC1 | 域闭状态授予(BattleClosed 下 apply_effect) | 拒绝(false)、容器不变 + debug 诊断——B1 过早/过晚调用 = 编排错误显式暴露,不静默吞 | 实例状态节 API 口径 |
|
||||
| EC2 | 未知 effect_id | 拒绝(false)+ debug 诊断;表行删除/改名后旧引用的暴露点——悬空引用加载校验 = 首引激活条款:B4 RewardTable 首个 effect_id 引用已回填、校验已激活(registry dangling_ref_policy;条件性夹具 = B4 b4_dangling_effect) | A4 counter_item_ids 同款 · D2 首引兑现 |
|
||||
| EC3 | 满层授予 | 恒 false 且容器逐字不变(拒绝原子性——无半写、无溢出落层);"溢出未生效"行归 B1 结算明细;同轮多授予谁被拒取决于 B1 授予次序——授予次序确定性是 B1 编排义务 | F1 Output Range · Rule 5 · 义务① |
|
||||
| EC4 | 空刷新(refresh 行 R 已 = D 再授予) | 返回 true、无任何变化——合法空操作(refresh 无满层/溢出语义);MVP 无 refresh 内容行 = 该语义零消费者,首个 refresh 行上线时须补冒烟 AC;空刷新静默返 true 与 Rule 5"不静默蒸发"存在原则张力——MVP 零消费者故休眠,首个 refresh 内容行上线时其授予可见性语义由 B4/B1 随 OQ3 一并裁决 | F1 决议 · systems-index 登记 |
|
||||
| EC5 | 同轮 dur=1 行多次授予 | 层在单轮授予批次内累积(L=N)→ 同轮兑付一次(合成 L×m)→ 轮末全移除;跨轮必为新实例——"N 旗 = N debuff 总吞吐"在 B3 侧的呈现 = 单轮层和,对账归 B1 | F1 Example · A3 条款 2 |
|
||||
| EC6 | 同一事实被重复授予(同 effect_id + origin_cell + round_index 两次 apply) | B3 不去重——容器是 dumb 账本,无从辨别事实合法性,两次授予 = 两层/两实例;事实→授予的恰一次转化归 B1 编排义务(round_end 双发射源同族问题,A3 先例) | 义务② |
|
||||
| EC7 | 合成值越域(L×m 越出 [-100, 100] 或穿越地板) | B3 不 clamp、值 + unit 标签原样输出——收口归 B1 SettlementTable(B1 验收项:percent→乘数换算方向与地板规则须成文——weaken AP 界/表界、defense_up 叠满三例已在 F2 登记) | F2 Output Range · 义务③ |
|
||||
| EC8 | 清图换图/弃图刷新 | 容器不清空——状态跨图延续(战斗域非图域);旗标记随图消亡(A2 域)不影响已授予实例;已消费兑付资格的雷格随图消亡(A3 域),新图新雷自然新资格——B3 无从感知也无须感知 | Rule 1 · AC-10 |
|
||||
| EC9 | 战斗中热重载 StatusEffectTable | 走 D2 既有门(战斗中 reload 拒绝);已授予实例不受任何表重载影响——实例在授予时从表行拷贝数值快照(m/D/unit),热重载只影响后续授予 | A4 EC8"快照非活引用"同款 |
|
||||
| EC10 | refresh/independent 行配置 max_stack > 1 | 行为 = 忽略(F1 分支不读 M)——内容约定非校验项,validate() 不拒绝(防过度约束锁死未来内容) | F1 · AC-13 |
|
||||
| EC11 | notify_battle_start / notify_battle_end 重复或错序 | Active 下再 start → false + 诊断;BattleClosed 下再 end → false + 诊断(bool 口径统一,承 A3 输入×相位矩阵同款) | A3 同款 |
|
||||
| EC12 | query_active 空 side 或空容器 | 返回空 Array——合法状态非错误;D1 HUD 据此渲染"无状态" | D1 空态义务 |
|
||||
| EC13 | decay_round 在域闭时被调用 | 返回 0——域闭时容器恒空(battle_end 已清),0 是自然结果、无独立分支、不诊断(幂等安全的兜底读法) | F3 极端域 |
|
||||
| EC14 | independent 行被高频授予 | 实例数上界 = 受理授予数(有界、确定,无满层语义)——MVP 无此内容行;未来 DOT 类高频授予的容量语义归扩展(接口漂移),本 GDD 不预写 | F1 Output Range |
|
||||
|
||||
## 依赖
|
||||
## 依赖与输出
|
||||
|
||||
**上游**(Foundation 层,无其他玩法上游):
|
||||
|
||||
| 系统 | 性质 | 接口要点 |
|
||||
|---|---|---|
|
||||
| D2 | hard(数据通道) | StatusEffectTable schema 承载 + ConfigDB 读取;本 GDD 为该表回填 owner(schema + 四行已定稿);新字段走接口漂移规则。systems-index 分层表按其惯例不列纯数据读取边(事实依赖同口径)——两处相容非矛盾 |
|
||||
|
||||
**下游**:
|
||||
|
||||
| 依赖方 | 性质 | 接口要点 |
|
||||
|---|---|---|
|
||||
| B1 | hard | 结算编排期调用五 API:notify_battle_start / apply_effect(三源授予——B1 从 A2/A3 事件收集 round facts 后转化)/ query_active(side) 兑付消费 / decay_round() 轮末衰减 / notify_battle_end() 清空;结算明细来源标注数据源 = 实例字段(P2);效果语义映射与结算作用顺序归 B1 SettlementTable(effect_id 键);F1 条款 1 对照表的"实物"供给方;最后一轮 decay 与否归 B1 判定次序域;义务清单 8 项见下表 |
|
||||
| B4 | soft | 安全格 buff 行值与 weaken 档位的锚验收权(条款 2 + A4 三定价硬约束引用"最低档安全格 buff 当量"——参照对象 = attack_up 行当量);清图奖励若含 buff 经 apply_effect(source=clear_reward,B4 期定);RewardTable 引用 effect_id 的悬空校验已随首引激活(EC2) |
|
||||
| B2 | soft | ambush 行量纲/上限验收锚(条款 3:B2 惩罚上限表 vs B3 行值,对账归 B1 闭合;量纲已定稿——registry ambush_unit_definition);未来敌人词条引用状态(免疫/抗性)为预留注记,不预写 |
|
||||
| A3 | 契约相邻(零运行时接口) | A3 不调用 B3;条款 1 四源当量对照以 B3 实例为对照实物;标中旗兑付资格(雷格实例键)判定在 A3/A2 域,B3 只接收 B1 转化的授予——资格判定不过 B3 |
|
||||
| A2 | 间接(零直接接口) | 开格/标中/开雷事实经事件 → B1 收集 → apply_effect;A2 不感知状态容器 |
|
||||
| D1 | soft | query_active(hero) 为 HUD 状态栏数据源(display_name/层数/剩余结算次数常显;EC12 空态渲染);层数/到期变化反馈——义务清单 ×4 见下表 |
|
||||
| B5 | soft | 结算明细/战斗动画的实例字段数据源(经 B1 结算流水;MVP 明细行即呈现,动画归垂直切片)——义务 ×2 见下表 |
|
||||
| D5 | soft | 教学口径:按结算次数计时("还剩 N 次结算"式读法随行值)、战斗结束全清(防"我的 buff 哪去了"误读——A3 RAP 清零教学同款)、满层溢出浪费提示、"同轮拿满优于跨轮叠"教学项(stack 时序补偿——OQ7 证伪项配套,证伪成立前以中性提示形态) |
|
||||
| 方向 | 系统 | 性质 | 接口要点 |
|
||||
|---|---|---|---|
|
||||
| 上游 | D2 | hard(数据通道) | StatusEffectTable schema 承载 + ConfigDB 读取;本 GDD 为该表回填 owner(schema + 四行已定稿);新字段走接口漂移规则。systems-index 分层表按其惯例不列纯数据读取边(事实依赖同口径)——两处相容非矛盾 |
|
||||
| 下游 | B1 | hard | 结算编排期调用五 API:notify_battle_start / apply_effect(三源授予——B1 从 A2/A3 事件收集 round facts 后转化)/ query_active(side) 兑付消费 / decay_round() 轮末衰减 / notify_battle_end() 清空;结算明细来源标注数据源 = 实例字段(P2);效果语义映射与结算作用顺序归 B1 SettlementTable(effect_id 键);F1 条款 1 对照表的"实物"供给方;最后一轮 decay 与否归 B1 判定次序域;义务清单 8 项见下表 |
|
||||
| 下游 | B4 | soft | 安全格 buff 行值与 weaken 档位的锚验收权(条款 2 + A4 三定价硬约束引用"最低档安全格 buff 当量"——参照对象 = attack_up 行当量);清图奖励若含 buff 经 apply_effect(source=clear_reward,B4 期定);RewardTable 引用 effect_id 的悬空校验已随首引激活(EC2) |
|
||||
| 下游 | B2 | soft | ambush 行量纲/上限验收锚(条款 3:B2 惩罚上限表 vs B3 行值,对账归 B1 闭合;量纲已定稿——registry ambush_unit_definition);未来敌人词条引用状态(免疫/抗性)为预留注记,不预写 |
|
||||
| 相邻 | A3 | 契约相邻(零运行时接口) | A3 不调用 B3;条款 1 四源当量对照以 B3 实例为对照实物;标中旗兑付资格(雷格实例键)判定在 A3/A2 域,B3 只接收 B1 转化的授予——资格判定不过 B3 |
|
||||
| 相邻 | A2 | 间接(零直接接口) | 开格/标中/开雷事实经事件 → B1 收集 → apply_effect;A2 不感知状态容器 |
|
||||
| 下游 | D1 | soft | query_active(hero) 为 HUD 状态栏数据源(display_name/层数/剩余结算次数常显;EC12 空态渲染);层数/到期变化反馈——义务清单 ×4 见下表 |
|
||||
| 下游 | B5 | soft | 结算明细/战斗动画的实例字段数据源(经 B1 结算流水;MVP 明细行即呈现,动画归垂直切片)——义务 ×2 见下表 |
|
||||
| 下游 | D5 | soft | 教学口径:按结算次数计时("还剩 N 次结算"式读法随行值)、战斗结束全清(防"我的 buff 哪去了"误读——A3 RAP 清零教学同款)、满层溢出浪费提示、"同轮拿满优于跨轮叠"教学项(stack 时序补偿——OQ7 证伪项配套,证伪成立前以中性提示形态) |
|
||||
|
||||
### B1 侧义务清单(登记 B1 GDD 验收项,缺项即 blocking——A4 对 A1/A2 登记先例)
|
||||
|
||||
@@ -401,15 +388,6 @@ B3 只对"L×m 线性合成 + R 计数"负责:合成值多大算强、多弱
|
||||
| D5 | "同轮拿满优于跨轮叠"教学项(OQ7 证伪项配套) | D5 | 已登记 |
|
||||
| B4 | 奖励身份预读(stack 时序规划的推理原料——创意风险 #1 切面,OQ7 配套补偿载体) | B4 | 已登记 |
|
||||
|
||||
### 一致性核对与注记
|
||||
|
||||
| 项 | 内容 |
|
||||
|---|---|
|
||||
| 双向一致性 | B4 ← A2, B3, D2 ✓ · B1 ← A3, B2, B3, B4, D2 ✓ · B3 ∈ Foundation、无上游 ✓(systems-index 依赖分层表) |
|
||||
| B2 无边说明 | 索引无 B2←B3 边与上表 B2 行不矛盾——敌方状态的承载在 B3,但授予路径经 B1,B2 与 B3 之间是验收锚关系非运行时依赖,故不列边 |
|
||||
| D2 hard 措辞 | "hard"指 ConfigDB 读表的数据通道事实依赖(registry config_db referenced_by=[all-systems] 同口径);索引分层表不列纯数据读取边——相容非矛盾 |
|
||||
| Rule 10 回写 | 对 A3 OQ5"档位归 B4 表设计"的收编(初值定稿权归 B3、锚验收权留 B4/B1)已回写 systems-index 门禁记录与 registry ownership_note |
|
||||
|
||||
### 呈现与 UI 契约(数据面义务——B3 无自有渲染面,呈现归 D1/B5)
|
||||
|
||||
| # | 数据面义务 | 归属 |
|
||||
@@ -419,38 +397,43 @@ B3 只对"L×m 线性合成 + R 计数"负责:合成值多大算强、多弱
|
||||
| 3 | 视觉身份锚适用(game-concept):数值可读性优先于氛围(锚 1)——状态数值在暗色底上须高对比;增益/削弱图标不得只靠色相区分(锚 2 形状+颜色双通道);有利/有害极性不得由 magnitude 符号推导(负值增益存在——数据源 = B1 SettlementTable 效果语义) | D1 |
|
||||
| 4 | 零信号外发:纯被动容器不发任何事件——呈现刷新点 = B1 结算编排完成后的界面刷新(D1/B5 域);到期/层数变化反馈经 decay 前后查询差分或 B1 流水(D1 裁决);无音频需求(到期/叠加音效归 D4 Alpha 期) | D1/B5/D4 |
|
||||
|
||||
## Tuning Knobs
|
||||
## P0 最小闭环
|
||||
|
||||
### StatusEffectTable schema(D2 承载,B3 回填 owner——Rule 4 豁免:定义表非进度成长表,无 (level_index, node_depth) 维度;未来随关卡成长的效果走接口漂移加列,A4 先例)
|
||||
1. B1 战斗开始调 notify_battle_start()——容器开域(空容器)。
|
||||
2. A2 开格/标中/开雷事件 → B1 收集 round facts → 转化 apply_effect(唯一进货口)。
|
||||
3. 容器按表行 stack_policy 合并受理(新建/叠层/刷新),实例即入 Active、携六归因字段与授予时数值快照。
|
||||
4. B1 每轮 query_active(side) 只读兑付——有效值 = L×m(快照)加算合成。
|
||||
5. 轮末 B1 调 decay_round():全实例 R−1、归 0 到期销毁(先兑付后衰减)。
|
||||
6. 域闭/未知 id/满层授予被拒(false + 容器零写),"溢出未生效"行归 B1 结算明细。
|
||||
7. B1 战斗结束调 notify_battle_end():全实例清空、容器回空 → BattleClosed,不跨战斗。
|
||||
|
||||
| 字段 | 类型/范围 | 说明 |
|
||||
## P1 / P2 后置
|
||||
|
||||
| 优先级 | 内容 | 后置原因 |
|
||||
|---|---|---|
|
||||
| effect_id | String(主键唯一) | 状态标识;B1 SettlementTable 语义映射的键 |
|
||||
| display_name | String | 图例/HUD/明细用名(本地化归 D6) |
|
||||
| target_side | enum {hero, enemy} | 作用侧(enemy 侧 side-wide = 全体存活敌单位) |
|
||||
| magnitude | int | 域随 unit:percent ∈ [-100, 100] 且 ≠0 / flat ≥ 1(跨字段校验) |
|
||||
| unit | enum {percent, flat} | percent = 百分比修正;flat = 固定值(伏击类) |
|
||||
| duration_settlements | int [1, 99] | 授予时初始剩余结算次数(一次性 = 1) |
|
||||
| stack_policy | enum {stack, refresh, independent} | 同 id 重复授予的合并策略(Rule 4) |
|
||||
| max_stack | int [1, 16] | 层数上限;仅 stack 消费——refresh/independent 行约定恒 1(内容约定,非校验项) |
|
||||
| P1 | refresh / independent 首批内容行启用(语义已定义、实现已承载;首个 refresh 行上线时补真实内容行冒烟 AC、夹具探针退役,授予可见性语义随 OQ3 由 B4/B1 裁决) | MVP 四行全 stack、非 stack 语义零消费者——待奖励池引入非 stack 行(B4 期) |
|
||||
| P1 | clear_reward 源授予路径确认(清图槽含 buff 时经 apply_effect,source=clear_reward;A3 条款 4 差异化插槽——OQ4) | B4 期定稿 |
|
||||
| P1 | target_ref 单体寻址列(首个单体效果上线时补列;随批 B1 归集语义 / D1 呈现裁决——registry single_enemy_assumption 扩展位义务) | MVP 敌情 side-wide 语义够用,无单体效果内容行 |
|
||||
| P2 | 驱散 / 延时 / 转移接口(Rule 8 负空间) | 省掉一整类界面与规则复杂度是明确的设计决定;新增 = 接口漂移修订,非调参 |
|
||||
| P2 | independent 行高频授予(DOT 类)的容量语义(EC14——实例数上界 = 受理授予数,有界确定) | MVP 无此内容行;归扩展(接口漂移),本 GDD 不预写 |
|
||||
| P2 | 敌人词条引用状态(免疫/抗性) | 预留注记,不预写(B2 域随批裁决) |
|
||||
| P2 | 随关卡成长的效果行((level_index, node_depth) 维度) | 定义为表非进度成长表(Rule 4 豁免);需要时走接口漂移加列,A4 先例 |
|
||||
|
||||
加载校验(表非空——D2 Rule 6,四行即满足):effect_id 唯一(重复键致命——本表唯一致命夹具 dup_key);枚举域校验(target_side/unit/stack_policy 出域致命);duration/max_stack 域校验;跨字段 percent ≠ 0 / flat ≥ 1。
|
||||
## 调参表
|
||||
|
||||
**F0 裁决回执注记(m_w)**:weaken.magnitude 现行值域 [60, 85]、默认 −65——**回执以 B1 GDD F0 为准**(registry status_effect.anchor_warning);F2 越域界随移 AP 界 −520% / 表界 −1040%;AC-14 腿 3 非平凡性复查通过(16×65 = 1040 越出 percent 域)。原 −25 值的裁决关系与修订轨迹见版本历史。
|
||||
|
||||
### Knob 表
|
||||
|
||||
| Knob(表行值,D2 承载) | 默认 | 调过高 | 调过低 |
|
||||
|---|---|---|---|
|
||||
| attack_up.magnitude | +50 | 叠满 +100%,敌方 HP 池相对贬值(战斗时长曲线压向 B1 对账) | 安全格奖励空心化——A3 条款 3 左臂(P(安全)×buff)塌方 |
|
||||
| defense_up.magnitude | −30 | 叠满 −60%(免伤轮不再由 defense_up 单侧可达——B1 地板规则压力同步解除) | 减伤无感,防御型奖励萎缩(回调下界 = 减伤墙复发——观测锚 = C3 承伤带复验与 B1 条款③重跑) |
|
||||
| weaken.magnitude | −65(值域 [60, 85]) | 越域界加深(表界 16×m_w)、地板交叉层数 ⌈100/m_w⌉ 恒 2、边际层贬值 | 值域下界 60 = 条款 2 锚两腿可行交集——越界即破锚(修订方向 B4/B1 裁决) |
|
||||
| ambush.magnitude | +3 flat | 量纲已定稿(每攻击类行为 +3 HP)——踩雷痛感随值放大,条款 3 上限对账归 B1 | 踩雷无痛感——P3"风险与收益同源"失衡 |
|
||||
| duration_settlements(四行) | 1/1/1/1(当次结算) | 窗口拉长恢复跨轮延续(规划变简单、衰减感消失) | 已在下界 1(一次性语义——再低无定义) |
|
||||
| max_stack(四行) | 2/2/16/16 | 合成越域幅度增大(B1 地板压力↑) | 叠层机制边缘化(重复奖励变溢出浪费) |
|
||||
| 字段 | 域 | 默认 | owner | 说明 |
|
||||
|---|---|---|---|---|
|
||||
| attack_up.magnitude | percent ∈ [-100,100] 且 ≠0 | +50(provisional——原型 1.5× 换算占位) | B3 定稿;B4/B1 锚验收 | 条款 2 锚参照对象;消费面 = 主角战斗段先手攻击 |
|
||||
| defense_up.magnitude | percent ∈ [-100,100] 且 ≠0 | −30(provisional——减伤墙批 C3 投值,原 −50) | B3 定稿;B4/B1 锚验收 | 叠满两层 −60 帽;禁独立调参(联动网络见下) |
|
||||
| ambush.magnitude | flat ≥ 1 | +3(provisional——原型临时值) | B3 定稿;B2/B1 锚验收(条款 3) | 量纲已定稿(B2):每层每攻击类行为附加 m_amb 点主角 HP、后置加法、charge 拍零兑付 |
|
||||
| weaken.magnitude | percent ∈ [-100,100] 且 ≠0 | −65(provisional,值域 [60, 85]——F0 裁决) | B3 定稿;终值 B4/B1 共裁 | 回执以 B1 GDD F0 为准(registry anchor_warning);越界即破条款 2 锚 |
|
||||
| duration_settlements(四行) | int [1, 99] | 1/1/1/1(当次结算;provisional) | B3 | 一次性语义;窗口拉长 = 恢复跨轮延续(规划变简单、衰减感消失) |
|
||||
| max_stack(四行) | int [1, 16] | 2/2/16/16(provisional) | B3 | 仅 stack 消费;调低 = 叠层机制边缘化(重复奖励变溢出浪费) |
|
||||
|
||||
- **非 knob(结构冻结)**:stack_policy 三分支语义、unit 语义、source_class 枚举、时限量纲 = 剩余结算次数(game-concept 定稿)、先兑付后衰减时序、拒绝原子性、零随机——修订走本 GDD 流程非调参。
|
||||
- **Knob 交互**:attack_up 与 weaken 是条款 2/3 对账的**两端**——禁止独立调参,联动评估归 B1 闭合对账;A3 的 ap_per_round 是 weaken 单轮层和的经济上限(F2 AP 界 8×m_w 的来源);效果档位当量对照表(B1)落定前,四行 magnitude 的任何调整都须**重跑条款 2/3 锚预检**并同步 registry(接口漂移义务)。defense_up 叠满 −60% = 当次结算 0.4× 承伤(消费读法归 B1);减伤窗口强度与 attack_up 同入 B1 对账联动评估(B1 地板规则 × 战斗时长曲线 × 条款③ V_safe),禁止独立调参——defense_up.magnitude/duration 已纳入"禁独立调参"联动网络(m_w↔D_ref↔m_d↔duration_d,与 B1 Knob 交互同口径);减伤墙批(−50→−30)即该联动的实证回调(免伤轮现行可达路径 = weaken 饱和,见 F2)。
|
||||
- **Knob 交互**:attack_up 与 weaken 是条款 2/3 对账的两端——禁止独立调参,联动评估归 B1 闭合对账;A3 的 ap_per_round 是 weaken 单轮层和的经济上限(F2 AP 界 8×m_w 的来源);效果档位当量对照表(B1)落定前,四行 magnitude 的任何调整都须重跑条款 2/3 锚预检并同步 registry(接口漂移义务)。
|
||||
- defense_up.magnitude/duration 已纳入"禁独立调参"联动网络(m_w↔D_ref↔m_d↔duration_d,与 B1 Knob 交互同口径);减伤墙批(−50→−30)即该联动的实证回调;defense_up 叠满 −60% = 当次结算 0.4× 承伤(消费读法归 B1);免伤轮现行可达路径 = weaken 饱和(见 F2)。
|
||||
- 逐 knob 调过高/调过低的后果论证见推演件。
|
||||
|
||||
## 验收标准
|
||||
|
||||
@@ -463,12 +446,12 @@ B3 只对"L×m 线性合成 + R 计数"负责:合成值多大算强、多弱
|
||||
| 返回口径 | 全部布尔/计数返回 = 受理/拒绝(A3 全 API 布尔口径同款)——"拒绝"直接断言返回值,附 debug 诊断、非进程致命(承 A3 拒绝口径;进程致命保留给 D2 数据通道);decay_round 返回值 = 本轮移除数断言;apply_effect 是唯一授予入口(Rule 3),冒烟直接构造合法 source = {source_class, origin_cell, round_index}(B1 转化产物的冒烟等价——信任方向同 A3 对 chain_size/clears_map 的处理);query_active 为只读、任意相位合法 |
|
||||
| 只读观测量 | 实例六字段 effect_id · layers · remaining_settlements · source_class · origin_cell · round_index;query_active(side) 元素 = 结算面向载荷投影:六字段 + display_name + 授予时数值快照 (magnitude, unit)(EC9 快照语义 + B5/D1 数据源)——有效值 = layers × 快照 magnitude、unit 标签原样随值输出(F2);枚举序 = 插入序(Rule 6)。相位无字段观测量:BattleClosed/Active 由 API 返回值推断;Expired/Cleared 为销毁态不可观测(瞬态纪律同 A3 RoundEnd) |
|
||||
| 时序口径 | B3 无 round_start/settlement API——"轮边界"在冒烟中 = 相邻两次 decay_round() 调用之间的授予/查询窗口(B1 编排在 B3 侧的可见面恰为这五个 API);多步 GIVEN 均给出构造序列 |
|
||||
| 期望值纪律 | magnitude / duration_settlements / max_stack 均为 knob(Tuning Knobs 节)——各 AC 的 THEN 具体数值按当前 ConfigDB 表值推导、不写死(正文以 D_a / M_a / m_w 等表读值记号书写);结构字段(effect_id 集合、target_side、unit、stack_policy)非 knob、定值断言合法;行表"来源"列为内容档案(provenance)非 schema 字段、非运行时约束——B3 不校验 source_class 与行的对应(EC6 dumb 账本同族) |
|
||||
| 期望值纪律 | magnitude / duration_settlements / max_stack 均为 knob(调参表节)——各 AC 的 THEN 具体数值按当前 ConfigDB 表值推导、不写死(正文以 D_a / M_a / m_w 等表读值记号书写);结构字段(effect_id 集合、target_side、unit、stack_policy)非 knob、定值断言合法;行表"来源"列为内容档案(provenance)非 schema 字段、非运行时约束——B3 不校验 source_class 与行的对应(EC6 dumb 账本同族) |
|
||||
| 夹具策略 | ① 默认根(干净检出四行 MVP 内容)承载全部分支行为 AC;② 程序构造(schema 类 class_name 直引实例)承载 AC-13 域校验——不经 load()/preload();③ 行为夹具根经 --data-root 注入(仅 debug、不入 data/tables/——D2 夹具纪律),承载 MVP 无行的语义(refresh/independent)。显式声明:夹具测试行非 MVP 内容(Rule 10 四行全 stack;测试行仅供冒烟)。选夹具根而非程序构造注入表的理由:容器经 ConfigDB 单点读表(Rule 2/9)、无表注入 API——--data-root 是 debug/test 构建的既定注入通道;各 AC 声明其表根(默认根/下列三根),用例间无顺序依赖、每用例先 reset_diagnostics()(D2 冒烟协议,全局声明) |
|
||||
| 致命类收窄 | 恰一根致命夹具 status_effect_dup_key(重复键类别):runner manifest 退出码行 dup→≠0(独立 headless 进程、游戏通道,D2 AC-2b 协议同型)——"游戏内真的会死"在本表上的落点由此腿实证;其余致命类别(枚举域/域校验/跨字段)由 D2 AC-2 同类别 loader 级夹具承载(表无关,豁免声明收窄保留);schema 侧以程序构造断言域类别(AC-13) |
|
||||
| out-of-scope | deferral 生效条件 = B1 义务清单(依赖节,均已落位):① 同轮多授予先到先得次序(EC3 后半——冒烟单调用方次序即构造序,B1 编排次序 = 义务①)② 事实→授予恰一次转化(EC6 后半——义务②)③ percent→乘数换算方向与合成值地板(EC7 收口半——义务③)④ 最后一轮 decay 判定次序(F3 时序契约的 B1 半——battle_end 全清兜底使两序同终态,冒烟不构造)⑤ 效果档位对照表以 B3 实例为对照实物(义务⑤,对账归 B1)。另有:结算明细"溢出未生效"行与来源标注呈现(冒烟无明细观测量——对侧承载已登记:B1 义务⑧ + B5×2,deferral 生效条件成立);D1 HUD 状态栏与 EC12 空态渲染(D1×4 已登记);效果语义到结算公式映射(Rule 7——B1 SettlementTable 域);Rule 8 负空间(无驱散/延时/转移 API——"无对应 API"不可 GIVEN-WHEN-THEN,验收形态 = 前言 API 面封闭枚举 + 接口漂移修订门);D2 schema 校验致命端到端(双通道协议承载);悬空引用校验(EC2——D2 双通道条件性夹具);EC9 reload 门腿(D2 AC-16 既有覆盖 + B1 是置位/复位唯一调用方——B3 无断言义务);EC8 端到端换图腿(B1 编排合规,AC-10 裁决) |
|
||||
|
||||
夹具规格(登记值即相关 AC 的推导基准):
|
||||
### 夹具规格(登记值即相关 AC 的推导基准)
|
||||
|
||||
| 根 | 内容 | 用途 |
|
||||
|---|---|---|
|
||||
@@ -481,7 +464,7 @@ B3 只对"L×m 线性合成 + R 计数"负责:合成值多大算强、多弱
|
||||
| AC | Given | When | Then |
|
||||
|---|---|---|---|
|
||||
| AC-1 | 全新容器(BattleClosed、空;表根 = 默认根) | ① 依次 apply_effect(attack_up, 合法 source)、query_active(hero)、query_active(enemy)、decay_round();② notify_battle_start();③ 再次 notify_battle_start() | ① apply 返回 **false**(EC1 域闭拒绝)、双侧 query 均 = **空 Array**(EC12)、decay 返回 **0** 且诊断收集器零新增(EC13——空容器域闭的兜底读法,非独立分支不诊断);② **true** 且 query 仍双侧空(战斗开始时为空——Rule 1);③ **false**、相位与容器不变(EC11 前半——Active 再 start) |
|
||||
| AC-2 | Active 且已建账(构造:apply_effect(attack_up) ×1 + apply_effect(weaken) ×1,query 断言含两实例) | ① notify_battle_end();② 再次 notify_battle_end();③ decay_round();④ apply_effect(attack_up, …);⑤ notify_battle_start() | ① **true**、query 双侧空(Cleared 全清、不跨战斗——Rule 1);② **false**(EC11 后半——Closed 再 end);③ **0** 且诊断零新增(EC13 域闭腿);④ **false**(EC1 全场战后腿);⑤ **true** 且容器空(唯一出口——下一场战斗重启,States 表) |
|
||||
| AC-2 | Active 且已建账(构造:apply_effect(attack_up) ×1 + apply_effect(weaken) ×1,query 断言含两实例) | ① notify_battle_end();② 再次 notify_battle_end();③ decay_round();④ apply_effect(attack_up, …);⑤ notify_battle_start() | ① **true**、query 双侧空(Cleared 全清、不跨战斗——Rule 1);② **false**(EC11 后半——Closed 再 end);③ **0** 且诊断零新增(EC13 域闭腿);④ **false**(EC1 全场战后腿);⑤ **true** 且容器空(唯一出口——下一场战斗重启,实例状态表) |
|
||||
| AC-3 | Active | apply_effect("attack_up", {safe_cell, (3,4), round_index=2}) | true 且 query_active(hero) 恰 1 实例,其六字段逐一相等:effect_id="attack_up"、layers=1、remaining=D_a(attack_up.duration_settlements 表读值)、source_class="safe_cell"、origin_cell=(3,4)、round_index=2(P2 归因字段授予即携带——Rule 3,结算明细逐行标注的数据源) |
|
||||
| AC-4(stack 分支前两腿 + "R 不动" spec 决议) | Active;D_a / M_a 为表读值 | 腿 1:无存活实例时 apply_effect(attack_up, …);腿 2(前提 D_a ≥ 2 ∧ M_a ≥ 2——默认表值 D_a=1 不满足,本腿默认退化跳过 + 显式 SKIP 标记防 CI 静默、不假失败,前提满足时执行;构造 = 腿 1 实例经 decay_round() 一次至 R=D_a−1)再 apply_effect(attack_up, …) | 腿 1:true、新实例 **L=1、R=D_a**;腿 2:true 且 **L=2、R 仍 = D_a−1**——**stack 授予不触碰 R**(F1 注 spec 决议:只有初始授予定钟;实现若重置 R 即三分支失去区分性,本腿即其暴露点) |
|
||||
| AC-5(refresh 分支 + EC4 + EC10;表根 = status_effect_policy_rows,测试行非 MVP 内容) | Active;D_f=3、m_f=+10(夹具规格登记值) | ① apply_effect(refresh_probe, …);② decay_round() 后 apply_effect(refresh_probe, …);③ R 已 = D_f 时再 apply_effect(refresh_probe, …);④ 再 apply_effect ×2;⑤ 该根经测试通道加载 | ① true、新实例 L=1、R=D_f、载荷 = 1×m_f(refresh 行 L≡1——F2);② 返回 0(R=D_f−1)后 **true、R 重置 = D_f、L 不变**(F1 refresh 正常腿);③ **true 且实例六字段 + 载荷逐字不变**(EC4 空刷新 = 合法空操作——refresh 无满层/溢出语义);④ 均 true(max_stack=4 从不被消费——**EC10 行为 = 忽略**);⑤ 诊断为零(内容约定非校验项——EC10 非校验半句) |
|
||||
@@ -508,22 +491,11 @@ B3 只对"L×m 线性合成 + R 计数"负责:合成值多大算强、多弱
|
||||
| Formulas | F1→AC-4/11(stack)/AC-5(refresh)/AC-6(independent)· F2→AC-14+AC-5①/AC-6 · F3→AC-8/9/10 |
|
||||
| 边界情况 | EC1→AC-1/2 · EC2→AC-12 · EC3→AC-11 · EC4→AC-5③ · EC5→AC-9 · EC6→AC-7 · EC7→AC-14 腿 3 · EC8→AC-10 · EC9→AC-15 · EC10→AC-5④+AC-13 · EC11→AC-1/2 · EC12→AC-1 · EC13→AC-1/2 · EC14→AC-6——无洞 |
|
||||
|
||||
## 开放问题
|
||||
|
||||
| # | 问题 | owner | 状态/时机 |
|
||||
|---|---|---|---|
|
||||
| 1 | weaken 条款 2 锚裁决——归一口径已由 F0 裁决关闭(每结算瞬时当量;总暴露分支被 schema 域禁止排除),m_w 值域 [60, 85]/默认 −65 已入文。余项:终值共裁确认 + registry 终值回写,裁决时复查 AC-14 腿 3 非平凡性 | B4/B1(deadline:B1 GDD 强制检查点) | 余项随 B1 OQ2 联动 |
|
||||
| 2 | ambush 量纲——已定稿(B2 GDD:每层伏击为每次攻击类行为附加 m_amb 点主角 HP 伤害、后置加法、charge 拍零兑付——registry ambush_unit_definition)。余项:B1 条款 3 上限检验 | B2 → B1 | 随 B1 对账闭合 |
|
||||
| 3 | 首个 refresh/independent 内容行的 AC 补全——EC4 登记义务:奖励池引入非 stack 行时补真实内容行冒烟 AC,夹具探针行退役;其授予可见性语义(空刷新 vs Rule 5)随批由 B4/B1 裁决 | B4 | 奖励池引入非 stack 行时 |
|
||||
| 4 | clear_reward 源授予——清图奖励若含 buff 的授予路径确认(apply_effect source=clear_reward;A3 条款 4 差异化插槽) | B4 | B4 期 |
|
||||
| 5 | EC9 reload gate 的 B1 侧落点——防"战斗中真的被置位"零落点(qa-lead 缺口 #4) | B1 GDD 门禁评审 | 随 systems-index 门禁记录登记 |
|
||||
| 6 | 效果当量对照表的预检重跑——条款 1 对照表落定时按预检重跑 weaken/ambush 方向性预检(正式对账载体);C3 首次调参即须按现行参照(attack_up 当量)复算条款 2 预检 | B1 | B1 对照表落定 / C3 首调 |
|
||||
| 7 | stack-不重置 R 的 playtest 证伪项——F1 注决议(用户拍板、结构冻结)的体验面反例检验:"早拿必亏"(分轮拿满总暴露 150pp vs 同轮拿满 200pp——算例基线 = dur=2 行值;现行四行 D=1 下两读法总暴露相等、不对称休眠,dur ≥ 2 内容行上线时激活)叠加奖励身份不可预读(创意风险 #1)是否伤害"把 buff 纳入挖掘推理"的规划感(P1)。补偿载体先行:B4 奖励身份预读 + D5"同轮拿满"教学;证伪成立则走结构冻结修订流程回炉(合并/重定义 stack 分支)——非调参 | 垂直切片前置 playtest 批次 | playtest |
|
||||
|
||||
## 版本历史
|
||||
|
||||
| 版本 | 日期 | 改动 |
|
||||
|---|---|---|
|
||||
| v2 | 2026-09-14 | 两件套迁移:按模板 v2 重排为 design(结论)+ analysis(推演)两件——公式推导与锚定论证、数值锚定过程、体验锚点论证、候选方案取舍、已裁决设计争议、开放问题(OQ1–7)与审计注记移入 `design/gdd/analysis/b3-status-effect.md`;速览/体验锚点/核心规则两段式重排为设计目的/系统范围/领域章节;零规则变更、零数值变更、AC/EC/F/义务编号全部保留 |
|
||||
| 跨评审 B3 接口漂移批 | 2026-09-14 | /review-all-gdds 🔴-1 前半(减伤墙批回写缺口,registry 同批):defense_up.magnitude −50→**−30**(减伤墙批 C3 投值——叠满两层 −60 帽,defense_scan 墙轮 39%/真人 12 轮零承伤定量坐实)——MVP 内容行/Tuning Knobs/F2 Example 同步;免伤轮叙述同步(defense_up 单侧不可达 D'=0,现行可达路径 = weaken 饱和;F2 三例第三例改 defense_up 叠满读法——对侧 B1 F2 同批);Knob 交互:defense_up.magnitude/duration 纳入"禁独立调参"联动网络(m_w↔D_ref↔m_d↔duration_d);核心规则表增依据列(lint R8 引用列迁移) |
|
||||
| v1.1-lean | 2026-09-13 | 格式迁移:legacy 原稿按 lean 样例重排——修订注记出正文收敛至本表;散文/枚举/边界/AC 转表格;流程转字符画;公式本体、Variables 表与验算数据全保留;语义与 registry 现行值对齐(weaken −65 = F0 值域 [60,85] · 四行 duration 1/1/1/1 = 当次结算 · enemy 侧 side-wide 多敌读法),零规则变更 |
|
||||
| 两级奖励批 | 2026-09-11 | attack_up/defense_up duration 2→1(当次结算语义:授予结算兑付后即衰减);attack_up 复活(HeroTable.atk 域 [1,999]、0 加载拒绝——基础攻击恒存在,消费面 = 主角战斗段先手攻击);条款 2 锚参照对象回迁 attack_up 当量;正文原 D=2 行注记与 Knob 表 2/2/1/1 旧行按本批现行值改写 |
|
||||
|
||||
@@ -1,34 +1,40 @@
|
||||
# C2 冒险结构(Adventure Structure)
|
||||
|
||||
> **状态**:Approved · lean 格式
|
||||
> **版本**:v1 · 2026-09-14 · 作者:DK + design-system
|
||||
> **承载支柱**:P4 地牢下探的探险氛围(主——序列推进 = 不断下探更险的层)· P3(恢复点/囤积决策的冒险级容器)· P1("这局我到第几层"的冒险级对照物)
|
||||
> **状态**:Approved · **版本**:v2(两件套迁移)· 2026-09-14 · 作者:DK + design-system
|
||||
> **一句话**:C2 管一次冒险的骨架——关卡序列怎么排、通关给什么、死了怎么重来;位于 C1 关内行进之上、B1 战斗结算之下。
|
||||
> **复核注记**:v1 solo 出稿 → 经 /design-review(--solo 快速审批)APPROVED(0 blocking / 3 recommended——recommended 随下次修订批执行);专员/总监代理未咨询——生产前人工复核保留。评审日志:`design/gdd/reviews/c2-adventure-structure-review-log.md`。
|
||||
> **推演件**:`design/gdd/analysis/c2-adventure-structure.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) |
|
||||
C2 是冒险/序列层编排系统:冒险生命周期、关卡序列、跨战斗 HP 账本、关卡大奖励、失败重开——C1 关内行进的上层结构,B1 战斗结算的入参供给方。承载支柱:P4 地牢下探的探险氛围(主)、P3 恢复点/囤积决策、P1 冒险级掌控。
|
||||
|
||||
## 体验锚点
|
||||
1. 下探节奏(P4):"又清完一层,再往下"——序列推进 + 关卡大奖励是下探途中的喘息台阶;每关一个可命名的新层(display_name),难度台阶可感知(雾解锁 / 数值跳升 / 通关率带下移)。
|
||||
2. 恢复点囤积(P3):"Boss 前把血囤满"——HP 账本跨战斗延续 + 恢复点按比例回血;血是冒险内唯一带得走的资源,恢复点位置就是决策压力点。
|
||||
3. 冒险级掌控(P1):"这局我到第二层"——冒险摘要(到达层 / 通关数 / 代币记账)给每次死亡一个可对照的坐标;重开 = 新种子新局面,不是同一关的复读。
|
||||
4. 锚点时刻:"这层清完了"——Boss 倒下 → 大奖励兑付 → 下一层开门的节拍;死亡 → 摘要结算 → 一键再来。
|
||||
|
||||
| 支柱 | 关键词 | 机制承诺 |
|
||||
|---|---|---|
|
||||
| P4 下探节奏 | "又清完一层,再往下" | 序列推进 + 关卡大奖励 = 下探途中的喘息台阶;每关一个可命名的新层(display_name),难度台阶可感知(雾解锁 / 数值跳升 / 通关率带下移) |
|
||||
| P3 恢复点囤积 | "Boss 前把血囤满" | HP 账本跨战斗延续 + 恢复点节点按比例回血——血是冒险内唯一带得走的资源,恢复点位置就是决策压力点 |
|
||||
| P1 冒险级掌控 | "这局我到第二层" | 冒险摘要(到达层 / 通关数 / 代币记账)给每次死亡一个可对照的坐标;重开 = 新种子新局面,不是同一关的复读 |
|
||||
| 锚点时刻 | "这层清完了" | Boss 倒下 → 大奖励兑付 → 下一层开门的节拍;死亡 → 摘要结算 → 一键再来 |
|
||||
## 系统范围
|
||||
|
||||
## 全局流程
|
||||
负责:
|
||||
|
||||
### 冒险生命周期
|
||||
- 冒险状态机与结果语义
|
||||
- 关卡序列定义——LevelTable 行集内容 owner + 推进规则
|
||||
- HP 账本——跨战斗 HP 持久性的 C2 半边兑现
|
||||
- 关卡大奖励
|
||||
- 失败重开语义
|
||||
- master_seed 接线——冒险 = 种子域单位
|
||||
- 冒险摘要
|
||||
|
||||
不负责:
|
||||
|
||||
- 关内节点行进与节点兑付触发(C1)
|
||||
- 战斗结算与关卡清库调用(B1)
|
||||
- 奖励内容与库存语义(B4/C3)
|
||||
- 数值曲线(C3)
|
||||
- 代币持久化与天赋(C4/D3)
|
||||
- 呈现(D1)
|
||||
|
||||
## 核心循环与冒险生命周期
|
||||
|
||||
```
|
||||
新冒险(Idle)
|
||||
@@ -36,26 +42,15 @@
|
||||
│ ② 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(重开 = 全新一轮)
|
||||
│ ├─ 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{cleared | defeated}(C1 → C2)
|
||||
├─ cleared 且当前关 < N ─► 关卡大奖励(上限提升 · 血回满 · 代币记账)→ start_level(L+1)(回上面行进)
|
||||
├─ cleared 且当前关 = N ─► 冒险完成结算 ──────────────┐
|
||||
└─ defeated ∨ abandoned ─► 冒险失败结算 ──────────────┴─► 冒险摘要 → Idle(重开 = 全新一轮)
|
||||
```
|
||||
|
||||
| 出口 | 触发 | 动作序列 | 约束 |
|
||||
@@ -65,65 +60,32 @@ start_level(1) ──► 关内行进(C1 域:节点链逐节点推进)
|
||||
| 冒险失败 | 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 |
|
||||
| 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 |
|
||||
|
||||
### 关卡收束结果(封闭枚举)
|
||||
不变式:
|
||||
|
||||
| 值 | 触发 | 后续 |
|
||||
|---|---|---|
|
||||
| cleared | Boss 节点战斗胜利 | 末关判定 → 大奖励 + 推进 / 冒险完成 |
|
||||
| defeated | 任意战斗英雄死亡 | 冒险失败结算 |
|
||||
1. [状态机]在 RunActive 期间保持恰一关卡在飞;master_seed 冒险内恒定;HP 账本恒在 [0, max_hp_eff]。
|
||||
2. [状态机]在已进入 Settling 后收到重复 level_end 宣布时拒绝重复兑付并给诊断——账本与摘要零变化(幂等)。
|
||||
3. [状态机]在整个冒险内保持零流消费——RngService open_stream 零命中。
|
||||
4. [C1]在宣布 cleared 收束时账本入账 hp 必须 > 0;英雄死亡但战斗判定胜利为结构不可达(B1 判定 hero 先判)——违者防御断言拦截。
|
||||
|
||||
### 冒险摘要(结算产出,消费方 C4 / D3 / playtest 日志)
|
||||
结果与收束枚举(封闭枚举):
|
||||
|
||||
| 层级 | 值 | 触发 | 标记 / 后续 |
|
||||
|---|---|---|---|
|
||||
| 冒险结果 | completed | 末关 level_end(cleared) | 摘要 run_completed = true |
|
||||
| 冒险结果 | failed | level_end(defeated) | run_completed = false |
|
||||
| 冒险结果 | abandoned | 玩家放弃(非战斗期受理) | run_completed = false |
|
||||
| 关卡收束 | cleared | Boss 节点战斗胜利 | 末关判定 → 大奖励 + 推进 / 冒险完成 |
|
||||
| 关卡收束 | defeated | 任意战斗英雄死亡 | 冒险失败结算 |
|
||||
|
||||
冒险摘要(结算产出;消费方 C4 / D3 / playtest 日志):
|
||||
|
||||
| 字段 | 类型 | 语义 |
|
||||
|---|---|---|
|
||||
@@ -133,15 +95,26 @@ start_level(1) ──► 关内行进(C1 域:节点链逐节点推进)
|
||||
| tokens_recorded | int | levels_cleared × token_per_level |
|
||||
| master_seed | int64 | 本冒险种子(复盘 / 快照域标识) |
|
||||
|
||||
## 数值结论与推导
|
||||
## 领域二:关卡序列与深度标号
|
||||
|
||||
> C2 是结构系统——运行时零新增公式,以下为账本结算式与设计期合成式;全部数值 provisional,调参所有权见 Tuning Knobs。
|
||||
| 项 | 语义 |
|
||||
|---|---|
|
||||
| 节点类型 | 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 合法态——切片现状) |
|
||||
|
||||
### F1 冒险通关率合成(设计期工具式)
|
||||
序列规则:
|
||||
|
||||
**结论**:P(冒险通关) = Π P(L_i 通关);MVP N=2 合成带 = [6%, 20%](L1 [30,50]% × L2 [20,40]%)——冒险长度即难度总闸。
|
||||
1. [C2]让冒险从序列第 1 关起步、倒下即终、清完末关即成:关卡通关(Boss 战胜利)自动进下一关;MVP 线性序列,不做跳关、不做回头路。
|
||||
2. [C2]把冒险关数锁定为行集关数:加关必须链行 + 敌我数值 + 变异解锁同批落,禁止只加序列不加内容——冒险关数 ⊆ 表内容覆盖,越界关卡 = 内容生产缺口;序列难度排布消费 C3 通关率带(L1→L2 带下移 + 雾解锁台阶)。
|
||||
3. [冒烟断言]在 MVP 全行集上校验覆盖义务:每个 battle/boss 节点 (L,D) 在 enemy / board_gen 有精确行、序列关数 = 行集关数;行集战斗节点缺行即拦截。
|
||||
4. [C2]对 start_level 越界请求与关卡行缺失(LevelTable 无该 level_index 行)一律防御 fail-fast——序列配置违约、非玩家可达态;运行时战斗表 floor 兜底属 D2 既有语义,与本层分属两层。
|
||||
|
||||
#### 推导
|
||||
设计意图:让内容缺口在冒烟期暴露、由内容批补齐,而不是运行期兜底吞掉。
|
||||
|
||||
**F1 冒险通关率合成(设计期工具式)**:P(冒险通关) = Π P(L_i 通关);MVP N=2 合成带 = [6%, 20%](L1 [30,50]% × L2 [20,40]%)——冒险长度即难度总闸。
|
||||
|
||||
```
|
||||
P_run = Π_{i=1..N} P(L_i) (逐关独立满血开局口径)
|
||||
@@ -157,11 +130,14 @@ P_run = Π_{i=1..N} P(L_i) (逐关独立满血开局口径)
|
||||
| N=2 合成 | [0.30×0.20, 0.50×0.40] = [6%, 20%] | 单次通关率带合理(Roguelike 体感:多数局止步中途) |
|
||||
| 口径闭合 | C3 带按每关满血开局校准;大奖励血回满使该口径跨关成立 | ✓(若未来大奖励改部分恢复,本式失效须改口径) |
|
||||
|
||||
### F2 HP 账本结算式
|
||||
## 领域三:HP 账本与恢复
|
||||
|
||||
**结论**:账本三写口全部 clamp 于 [0, max_hp_eff];大奖励回满使每关开局恒满血——血条跨关只降不自动回,恢复只来自恢复点与大奖励两个显式口。
|
||||
1. [C2]让主角一条血走完整个冒险——账本收支四口:冒险开始置满 / 每战开始交出 / 战后收回 / 恢复点与大奖励入账;关卡切换零结算,关卡只换地图不换血条。
|
||||
2. [C2]把血限定为冒险内唯一跨战斗资源:buff 战斗域清(B1)、库存关卡域清(C1 收束点)、RAP 战斗域清(A3)——冒险内无跨关遗留物,冒险层账本与摘要是唯一跨关状态。
|
||||
3. [C1]在每场战斗结束后向 C2 报英雄 HP 终值(胜负皆报):victory 腿 hp ∈ [1, max_hp_eff];defeat 腿 = 0,血条归零即冒险终。
|
||||
4. [C2]在恢复点节点兑付时按比例回血并 clamp 上限;满血触发回复 0,合法(账本静默——无明细行协议,与战斗域"奖励未生效"族不同层)。
|
||||
|
||||
#### 推导
|
||||
**F2 HP 账本结算式**:账本三写口全部 clamp 于 [0, max_hp_eff];大奖励回满使每关开局恒满血——血条跨关只降不自动回,恢复只来自恢复点与大奖励两个显式口。
|
||||
|
||||
```
|
||||
战后回写: hp := report_battle_end(hp) (victory 腿 hp ∈ [1, max_hp_eff];defeat 腿 = 0 → 冒险终)
|
||||
@@ -185,11 +161,21 @@ P_run = Π_{i=1..N} P(L_i) (逐关独立满血开局口径)
|
||||
| Boss 胜后(假设余 8)→ 大奖励 | max_hp_eff = 60、HP = 60 |
|
||||
| L2 开局 | 60/60 满血(C3 带口径闭合) |
|
||||
|
||||
### F3 冒险代币记账式
|
||||
## 领域四:关卡大奖励
|
||||
|
||||
**结论**:tokens = levels_cleared × token_per_level——通关与中途死亡同式,差异只在 run_completed 标记;通关加成位预留(MVP 不启用,裁决归 C4)。
|
||||
1. [C2]在关卡收束清库之后、下一关开始之前兑付大奖励——顺序不可换(清库已由 C1 收束点先调 B1 level_clear)。
|
||||
2. [C2]按三件固定构成兑付、不进背包不占库存域;上限已有加成时后续大奖励累加——每关一份,N=2 冒险至多一次。
|
||||
3. [C2]在末关通关时不兑付大奖励——没有下一战可受益;代币照记,只做冒险完成结算,不发上限提升、无 start_level(N+1)。
|
||||
|
||||
#### 推导
|
||||
设计意图:奖励的收益面只朝"下一战"生效——所以清库后才兑付、末关不兑付。
|
||||
|
||||
| 件 | 内容 | 载体 | 数值 |
|
||||
|---|---|---|---|
|
||||
| 上限提升 | 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) |
|
||||
|
||||
**F3 冒险代币记账式**:tokens = levels_cleared × token_per_level——通关与中途死亡同式,差异只在 run_completed 标记;通关加成位预留(MVP 不启用,裁决归 C4)。
|
||||
|
||||
```
|
||||
tokens_recorded = levels_cleared × token_per_level (token_per_level 默认 10,消费方 C4)
|
||||
@@ -206,56 +192,46 @@ tokens_recorded = levels_cleared × token_per_level (token_per_level
|
||||
| 清 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 |
|
||||
1. [C2]在任意战斗英雄死亡时终止冒险——失败 = 冒险终,无关卡重试、无检查点(Roguelike 语义已锁);血条归零即终。
|
||||
2. [C2]把重开做成全新一轮:新种子 / 第 1 关 / 满血 / 空手——重开不是关卡重试;保留面 = 冒险摘要,清零面 = 账本 / 库存 / 种子域。
|
||||
3. [C2]把中途放弃按与失败同型结算:已获大奖励不追回、已到手的保留;放弃请求仅非战斗期受理,战斗中拒绝(战斗域单事务在飞;入口呈现仅非战斗期可达——MVP 无 UI 入口)。
|
||||
4. [C2]在冒险开始时注入 master_seed 恰一次:冒险内雷图生成 / 奖励抽取 / 遭遇掷骰全部派生自该种子、冒险内不重置;切片逐关播种为其无冒险层的历史简化,本条转正为冒险域单种子;冒险可复现域 = master_seed + 三流计数器。
|
||||
5. [实现层]把重开种子与上局相同视为合法态(熵源小域):约束 = 种子生成禁走玩法随机通道、冒险内计数器随 reseed 归零;种子值生成源裁决归实现期 ADR。
|
||||
|
||||
不变式:RunActive 期恰一关卡在飞;master_seed 冒险内恒定;HP 账本 ∈ [0, max_hp_eff];Settling 恰一次(重复宣布拒绝 + 诊断);冒险内零流消费(RngService open_stream 零命中)。
|
||||
## 领域六:C1/C2 编排边界(接口契约)
|
||||
|
||||
## 边界情况
|
||||
1. [C1]拥有并执行关内一切行进——节点移动 / 兑付触发 / 战斗发起;关卡收束点(Boss 战胜利或英雄死亡)在 C1 宣布。
|
||||
2. [C1]在收束点先调 B1 level_clear(库存关卡域清空 + 快照计数)、再向 C2 宣布 level_end——库存清空触发源唯一。
|
||||
3. [C2]在收束上只接结果:零战斗域直调、零库存域直调,不碰库存域——关卡末清库由 C1 收束点触发 B1 level_clear。
|
||||
|
||||
| 条件 | 行为 | 依据 |
|
||||
|---|---|---|
|
||||
| 末关 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 |
|
||||
| 接口 | 方向 | 载荷 | 时点 |
|
||||
|---|---|---|---|
|
||||
| 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 节点行进至 |
|
||||
|
||||
## 依赖
|
||||
## 依赖与输出
|
||||
|
||||
**上游**:
|
||||
| 方向 | 系统 | 性质 | 接口要点 |
|
||||
|---|---|---|---|
|
||||
| 上游 | 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 | 接口契约四件套 + 收束点语义 + 战斗发起组装权(领域六契约表全文)——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 摘要与状态投影 |
|
||||
|
||||
| 系统 | 性质 | 接口要点 |
|
||||
|---|---|---|
|
||||
| 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 义务清单(对侧修订批逐项核对,缺项即阻塞级按各自门禁)**:
|
||||
跨 GDD 义务台账(对侧修订批逐项核对,缺项即阻塞级按各自门禁):
|
||||
|
||||
| 对侧 | 内容 | 状态 |
|
||||
|---|---|---|
|
||||
@@ -267,18 +243,39 @@ tokens_recorded = levels_cleared × token_per_level (token_per_level
|
||||
| C1 | 接口契约四件套 + 收束点语义全款承接(C1 GDD 门禁评审核对——C2 在 C1 之前设计,本表即其接口基线) | 待 C1 定稿核对 |
|
||||
| C4 | token_per_level 记账消费 + 天赋注入位消费 | 远(C4 期) |
|
||||
|
||||
## Tuning Knobs
|
||||
## P0 最小闭环
|
||||
|
||||
| 字段 | 类型/域 | 默认 | knob | 说明 |
|
||||
1. 玩家在 Idle 开始新冒险——reseed 恰一次注入新 master_seed、HP 账本置满、序列位置 = 1。
|
||||
2. C2 受理 start_level(1),把 {level_index, hero_hp, hero_max_hp_eff} 下放 C1,C1 开始节点链行进。
|
||||
3. C1 行进至 battle/boss 节点,组装 begin_battle(L, D, hero_hp, hero_max_hp) 调 B1 结算。
|
||||
4. B1 战斗结束,C1 report_battle_end(hp) 回报,C2 账本回写(defeat 腿 = 0 → 跳第 8 步)。
|
||||
5. rest 节点:C1 发 heal_clamped 请求,账本按比例回血;reward 节点:B4 节点奖励入库(关内域库存)。
|
||||
6. Boss 胜利 = 关卡收束点:C1 先调 B1 level_clear 清库,再向 C2 宣布 level_end{cleared}。
|
||||
7. 非末关:C2 兑付大奖励三件 → start_level(L+1) 回第 2 步;末关:冒险完成结算(进第 8 步)。
|
||||
8. 冒险结算(完成 / 失败 / 放弃)产出冒险摘要 → Idle——重开即全新一轮,回到第 1 步。
|
||||
|
||||
## P1 / P2 后置
|
||||
|
||||
| 优先级 | 内容 | 后置原因 |
|
||||
|---|---|---|
|
||||
| P1 | L2 行集扩展批(N=2 生效) | 前提 = C3 L2 深度轴行值(enemy/board_gen (2, D1–D4))填充批;未落地前以单关行集运行(N=1 合法态) |
|
||||
| P1 | 放弃入口呈现(UI) | MVP 无 UI 入口——仅语义预留(非战斗期受理、同失败型结算);细节归 D1 / UX 批(OQ4) |
|
||||
| P2 | 大奖励形态扩展(三选一 / 攻击型 / 通关加成) | AdventureTable 扩列结构位已留;设计随 C4 元进度(OQ2) |
|
||||
| P2 | 天赋注入位消费 | 冒险开始参数面预留(MVP 空参数——开始新冒险时注入,结构同 begin_battle 覆盖值通道);归 C4 |
|
||||
| P2 | 冒险长度扩展(N > 2) | MVP N=2(约 15–25 分钟)vs 愿景单局 20–40 分钟;扩关 = 内容批,节奏按真人单关时长数据定(OQ1) |
|
||||
|
||||
## 调参表
|
||||
|
||||
| 字段 | 域 | 默认 | owner | 说明 |
|
||||
|---|---|---|---|---|
|
||||
| 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 数值同批验带),非调参 |
|
||||
| LevelTable 行集(N 与链模板) | level.tres 逐关行 | L1 现行 + L2 随批 | C2 内容批 | 加关 = 内容批(链行 + C3 数值 + 变异解锁同批);过长 = 内容缺口,过短 = 冒险时长不足(愿景 20–40 分钟 vs MVP 两关,真人数据后定扩展节奏) |
|
||||
| LevelTable.rest_heal_pct | int [0,100] 逐关行 | 30 provisional | C3(数值复验) | 恢复点比例;100 = 恢复点变全满泉、0 = 死节点 |
|
||||
| AdventureTable.level_clear_hp_bonus | int [0,999] 单行全局 | 10 provisional | C3(值锚) | 大奖励上限提升;值锚 = C3 平移换算率(+10hp ≈ +1 轮);上调须 C3 重扫 L2 带 |
|
||||
| AdventureTable.token_per_level | int [0,999] 单行全局 | 10 provisional | C4 | 代币记账消费方 |
|
||||
| 链模板节点构成 | level.tres nodes 数组 | 战×2→奖励→战×2→恢复→Boss | C2 内容批 | 节点类型序列修订 = 内容批(随 C3 数值同批验带),非调参 |
|
||||
|
||||
- 非 knob(结构冻结):序列线性无跳关、Boss 恒末节点、死亡即冒险终、大奖励三件构成、冒险内零流消费、收束点编排边界。
|
||||
- Knob 交互:level_clear_hp_bonus × C3 L2 通关率带(回满 + 上限共同抬开局强度——上调走 C3 重扫);rest_heal_pct × 通关余量带(C3 通关余量 p10 ≥ 3 的对冲杠杆)。
|
||||
- knob 交互:level_clear_hp_bonus × C3 L2 通关率带(回满 + 上限共同抬开局强度——上调走 C3 重扫);rest_heal_pct × 通关余量带(C3 通关余量 p10 ≥ 3 的对冲杠杆)。
|
||||
|
||||
## 验收标准
|
||||
|
||||
@@ -298,19 +295,10 @@ tokens_recorded = levels_cleared × token_per_level (token_per_level
|
||||
| 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 + 日志路径登记);零规则变更 |
|
||||
| v2 | 2026-09-14 | 两件套迁移:按 v2 骨架重排为 design 件(设计目的 / 系统范围 / 核心循环 / 领域章节×6 / 依赖与输出 / P0 / P1·P2 / 调参表 / 验收标准 GWT)——零规则、零数值、零 AC 变更;公式推导与论证、复核审计注记、开放问题(OQ1–OQ5)迁至 `design/gdd/analysis/c2-adventure-structure.md` |
|
||||
+230
-300
@@ -1,36 +1,39 @@
|
||||
# C3 难度曲线与精英/Boss(Difficulty Curve & Elite/Boss)
|
||||
|
||||
> **状态**:In Design · lean 格式
|
||||
> **版本**:v2 · 2026-09-14 · 作者:DK + design-system
|
||||
> **状态**:In Design · **版本**:v2-两件套 · 2026-09-14
|
||||
> **承载支柱**:P4 地牢下探的探险氛围(主)· P1 推理的掌控感 / P3 风险与收益同源(难度即压力源)
|
||||
> **一句话**:C3 定义"难度 = f(关卡序号, 节点深度, 精英/Boss 修饰)"中每一项随进度如何变化——敌人强度曲线、雷图压力曲线、奖励供给曲线与精英/Boss 修饰语义的唯一数值所有者。
|
||||
> **复核注记**:v1 solo 出稿 → 经 /design-review(lean 单会话)NEEDS REVISION 8 blocking,同日修订核销(本 v2);专员/总监代理未咨询——生产前人工复核保留。
|
||||
> **一句话**:敌人强度、雷图压力、奖励供给与精英/Boss 修饰的唯一数值所有者。
|
||||
> **推演件**:`design/gdd/analysis/c3-difficulty-curve.md`(本文件只收结论,推导与论证在那里)
|
||||
|
||||
## 速览
|
||||
## 设计目的
|
||||
|
||||
| 关键问题 | 答案 |
|
||||
|---|---|
|
||||
| 定位 | 数值 owner 而非机制 owner:表结构归 D2、生成算法归 A1、结算规则归 B1、敌种机制归 B2——C3 以行值与参数驱动已定稿机制,形成"越下越险"的进度体感(P4);玩家不直接感知本系统(Indirect),它是体感背后的统一坐标系 |
|
||||
| 拥有 | EnemyTable / BoardGenTable / RewardTable / RewardConfigTable / HeroTable 行值与参数 · DifficultyTable 修饰结构位(MVP 空表)· 难度期望表(按 (L,D) 的期望胜轮带 / 期望承伤占 max_hp 比 / 通关率目标带 / 通关余量带——调参的"正确行为"基准)· **生存链区间模型**(替代关级供给带:每战 S/K 区间三档判定 + 关级通关恒等式 + 输出占比带)· 七步调参流程 · P_perfect 乘数调参权 · m_w 调参通道(终值共裁 B4/B1)· B1 对账约束清单的承接与消解 |
|
||||
| 不拥有 | 表结构(D2)· 生成算法(A1)· 结算规则与护甲克制矩阵机制(B1——C3 投值)· 敌种机制(B2)· 变异机制框架(A4——C3 只投内容行)· 精英节点完整语义(C1 联动)· 元进度天赋数值(C4——C3 是其世界侧对照物)· 呈现(B2/B5/D1)· encounter 掷骰执行(B1 编排)· 供给控制器机制本体(B4——C3 投参数) |
|
||||
| 上游输入 | D2 表 schema 与 R1 解析 · B1 条款③⑤对账输出(B1 F4/F5 = 约束生成器)· B2 字段语义与校验域 · B4 联动重算义务与供给控制器机制 · A1 F4 批量红线 · 切片 v3 行集实测数据(含减伤墙批) |
|
||||
| 下游输出 | 各基表行值(经 ConfigDB 单点读取)· 每战 S/K 区间与三档判定数据面(level_monte_carlo actuals 生产,B4/B1 对账消费)· 难度期望表(C2 难度排布 / C4 天赋标定基准——区间平移换算率:+10hp ≈ +1 轮、atk 翻倍 ≈ K 减半)· unlock_level 投放计划(A4)· "何时变难"数据面(B2/B5/D1 呈现消费) |
|
||||
| 硬约束 | 运行时零新增公式(C3 侧数值直填基表行;机制本体——encounter 掷骰 / 护甲克制 / 供给控制器——归各 owner GDD,C3 只投行值与参数)· 可推理率 target ∈ [0.85, 1] 绝对锚不可下探 · 条款③⑤与预警⑥约束内调参或显式扩界 · 联动网络六组禁独立调参 · 每次修订强制走七步流程 · 全部值 provisional 起步随 playtest 修正 |
|
||||
C3 定义"难度 = f(关卡序号, 节点深度, 精英/Boss 修饰)"中每一项随进度如何变化。定位是数值 owner 而非机制 owner:表结构归 D2、生成算法归 A1、结算规则归 B1、敌种机制归 B2——C3 以行值与参数驱动已定稿机制,形成"越下越险"的进度体感。玩家不直接感知本系统(Indirect),它是体感背后的统一坐标系。
|
||||
|
||||
## 体验锚点
|
||||
1. 每层一个可感知、可解释的难度台阶("这一层开始有雾了")——新敌种/新行为环段/新变异解锁 + 基准数值跳升,跃升可归因于可见变化而非纯数字膨胀;第二层首遇熊地精(三拍行为环 vs 地精单拍)让跃升有具体面孔。
|
||||
2. 首关基线明显吃紧但多数玩家能过;天赋提升产生可测量的通关期望改善(区间平移换算率:+10hp ≈ +1 轮、atk 翻倍 ≈ K 减半)——"我变强了"是可推导结论。
|
||||
3. Boss 房开门前是恢复点/囤刀决策压力的顶点——供给稀缺性在此兑现价值,Boss 血量压迫由血量锚承载;击杀 Boss 有"这层我算下来了"的完成感。
|
||||
4. 每次修订走同一条七步流程、期望偏离必须登记——玩家已适应的曲线不会被静默改掉。
|
||||
|
||||
> Indirect 体验一句话:**玩家不操作本系统,但每一分钟都在感受它**——第二层的熊地精比第一层的地精更凶、关底 Boss 的压迫性血量、"这一层开始有雾了"的解锁节奏,本系统是这些体感背后的统一坐标系。
|
||||
设计意图:参考感受合成 = Peglin 地图难度爬升 × 杀戮尖塔 Act 结构(普通→精英→Boss 三段节奏)→ 关间大台阶 × 关内小坡度 × Boss=Dmax 关底压轴。
|
||||
|
||||
| 支柱 | 关键词 | 机制承诺 |
|
||||
|---|---|---|
|
||||
| P4 越下越险的压迫节奏 | "这一层开始有雾了" | 每层一个可感知难度台阶:新敌种登场 / 新行为环段 / 新变异解锁 + 基准数值跳升(L 轴)与温和加压(D 轴);台阶可感知但可解释——跃升可归因于可见变化而非纯数字膨胀(后者产生"被坑"感而非"变险"感);可量化形态 = S/K 区间随 (L,D) 的漂移轨迹(绿→黄→红空间分布) |
|
||||
| P1 攻克的对照物 | "我变强了" | 首关基线明显吃紧但多数玩家能过(通关率目标带);后续关卡陡升使 C4 天赋提升产生可测量的通关期望改善——区间平移换算率(+10hp ≈ +1 轮、atk 翻倍 ≈ K 减半)使"我变强了"从体感变为可推导结论 |
|
||||
| P3 压迫的顶点 | "Boss 房开门前" | 恢复点/囤刀决策压力顶点——供给稀缺性在此处兑现价值;Boss 血量压迫由 Boss 血量锚承载 |
|
||||
| 锚点时刻 | "三拍 vs 单拍" | 第二层首遇熊地精——三拍行为环 vs 地精单拍攻击,难度跃升有具体面孔;击杀 Boss——"这层我算下来了"的完成感 |
|
||||
## 系统范围
|
||||
|
||||
- 参考感受合成:Peglin 的地图难度爬升 × 杀戮尖塔的 Act 结构(普通→精英→Boss 三段节奏)→ 本作 = 关间大台阶 × 关内小坡度 × Boss=Dmax 关底压轴。
|
||||
负责:
|
||||
|
||||
## 全局流程
|
||||
- EnemyTable / BoardGenTable / RewardTable / RewardConfigTable / HeroTable 行值与参数
|
||||
- DifficultyTable 修饰结构位(MVP 空表)
|
||||
- 难度期望表:按 (L,D) 的期望胜轮带 / 期望承伤占 max_hp 比 / 通关率目标带 / 通关余量带——调参的"正确行为"基准
|
||||
- 生存链区间模型:每战 S/K 区间三档判定 + 关级通关恒等式 + 输出占比带
|
||||
- A4 变异 unlock_level 门控序列投放计划
|
||||
- 七步调参流程 · P_perfect 乘数调参权 · m_w 调参通道(终值共裁 B4/B1)· B1 对账约束清单的承接与消解
|
||||
|
||||
不负责:
|
||||
|
||||
- 表结构(D2)· 生成算法(A1)· 结算规则与护甲克制矩阵机制(B1——C3 投值)
|
||||
- 敌种机制(B2)· 变异机制框架(A4——C3 只投内容行)· 精英节点完整语义(C1 联动)
|
||||
- 元进度天赋数值(C4——C3 是其世界侧对照物)· 呈现(B2/B5/D1)· encounter 掷骰执行(B1 编排)· 供给控制器机制本体(B4——C3 投参数)
|
||||
|
||||
## 核心循环
|
||||
|
||||
### 难度曲线生成(设计期直填 → 运行时直读)
|
||||
|
||||
@@ -49,42 +52,22 @@
|
||||
战斗/挖掘按既有系统运作(C3 运行时零公式)
|
||||
```
|
||||
|
||||
### F7 调参流程(每次行值修订强制走完——七步)
|
||||
|
||||
```
|
||||
① 改表值(C3 直辖 knob)
|
||||
│ ② smoke_all 全绿(含 A1 生成质量闸——d0.28 回退先例的拦截点)
|
||||
│ ③ level_monte_carlo 扫描(通关率带 + 三档判定 + 通关余量 + 输出占比)
|
||||
│ ④ B4 登记常数与对账重制(AC-19 对账对漂移检测 / AC-6 分支 4 / AC-18 重跑——B4 义务 #10)
|
||||
│ ⑤ 对账复算(条款③⑤ / 预警⑥)
|
||||
│ ⑥ README 调参日志登记(含期望偏离)
|
||||
▼
|
||||
行值生效(任一步 FAIL → 回滚或登记 OQ——禁止带病前进)
|
||||
```
|
||||
|
||||
### 出口分发
|
||||
|
||||
| 出口 | 触发 | 动作/去向 | 约束 |
|
||||
|---|---|---|---|
|
||||
| 调参通过 | 七步全 PASS | 行值生效 → 期望表复算 → 调参日志登记 | 期望偏离必须登记,禁止静默出带 |
|
||||
| 调参失败 | 任一步 FAIL | 回滚行值或登记 OQ | 禁止带病前进 |
|
||||
| 调参失败 | 任一步 FAIL | 回滚行值或登记开放问题 | 禁止带病前进 |
|
||||
| 红档组合 | 任一战 S_max ≤ K_min | 扫描步拦截,行值禁止入表 | 配置事故——区间模型判定 |
|
||||
| 期望表偏离 | 调参后越出通关率/余量带 | 回滚或 OQ 登记 | 禁止静默出带(状态表同名行) |
|
||||
| 期望表偏离 | 调参后越出通关率/余量带 | 回滚或开放问题登记 | 禁止静默出带(状态表同名行) |
|
||||
| 投放断档 | 某关无新敌种且无新环段 | 流程投放检查项拦截 | 内容生产缺口——C3 调参无法修补(数值不是内容) |
|
||||
|
||||
## 核心规则
|
||||
## 基表行值与投放
|
||||
|
||||
| # | 规则 | 要点 | 依据 |
|
||||
|---|---|---|---|
|
||||
| 1 | 难度承载结构 = 直填行值主体 + DifficultyTable 修饰结构位 | 全部 (level_index, node_depth) 维度最终数值**直填**各基表行(EnemyTable / BoardGenTable / RewardTable——切片已验证的工作方式:R1 floor 解析直读、零新机制);**DifficultyTable 仅承载"按坐标施加的全局修饰"结构位**(键 (L,D)、乘数域;施加点 = B2.spawn 实例化时套乘于行值快照之前)——MVP 不产生任何修饰行(空表结构位;首个使用场景 = 精英节点;Boss 走 Dmax 直填行、不走修饰表) | D2 接口漂移规则;registry `difficulty_table`;B2 实例化条款"接口未定"预留由本条兑现 |
|
||||
| 2 | 难度 = f(L, D) 双轴语义 | **L 维(关间)= 大台阶**——每关至少一项新内容投放(新敌种 或 新行为环段 或 新变异解锁)+ 基准数值跳升;**D 维(关内)= 小坡度**——同敌种数值平缓上移(坡度域见关内深度坡度公式)、板参数温和加压(尺寸/密度小步上调,推理率 target 不低于 0.85 绝对锚);**Boss = 各关 Dmax 行**(A1 登记约定兑现)——数值大台阶 + 专属行为环 + 专属板形,见 Boss 遭遇语义条 | B2 投放节奏规则(OQ8);Boss 血量锚公式(F3);A1 第三轴登记约定 |
|
||||
| 3 | 敌种投放节奏 | 每关至少一个新敌种或既有敌种新环段投放;MVP 投放 = L1 三段(goblin→bugbear→ogre_chief,行值总表);**DND 更名批生效**:grub→goblin、ambusher→bugbear、boss_guardian→ogre_chief——registry/B2/D1/art-bible 键集随本修订批对齐;多敌种同深度选择规则:MVP 每行集恰一敌种(B2 锁定),C1 分支地图定稿时若需同深度多敌种选择,走预登记改键通道——本 GDD 预留不定义 | B2 投放节奏规则(OQ8);B2 多敌种共裁项(OQ7);D1 键集冲突② |
|
||||
| 4 | 切片行集转正为 MVP 默认曲线 | 垂直切片调参登记的行集有实测依据,转正为 MVP 默认值——**权威枚举 = 「MVP 行值总表」(v3,出处 = 切片 .tres)**,旧登记表(grub 时代值)由本表替代;后续 L2+ 曲线数值随关卡内容扩展填充(结构本条已定,数值行随内容扩展) | MVP 行值总表;L2+ 数值开放问题(OQ1) |
|
||||
| 5 | Boss 遭遇语义 | ① Boss = 关卡末节点 = Dmax 行(LevelTable 末节点必须 Boss——schema 校验);② Boss 数值台阶 = hp 取本关普通战斗 hp 期望总和的 0.5–1.1 倍 + **atk ≥ 本关普通战最高行 atk**(本次重定义——原"高于均值一档"无档位定义;现值 Boss 9 ≥ bugbear 9 ✓)+ 专属行为环(含 charge 拍——玩家可规划的安全挖掘拍);③ Boss 板 = 本关最大板形 + 密度上探(受可推理率 target 绝对锚约束);④ Boss 战胜利 = 关卡通关(C1/C2 域编排) | Boss 血量锚公式(F3,加难走廊 [1.1, 1.35] 预登记);LevelTable schema 校验;A1 第三轴登记约定 |
|
||||
| 6 | 精英节点(MVP 不实现,语义预留) | `elite_` / `boss_` 前缀字段命名空间预留保留;精英修饰完整语义(独立节点类型/词缀系统/出现规则)**归 C1 关卡节点地图定稿后的联动设计**——分支地图中"同深度并存精英与普通节点"触发棋盘生成端强制重审(改键走 D2 接口漂移规则);本 GDD 承诺:DifficultyTable 结构位 + 命名空间预留足以承载,不预写语义 | A1 第三轴登记约定(命名空间预留 + 定稿强制重审) |
|
||||
| 7 | A4 全局变异语义(scope=global 兑现) | `scope=global` 行 = 该变异**施加于整板全部合格格**(区别于 region 的区域布置);**全局变异仅 Boss/精英图可产生**(普通图禁用——加载期校验:global 变异的布置行须伴随 elite/boss 标记;MVP 无标记字段前 = MVP 不产生 global 行,A4 既有 warning 承载);MVP 不定义任何具体全局变异行(岩浆/冰冻无 MVP 容器——A4 锁定),本条只锁定语义框架与禁用面 | A4 scope=global 预留位条款;A4 例外表 warning 行 |
|
||||
| 8 | 遭遇随机化(区间 unit_count) | EnemyTable 行 `unit_count` 升级为**区间语义** [unit_count, unit_count_max](域 [unit_count, 3],B2 上界锁定不变);掷骰经 RngService `encounter` 封闭流——**接口漂移登记完成**:registry 流集合含 encounter、B1 begin_battle 掷骰增补、B2 spawn override 参数与 unit_count_max 字段增补、D2 schema 两字段增补;细则见下表 | registry `rng_service`(encounter 增流登记);B1/B2/D2 增补条款(X-6~X-8);遭遇随机化细则表 |
|
||||
| 9 | 调参约束内工作纪律(B1 对账输出承接) | C3 每次行值修订必须走满七步调参流程,且不得触碰已锁约束边界——四条边界见下表(B1 条款③⑤对账输出与预警⑥ = "禁止独立调参"纪律的量化边界,C3 调参必须在其内工作或显式扩界;registry 回执见依赖节对账登记表) | F7 七步流程;B1 条款③⑤对账输出;对账登记表 |
|
||||
规则:
|
||||
|
||||
1. C3 把全部 (level_index, node_depth) 维度的最终数值**直填**各基表行(EnemyTable / BoardGenTable / RewardTable——切片已验证的工作方式:R1 floor 解析直读、零新机制);DifficultyTable 仅承载"按坐标施加的全局修饰"结构位,MVP 不产生任何修饰行;Boss 走 Dmax 直填行、不走修饰表(Core Rule 1)。
|
||||
2. 难度 = f(L, D) 双轴语义:L 维(关间)= 大台阶——每关至少一项新内容投放(新敌种 或 新行为环段 或 新变异解锁)+ 基准数值跳升;D 维(关内)= 小坡度——同敌种数值平缓上移(坡度域见 F1)、板参数温和加压(尺寸/密度小步上调,推理率 target 不低于 0.85 绝对锚);Boss = 各关 Dmax 行(Core Rule 2)。
|
||||
3. 每关至少一个新敌种或既有敌种新环段投放;MVP 投放 = L1 三段(goblin→bugbear→ogre_chief,见行值总表);DND 更名批生效:grub→goblin、ambusher→bugbear、boss_guardian→ogre_chief——registry/B2/D1/art-bible 键集随本修订批对齐;多敌种同深度选择:MVP 每行集恰一敌种(B2 锁定),C1 分支地图定稿时若需同深度多敌种选择,走预登记改键通道——本 GDD 预留不定义(Core Rule 3)。
|
||||
4. 垂直切片调参登记的行集有实测依据,转正为 MVP 默认曲线——权威枚举 = 下两张表(v3,出处 = 切片 .tres),旧登记表(grub 时代值)由本表替代;后续 L2+ 曲线数值随关卡内容扩展填充(Core Rule 4)。
|
||||
|
||||
### MVP 行值总表(权威枚举,出处 = 切片 .tres v3)
|
||||
|
||||
@@ -97,7 +80,9 @@
|
||||
| L1 | D4 | ogre_chief | 食人魔酋长 | 150 | 9 [6,12] | 1 | [attack, attack, charge, heavy] | b |
|
||||
| L2 | D0 | bugbear | 熊地精 | 30 | 7 [4,10] | 1 | [attack, charge, heavy] | a |
|
||||
|
||||
| 表 | 转正行集(登记值) |
|
||||
### 转正行集(登记值)
|
||||
|
||||
| 表 | 转正行集 |
|
||||
|---|---|
|
||||
| BoardGenTable L1 深度轴 | D0/D1 10×10 · D2–D4 12×12 · d0.25/t0.88 · attempts 24 |
|
||||
| HeroTable | atk = 6 · max_hp = 50 |
|
||||
@@ -107,10 +92,12 @@
|
||||
|
||||
- 实测依据:期望扫描 N=15–30 × 多种子 + 8 种子密度实验 + 试玩批次 1 + 减伤墙批。
|
||||
- v3 数值批(试玩批次 1 裁决):atk 4/4/6/4/7 → 7/5/9/6/9(约 +50%,承伤侧主杠杆);D0 24 保持防秒杀(20hp 会被首轮盲挖粉尘秒杀——12+9);Boss 130→150(用户拍板可上调)。
|
||||
- **区间批(现行)**:奖励五行 power 区间化(heal_minor [2,6] / knife_t1 [5,11] / heal_pack [6,18] / knife_adv [10,22] / clear_blast [25,55]——身份批内 roll,中点恒等原值)+ 敌方 atk 区间化(上表 [min,max],遭遇骰同流 spawn 期整战持久,±3 provisional)——宽度均 provisional 归本 GDD 测量迭代;A3 条款①当量锚以中点口径维持;验收口径 = 完美策略档 0 加成通关 ≤40%(OQ7)。
|
||||
- **加难走廊(带锚定稿预登记)**:L1 基线通关率目标 [30%, 50%],现扫描 60% 越上界——杠杆候选 = r_boss 上探走廊(Boss 180–207,见 Boss 血量锚公式)+ 群战上探 + 供给 decay 0.5→0.6;**扫描验证待执行(OQ7——本会话无 godot 运行时),落带前 v3 值维持 provisional-pending-scan**。
|
||||
- 区间批(现行):奖励五行 power 区间化(heal_minor [2,6] / knife_t1 [5,11] / heal_pack [6,18] / knife_adv [10,22] / clear_blast [25,55]——身份批内 roll,中点恒等原值)+ 敌方 atk 区间化(上表 [min,max],遭遇骰同流 spawn 期整战持久,±3 provisional)——宽度均 provisional 归本 GDD 测量迭代;A3 条款①当量锚以中点口径维持;验收口径 = 完美策略档 0 加成通关 ≤40%(OQ7)。
|
||||
- 加难走廊(带锚定稿预登记):L1 基线通关率目标 [30%, 50%],现扫描 60% 越上界——杠杆候选 = r_boss 上探走廊(Boss 180–207,见 F3)+ 群战上探 + 供给 decay 0.5→0.6;扫描验证待执行(OQ7),落带前 v3 值维持 provisional-pending-scan。
|
||||
|
||||
### 遭遇随机化细则(Core Rule 8)
|
||||
### 遭遇随机化(区间 unit_count)
|
||||
|
||||
1. EnemyTable 行 unit_count 升级为**区间语义** [unit_count, unit_count_max](域 [unit_count, 3],B2 上界锁定不变),掷骰经 RngService encounter 封闭流;接口漂移登记完成:registry 流集合含 encounter、B1 begin_battle 掷骰增补、B2 spawn override 参数与 unit_count_max 字段增补、D2 schema 两字段增补(Core Rule 8)。
|
||||
|
||||
| 项 | 语义 |
|
||||
|---|---|
|
||||
@@ -122,18 +109,24 @@
|
||||
| 消费方式 | B1 掷骰 → B2.spawn 以 override 参数接收实际数量(B2 零随机纪律保持——收到的即确定值;B2 GDD 增补条款) |
|
||||
| 教学位豁免 | 新敌种首遇节点固定数量不加骰(D0 goblin ×1、D2 bugbear ×1 固定——行值总表) |
|
||||
| 可回放性 | 同种子全程可回放(流取号确定性不变) |
|
||||
| 设计原则 | 数量是比单体质变更优先的深度表达(关内深度坡度公式 Example 延伸);期望总量对齐关级恒等式检算 |
|
||||
| 设计原则 | 数量是比单体质变更优先的深度表达(F1 Example 延伸);期望总量对齐关级恒等式检算 |
|
||||
|
||||
### 调参约束边界(Core Rule 9)
|
||||
|
||||
| # | 约束边界 | 内容 |
|
||||
| 字段 | 域 | 语义 |
|
||||
|---|---|---|
|
||||
| ① | 条款③满配破线 | unit_count>1 的行须满足"降密度或降 m_amb"补偿——registry clause3_supply 已登记;切片群战行 hp/atk 下调为合规先例 |
|
||||
| ② | 条款⑤清图支配性 | 约束包①需求对 clear_blast(instant_aoe,C = power = 40)重推:缺口 = 46.1−40 = 6.1(L1)/ 91.8−40 = 51.8(L2)——登记为非支配设计态 + OQ4 playtest 观测弃图率(原 clear_knife C=8/16 模型由现行登记替代) |
|
||||
| ③ | 可推理率绝对锚 | target ∈ [0.85, 1] 不可下探(P1 生成端保证) |
|
||||
| ④ | 期望表对照 | 调参后期望表必须复算并在 README 调参日志登记偏离 |
|
||||
| unit_count | int [1, 3] | 区间下界;旧行语义 = 固定数量 |
|
||||
| unit_count_max | int [unit_count, 3],可省略 | 区间上界——缺省 = 定值,旧行零迁移;掷骰 = B1 实例化期区间均匀骰 |
|
||||
|
||||
## 枚举
|
||||
| 流 | scope 绑定 | 消费点 | 语义 |
|
||||
|---|---|---|---|
|
||||
| encounter | 每次战斗实例化恰一 scope | B1.begin_battle 实例化期(扫雷开始前) | unit_count 区间均匀骰——同敌种数量随机;发生在挖掘决策域之外(P1 合规);同种子全程可回放 |
|
||||
|
||||
## Boss / 精英 / 全局变异语义
|
||||
|
||||
规则:
|
||||
|
||||
1. Boss = 关卡末节点 = Dmax 行(LevelTable 末节点必须 Boss——schema 校验);Boss 战胜利 = 关卡通关(C1/C2 域编排);Boss 数值台阶 = hp 取本关普通战斗 hp 期望总和的 0.5–1.1 倍 + atk ≥ 本关普通战最高行 atk(现值 Boss 9 ≥ bugbear 9 ✓)+ 专属行为环(含 charge 拍——玩家可规划的安全挖掘拍);Boss 板 = 本关最大板形 + 密度上探,受可推理率 target 绝对锚约束(Core Rule 5,A1 第三轴登记约定兑现)。
|
||||
2. 精英节点 MVP 不实现:`elite_` / `boss_` 前缀字段命名空间预留保留;精英修饰完整语义(独立节点类型/词缀系统/出现规则)归 C1 关卡节点地图定稿后的联动设计;分支地图中"同深度并存精英与普通节点"触发棋盘生成端强制重审(改键走 D2 接口漂移规则);本 GDD 承诺 DifficultyTable 结构位 + 命名空间预留足以承载,不预写语义(Core Rule 6)。
|
||||
3. `scope=global` 变异 = 该变异施加于整板全部合格格(区别于 region 的区域布置);全局变异仅 Boss/精英图可产生(普通图禁用——加载期校验:global 变异的布置行须伴随 elite/boss 标记;MVP 无标记字段前 = MVP 不产生 global 行,A4 既有 warning 承载);MVP 不定义任何具体全局变异行(岩浆/冰冻无 MVP 容器——A4 锁定),本条只锁定语义框架与禁用面(Core Rule 7)。
|
||||
|
||||
### DifficultyTable(新表,MVP 空表——结构位)
|
||||
|
||||
@@ -143,18 +136,13 @@
|
||||
| 乘数域 | [0.1, 10](registry 预登记) | 套乘施加点 = B2.spawn 实例化时、行值快照之前;越域 → clamp 至域界 + warning(registry 登记的显式例外——组合事故非配置事故,非 fail-fast 场景) |
|
||||
| MVP 行集 | 空(零修饰行) | 首个使用场景 = 精英节点;Boss 走 Dmax 直填行、不走修饰表;建表走 D2 接口漂移规则 |
|
||||
|
||||
### EnemyTable.unit_count 区间语义(Core Rule 8)
|
||||
### DifficultyTable schema(difficulty.tres 待建——D2 接口漂移建表)
|
||||
|
||||
| 字段 | 域 | 语义 |
|
||||
|---|---|---|
|
||||
| unit_count | int [1, 3] | 区间下界;旧行语义 = 固定数量 |
|
||||
| unit_count_max | int [unit_count, 3],可省略 | 区间上界——缺省 = 定值,旧行零迁移;掷骰 = B1 实例化期区间均匀骰 |
|
||||
|
||||
### RngService 流集合(encounter——已登记)
|
||||
|
||||
| 流 | scope 绑定 | 消费点 | 语义 |
|
||||
| 字段 | 类型/域 | 默认 | knob |
|
||||
|---|---|---|---|
|
||||
| encounter | 每次战斗实例化恰一 scope | B1.begin_battle 实例化期(扫雷开始前) | unit_count 区间均匀骰——同敌种数量随机;发生在挖掘决策域之外(P1 合规);同种子全程可回放 |
|
||||
| level_index + node_depth(复合键) | int × int | — | ✗(结构键) |
|
||||
| 修饰乘数 | float [0.1, 10](registry 预登记域) | —(MVP 空表无行) | ✓(精英节点上线时启用;越域 clamp + warning——域界 = 玩法硬顶) |
|
||||
| elite_ / boss_ 前缀预留字段位 | 命名空间预留(D2 schema 断言期望暴露) | 无 | ✗(预留,随精英节点语义定稿) |
|
||||
|
||||
### A4 变异 unlock_level 门控序列(投放计划归 C3)
|
||||
|
||||
@@ -164,79 +152,45 @@
|
||||
| 2 | 雾 | unlock_level = 2(A4 锁定) | 雾参数 f≤8d / ≤0.25(P1 度量绝对上限) |
|
||||
| 3 | 岩浆/冰冻 | 随关卡扩展 | 无 MVP 容器(A4 锁定)——投放计划归 C3 |
|
||||
|
||||
## 数值结论与推导
|
||||
设计意图:Boss 用直填行、精英留结构位——大台阶要一行可读可断言,修饰留给未来按坐标注入。
|
||||
|
||||
> 定位声明:C3 是数据系统——运行时零新增公式(数值直填基表行,运行时仅经既有 B1 乘区 / B2 接口 / R1 直读运作)。本节全部公式为**设计期工具式**(曲线拟合基准、区间估算、对账复算),执行载体 = 调参期批量工具(level_monte_carlo.gd / reward_expectation.gd,见 F7),不进入游戏运行时。全部数值 provisional 起步,随 playtest 修正。
|
||||
## 难度模型公式(设计期工具式)
|
||||
|
||||
> 定位声明:C3 是数据系统——运行时零新增公式(数值直填基表行,运行时仅经既有 B1 乘区 / B2 接口 / R1 直读运作)。本节全部公式为设计期工具式(曲线拟合基准、区间估算、对账复算),执行载体 = 调参期批量工具(level_monte_carlo.gd / reward_expectation.gd),不进入游戏运行时。全部数值 provisional 起步,随 playtest 修正。
|
||||
|
||||
### F1 关内深度坡度(D 轴小坡度)
|
||||
|
||||
**结论**:hp_D = round(hp_0 × (1 + s_hp × D))——每档 +5%–20%,Dmax=4 处 1.2–1.8 × D0、Dmax=5 处 1.25–2.0 × D0(同敌种内);MVP 直填行近似此式、不运行时计算;敌种切换(新敌种登场)不受本式约束——台阶值直接定。
|
||||
|
||||
#### 推导
|
||||
|
||||
```
|
||||
hp_D = round(hp_0 × (1 + s_hp × D))
|
||||
hp_0 ∈ [1,999](该敌种 D0 行 hp)· s_hp ∈ [0.05, 0.20](每深度档增幅)· D ∈ [0, Dmax](节点深度,Boss = Dmax)
|
||||
```
|
||||
|
||||
**Variables:**
|
||||
|
||||
| Variable | Symbol | Type | Range | Description |
|
||||
|---|---|---|---|---|
|
||||
| 深度基准值 | hp_0 | int | [1,999] | 该敌种 D0 行 hp |
|
||||
| 坡度系数 | s_hp | float | [0.05, 0.20] | 每深度档增幅 |
|
||||
| 节点深度 | D | int | [0, Dmax] | 节点深度(Boss = Dmax) |
|
||||
|
||||
**验算与边界:**
|
||||
|
||||
| 项 | 内容 |
|
||||
|---|---|
|
||||
| Example | goblin 24hp:D1 理论 24×1.1 ≈ 26——切片实际以"群×2"(13hp ×2–3 只)表达深度压力:数量是比单体质变更优先的深度表达(保持单拍环低威胁读数、总量受控) |
|
||||
- Example:goblin 24hp 的 D1 理论值 24×1.1 ≈ 26——切片实际以"群×2"(13hp ×2–3 只)表达深度压力:数量是比单体质变更优先的深度表达(保持单拍环低威胁读数、总量受控)。
|
||||
|
||||
### F2 关间台阶(L 轴大台阶)
|
||||
|
||||
**结论**:base(L+1) ≈ base(L).Dmax × k_L、k_L ∈ [1.3, 1.6]——k_L 作用于**同敌种基准**(敌种延续场景,如 L2 bugbear 延续至 L3);新敌种登场时基准按其环复杂度重定(三拍环单位 hp 低于单拍环同关值——切片先例:bugbear 40/18 < goblin 群总量但威胁更高)。
|
||||
|
||||
#### 推导
|
||||
**结论**:base(L+1) ≈ base(L).Dmax × k_L、k_L ∈ [1.3, 1.6]——k_L 作用于**同敌种基准**(敌种延续场景,如 L2 bugbear 延续至 L3);新敌种登场时基准按其环复杂度重定(三拍环单位 hp 低于单拍环同关值——切片先例:bugbear 40/18 < goblin 群总量但威胁更高)。相邻关数值倍率 1.3–1.6,叠加新敌种环复杂度实际体感台阶更大。
|
||||
|
||||
```
|
||||
base(L+1) ≈ base(L).Dmax × k_L k_L ∈ [1.3, 1.6]
|
||||
```
|
||||
|
||||
**Variables:**
|
||||
|
||||
| Variable | Symbol | Type | Range | Description |
|
||||
|---|---|---|---|---|
|
||||
| 关间系数 | k_L | float | [1.3, 1.6] | 下一关 D0 基准 = 本关 Dmax × k_L(数值跳升 + 新敌种/新变异共同构成台阶感) |
|
||||
|
||||
**验算与边界:**
|
||||
|
||||
| 项 | 内容 |
|
||||
|---|---|
|
||||
| Output Range | 相邻关数值倍率 1.3–1.6;叠加新敌种环复杂度,实际体感台阶更大 |
|
||||
| 反例 | L1 Dmax 酋长 150hp → L2 D0 bugbear 基准 ≈ 210 的直推不成立——新敌种登场基准按环复杂度重定,k_L 仅适用于敌种延续场景(L2 锚行 30/7 为内容行非 k_L 直推) |
|
||||
- 反例(边界):L1 Dmax 酋长 150hp → L2 D0 bugbear 基准 ≈ 210 的直推不成立——新敌种登场基准按环复杂度重定,k_L 仅适用于敌种延续场景(L2 锚行 30/7 为内容行非 k_L 直推)。
|
||||
|
||||
### F3 Boss 血量锚
|
||||
|
||||
**结论**:boss_hp ≈ round(Σ普通战斗hp期望 × r_boss)、r_boss ∈ [0.5, 1.1]——"Boss 是本关最大的单场消耗",量级上探至全关消耗;**加难走廊 [1.1, 1.35] 预登记**(带锚定稿——L1 通关率压带首选杠杆,扫描终裁后落带)。
|
||||
|
||||
#### 推导
|
||||
|
||||
```
|
||||
boss_hp ≈ round(Σ普通战斗hp期望 × r_boss) r_boss ∈ [0.5, 1.1](走廊 [1.1, 1.35])
|
||||
Σ普通战斗hp期望 ∈ [1,999]×N:本关全部非 Boss 节点敌方 hp 期望合计(含 unit_count 区间骰期望——口径与击杀侧恒等式统一)
|
||||
```
|
||||
|
||||
**Variables:**
|
||||
|
||||
| Variable | Symbol | Type | Range | Description |
|
||||
|---|---|---|---|---|
|
||||
| 本关普通战斗 hp 期望总和 | Σ普通战斗hp期望 | float | [1,999]×N | 本关全部非 Boss 节点的敌方 hp 期望合计(**含 unit_count 区间骰期望**——口径与击杀侧恒等式统一) |
|
||||
| Boss 占比 | r_boss | float | [0.5, 1.1](走廊 [1.1, 1.35]) | Boss 相对全关消耗的血量锚 |
|
||||
|
||||
**验算与边界:**
|
||||
|
||||
| 验算 | 读数 | 判定 |
|
||||
|---|---|---|
|
||||
| L1 v3:Σ = 36(D0 [1,2]×24)+ 32.5(D1 [2,3]×13)+ 40(D2)+ 45(D3 [2,3]×18)= 153.5 → Boss 150/153.5 ≈ **0.98** | 带内 | ✓(口径更正:旧验算 Σ=142 为固定数量口径与旧 Boss 值混算,由本行替代;口径与击杀侧恒等式统一) |
|
||||
| L1 v3 | Σ = 36(D0 [1,2]×24)+ 32.5(D1 [2,3]×13)+ 40(D2)+ 45(D3 [2,3]×18)= 153.5 → Boss 150/153.5 ≈ **0.98** | 带内 ✓ |
|
||||
| 走廊验算 | Boss 180/153.5 ≈ 1.17、200/153.5 ≈ 1.30 ∈ [1.1, 1.35] | 走廊内 ✓ |
|
||||
| 败北分布 | 向 Boss 集中(4/6) | 符合压迫预期 ✓ |
|
||||
|
||||
@@ -244,36 +198,23 @@ boss_hp ≈ round(Σ普通战斗hp期望 × r_boss) r_boss ∈ [0.5, 1.1]
|
||||
|
||||
**结论**:E[承伤/场] ≈ Σ_rounds Σ_enemies E[beat_dmg] × (1 − E[减伤] − weaken覆盖);对照带 ≤20%/普通场、≤50%/Boss 场。派生**生存区间** S = [(HP进战 + 治疗下界) ÷ 入伤峰值, (HP进战 + 治疗上界) ÷ 入伤谷值]——区间模型三档判定的生存侧输入。
|
||||
|
||||
#### 推导
|
||||
|
||||
```
|
||||
E[承伤/场] ≈ Σ_rounds Σ_enemies E[beat_dmg] × (1 − E[减伤] − E[weaken覆盖])
|
||||
S = [ (HP进战 + 治疗min) ÷ 入伤峰值 , (HP进战 + 治疗max) ÷ 入伤谷值 ]
|
||||
E[beat_dmg] ∈ [0,999]:敌 atk × 拍别乘数(heavy=2)+ 伏击 flat(+3×层数,帽 4)——行为环确定性轮转
|
||||
E[减伤] ∈ [0,0.6]:defense_up 授予率 × 当次减伤(−30×2 层帽 −60%——减伤墙批现行值)
|
||||
E[weaken覆盖] ∈ [0,0.65]:标中旗 −65% 输出对战斗轮的覆盖期望——生存侧最大单一杠杆(P3 兑现点)
|
||||
入伤峰值/谷值 d_max / d_min ∈ [0,999]:峰值 = heavy 齐射尖峰 + 伏击满层、零减伤;谷值 = charge 拍 + 全减伤
|
||||
```
|
||||
|
||||
**Variables:**
|
||||
|
||||
| Variable | Symbol | Type | Range | Description |
|
||||
|---|---|---|---|---|
|
||||
| 每拍期望伤害 | E[beat_dmg] | float | [0,999] | 敌 atk × 拍别乘数(heavy=2)+ 伏击 flat(+3×层数,帽 4)——行为环确定性轮转 |
|
||||
| 减伤期望 | E[减伤] | float | [0,0.6] | defense_up 授予率 × 当次减伤(−30×2 层帽 −60%——减伤墙批现行值) |
|
||||
| weaken 覆盖 | E[weaken覆盖] | float | [0,0.65] | 标中旗 −65% 输出对战斗轮的覆盖期望——**生存侧最大单一杠杆**(P3 兑现点) |
|
||||
| 入伤峰值/谷值 | d_max / d_min | float | [0,999] | 峰值 = heavy 齐射尖峰 + 伏击满层、零减伤;谷值 = charge 拍 + 全减伤 |
|
||||
|
||||
**验算与边界:**
|
||||
|
||||
| 验算 | 读数 | 判定 |
|
||||
|---|---|---|
|
||||
| D0 goblin ×1(7atk 单拍环)每结算恒 7 × (1−0.22 平均减伤) ≈ 5.5/轮 → 裸 R_survive ≈ 50/5.5 ≈ 9 轮 | — | L1 五战 S 区间手算见区间模型验算表 |
|
||||
| D0 goblin ×1(7atk 单拍环) | 每结算恒 7 × (1−0.22 平均减伤) ≈ 5.5/轮 → 裸 R_survive ≈ 50/5.5 ≈ 9 轮 | L1 五战 S 区间手算见 F6 |
|
||||
| 减伤墙批注 | defense_scan 实测墙轮 39%、真人 12/12 轮零承伤满血通关 → defense_up −50→−30、石肤权重 24→16 | 承伤带复验责任随批(B3 侧注记已挂) |
|
||||
|
||||
### F5 通关率目标带(期望表核心)
|
||||
|
||||
**结论**:通关率按 (L, 天赋档) 目标带验收——**L1 基线 30–50%**(带锚定稿,替换原 40–60%);区间机制解释:+100% atk → K 区间近似减半 → K_max ≈ S_min 转绿档 → ≥95%。**真人方向更正**:批次 1 实测真人显著强于模拟者(v2 真人 100% vs 模拟 80%)——原"真人预期低于模拟"方向声明由本结论更正;带按模拟口径定义,真人系数批次 2 标定(OQ3)。
|
||||
|
||||
#### 推导
|
||||
|
||||
**Variables(目标带):**
|
||||
**结论**:通关率按 (L, 天赋档) 目标带验收——**L1 基线 30–50%**(带锚定稿,替换原 40–60%);区间机制解释:+100% atk → K 区间近似减半 → K_max ≈ S_min 转绿档 → ≥95%。**真人方向更正**:批次 1 实测真人显著强于模拟者(v2 真人 100% vs 模拟 80%)——带按模拟口径定义,真人系数批次 2 标定(OQ3)。
|
||||
|
||||
| 目标带 | 基线(无天赋) | 中天赋(+100% atk) | 高天赋(+200%) |
|
||||
|---|---|---|---|
|
||||
@@ -281,20 +222,16 @@ S = [ (HP进战 + 治疗min) ÷ 入伤峰值 , (HP进战 + 治疗max) ÷ 入伤
|
||||
| L2 | 20–40%(provisional,随 OQ1 校准) | 60–80% | ≥90% |
|
||||
| L3+ | 10–25%(provisional) | 40–60% | 60–80% |
|
||||
|
||||
**验算与边界:**
|
||||
|
||||
| 项 | 内容 |
|
||||
| 验算 | 读数 |
|
||||
|---|---|
|
||||
| v3 扫描 | 基线 60%——**越 [30,50] 上界** → 加难杠杆批内即调(带锚定稿杠杆:r_boss 走廊 + 群战上探 + decay 0.6 候选);扫描落带前登记 provisional-pending-scan(OQ7) |
|
||||
| 完美策略档扫描(OQ7;工具 = smoke/auto_player.gd 完美档求解器 + level_monte_carlo 策略轴) | **区间批后复测(2026-09-14,N=30)**:0 加成通关仍 **100%**、剩余 HP 均 47.4/50、承伤均 3.9(区间前 3.5)、踩雷 0.00/局——+50%~+200% 恒 100%;**承伤带与 F5 带对技能轴上界零分辨力**(calibration_gap 定量读数)。实测结论:**奖励侧 + 敌方侧数值区间已全部落地仍压不动完美档**——其结构性优势(零踩雷直伤 + 全标旗 weaken 顶格 + 快杀)使 47/50 血缓冲吞掉全部值域方差;≤40% 验收线需结构性杠杆(承伤硬地板 / weaken 饱和语义 / 完美度定价)或极端宽度(毁基线与可读性,建议否决)——**待用户裁决(OQ7 待拍板主项)** |
|
||||
| 完美策略档扫描(OQ7) | 区间批后复测:0 加成通关仍 **100%**、剩余 HP 均 47.4/50、承伤均 3.9(区间前 3.5)、踩雷 0.00/局——+50%~+200% 恒 100%;承伤带与 F5 带对技能轴上界零分辨力——数值区间杠杆族对 ≤40% 验收线无效已实测坐实,结构性杠杆三选待裁决(详见推演件 OQ7) |
|
||||
| 败北分布 | 向 Boss 集中(4/6)✓;+200% 天赋 100% ✓ |
|
||||
| 机制钩子 | 天赋列由区间位移承载(K 减半 → 绿档),非独立拍脑袋带 |
|
||||
|
||||
### F6 生存链区间模型(替代关级供给带)
|
||||
|
||||
**结论**:原关级供给带(比值 ∈ [1.1, 2.0])由本模型替代——其验算 0.54"短缺态"与实测 60% 通关矛盾,方向指引反指(对偏易的游戏报"加供给")。现行 = **生存链区间模型**:每战 S/K 区间三档判定(绿=稳定通过 / 黄=期望通过 / 红=配置事故禁止入表)+ 关级通关恒等式 + 输出占比带。设计期工具式,运行时零公式。
|
||||
|
||||
#### 推导
|
||||
**结论**:原关级供给带(比值 ∈ [1.1, 2.0])由本模型替代;现行 = **生存链区间模型**:每战 S/K 区间三档判定(绿=稳定通过 / 黄=期望通过 / 红=配置事故禁止入表)+ 关级通关恒等式 + 输出占比带。设计期工具式,运行时零公式。
|
||||
|
||||
```
|
||||
S = [ (HP进战 + 治疗min) ÷ 入伤峰值 , (HP进战 + 治疗max) ÷ 入伤谷值 ] (生存区间——F4)
|
||||
@@ -302,15 +239,13 @@ K = [ (Σ敌hp − 一次性伤害max) ÷ 输出峰值 , (Σ敌hp − 一次性
|
||||
|
||||
绿档: S_min > K_max —— 最坏也能过,与运气无关(教学位必须绿档)
|
||||
黄档: E[S] ≥ E[K] + 1 且非绿 —— 有失败分支,期望占优(margin ≥ 1 轮最低阈值)
|
||||
红档: S_max ≤ K_min —— 最好也打不过,配置事故(F7 第③步拦截)
|
||||
红档: S_max ≤ K_min —— 最好也打不过,配置事故(七步流程第③步拦截)
|
||||
|
||||
关级恒等式: atk × Σ R_survive(i) + Σ奖励输出 ≈ Σ敌hp期望 × (1 + 缓冲)
|
||||
(actuals 逐项审计闭合——五项输出 × 三项输入全部入账)
|
||||
```
|
||||
|
||||
**Variables:**
|
||||
|
||||
| Variable | 来源 | Description |
|
||||
| 输入项 | 来源 | 构成 |
|
||||
|---|---|---|
|
||||
| 入伤 | 表值 + actuals | 敌 atk × 拍别乘数 + 伏击 flat − 减伤 − weaken(F4) |
|
||||
| 输出 | 表值 + actuals | 基础攻击 6×(1+attack_up) + 伤害A(开格充能 1/格 帽 8,甲A ×1.5/甲B ×0.5)+ 伤害B(标雷充能 2/雷,甲B ×1.5/甲A ×0.5)+ 刀(8/16,不吃 percent) |
|
||||
@@ -318,154 +253,53 @@ K = [ (Σ敌hp − 一次性伤害max) ÷ 输出峰值 , (Σ敌hp − 一次性
|
||||
| 治疗 | 表值 + actuals | heal_pack 12 + heal_minor 4(注入/格子池期望) |
|
||||
| 数量骰 | 表值 | unit_count 区间 [unit_count, unit_count_max] |
|
||||
|
||||
**验算与边界:**
|
||||
|
||||
| 项 | 内容 |
|
||||
| 验算与口径 | 读数 |
|
||||
|---|---|
|
||||
| L1 五战区间手算(≈ 估算,p10–p90 口径) | D0 goblin×1(教学位固定):S≈[7,12] vs K≈[2,4] → **绿** ✓ · D1 ×[2,3]:S≈[4,10] vs K≈[2,6] → 黄 · D2 bugbear(首遇固定):S≈[4,12] vs K≈[2,6] → 黄 · D3 ×[2,3]:S≈[2,6] vs K≈[2,7] → 黄偏红 · Boss 酋长:S≈[4,15](旗覆盖率主导)vs K≈[7,18](囤刀+甲B 对策)→ 黄红边缘 |
|
||||
| L1 形态带 | ≥1 绿(教学位)+ 中段黄 + Boss 黄不红——手算形态符合 ✓ |
|
||||
| 关级恒等式漏项审计 | 原供给 180 的漏项:clear_blast 只算一次(实际 ×清图数 3–4 = 120–160)、伤害A/B 充能、attack_up 增量、RAP 刷新新板追加供给——逐项入账后闭合,"0.54 短缺"消失 |
|
||||
| 输出占比带 | 奖励侧输出(刀+clear_blast+A/B 充能)÷ 总输出 ∈ **[15%, 40%]**——<15% 奖励摆设、>40% 供给依赖(AC-14) |
|
||||
| 口径注记 | 区间两口径:公式包络(必过/必死结论)与 actuals p10–p90(日常判定——B1 actuals p10 纪律同构);HP 持久化耦合各战区间,联合分布由 monte_carlo 裁决 |
|
||||
| C4 平移换算率 | +10hp ≈ +1 轮(÷d̄≈8–10);atk 翻倍 ≈ K 减半——区间位移机制承载通关率天赋列,非独立拍带 |
|
||||
|
||||
### F7 调参流程(每次修订强制走完——七步)
|
||||
设计意图:区间模型直接建模"能不能过/赢得多惨",与 monte_carlo actuals 同构——供给带为何反指、恒等式如何闭合,见推演件。
|
||||
|
||||
**结论**:改表值 → smoke_all 全绿 → level_monte_carlo 扫描(通关率带 + 三档判定 + 通关余量 + 占比)→ B4 登记常数与对账重制 → 对账复算(条款③⑤/预警⑥)→ README 调参日志登记——任一步 FAIL → 回滚或登记 OQ,禁止带病前进。
|
||||
## 调参纪律与状态
|
||||
|
||||
#### 推导
|
||||
规则:
|
||||
|
||||
**Variables:**
|
||||
1. C3 每次行值修订必须走满七步调参流程,且不得触碰已锁约束边界——四条边界见下表;B1 条款③⑤对账输出与预警⑥是"禁止独立调参"纪律的量化边界,C3 调参必须在其内工作或显式扩界(Core Rule 9)。
|
||||
2. 联动网络六组禁止独立调参(见下表);任一步 FAIL → 回滚或登记开放问题,禁止带病前进。
|
||||
3. 设计期任一行值恒处于状态表五态之一;期望表偏离禁止静默出带;C3 无运行时状态机(数值系统)。
|
||||
|
||||
| Variable | Symbol | Type | Range | Description |
|
||||
|---|---|---|---|---|
|
||||
| 批量样本量 | N | int | ≥256(正式)/ 15–30(切片临时) | 正式批量工具 = level_monte_carlo 扩展(逐行聚合 + N 参数化 + 区间分位/降级统计)——**扫描执行本体归 A1 F4 工具交付(A1 OQ1),C3 的 level_monte_carlo 扩展为消费方**(所有权澄清:A1 工具产出 actuals → C3 扫描消费,非替代) |
|
||||
### 七步调参流程(每次修订强制走完)
|
||||
|
||||
**验算与边界:**
|
||||
```
|
||||
① 改表值(C3 直辖 knob)
|
||||
│ ② smoke_all 全绿(含 A1 生成质量闸——d0.28 回退先例的拦截点)
|
||||
│ ③ level_monte_carlo 扫描(通关率带 + 三档判定 + 通关余量 + 输出占比)
|
||||
│ ④ B4 登记常数与对账重制(AC-19 对账对漂移检测 / AC-6 分支 4 / AC-18 重跑——B4 义务 #10)
|
||||
│ ⑤ 对账复算(条款③⑤ / 预警⑥)
|
||||
│ ⑥ README 调参日志登记(含期望偏离)
|
||||
▼
|
||||
行值生效(任一步 FAIL → 回滚或登记 OQ——禁止带病前进)
|
||||
```
|
||||
|
||||
| 项 | 内容 |
|
||||
**批量样本量 N**:≥256(正式)/ 15–30(切片临时);正式批量工具 = level_monte_carlo 扩展(逐行聚合 + N 参数化 + 区间分位/降级统计)——扫描执行本体归 A1 F4 工具交付,C3 的扩展为消费方(A1 工具产出 actuals → C3 扫描消费,非替代)。
|
||||
|
||||
| 流程锚点 | 内容 |
|
||||
|---|---|
|
||||
| Output Range | 任一步 FAIL → 回滚或登记 OQ,禁止带病前进 |
|
||||
| Example | 切片 d0.28 回退先例:d0.28/t0.87 → best≈0.81 降级告警 → 回退 0.25/0.88——第 2 步(A1 生成质量闸)拦截的成功案例 |
|
||||
| 第④步依据 | B4 义务 #10:"C3 调参流程若无'登记常数与对账重制'步骤则相关 AC 假失败"(T_fog_min/K_dmg/N_draft/P_min/默认根行值调参 → B4 AC-19 对账对 (knife_adv, attack_up_basic) 漂移检测、AC-6 分支 4、AC-18 重跑) |
|
||||
| 第②步闸 | A1 生成质量闸——切片 d0.28 回退先例:d0.28/t0.87 → best≈0.81 降级告警 → 回退 0.25/0.88 |
|
||||
| 第④步依据 | B4 义务 #10:无"登记常数与对账重制"步骤则相关 AC 假失败——T_fog_min/K_dmg/N_draft/P_min/默认根行值调参 → B4 AC-19 对账对 (knife_adv, attack_up_basic) 漂移检测、AC-6 分支 4、AC-18 重跑 |
|
||||
| Output | 任一步 FAIL → 回滚或登记 OQ,禁止带病前进 |
|
||||
|
||||
## 状态
|
||||
### 调参约束边界(四条)
|
||||
|
||||
| 状态 | 进入条件 | 行为/出口 |
|
||||
| # | 约束边界 | 内容 |
|
||||
|---|---|---|
|
||||
| 未调参行 | 新增 (L,D) 行仅有结构占位 | 经七步流程 → 已调参 |
|
||||
| 已调参行 | 行值经批量仿真 + 期望表对照 + 对账复算 | 任何修订 → 重走七步流程 |
|
||||
| SLICE-TUNED 转正 | 切片临时值经本 GDD 背书(行值总表 v3) | → 已调参(切片行集转正条款) |
|
||||
| provisional-pending-scan | 加难杠杆候选值已登记、扫描步未执行 | 扫描落带 → 已调参;越带 → 回滚候选 |
|
||||
| 期望表偏离 | 调参后期望值越出目标带 | → 回滚或 OQ 登记(禁止静默出带) |
|
||||
|
||||
不变式:C3 无运行时状态机(数值系统);设计期任一行值恒处于上表五态之一;期望表偏离禁止静默出带。
|
||||
|
||||
## 边界情况
|
||||
|
||||
| 条件 | 行为 | 依据 |
|
||||
|---|---|---|
|
||||
| unit_count>1 行与高密度板组合 | 条款③满配语境破线(B1 F4 双轴约束)——该组合**禁止入表**;切片先例 = 群战行 hp/atk 下调补偿;对账复算在流程第 5 步强制执行 | Core Rule 9① / B1 F4 |
|
||||
| 关卡深度轴缺行(如 D3 缺失、D4 存在) | **调参期冒烟断言拦截**(跨表存在性检查——C3 调参工具域载体;D2 R1 fail-fast 语义不动);R1 floor 解析静默兜底至低档(难度降而非崩)+ ConfigDB warning 四元组仅作运行时兜底——缺行根因是调参事故而非运行时事件 | AC-1 / D2 R1 |
|
||||
| 请求越界关卡(level 999) | R1 floor 解析至表尾行(难度封顶 = 尾行值)+ warning——冒险结构(C2)应在其内容覆盖范围内生成关卡序列;越界 = 内容生产缺口,非玩家可达态 | D2 R1 |
|
||||
| 玩家天赋拉满(atk+200%)打最低难度行 | 速杀退化(预警⑥——战斗 1–2 轮终局、奖励系统饿死自己的高光);处置 = 预警⑥仪表监控(战斗结束未开资格格占比 >70% 警)+ 接受——低难度行被高天赋速杀是 Roguelike 成长兑现的合法形态,无需修复(区间形态:K_min < 2 = 预警⑥观测位) | 区间模型 / 预警⑥ |
|
||||
| 密度上探压垮推理率(d0.28 案例) | best inferability ≈0.81 < target 0.87 → 降级告警"接受最优出图";处置 = **回退**(切片先例:0.28/0.87 → 0.25/0.88)——密度与 target 是联动对(A1 求解器能力的天花板内联动调参),禁止为难度牺牲 P1 度量达标;流程第 2 步闸拦截 | F7 / A1 F4 |
|
||||
| 条款⑤清图支配性反转(弃图率 >30%) | 玩家普遍发现"挖一半就弃图刷 RAP"优于"推到底清图"→ 清图奖励与清图体验被支配;处置 = OQ4 playtest 观测(自动模拟者不弃图,测不到真人策略);届时杠杆 = C 量级上调(B1 约束包①,现值 clear_blast 40)或弃图成本重定价(A3 域)——MVP 接受当前非支配设计态(缺口 6.1/51.8,实测后再裁) | B1 F5 / OQ4 |
|
||||
| 投放节奏断档(某关无新敌种且无新环段) | OQ8 违例——敌信息总量见底,学习曲线枯竭;处置 = 流程投放检查项(每关至少一项新内容——敌种投放节奏条款);违规 = 内容生产缺口,C3 调参无法修补(数值不是内容) | B2 OQ8 / AC-6 |
|
||||
| 全部行值调至域上限(hp 999 等) | 数值可行但可玩性崩塌;处置 = 通关率带对照拦截(期望表全面越带 = 配置事故)+ 域校验既有护栏;本场景属调参事故而非玩家可达态 | F5 / D2 域校验 |
|
||||
| DifficultyTable 修饰行与直填行值叠加后越域(首个精英节点上线时) | B2.spawn 套乘后 hp >999 → **clamp 至域界 + warning**(fail-fast 不适用——修饰乘数是合法配置,越界是组合事故;域界 = 玩法硬顶);MVP 空表无此场景,规则预登记 | DifficultyTable 乘数域 |
|
||||
| 通关余量越带 | p90 >13(赢得从容)→ 生存侧杠杆优先(治疗稀有度下调 / 敌 atk 上探),击杀侧杠杆次之;p10 <3(1–2 血惨胜成常态)→ 治疗供给上浮或 Boss 前恢复点增益——余量是形态指标,与通关率带联合判读 | AC-13 / 区间模型 |
|
||||
|
||||
## 依赖
|
||||
|
||||
**上游**:
|
||||
|
||||
| 系统 | 性质 | 接口要点 |
|
||||
|---|---|---|
|
||||
| D2 | 上游(硬) | 全部基表 schema、R1 解析、ConfigDB 单点读取归 D2;C3 产出 = 行值;DifficultyTable 新表走 D2 接口漂移规则(registry `difficulty_table` 已登记);禁绕过 ConfigDB 自建 load(D2 Rule 2);RngService `encounter` 封闭流(registry 已登记);**EnemyTable schema +2 字段(unit_count_max、armor_type)——接口漂移已回写 D2** |
|
||||
| B2 | 上游(硬) | EnemyTable/HeroTable 行值由 C3 填(B2 拥有字段语义与校验域);修饰施加点 = B2.spawn(实例化时套乘、行值快照之前);**spawn override 参数 + unit_count_max 字段语义 + 物种集 {goblin, bugbear, ogre_chief}——接口漂移已回写 B2**;投放节奏 OQ8 共担;多敌种同深度选择规则共裁(OQ7——C1 联动) |
|
||||
| B1 | 上游(soft,事实依赖) | 条款③⑤对账输出 = 调参约束输入(B1 F4/F5 = 约束生成器);P_perfect 乘数调参权归 C3(B1 登记);**begin_battle encounter 掷骰增补 + 护甲克制结算(armor_effectiveness/damage_a/damage_b 字段)——接口漂移已回写 B1**;期望口径双读数纪律(锚行读数不得用于 unit_count=2 放行);对账复算义务随每次修订 |
|
||||
| B4 | 上游(soft) | RewardTable/RewardConfigTable 参数值归 C3;**供给控制器机制本体归 B4(转正登记——首件保证 + 指数递减注入,active_p0/active_decay 参数归 C3)**;clear_blast 换位 + K_dmg=0 转正(B4 保底语义迁移);敌 hp 曲线与奖励供给禁止独立调参(registry 联动重算义务——区间模型恒等式为联合检算工具);调参期批量仿真义务载体 |
|
||||
| A1 | 上游(类型依赖) | BoardGenTable 行值归 C3(含 max_gen_attempts 策略);禁反向调用生成(仅经 D2/编排器传值);F4 批量红线(严格零降级)= 调参闸;**F4 全量批量工具 = A1 交付物(A1 OQ1),C3 level_monte_carlo 扩展为消费方**;d0.28 回退先例 = 密度×target 联动调参的实证;黄金向量/solver_rules 冻结不经 C3 |
|
||||
| A4 | 上游(soft) | scope=global 语义由本 GDD 定稿(Core Rule 7);unlock_level 门控序列投放计划归 C3(随关卡扩展);**AC-11 未来腿 = elite/boss 标记字段落地时 A4 warning 升闸——已登记为 A4 接口漂移义务** |
|
||||
| A3 | 上游(soft) | ActionEconomyTable 联动观测(ap_per_round 双重身份——节奏兼 RAP 转存规模)——**联动评估归 C3,调参所有权归 A3**(措辞更正:A3 GDD 无调参权授予回执);跨字段校验(动作成本 ≤ ap_per_round)约束内观测 |
|
||||
| B3 | 上游(soft) | StatusEffectTable 四行强度(attack_up +50 / defense_up −30 / weaken −65 / ambush +3)provisional 归 C3 联动评估(B1 免伤轮合法性注记——强度评估归 C3 对账联动);减伤墙批(−50→−30)为 B3 侧行值批,C3 承伤带复验随批 |
|
||||
|
||||
**下游**:
|
||||
|
||||
| 系统 | 接口要点 |
|
||||
|---|---|
|
||||
| C1 | 节点深度语义消费;精英节点形态联动(精英节点预留条款 / A1 定稿强制重审);未设计——Boss=Dmax 约定即为其预留的接口 |
|
||||
| C2 | 关卡序列的难度排布消费本 GDD 期望表;越界关卡 = 内容生产缺口(边界情况表);未设计 |
|
||||
| C4 | 下游(远)——元进度天赋数值的"世界侧对照物":通关率目标带(F5)是 C4 天赋强度的标定基准;**区间平移换算率(+10hp ≈ +1 轮、atk 翻倍 ≈ K 减半)为 C4 设计输入**;未设计 |
|
||||
| 呈现层(B5/D1) | Boss 登场仪式感 / 难度台阶可感知性——视觉义务归 B2/B5,C3 仅提供"何时变难"的数据(见呈现与 UI 契约) |
|
||||
|
||||
**双向一致性核对(registry / systems-index 回执):**
|
||||
|
||||
| 编号 | 内容 | 对侧 | 状态 |
|
||||
|---|---|---|---|
|
||||
| X-1 | systems-index 依赖表 C3 ← D2,B2;B1 块增补"C3 消费 B1 对账输出的事实依赖成立" | systems-index | ✅ |
|
||||
| X-2 | "敌种 hp/atk/pattern 曲线数值、难度修饰 → C3" | B2 | ✅ |
|
||||
| X-3 | "C3 = 条款③⑤约束输入方" | B1 | ✅ |
|
||||
| X-4 | "权重/档位/威力曲线 + RewardConfigTable 参数归 C3" | B4 | ✅ |
|
||||
| X-5 | "每行难度数值与曲线 → C3" | A1 | ✅ |
|
||||
| X-6 | B1:begin_battle encounter 掷骰增补 + 扫描 scope 腿 + B1"零随机"边界扩界注记(encounter 流在结算步流之外) | B1 | ✅(本次修订批回写) |
|
||||
| X-7 | B2:spawn override 参数、unit_count_max 字段语义与实例化记号调和、物种集 {goblin, bugbear, ogre_chief} | B2 | ✅(本次修订批回写) |
|
||||
| X-8 | D2:EnemyTable schema +2 字段(unit_count_max、armor_type);SettlementTable +4 字段(damage_a_per_cell/damage_a_cap/damage_b_per_flag/armor_effectiveness) | D2 | ✅(本次修订批回写) |
|
||||
| X-9 | B4:供给控制器机制承接 + clear_blast 换位 + K_dmg=0 禁区条款解除(保底语义迁移) | B4 | ✅(本次修订批回写) |
|
||||
| X-10 | A4:elite/boss 标记字段落地时 warning 升闸(AC-11 未来腿) | A4 | ✅(义务登记) |
|
||||
|
||||
**对账与义务登记(B1 对账输出承接——审计资产):**
|
||||
|
||||
| 编号 | 内容 | 对侧 | 状态 |
|
||||
|---|---|---|---|
|
||||
| 条款③ | 满配破线两轴:unit_count>1 行须满足"降密度或降 m_amb"补偿(B1 F4 双轴约束)——registry clause3_supply 登记在案 | B1 / registry | 已登记——切片群战行 hp/atk 下调为合规先例 |
|
||||
| 条款⑤ | 清图支配性:46.1/91.8 需求 vs **clear_blast C=40 现值(缺口 6.1/51.8,对 clear_blast 重推)**——登记为非支配设计态;预留杠杆 = C 量级上调(B1 约束包①)或弃图成本重定价(A3 域) | B1(B1 F5) | 已登记——OQ4 playtest 持续观测弃图率 |
|
||||
| 预警⑥ | 快杀退化:战斗结束未开资格格占比 >70% 警——高天赋速杀低难度行 = 合法形态,仪表监控不修复;区间形态钩子 = K_min < 2 观测位 | B4 / B1 | 已登记 |
|
||||
| unit_count 约束 | 区间 [unit_count, unit_count_max] ⊆ [1,3];>1 行联动条款③复算(流程第 5 步强制) | B1 / B2 | 已登记 |
|
||||
| 期望口径双读数 | 锚行读数(2.0×/2.6× 类)不得作为 unit_count=2 的放行依据 | B1 | 已登记 |
|
||||
|
||||
## 呈现与 UI 契约
|
||||
|
||||
> C3 无自有视觉/音频/UI 资产(数值系统)——义务转注如下;无新增资产需求、无 D1 新增义务登记。
|
||||
|
||||
| # | 义务 | 归属 |
|
||||
|---|---|---|
|
||||
| 1 | Boss 登场呈现(仪式感锚点——体验锚点"压迫的顶点");设计输入 = Boss=Dmax 行的数据面(本 GDD 提供) | B5 战斗表现 / D1 |
|
||||
| 2 | 难度台阶可感知性:新敌种 = 新图像线索 = 台阶的可视面孔(意图推测型——图像线索档位编码,"这只比上层的硬"可读) | B2(D1×4 义务) |
|
||||
| 3 | 变异解锁的"这一层有雾了":图例与首遇提示(已登记义务) | A4 / D1 |
|
||||
| 4 | 期望表 / 批量仿真输出 = 调参期开发工具(headless——非游戏内 UI) | 开发工具 |
|
||||
| 5 | 恢复点/奖励点呈现:C1-lite 切片已实现的节点覆盖层;正式形态归 D1/C1 | D1 / C1 |
|
||||
|
||||
## Tuning Knobs
|
||||
|
||||
> C3 是全项目 knob 保有量最大的系统(数值 owner)。全部值 provisional 起步;域与校验归各表 schema(D2);本表只登记所有权、联动与危险方向。
|
||||
|
||||
| Knob | 表 | 域 | 联动 | 过高 | 过低 |
|
||||
|---|---|---|---|---|---|
|
||||
| EnemyTable.hp/atk(逐行) | enemy.tres | [1,999] / [0,999] | **与 B4 供给禁独立调参**(区间模型恒等式联合检算);cap×atk 禁独立(B2) | 打不死、战斗冗长 | 快杀退化预警⑥ |
|
||||
| EnemyTable.unit_count / unit_count_max(逐行) | enemy.tres | [1,3] / [unit_count,3] | **>1 行须降密度或降 m_amb**(条款③);区间骰经 encounter 流 | 条款③破线 | 压力不足/遭遇零随机 |
|
||||
| EnemyTable.pattern(逐行) | enemy.tres | MVP 三值组合 | OQ8 投放节奏(每关新环段) | 信息过载 | 学习曲线枯竭 |
|
||||
| EnemyTable.armor_type(逐行) | enemy.tres | {none, a, b} | **克制矩阵联动**(settlement armor_effectiveness);伤害A/B 充能消费面(B1 域,C3 投值) | 克制失配 | 特化对策失效 |
|
||||
| HeroTable.atk/max_hp | hero.tres | [1,999] | 全部输出式的分母锚(F4/F6) | 奖励价值稀释 | 挫败感 |
|
||||
| BoardGenTable 尺寸/密度/attempts(逐行) | board_gen.tres | 域见 schema | **密度×target 联动**(d0.28 回退先例);unit_count>1 行联动 | 推理率不达标降级 | 板退化(低密度先布后删) |
|
||||
| BoardGenTable.inferability_target(逐行) | board_gen.tres | **[0.85,1] 绝对锚** | 与密度成反耦 | 生成耗时/降级 | P1 空心化 |
|
||||
| BoardGenTable 雾参数 | board_gen.tres | f≤8d / ≤0.25 | unlock_level=2 锁定 | P1 度量空心(绝对上限) | 雾内容缺位 |
|
||||
| RewardTable.weight/power/tier(逐行) | reward.tres | 域见 schema | 区间模型恒等式;攻击面稀释;clear_blast 单行槽 | 即时类淹没明细/可选类贬值 | 窗口空转/重 roll 频发 |
|
||||
| RewardConfigTable.{t_fog_min,k_dmg,n_draft,p_min} | reward_config.tres | 域见 schema | k_dmg=0 = 保底断言关闭(禁区条款已解除——保底语义由首件保证取代) | 保底永不触发 | 种子轮盘致命 |
|
||||
| 供给控制器 active_p0/active_decay | reward_config.tres | [0,1] / (0,1] | E[战斗获取]≈1 目标(B4 机制本体承接);**与敌 hp 联动** | 速杀+囤积回归 | 可选类绝育 |
|
||||
| SettlementTable.{damage_a_per_cell,damage_a_cap,damage_b_per_flag,armor_effectiveness} | settlement.tres | 域见 schema | Boss 甲B 对策 = B 充能;A 克制甲A;联动网络 #6 | Boss 裸打过慢 | 充能失效 |
|
||||
| ActionEconomyTable.{ap_per_round,rap_refresh_cost,refresh_max_per_round} | action_economy.tres | 域见 schema | ap 兼 RAP 转存规模;**调参所有权归 A3,C3 联动评估** | 轮次冗长 | 决策密度坍缩 |
|
||||
| SettlementTable.P_perfect(乘数) | settlement.tres | {100,200} | 完美排雷×清图支配性互 feed | 钓鱼线(护栏 B) | 高光缺位 |
|
||||
| DifficultyTable 修饰乘数(MVP 空表) | difficulty.tres(待建) | [0.1,10](registry 预登记) | 精英节点上线时启用 | 越域 clamp+warning | 无修饰 |
|
||||
|
||||
### DifficultyTable schema(difficulty.tres 待建——D2 接口漂移建表)
|
||||
|
||||
| 字段 | 类型/域 | 默认 | knob |
|
||||
|---|---|---|---|
|
||||
| level_index + node_depth(复合键) | int × int | — | ✗(结构键) |
|
||||
| 修饰乘数 | float [0.1, 10](registry 预登记域) | —(MVP 空表无行) | ✓(精英节点上线时启用;越域 clamp + warning——域界 = 玩法硬顶) |
|
||||
| elite_ / boss_ 前缀预留字段位 | 命名空间预留(D2 schema 断言期望暴露) | 无 | ✗(预留,随精英节点语义定稿) |
|
||||
| ① | 条款③满配破线 | unit_count>1 的行须满足"降密度或降 m_amb"补偿——registry clause3_supply 已登记;切片群战行 hp/atk 下调为合规先例 |
|
||||
| ② | 条款⑤清图支配性 | 约束包①需求对 clear_blast(instant_aoe,C = power = 40)重推:缺口 = 46.1−40 = 6.1(L1)/ 91.8−40 = 51.8(L2)——登记为非支配设计态 + OQ4 playtest 观测弃图率(原 clear_knife C=8/16 模型由现行登记替代) |
|
||||
| ③ | 可推理率绝对锚 | target ∈ [0.85, 1] 不可下探(P1 生成端保证) |
|
||||
| ④ | 期望表对照 | 调参后期望表必须复算并在 README 调参日志登记偏离 |
|
||||
|
||||
### 联动网络(禁止独立调参清单)
|
||||
|
||||
@@ -478,6 +312,120 @@ K = [ (Σ敌hp − 一次性伤害max) ÷ 输出峰值 , (Σ敌hp − 一次性
|
||||
| 5 | m_w(weaken −65)↔ 锚对照表(B1 F0) | 终值共裁 B4/B1,调参走 C3 提案通道 |
|
||||
| 6 | armor_type ↔ 伤害A/B 充能 ↔ 克制矩阵(B1 域) | 敌种甲型变更须复算 Boss/普通战 K 区间 |
|
||||
|
||||
### 行值状态
|
||||
|
||||
| 状态 | 进入条件 | 行为/出口 |
|
||||
|---|---|---|
|
||||
| 未调参行 | 新增 (L,D) 行仅有结构占位 | 经七步流程 → 已调参 |
|
||||
| 已调参行 | 行值经批量仿真 + 期望表对照 + 对账复算 | 任何修订 → 重走七步流程 |
|
||||
| SLICE-TUNED 转正 | 切片临时值经本 GDD 背书(行值总表 v3) | → 已调参(切片行集转正条款) |
|
||||
| provisional-pending-scan | 加难杠杆候选值已登记、扫描步未执行 | 扫描落带 → 已调参;越带 → 回滚候选 |
|
||||
| 期望表偏离 | 调参后期望值越出目标带 | → 回滚或 OQ 登记(禁止静默出带) |
|
||||
|
||||
### 边界情况
|
||||
|
||||
| 条件 | 行为 |
|
||||
|---|---|
|
||||
| unit_count>1 行与高密度板组合 | 条款③满配语境破线(B1 F4 双轴约束)——该组合**禁止入表**;切片先例 = 群战行 hp/atk 下调补偿;对账复算在流程第 5 步强制执行(Core Rule 9①) |
|
||||
| 关卡深度轴缺行(如 D3 缺失、D4 存在) | **调参期冒烟断言拦截**(跨表存在性检查——C3 调参工具域载体;D2 R1 fail-fast 语义不动);R1 floor 解析静默兜底至低档(难度降而非崩)+ ConfigDB warning 四元组仅作运行时兜底——缺行根因是调参事故而非运行时事件(AC-1) |
|
||||
| 请求越界关卡(level 999) | R1 floor 解析至表尾行(难度封顶 = 尾行值)+ warning——冒险结构(C2)应在其内容覆盖范围内生成关卡序列;越界 = 内容生产缺口,非玩家可达态(D2 R1) |
|
||||
| 玩家天赋拉满(atk+200%)打最低难度行 | 速杀退化(预警⑥——战斗 1–2 轮终局、奖励系统饿死自己的高光);处置 = 预警⑥仪表监控(战斗结束未开资格格占比 >70% 警)+ 接受——低难度行被高天赋速杀是 Roguelike 成长兑现的合法形态,无需修复(区间形态:K_min < 2 = 预警⑥观测位) |
|
||||
| 密度上探压垮推理率(d0.28 案例) | best inferability ≈0.81 < target 0.87 → 降级告警"接受最优出图";处置 = **回退**(切片先例:0.28/0.87 → 0.25/0.88)——密度与 target 是联动对(A1 求解器能力的天花板内联动调参),禁止为难度牺牲 P1 度量达标;流程第 2 步闸拦截 |
|
||||
| 条款⑤清图支配性反转(弃图率 >30%) | 玩家普遍发现"挖一半就弃图刷 RAP"优于"推到底清图"→ 清图奖励与清图体验被支配;处置 = OQ4 playtest 观测(自动模拟者不弃图,测不到真人策略);届时杠杆 = C 量级上调(B1 约束包①,现值 clear_blast 40)或弃图成本重定价(A3 域)——MVP 接受当前非支配设计态(缺口 6.1/51.8,实测后再裁) |
|
||||
| 投放节奏断档(某关无新敌种且无新环段) | OQ8 违例——敌信息总量见底,学习曲线枯竭;处置 = 流程投放检查项(每关至少一项新内容——敌种投放节奏条款);违规 = 内容生产缺口,C3 调参无法修补(数值不是内容) |
|
||||
| 全部行值调至域上限(hp 999 等) | 数值可行但可玩性崩塌;处置 = 通关率带对照拦截(期望表全面越带 = 配置事故)+ 域校验既有护栏;本场景属调参事故而非玩家可达态(F5 / D2 域校验) |
|
||||
| DifficultyTable 修饰行与直填行值叠加后越域(首个精英节点上线时) | B2.spawn 套乘后 hp >999 → **clamp 至域界 + warning**(fail-fast 不适用——修饰乘数是合法配置,越界是组合事故;域界 = 玩法硬顶);MVP 空表无此场景,规则预登记 |
|
||||
| 通关余量越带 | p90 >13(赢得从容)→ 生存侧杠杆优先(治疗稀有度下调 / 敌 atk 上探),击杀侧杠杆次之;p10 <3(1–2 血惨胜成常态)→ 治疗供给上浮或 Boss 前恢复点增益——余量是形态指标,与通关率带联合判读(AC-13) |
|
||||
|
||||
## 依赖与输出
|
||||
|
||||
| 方向 | 系统 | 性质 | 接口要点 |
|
||||
|---|---|---|---|
|
||||
| 上游 | D2 | hard | 全部基表 schema、R1 解析、ConfigDB 单点读取归 D2;C3 产出 = 行值;DifficultyTable 新表走 D2 接口漂移规则(registry `difficulty_table` 已登记);禁绕过 ConfigDB 自建 load(D2 Rule 2);RngService `encounter` 封闭流(registry 已登记);EnemyTable schema +2 字段(unit_count_max、armor_type)——接口漂移已回写 D2 |
|
||||
| 上游 | B2 | hard | EnemyTable/HeroTable 行值由 C3 填(B2 拥有字段语义与校验域);修饰施加点 = B2.spawn(实例化时套乘、行值快照之前);spawn override 参数 + unit_count_max 字段语义 + 物种集 {goblin, bugbear, ogre_chief}——接口漂移已回写 B2;投放节奏 OQ8 共担;多敌种同深度选择规则共裁(OQ7——C1 联动) |
|
||||
| 上游 | B1 | soft(事实依赖) | 条款③⑤对账输出 = 调参约束输入(B1 F4/F5 = 约束生成器);P_perfect 乘数调参权归 C3(B1 登记);begin_battle encounter 掷骰增补 + 护甲克制结算(armor_effectiveness/damage_a/damage_b 字段)——接口漂移已回写 B1;期望口径双读数纪律(锚行读数不得用于 unit_count=2 放行);对账复算义务随每次修订 |
|
||||
| 上游 | B4 | soft | RewardTable/RewardConfigTable 参数值归 C3;供给控制器机制本体归 B4(转正登记——首件保证 + 指数递减注入,active_p0/active_decay 参数归 C3);clear_blast 换位 + K_dmg=0 转正(B4 保底语义迁移);敌 hp 曲线与奖励供给禁止独立调参(registry 联动重算义务——区间模型恒等式为联合检算工具);调参期批量仿真义务载体 |
|
||||
| 上游 | A1 | 类型依赖 | BoardGenTable 行值归 C3(含 max_gen_attempts 策略);禁反向调用生成(仅经 D2/编排器传值);F4 批量红线(严格零降级)= 调参闸;F4 全量批量工具 = A1 交付物(A1 OQ1),C3 level_monte_carlo 扩展为消费方;d0.28 回退先例 = 密度×target 联动调参的实证;黄金向量/solver_rules 冻结不经 C3 |
|
||||
| 上游 | A4 | soft | scope=global 语义由本 GDD 定稿(Core Rule 7);unlock_level 门控序列投放计划归 C3(随关卡扩展);AC-11 未来腿 = elite/boss 标记字段落地时 A4 warning 升闸——已登记为 A4 接口漂移义务 |
|
||||
| 上游 | A3 | soft | ActionEconomyTable 联动观测(ap_per_round 双重身份——节奏兼 RAP 转存规模)——联动评估归 C3,调参所有权归 A3(措辞更正:A3 GDD 无调参权授予回执);跨字段校验(动作成本 ≤ ap_per_round)约束内观测 |
|
||||
| 上游 | B3 | soft | StatusEffectTable 四行强度(attack_up +50 / defense_up −30 / weaken −65 / ambush +3)provisional 归 C3 联动评估(B1 免伤轮合法性注记——强度评估归 C3 对账联动);减伤墙批(−50→−30)为 B3 侧行值批,C3 承伤带复验随批 |
|
||||
| 下游 | C1 | — | 节点深度语义消费;精英节点形态联动(精英节点预留条款 / A1 定稿强制重审);未设计——Boss=Dmax 约定即为其预留的接口 |
|
||||
| 下游 | C2 | — | 关卡序列的难度排布消费本 GDD 期望表;越界关卡 = 内容生产缺口(边界情况表);未设计 |
|
||||
| 下游 | C4 | 远 | 元进度天赋数值的"世界侧对照物":通关率目标带(F5)是 C4 天赋强度的标定基准;区间平移换算率(+10hp ≈ +1 轮、atk 翻倍 ≈ K 减半)为 C4 设计输入;未设计 |
|
||||
| 下游 | 呈现层(B5/D1) | — | Boss 登场仪式感 / 难度台阶可感知性——视觉义务归 B2/B5,C3 仅提供"何时变难"的数据(见下方呈现义务转注) |
|
||||
|
||||
### 对账约束(活契约——B1 对账输出承接)
|
||||
|
||||
| 编号 | 内容 | 对侧 | 状态 |
|
||||
|---|---|---|---|
|
||||
| 条款③ | 满配破线两轴:unit_count>1 行须满足"降密度或降 m_amb"补偿(B1 F4 双轴约束)——registry clause3_supply 登记在案 | B1 / registry | 已登记——切片群战行 hp/atk 下调为合规先例 |
|
||||
| 条款⑤ | 清图支配性:46.1/91.8 需求 vs **clear_blast C=40 现值(缺口 6.1/51.8,对 clear_blast 重推)**——登记为非支配设计态;预留杠杆 = C 量级上调(B1 约束包①)或弃图成本重定价(A3 域) | B1(B1 F5) | 已登记——OQ4 playtest 持续观测弃图率 |
|
||||
| 预警⑥ | 快杀退化:战斗结束未开资格格占比 >70% 警——高天赋速杀低难度行 = 合法形态,仪表监控不修复;区间形态钩子 = K_min < 2 观测位 | B4 / B1 | 已登记 |
|
||||
| unit_count 约束 | 区间 [unit_count, unit_count_max] ⊆ [1,3];>1 行联动条款③复算(流程第 5 步强制) | B1 / B2 | 已登记 |
|
||||
| 期望口径双读数 | 锚行读数(2.0×/2.6× 类)不得作为 unit_count=2 的放行依据 | B1 | 已登记 |
|
||||
|
||||
### 呈现义务转注
|
||||
|
||||
> C3 无自有视觉/音频/UI 资产(数值系统)——义务转注如下;无新增资产需求、无 D1 新增义务登记。
|
||||
|
||||
| # | 义务 | 归属 |
|
||||
|---|---|---|
|
||||
| 1 | Boss 登场呈现(仪式感锚点——体验锚点"压迫的顶点");设计输入 = Boss=Dmax 行的数据面(本 GDD 提供) | B5 战斗表现 / D1 |
|
||||
| 2 | 难度台阶可感知性:新敌种 = 新图像线索 = 台阶的可视面孔(意图推测型——图像线索档位编码,"这只比上层的硬"可读) | B2(D1×4 义务) |
|
||||
| 3 | 变异解锁的"这一层有雾了":图例与首遇提示(已登记义务) | A4 / D1 |
|
||||
| 4 | 期望表 / 批量仿真输出 = 调参期开发工具(headless——非游戏内 UI) | 开发工具 |
|
||||
| 5 | 恢复点/奖励点呈现:C1-lite 切片已实现的节点覆盖层;正式形态归 D1/C1 | D1 / C1 |
|
||||
|
||||
## P0 最小闭环
|
||||
|
||||
1. 设计期:C3 按三轴(L 台阶 / D 坡度 / Boss 行)把行值直填 enemy / board_gen / reward / reward_config / hero .tres,经七步流程背书。
|
||||
2. 冒险推进到 (L,D) 战斗节点,C1/C2 发起战斗。
|
||||
3. B1.begin_battle 实例化期经 RngService encounter 流按 [unit_count, unit_count_max] 均匀骰定本战实际数量(教学位/新敌种首遇固定不加骰)。
|
||||
4. B2.spawn(L, D):R1 floor 解析 → 行值快照 → DifficultyTable 修饰套乘(快照之前;MVP 空表无修饰)→ 生成敌人。
|
||||
5. A1 读 BoardGenTable 行生成棋盘 → 挖掘期 → B1 结算(护甲克制 / 状态池 / 充能伤害既有乘区)。
|
||||
6. 战斗产出 actuals(承伤/输出/治疗/通关余量)——行值经 ConfigDB 单点读取,是唯一数值来源。
|
||||
7. 调参期:level_monte_carlo 消费 actuals 复算期望表(通关率带 / 三档判定 / 通关余量 / 输出占比)。
|
||||
8. 偏离回滚或登记(禁止静默出带)→ 修订后的行值生效,回流步骤 1。
|
||||
|
||||
## P1 / P2 后置
|
||||
|
||||
| 优先级 | 内容 | 后置原因 |
|
||||
|---|---|---|
|
||||
| P1 | L2+ 曲线数值行(enemy/board_gen (2, D1–D4)) | 内容与数值同批——C2 关卡序列定稿后随 L2 内容扩展填充(OQ1) |
|
||||
| P1 | 加难杠杆扫描落带(r_boss 走廊 180–207 / 群战上探 / decay 0.6) | 七步流程第③步扫描待执行;落带前 v3 值 provisional-pending-scan(OQ7) |
|
||||
| P1 | 完美策略档结构性杠杆(承伤硬地板 / weaken 饱和语义) | 数值区间杠杆族已被实测证伪,结构杠杆待用户裁决(OQ7 主项) |
|
||||
| P1 | 真人修正系数标定 | 带按模拟口径定义;真人系数待 playtest 批次 2 定量(OQ3) |
|
||||
| P1 | 轮内刷新难度杠杆(密度联动上探) | 批次 1 刷新零使用、根因盲猜墙不足;杠杆有回退先例风险,保持开放(OQ6) |
|
||||
| P2 | 精英节点完整语义(独立节点/词缀/出现规则) | C1 分支地图定稿后的联动设计;A1 定稿强制重审随之触发(OQ5) |
|
||||
| P2 | DifficultyTable 首个修饰行 | 首个使用场景 = 精英节点;Boss 走 Dmax 直填行 |
|
||||
| P2 | 全局变异具体行(岩浆/冰冻) | 无 MVP 容器(A4 锁定);投放计划随关卡扩展 |
|
||||
| P2 | 同深度多敌种选择 | C1 分支地图定稿时走预登记改键通道;MVP 每行集恰一敌种(B2 锁定) |
|
||||
|
||||
## 调参表
|
||||
|
||||
> C3 是全项目 knob 保有量最大的系统(数值 owner)。全部值 provisional 起步;域与校验归各表 schema(D2);本表只登记所有权、联动与危险方向。
|
||||
|
||||
| 字段 | 域 | 默认 | owner | 联动与危险方向 |
|
||||
|---|---|---|---|---|
|
||||
| EnemyTable.hp / atk(逐行) | [1,999] / [0,999] | 行值总表 v3(provisional) | C3 | 与 B4 供给禁独立调参(区间模型恒等式联合检算);cap×atk 禁独立(B2);过高=打不死/战斗冗长,过低=快杀退化(预警⑥) |
|
||||
| EnemyTable.unit_count / unit_count_max(逐行) | [1,3] / [unit_count,3] | 1 / 省略=定值 | C3 | >1 行须降密度或降 m_amb(条款③);区间骰经 encounter 流;过高=条款③破线,过低=压力不足/遭遇零随机 |
|
||||
| EnemyTable.pattern(逐行) | MVP 三值组合 | 行值总表 v3 | C3 | OQ8 投放节奏(每关新环段);过高=信息过载,过低=学习曲线枯竭 |
|
||||
| EnemyTable.armor_type(逐行) | {none, a, b} | none | C3 | 克制矩阵联动(settlement armor_effectiveness);伤害A/B 充能消费面(B1 域,C3 投值);过高=克制失配,过低=特化对策失效 |
|
||||
| HeroTable.atk / max_hp | [1,999] | 6 / 50(provisional) | C3 | 全部输出式的分母锚(F4/F6);过高=奖励价值稀释,过低=挫败感 |
|
||||
| BoardGenTable 尺寸/密度/attempts(逐行) | 域见 schema | 行值总表 v3 | C3 | 密度×target 联动(d0.28 回退先例);unit_count>1 行联动;过高=推理率不达标降级,过低=板退化(低密度先布后删) |
|
||||
| BoardGenTable.inferability_target(逐行) | [0.85,1] 绝对锚 | 0.88(L1 行值,provisional) | C3 | 与密度成反耦;过高=生成耗时/降级,过低=P1 空心化 |
|
||||
| BoardGenTable 雾参数 | f≤8d / ≤0.25 | unlock_level=2 起用 | C3 | P1 度量绝对上限;过高=P1 度量空心,过低=雾内容缺位 |
|
||||
| RewardTable.weight / power / tier(逐行) | 域见 schema(五行 power 已区间化) | 行值总表 v3 | C3 | 区间模型恒等式;攻击面稀释;clear_blast 单行槽;过高=即时类淹没明细/可选类贬值,过低=窗口空转/重 roll 频发 |
|
||||
| RewardConfigTable.t_fog_min | 域见 schema | 2(provisional) | C3 | 雾档过滤下限 |
|
||||
| RewardConfigTable.k_dmg | [0,999] | 0(保底断言关闭——保底语义由首件保证取代) | C3 | 过高=保底永不触发,过低=种子轮盘致命 |
|
||||
| RewardConfigTable.n_draft / p_min | 域见 schema | 32 / 8(provisional) | C3 | 同上联动(B1 AC-19 对账对随调参重制) |
|
||||
| 供给控制器 active_p0 / active_decay | [0,1] / (0,1] | 0.4 / 0.5(provisional) | C3 | E[战斗获取]≈1 目标(B4 机制本体承接);与敌 hp 联动;过高=速杀+囤积回归,过低=可选类绝育;加难候选 decay 0.6(OQ7) |
|
||||
| SettlementTable.damage_a_per_cell / damage_a_cap / damage_b_per_flag / armor_effectiveness | 域见 schema | 1 / 8 / 2 / 克制矩阵(provisional) | C3 | Boss 甲B 对策 = B 充能;A 克制甲A;联动网络 #6;过高=Boss 裸打过慢,过低=充能失效 |
|
||||
| ActionEconomyTable.ap_per_round / rap_refresh_cost / refresh_max_per_round | 域见 schema | — | A3(C3 联动评估) | ap 兼 RAP 转存规模;调参所有权归 A3;过高=轮次冗长,过低=决策密度坍缩 |
|
||||
| SettlementTable.P_perfect(乘数) | {100,200} | 200(provisional) | C3 | 完美排雷×清图支配性互 feed;过高=钓鱼线(护栏 B),过低=高光缺位 |
|
||||
| m_w(weaken −65) | registry 已锁 | −65 | B4/B1 共裁(C3 提案通道) | 锚对照表(B1 F0)联动——联动网络 #5 |
|
||||
| DifficultyTable 修饰乘数(MVP 空表) | [0.1,10](registry 预登记) | —(MVP 空表无行) | C3 | 精英节点上线时启用;越域 clamp + warning |
|
||||
|
||||
## 验收标准
|
||||
|
||||
| AC | Given | When | Then |
|
||||
@@ -490,36 +438,18 @@ K = [ (Σ敌hp − 一次性伤害max) ÷ 输出峰值 , (Σ敌hp − 一次性
|
||||
| AC-6 | L1 全部行集 | 枚举敌种与环段 | 每关至少一项新投放(新敌种或新环段——OQ8;L1 = goblin→bugbear→ogre_chief 三段 ✓) |
|
||||
| AC-7 | Boss 行(Dmax) | F3 检算(期望口径 Σ=153.5) | r_boss 记录在案(现值 0.98 带内 ✓;越带须 OQ 登记——加难走廊 [1.1,1.35] 走 OQ2/扫描) |
|
||||
| AC-8 | 每轮刷新 | 计数达 refresh_max_per_round | 第 N+1 次拒绝(表值驱动——A3 域行为,C3 侧验收 = 联动评估记录存在) |
|
||||
| AC-9 | 任何 C3 直辖 knob 修订 | 检查其联动网络(Tuning Knobs 六组) | 对应联合检算记录存在于调参日志(禁止独立调参纪律的流程面) |
|
||||
| AC-9 | 任何 C3 直辖 knob 修订 | 检查其联动网络(调参表六组) | 对应联合检算记录存在于调参日志(禁止独立调参纪律的流程面) |
|
||||
| AC-10 | DifficultyTable MVP 空表 | B2.spawn 任一 (L,D) | 无修饰行被消费(结构位不产生行为)且未来首行上线时套乘点 = 行值快照前 |
|
||||
| AC-11 | scope=global 变异行 | MVP 腿:扫描 VariationTable 全行 | MVP 无 global 行存在(表级约束)且 A4 warning 通道在位;未来腿:elite/boss 标记字段落地时加载/生成期拒绝(A4 接口漂移义务——X-10) |
|
||||
| AC-12 | 每次调参批 | 检查 README 调参日志 | 七步流程的执行记录齐备(流程纪律的可审计面) |
|
||||
| AC-13 | 通关余量(新指标) | level_monte_carlo 通关轨迹采集 | E[HP_end \| 通关] 的 p90 ≤ 13 且 p10 ≥ 3("只剩一点血"量化带——越带按边界情况表杠杆处置) |
|
||||
| AC-14 | 关级恒等式闭合 | actuals 逐项审计(流程第③步输出) | 输出侧五项(基础攻击/刀/clear_blast/A+B 充能/attack_up)与输入侧(承伤/治疗/减伤)合计闭合 Σ敌hp期望×(1+缓冲),残差 <5%(provisional 阈值)且奖励输出占比 ∈ [15%, 40%] |
|
||||
|
||||
## 开放问题
|
||||
|
||||
| # | 悬案 | 进展 | owner | 时机 |
|
||||
|---|---|---|---|---|
|
||||
| OQ1 | L2+ 曲线数值——本 GDD 定结构/流程/目标带;具体数值行随关卡内容扩展填充(内容与数值同批——C2 关卡序列定稿后) | 结构已定 | C3 随批 | L2 内容扩展时 |
|
||||
| OQ2 | Boss 血量占比——v3 记录值更正 0.98(153.5 期望口径,带内 ✓);加难走廊 [1.1, 1.35] 预登记(Boss 180–207 候选);真人实测 Boss 战时长后终裁 | 走廊预登记 | C3 | F7 扫描 + playtest 批次 2 |
|
||||
| OQ3 | 真人修正系数——批次 1 方向确认:真人显著强于模拟者(v2 真人 100% vs 模拟 80%);F5 方向声明已更正落地;真人系数待 v3 试玩采集定量 | 方向已定 | C3 + playtest | playtest 批次 2 |
|
||||
| OQ4 | 条款⑤支配性真人观测——批次 1 初步裁决:真人零弃图倾向 → 非支配设计态成立、C 量级不上调 ✓(B1 约束包②采信);**P1 对冲弱化同步声明(B1 ② 条件):本裁决弱化 A3 条款⑤对 P1 失败模式的经济对冲,弃图率观测加权监控随之**;维持登记:单一样本 | 初步裁决 | C3 + B4 | 持续 |
|
||||
| OQ5 | 精英节点形态——完整语义(独立节点/词缀/出现规则)= C1 分支地图定稿后的联动设计(A1 定稿强制重审随之触发) | 未设计 | C3 + C1 | C1 GDD 定稿 |
|
||||
| OQ6 | 轮内刷新对难度模型的冲击——批次 1 初步读数:刷新零使用,根因是盲猜墙不足(inferability 0.88);杠杆预登记:密度联动上探(d0.28/t0.85——A1 回退先例风险);保持开放 | 初步读数 | C3 | playtest 批次 2 |
|
||||
| OQ7 | **加难杠杆扫描执行 + 完美策略档测量**——杠杆候选(r_boss 走廊 180–207 / 群战上探 / decay 0.6)已预登记;执行 = 七步流程第③步 level_monte_carlo 扫描(三档判定 + 通关率带 + 通关余量 + 占比四表对照)。**2026-09-14 完美策略档落地(用户拍板)**:零盲挖/全标旗/卡死刷新技能轴上界测量仪(godot 本机可用已验证)。**区间批已落地并复测(同日拍板②——奖励五行 power 区间 + 敌方 atk 区间 ±3)**:完美档 0 加成仍 100%(承伤 3.5→3.9)——**数值区间杠杆族对 ≤40% 验收线无效已实测坐实;主项待裁决 = 结构性杠杆三选**(承伤硬地板〔不可减免平伤,B1/B2 域〕/ weaken 饱和语义〔全标旗收益递减,B3/B1 域〕/ 极端区间宽度〔建议否决——毁基线与数字可读性锚〕);落带前 v3 值 provisional-pending-scan | 完美档已测;区间批无效性已证;结构杠杆待裁决 | C3 | 用户裁决后 |
|
||||
|
||||
### 试玩批次记录
|
||||
|
||||
| 批次 | 日期 | 数值基线 | 读数 | 裁决产出 |
|
||||
|---|---|---|---|---|
|
||||
| 批次 1(用户本人) | 2026-09-12 | v2 | 全部满血通关(清图为主/优先标雷/不用道具三策略均通)——基线难度不足定量坐实;Boss 血量 OK 或可上调;刷新零使用;零弃图倾向;治疗包零使用(不掉血伴生);伤害道具无特色(暂保留) | v3 数值批(atk 4/4/6/4/7 → 7/5/9/6/9;D0 24 保持防秒杀、Boss 130→150)+ DND 命名批(goblin/bugbear/ogre_chief——用户指令)+ 护甲克制批(armor_type none/a/b + 克制矩阵,数值 provisional)+ F3 带修订 + OQ2/3/4/6 读数;v3 扫描:基线 60%、败北向 Boss 集中 4/6、+200% 100%;下一批 = v3 真人试玩(OQ3 定量 + OQ2 终裁) |
|
||||
| 减伤墙批(defense_scan 触发) | 2026-09-13 | v3 + 减伤墙批 | defense_scan 实测墙轮 39%、真人局 12/12 轮零承伤满血通关——减伤墙过强定量坐实 | defense_up magnitude −50→−30(叠满两层 = −60 帽)+ 石肤权重 24→16(attack_up 升池内最高行)——B3 侧行值批,C3 承伤带(F4)复验责任随批 |
|
||||
|
||||
## 版本历史
|
||||
|
||||
| 版本 | 日期 | 改动 |
|
||||
|---|---|---|
|
||||
| v2-两件套 | 2026-09-14 | 格式迁移:按两件套 v2 标准拆分——本文件只装结论,公式推导、数值锚定论证、候选取舍、评审史、X-1~X-10 回执、试玩批次记录移 `design/gdd/analysis/c3-difficulty-curve.md`;规则/数值/AC/OQ 编号全部保留,语义零变更;生产前人工复核保留义务随迁 |
|
||||
| v2 | 2026-09-14 | /design-review 修订批(8 blocking 核销 + 4 项用户拍板):**F6 供给带退役 → 生存链区间模型**(S/K 区间三档判定 + 关级恒等式 + 输出占比带 + C4 平移换算率——用户设计)· **带锚定稿**(通关率 [30,50] / 通关余量 p90≤13 & p10≥3 / L1 形态带)· F3 口径统一 Σ=153.5 / r_boss 0.98(旧验算 142 替代)+ 加难走廊预登记 · F4 升级生存侧(S 区间)· F5 带 [30,50] + 真人方向更正 · **MVP 行值总表 v3 转正**(切片 .tres 权威源,旧 SLICE-TUNED 表替代)· DND 更名生效(goblin/bugbear/ogre_chief)· **四批转正登记**(armor_type / K_dmg=0 / clear_blast 换位 / 供给控制器归 B4——用户拍板)· B1/B2/D2/registry 接口漂移回写(X-6~X-10)· F7 六步→七步(B4 对账重制步)· AC-4/5 重写 + AC-13/14 新增 · 条款⑤重推(C=40,缺口 6.1/51.8)· Boss atk 台阶重定义 · 减伤墙批补录 · OQ7 新增(扫描执行) |
|
||||
| v1-lean | 2026-09-13 | 格式迁移:legacy 原稿按 lean 样例重排——修订注记出正文收敛至本表;规则/枚举/边界情况/对账登记/AC 转表格;曲线生成与调参流程转字符画;公式、Variables 与验算数据全保留;F3 带按现行 [0.5, 1.1] 成文;语义零变更 |
|
||||
| 试玩批次 1 / v3 数值批 | 2026-09-12 | 遭遇随机化引入(unit_count 区间语义 + RngService encounter 封闭流——Roguelike 局感引入批,Peglin 对比报告结论 2 的本切片落地项);F3 带修订 [0.35, 0.55] → [0.5, 1.1];v3 数值批(atk 7/5/9/6/9、Boss 130→150、D0 24 保持防秒杀)+ DND 命名批 + 护甲克制批;OQ2/3/4/6 读数登记(条款⑤非支配设计态采信) |
|
||||
|
||||
@@ -19,6 +19,7 @@ Dungeon Sweeper 设计文档树
|
||||
│ └─ game-pillars 四支柱:P1 我算对了 · P2 因果归因 · P3 雷的两面 · P4 地牢氛围 [定稿]
|
||||
│
|
||||
├─ 系统层(每系统一份 GDD,文件在 design/gdd/)
|
||||
│ │ 注:`design/gdd/analysis/` 为各系统推演件目录——design 件只装结论,推演与理由(候选取舍/公式推导/开放问题)在对应 analysis 件
|
||||
│ ├─ D2 数据配置 九张表单一事实源 · RNG 封闭流 · fail-fast 校验 [定稿]
|
||||
│ ├─ A3 行动经济 AP/RAP 账本与价目 · 轮次状态机 · 五条款经济契约 [定稿]
|
||||
│ ├─ A4 地形变异 雾与变异布置约束 · 承重数学(厚度/f≤8d) [定稿]
|
||||
|
||||
Reference in new issue
Block a user