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:
DKChan committed 2026-09-14 20:39:11 +08:00
1 parent 51a6bd8b53
commit 85841f52be
14 files changed
+2540 -1631

No files matched your search

+191
View File
@@ -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 迁移行) |
+160
View File
@@ -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 迁移行) |
+335
View File
@@ -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 行) |
+282
View File
@@ -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 迁移行 |
+213
View File
@@ -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-两件套迁移行) |