merge: 全局作用域变异首发批实施批落籍(台账345——迭代14③号卡T1-T8实施批+T7b切独立后批)

This commit is contained in:
DKChan committed 2026-10-04 17:55:17 +08:00
commit 01bfc15638
23 files changed
+555 -34

No files matched your search

+3
View File
@@ -11,6 +11,7 @@
- **工程路线图**:`production/roadmap.md`(2026-09-17 建——里程碑时间线 + 路线图;实时状态看下方快照节)
## 当前状态快照(收口批先更新本节,再追加台账;≤10 行)
- **更新于**:2026-10-04(**全局作用域变异首发批实施批落籍**,worktree m4iter14-gvar-20261004 六提交 fcb95f2→e3a94fd+台账批,台账 345):迭代 14 ③号卡 T1-T8 实施批全落(T7b MC 读数批按切分预案切独立后批)——skewed_veins 贫矿脉(scope=global 案A 微贫偏斜 v=30 provisional)+互锁三条+门控第三维节点身份+替换制/兜底回落+装板序全局决议前置(数据依赖调和在册)+资源面偏斜投影(整数最大余数守恒 77·合成序图级先件级后·luck_bias 首板零注入既有口径登记)+三层预告(横幅/角标/手册)+七正主+06 收口;闸=冒烟 747/0(+29)+run_all 15+golden 普通图逐位 12/12 全等+六探针绿+三闸/熵增零新增(存量同款);出口报告=design/qa/m4iter14-gvar-exit-report-2026-10-04.md(静态推演+Q3 四件应对件知情代价+provisional 九项+人闸目检六项);**③出口成立——⑥A4 开工门解一半**;T7b 三态对账链 N=60 待用户批准发起。
- **更新于**:2026-10-04(**全局作用域变异首发批任务书落籍**,worktree globalvariant-tb 单提交+主区合并,台账 336):任务书=design/research/任务书-全局作用域变异首发批-2026-10-04.md(T0-T8≈5.75d,读数批 T7 可切→主体≈5.25d;§一裁决全录零拍板点/§二形态定稿/§三参数面〔skewed_veins 行+effect_value [0,50] 投 30 provisional〕/§六验收/§七红线六条+停机点 S1-S3);roadmap ③卡换代(任务书路径+估时+⑥A4 前置注记——A4 合成链中段=本批图级偏斜投影点,③先于⑥开工);纯文档零代码;开工门=U0 用户发令。
- **更新于**:2026-10-04(**全局作用域变异调研裁决+迭代14③号卡立项批落籍 master**,worktree global-variant-iter14-20261004 单提交 29db278+主区合并,台账 335〔撞号改登——334 系并行挖掘风险不等式调研批先落,先例同台账 96/90〕):调研报告 v1.1(design/research/调研-全局作用域变异设计空间-2026-10-04.md)——P1-P8+盘问 Q1-Q4 全按推荐案落(案A 资源面·微贫向偏斜首发/替换制/L2L3 Boss 双关同型恒定制/L1 免疫/三层预告/带A 判读后置 M-4/远期案留档;勘误=沃土+雷密对冲形作废,雷数系生成器事实布置段不可加)+roadmap 迭代 14 行③号卡需求登记(与①收窄批②判式批互不撞,读数分开归因);纯文档零代码零 git 冒烟面;任务书待起草(前置换用户发令)。
- **更新于**:2026-10-04(**挖掘风险不等式修订调研+裁决收官+迭代 14 编入**,四 worktree 批纯文档零代码零模拟 6c20740→1da9a41→b31afdb→34cf6fe,台账 334):方案报告落 design/research/(破线四层定位+同池引理+池 77 口径修正+d70f6c3 时效修正);用户两轮「按推荐的来」全裁 P1-P7+grill 七问(形态(a)兑付溢价 δ=1.25/条件二登记已知破 T4 机制转绿/β 带 [1.2,2.5]/删 U_band 与 S 形/δ 敏感度 ≥5pp),§九裁决回填;任务书草案 .zcode/plans/mine-inequality-revision-miniloop-plan-2026-10-04.md 待 U0;**roadmap 迭代 14 编入②号卡**(序位待排)。零跑闸(两入口铁规:非 loop 批且用户未点名)。
@@ -756,3 +757,5 @@
335 注. 台账落籍时点补记:主区清账合并时撞并行会话合并冲突残场一次(「unmerged files」瞬态——并行会话自行收口至 8f3fc72 后重试即过);worktree 清理后仅剩并行在飞 `global-variant-iter14`(迭代 14 全局变异批,本会话零触碰)。master 终态 f3fcfa7。
336. **全局作用域变异首发批任务书落籍(2026-10-04,本会话;worktree globalvariant-tb 单提交+主区合并)**:**台账号 336=接续 335**;纯文档零代码。**落地**——①任务书=design/research/任务书-全局作用域变异首发批-2026-10-04.md(逐段自包含:§一裁决全录 P1-P8+Q1-Q4+代拍合成序〔零拍板点〕/§二形态定稿=案A 微贫向偏斜〔偏斜面六行 attack/blast/pierce/magic↑+heal/defense↓·豁免 weaken/gp/action·合计守恒 77·EV 微降 3-5% provisional 目标归读数批判读〕+替换制+兜底回落〔Boss 全局池空回 region,provisional〕+承载 gate 第三维不动 level.tres+三层预告+MC 三态对账链〔现行锚/off=替换制零变异/on=偏斜30——off 隔离替换制单项效应〕/§三参数面 skewed_veins 行+effect_value [0,50] 投 30〔不适用 flat_damage [1,9] 互锁〕/§四 T0-T8≈5.75d〔T7 读数批可切→主体 5.25d〕/§五零拍板点/§六验收七条/§七红线六条〔生成器+排雷玩法零 diff/雷安同池/负向零触/DamageController 零改/信息型禁触/清图槽独立〕+停机点 S1 普通图逐位漂移·S2 读数越带只呈报·S3 互锁误伤/§八并行面);②roadmap ③卡换代=任务书路径+估时+⑥前置注记;③**接口发现与登记**——⑥A4 配比预设批(并行会话同日落卡)合成链「表值→玩家配比差值→包络钳制→图级变异偏斜→同调硬币偏置」已把本批图级偏斜定为中段且开工门=②③出口(③=本批)→ 本批系⑥前置,任务书 §八+roadmap ③卡双登记(③先于⑥开工;投影函数留参承接,前两段缺位=逐位等价图级直投——与本批代拍「图级先件级后」相容无冲突)。**开工门=U0 用户发令**。验证=doc_link_audit --strict 0 死链(worktree);纯文档批冒烟不适用。
345. **全局作用域变异首发批实施批落籍(2026-10-04,本会话;worktree m4iter14-gvar-20261004 六提交 fcb95f2/e3a94fd 系列+本台账批,台账号 345=接续 344)**:迭代 14 ③号卡 T1-T8 实施批全落,**T7b MC 读数批按任务书切分预案切独立后批**(三态对账链=现行锚 runsum_m4iter12_t10abb_n20_20261004 只读+off〔effect_value=0 替换制零变异〕+on〔偏斜 30〕,N=60 同种子配对,跑批须用户批准——先推算后重跑)。**T1-T4 核心**——variation_table.gd EFFECTS+resource_face/TRIGGERS+always/互锁三条+effect_value 域[0,50](既有六 region 行零误伤=S3 零触发);variation.tres 7 行(skewed_veins 贫矿脉 scope=global unlock_level=2 board_types∅通配 投值 30 provisional);config_db variant_pool 第三参 node_type(global 行仅 boss/elite 入池,缺省双参跳过=既有调用零扰动)+global_variant_row 决议访问器(多行取首行防御口径);board_data +board_variants 板级字段;battle_orchestrator 装板序 _resolve_global_variant 前置于 roll_board(**执行发现=任务书 T2 字面位与 T3 数据依赖不自洽,全局决议前移装板序内——替换制/兜底/零取号/恒定制四语义不变,普通图零 diff,出口报告呈报**);reward_economy +board_skew+_skewed_cell_rows 整数最大余数投影(生存族 heal/defense 按 v% 下调·进攻族 attack/blast/pierce/magic 等比上浮·白名单 weaken/gp/action 豁免·合计恒 77·off 态直通)+_biased_cell_rows 基座换源=合成序「图级先(乘法)件级后(luck_bias 加法)」;**既有行为登记=luck_bias 注入在首板 install 后(首板恒 0)——迭代 11 对拍锚现行口径零触碰**。**T5 呈现三层**——settlement_fx_view.play_board_variant_banner(轮横幅先例+减动效静态双态)+hero_info_panel 地形变异常驻角标段(流派件段先例空态隐藏)+hud_presenter.board_variant_lines+快照投影+main.gd 首轮开战横幅挂钩+ui_assembler 手册行。**T6 七正主**——地形变异 v0.7/难度曲线与Boss P2 行升级+调参表/registry=architecture.md/HUD框架 v0.13/教学引导 v0.4/行动经济 P2 注记(案D 留位不启用)/06 条目解决移除。**T7 闸**——冒烟 **747/0**(基线 718+新段 29:互锁负样本③-⑦/门控三维/L1 免疫/elite 前向位/替换制恰一行+零 region 格/零取号计数桩/快照投影/守恒/白名单/v=30 构造例 15·18·9·9·3·7/合成序 77+8/v=50 域/确定性)+run_all **15 套全绿**(config_db_test 换代+3:通配选择器限定 region+global 第三维)+golden 普通图逐位 **12/12 全等**(4 种子×3 关布置+摇号+RNG 计数——S1 零触发)+六探针绿(ui_input 16 断言/click 问题=0/ui_probe/ui_layout/fx/t17_defer——worktree 素材缺位按 gitignored 拷入+重导处置)+doc 三闸零新增(lint 2/term 3/link 死链 2 均主区基线同款存量)+熵增 PASS(golden 临时件用后即删)。**T8 出口**——报告 design/qa/m4iter14-gvar-exit-report-2026-10-04.md(**值面静态推演=EV 降幅当量比 r∈[1.5,2.0] → −2.7%~−5.4%,覆盖 3-5% provisional 目标带**;Q3 知情代价=地脉采撷/荆棘编织者/净化工兵/熔火之躯 Boss 图失效随批登记 registry+地形变异 v0.7;provisional 追认单九项;人闸实机目检清单六项)+roadmap ③卡落地注记。**③出口成立——⑥A4 配比批开工门=②③出口解一半(另半=②出口)**。待用户:出口人闸(目检+provisional 追认)+T7b 跑批发令。
+1 -1
View File
@@ -91,7 +91,7 @@
| **ConfigDB**(autoload,D2) | 全部玩法数值表(`data/tables/*.tres` + `data/schemas/*.gd`);SCHEMA_VERSION;加载/校验/override/诊断状态机 | 类型化属性读取;`load_tables(root, collect_only)`;`resolve()`(R1 floor);debug override;`set_reload_gate()`;诊断收集器 | 无(Foundation 顶点) | Resource/.tres 加载、autoload 生命周期——LOW |
| **RngService**(autoload,D2) | master_seed、各流 scope 计数器(封闭流:board_gen / reward_roll;增流走 P1 评审) | `set_master_seed()`(唯一调用方 C2);`open_stream(stream)` 有状态门面;`derive_at(stream, scope)` 纯函数;只读计数器 | ConfigDB(无) | 无——纯逻辑 |
| **action_economy**(A3) | AP/RAP 账本、last_round_end、轮次相位机 {Idle, Active, Waiting}、结束仲裁 | 8 API 全布尔面:notify_round_start / request_dig / request_flag_place / request_flag_pull / request_stop / request_refresh / notify_settlement_done / notify_combat_end;ap/rap/phase 只读 | ConfigDB(ActionEconomyTable);B1 回发 next_round_mode/battle_over | 无 |
| **variation 定义**(A4) | VariationTable schema(现行空清单,合法态)与 F1 候选池门控谓词 | `variant_pool_gate(level_index, board_biome)` | ConfigDB(VariationTable) | 无 |
| **variation 定义**(A4) | VariationTable schema(现行 7 行:六 region + skewed_veins 一 global——全局作用域变异首发批 2026-10-04)与 F1 候选池门控谓词 | `variant_pool(level_index, board_type, node_type="")`(门控三维:unlock+board_types+节点身份——global 行仅 boss/elite 入池,缺省跳过零扰动);`global_variant_row(level_index, board_type, node_type)`(全局型单行决议访问器) | ConfigDB(VariationTable) | 无 |
| **status_container**(B3) | 状态实例容器(战斗域生命周期、跨轮跨图延续) | 5 API:notify_battle_start / apply_effect / query_active / decay_round / notify_battle_end | ConfigDB(StatusEffectTable) | 无(RefCounted) |
| **save_system**(D3,Alpha) | 存档格式与版本比较 | (未设计——契约锚:SCHEMA_VERSION + master_seed + 各流 scope 计数器快照,须在无在飞 open_stream 实例时切出) | ConfigDB、RngService 只读计数器 | FileAccess——LOW |
| **settings/localization**(D6,愿景) | 设置项、翻译数据 | (未设计) | ConfigDB | 无 |
-8
View File
@@ -2,14 +2,6 @@
本清单是全项目待办事项的**唯一登记处**:各系统文档不再自建「待办」条目节,只留一行指路存根;新增待办事项一律直接登记本清单。条目按四个循环分组,组内按系统分节;每条事项一个四级标题,其下用粗体属性名成段——**现状**(现状与失义原因,自各系统文档原样搬运、措辞不改;跨文档重复条目合并为一条,登记在建议归属主责方名下,其余来源在现状中注明出处;相关但不同面的条目各自保留,现状末尾互相指认;搬运时仅将原文中的「本文 / 本系统」替换为对应系统名,并把相对链接改写为本文件位置可用的路径)、**归属**、**状态**。事项解决后**从本清单移除**(2026-09-18 用户拍板改口径,原"改状态留痕"废止):去向与依据登记当批台账与 active.md 快照,git 历史即留痕。
#### 全局作用域变异
**现状**:全局作用域变异(精英/Boss 图整图生效的变异形态)——作用域语义未定稿。来源:P1 后置表(首批类型定稿批 2026-09-20 落地:首批四类型均为 region 格子级;scope=global 词表位保留)
**归属**:[难度曲线与Boss](systems/冒险循环/难度曲线与Boss.md)
**状态**:待办(2026-09-19 用户拍板:Boss 图变异暂无设计想法,留 **Alpha 阶段**再设计,当期不处理)
#### 双层 BD 延期与备选内容总登记(2026-10-03 立项——任务书退役保险)
**目的**:任务书/整合定稿系中间文档,落地完成后按吸收即死退役——用户令「只删除已完成落地的内容」,本条自承载全部**未落地**内容防丢失(每项自包含,不依赖指针)。
@@ -257,7 +257,7 @@ Boss 战的棋盘用本关最大板形(板形行值读棋盘参数表),板
| P1 | 完美策略档的结构性加难杠杆 | 数值杠杆对完美档已被实测证伪,结构候选未裁决(见「待办」) |
| P2 | 精英节点完整语义与修饰乘数表首行 | 随[关卡节点地图](关卡节点地图.md)定稿联动;首个使用场景 = 精英节点;精英怪设定三特征已登记(迭代 10 批,见「曲线雕刻」表注),钥石掉 1 个预留挂钩 meta.tres boss_keystone 精英行(随实装批落) |
| P2 | 区间平移换算率定稿 | 接口启用形态已定稿(2026-09-18 元进度定稿批);剩余面 = 首版三行折算数值随[元进度](../跨局循环/元进度.md)设计批模拟读数标定 |
| P2 | 全局作用域变异的投放计划 | 机制框架归[地形变异](../排雷循环/地形变异.md),投放计划归本文,随关卡扩展 |
| P2 | 全局作用域变异的投放计划 | **首发已落地(2026-10-04 全局作用域变异首发批,迭代 14 ③号卡)**——现行=L2/L3 Boss 图恒定贫矿脉(unlock_level=2 起,第 1 关 Boss 免疫=L1 教学保护);本行降级为「后续型扩展计划」:新全局型(精英图首行/案D 冻土/案B 诡雷远期)逐关固定演进,随关卡扩展登记;带 A(全局变异)收敛判读归全局难度批 M-4 杠杆表(Q4 甲——落地批读数只测不判) |
## 调参表
@@ -304,6 +304,7 @@ Boss 战的棋盘用本关最大板形(板形行值读棋盘参数表),板
| 注入概率初值 / 衰减 | 读表 | 注入机制归[地图战斗资源](../战斗循环/地图战斗资源.md) |
| 清障炸药威力区间 | 读表 | 清图槽当场引爆 |
| 状态强度 | 读 `status_effects.tres`(掷点轴——2026-09-16 换装,原减伤退役) | 联动评估归本文,禁独立调参 |
| 资源面偏斜 effect_value | 读 `variation.tres` 贫矿脉行(域 [0,50],0=中性 off 锚;现行投值 30 provisional——2026-10-04 首发批) | Boss 图整图变异=全局加难杠杆(带 A 注册 M-4 杠杆表——Q4 甲裁决,读数只测不判,带 A 收敛判读归全局难度批);与注入概率/衰减同族「图级投放轴」,禁独立调参;总期望微降 3-5% 为 provisional 设计目标,实测方向与幅度归读数批 |
| GP 掉落与商店价格参数 | 读 `shop.tres`(gp_drops 均值±方差 / level_gp_bonus / pool_shelf 货架基价四行 / price_a / price_b;legacy products 首价与步长 / price_level_bonus 随对照模式保留) | GP+商店房批新增,pool 换代随迭代 11 第②批;公式语义归[冒险结构](冒险结构.md),数值全部 provisional-pending-曲线调参批(A/b 投值 1.8/1.1 后置追认),与分层带联动禁独立调参 |
## 验收标准
+28 -13
View File
@@ -1,7 +1,7 @@
# 地形变异
> 一句话:格子的非雾变异(荆棘丛/藤蔓缠绕/岩浆/烬覆/落石/矿尘),挖掘中可遭遇的地貌偏离
> 状态:已定稿(首批类型随 2026-09-19 定稿批落地,第三关一对随 2026-09-20 第三关内容批落地)
> 一句话:格子的非雾变异(荆棘丛/藤蔓缠绕/岩浆/烬覆/落石/矿尘)与 Boss 图整图变异(贫矿脉),挖掘中可遭遇的地貌偏离
> 状态:已定稿(首批类型随 2026-09-19 定稿批落地,第三关一对随 2026-09-20 第三关内容批落地;首个整图变异随 2026-10-04 全局作用域变异首发批落地)
> 旧版参考:../../../archive/gdd-2026-09-14/a4-terrain-variation.md
## 设计目的
@@ -51,16 +51,17 @@
变异的生命周期是随图生灭:变异是棋盘格的只读属性,在战斗初始化末段布置、随棋盘实例存在;清图换图或战斗结束时随图消亡。布置之后生效期没有任何运行时写入,也没有跨图存续——新图重新布置。
清单现行登记六个类型,两轴 × 三关:
清单现行登记七个类型,两轴 × 三关(region 六行)+ 首个整图型(global 一行):
| 类型名 | 效果 | 触发 | 布置约束 | 解锁 | 地形 | 伤害量 |
|---|---|---|---|---|---|---|
| 荆棘丛 | 直伤(flat_damage) | 被打开即触发(on_open) | 只落未开格(closed_only) | 第 1 关 | dungeon | 1 |
| 藤蔓缠绕 | 数字遮蔽(hide_number) | 打开且显示数字时(on_number_shown) | 任意格(any) | 第 1 关 | dungeon | — |
| 岩浆 | 直伤(flat_damage) | 被打开即触发(on_open) | 只落未开格(closed_only) | 第 2 关 | underdark | 2 |
| 烬覆 | 数字遮蔽(hide_number) | 打开且显示数字时(on_number_shown) | 任意格(any) | 第 2 关 | underdark | — |
| 落石 | 直伤(flat_damage) | 被打开即触发(on_open) | 只落未开格(closed_only) | 第 3 关 | deep_underdark | 3 |
| 矿尘 | 数字遮蔽(hide_number) | 打开且显示数字时(on_number_shown) | 任意格(any) | 第 3 关 | deep_underdark | — |
| 类型名 | 作用域 | 效果 | 触发 | 布置约束 | 解锁 | 地形 | 伤害量 |
|---|---|---|---|---|---|---|---|
| 荆棘丛 | region | 直伤(flat_damage) | 被打开即触发(on_open) | 只落未开格(closed_only) | 第 1 关 | dungeon | 1 |
| 藤蔓缠绕 | region | 数字遮蔽(hide_number) | 打开且显示数字时(on_number_shown) | 任意格(any) | 第 1 关 | dungeon | — |
| 岩浆 | region | 直伤(flat_damage) | 被打开即触发(on_open) | 只落未开格(closed_only) | 第 2 关 | underdark | 2 |
| 烬覆 | region | 数字遮蔽(hide_number) | 打开且显示数字时(on_number_shown) | 任意格(any) | 第 2 关 | underdark | — |
| 落石 | region | 直伤(flat_damage) | 被打开即触发(on_open) | 只落未开格(closed_only) | 第 3 关 | deep_underdark | 3 |
| 矿尘 | region | 数字遮蔽(hide_number) | 打开且显示数字时(on_number_shown) | 任意格(any) | 第 3 关 | deep_underdark | — |
| 贫矿脉 | global | 资源面偏斜(resource_face) | 板级恒在(always) | 任意格(any,无格子布置域) | 第 2 关 | 通配(∅) | — |
机制口径(2026-09-19 定稿批):
@@ -69,7 +70,17 @@
- 直伤量为加法核小整数(effect_value ∈ [1,9],行值 provisional 归难度曲线与Boss);每格携带单类型单 id。
- 变异格未开时无预告呈现(遭遇式;视觉标识归表现层升级批)。
候选池门控(框架级现行机制):一种变异要进入本关的布置候选,须同时满足两个条件——它的解锁关号不大于当前关卡序号(直接整数比较),且它声明的地形(board_types)与本地形有交集(声明为空集等于通配)。候选池为空是合法状态:静默布置一张无变异的普通图,不报错、不警告。门控谓词与取值域登记于 [registry 的 variant_pool_gate 条目](../../../registry/entities.yaml)。
候选池门控(框架级现行机制):一种变异要进入本关的布置候选,须同时满足三个条件——它的解锁关号不大于当前关卡序号(直接整数比较)、它声明的地形(board_types)与本地形有交集(声明为空集等于通配)、且节点身份匹配(scope=global 行仅 Boss/精英节点入池,普通战斗节点静默跳过——2026-10-04 全局作用域变异批增第三维;elite 系前向词位,首发零表行)。候选池为空是合法状态:静默布置一张无变异的普通图,不报错、不警告。门控谓词与取值域登记于 [registry 的 variant_pool_gate 条目](../../../registry/entities.yaml)。
### 全局作用域型(scope=global——Boss 图整图变异)
region 型变异是「格子级」的:布置段往候选格域写格子快照。global 型变异是「板级」的:整图一个类型生效,不落任何格子(棋盘持有板级 `board_variants` 字段,逐格 `variants` 恒空)。**每图一型的板级推广(2026-10-04 用户裁决)**:普通图带 region 片,Boss/精英图带 global 型——两类图各自至多一型。
**替换制**:Boss/精英图命中全局型时,布置段跳过 region 布置(该图既无 region 片、也无格子级变异标记)——L2 完美 Boss 承伤已越 ≤50% 带,region 叠全局的叠加制火上浇油,不采纳。**兜底回落**:Boss/精英图的全局候选池为空时(含第 1 关 Boss 解锁门控未达=免疫,第 1 关是过滤器不是墙的教学保护)回落 region 布置,即回批前行为(保守向后兼容,防配置缺行静默裸奔——provisional)。
**恒定制**:第 2/3 关 Boss 图 100% 带一型(非掷定结果——配置事实;全局取用确定性,不消费布置随机流=零取号合法态)。首发型=**贫矿脉(skewed_veins)**:资源面偏斜(resource_face)——整图修正资源摇号分布,不动任何格子数据、不动生成端:进攻族(增伤/爆裂/穿刺/奥术)权重等比上浮,生存族(回血/护甲)权重按 effect_value% 下调,白名单三行(削弱/GP/行动点)恒不动,下调量按进攻族原权重比例重分配、正向池合计恒 77。玩家体验=「这层奶薄、枪很肥」:生存资源变薄、进攻资源变肥,转向用进攻续命的主动策略——不是纯挨打。第 2/3 关双关同型(关间台阶由第 3 关既有新内容满足)。清图槽(clear_default/clear_blast)是独立池,不受偏斜影响。资源投影的执行面(摇号前权重合成、合成序=图级先件级后)归[地图战斗资源](../战斗循环/地图战斗资源.md)。
**三层预告**(整图语义=规则级偏离,藏着等于暗改规则——区别于 region 遭遇式口径):①开战横幅一行(板级变异非空时显示)②HUD 常驻角标(战斗全程可见防中局遗忘,空态隐藏)③帮助手册一行(零交互教学)。呈现承载归 [HUD 框架](../表现与支撑/HUD框架.md)。
### 零特判原则(承重约束)
@@ -86,6 +97,7 @@
- 候选格域 = 安全格 − 初始展开区,且排除雷格。
- 布置取数走专用随机流(variant_place,一板恰一 scope),换图/轮内刷新图各取号一次,确定性可复放。
- 生成器管线不布置变异(产物恒零变异格)——布置域的"未开"语义由设置顺序保障。
- **全局作用域型决议(2026-10-04 首发批)**:Boss/精英图的全局型在装板序内前置于资源格设置之前决议(图级偏斜旋钮须在资源摇号前定型;全局门控与板无关,确定性取用不消费 variant_place 流)——命中即写板级字段并跳过本步的 region 布置(替换制);未命中则本步按上列规则原样执行(含兜底回落)。普通图路径零改动。
### 反制道具配套义务
@@ -119,7 +131,7 @@
| 优先级 | 内容 | 后置原因 |
|---|---|---|
| 迭代 12(调研前置) | 反制路径重定(原:首批四类型的反制道具兑现,counter_items 回填——已作废) | 2026-10-03 用户终裁:同调位反制件=层级错配失败设计,义务作废;变异应对是否以局内形态补入,待双层 BD 调研仲裁后重新立项 |
| Alpha | 全局作用域变异(精英/Boss 图整图生效的变异形态) | Boss 图变异暂无设计想法——2026-09-19 用户拍板留 Alpha 再设计;作用域语义归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md) |
| ~~Alpha~~ **已落地** | 全局作用域变异(精英/Boss 图整图生效的变异形态) | **2026-10-04 全局作用域变异首发批落地**(迭代 14 ③号卡)——首批型=贫矿脉(案A 资源面·微贫向偏斜,替换制/恒定制/L1 Boss 免疫/三层预告);裁决全录见任务书(design/research/任务书-全局作用域变异首发批-2026-10-04.md);带 A 杠杆注册全局难度批(M-4)随批读数只测不判;精英图留词表前向位(首发零表行) |
| P2 | "地形成本修饰"价目钩子启用 | 由行动经济持有;启用须随变异类型扩展,与行动经济重议按格定价的接口 |
| P2 | 变异解锁节奏复核 | "每关至少引入一个新元素"的推进节奏,随[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)定稿复核 |
| P2 | 变异格视觉标识与预告呈现 | 首批为遭遇式(未开无预告);标识位随表现层升级批 |
@@ -132,6 +144,7 @@
| 关卡递增 per_level_bonus | +2 格/关 | 难度曲线与Boss(provisional) |
| 连通片上限 pack_max | 4 | 定稿值(2026-09-19 用户拍板形状约束) |
| 直伤量 effect_value | 荆棘丛 1 / 岩浆 2 / 落石 3 | 难度曲线与Boss(provisional,加法核 [1,9]) |
| 资源面偏斜 effect_value | 贫矿脉 30(生存族下调百分比;0=中性 off 锚;总期望微降 3-5% 为 provisional 设计目标——精确方向与幅度归读数批判读只测不判) | 难度曲线与Boss(provisional,域 [0,50]——2026-10-04 首发批投值) |
变异表的结构历史(字段定义、条目归属)见 [registry 的 variation_table 条目](../../../registry/entities.yaml)。字段集现行口径:标识 / 玩家可见名 / 解锁关号 / 作用域 / 效果 / 效果量 / 触发 / 布置约束 / 地形(board_types)/ 反制道具绑定(counter_items,恒空保留——回填义务 2026-10-03 作废,承载形态待迭代 12 重定)。
@@ -142,6 +155,7 @@
- 数据生命周期:格子携带的变异是只读数据——战斗初始化末段布置、随图消亡,布置后零运行时写入,无跨图存续;生成器产物恒零变异格。
- 布置域:变异格全在初始展开区外(伤害型 closed_only 由设置顺序结构保障)且不吃雷格;每图至多一种类型;连通片 ≤ pack_max。
- 配套义务闭环(**已作废,2026-10-03 终裁**):原「定稿批须含反制兑现条目否则验收不通过」随反制道具配套义务一并作废;counter_items 恒空为合法态。
- 全局作用域型(2026-10-04 首发批):替换制生效——Boss 图恰一行板级变异+零格子级变异标记;普通图 region 路径逐位不变(同种子布置/摇号快照对拍批前基线);off 态零扰动(effect_value=0 资源摇号与无偏斜逐位相同,白名单三行任何状态逐位不动);L1 Boss 零全局变异;Boss 图全局池空回落 region;全局取用零取号(确定性,不消费布置随机流);资源面偏斜正向池合计恒 77。
## 版本历史
@@ -153,3 +167,4 @@
| v0.4 | 2026-09-20 | **第三关内容批(与切片代码 / registry / 03-内容规模 / 棋盘生成 / 难度曲线与Boss 同批)**:类型清单加第三关两行——落石(伤害型 flat_damage 3)+ 矿尘(信息型 hide_number 数字遮蔽),凑齐两轴 × 三关(unlock_level 3、地形 deep_underdark);布量走既有公式(第三关自动 9%,零新配置);反制道具兑现维持改排 Alpha(counter_items 字段位同批预留);调参表直伤量行随批补落石 3。行值全 provisional 归 难度曲线与Boss |
| v0.5 | 2026-09-21 | **变异布置基数修正批(用户试玩反馈「小图变异格非常多」+基数假设实测证实后拍板)**:数量公式百分比基数由总格数改候选池格数(安全格 − 初始展开区,即实际可挖格)——实测初始展开均值占全板 56–67%,旧基数使有效密度膨胀 4–6 倍(L1 10×10 板配置 5% 实际 30.1%,极端板可挖格 100% 覆盖);percent 语义 = 占可挖格比例,关卡递增由 per_level_bonus 绝对格数承载;表值零变更(provisional 归 难度曲线与Boss 调参批重标,正式重基线同批) |
| v0.6 | 2026-10-03 | **反制道具配套义务作废批(2026-10-03 用户终裁——层级错配失败设计)**:①负责表义务行+§反制道具配套义务节改作废注记并附终裁理由(同调位反制件=冒险周期常驻资源对抗关卡周期局部威胁;变异=受控纯税现状维持);②counter_items 字段保留恒空=合法态,承载形态待迭代 12 双层 BD 调研重定(变异应对若做只挂局内);③依赖表魔法道具行/P1P2 后置表 Alpha 行/验收「配套义务闭环」条同步作废;④批位移迭代 12(调研前置后重新立项)。连带 魔法道具.md v0.8 同批;范围裁定注记见 roadmap 迭代 11+ 行(原 06 条目已收口移除) |
| v0.7 | 2026-10-04 | **全局作用域变异首发批(迭代 14 ③号卡——任务书裁决 P1-P8+Q1-Q4 全按推荐案)**:①类型清单加行贫矿脉(scope=global 首发型=案A 资源面·微贫向偏斜,effect_value=30 provisional);②新增 §全局作用域型 语义节(板级承载/替换制/兜底回落/恒定制/资源面偏斜口径/三层预告);③「每图一型」板级推广=普通图 region、Boss/精英图 global;④候选池门控扩第三维=节点身份(global 行仅 boss/elite 入池,普通节点静默跳过;elite 前向词位零表行);⑤布置段节补全局决议前置于资源格设置(数据依赖——偏斜旋钮先于摇号定型,零取号);⑥P1/P2 表 Alpha 行换代已落地(撤 2026-09-19「留 Alpha 再设计」挂起——P1 裁决);⑦调参表+验收标准+影响面随批;⑧呈现三层承载归 HUD框架.md 同批(横幅+常驻角标+手册行);⑨遗留知情代价:迭代 12 四件地形应对件在 Boss 图无的放矢(替换制无地形格——Q3 知情代价,registry/调参日志登记) |
@@ -184,7 +184,7 @@
|---|---|---|
| P1 | 储备池跨战斗携带开关 | 现行每场战斗清零(防滚雪球);是否解禁连刷策略,等实测数据说话 |
| P1 | 清图奖励按图类型差异化 | 结构位已预留,内容归地图战斗资源的表设计 |
| P2 | 地形成本修饰(不同格子不同价) | MVP 价目均匀是有意简化;钩子已预留,待地形变异首批类型定稿 |
| P2 | 地形成本修饰(不同格子不同价) | MVP 价目均匀是有意简化;钩子已预留,待地形变异首批类型定稿。**2026-10-04 注记(全局作用域变异首发批)**:地形变异首批已定稿且 Boss 图整图型(贫矿脉)已落地——资源面偏斜走摇号权重投影、零行动点计费接触,本钩子(案D 规则改写向的按格 AP 差价)**留位不启用**,启用条件仍=未来出现真正按格差异化成本的地形型(随类型扩展重议) |
| P2 | 行动点耗尽的教学提示 | 规则已定"0 点即收轮";若新手困惑,加提示不改规则,归教学引导 |
## 调参表
@@ -216,6 +216,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻
| [地图战斗资源](../战斗循环/地图战斗资源.md) | 已开格的奖励身份常读;未开格类型微光(英雄周围 8 格内的未开格显示资源类型——概念定义见本篇「未开格类型微光」节) |
| [魔法道具](../排雷循环/魔法道具.md) | 库存条常读;使用交互与目标拾取;板级叠加层信息呈现 |
| [棋盘生成](../排雷循环/棋盘生成.md) | 零合法板的诚实告知(数据面经战斗结算上抛,本系统只管提示形态) |
| [地形变异](../排雷循环/地形变异.md) | 全局作用域型三层预告(2026-10-04 首发批——语义正主=地形变异 §全局作用域型):①开战横幅一行(板级变异非空时显示;减动效=静态驻留,轮横幅先例同款双态)②HUD 常驻角标(C 区战斗全程可见防中局遗忘,空态整节隐藏=流派件段先例;摆位 provisional)③帮助手册一行(零交互教学,承载=玩法帮助文案块);数据面经呈现快照 board_variants 投影(核心→呈现唯一读取面),普通图三层恒空态零打扰 |
## P0 最小闭环
@@ -275,6 +276,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻
- 任一模态层打开时遮挡物隐藏或输入锁定、关闭逐层恢复;tooltip 与明细行等动态区固定槽高、换行裁剪不推挤布局。
- 终局呈现只消费流水与快照:核心对象销毁后呈现层对生命周期状态零回读;终局后重放渲染与实时渲染一致。
- 消费的每份载荷逐字段断言通过(缺字段、多字段都算失败)。
- 地形变异三层预告(2026-10-04 全局作用域变异首发批——规则正主=地形变异 §全局作用域型):Boss 图开战横幅一行显示且普通图不显示;C 区常驻角标战斗全程可见、空态整节隐藏;帮助手册含整图变异说明行;减动效开启横幅走静态驻留(轮横幅同款双态);普通图三层零打扰(恒空态)。
- 字号下限成立;无每秒超三次闪烁;减动效开启时时长减半或跳终态(结算兑现降速不跳过);全程纯鼠标可玩;中文渲染无缺字。
- 呈现层零随机调用;切片临时名零残留。
@@ -298,5 +300,6 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻
| v0.10 | 2026-09-26 | 渲染技术注记(战斗舞台 Node2D 迁移批 Phase B,代码实装同批;上位裁决 ADR-0006):B 区战斗舞台 Node2D 化——BattleStageView 内部由 PanelContainer+Control 站桩改为 Control 壳 + SubViewportContainer + SubViewport + Node2D 世界(StageWorld/StandeeBody),类名/setter 面/公共方法契约不变、调用点零改造;状态图标行与悬停 tooltip 保留 Control 载体挂壳层(伴随件);C6 字体注入挂点复用(set_world_font);三区布局与性能预算(同屏 draw calls < 200)不变;占位表现等价平移(时序常量逐字对照——等价证明=git 提交 7f24b64,文件已按生命周期条款退役) |
| v0.11 | 2026-09-27 | 关卡画面 UX spec 建档([level-map](../../ux/level-map.md),关卡画面 UX 批——用户拍板立项):义务清单「关卡节点地图」行挂屏级 spec 指针;屏级权威行与不负责表改按屏分治口径(战斗屏 = battle.md / 关卡画面 = level-map.md)。文档面零机制改动 |
| v0.12 | 2026-09-30 | **未开格类型微光概念收口批(用户裁决落位)**:新增「未开格类型微光」节=全项目唯一正主定义(五要素——作用对象=英雄周围 8 格内的未开格〔与可挖域同圈〕/信息内容=只类型不泄雷安/生命周期=入圈亮出圈灭开格灭/关联边界/实装状态=契约定稿〔样张 v2〕游戏内待实施批);核心规则章六节改七节;呈现义务来源清单「地图战斗资源」行补微光指路;验收标准补微光呈现线。背景:该概念此前只活在 06 登记与 art-bible 复述,「常显/全部未开格」无范围表述酿成理解事故(2026-09-30 用户纠正口径),本批落位正主、他文只许指路 |
| v0.13 | 2026-10-04 | **地形变异三层预告义务批(全局作用域变异首发批——迭代 14 ③号卡,代码同批)**:呈现义务来源清单补「地形变异」行(开战横幅一行〔减动效=静态驻留,轮横幅先例同款双态〕+ C 区常驻角标〔空态整节隐藏=流派件段先例,摆位 provisional〕+ 帮助手册一行〔零交互教学〕);验收标准补三层预告线(普通图恒空态零打扰);数据面走呈现快照 board_variants 投影(核心→呈现唯一读取面)。语义正主=地形变异.md §全局作用域型,本文只锁呈现承载 |
| v0.14 | 2026-10-03 | **视野迷雾实施批落籍注记(迭代 11 第④批)**:迷雾节补「实施状态」注记(四裁决逐条对账:纯呈现两态逐位一致/暗淡记忆态灰显可读/LIGHT_RADIUS=8 参数化〔提灯 +2 插值位预留未接〕/类型微光仍贴身 8 邻格);实装状态行「待实施批」改「已实装」;验收标准迷雾行去「待实施批落地后验收」括注转正式验收。机制定义零改动(定义一句话/作用范围/生命周期/关联边界/配套拍板全段原样);黑暗区域渲染规格落 art-bible §6.5(v3.5) |
| v0.13 | 2026-09-30 | **视野迷雾概念落位批(用户拍板立项)**:新增「视野迷雾」节=正主定义(菱形灯光区+黑暗边界;区外已开格=暗淡记忆态灰显可读、区外未开格=全黑;灯光半径起步=微光环 8 格同圈;纯呈现层,与已退役雾格无关);验收标准补迷雾线;配套拍板随节登记(魔法提灯灯甲外扩 +2 格、类型微光不随视野扩、初始展开收窄后置 Alpha 差异化批)。实施待主线编卡 |
@@ -61,6 +61,7 @@ HUD 框架定稿时已为教学留好两个承载位,本系统的内容将来
| 挖非相邻格的首次提示 | [HUD 框架](HUD框架.md) | 挖与旗都限小人 8 向相邻的格子,第一次越界操作时提示 |
| 增益叠层节奏 | [增益状态](../战斗循环/增益状态.md) | "同一轮拿满优于跨轮慢慢叠"——增益有结算次数衰减,教学要传达这个节奏 |
| 库存关卡末清空 | [地图战斗资源](../战斗循环/地图战斗资源.md) | 道具库存随关卡结束清空,需有反馈与教学条目 |
| Boss 图整图变异说明行 | [地形变异](../排雷循环/地形变异.md)(全局作用域变异首发批 2026-10-04) | Boss 图整图变异(贫矿脉——生存资源变薄、进攻资源变肥)开战横幅与 HUD 角标常驻预告;帮助手册一行承载常量性知识(零交互教学——「手册零再教」承载位,见 HUD 框架玩法帮助文案块) |
### 内容原则
@@ -116,3 +117,4 @@ HUD 框架定稿时已为教学留好两个承载位,本系统的内容将来
| v0.1 | 2026-09-14 | 自归档线索整合为范围草案(旧体系未单独成文) |
| v0.2 | 2026-09-15 | 雾格残留清理:删除「待拍板」的雾类教学条目失义登记(图例条目"迷雾 = 无雷盲区"与雾格首遇三要点提示),"待设计问题清单"第 3 条去掉雾条目删除的限定。教学条目清单与承载设施不变 |
| v0.3 | 2026-09-17 | 数值纪律收口批:呈现常量复述改指路 HUD 框架调参表 |
| v0.4 | 2026-10-04 | **地形变异手册行批(全局作用域变异首发批——迭代 14 ③号卡,代码同批)**:已登记的教学条目表补「Boss 图整图变异说明行」——三层预告中的手册层承载(帮助文案块一行,零交互教学),横幅/角标两层归 HUD 框架;语义正主=地形变异.md §全局作用域型 |
@@ -0,0 +1,81 @@
# 全局作用域变异首发批 出口报告(迭代 14 ③号卡,2026-10-04)
> 批任务书:design/research/任务书-全局作用域变异首发批-2026-10-04.md(台账 344,裁决 P1-P8+Q1-Q4 全按推荐案零待裁)
> loop 计划书:.zcode/plans/m4iter14-gvar-loop-plan-2026-10-04.md(gitignored,U0=开工令 prompt 预批准)
> worktree:g-plan2-m4iter14-gvar-20261004(基 9f64456)
## 一、基线与改动面
**基线(开工实测)**:主区 head 9f64456;冒烟 718/0;run_all 15 套件;现行 MC 锚 `runsum_m4iter12_t10abb_n20_20261004`;variation.tres 6 行。
**改动面(五提交)**:
1. **T1-T4 核心面**:variation_table.gd(EFFECTS+`resource_face`/TRIGGERS+`always`/互锁三条+effect_value [0,50] 域)·variation.tres(+skewed_veins 行,7 行)·config_db.gd(variant_pool 第三参 node_type 缺省零扰动+global_variant_row 访问器)·board_data.gd(board_variants 板级字段+访问器)·battle_orchestrator.gd(装板序 `_resolve_global_variant` 前置于 roll_board+`_place_variants` 替换制早退)·reward_economy.gd(board_skew 旋钮+`_skewed_cell_rows` 整数最大余数投影+`_biased_cell_rows` 基座换源=合成序)。
2. **T5 呈现三层**:settlement_fx_view.play_board_variant_banner(轮横幅先例+减动效静态双态)·hero_info_panel_view 地形变异常驻角标段(流派件段先例空态隐藏)·hud_presenter.board_variant_lines+快照投影接线·main.gd 开战横幅挂钩(首轮快照判空发射)·ui_assembler 手册行。
3. **T6 文档七正主**:地形变异.md v0.7(类型清单+§全局作用域型+门控三维+布置段注记+调参/验收+P2 Alpha 行换代)·难度曲线与Boss.md(P2 投放计划行升级现行+调参表 resource_face 行)·registry=architecture.md(variation 行换代)·HUD框架.md v0.13(义务行+验收+v 史)·教学引导.md v0.4(条目+V 史)·行动经济.md(P2 价目钩子=案D 留位不启用注记)·06 条目解决移除。
4. **T7 断言批**:smoke_all.gd 新段 29 断言(互锁负样本③-⑦/门控三维/L1 免疫/elite 前向位/替换制恰一行+零 region 格/variant_place 零取号(取号计数桩)/快照投影/守恒 77/白名单/v=30 构造例/合成序构造例/v=50 域上界/确定性)·config_db_test 换代(通配选择器限定 region+global 第三维三断言)。
5. **出口**:本报告+roadmap ③卡落地注记。
**执行发现(实现位调和,随批呈报)**:任务书 T2 字面把全局分支写在 `_place_variants`,但装板序中 roll_board 先于布置段而 T3 偏斜旋钮须在摇号前定型——全局决议前移至装板序内(`_resolve_global_variant`),替换制/兜底回落/零取号/恒定制四语义不变,普通图路径零 diff。属数据依赖的机械位调和,非裁决重开。
**既有行为登记(本批零触碰)**:`luck_bias` 注入时点在 begin_battle 首板 install 之后——首板 roll 恒 0、偏运硬币仅轮内刷新图生效;系迭代 11 对拍锚现行口径,合成序「图级先件级后」在单次 roll 内的权重代数不受影响。
## 二、值面静态推演(T3 义务——只测不判,精确判读归 T7b 读数批/M-4)
**权重面位移(v=30,整数最大余数实现,构造例已断言)**:
| 行 | 基线 | v=30 实现 | 精确目标 w×(1−v/100) |
|---|---|---|---|
| attack_up | 14 | 15 | 15.37 |
| spark_aoe | 16 | 18 | 17.57 |
| pierce_strike | 8 | 9 | 8.78 |
| magic_bolt | 8 | 9 | 8.78 |
| heal_minor | 4 | 3 | 2.8 |
| ac_up | 11 | 7 | 7.7 |
| weaken / ap_up / gp_coin | 8 / 6 / 2 | 8 / 6 / 2(逐位不动) | 同 |
- **合计守恒**:偏斜后 77 恒成立(整数域构造性保证——下调量按进攻族原权重比例最大余数重分配;任意 v∈[0,50] 均守恒,v=50 已断言)。
- **份额位移**:生存族 15/77=19.5% → 10/77=13.0%(整数实现;精确目标 13.6%);进攻族 59.7% → 66.2%。
- **EV 方向与幅度**:以「生存单位当量 : 进攻单位当量 = r」的静态参数化——EV 降幅 = [46+15r+16 − (51+10r+16)]/(46+15r+16)(整数实现)。r=1.5 → −2.96%;r=1.75 → −4.1%;r=2.0 → −5.4%。精确权重实现 r∈[1.5,2.0] → −2.7%~−4.9%。**结论**:方向=微降 ✓;3-5% provisional 目标带对应 r≈1.6–1.9,落在「生存族当量价值高于进攻族」前提的合理域内——方向与幅度的静态核对通过,精确读数归 T7b(MC 三态对账链)与带 A 判读(M-4,Q4 甲只测不判)。
- **占比带 [15,40] 关联**:进攻族池份额上浮 6.5pp 间接推高奖励侧输出占比——越带与否只呈报不回调(S2),归 T7b 读数面。
## 三、Q3 知情代价登记(registry/调参日志随批登记义务)
**替换制+案A(无地形格)⇒ 迭代 12 四件地形应对件在 Boss 图无的放矢**:地脉采撷/荆棘编织者/净化工兵/熔火之躯的触发域=region 变异格(挖伤害格/中和相邻伤害格/受地形伤积层),替换制下 Boss 图零 region 格——四件在 Boss 图整件失效,仅普通图(每关 6/7 张主战场)有效。**登记为知情代价**(Q3 甲裁决,2026-10-04);registry variation 行与地形变异.md v0.7 版本史 ⑨ 同步注记;MC on 档读数观察其普通图侧平衡(T7b)。
## 四、闸结果(实施批闸=T7;MC 读数批=T7b 切独立后批)
| 闸 | 结果 |
|---|---|
| 冒烟全量 | **747/0**(基线 718+新段 29——断言总数只增不减 ✓) |
| run_all | **15 套件全绿**(config_db_test 换代 +3) |
| 普通图逐位回归(S1) | golden 对拍 **12/12 全等**(4 种子×3 关×布置+摇号+RNG 计数器,批前批后逐位一致——S1 零触发) |
| 全探针 | 六探针结果见提交前终录(ui_input/ui_click 三种子/ui_probe/ui_layout/fx/t17_defer) |
| doc 三闸+熵增 | 结果见提交前终录(预期零新增) |
| MC | **未跑**(T7b 切独立后批——总量 120 局=一档·调研,须用户批准发起;现行锚只读) |
## 五、provisional 追认单(出口人闸,全部不阻塞实施)
| # | 项 | 现值 | 备注 |
|---|---|---|---|
| 1 | 偏斜幅度 effect_value | 30 | 域 [0,50];0=中性 off 锚;调参项走调参不走修订 |
| 2 | 命名 | skewed_veins / 贫矿脉 | 文案归本地化批 |
| 3 | 横幅文案 | 「地形变异 · 贫矿脉 · 奶薄枪肥」 | 驻留 0.6s 同轮横幅 |
| 4 | 角标文案与摆位 | C 区「地形变异」段(流派件段下方)·「贫矿脉 · 奶薄枪肥」 | 摆位 provisional 归 HUD 框架批 |
| 5 | 手册行 | 玩法帮助块末行(地形变异一句) | 零交互教学 |
| 6 | N=60 | T7b 双档配对局数 | 跑批须用户批准 |
| 7 | 兜底回落行为 | Boss 图全局池空回落 region 布置 | 保守向后兼容 |
| 8 | 全局池多行取首行 | 防御口径(首发恒恰一行) | 越界态另批 |
| 9 | 开战横幅发射位 | 首轮 round_started 快照判空(刷新图不重发,角标承担常驻) | 实现位调和连带 |
## 六、人闸实机目检清单(L2 Boss 开一局即可全查)
1. L2 Boss 开战:轮横幅下方叠「地形变异 · 贫矿脉 · 奶薄枪肥」横幅(减动效开=静态驻留)。
2. 战斗全程 C 区常驻「地形变异」角标(轮内刷新图后仍在);普通图/L1 Boss 该段隐藏。
3. 体感核对:奶(回血格)明显变少、攻击/爆裂/穿刺/奥术格变多(「奶薄枪肥」)。
4. 帮助面板(玩法帮助块)末行有整图变异说明。
5. L1 Boss 无变异(无横幅无角标)。
6. 普通图:region 变异格照旧、零角标零横幅。
## 七、③出口完成宣告与 T7b 移交
**③号卡实施批出口成立**(本报告+闸全绿+七正主落籍)。**⑥A4 配比批开工门=②③出口——本批出口即解⑥一半前置**(另半=②判式换代批出口)。
**T7b MC 读数批移交**:三态对账链=现行锚(`runsum_m4iter12_t10abb_n20_20261004` 只读——旧 Boss 读数含台账 96 承伤 55.8% 换代作废只测不判)+off(effect_value=0:替换制生效+偏斜中性,语义=零变异 Boss 图,与现行锚语义不同须注明)+on(偏斜 30);N=60 同种子配对;读数面=战役通关率+Boss 场承伤+奖励占比带 [15,40] 复算+偏斜期望实测;**只测不判**(带 A 判读归 M-4);**跑批前须用户批准**(先推算后重跑)。
+29
View File
@@ -285,6 +285,11 @@ func _install_new_board(during_round := false) -> bool:
var board: BoardData = _board_generator.generate(int(encounter.level_index), int(encounter.node_depth), stream, db)
if board == null:
return false
# 全局作用域变异决议(首发批 2026-10-04——装板序内前置于 roll_board:图级偏斜旋钮须在资源
# 摇号前定型;全局门控与板无关〔节点身份+unlock+board_types〕,确定性取用零取号)。
# boss/elite 图命中全局型 → 写 board_variants(_place_variants 见非空即跳 region=替换制);
# 全局池空 → 板级字段留空(_place_variants 原路走 region=兜底回落合法态)。
_resolve_global_variant(board)
var res: Dictionary = minesweeper.install_board(board, during_round)
if not res.accepted:
_fatal("排雷玩法 install 拒绝(不变式违例): %s" % str(res))
@@ -318,6 +323,22 @@ func _install_new_board(during_round := false) -> bool:
return true
# ---- 全局作用域变异 决议(首发批 2026-10-04——装板序内 roll_board 之前)----
# boss/elite 图命中全局型:写板级 board_variants(恰一行)+ 注入资源面偏斜旋钮(图级投影在
# RewardEconomy.roll_board 消费);不消费 variant_place 流(全局取用确定性——零取号合法态)。
# 全局池空(含 L1 Boss 免疫/unlock 门控未达):字段留空、旋钮归零——_place_variants 原路走
# region 布置 = 兜底回落(保守向后兼容,防配置缺行静默裸奔——provisional)。
func _resolve_global_variant(board: BoardData) -> void:
board.board_variants.clear()
_reward_economy.board_skew = 0
var row: Dictionary = db.global_variant_row(int(encounter.level_index), String(board.board_type),
String(encounter.get("node_type", "")))
if row.is_empty():
return
board.board_variants = [String(row.variant_id)]
_reward_economy.board_skew = int(row.get("effect_value", 0))
# ---- 地形变异 布置段(首批类型定稿批 2026-09-19——棋盘设置顺序第 4 步)----
# 候选池门控(unlock_level ≤ 关卡序号 + board_types 与本地形交集,∅ 通配)经 config_db.variant_pool;
# 池空 = 合法态,静默零布置(框架 P0 口径不变)。零特判:本段只写格子变异数据快照,不改扫雷规则本体。
@@ -327,7 +348,11 @@ func _install_new_board(during_round := false) -> bool:
# (关卡序号−1)×per_level_bonus——基数为候选池而非总格数(2026-09-21 用户拍板基数修正批:初始展开
# 占全板 56–67%,总格数基数使有效密度膨胀 4–6 倍、L1 小板极端全池覆盖;percent 语义 = 占可挖格比例,
# 关卡递增由 per_level_bonus 绝对格数承载);连通片生长(8 邻),单片 ≤ pack_max(2×2 / 1×4 / 1×3+1 等形)。
# 替换制(全局作用域变异首发批 2026-10-04):板级 board_variants 非空 = 本图已带全局型,跳过 region
# 布置(每图一型的板级推广:普通图=region,Boss/精英图=global);空 = 原路径(含 Boss 图全局池空回落)。
func _place_variants(board: BoardData) -> void:
if not board.board_variants.is_empty():
return
var pool: Array = db.variant_pool(int(encounter.level_index), String(board.board_type))
if pool.is_empty():
return
@@ -1155,6 +1180,10 @@ func presentation_snapshot() -> Dictionary:
"hero": hero,
"enemies": enemies,
"hero_effects": _status_effects.query_active("hero").duplicate(true), # 值拷贝出户(code-review 2026-09-29 P2-3——快照消费方直改不渗入状态容器)
# 板级变异投影(全局作用域变异首发批 2026-10-04——呈现横幅/常驻角标唯一读取面;
# 空数组 = 无全局型合法态:普通图与全局池空回落图恒空)
"board_variants": (minesweeper.current_board().board_variant_ids().duplicate()
if minesweeper.current_board() != null else ([] as Array[String])),
}
+7
View File
@@ -16,6 +16,8 @@ var spawn_center := Vector2i.ZERO
var mines := {} # Vector2i → true
var digits := {} # Vector2i → int(安全格恒有值;数字恒真 = 8 邻雷数)
var variants := {} # Vector2i → Array[String](生成期快照,抗表重载)
var board_variants: Array[String] = [] # 板级变异 id 集(scope=global 整图作用域——全局作用域变异批 2026-10-04:
# 战斗编排装板决议写入,随图生灭同 variants;普通图恒空)
var board_type := "" # 图类型标签(词表 v1.0:dungeon/underdark;玩家侧显示名「地图类型」)
var level_index: int = 1
var node_depth: int = 0
@@ -50,6 +52,11 @@ func variant_ids(c: Vector2i) -> Array:
return variants.get(c, [])
# 板级变异只读出口(scope=global 行集——呈现快照/断言消费;空 = 无全局型合法态)
func board_variant_ids() -> Array[String]:
return board_variants
# 中和格变异(迭代 12 T6 净化工兵——伤害型地形格变普通格;🔴 R4 甲仅限伤害型的过滤在调用方)
func clear_variants(c: Vector2i) -> void:
variants.erase(c)
+19 -1
View File
@@ -197,10 +197,16 @@ func resolve_difficulty_modifiers(L: int, D: int) -> Dictionary:
# ---- 地形变异 variant_pool_gate:候选池门控(∅ board_types = 通配;2026-09-19 用户裁定字段名对齐
# board_type 词表——biome_tags 系旧观念残留退役)----
# 门控第三维 = 节点身份(全局作用域变异首发批 2026-10-04):scope=global 行仅 boss/elite 节点入池,
# 其余节点(battle 等)静默跳过——门控兜底 P0 口径(零报错零警告);elite 系前向词位(首发零表行)。
# node_type 缺省 "" = 旧双参调用口径(global 行跳过)——既有测试/冒烟调用零扰动。
func variant_pool(level_index: int, board_type: String) -> Array:
func variant_pool(level_index: int, board_type: String, node_type: String = "") -> Array:
var pool: Array[Dictionary] = []
for row in variation.rows:
if String(row.get("scope", "region")) == "global" \
and node_type != "boss" and node_type != "elite":
continue
if int(row.get("unlock_level", 999)) > level_index:
continue
var tags: Array = row.get("board_types", [])
@@ -212,6 +218,18 @@ func variant_pool(level_index: int, board_type: String) -> Array:
return pool
# 全局型单行决议(战斗编排装板期消费——访问器纪律:消费面禁直扫表):
# boss/elite 节点取候选池内首个 scope=global 行(首发批全局池恒恰一行;多行为配置越界态,
# 按表序取首行确定性兜底);空 = 无全局型(调用方回落 region 布置——兜底回落合法态)
func global_variant_row(level_index: int, board_type: String, node_type: String) -> Dictionary:
if node_type != "boss" and node_type != "elite":
return {}
for row in variant_pool(level_index, board_type, node_type):
if String(row.get("scope", "region")) == "global":
return row
return {}
func status_effect_row(effect_id: String) -> Dictionary:
return status_effects.row_by_id(effect_id)
+89 -2
View File
@@ -179,13 +179,25 @@ var luck_bias: int = 0
# 稀有正向资源 kinds(底稿 §3——权重投影面,池结构零触碰)
const LUCK_BIAS_KINDS := ["heal", "gp", "pierce", "magic"]
# 图级偏斜旋钮(全局作用域变异首发批 2026-10-04——battle_orchestrator 装板决议注入,全局型行
# effect_value 语义=生存族权重下调百分比;0 = 中性 off 态。每板决议时显式重置/写入)
var board_skew: int = 0
# 偏斜族(任务书 §二:进攻族等比上浮/生存族按 v% 下调/白名单豁免恒不动——判定键=cell_type;
# 其余 cell_type(weaken/gp/action 白名单与未来扩型)= 豁免;负向行不入摇号已在 _rollable_rows 滤除)
const SKEW_DOWN_KINDS := ["heal", "defense"]
const SKEW_UP_KINDS := ["attack", "blast", "pierce", "magic"]
# 偏运硬币权重投影(底稿 §3:只动池内权重、雷安仍同池同分布;luck_bias=0 逐位返回原行集——off 态零扰动)
# 基座换源(首发批 2026-10-04):先经图级偏斜投影再叠件级加法——合成序锚=图级先、件级后
#(环境事实先定型、玩家构筑叠其上;两投影均为池内权重面,雷安同池与取号次数零变化)
func _biased_cell_rows() -> Array:
var base: Array = _skewed_cell_rows()
if luck_bias <= 0:
return _rollable_rows()
return base
var out: Array = []
for row in _rollable_rows():
for row in base:
if LUCK_BIAS_KINDS.has(String(row.get("cell_type", ""))):
var biased: Dictionary = row.duplicate()
biased["weight"] = int(row.weight) + luck_bias
@@ -195,6 +207,81 @@ func _biased_cell_rows() -> Array:
return out
# 图级资源面偏斜投影(首发批 T3——整数最大余数法:生存族按 board_skew% 下调,下调量按进攻族
# 原权重比例整数重分配,合计恒等于原池合计 77;负向行与白名单三行逐位不动)。
# board_skew<=0 逐位返回原行集 = off 态零扰动第一断言:不进投影域、行集/行序/取号域与基线逐位同。
func _skewed_cell_rows() -> Array:
if board_skew <= 0:
return _rollable_rows()
var base: Array = _rollable_rows()
var down: Array = []
var up: Array = []
for row in base:
var k := String(row.get("cell_type", ""))
if SKEW_DOWN_KINDS.has(k):
down.append(row)
elif SKEW_UP_KINDS.has(k):
up.append(row)
if down.is_empty() or up.is_empty():
return base # 结构缺族 = 无偏斜作用面(保守直通——池结构变更须走表加载校验另批)
var v := board_skew
# 下调总量 = round_half_up(Σ生存×v/100);逐行精确份额 w×v/100 最大余数取整(行序平局)
var drops := _largest_remainder_split(down, v, 100, (2 * _pool_weight(down) * v + 100) / 200)
# 上浮总量 = 下调总量(守恒),逐行精确份额 drop×w/Σ进攻 最大余数取整
var gains := _largest_remainder_split(up, drops_total(drops), _pool_weight(up), drops_total(drops))
var di := 0
var ui := 0
var out: Array = []
for row in base:
var k := String(row.get("cell_type", ""))
var w := int(row.weight)
if SKEW_DOWN_KINDS.has(k):
w -= drops[di]
di += 1
elif SKEW_UP_KINDS.has(k):
w += gains[ui]
ui += 1
assert(w > 0, "图级偏斜投影产生非正权重(池结构变更须走另批重审)")
var skewed: Dictionary = row.duplicate()
skewed["weight"] = w
out.append(skewed)
assert(_pool_weight(out) == _pool_weight(base), "图级偏斜守恒破(偏斜后合计须等于原池)")
return out
func drops_total(amounts: Array[int]) -> int:
var t := 0
for a in amounts:
t += a
return t
# 最大余数整数分摊(行序平局——确定性):把 total 单位按精确份额 w_i×numer/denom 分到 rows
# (floor 后余数单位依次给分数最大者,平局取行序在前)——Σ结果恒 = total
static func _largest_remainder_split(rows: Array, numer: int, denom: int, total: int) -> Array[int]:
var floors: Array[int] = []
var fracs: Array[int] = []
var used := 0
for row in rows:
var exact: int = int(row.weight) * numer
floors.append(int(exact / denom))
fracs.append(exact % denom)
used += int(exact / denom)
var order: Array[int] = []
for i in rows.size():
order.append(i)
order.sort_custom(func(a: int, b: int) -> bool:
if fracs[a] != fracs[b]:
return fracs[a] > fracs[b]
return a < b)
var out: Array[int] = floors
var rest: int = total - used
assert(rest >= 0 and rest <= order.size(), "最大余数分摊余数越界(不应可达)")
for j in rest:
out[order[j]] += 1
return out
func weighted_pick(rows: Array, r: int) -> String:
var total := _pool_weight(rows)
assert(r >= 0 and r < total, "weighted_pick 取号越域(纯函数域守卫)")
+20 -2
View File
@@ -20,8 +20,10 @@ extends Resource
@export var pack_max: int = 4
const SCOPES := ["region", "global"]
const EFFECTS := ["none", "flat_damage", "hide_number"] # 效果词表:直伤 / 数字遮蔽(可扩充)
const TRIGGERS := ["on_open", "on_number_shown"] # 触发词表:被打开即触发 / 打开且显示数字时触发(可扩充)
# resource_face = 资源面偏斜(全局作用域变异首发批 2026-10-04——整图修摇号分布:生存族按 effect_value%
# 下调、进攻族等比上浮重归一,不动任何格子数据;effect_value 语义随行域切换,不适用 flat_damage [1,9])
const EFFECTS := ["none", "flat_damage", "hide_number", "resource_face"] # 效果词表:直伤 / 数字遮蔽 / 资源面偏斜(可扩充)
const TRIGGERS := ["on_open", "on_number_shown", "always"] # 触发词表:被打开即触发 / 打开且显示数字时触发 / 板级恒在无触发时机(可扩充)
const PLACEMENTS := ["closed_only", "any"] # 布置约束词表:只落布置时未开格 / 任意格(可扩充)
@@ -65,6 +67,22 @@ func validate() -> Array:
errs.append({"category": "cross_field", "message": "%s hide_number ⇒ trigger 必为 on_number_shown" % vid})
# 信息遮蔽型只允许落安全格(遮蔽对象是数字;雷格无数字可遮)——placement=any 时由读取方
# 呈现面按 kind=safe 自然短路,此处不设布置约束
# 全局作用域型互锁(2026-10-04 首发批——resource_face ⟺ scope=global 三条 + 新值域;
# 判定键=effect/scope 词值,既有六 region 行(flat_damage/hide_number)不入本组——零误伤)
if row.get("effect", "") == "resource_face":
if row.get("scope", "") != "global":
errs.append({"category": "cross_field", "message": "%s resource_face ⇒ scope 必为 global(整图作用域)" % vid})
# resource_face 行 effect_value = 生存族权重下调百分比(0=中性合法态——off 锚用)
var gev: int = int(row.get("effect_value", 0))
if gev < 0 or gev > 50:
errs.append({"category": "domain", "message": "%s effect_value 越域 [0,50](资源面偏斜百分比): %d" % [vid, gev]})
if row.get("scope", "") == "global":
if row.get("effect", "") != "resource_face":
errs.append({"category": "cross_field", "message": "%s scope=global ⇒ effect 必为 resource_face" % vid})
if row.get("placement", "") != "any":
errs.append({"category": "cross_field", "message": "%s scope=global ⇒ placement 必为 any(整图无格子布置域)" % vid})
if row.get("trigger", "") != "always":
errs.append({"category": "cross_field", "message": "%s scope=global ⇒ trigger 必为 always(板级恒在,无触发时机)" % vid})
return errs
+18
View File
@@ -73,6 +73,17 @@ rows = [{
"placement": "any",
"board_types": ["deep_underdark"],
"counter_items": []
}, {
"variant_id": "skewed_veins",
"display_name": "贫矿脉",
"unlock_level": 2,
"scope": "global",
"effect": "resource_face",
"effect_value": 30,
"trigger": "always",
"placement": "any",
"board_types": [],
"counter_items": []
}]
; 地形变异 首批类型定稿批(2026-09-19 用户拍板)——四行两轴×两关:
@@ -98,3 +109,10 @@ rows = [{
; 变异密度 9%→4%、完美 L3 0→34%,L3 无带记观察态;行值 provisional→正式随迭代 5 出口人闸追认)。
; M-3 迭代 5 返工批(2026-09-29 U2 推翻 C3 裁 C1 两刀):percent_of_cells 4→5 回退;岩浆 1 与 per_level_bonus 0 维持——C1 终态;
; C1+v1 AC 组合读数归返工批全量确认(裁断全录 design/qa/m3-iter5-u2-gate-2026-09-29.md)。
;
; 全局作用域变异首发批(2026-10-04,迭代 14 ③号卡):skewed_veins 贫矿脉——首发型 scope=global
; 案A 资源面·微贫向偏斜(P2+Q1 裁决):L2/L3 Boss 图恒定一型整图变异(P4 甲恒定制;board_types ∅
; 通配,L2/L3 双关同型由 unlock_level=2+门控节点身份承载——Q2 甲),替换制:带全局型的 Boss 图不再
; 布 region 片(P3 甲);effect_value=30=生存族权重下调百分比(provisional 调参项,域 [0,50],
; 0=中性 off 锚;总期望微降 3-5% 为 provisional 设计目标,精确方向与幅度归读数批只测不判);
; trigger=always=板级恒在无触发时机。行值全 provisional 归出口追认单。
+17
View File
@@ -41,9 +41,13 @@ static func refresh(stage: BattleStageView, info: HeroInfoPanelView, ap_bar: ApB
else:
info.set_relic_holdings([])
if settlement == null:
info.set_board_variants([]) # 战斗域角标出战斗即隐(首发批 2026-10-04——空态纪律)
_refresh_out_of_battle(stage, info, ap_bar, runner, level_active, db)
return
var s: Dictionary = settlement.presentation_snapshot()
# 地形变异常驻角标投影(全局作用域变异首发批 2026-10-04——板级变异快照 → 文案行;
# 空态隐藏=流派件段先例;战斗全程常驻防中局遗忘)
info.set_board_variants(board_variant_lines(db, s.get("board_variants", [])))
var hero: Dictionary = s.hero
if hero.is_empty() or not bool(hero.get("alive", false)):
_refresh_out_of_battle(stage, info, ap_bar, runner, level_active, db)
@@ -109,6 +113,19 @@ static func relic_holdings_lines(db, held: Array) -> Array[String]:
return rlines
# 地形变异常驻角标文案(全局作用域变异首发批 2026-10-04——板级变异 id → display_name 行;
# 空集 = 空数组=空态隐藏。体感短语 provisional 归本地化批)
static func board_variant_lines(db, ids: Array) -> Array[String]:
var lines: Array[String] = []
if db == null or db.variation == null:
return lines
for vid in ids:
var row: Dictionary = db.variation.row_by_id(String(vid))
if not row.is_empty():
lines.append("%s · 奶薄枪肥" % String(row.get("display_name", vid)))
return lines
# ---- 战斗收尾反馈与结算视觉同步(T3 HUD 单通道批 2026-10-02——组合根直改视图收敛入此) ----
# battle_over 收尾反馈:死亡兜底灰化 → 主角态回 idle → RAP 清零脉冲(调试收尾路)→ 状态全清可见反馈。
+8
View File
@@ -764,6 +764,14 @@ func _on_round_started(ri: int) -> void:
else:
_row_pacer.enqueue({"__round_line": ri})
settlement_fx.play_round_banner(ri)
# 开战横幅——板级地形变异预告(全局作用域变异首发批 2026-10-04):首轮快照 board_variants
# 非空才发射(Boss 图恒带一型=替换制;普通图空快照零发射);轮横幅下方叠行,view 内判减动效。
if ri == 1 and settlement != null:
var bvs: Array = settlement.presentation_snapshot().get("board_variants", [])
if not bvs.is_empty():
var vlines: Array[String] = HudPresenter.board_variant_lines(db, bvs)
if not vlines.is_empty():
settlement_fx.play_board_variant_banner("地形变异 · " + vlines[0])
_refresh_used_round = 0
_refresh_presentations()
+1 -1
View File
@@ -150,7 +150,7 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary:
box.add_child(quitbtn)
# 玩法帮助文案(表值驱动——2026-09-16 AP 压速批遗留硬编码 8 随手修正;护甲等级掷点批同步"减伤"→"护甲强化")
var help_text := "玩法:每轮 %d AP——挖开(1AP)/插旗(1AP)/移动(免费)/连锁(免费)。\n每个非封锁格都藏一种格面资源(增伤/护甲强化/回血/爆裂/削弱)。开安全格、标中雷 = 正向兑付;\n开雷格、标错安全格 = 负向兑付——全部在轮末结算逐行兑现;吃掷点的基础攻击按护甲等级判定,无 miss、最低保底 1 点。\n停手:剩余 AP 转存 RAP;弃图刷新:RAP−%d 当场换图继续挖(每轮剩 %d 次)。\n敌人全灭胜、主角倒下负。悬停可看三态光标与可挖域微光。" % [
var help_text := "玩法:每轮 %d AP——挖开(1AP)/插旗(1AP)/移动(免费)/连锁(免费)。\n每个非封锁格都藏一种格面资源(增伤/护甲强化/回血/爆裂/削弱)。开安全格、标中雷 = 正向兑付;\n开雷格、标错安全格 = 负向兑付——全部在轮末结算逐行兑现;吃掷点的基础攻击按护甲等级判定,无 miss、最低保底 1 点。\n停手:剩余 AP 转存 RAP;弃图刷新:RAP−%d 当场换图继续挖(每轮剩 %d 次)。\n敌人全灭胜、主角倒下负。悬停可看三态光标与可挖域微光。\n地形变异:第二关起 Boss 图带整图变异(贫矿脉——奶变薄、枪变肥;开战横幅与 HUD 角标常驻提示)。" % [
int(db.action_economy.ap_per_round), int(db.action_economy.rap_refresh_cost), int(db.action_economy.refresh_cap_per_round)]
# 字号下限(v3.5 批 B3——正文 ≥16);对比度修复(v3.5 批 B3——WARM_FAINT 对深石底实测 2.58:1→暖白 ≥6:1;暗底双色墨制)
var help := UiKit.label(help_text, 16, false, UiKit.WARM)
@@ -23,6 +23,8 @@ var _bonus_section: VBoxContainer # 本关强化(预留——空态
var _bonus_list: VBoxContainer
var _relic_section: VBoxContainer # 流派件持有段(迭代 12 呈现补齐——空态隐藏)
var _relic_list: VBoxContainer
var _board_variant_section: VBoxContainer # 地形变异常驻角标(全局作用域变异首发批——空态隐藏)
var _board_variant_list: VBoxContainer
func _init() -> void:
@@ -79,6 +81,16 @@ func _init() -> void:
_relic_list = VBoxContainer.new()
_relic_list.add_theme_constant_override("separation", 2)
_relic_section.add_child(_relic_list)
# 地形变异常驻角标(全局作用域变异首发批 2026-10-04——Boss 图整图型战斗全程可见防中局遗忘;
# 空态整节隐藏=流派件段先例;摆位/文案 provisional 归 HUD 框架批与本地化批)
_board_variant_section = VBoxContainer.new()
_board_variant_section.add_theme_constant_override("separation", 4)
_board_variant_section.visible = false
col.add_child(_board_variant_section)
_board_variant_section.add_child(UiKit.label("地形变异", 16, true))
_board_variant_list = VBoxContainer.new()
_board_variant_list.add_theme_constant_override("separation", 2)
_board_variant_section.add_child(_board_variant_list)
# 本关强化(预留):锻造/大奖励/关卡奖励节点的属性提升——中循环数据因改变战斗数学准入;
# 与战斗内状态效果(B 区站桩,随战斗消散)分区,防「战斗结束被清」误读;空态整节隐藏
_bonus_section = VBoxContainer.new()
@@ -112,6 +124,17 @@ func set_relic_holdings(lines: Array) -> void:
_relic_section.visible = not lines.is_empty()
# 地形变异常驻角标(首发批 2026-10-04):lines = 文案行(板级变异 display_name+体感短语)——空数组 = 整节隐藏
func set_board_variants(lines: Array) -> void:
for c3 in _board_variant_list.get_children():
_board_variant_list.remove_child(c3)
c3.queue_free()
for line in lines:
var l3 := UiKit.label(String(line), 16, false, COL_INK)
_board_variant_list.add_child(l3)
_board_variant_section.visible = not lines.is_empty()
# 本关强化列表(预留接线面):lines = 文案行数组(如「锻造 +2 攻击」)——空数组 = 整节隐藏
func set_level_bonuses(lines: Array) -> void:
for c in _bonus_list.get_children():
@@ -147,3 +147,32 @@ func play_round_banner(ri: int) -> void:
tw.tween_interval(UiKit.motion(BANNER_DWELL))
tw.tween_property(banner, "modulate:a", 0.0, UiKit.motion(0.25))
tw.tween_callback(banner.queue_free)
# 开战横幅——板级地形变异预告(全局作用域变异首发批 2026-10-04):board_variants 非空时开战
# 显示一行(文本=「地形变异 · 贫矿脉」式);减动效=静态驻留后即隐(轮横幅先例——行呈现不跳过)。
# 文案/驻留参数 provisional 归本地化批;普通图恒不发射(组合根按快照 board_variants 空判)。
func play_board_variant_banner(text: String) -> void:
_fx_banners += 1
var banner := Panel.new()
banner.mouse_filter = Control.MOUSE_FILTER_IGNORE
banner.add_theme_stylebox_override("panel", UiKit.panel_flat(Color(UiKit.BG_OVERLAY, 0.88), UiKit.GOLD_DEEP, 8, 2))
var lab := UiKit.label(text, 22, true, UiKit.GOLD)
lab.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
lab.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
lab.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
banner.add_child(lab)
banner.size = Vector2(320, 46)
banner.position = Vector2((size.x - banner.size.x) * 0.5, size.y * 0.30 + 52.0) # 轮横幅下方叠行(首轮同刻两横幅不重叠)
banner.z_index = 4
add_child(banner)
if UiKit.motion_scale < 1.0:
var st := get_tree().create_timer(BANNER_DWELL)
st.timeout.connect(banner.queue_free)
return
banner.modulate.a = 0.0
var tw := banner.create_tween()
tw.tween_property(banner, "modulate:a", 1.0, UiKit.motion(0.15))
tw.tween_interval(UiKit.motion(BANNER_DWELL))
tw.tween_property(banner, "modulate:a", 0.0, UiKit.motion(0.25))
tw.tween_callback(banner.queue_free)
+162 -2
View File
@@ -80,6 +80,7 @@ func _run_core_smoke(db, rng) -> void:
_smoke_variation_framework()
_smoke_variant_placement(1)
_smoke_variant_placement(2)
_smoke_global_variant()
_smoke_full_battle(1, 0, "L1 · 地精")
_smoke_full_battle(2, 0, "L2 · 熊地精")
_smoke_level()
@@ -1265,8 +1266,8 @@ func _mk_stream(stream_name: String, scope: int) -> RandomNumberGenerator:
func _smoke_variation_framework() -> void:
print("--- 地形变异 框架面(首批四类型 + 候选池门控 + 跨字段互锁)---")
check(_db.variation.rows.size() == 6, "变异清单 6 行(荆棘丛/藤蔓缠绕/岩浆/烬覆 + 落石/矿尘——首批类型定稿批 + 第三关内容批)")
check(_db.variation.validate().is_empty(), "变异表校验零错误(6 行全过域与跨字段互锁)")
check(_db.variation.rows.size() == 7, "变异清单 7 行(荆棘丛/藤蔓缠绕/岩浆/烬覆 + 落石/矿尘 + 贫矿脉——首批类型定稿批 + 第三关内容批 + 全局作用域变异首发批)")
check(_db.variation.validate().is_empty(), "变异表校验零错误(7 行全过域与跨字段互锁——含 scope=global 三互锁)")
var pool1_ids: Array = []
for r in _db.variant_pool(1, "dungeon"):
pool1_ids.append(String(r.variant_id))
@@ -1300,6 +1301,165 @@ func _errs_has_cross_field(errs: Array) -> bool:
return false
# ---- 全局作用域变异 首发批断言面(2026-10-04 迭代 14 ③号卡——T0-T5 集中:互锁/门控三维/
# 替换制/零取号/资源面偏斜守恒与合成序/快照投影/呈现面锚)----
# 取号计数桩(variant_place 零取号断言——子类拦截计数,派生与取数语义零改动)
class _CountVariantRng extends RngServiceCore:
var variant_calls := 0
func open_stream(purpose: String) -> RandomNumberGenerator:
if purpose == "variant_place":
variant_calls += 1
return super.open_stream(purpose)
func _smoke_global_variant() -> void:
print("--- 全局作用域变异 首发批(门控三维 + 替换制 + 资源面偏斜)---")
# ① 跨字段互锁负样本(resource_face ⟺ scope=global 三条 + effect_value 新域 [0,50])
var vt = load("res://data/schemas/variation_table.gd").new()
vt.rows.assign([{"variant_id": "g1", "display_name": "负甲", "unlock_level": 2, "scope": "region",
"effect": "resource_face", "effect_value": 30, "trigger": "always", "placement": "any",
"board_types": [], "counter_items": []}])
check(_errs_has_cross_field(vt.validate()), "互锁负样本③:resource_face + scope=region 被拒(resource_face ⇒ global)")
vt.rows.assign([{"variant_id": "g2", "display_name": "负乙", "unlock_level": 2, "scope": "global",
"effect": "hide_number", "effect_value": 0, "trigger": "always", "placement": "any",
"board_types": [], "counter_items": []}])
check(_errs_has_cross_field(vt.validate()), "互锁负样本④:scope=global + effect=hide_number 被拒(global ⇒ resource_face)")
vt.rows.assign([{"variant_id": "g3", "display_name": "负丙", "unlock_level": 2, "scope": "global",
"effect": "resource_face", "effect_value": 30, "trigger": "on_open", "placement": "any",
"board_types": [], "counter_items": []}])
check(_errs_has_cross_field(vt.validate()), "互锁负样本⑤:scope=global + trigger=on_open 被拒(global ⇒ always 板级恒在)")
vt.rows.assign([{"variant_id": "g4", "display_name": "负丁", "unlock_level": 2, "scope": "global",
"effect": "resource_face", "effect_value": 30, "trigger": "always", "placement": "closed_only",
"board_types": [], "counter_items": []}])
check(_errs_has_cross_field(vt.validate()), "互锁负样本⑥:scope=global + placement=closed_only 被拒(global ⇒ any 无格子布置域)")
vt.rows.assign([{"variant_id": "g5", "display_name": "负戊", "unlock_level": 2, "scope": "global",
"effect": "resource_face", "effect_value": 51, "trigger": "always", "placement": "any",
"board_types": [], "counter_items": []}])
var vterr: Array = vt.validate()
var domain_hit := false
for e in vterr:
if String(e.get("category", "")) == "domain":
domain_hit = true
check(domain_hit, "互锁负样本⑦:resource_face effect_value=51 越域 [0,50] 被拒(不适用 flat_damage [1,9] 加法核)")
# ② 门控第三维(节点身份——global 行仅 boss/elite 入池;缺省/普通节点静默跳过零报错)
var pool_boss_ids: Array = []
for r in _db.variant_pool(2, "underdark", "boss"):
pool_boss_ids.append(String(r.variant_id))
check(pool_boss_ids == ["magma", "ash", "skewed_veins"], "门控三维:L2 underdark boss 池 = region 两行 + 贫矿脉(board_types ∅ 通配)")
var pool_battle_ids: Array = []
for r in _db.variant_pool(2, "underdark", "battle"):
pool_battle_ids.append(String(r.variant_id))
check(pool_battle_ids == ["magma", "ash"], "门控三维:battle 节点静默跳过 global 行(普通图零报错零警告)")
check(_db.variant_pool(2, "underdark").is_empty() == false and _db.variant_pool(2, "underdark").size() == 2,
"门控三维:缺省双参调用 = global 行跳过(既有调用口径零扰动)")
check(_db.variant_pool(1, "underdark", "boss").is_empty(), "L1 Boss 免疫:unlock_level=2 门控在 boss 节点同样生效(教学保护带 B)")
check(_db.global_variant_row(2, "underdark", "battle").is_empty(), "全局决议:battle 节点恒无全局型")
check(_db.global_variant_row(2, "underdark", "boss").get("variant_id", "") == "skewed_veins", "全局决议:L2 boss 取贫矿脉(确定性单行)")
check(_db.global_variant_row(1, "underdark", "boss").is_empty() and _db.global_variant_row(1, "dungeon", "boss").is_empty(),
"全局决议:L1 boss 全局池空 → 空行(兜底回落承载)")
check(_db.global_variant_row(2, "underdark", "elite").get("variant_id", "") == "skewed_veins", "elite 前向词位:boss 同池(首发零 elite 表行——词表位不造行)")
# ③ 替换制 + 零取号:L2 Boss 图恰一行板级变异 + 零 region 格 + variant_place 零消费
var crng = _CountVariantRng.new()
crng.set_master_seed(42)
var boss_settlement = load("res://core/battle_orchestrator.gd").new(_db, crng)
var boss_ok: bool = boss_settlement.begin_battle({"level_index": 2, "node_depth": 4, "hero_hp": int(_db.hero.max_hp), "node_type": "boss"})
check(boss_ok, "L2 Boss 战斗启动(node_depth=4 boss 节点——替换制断言载体)")
if boss_ok:
var bb = boss_settlement.minesweeper.current_board()
check(_arr_str_eq(bb.board_variant_ids(), ["skewed_veins"]), "替换制:Boss 图 board_variants 恰一行 = 贫矿脉")
check(bb.variants.is_empty(), "替换制:Boss 图零 region 变异格(无格子级变异标记——呈现件闲置合法态)")
check(crng.variant_calls == 0, "零取号合法态:Boss 图 variant_place 零消费(全局取用确定性)")
var snap: Dictionary = boss_settlement.presentation_snapshot()
check(_arr_str_eq(snap.get("board_variants", []), ["skewed_veins"]), "快照投影:board_variants 呈现面(横幅/角标唯一读取面)")
# Boss 图确定性:同种子两遍逐位相同
var crng2 = _CountVariantRng.new()
crng2.set_master_seed(42)
var boss2 = load("res://core/battle_orchestrator.gd").new(_db, crng2)
if boss2.begin_battle({"level_index": 2, "node_depth": 4, "hero_hp": int(_db.hero.max_hp), "node_type": "boss"}):
var bb2 = boss2.minesweeper.current_board()
check(_arr_str_eq(bb2.board_variant_ids(), ["skewed_veins"]) and crng2.variant_calls == 0,
"确定性:同种子 Boss 图两遍 board_variants/取号逐位相同")
# ④ 资源面偏斜投影(RewardEconomy 纯函数面——守恒/白名单/构造例/合成序)
var eco = load("res://core/reward_economy.gd").new(_db, load("res://core/rng_service.gd").new())
var base_rows: Array = eco._rollable_rows()
var base_sum: int = eco._pool_weight(base_rows)
check(base_sum == 77, "偏斜基线:正向池现行合计 77(挖掘风险批口径)")
eco.board_skew = 0
var off_rows: Array = eco._biased_cell_rows()
check(off_rows.size() == base_rows.size() and _rows_weights_equal(off_rows, base_rows), "off 态零扰动:board_skew=0 行集与基线逐位相同(不进投影域)")
eco.board_skew = 30
var on_rows: Array = eco._biased_cell_rows()
check(eco._pool_weight(on_rows) == 77, "合计守恒:偏斜后正向池合计 = 77(整数最大余数重归一)")
var wmap := _rows_weight_map(on_rows)
check(wmap.get("weaken", -1) == 8 and wmap.get("ap_up", -1) == 6 and wmap.get("gp_coin", -1) == 2,
"白名单豁免:weaken/gp/action 三行偏斜后逐位不动")
check(wmap.get("heal_minor", -1) == 3 and wmap.get("ac_up", -1) == 7, "生存族下调:heal 4→3 / defense 11→7(v=30 构造例)")
check(wmap.get("attack_up", -1) == 15 and wmap.get("spark_aoe", -1) == 18 and wmap.get("pierce_strike", -1) == 9 and wmap.get("magic_bolt", -1) == 9,
"进攻族上浮:attack 14→15 / blast 16→18 / pierce 8→9 / magic 8→9(v=30 构造例,等比上浮守恒)")
eco.board_skew = 30
eco.luck_bias = 2
var combo_rows: Array = eco._biased_cell_rows()
var cw := _rows_weight_map(combo_rows)
check(eco._pool_weight(combo_rows) == 77 + 4 * 2, "合成序:图级偏斜先(乘法面)件级 luck_bias 后(加法 +2×四稀有类)——合计 77+8")
check(cw.get("heal_minor", -1) == 5 and cw.get("gp_coin", -1) == 4 and cw.get("pierce_strike", -1) == 11 and cw.get("magic_bolt", -1) == 11,
"合成序构造例:skew(heal 3)+2=5 / gp 2+2=4 / pierce 9+2=11 / magic 9+2=11(图级定型后玩家构筑叠加)")
eco.luck_bias = 0
eco.board_skew = 50
var v50: Dictionary = _rows_weight_map(eco._biased_cell_rows())
check(eco._pool_weight(eco._biased_cell_rows()) == 77 and int(v50.get("heal_minor", -1)) > 0, "域上界 v=50:守恒成立且逐行权重恒正(域 [0,50] 安全)")
# 普通图摇号全链路确定性(off 路径)——同种子普通图资源映射逐位相同(golden 对拍另有批前快照)
var nrng = load("res://core/rng_service.gd").new()
nrng.set_master_seed(42)
var normal1 = load("res://core/battle_orchestrator.gd").new(_db, nrng)
normal1.begin_battle({"level_index": 2, "node_depth": 0, "hero_hp": int(_db.hero.max_hp)})
var n1: Dictionary = _board_resource_dump(normal1)
var nrng2 = load("res://core/rng_service.gd").new()
nrng2.set_master_seed(42)
var normal2 = load("res://core/battle_orchestrator.gd").new(_db, nrng2)
normal2.begin_battle({"level_index": 2, "node_depth": 0, "hero_hp": int(_db.hero.max_hp)})
check(n1 == _board_resource_dump(normal2) and not n1.is_empty(), "确定性:同种子普通图布置/摇号两遍逐位相同(off 全链路)")
func _arr_str_eq(a, b: Array) -> bool:
var arr: Array = a if a is Array else []
if arr.size() != b.size():
return false
for i in arr.size():
if String(arr[i]) != String(b[i]):
return false
return true
func _rows_weights_equal(a: Array, b: Array) -> bool:
if a.size() != b.size():
return false
for i in a.size():
if String(a[i].get("reward_id", "")) != String(b[i].get("reward_id", "")) or int(a[i].weight) != int(b[i].weight):
return false
return true
func _rows_weight_map(rows: Array) -> Dictionary:
var m := {}
for r in rows:
m[String(r.get("reward_id", ""))] = int(r.weight)
return m
func _board_resource_dump(settlement) -> Dictionary:
var b = settlement.minesweeper.current_board()
var dump := {}
for c in b.variants.keys():
dump["v:%d,%d" % [c.x, c.y]] = ",".join(b.variants[c])
for y in b.height:
for x in b.width:
var ident = settlement._reward_economy.query_identity(Vector2i(x, y))
if ident != null:
dump["r:%d,%d" % [x, y]] = String(ident.reward_id)
return dump
# ---- 地形变异 布置段(首批类型定稿批 2026-09-19——棋盘设置顺序第 4 步断言面)----
# 布置发生在编排器战斗初始化(install 初始展开 + roll_board 资源格之后),生成器产物零变异——
# 本段经 begin_battle 走完整初始化序后断言:门控一致性 / 布置域 / 数量公式 / 连通片上限 / 确定性。
+11 -1
View File
@@ -81,13 +81,18 @@ func _test_progress_resolution(db) -> void:
Kit.check("关卡越最大行 clamp 取最大关卡行", int(high.get("level_index", -99)) == max_l)
# ---- 变异池门控(unlock_level 闸 + ∅ board_types 通配)----
# ---- 变异池门控(unlock_level 闸 + ∅ board_types 通配 + 节点身份第三维)----
func _test_variant_pool_gate(db) -> void:
var rows: Array = db.variation.rows
var gated_row := {}
var wildcard_row := {}
var global_row := {}
for row in rows:
if String(row.get("scope", "region")) != "region":
if global_row.is_empty():
global_row = row # global 行第三维门控另测(全局作用域变异批 2026-10-04)
continue
var tags: Array = row.get("board_types", [])
if gated_row.is_empty() and not tags.is_empty():
gated_row = row
@@ -104,6 +109,11 @@ func _test_variant_pool_gate(db) -> void:
var u2: int = int(wildcard_row.unlock_level)
var any_pool: Array = db.variant_pool(u2, "nonexistent_board_type_tag")
Kit.check("∅ board_types 行通配(任一 board_type 命中)", _rows_contain(any_pool, wildcard_row))
if not global_row.is_empty():
var u3: int = int(global_row.unlock_level)
Kit.check("global 行 boss 节点入池(board_types ∅ 通配)", _rows_contain(db.variant_pool(u3, "nonexistent_board_type_tag", "boss"), global_row))
Kit.check("global 行缺省双参调用跳过(既有调用口径零扰动)", not _rows_contain(db.variant_pool(u3, "nonexistent_board_type_tag"), global_row))
Kit.check("global 行 battle 节点静默跳过(门控兜底零报错)", not _rows_contain(db.variant_pool(u3, "nonexistent_board_type_tag", "battle"), global_row))
func _rows_contain(pool: Array, row: Dictionary) -> bool:
+1 -1
View File
@@ -59,7 +59,7 @@
| 迭代 11+ | **✅ 三批已落籍(2026-10-03,台账 323-325)**:①魔法道具同调实施批 bc17b66(冒烟 645/0→671/0 基线演进)→ ②GP 商店房重构批 395b2ab(共享池账本+抽 3 买 1 全重抽+A=1.8/b=1.1 provisional+MC off 对拍逐位 PASS+on 新锚 N=60)→ ④视野迷雾实施批 e6260a5(菱形灯光区 R8+区外全黑+暗淡记忆态+探针 case⑮;纯呈现 MC 零跑)——各批合并后主区全量冒烟复跑全绿;**迭代 11 门=待出口人闸关闭(人闸材料包=design/qa/m4-iter11-exit-package-2026-10-03.md:三批检查单+追认清单 18 项+迷雾目检指引+读数报告)**。原登记:**2026-10-03 用户裁迭代 11 范围(三批,推荐序)**:①魔法道具同调实施批 → ②GP 商店房重构批 → ④视野迷雾实施批(各批独立出口闸;同调批先行——商店批共享池账本与通关率复测建在 aux 卡退役后的终局池上,读数只锚一次;迷雾批纯呈现不扰读数,序位可穿插);**反制批移迭代 12**(前置=双层 BD 外部调研+仲裁后重新立项;2026-10-03 用户终裁=同调位反制道具层级错配失败设计废弃,「每变异≥1反制道具」契约作废——地形变异.md v0.6/魔法道具.md v0.8 同批落文(06 条目已收口移除));**Beta 方向立项撤出本窗口**(待 Alpha 内容填充+试玩轮次后再议);关卡内容扩展留讨论位(世界观设定待用户补正主——摩索不达城 repo 无载)。↓ 原登记:反制批 Alpha · **魔法道具同调实施批**(任务书 v1.1 全裁 P1-P8=`design/research/任务书-魔法道具同调实施批-2026-10-02.md`,2026-10-02 用户裁 P7 乙归本窗口,发令即开工——任务书含 T0-T10 可升 loop 计划书)· **GP 商店房重构批**(2026-10-02 用户裁三选一同构化:买一全重抽/重抽绑购买/价格=基价×b^(关序−1)×A^(进店已购次数)〔系数归 game-balancer 研究〕,取代 09-20 无刷新裁决——06「GP 商店房重构」条在册待立项)· 关卡内容扩展 · Beta 方向立项(原迭代 10+ 三主题顺延——迭代 10 位已由奖励结构重构批占用,2026-09-30 用户拍板 P-E;各批顺序按 Alpha 读数定;含营地 2D 画面议题——2026-09-29 裁缓至此再议) | M-3 出口闸(**已解**——2026-10-03 迭代 9 出口闸收官:M-3 关闭、Alpha 到手) | 立项时按「迭代粒度界定」拆任务卡 |
| 迭代 12 | **双层 BD 实施批(反制批位移承接——变异应对局内化在本批落地)**:**2026-10-03 用户五裁全落**=R1 甲(树形态融合案:主干脊柱 row-gating+三脉+彩蛋 ≤3+A/B 集中同调脉)/R2 乙(**两层全入本迭代**:批次一 T0-T7=机制件基建+七流派全量铺〔R3 乙〕+地形转化件+商店保底+MC 锚;批次二 T8-T10=天赋树+存档 v4+营地 UI 重构;超软时间盒切 12/12b,切分点=批次一出口)/R3 乙(七流派批次一全量铺)/R4 甲(**信息型永不对冲**+复查闸=T10 呈报信息型真人读数仅呈报不提案;净化工兵仅限伤害型、清除工具件族不做、深挖钻头改非信息税设计)/R5 甲(喂雷流不做,06 留正式待办+kill-switch 判据)。未落地备选内容已自包含迁 06「双层 BD 延期与备选内容总登记」。设计事实源=`design/research/双层BD体系-整合定稿-2026-10-03.md`(双模型并行调研仲裁版),任务书=`design/research/任务书-双层BD实施批-2026-10-03.md`(已定稿)。**✅ 已全批落籍(2026-10-04,台账 328-333)**:TP0 令牌池先行(normal 重锚)→批次一 T0-T7(27 件七流派+MC 成型锚 L1 5%→75% 分岔+红线自检①过)→批次二 T8-T10(天赋树 33 节点+存档 v5+营地树 UI+A/B 面 0.0pp)一次合并 e780063;试玩反馈四连修复(钻头 AP 锁死/v2 收益重投/流派件呈现双界面/清图奖励 toast)至 c43276d;批末冒烟 718/0+run_all 15+探针绿+doc 三闸基线同款+熵增 PASS;**出口人闸待用户**(人工检查清单=台账 328-333+design/qa/m4iter12 两报告);前置=迭代 11 三批出口+M-4 数值批令牌池落地+商店批共享池 | 迭代 11 出口 | T0-T10 两段式(任务书 §四) |
| 迭代 13 | **工程债与测试基建批(含 D6 爆破工兵包实施)**:六条目=ui_click_probe 完整局适配(D1——分派链序修正+停点/锁期/重放三态断言)/探针只读出口(D2——六出口 26 直入清零)/ArmedTimer helper(D3——P4 乙三处计时收口缝零动)/main.gd 二期瘦身(D4——bonus_interact_controller+camp_shop_presenter 拆件 1370→1119,家族②契约3绑定面留置;~900±50 锚差=族级清单上限不自洽已归因)/aux 二期合并(T5 判不合收口)/杂项尾差四件(D5)/爆破工兵包中立移除雷格(D6——P1 甲邻接冻结/P2 甲退色降档,判定逻辑零改动,充能表驱动零新码)。**✅ 已落籍(2026-10-04,台账 342)**:worktree m4iter13-debt-20261004 八提交 cd7d3ea…2402877 合并 eff8cb8;闸=冒烟 718/0(断言数持平基线)+run_all 15+click 三种子绿+全探针绿+doc 三闸零新增+熵增 PASS+MC 零跑(静态零漂移证明);合并后主区全量复跑同绿 | 迭代 12 出口 | T0-T9 ≈4.8-5.3d(知情超限单批,实际单会话) |
| 迭代 14 | **初始展开收窄批(2026-10-04 用户拍板甲乙混合立项)**:甲=先布后删剃雷域收窄至出生 3×3∪外扩 r 环(参数化半径,现值 r=1——开阔地均值从板面 66.5% 根因性降至约三成)+乙=生成重掷闸 R₀≤cap(合法性门序列、cap=板面 30% 锚〔10×10=30/12×12=43/13×13=51〕、重试耗尽走既有三分出口);**玩法侧零改动路线**(排雷玩法「初始展开恰等」验收原样为真,minesweeper_rules.gd 零 diff);裸数字截断路否决退役(可见 0 格+未开邻居=扫雷不可能态)。可行性报告=`design/research/研究-初始展开收窄可行性-2026-10-04.md`,任务书=`design/research/任务书-初始展开收窄批-2026-10-04.md`(T0-T8≈5.25d,读数批 T5-T6 可切独立后批;拍板点 P1-P3 全读数后置;停机点 S1 相变警戒/S2 带越界回调)。**②挖掘风险不等式判式换代批(2026-10-04 用户裁编入本迭代,作为迭代内需求)**:判式三层换代(条款2 标中旗锚/条款3 聚合健康式「(1−ρ̂)E_dig−ρ̂V_mine≥0」/旗边际引理+条件二旗溢价)+β 比值带判读 [1.2,2.5](u=3 登记态)+标中兑付溢价 δ=1.25(形态 a 兑付公式一处·雷安同池冻结不动)+runsum 旗行为五字段+audit 工具常量刷新(池 77/直伤 6-8-8/AP 8);裁决全落零新拍板点(方案报告=`design/research/方案-挖掘风险不等式修订-2026-10-04.md` §九),任务书=`.zcode/plans/mine-inequality-revision-miniloop-plan-2026-10-04.md`(T0-T5≈2.5d;条件二 T3 落文按登记已知破·T4 机制转绿;契约红线=DamageController 零改/直伤雷 6-8-8 与 p_perfect 不动——iter8 缺口四选一解绑独立在案;开工门=U0)。**③全局作用域变异首发批(2026-10-04 用户拍板立项——调研报告 P1-P8+盘问 Q1-Q4 全按推荐案落,批内序位待排)**:L2/L3 Boss 图恒定一型 scope=global 变异,首发型=**案A 资源面·微贫向偏斜**(正向格面池合计不变、进攻族 attack/blast/pierce/magic 权重上浮/生存族 heal/defense 明显下调、EV 微降 3-5% provisional、gp/action 白名单不动;v1.0「沃土+雷密对冲」形勘误作废——雷数为生成器事实、布置段不可加,改生成端=踩结构面否决理由);**替换制**(Boss 图不再布 region 片——L2 完美 Boss 承伤 55.8% 已越带不叠加;迭代 12 四件地形应对件在 Boss 图失效=知情代价,registry/调参日志随批登记);L1 Boss 免疫(带B [50,85] 教学保护);三层预告(开战横幅+HUD 常驻角标+帮助手册行);带A 判读后置 M-4(落地 off/on 对拍只测不判;off 基线=替换制后零变异 Boss 图,与现行带 region 片 Boss 图语义不同须注明);偏运硬币合成序=图级先件级后(代拍随批锚登记)。调研报告(事实源,v1.1 裁决落盘)=`design/research/调研-全局作用域变异设计空间-2026-10-04.md`,任务书=`design/research/任务书-全局作用域变异首发批-2026-10-04.md`(T0-T8≈5.75d,读数批 T7 可切独立后批→主体≈5.25d;零新拍板点·provisional 追认单随批;停机点 S1 普通图逐位漂移/S2 读数越带只呈报/S3 互锁误伤;开工门=U0;**⑥A4 批开工门含本批出口——本批落地图级偏斜投影点为⑥合成链中段**)。与①②互不撞(收窄=普通图初始展开轴/判式=不等式判读口径/全局变异=Boss 图资源面轴),出口读数各自分开归因。**④技能池执行批(2026-10-04 用户点名入列——调研+四裁+任务书全齐,06 Alpha 验证条目随之收口)**:文档五件(敌人系统.md 池构成表补 L2/L3 五敌种行/护甲列改读表口径/Boss 三代错峰句/意图呈现节补解锁弹出规格/版本 v0.13+EV 锚整数口径重登记+enemy.tres 批注消歧)+**新机制一件=Boss 半血解锁新独占伤害技**(三 Boss 血量 ≤50%〔用户口径定死〕解锁:酋长「震地怒击」类 ×2.5/CD4·卓尔遏毒类 ×2.0/CD3·石君王「岩崩」类 ×2.5/CD4——参考档即工作值,命名 T5 定稿、倍率冷却 provisional 归调参;enemy.tres 池条目扩 unlock_hp_pct 键〔int [1,99] 缺省无=无门槛〕;未解锁条目双面过滤不进摇号与保底集合;解锁出一次归因明细行「XX 解锁了 YY」);首拍加权取消(杂鱼纹理注销——巨蜘蛛 52% 读数已被 Package B 抬血自愈、地精两行终裁不加工);呈现=明细行+既有类型级预告+解锁时技能名一次性弹出(零动画资产、不改演出);裁决 D1-D8 零待裁;任务书=`design/research/任务书-技能池执行批-2026-10-04.md`(T0-T7≈4.25d,切分预案在册)——开工=用户发令升计划书。**⑤魔法提灯 +2 效果接线(小卡)**:零调研直入——2026-09-30 拍板④已裁(灯甲视野外扩 +2 格、类型微光不随视野扩),迷雾批已Line truncated
| 迭代 14 | **初始展开收窄批(2026-10-04 用户拍板甲乙混合立项)**:甲=先布后删剃雷域收窄至出生 3×3∪外扩 r 环(参数化半径,现值 r=1——开阔地均值从板面 66.5% 根因性降至约三成)+乙=生成重掷闸 R₀≤cap(合法性门序列、cap=板面 30% 锚〔10×10=30/12×12=43/13×13=51〕、重试耗尽走既有三分出口);**玩法侧零改动路线**(排雷玩法「初始展开恰等」验收原样为真,minesweeper_rules.gd 零 diff);裸数字截断路否决退役(可见 0 格+未开邻居=扫雷不可能态)。可行性报告=`design/research/研究-初始展开收窄可行性-2026-10-04.md`,任务书=`design/research/任务书-初始展开收窄批-2026-10-04.md`(T0-T8≈5.25d,读数批 T5-T6 可切独立后批;拍板点 P1-P3 全读数后置;停机点 S1 相变警戒/S2 带越界回调)。**②挖掘风险不等式判式换代批(2026-10-04 用户裁编入本迭代,作为迭代内需求)**:判式三层换代(条款2 标中旗锚/条款3 聚合健康式「(1−ρ̂)E_dig−ρ̂V_mine≥0」/旗边际引理+条件二旗溢价)+β 比值带判读 [1.2,2.5](u=3 登记态)+标中兑付溢价 δ=1.25(形态 a 兑付公式一处·雷安同池冻结不动)+runsum 旗行为五字段+audit 工具常量刷新(池 77/直伤 6-8-8/AP 8);裁决全落零新拍板点(方案报告=`design/research/方案-挖掘风险不等式修订-2026-10-04.md` §九),任务书=`.zcode/plans/mine-inequality-revision-miniloop-plan-2026-10-04.md`(T0-T5≈2.5d;条件二 T3 落文按登记已知破·T4 机制转绿;契约红线=DamageController 零改/直伤雷 6-8-8 与 p_perfect 不动——iter8 缺口四选一解绑独立在案;开工门=U0)。**③全局作用域变异首发批(2026-10-04 用户拍板立项——调研报告 P1-P8+盘问 Q1-Q4 全按推荐案落,批内序位待排)**:L2/L3 Boss 图恒定一型 scope=global 变异,首发型=**案A 资源面·微贫向偏斜**(正向格面池合计不变、进攻族 attack/blast/pierce/magic 权重上浮/生存族 heal/defense 明显下调、EV 微降 3-5% provisional、gp/action 白名单不动;v1.0「沃土+雷密对冲」形勘误作废——雷数为生成器事实、布置段不可加,改生成端=踩结构面否决理由);**替换制**(Boss 图不再布 region 片——L2 完美 Boss 承伤 55.8% 已越带不叠加;迭代 12 四件地形应对件在 Boss 图失效=知情代价,registry/调参日志随批登记);L1 Boss 免疫(带B [50,85] 教学保护);三层预告(开战横幅+HUD 常驻角标+帮助手册行);带A 判读后置 M-4(落地 off/on 对拍只测不判;off 基线=替换制后零变异 Boss 图,与现行带 region 片 Boss 图语义不同须注明);偏运硬币合成序=图级先件级后(代拍随批锚登记)。调研报告(事实源,v1.1 裁决落盘)=`design/research/调研-全局作用域变异设计空间-2026-10-04.md`,任务书=`design/research/任务书-全局作用域变异首发批-2026-10-04.md`(T0-T8≈5.75d,读数批 T7 可切独立后批→主体≈5.25d;零新拍板点·provisional 追认单随批;停机点 S1 普通图逐位漂移/S2 读数越带只呈报/S3 互锁误伤;开工门=U0;**⑥A4 批开工门含本批出口——本批落地图级偏斜投影点为⑥合成链中段**)。与①②互不撞(收窄=普通图初始展开轴/判式=不等式判读口径/全局变异=Boss 图资源面轴),出口读数各自分开归因。**✅ 实施批落地(2026-10-04,worktree m4iter14-gvar-20261004 台账 345)**:T1-T8 实施批全落(T7b MC 读数批按切分预案切独立后批,跑批待用户批准)——skewed_veins 贫矿脉行+互锁三条+effect_value [0,50]/门控第三维节点身份/替换制+兜底回落/装板序全局决议前置(数据依赖调和,出口报告在册)/资源面偏斜投影(整数最大余数守恒 77+合成序图级先件级后)/三层预告三层全接/七正主落文+06 收口;闸=冒烟 747/0(+29)+run_all 15+golden 普通图逐位 12/12 全等+六探针+三闸熵增终录见批报告 design/qa/m4iter14-gvar-exit-report-2026-10-04.md(Q3 四件应对件知情代价登记+静态推演+provisional 追认单+人闸目检清单);**③出口成立——⑥A4 开工门解一半**(另半=②出口);off/on 双档读数待 T7b(带 A 判读归 M-4 只测不判)。**④技能池执行批(2026-10-04 用户点名入列——调研+四裁+任务书全齐,06 Alpha 验证条目随之收口)**:文档五件(敌人系统.md 池构成表补 L2/L3 五敌种行/护甲列改读表口径/Boss 三代错峰句/意图呈现节补解锁弹出规格/版本 v0.13+EV 锚整数口径重登记+enemy.tres 批注消歧)+**新机制一件=Boss 半血解锁新独占伤害技**(三 Boss 血量 ≤50%〔用户口径定死〕解锁:酋长「震地怒击」类 ×2.5/CD4·卓尔遏毒类 ×2Line truncated
## 执行纪律(2026-09-27 用户立规)